5.0 KiB
date, topic, status, 上级, sot-impact
| date | topic | status | 上级 | sot-impact |
|---|---|---|---|---|
| 2026-07-04 | prompt治理-四道闸CI接线 | 工单已排(fable 2026-07-04 列单)· 待 opus 领单执行 | docs/architecture/架构/生成引擎/prompt治理.md | 修订 prompt治理(§2/§4 两处「现状」句随接线改真:「人工发起的批跑编排」→「CI 已接」;§2 注册表消费面三态标注按对账结果回写。另有三处陈旧指针修正——evalflow 已删改指 git 存档、GitHub Actions→Gitea Actions 口径、验收门 §6.4 SAA 承接项历史化——归 W-DSGN doc-sync 批,不在本单,防双写) |
prompt 治理 · 四道闸 CI 接线 · 工单
命题:prompt 治理 SoT 的核心主张——改一条 prompt 必须过「闸0 version 必升 / 闸1 Schema / 闸2 成功率 ≥0.8 / 闸3 回归 diff / 闸4 成本延迟」四道闸再合入——判定逻辑曾由 W-G1 批跑编排真跑出数据,但改动触发的 CI 一直没接,且历史实现已随 spike 存档删除。本单把这道门真正焊上,焊在活的 prompt 面上。
工单六要素
目标:contracts/prompts/ 下任何 prompt 改动,离线闸(version 升号强制等)每次提交必拦;真模型闸(四道闸批跑)在改动合入前至少真跑一次并留台账。兑现 SoT §8 验收第 3 条:故意改坏一条 prompt 被拦、正常改动放行。
事实指针(先核清再动手,以下均已核实):
- 历史判定实现已删除、只在 git:
docs/agent-specs/2026-06-09-agent-loop-v1/orchestrator/{evalflow.py(251行), judge.py(510行), tests/test_judge.py},取用git show 6d2f8789^:<路径>。不必复活整个 spike 编排,按 registry 契约重建薄版四闸判定即可,存档只作参考。 - 现存资产:
contracts/prompts/registry.yaml(每条带version+eval:指针)、contracts/prompts/eval/<id>/{inputs.jsonl,labels.jsonl}金标样本、contracts/prompts/check_registry.py(已挂 CI:contract-gates.yml,B8685a21a7)。 - CI 底座 = Gitea Actions(先例 = contract-gates.yml 条件触发 + pre-commit
.githooks/五门;SoT 文里「GitHub Actions」是陈旧口径,修正归 W-DSGN)。 - 消费面已漂移(本单第 0 步的原因):registry 里 04-config 四策划模板(clicker/merge/idle/tycoon-designer)产 GameDesign config、锚
contracts/templates/*.schema.json——那是已废的 gamedef 线;现行活面 =04-config/cheap-system.md(v1.6.0,cheap-worker 内置↔外置 parity 有 test_roles 锁)、09-tier2-richgame/(tier2 四专家+player,check_registry 17 条对齐)、01-safety。
步骤与拆法:
- 步骤 0 · 消费面对账:逐条标注 registry 条目三态(live 在用 / 批跑史料 / STUB·化石),核实谁真被 live 路径消费(cheap_roles / tier2 roles / PromptResourceLoader);门只焊活面,化石条目显式豁免并在 registry 注记——防把 CI 焊在死面上白花钱。对账结果回写 SoT §2(本单 sot-impact 申报项)。
- 段 A · 离线闸(每次提交必跑,秒级):闸0 version 升号强制——diff 触及
contracts/prompts/**某条目正文而 registry version 未升 → 拒;扩 check_registry 或旁立小脚本,挂进 contract-gates.yml 条件触发 + pre-commit。 - 段 B · 真模型闸(条件触发):重建薄版四闸判定(闸1 产物 schema / 闸2 金标成功率 ≥0.8 / 闸3 关键字段回归 diff / 闸4 成本延迟增量),对改动条目跑其
eval/金标集;触发 = 手动 workflow_dispatch 或 PR label,纪律 = prompt 改动合入前至少真跑一次、绿 + 人工抽检才合;单跑预算 cap 硬编码进 workflow(建议 ≤¥5),超即 fail;台账落contracts/prompts/eval/旁的运行记录(只追加)。 - 收口:SoT §2/§4「现状」句改真 + docs-gate 绿。
边界红线:不改任何 prompt 正文;不动 live 加载路径(PromptResourceLoader / cheap_roles / tier2 roles);金标样本 inputs/labels.jsonl 只增不改(改 = 升版另立);模型用便宜档(M3),thinking 关;真模型段跑在能内网直连 new-api 的机器上(mini-desktop 有现成 venv;Gitea runner 若不具备,先落「runner ssh 转发 mini-desktop 执行」的既有模式),内网直连一律 NO_PROXY 绕代理。
验收门:负向演示三连红 → 修后绿并留证——①改 prompt 不升 version 被段 A 拦;②故意砍坏一条活面 prompt(如删关键约束)段 B 闸2/闸3 拦;③正常小改(升版)全绿放行。离线段每提交秒级;真模型段成本 ≤cap 且台账可查;test_roles 等既有 parity 测试不回归;docs-gate 绿。
坑:① pgrep/探针类模式串自匹配(用 [x] 括号技法);② M3 走 new-api 内网直连必须绕系统代理;③ 别把四策划模板(gamedef 化石)当活面焊门——步骤 0 先行就是为这个;④ eval 金标集有的条目「首版无种子」(registry 注记),闸2 对空集要 fail-closed 报「金标缺失」而非假绿。
自审:每步真实 commit hash + 真跑输出(hash 被 rev-parse 核验);负向演示留红→绿全证据;没全绿报 BLOCKED;完工蒸馏回 .agents/(新门挂载点写进 engineering-conventions 门清单)。