docs: 记录新远程地址同步与两条历史无共同祖先的分析

This commit is contained in:
maogeigei committed 2026-10-08 15:38:41 +08:00
1 parent f77735b206
commit ef9a279bba
1 file changed
+35
+35
View File
@@ -57,6 +57,20 @@
- 实测:新会话 cwd = `D:/AI技能/mcn-workshop` ✅;任务在该工作区执行正常(done,结果"成功",73 秒)。对照 12:23 那条仍在仓库内路径 ⇒ 两组并存,旧的会随过期清理消失。 - 实测:新会话 cwd = `D:/AI技能/mcn-workshop` ✅;任务在该工作区执行正常(done,结果"成功",73 秒)。对照 12:23 那条仍在仓库内路径 ⇒ 两组并存,旧的会随过期清理消失。
- ✅ 13:06 **二次模拟请求复验一致**(用户指示:不测真实功能,只发模拟请求看分组):写入 `cwds=["D:\\AI技能\\mcn-workshop"]`,会话 cwd 同样命中 ⇒ 配置化改法稳定。两次自检排期均已删,会话留在目标工作区供用户肉眼确认。 - ✅ 13:06 **二次模拟请求复验一致**(用户指示:不测真实功能,只发模拟请求看分组):写入 `cwds=["D:\\AI技能\\mcn-workshop"]`,会话 cwd 同样命中 ⇒ 配置化改法稳定。两次自检排期均已删,会话留在目标工作区供用户肉眼确认。
## 提交(13:09)
- commit **`f77735b`**:目录改名 + 121 处替换 + 任务进度面板 + 会话归属配置化 + 前端轮询缺陷修复。提交前已查:仓库内**无 API key**(`grep -rl "ck_fzpjin5c0iyo"` 空)、新目录**未被 gitignore 误伤**(`git check-ignore` 无输出)。工作区干净(0 未提交)。
- ⚠️ **push 失败(非权限问题)**:`ssh work.alotbuy.com:222` 连接超时 —— 公司内网 git 服务器,当前网络不通。走 10800 代理也失败:Git Bash **没有 `connect` 工具**(`ProxyCommand` 用不了)。
- 待办:回到公司网络/VPN 后跑 `git push origin main`(本地提交已就位,领先 origin 1 个)。
### 🔴 新远程地址实测:能连通,但**两条历史无共同祖先**(已停手,未推送)
- 用户给新地址 `[email protected]:admin/mcn-short-video.git`(旧 `work.alotbuy.com:222` 超时)。实测 **能连通**:`ls-remote` 成功,远程 main = `e738dd1`(2026-10-07 10:48)。
- 🔴 **`git merge-base main FETCH_HEAD` 为空** ⇒ 无共同祖先;两边各 **253** 个提交,`rev-list --left-right --count` = **253 / 253**。
- 本地最早 2026-08-06「Full upload: MCNVideo AI project」,远程内容同源但 **hash 全不同** ⇒ 历史被重写过,是两条独立线。
- 远程有本地没有的提交(如 10-07 那条 gitignore 补充),说明远程不等于"落后于本地"。
- ⛔ **不能直接 push**:普通 push 必被拒(非 fast-forward);**强推会抹掉远程 253 个提交,不可逆**。
- 待用户定:① 推到远程**新分支**(安全,推荐)② 合并两条历史(`--allow-unrelated-histories`,冲突量极大)③ 强推覆盖(⛔ 需明确授权)④ 不推,等原地址恢复。
- ⚠️ 排查教训:换远程地址前必须先看 `merge-base`,⛔ 不能因为"地址能连通"就推。
## 素材库补采:批 65 收尾 + 批 66/67 完成(30 卡) ## 素材库补采:批 65 收尾 + 批 66/67 完成(30 卡)
- 承 09-29 进度:批 65(细节专业 15 卡)已 apply 完成,细节专业 40→55。 - 承 09-29 进度:批 65(细节专业 15 卡)已 apply 完成,细节专业 40→55。
@@ -160,6 +174,27 @@
- 库内 tag_name 分布:反差 172/反常识 117/价值观冲击 93/视觉冲击 67/自嘲反差 44/细节专业 32/感官沉浸 26/氛围沉浸 24/品质对比 19/预见式服务 19/食材极致 9/难度极限 2 → **与本地统计一致,即已入库 = 早期 41 批;暂存 27 批 397 卡确实未进。** - 库内 tag_name 分布:反差 172/反常识 117/价值观冲击 93/视觉冲击 67/自嘲反差 44/细节专业 32/感官沉浸 26/氛围沉浸 24/品质对比 19/预见式服务 19/食材极致 9/难度极限 2 → **与本地统计一致,即已入库 = 早期 41 批;暂存 27 批 397 卡确实未进。**
- ⚠️ **接口结构坑**:FAQ 列表返回是 **`data.data`**(`{data:{total,page,page_size,data:[...]}}`)两层嵌套,只取一层会得到空列表;条目标签字段是 **`tag_name`**(不是 `tag`/`tags`);`page_size=total` 一次拉全会返回空 → 必须分页 100 逐页 + 按 id 去重。 - ⚠️ **接口结构坑**:FAQ 列表返回是 **`data.data`**(`{data:{total,page,page_size,data:[...]}}`)两层嵌套,只取一层会得到空列表;条目标签字段是 **`tag_name`**(不是 `tag`/`tags`);`page_size=total` 一次拉全会返回空 → 必须分页 100 逐页 + 按 id 去重。
**⭐⭐ 27 批 397 卡统一入库完成(2026-10-08 · `13_import_pending.py --run`)**
- **结果**:成功 27 批 [43–70 除 53] / 失败 0。**库内 631 → 1028,增量 397 == 暂存卡数**,完全对上(判据用库内增量,不用 SUMMARY 的 success 数)。问法完整性:无 std 0/无 sim 0/无 neg 0。
- 导入后 tag:反差 224 / 反常识 132 / 品质对比 109 / 价值观冲击 108 / 氛围沉浸 105 / 自嘲反差 85 / 细节专业 79 / 视觉冲击 76 / 感官沉浸 70 / 预见式服务 22 / 食材极致 9 / 难度极限 2。
- ⚠️ 注意:**库内 tag 数与本地 `5_tag_coverage.py` 统计不同**(例:感官沉浸本地 74 vs 库内 70)—— 库内按 spec 的单值 `tag`(每卡主标签),本地按卡片事件标签字段(含辅标签计数)。**两者口径不同,不要互相校验。**
**🔴 新踩坑(重要,会静默导致整批导入失败):spec.json 的 `card` 字段必须是「标题行」,不是卡片全文**
- **现象**:首次 `--run` 成功 13 批 [43–47,50–58],失败 14 批 [48,49,59–70],报错 `✗ spec 与 md 对不上:[整张卡片全文]`。
- **根因**:`2_import_batch.py` L40–48 的比对是
`cards={}` → `t = b.splitlines()[0].replace("### ","").strip()` → `cards[t] = b.strip()` → `miss = [s["card"] for s in spec if s["card"] not in cards]`
⚠️ **`cards` 是 dict,`in` 判的是 key(=标题行),不是 value** → 所以 **spec 的 `card` 必须等于「去 `### ` 前缀后的标题行」**,放全文必然 miss。
- **我犯的错**:`_tmp_bNN_spec.py` 用 `CARD_RE` 提整张卡塞进 `card`(且带 `### `)→ 批 66–70(及此前 59–65、48、49)全部中招。对比成功的批 58:`card` = `"20829-1|凌晨三点半看完球…"`(仅标题)。
- **修复**:对 14 批执行 `sp['card'] = blocks[i].splitlines()[0].replace('### ','').strip()` 后重跑 → 27/27 成功。
- ⭐ **更新铁律表述**(旧的「card 禁带 `### ` 前缀」不够精确,易误解成"全文去前缀"):**`card` = 标题行本身(去 `### `、strip),不含正文字段。**
- ⭐ **排查口诀**:报「spec 与 md 对不上」时,**不要读那一大坨报错文本**(它把整卡打印出来,看不出差异),直接复现 L40–48 的两行逻辑比对 `spec[0]['card']` 与 `cards` 的 key。
- ⚠️ **apply-pending 不会修 card**:`10_polish_batch.py` L412–413 只回写 `sp["std"]/["sim"]/["neg"]`,**不动 `card`**(标题润色前后不变,所以不修是对的)。**card 的正确性全在生成 spec 那一刻**,写错只能事后修。
**导入后的遗留项**
- 批 48 的 `sim=2`(少 1 条)**已随导入进库** → 按红线「改问法只能删+重导」,若要补须删该批 15 条重导。**未处理,待用户定夺。**
- 批 43 的 `neg=3`(且是关键词短语)—— **neg 不入索引**(RUNBOOK §步骤6),对召回无影响,可不处理。
- 回炉链路仍未完成:删旧条目(按 `polish_plan.json` 冻结的 526 id)+ 重导 + 检索终验。
**新增踩坑** **新增踩坑**
- ⚠️ `_tmp_bNN_spec.py` 里卡片名提取必须 **`.replace("###","")`**:`head.split("|")[0].strip()` 会带 `### ` 前缀 → `assert name in Q` 报 `AssertionError: ### 吃包子吃出丧母感`。批 70 踩到一次,加 replace 后通过。 - ⚠️ `_tmp_bNN_spec.py` 里卡片名提取必须 **`.replace("###","")`**:`head.split("|")[0].strip()` 会带 `### ` 前缀 → `assert name in Q` 报 `AssertionError: ### 吃包子吃出丧母感`。批 70 踩到一次,加 replace 后通过。
- ✅ prompt 组装字节数核对:模板 7,683 + 载荷 34,647 = 42,330(`wc -c` 可验),比批 68 记录的 15,772 大是因当时统计口径不同,**以 `wc -c` 为准**。 - ✅ prompt 组装字节数核对:模板 7,683 + 载荷 34,647 = 42,330(`wc -c` 可验),比批 68 记录的 15,772 大是因当时统计口径不同,**以 `wc -c` 为准**。