# R1 | P0 与卫生修复（12 项，预计 0.5 天）

- 前置：无。本轮必须最先执行。
- 原则：只修不扩。每项修完跑相关校验器；全轮收尾走总纲 §5 八步。
- 证据底账：审计报告第二章（11 个 P0 均经 file:line 二次交叉验证）。

## R1.1（P0-1）OpenAlex 限流口径统一

- 现状：`skills/light-literature-search/references.md:80` 与 `SKILL.md:20` 仍写"10万次/天、10/s 共享池、免 key"；`skills/light-idea-generation/references.md:212` 已实测 2026 新政"需免费 API key、$1/天额度、看 cost_usd"。照 m01 做会全线 401。
- 修法：
  1. 把 m03 的实测结论（含实测日期）回灌 m01 references，在 m01 references 内设 **"OpenAlex 接入真相源"** 单节（key 申请方式、限流口径、计费字段、退避策略）。
  2. m01 SKILL.md 相应句子改为指向该节的一行指针。
  3. `grep -rn "100,000\|10万次\|免 key" skills/ databases/` 找出所有提及 OpenAlex 限流的位置（重点 m04/m13/m10/a09），全部改为指向 m01 真相源节，删除各自的具体数字。
- 验收：`grep -rn "100,000 次/天" skills/` 零命中；全仓库 OpenAlex 限流口径只在 m01 references 出现一处具体数字。

## R1.2（P0-2）MDPI/中文刊栏宽死锁

- 现状：`skills/light-figure-planning/SKILL.md:62` 限定 target_journal 只能取 JOURNAL_SPECS 六键；`skills/light-figure-drawing/scripts/figure_export.py` 无 `mdpi` 键；db01 实有 6 个 MDPI 刊；m11 禁止臆测栏宽并要求回 m09——互踢皮球。
- 修法：
  1. `figure_export.py` 的 JOURNAL_SPECS 增 `mdpi`（单栏 170mm；以 m09 SKILL.md 已核实表格数据为准）。
  2. 增 `custom_mm` 逃生通道：调用方可传 `--custom-width-mm 78.5` 类参数，绕开键名限制（中文刊用；R3 会往 db01 补实测栏宽数据）。
  3. m09 SKILL.md 与 m11 SKILL.md 同步两处文档：mdpi 可用、custom_mm 用法与"数据须有来源（db01 卡或实测记录），禁止臆测"的纪律。
  4. figure_export.py 的 selftest 增 mdpi 与 custom_mm 各一例。
- 验收：模拟"投 MDPI Animals"与"投农业工程学报"两场景，m09→m11 链路走通；selftest 过。

## R1.3（P0-3）Science 栏宽 120/121 统一

- 现状：`m09 SKILL.md:39` 写 120mm；`m11 SKILL.md:51`、`figure_export.py:39` 写 121mm。
- 修法：执行时联网核实 Science 官方 figure 规格（science.org 作者指南），统一写入 figure_export.py 的 JOURNAL_SPECS（**唯一**存数字的地方）；m09/m11 文档改为只引用键名+指向脚本，不再复写数字。无网则取 m11 实测值 121mm 并标 `GAP：待官网复核`。
- 验收：`grep -rn "120mm\|121mm" skills/` 中 Science 数字仅 figure_export.py 一处命中。

## R1.4（P0-4）orchestrator 契约双向化

- 现状：`skills/light-orchestrator/SKILL.md:64-79` 契约表钦定 `idea_candidates.md`/`critique_verdict.md`/`PROJECT_PLAN.md`/`experiment_matrix.md`/`claim_evidence_table.md` 等工件名，但 grep 证实零个 m 技能在自己的 SKILL.md 提这些名字；m05 模板用连字符 `experiment-matrix.md` 与契约下划线不一致。
- 修法：
  1. 把契约表抽出为 **CONVENTIONS.md 新附录"§6.1 阶段工件契约"**（或紧跟 §6 阶段流转之后），orchestrator SKILL.md 改为引用该表（保留表格也行，但声明 CONVENTIONS 为真相源）。
  2. 文件名统一**下划线**风格；改 m05 模板文件名及其所有引用处。
  3. 逐技能（m01/m02/m03/m04/m05/m06/m07/m09/m10/m12/m14、a03）在各自 SKILL.md 的"产出"节写明标准工件名，与契约表逐字一致。
  4. 注意安装视角：技能内引用 CONVENTIONS 的方式等 R1.5 修好后统一（先做 R1.5 也可，两项连着做）。
- 验收：契约表中每个工件名，在对应技能 SKILL.md 内 grep 可命中；连字符/下划线全仓库统一。

## R1.5（P0-5）安装后断链修复

- 现状：`install.sh:69-70`（install.ps1 同理）只链 skills/databases/code_assets；CONVENTIONS/ROUTER/MODE_REGISTRY 不进安装目录，11 个 SKILL.md 内 "CONVENTIONS §4/§5" 引用装完空指；`orchestrator SKILL.md:121` 引用 `../../docs/design/` 同断；Codex 有 AGENTS.snippet.md，Claude Code 端无等效物。
- 修法：
  1. install.sh 与 install.ps1 增链 `CONVENTIONS.md`、`ROUTER.md`、`ROUTER_EXAMPLES.md`、`MODE_REGISTRY.md` 四个文件到安装目录（与 skills 同级）。
  2. orchestrator 对 docs/design 的引用改为"设计决策记录见仓库 docs/design/（未随安装分发）"的弱引用措辞，或把该篇决策的结论一句内联——不能留会被当成可达路径的硬链接。
  3. `tools/check_installation_assets.py` 同步校验这四个文件进入安装清单。
  4. 评估补一份 `CLAUDE.snippet.md`（Claude Code 端路由片段，对应 AGENTS.snippet.md）；若 Claude Code 实际不需要（技能自动发现），在 README 安装节写一句明确说明代替，不留悬念。
