fix(adopt): 锚点写错导致现状表静默插不进去;顺带修健壮性与验证方式
上一提交(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. 硬约束';现状表会**静默**插不进去,先修锚点再跑`
This commit is contained in:
@@ -205,12 +205,19 @@ def agents_md(repo: str, rep: dict):
|
||||
branch_line = (f"| 默认分支 | `{rep['default_branch']}` —— 已启用分支保护(禁直推 + 必须 PR) |"
|
||||
if rep.get("protections")
|
||||
else f"| 默认分支 | `{rep['default_branch']}` —— **直推**(默认不开分支保护,正本 §1.3) |")
|
||||
# 用 .get() 而不是下标:缺 key 时抛 KeyError 会**掩盖**下面那条真正要报的错
|
||||
# (实测:夹具少一个 key,于是"锚点坏了"的自检报的是 KeyError,等于没验)。
|
||||
_wf = "、".join(rep.get("workflows") or []) or "(无)"
|
||||
_ctx = "、".join(rep.get("contexts") or []) or "(无)"
|
||||
_rn = "、".join(rep.get("runners") or []) or "(无本仓 runner —— 有工作流也会永远 queued)"
|
||||
if rep.get("runners_scope"):
|
||||
_rn += f"({rep['runners_scope']})"
|
||||
facts = "\n".join([
|
||||
"## 0b. 接入时核实的现状(事实变了就更新;别让它过期)", "",
|
||||
"| 项 | 值 |", "|---|---|",
|
||||
branch_line,
|
||||
f"| CI | 工作流 {rep['workflows'] or '(无)'};status context {rep['contexts'] or '(无)'} |",
|
||||
f"| Runner | {rep['runners'] or '(无本仓 runner —— 有工作流也会永远 queued)'}{'(' + rep['runners_scope'] + ')' if rep['runners_scope'] else ''} |", "",
|
||||
f"| CI | 工作流 {_wf};status context {_ctx} |",
|
||||
f"| Runner | {_rn} |", "",
|
||||
])
|
||||
# ⚠️ 锚点必须真的存在。`str.replace` 找不到时**静默返回原文**,不会报错 ——
|
||||
# 实测踩过:锚点写成 `## 2. 硬约束`(骨架里其实是 `## 1. 硬约束`),
|
||||
|
||||
Reference in New Issue
Block a user