框架

路径防呆与导航可达性修复报告 v5.1(2026-09-24)

驾驶舱索引: 已更新(复盘 N 份 / 归档 M 份);

optimization · 资产·机制 · optimization/报告/路径防呆与导航可达性修复报告_2026-09-24.md · 5976 B

路径防呆与导航可达性修复报告 v5.1(2026-09-24)

主题:根治「复盘文件能写入、但从驾驶舱导航页点不到」。

关联:00 驾驶舱(投资MOC)、框架/数据口径定义、optimization/报告/系统状态一致性修复报告_2026-09-23。

一、问题复述与根因(4 条,均已封堵)

#根因证据后果
R1命名必须精确匹配 ^YYYY-MM-DD 收盘复盘$旧 moc_index.classify() 只认精确名;2026-09-24收盘复盘.md(少空格)、…收盘复盘(终稿).md 一律落入 extra 被静默丢弃文件写进去了,AUTO:INDEX 永远不收录 → 导航页查无此件
R2只扫 复盘/*.md 根目录直属文件旧 collect() 用 REVIEW_DIR.glob("*.md"),非递归写进 复盘/子目录/ 的日复盘永久不可见
R3同日同类型重复文件互相覆盖旧版对同一 (日期,类型) 直接覆盖字典键,无冲突提示终稿覆盖初稿却无告警,事后无法追溯
R4moc_index.py 不是自动执行的v5.0 决策「fetch.py 不改动,发布后手动跑」;技能里是「强制步骤」但依赖人/Agent 记得一旦跳过,新快照/复盘就是零入链

附:/var/minis/shared/shared-F98F2D01_DUCKERRY 的小仓库 是 6–7 月的历史副本(无 AUTO:INDEX、最新文件停在 07 月),不是写入目标,不构成路径错位风险,但应在文档中标明以免误写。

二、修复内容

1. scripts/moc_index.py 升级 v5.1(4 项防呆)

  • 命名容错:正则改为 ^(\d{4}-\d{2}-\d{2})[ _\-·—]*收盘复盘.*$ 等,容忍少空格/多后缀/不同分隔符。
  • 递归扫描:复盘/**/*.md(排除 历史原始记录/ 归档区)。
  • 重名冲突检测:同 (日期,类型) 多份时优先规范名,并把冲突打印到 stderr。
  • 未登记告警:形如 YYYY-MM-DD …、未归类、且驾驶舱全文搜不到链接的文件才报警(已挂链的合法文档如数据复盘总汇不误报)。
  • 新增 --verify <路径>:一条命令确认「该文件是否已能从导航页点到」,退出码 0/1。
  • 新增第 5 类 🚫 数据缺失占位:G1 失败时的占位文件也能被导航页直达。

2. scripts/review_write.py 新建(唯一合法写入入口)

  • 规定唯一目录 复盘/ + 唯一命名,自动生成规范绝对路径(--print-path)。
  • 支持类型简写归一化:复盘/快照/简报/备忘/占位。
  • 已存在默认不覆盖(退出码 2),符合「不覆盖人工收盘复盘」口径;--force 才覆盖。
  • 写入后自动跑 moc_index.py 登记 + --verify 校验,输出 ✔ 导航页可直达。

3. scripts/fetch.py 发布后自动登记(非阻断)

  • 在 doc_sync_check 之前调用 moc_index,结果写入 latest.json.moc_index,日志打印

驾驶舱索引: 已更新(复盘 N 份 / 归档 M 份);命名不规范的会打印 ⚠️ 该文件写入了但导航页点不到:…。

  • 异常一律捕获,永不阻断发布(与 doc_sync_check / 债券腿同一模式)。

4. scripts/arch_check.py 升级 v5.1(10 项自检)

  • 新增 第 10 项:复盘/ 全部可从驾驶舱直达——要求驾驶舱本身有链接,而非「全库某处有链接」。
  • 检查 4 的日期正则与扫描范围改为递归 + 容错命名,与 moc_index 口径一致。

5. scripts/publish_status.sh

  • 新增 moc_index: 行,轮询时一眼看到索引是否登记、有无命名未登记文件。

6. 文档同步

  • 技能 duckerry-daily-review 升 1.5.0:新增 §1.9「复盘文件写入路径硬规则」;§1.7 改 10 项;§5 / OPEN_DAY 改为必须经 review_write.py 落盘。
  • 交接提示词 optimization/每日发布运行提示词_2026-09-23.md 的 §6.5 同步。

三、验证证据(可复核)

$ python3 scripts/review_write.py --print-path 2026-09-24 复盘
/var/minis/mounts/DUCKERRY_Warehouse/复盘/2026-09-24 收盘复盘.md

$ python3 scripts/review_write.py 2026-09-24 占位 --src /tmp/draft.md   # 端到端自测后已删除该测试件
✔ 已写入:复盘/2026-09-24 数据缺失占位.md(88 字节)
✔ 导航页可直达:复盘/2026-09-24 数据缺失占位

$ python3 scripts/moc_index.py --verify "复盘/长期记忆-2026-08-16.md"
✗ 未在驾驶舱 AUTO:INDEX 登记(导航页点不到):复盘/长期记忆-2026-08-16
  原因:文件名不符合四类命名(…)

$ python3 scripts/arch_check.py
✔ 10. 复盘/ 全部可从驾驶舱直达 | 0 个点不到        (10/10 全通过)

$ python3 scripts/doc_sync_check.py --strict
排版同步:全部一致

$ DK_DISABLE_MCAL=1 python3 tests/test_pipeline.py
Ran 29 tests in ~90s   OK      (含新增 PathGuardTests 4 项)

四、红线与回滚

  • 备份:/var/minis/shared/backup/DUCKERRY_pre_pathfix_20260923/(fetch.py / moc_index.py / 驾驶舱,含 MD5_BEFORE.txt)

改动前 md5:fetch.py=7ba14f6f…、moc_index.py=4e74d026…

  • 未改动:数据/、归档区、任何人工收盘复盘、AUTO:DATA 区块(仍由 fetch.py 生成)。
  • 未触碰判据:新脚本均只读/只登记/不阻断,不参与 L0–L4 / 信号 / 发布闸门。
  • 回滚:用备份目录内同名文件覆盖 scripts/ 与驾驶舱即可。

五、遗留

  1. 历史副本 /var/minis/shared/shared-F98F2D01_DUCKERRY 的小仓库 仍是 6–7 月状态——建议归档或明确标注「勿写入」,本轮未处理(不在写入链路内)。
  2. moc_index 自动登记只在 fetch.py 成功发布时触发;Agent 手写复盘仍须走 review_write.py(技能已强制)。
  3. 简写类型别名仅覆盖常见中文简写,英文名(如 review)未支持,按需再加。