- 验收：以"安装目录视角"逐技能检查相对引用全部可解析（R8 会把这变成自动校验，本轮先人工过一遍并留记录）。

## R1.6（P0-6）Hermes 安装目标

- 现状：README.md:9 三端定位（Claude/Codex/Hermes）vs `install.sh:24` 只有 `both|claude|codex`。
- 修法（**默认采用方案 B**，成本最低）：README 安装节明确声明"Hermes 复用 `~/.claude` 技能目录，装 claude 端即可被 Hermes 发现"，并实测验证一次（本机有 Hermes 则实测留痕；没有则标 `GAP：待 Hermes 环境实测` 并在 PROGRESS 登记）。若用户后续要求独立目标，再加第三安装目标。把"默认方案 B"写入 PROGRESS 用户决策项区请用户追认。
- 验收：三端安装路径均有文档说明；README.en 同步。

## R1.7（P0-7）MCM 赛时统一

- 现状：`skills/light-competition/references.md:71` 写"约 96 小时"，同文件 :76 与 SKILL.md:11 写 99 小时。
- 修法：统一为 99 小时（2026 届实测：1/29 17:00 EST–2/2 20:00 EST），:71 处改写并保留赛历来源链接。
- 验收：`grep -rn "96 小时" skills/light-competition/` 零命中。

## R1.8（P0-8）CI 模板版本升级

- 现状：`skills/light-system-design/templates/ci.yml:18-19` 与 `references.md:278,285` 用 checkout@v4/setup-python@v5；本仓库自身 ci.yml 与 a03 已实测 v6（Node20 于 2026-06-16 被强制切换，**距今 5 天，本项有时限**）。
- 修法：a04 模板与 references 升 v6；在 a03 references 设"GitHub Actions 版本真相源"节，a04/a06 改为引用。
- 验收：`grep -rn "checkout@v4\|setup-python@v5" skills/` 零命中；版本数字只在 a03 真相源一处。

## R1.9（P0-9）m04 示例诚实标注统一

- 现状：`skills/light-idea-critique/examples/worked_example_dermoscopy.md:4` 声明"检索条目为示意"，:28 又写"2026-06-06 实测 200"。
- 修法：通读该 example，把每个数字明确归类：实测的标日期留痕、示意的标"（示意值）"；文件头声明改为与正文一致的混合声明（"标注'实测'者为真实记录，其余为示意"）。
- 验收：同文件内声明与逐条内容一致，无自相矛盾。

## R1.10（P0-10）m17 selftest 产物污染

- 现状：`skills/light-competition/scripts/roadmap_gen.py`、`market_charts.py` 无参 selftest 把 5 张 PNG 直接落技能根目录（实跑验证）。
- 修法：两脚本 selftest 改用 `tempfile.TemporaryDirectory`，正常模式仍可由用户指定输出路径；`git rm`/删除已残留 PNG；该纪律的 CI 化在 R8.7。
- 验收：跑全部 selftest 后 `git status --short` 干净。

## R1.11（P0-11）README 卸载指引数据风险

- 现状：README.md:93 让 Windows 用户"删掉链接即可"，若用户用 `Remove-Item -Recurse` 删 junction 会穿透删除源仓库；`.codex/INSTALL.md` 已正确判 ReparsePoint，README 没警告。
- 修法：README 卸载句补一行警告："Windows 请用 `rmdir`（cmd）删除链接，**不要**用 `Remove-Item -Recurse`/资源管理器 Shift+Del，否则会穿透删除仓库本体"；README.en 同步；与 .codex/INSTALL.md 口径核对一致。
- 验收：中英 README 都有警告且口径与 .codex/INSTALL.md 一致。

## R1.12（新增卫生项）工作区残留与缓存

- 现状（2026-06-11 实查）：`skills/light-figure-drawing/examples/` 下有未跟踪的 `out_multipanel.pdf`/`out_multipanel.png`；`skills/light-slides/assets/__pycache__/`、`scripts/__pycache__/`、`tools/__pycache__/` 存在本地缓存目录（git 未跟踪，但属脏环境）。
- 修法：
  1. 查 out_multipanel 来源脚本（多半是 examples 演示脚本默认落盘当前目录），按 P0-10 同方式处理：演示输出改临时目录或显式输出参数；删除残留文件。
  2. 确认 `.gitignore` 含 `__pycache__/` 与 `*.pyc`（缺则补），本地清掉缓存目录。
- 验收：`git status --short` 干净；`git check-ignore skills/light-slides/assets/__pycache__` 命中。

## 提交切分建议（中文标题示例）

按影响域分 6-8 个 commit，例如：
- `文献检索技能:统一OpenAlex限流口径并设单一真相源`
- `图表规划与绘图:补MDPI栏宽与custom_mm逃生通道`
- `编排器与各链路技能:阶段工件契约双向声明`
- `安装脚本:随装链接CONVENTIONS与路由文档`
- `竞赛技能:修正MCM赛时并改selftest临时目录`
- `README:补Windows卸载防穿透删除警告`

## 收尾

总纲 §5 八步全过；PROGRESS 更新 R1 行；向用户打印 R2 启动提示词（11 号文件）。
