任务:引擎里模型有两种读法的三处,按所有者的决定统一
tests/acceptance/oracle/FINDINGS.md 记着判定规则的参照实现和引擎不一致的地方;其中第 4、5、6 条是模型的两句话可以读成两边,要所有者定夺。所有者 2026-10-22 的决定:评审只提出问题;就算人要追加修改,也只能改自己本地的 Circle,不能修改 Hub 里的文件。据此:
- 第 5 条(主体上的修复行):维持引擎现在的读法。 修复只用于待判定产物(模型自己的回答)上的检查;评审主体(被评审的材料)上的反驳停在“不通过”,归作者输入,不进入修复,也不消耗修复轮数。要改参照,不改引擎。
- 第 6 条(“记未知”):改引擎,照参照。 动作
unknown(记未知)不改终态:一条已经返回的反驳仍是“不通过”,码和档照记,归责留空(待归因,不走“数据缺口”),要求项状态是未满足(终态不符合期望);记未知既不修复也不拒收。 - 第 4 条(没声明的检查档):每个检查必须声明档,发布时强制。 声明了的档替换结局的档,这一点本来就清楚;省略时不再有一个悄悄起作用的缺省档(现在是有
basis就阻断、否则提示,函数返回的阻断会被悄悄降成提示)。
分支和工作树:hub-engine3,目录 circle-hub-engine3。开工前先确认 hub-union 已经合进 hub-redesign(监督者会在合并后通知;那个任务把三个包的每个检查都写上了明确的 tier):从合并后的 hub-redesign 开分支。
- 可以改的路径:
hub/runs/engine/**、hub/rules/**、发布checks.json的校验所在的文件(先找:pack publish校验检查条目的地方)、contracts/src/pack.ts(只改tier的说明文字,不把tier在解析层改成必填,已发布的旧版本照常读)、contracts/model.json里 T03 R[4] 与 W02 F[7] 的文字(改后node tools/gen-contracts.ts重新生成并--check)、tests/acceptance/oracle/**、docs/hub-r4-architecture.md第 6 节的一句原则。别的路径不动;docs/hub-r4-progress.md由监督者改。 - 先读:
AGENTS.md、docs/hub-r4-handoff.md、tests/acceptance/oracle/README.md和FINDINGS.md(全文)、oracle.ts、differential.test.ts、hub/runs/engine/terminals.ts(applyRouting、rowApplies、BY_REASON)、hub/rules/check.ts(runCheck、withTier)。 - 规则:不推送、不建 PR;不发布、不部署,不碰 7420 上的持久部署、钥匙串、环境配置文件和任何真实系统;测试只用合成数据;提交只暂存明确的路径,
git commit -s,一句首字母大写的英文祈使句,不加前缀和句号,空一行后写你自己的署名行。每一条单独一个提交。
要做的
- 第 6 条。 先把
differential.test.ts里种子20261222(recorded)的断言翻成参照的结论,看它失败,再改applyRouting(约第 220 行)让动作unknown不改终态、不写integrity_unproven、不走BY_REASON的数据缺口,归责留空。引擎自己的单元测试里钉着旧行为的断言一并改,并说明理由。 - 第 5 条。 改参照
oracle.ts:修复行只用于待判定产物上的检查;主体上的反驳停在不通过,归作者输入,rounds.used不增加。翻differential.test.ts里种子20261222(short)的参照断言;引擎不动。contracts/model.json里 T03 R[4] 与 W02 F[7] 各加一句清楚的话:“修复只用于待判定产物上的检查;评审主体上的反驳停在不通过,由作者在自己本地修改,Hub 不修改被评审的材料”;docs/hub-r4-architecture.md第 6 节加同义的一句原则(评审只提出问题)。只改文字,不改模型的结构。 - 第 4 条。 发布时检查条目没有
tier就拒绝,错误里写任务包、检查的编号和怎么改(声明blocking、advisory或模型里的其他档名);发布测试:缺tier被拒,补上被收;仓库里所有包的checks.json都通过(用一个遍历所有包的测试)。运行时对发布这条规则之前已发布的旧版本保留现有的缺省(有basis就阻断、否则提示),在hub/rules/check.ts里写明这是旧版本的兼容,并用一条测试钉住;differential.test.ts里种子20261223的loose场景改成钉住“发布拒绝”和“旧版本缺省”,从随机生成的空间里拿掉没有tier的检查。 - FINDINGS.md。 第 4、5、6 条的状态改成已定/已修,写明日期、决定内容和改了什么;表格里的断言行号同步;“模型没有排定的地方”里把这三项从待所有者定夺里划掉,剩下的照旧列着,不要替所有者定别的。
- 验证。
npx tsc --noEmit;node tools/gen-contracts.ts --check;node --test --test-concurrency=2 "hub/runs/**/*.test.ts" "hub/rules/**/*.test.ts" "contracts/**/*.test.ts" "tests/acceptance/oracle/*.test.ts" "packs/**/pack.test.ts";node --test --test-concurrency=1 tests/acceptance/*.test.ts(先看package.json的验收脚本怎么跑;负载高时单个文件会变慢,单独重跑确认)。
完成后在终端里回报:提交号、测试通过/跳过/todo 的数量、改动了哪些旧断言及理由、没做完或拿不准的地方。