- 里程碑:M6 — 一致性红队与回归基线(本里程碑据用户授权自定义;路线图原止于 M5)
- 日期:2026-06-20
- 分支:
claude/objective-dirac-c19b49(worktree)→ 合并入main - 结论:完成。合并入含 M1/M2/M3 的 main 后,全部 13 条样本由真实规则裁决: 崩坏率 0%、误伤率 0%、跳过 0。门禁可进 CI。
把项目北极星「写不崩」从主张变成可执行的证明:一份带金标签的红队语料,全量过 M5 加固版管线,崩坏率(本应拦却放行)钉为 0 作回归门禁——任一对抗样本漏拦即门禁失败。 完整动机与取舍见 ADR 0010。
world_engine/qa/
├── doubles.py · DictKnows —— KnowsView 的内存参考实现(M1 的 EpistemicStore 会替代)
├── corpus.py · 13 条带标签样本(对抗 + 干净),覆盖 6 类违例;共享一个红队世界
├── harness.py · run_redteam:按"能力集合"裁剪 → 跑 → 比对金标签 → 汇总记分卡
├── report.py · Markdown 记分卡渲染
└── __main__.py · `python -m world_engine.qa` —— 打印记分卡,崩坏率非 0 则退出码 1
| 指标 | 值 |
|---|---|
| 门禁(崩坏率=0) | ✅ 通过 |
| 样本 | 共 13,运行 13,跳过 0 |
| 崩坏率 breakage | 0.0%(漏放 0 / 应拦 9) |
| 误伤率 false-alarm | 0.0%(误拦 0 / 应放 4) |
| 软核对触发率 | 30.8% |
- 全部生效:
epistemic_leak2、life_status1、location1(由 M1 真实规则裁决)+possession2(M1)+timeline3、soft4(M5),全部命中金标。 soft含两类独立否决:风格档(verbose_taciturn)与内容档(meta_leak,出戏/元信息泄漏), 分别由默认交叉裁判面板的两名互补裁判各自拦下——印证 §7.4「两个独立裁判」确实在工作。
- 诚实覆盖:
harness先算"当前能力集合"(已加载硬规则名 + 是否有软核对),能力不足的 样本跳过并写进报告,绝不伪装通过。本支单独开发时leak/life/location三类如实跳过; 合并 M1 后build_default_pipeline自动接上真规则,样本零改动转为生效——本次合并即如此。 - 门禁真的会响:
tests/test_redteam.py::test_gate_actually_fires_on_escape故意喂一条 "干净却被标为应拦"的样本,验证管线放行→漏放→门禁失败,证明门禁不是恒真。 - 可复现:用两名配置不同的
DeterministicJudge构成交叉裁判面板,离线、确定,适合 CI。
.venv\Scripts\python.exe -m world_engine.qa # 记分卡 + 门禁(退出码)
.venv\Scripts\python.exe -m pytest # 205 passed(全套;M5+M6 新增 45)- M1 合并后补齐认知边界/生死/位置样本的真实驱动(届时 4 条自动激活)。
- 真实 LLM 接入后,可用同一语料对真模型跑崩坏率回归;确定性裁判保留为离线基线。
- 持续把软核对里反复出现的语义残余「往硬规则搬」(§7.4),并用本基线守住不回退。