muse-agent-example/docs/2026-08-01-评测harness改造设计.md
zizi 0260bcd8e2 设计文档:SoT 同步与生成物重出
- 新版设计各域 SoT 按本轮实现同步:总体架构、模块设计、接口契约、数据模型、功能规格、文件设计与决策记录。
- 接口契约生成物重新导出(openapi 与前端客户端随契约一致)。
- 实现回顾与专项检查台账保留历史结论;本轮收尾发现另见 .agents.local 下的收尾报告与审查处置。
2026-09-18 01:15:18 +08:00

74 lines
7.7 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- 导航元信息: {"内容描述": "历史设计与研究记录", "使用场景": "追溯原阶段任务时", "使用要求": "保留原时点,不作为当前能力或运行入口"} -->
# 评测 harness 改造设计(概念层)
> 目标读者:创始人。状态:**概念设计已定稿(三条独立概念评审收敛),实现细节后续进行**。
> 本文记录评测 harness(replay-eval)从"仓外密封 vault"迁到"一切落库"的**概念决定**:明确的意图、清晰的边界、六条概念原则及其依据。实现(引擎强制、常设不变量、完成判据重设计等)另起任务。
> 关联 SoT:领域索引 §3、05 §7、06 §7、08 §5(本文原则已落进这几处)。
## 1. 改造的意图(明确)
评测 harness 的根本目的有三层,分属不同的主人:
1. **防泄漏(实验有效性)**:writer 不能看到目标章答案。这一条**从来不是仓外 vault 在服务**——它由 as_of 冻结、泄漏审计、盲评输入边界这些逻辑机制保证。
2. **留存卫生**:全文、oracle 答案、完整 prompt 不能漏进 Git、不能漏进对外报告。这是 vault 真正服务的。
3. **证据托管 + 独立性**:迁移回执给出证据监管链;证据放在另一个物理底座,意味着即使生产库被破坏,评测证据还在,评测仍能充当对生产系统的**外部见证**。这一条**过去从未写成目的,是隐性目的**。
**改造的真实意图是理念转变,不是技术简化**:把评测纳入"一切落库、单一事实源"。它对前三层中的两层半忠实甚至更强(append-only 比 0700 更不可变、评测候选隔离可机械验证),但**静默放弃了第四层——证据独立性**:评测证据从此与生产库共享同一个信任根,从"独立见证"降为"系统自身账本里的一类行"。
**意图的明确表述**:改造服务留存卫生与防篡改(且强化),放弃证据底座独立性(换可观测性与全文可走查)。这是单用户本地场景下的**刻意取舍**,不是无损迁移。
## 2. 边界(清晰)
物理隔离与逻辑隔离**不是强弱的同一种东西,是两种不同种类的东西**:
- **物理隔离 = "不可能"**:评测物料不在生产访问域里,越界在拓扑上不成立,不依赖系统自己的正确行为。
- **逻辑隔离 = "被禁止"**:物料在同一访问域,靠规则(run_type、状态机、访问控制)隔开,完全依赖系统在每个访问点永远正确地执行规则。
改造后,评测与生产**同库**,边界靠:`run_type`(eval/production)+ 候选状态机(评测候选 DB 级禁接受)+ 访问控制(raw 默认不进检索)。这是逻辑隔离,不是物理隔离——**继续叫它"隔离"是第一个泄漏点**,应叫"访问分离 / 引擎强制"。
**边界的结构性弱点**:边界锚在标记(run_type / eval_draft)上,必须正确传播到每个派生产物、并在每次读取时被正确检查——而没有一个集中的强制点,是**分布式约定**。最戏剧性的路(评测正文→正式书)防御最厚、破了会被看见;真正脆的是**安静的派生路**(评测卡喂生产检索、评测评分混进生产质量视图、run_type 被翻),防御薄、破了没人知道。**防御的轻重是反的。**
## 3. 六条概念原则(全认)
1. **升级口号**:把"一切落库、单一事实源"改述为"**单一基底、分层权威、分区治理**"——库是唯一存放处(基底统一),但正式内容与评测区是**不同治理区**;评测独立性由 run_type + 四层隔离 + oracle + 盲评 + 人审承载,**不由物料位置承载**。
2. **把代价写成明账**:在 SoT 明说"评测证据与生产共享同一信任根,是单用户场景的刻意取舍,换可观测性 + 防篡改,放弃证据底座独立性 / 外部可审计性"。不假装没丢。
3. **救回 COMPLETED**:完成判据必须核对"本轮声明要产出的 raw 集合"=="实际落库集合"才置完成;"有行落库了"不是判据。**一道不可能失败的门不是门。**
4. **强制收拢到引擎一个点 + run_type 钉死**:让评测行对生产读默认不可见由数据库**单点强制**(生产只读角色对评测行默认不可见,显式可审计 opt-in 角色才可见);`run_type` 插入后不可变(或引擎约束使 `(eval, accepted)` 永不可达)。打结构弱点,一次覆盖所有派生路。
5. **从"靠预防"迁到"靠发现"**:逻辑隔离永远做不到完全预防,必须靠**常设不变量**持续抓越界——没有评测派生卡绑定到生产、没有评测质量结果出现在任何生产视图、没有正式正文块的来源能追溯到评测候选。违反即报警。**从物理隔离迁到逻辑隔离的那一刻,必须同时从"靠预防"迁到"靠发现"。**
6. **oracle 读侧硬红线 + 改词**:把"oracle / 全文不进任何模型输入上下文、只供人走查"写成**可机械验证的红线**(写侧已有硬强制,读侧不能只靠查询纪律);把"隔离"统一改成"访问分离 / 引擎强制"——机械验证全绿之前,不许说"密封从物理变逻辑"。
## 4. 概念依据(三条独立评审收敛)
三条独立概念评审(意图/目的论、边界/隔离、一致性/哲学)独立得出,高度一致:
- **共识**:改造概念上成立,拆掉了一个**假二元性**——仓外 vault 的"外在性"从来是幻觉(同一台机器、同一个 agent 治理,`rm` 一个 0700 文件比绕过 DB 触发器容易得多)。评测真正的独立性在裁判标准(oracle/盲评/人审),不在物料位置。搬库不是降级,是把力气从错处挪回对处。
- **共同指出的欠款**:
- 代价被写成纯赚(证据独立性 / 外部可审计性 换了全文可看性,文档叙述成纯进步)。
- 口号没说出让它安全的"分区治理"("单一"在做意识形态工作,侵蚀真正的分区)。
- 完成判据退化("已落库"趋恒真,丢"封存"内涵)。
- 边界锚在可变分布式标记上,安静路径防御最薄。
- oracle 读侧软边界。
- 认识论底色:这是**带锚点的自我评估**,不是独立评估,终极锚点是创始人——哲学不该把它包装成"独立评测"。
- **底线**:边界守得住,对单用户本地工具甚至可能比文件时代更硬——**条件是**强制压进引擎、标记锚死不可变、配一套常设不变量持续发现越界。现在的规格是"约定强度",还配不上"隔离"这个词。
## 5. SoT 落点(已落)
| 原则 | 落点 |
|---|---|
| 1 升级口号 | 领域索引 §3(单一基底、分层权威、分区治理) |
| 2 代价明账 | 08 §5(raw 边界:用外部可审计性换全文可看性,明账) |
| 3 救回 COMPLETED | 06 §7(轮次封存:核对声明集合 == 实际落库集合) |
| 4 强制收拢 + run_type 钉死 | 05 §7(引擎单点强制、run_type 不可变) |
| 5 从预防迁到发现 | 05 §7 / 06 §7(常设不变量) |
| 6 oracle 读侧红线 + 改词 | 05 §7(oracle 不进模型上下文红线;"隔离"→"访问分离") |
## 6. 实现(后续,本文不展开)
以下为概念决定的实现项,另起任务:
1. 引擎单点强制:生产只读角色对评测行默认不可见 + 显式评测可见角色;`run_type` 不可变约束(或 `(eval, accepted)` 不可达约束)。
2. COMPLETED 重设计:轮次封存核对"声明 raw 集合 == 实际落库集合"。
3. 常设不变量:评测卡不绑生产、评测分不进生产视图、正式正文来源不追溯到评测候选——持续跑、违反即报警。
4. oracle 读侧红线:可机械验证"oracle/全文不进任何模型输入上下文"。
5. 术语统一:全文"隔离"→"访问分离 / 引擎强制"。