holoaeon / docs /spec-diff0.md
weideyouni's picture
sync: five-site DNA + B0 baseline freeze (92fd8b5)
9f075f3 verified
|
Raw History Blame Contribute Delete
8.56 kB
# 确定性 Agent 运行时规范 v0.1(草案)
> 发起方:HoloAeon 项目(`holoaeon/spec.py` 的 `VERSION` 为版本权威源)。
> 状态:草案,条款可判定、可被第三方实现。**本规范由 HoloAeon 项目发起,欢迎他方实现。**
> 本文不定义产品形态,只定义「什么算可复现」的下限。仿真是仿真,证明是证明。
## 1 范围
本规范面向「声称自己是确定性 Agent 运行时」的任意实现,规定四件事:
1. 复现哈希(DIFF=0)怎么算,什么字段必须剔除;
2. 理由码怎么枚举,什么算「已解释」;
3. 证据怎么分级,什么算「漂移」;
4. 兼容性怎么分级,什么程度的复现算「合格实现」。
不规定:语言、框架、模型、部署形态、许可证。规范只管证据,不管路线。
## 2 术语
| 术语 | 定义 | 判定方式 |
|---|---|---|
| ReproCore 可复现核心 | 裁决、路由目标、命中技能、技能输出等「同一输入应相同」的字段集合 | 字段名登记在实现方的分类表中,未登记即未知 |
| Physical 物理量 | 时间戳、耗时、线程完成序、进程号、内存地址等「本就该每次不同」的字段 | 同上,必须显式剔除而非丢弃 |
| Canonicalize 规范化 | 剔除物理量、统一数值表示、对集合稳定排序后生成规范 JSON 的过程 | 同一逻辑输入两次输出逐字节一致 |
| ReproHash 复现哈希 | `sha256(canonical_json)` 取前 16 个十六进制字符 | 与实现方冻结的黄金值比对 |
| EvidenceClass 证据分级 | `simulated` / `measured` / `third_party` 三档 | `measured` 必须带来源与测量时刻 |
| Golden 黄金回归值 | 随代码评审冻结的期望哈希或期望输出 | 改动须在 PR 标题标注 `[golden]` |
| Self-Attestation 自证报告 | 一次全量自检 + 基准的可复算报告 | 报告自身哈希可复现,`ts_build` 不进哈希 |
## 3 DIFF=0 哈希协议
### 3.1 三条硬规则
- **R1 显式分类**:实现方必须提供字段分类表(`physical` / `repro` / `opaque`)。未登记字段按物理量处理,并**计数告警**,不得静默丢弃。
- **R2 稳定排序**:任何 `list[dict]` 先按稳定键(如 `step` / `seq` / `agent_id`)排序再递归规范化;集群完成序不可复现,必须靠排序消除。
- **R3 定值序列化**:数值统一为定点字符串(抑制浮点抖动);枚举取 `value`;`None` 序列化为 `null`;键升序、无空白。
### 3.2 必须剔除的字段(最小集)
`ts` / `timestamp` / `elapsed` / `duration` / `started_at` / `finished_at` /
`thread_order` / `addr` / `id_runtime` / `pid` / `uptime_s` / `generated_at`。
> 反例(真实踩过):把整包回执连 `ts` 一起哈希,必然每次不同,于是得出「不确定」的假结论。
> 另一反例:把未登记的业务字段当物理量整段剔掉,哈希对内容失去敏感性,两次跑当然相同——
> 这叫「恒真空转」,比假红灯更危险。**因此规范要求:凡 DIFF=0 的公开声称,必须同时发布篡改敏感性自检。**
### 3.3 算法
```
canonical = canonicalize(receipt) # 按 3.1
h = sha256(canonical_json(canonical))[:16] # 前 16 hex
stable = all(h_i == h_0 for i in runs) # runs ≥ 2,每个 run 用全新内核
```
### 3.4 敏感性自检(强制)
对 ReproCore 的任一字段做单点篡改(如把任务原文改一个字),哈希**必须**变化;
哈希不变即判定该实现「未通过本规范」,因为它的 DIFF=0 是空转。
## 4 理由码规范
### 4.1 结构
每条裁决输出固定三字段:`{action, layer, reason}`。
- `action ∈ {allow, advise, block}`,只允许三值;
- `layer` 为守卫层标识(本实现为 `L1`–`L8`:结构 / 体量 / 危险模式 / 权限 / 身份与失真 / 元数据 / 审计 / 一致性);
- `reason` 为可枚举理由码或人类可读短语,**不得为空**。
### 4.2 理由码分层(参考 NEPHRON 27 码体例的分类法)
| 族 | 前缀 | 含义 | 例 |
|---|---|---|---|
| 结构 | `struct_` | 信封字段缺失 / 类型不符 | `struct_missing_recipient` |
| 体量 | `size_` | 载荷或配额超限 | `size_payload_over_1mib` |
| 危险 | `danger_` | 命中危险调用模式 | `danger_os_system` |
| 权限 | `perm_` | 权限等级不足 | `perm_short_2to0` |
| 身份 | `ident_` | 伪造身份或失真输入 | `ident_claim_admin` |
| 元数据 | `meta_` | trace / 模式缺失 | `meta_no_trace` |
| 审计 | `audit_` | 审计链断裂 | `audit_gap` |
| 诚实 | `hon_` | 证据分级不合规 | `hon_measured_no_source` |
### 4.3 判定口径
- 同一输入 + 同一守卫层配置 → 同一 `reason`(理由码不得含时间、随机值、进程号);
- `block` 必须能指名命中的层与模式;说不出哪一层,就不算「已解释」。
## 5 证据防漂移协议
### 5.1 分级
| 级别 | 含义 | 强制附加字段 |
|---|---|---|
| `simulated` | 仿真 / 构造数据,默认档 | 无(`measure_source` 与 `measure_ts` 必须为 null) |
| `measured` | 本机实测 | `measure_source`(命令或路径)+ `measure_ts` |
| `third_party` | 外部来源 | `measure_source` 指向可核验出处 |
### 5.2 漂移判定
- 出现 `measured` 而缺 `measure_source` → 记诚实告警(`H1`),报告结论至少降为 yellow;
- 回执对象缺 `evidence_class` → 记诚实告警(`H2`);
- 文档里出现「实测 / 真实生效」字样但同目录无非 `simulated` 证据 → `H1`。
### 5.3 CI 体例
```
python scripts/verax_verify.py --out reports # 单一入口
退出码 0=绿 / 1=红(红线或复现或单测不过) / 2=黄(诚实或未知字段告警)
```
报告双导出:`reports/attestation.md`(人读)与 `reports/attestation.jsonl`(机器读,逐行一条检查)。
报告自身 `verdict_hash` 由结论字段规范化生成,`ts_build` 不参与——否则报告自己也漂移。
## 6 兼容性分级
| 等级 | 条件 | 允许的声称 |
|---|---|---|
| `full` | 两个独立 run 的 ReproHash 一致;黄金值命中;敏感性自检通过;物理量差异非空(证明剔除真的在起作用) | 「可回放 / DIFF=0」 |
| `sampled` | 仅部分任务有黄金值,或仅在固定机器上复现 | 「有限复现,未覆盖全任务」 |
| `incompatible` | 哈希不稳定,或字段分类表缺失,或敏感性自检失败 | 不得声称确定性 |
分级必须随证据一起发布;只发布等级、不发布证据,视为未分级。
## 7 自检清单(实现方逐条打勾)
- [ ] D1 字段分类表公开,未知字段计数告警(R1)
- [ ] D2 `list[dict]` 稳定排序后再规范化(R2)
- [ ] D3 数值定点化,枚举取 `value`(R3)
- [ ] D4 两次独立 run 哈希一致
- [ ] D5 篡改 ReproCore 后哈希变化(敏感性自检)
- [ ] D6 黄金值冻结并有评审标记 `[golden]`
- [ ] D7 每条裁决含非空 `reason`
- [ ] D8 回执强制 `evidence_class`,`measured` 带来源与时刻
- [ ] D9 报告 `verdict_hash` 可复现,`ts_build` 不进哈希
- [ ] D10 CI 单入口给出 0/1/2 三态退出码
HoloAeon 自身作为第一实现,D1–D10 全部通过(见 `benchmarks/README.md`、
`docs/VERAX.md`、`reports/attestation.md`)。
## 8 已知限制
- 本规范只管**单机确定性**,不管分布式一致性;
- 理由码族表是分类法,不是封闭枚举:实现方可扩展,但不得修改已有语义;
- 本实现语义通道(`holoaeon/semvec.py`)语料只取 47 条技能自述(与 `docs/` 解耦,改文档不漂移),
实测 **12 条固定意图混合路由 11/12(误路由 8.3%)**(`scripts/bench_semvec.py` 可复跑)。
参数是在同一批意图上选定的,含过拟合风险;留出集 6 条中 2 条期望名不存在,
余 4 条命中 2 条,**泛化未验证**。故路由准确率不纳入本规范的合格判据,只作为披露项;
- 维度取舍:`semvec.DIM=32` 与早期投喂建议的 64 维不同。理由是 32 维与 64 维在 12 条意图上
命中相同,而 `fit` 耗时随维数线性增长(2 GB 旧机口径),故取 32;`MAX_VOCAB=2000`、`MIN_DF=1`
同理是为让 `review / sample` 这类只出现一两次的专名进入词表,否则查询向量会塌成零向量
(稳定语料下实际上限用不满,实测词表 334);
- 规范不承诺任何外部真实性:`measured` 只表示「有人在本机量过」,不等于「结论为真」。