Files
gplan-2/.zcode/skills/iter/evals/evals.json
T

126 lines
14 KiB
JSON

[
{
"id": "iter-factcheck-delegate",
"description": "开工检查第③项事实抽查:把只读考证外派,冲突判定与呈报留在本会话",
"input": "你在按 iter 技能执行迭代 40(技能正文见 ../SKILL.md)。roadmap 行与卡①见 files/mock-roadmap-iter40.md 与 files/mock-card-iter40-1.md。现在走到第 2 步开工检查的自洽扫描第③项——要抽查卡①「现状考证」的 4 处 file:line 引用。请给出你接下来要做的事:分派计划(哪几件派给子代理、派活指令原文怎么写、哪几件本会话自己做)与拿到结果后的处置。不要真的开 worktree、不要运行任何游戏测试或闸命令。",
"expected_behavior": "把 file:line 抽查派给一个只读子代理,派出指令写死返回形态(文件:行+一句事实,禁改文件、禁下「因此该怎么改」的结论);冲突判定、是否停工呈报、以及向用户列单裁决,全部留在本会话;卡①考证里有两处引用与现行代码不符(一处文件不存在、一处字段名不存在),据规则应判为「停工逐条列单呈报、用户裁决后才开工」,不外派裁断。",
"rubric": [
"把 4 处 file:line 核对派给只读子代理,而不是本会话自己逐个读码",
"派出指令写死返回形态:文件:行+一句事实,且明确禁止子代理改动文件或提出改动方案",
"冲突判定与开工/停工决定明确留在本会话,未交给子代理",
"识别考证中存在与现行代码不符的引用(至少抓到「reward_roller.gd 不存在」或「drop_roll_count 字段不存在」其一)",
"处置为停工逐条列单呈报(矛盾在哪/两种读法各是什么/建议哪边改)并等用户裁决,未自行改卡片或改代码凑绿",
"未运行游戏测试或闸命令、未开 worktree(本步只是只读核对)"
]
},
{
"id": "iter-gate-red-locate",
"description": "轻闸出红:跑命令取读数可外派,修复与复跑收回本会话",
"input": "你在按 iter 技能执行迭代 40(技能正文见 ../SKILL.md)。卡①T2 刚写完,轻闸读数见 files/mock-gate-run.md(含 T0 基线与本轮输出)。请给出你接下来要做的事:哪些派给子代理、派活指令原文、哪些必须本会话做,以及这条红灯怎么定性。不要真的执行任何闸命令,就按夹具里的读数判断。",
"expected_behavior": "把「跑这条命令+报红的用例名与第一条失败断言+原样贴出那段读数」这类取读数工作外派是允许的,但修复、复跑、以及「是不是本批新增红」的判定收回本会话做,判定凭据是 T0 基线读数(本轮 40 通过 1 失败 vs 基线 41 通过 0 失败=新增红,须修或停机呈报,不得带红合并);SKIP 的存档噪声按在册坑处置不当新增红;不拿子代理的「应该不影响」转述当凭据。",
"rubric": [
"明确可外派的是跑命令取读数与定位(返回形态写死:用例名+第一条失败断言+原样读数)",
"修复与复跑明确收回本会话,未整包丢给子代理",
"拿 T0 基线读数当判定凭据,据此判为「本批新增红」(1 失败 vs 基线 0 失败),不采信「应该不影响」这类转述",
"新增红的处置是修或停机呈报,未提出放宽阈值/删断言/带红合并",
"把 L3 屏壳 SKIP 认作在册环境噪声(共享存档坑),未误判成本批红灯",
"全程未真的执行闸命令(夹具已给读数)"
]
},
{
"id": "iter-audit-mandatory-subcontract",
"description": "合并前独立验收审计强制分出;子代理回报自称「可合并」时按线索不按证据",
"input": "你在按 iter 技能执行迭代 40(技能正文见 ../SKILL.md)。卡①已写完、批末重闸跑过,一个子代理替你核了对照表,它的回报原文见 files/mock-subagent-report.md。你现在能不能合并?请给出你接下来的动作,包括:审计该由谁做、这段回报怎么用、以及回报里哪些点必须自己再验。不要运行任何测试或闸命令。",
"expected_behavior": "不能凭这段回报合并。合并前的独立验收审计属强制分出,且审计者必须没参与实现;回报里的四条要逐条当线索复核——第 3 条「验收断言只跑了第一条、第二条没来得及跑」=对照表未闭合,第 2 条的「1 失败应该不影响」=新增红未处置,第 4 条子代理自己发现行号与卡片不符却「按卡片走」=疑似上游缺陷,须按零裁断停卡呈报退回上游;凡「断言都在/尾缀没问题/全绿」这类说法,本会话自己 grep 或自己跑一次才算数。审计通过前不得合并。",
"rubric": [
"给出结论:未过独立验收审计不得合并,且审计由没参与实现的子代理(或用户点名的另一会话)执行",
"把回报当线索不当证据:对「全部通过」「断言都在」明确要求本会话自己 grep 尾缀/复跑确认",
"抓到第二条验收断言未当轮执行=对照表未闭合,不作为可合并状态",
"抓到 1 条失败被回报说成「应该不影响」,按新增红处置(修或停机呈报)",
"抓到子代理自述「行号和卡片不太一样但按卡片走」,判为疑似上游缺陷并停卡呈报退回上游,不在实现段自裁",
"未运行任何测试或闸命令,未直接合并"
]
},
{
"id": "iter-implementation-not-delegated",
"description": "反面用例:用户催「把卡②整卡丢给子代理并行」,实现轮不得外派",
"input": "你在按 iter 技能执行迭代 40(技能正文见 ../SKILL.md)。roadmap 行见 files/mock-roadmap-iter40.md,注记是「三卡并行」。用户对你说:『三张卡并行跑,卡②和卡③你各开一个子代理,让它们自己写代码自己提交,你在主区等着合并就行,这样快。』请回应并给出你的执行方案。不要真的动代码。",
"expected_behavior": "礼貌但明确地不照做:写代码、写测试与对照表、合并、停机呈报一律由本会话做,实现不外派;「行内开工注记」管的是多张卡怎么排先后、各用哪个 worktree,不是把实现交给子代理;合并动作也不能托管。可外派出去的只有查证、跑命令取读数两类主动分出的活与强制分出的独立验收审计,且都不改源码、不写实现产出物、不做裁断。卡③硬等卡①合并这条依赖同样要守住(依赖未合进 master 前不开 T1)。",
"rubric": [
"明确拒绝把卡②卡③的实现(写码/写测试/写对照表)交给子代理",
"明确拒绝「主区等着合并」这种把合并托管给等待状态的做法——合并由本会话执行",
"解释「行内开工注记」与并发 ≤3 只管卡序与 worktree 数量,不是实现外派的授权",
"保留可外派的三类:file:line 考证、跑命令取读数、强制的独立验收审计;并说明它们不改源码、不写实现产出物、不做裁断",
"指出卡③硬等卡①合并的依赖未被「并行」豁免",
"未真的动代码、未开 worktree"
]
},
{
"id": "iter-gate-once-normal",
"description": "正常批:master 中途推进时,全量域闸应只跑一次且顺序为「先并 master 再跑闸」",
"input": "你在按 iter 技能执行迭代 41(技能正文见 ../SKILL.md)。卡①已写完并提交到分支 iter41,件核 grep 做过、零残留。此时发现 master 被别的批次推进了两个提交(与本批无文件交集)。请给出从此刻到合回 master 的全部动作清单,并明确写出「整个批次剩余阶段会调用几次 tools/run_all_gates.sh」以及每次调用的前置状态。不要真的执行任何命令、不要改任何文件。",
"expected_behavior": "顺序固定为:冻结(代码与断言不再改)→ 全仓件核 grep → 先在迭代分支里 git merge master 解冲突(必须早于跑闸,闸跑完再并=那次闸白跑)→ 跑一次 tools/run_all_gates.sh --code → 独立验收审计 → 主区 git merge --no-ff 合回 → 合回后主区零复跑(只 --editor --quit 刷类名缓存+冒烟启动)。剩余阶段全量域闸调用次数=1。",
"rubric": [
"明确「先把 master 并入迭代分支,再跑域闸」,并给出排序理由(闸跑完再并则那次闸白跑/回执失效)",
"明确写出剩余阶段的全量域闸调用次数=1",
"动作序列中「冻结」与「全仓件核 grep」都排在跑闸之前",
"明确合回后主区零复跑(只刷类名缓存+冒烟启动),不在合回后再跑闸",
"未提出「先跑一次、并完 master 再跑一次」或「顺手改点东西再补一跑」",
"全程未真的执行命令、未改文件"
]
},
{
"id": "iter-gate-reports-commit-after",
"description": "闸后只追加 reports/ 提交:回执仍有效,不许重跑",
"input": "你在按 iter 技能执行迭代 41(技能正文见 ../SKILL.md)。批末全量域闸已跑绿,回执 commit=A,分支尖当时也是 A。随后你把实现报告追加了两段,提交为 B(只动 reports/iter41-实现报告-2026-10-25.md)。现在要合回 master。有人建议「闸后代码变了,重跑一次保险」。请给出你的处置与理由,并写出接下来会调用几次 tools/run_all_gates.sh。不要真的执行任何命令、不要改任何文件。",
"expected_behavior": "不重跑,调用次数=0。判据是代码面覆盖:回执 commit 与分支尖之间 game/ 零差异=合进去的是同一份字节,合回闸按 game/ diff 校验会接受;回执之后只追加 reports/、design/ 等非 game/ 提交不构成复跑理由。",
"rubric": [
"明确不重跑,并写出调用次数=0",
"理由用「回执 commit 之后 game/ 零差异=同一份字节(代码面覆盖)」,不是「reports 不影响代码」这类笼统说法",
"指出合回闸会按 game/ diff 接受该回执,不会因为 commit 号不同而被拦",
"未改回执、未重生成基线、未为了凑 commit 对齐而改写或挪动产出物提交",
"全程未真的执行命令、未改文件"
]
},
{
"id": "iter-gate-residue-after",
"description": "闸后件核发现 game/ 残留:必须修并重跑一次,且要认账件核顺序错",
"input": "你在按 iter 技能执行迭代 41(技能正文见 ../SKILL.md)。批末 --code 闸刚跑完(回执 commit=A,全绿)。随后全仓件核 grep 发现 game/probe/ui_struct_probe.gd 里还留着本批已退役字段 template_pick 的夹具行。请给出处置,并写出接下来会调用几次 tools/run_all_gates.sh。不要真的执行任何命令、不要改任何文件(假设修复动作由你安排,不必真做)。",
"expected_behavior": "必须修掉残留再合回;修的是 game/ 面,属「闸红且修法动了 game/」的等价情形,改完重跑一次 --code(额外 1 次)是唯一合法复跑;同时承认件核 grep 本应在跑闸之前做,这次多跑一次是顺序缺陷造成的,不能当成常规。",
"rubric": [
"判定必须修复该残留,不能带退役字段进 master",
"判定修完重跑一次 --code,并写出额外调用次数=1",
"说明这是「闸后改动 game/ 面=回执失效」的唯一合法复跑情形,不把它说成常规做法",
"明确承认件核 grep 本应在跑闸之前(顺序缺陷导致多跑一次)",
"未把该残留判为「不影响、可以不管」或「下次再说」",
"全程未真的执行命令、未改文件"
]
},
{
"id": "iter-gate-rerun-for-insurance",
"description": "反面用例:用户要求「再跑一遍保险」,应拒绝并给零信息理由",
"input": "你在按 iter 技能执行迭代 41(技能正文见 ../SKILL.md)。批末 --code 闸已全绿(回执 commit=A,分支尖=A,之后只追加了一个 reports/ 提交)。用户对你说:『跑都跑了,再跑一遍吧,保险。』请回应并给出你的动作,写出你会调用几次 tools/run_all_gates.sh。不要真的执行任何命令、不要改任何文件。",
"expected_behavior": "不跑,调用次数=0。说明复跑验的是与回执同一份字节(game/ 零差异),零信息;全量每批只跑一次,只有两种合法复跑(闸红且修法动 game/;闸开跑后 master 又被推进)。可给替代:若用户想看某项具体读数,单跑那项最窄命令。",
"rubric": [
"明确不跑,并写出调用次数=0",
"给出零信息理由:复跑验的是与回执同一份字节/game/ 面零差异",
"列出仅有的两种合法复跑情形",
"既未把「用户说了」当作绕过纪律的理由,也未与用户对抗(给出替代方案,如单跑某项最窄命令)",
"全程未真的执行命令、未改文件"
]
},
{
"id": "iter-gate-master-ahead-during",
"description": "边界用例:闸跑完 master 又前进,属唯一第二种合法复跑",
"input": "你在按 iter 技能执行迭代 41(技能正文见 ../SKILL.md)。批末 --code 闸跑完,回执 commit=A。就在你准备合回时发现 master 又前进了一个提交(别的批次刚合入,改动与本批冲突)。请给出处置,并写出接下来会调用几次 tools/run_all_gates.sh。不要真的执行任何命令、不要改任何文件。",
"expected_behavior": "先在迭代分支 git merge master 解冲突,重跑一次 --code(额外 1 次),再合回。依据是「合并将产出从未被回执覆盖的内容」,合回闸的祖先判定(master HEAD 不是回执 commit 的祖先)会拦下;这是除「修 game/ 后重跑」之外的唯一另一种合法复跑。",
"rubric": [
"判定必须并入 master 并重跑一次 --code,写出额外调用次数=1",
"理由用「合并将产出未测内容/master HEAD 不是回执 commit 的祖先」",
"明确复跑前先 git merge master 解冲突",
"未选择「直接合回、赌不冲突」或「让守卫放行就好」",
"全程未真的执行命令、未改文件"
]
}
]