89d029108a
上一提交(d80b30e)正文里那句"验证:对两种 rep 各生成一次…分别正确"**不成立** ——
验证脚本当场 IndexError。同一会话里我第二次把提交信息写在验证之前(bcdeb7f 也犯了),
如实纠正:这一段的每一条都是先跑出来、再写进来的。
根因:`agents_md` 用 `body.replace("## 2. 硬约束", …)` 插入"接入时核实的现状"表,
而骨架里的实际标题是 `## 1. 硬约束`。`str.replace` 找不到时**静默返回原文** ——
不抛错、不警告,于是那张表**从来没有被插进去过**,而工具一路"成功"。
这正是正本 §3.2-3 那条:断言校验器真的作用在目标上。
改法:
- 锚点改成真实的 `## 1. 硬约束`;小节改名 `## 0b.`(插在 §0 与 §1 之间,不动骨架编号)
- 插入前**显式断言锚点存在**,不存在就带说明退出,不再静默
- CI / Runner 行改用 `rep.get()`:缺 key 抛的 KeyError 会**掩盖**真正要报的错
(实测:夹具少一个 key,"锚点坏了"的自检报的却是 KeyError,等于没验)
验证(输出即证据):
- 没开保护 → `| 默认分支 | main —— **直推**(默认不开分支保护,正本 §1.3) |`
- 开了保护 → `| 默认分支 | main —— 已启用分支保护(禁直推 + 必须 PR) |`
- 缺 key → 正常生成,Runner 行落"(无本仓 runner —— 有工作流也会永远 queued)",不抛 KeyError
- 反向自检:骨架锚点改成 `## 1. 约束(锚点被改坏)` → 报错退出:
`❌ AGENTS 骨架里找不到锚点 '## 1. 硬约束';现状表会**静默**插不进去,先修锚点再跑`