Repository navigation
v2.62.0 — 处置通道阶段 1:工具侧独立台账 + 门禁 47 项(minor)
本 Release 对应 tag
v2.62.0。 上一版 v2.61.1 为 patch(政策允许不建 Release),因此本条直接承接 v2.61.0 的处置通道登记,交付其阶段 1 的工具侧落地。全量逐版记录见 CHANGELOG.md。
本版要解决的问题
v2.61.0 把 spec/13 #44 登记为未解:四信号产出 ledger_signal 之后,体系里不存在任何消费或处置信号的组件——没有处置事件类型、没有处置台账、没有时限义务。信号只被记录、不被回答,审计面板的孤儿信号清单因此恒为「真」。
本版不声称解决 #44(那需要框架侧事件类型,属阶段 2),而是把**「孤儿清单恒真」变成「孤儿清单可收敛」**:处置动作有地方写、写了能被独立重算、面板能看见三态分布。
交付内容
独立模块 tools/disposition/(框架 index.ts 零改动,git diff 为空)
ledger.mts:append-only 写入 /disp_seq分配 /supersedes同 target 校验 /reviewed_by强制且不得等于actor/ 三态派生(未处置 / 观察中 / 已闭合)verify-chain.mts(Node)与verify_chain.py(Python 纯标准库):八类检查逐条对齐,第三方可用任一语言独立重算gen-sample.mts:20 行确定性样本(覆盖四动作、中文 rationale、空复核人、plan字段、更正链)demo-converge.mts+data/disposition.jsonl:V1 三条孤儿 → 2 已闭合 + 0 观察中 + 1 未处置
链规则与跨语言可重算(本版最易失守的一处)
chain_hash = sha256(prev + "|" + JSON.stringify(body)) # body 键序冻结 13 字段
v1 设计稿只写「第三方可独立重算」而不冻结序列化方式——JS JSON.stringify 与 Python json.dumps 默认的空格与非 ASCII 转义不同,跨语言复算会 100% 失败。本版冻结键序表与两语言参数(Python 侧 ensure_ascii=False, separators=(',',':')),实测两端逐字节一致。
门禁第 47 项(46→47)
Node 生成 20 行 → Python 验链 PASS → 内容篡改必 FAIL → 键序破坏必 FAIL(值不变只换顺序)→ 入库台账 PASS。「键序冻结」不能只写在文档里,得让改坏的人当场红灯。
孤儿判定换轨
replay.mts 删除 DISPOSAL_TYPES 空集,改为 target 引用匹配(target_seq + target_chain_hash 前 16 hex 双字段校验,不一致判「疑似错位引用」且不计入闭合)并派生三态。台账缺失或链验证失败 ⇒ 全部按未处置(失败安全:宁可多报孤儿,不可假性闭合)。无台账的旧产物行为与旧版逐字一致。
面板与报告只读联动:新增「处置台账」页签(孤儿数 / 三态分布 / 动作分布 / 自报时延 P50·P90 / 固定警示句)+ /api/disposition + 启动时验链;时间线按三态显示徽章;/report 增台账链验证行。台账不由面板写入——监察(展示)与处置(记录)分属两个组件。
快速验证(零安装 · 零密钥 · 零网络)
git clone https://github.com/ZhangRui987/agent-oversight-framework.git
cd agent-oversight-framework
python tools/disposition/verify_chain.py # 台账链独立重算(Python 标准库)
node --experimental-transform-types tools/disposition/verify-chain.mts # 同一台账,Node 侧重算
node --experimental-transform-types tools/audit-panel/rules/replay.mts # 孤儿判定 → 三态
node --experimental-transform-types tools/audit-panel/server/server.mts # 面板 → 「处置台账」页签诚实边界(不因本版发布而改变)
- #44 状态仍为未解,只补「阶段 1 已落地(工具侧独立台账)」注记——框架侧仍无处置事件类型,闭合要等
spec/10条款化 +index.ts事件类型扩展(阶段 2); tools/disposition/data/disposition.jsonl是演示台账(actor=demo-operator、rationale 以「演示数据」开头),不是真实运维处置;actor为自报标识不验真(E1 采集点完整性 / G4 独立信任域边界原样复现)——进程内台账只能证明「文件未被事后改写」,不能证明「处置者是谁」;- 时延为自报值(处置 ts − 信号 ts),跨机时钟差未校正、不可验证;
- 处置动作枚举刻意不含阻断与扣分类(
auto_block/auto_deduct)——沿 spec/07 阈值标定前置条件与 #39 消费分级红线; route_to_human归入未处置:转交人工不等于处置完成,否则「已转人工」会被读成已闭合、演示会被读成 #44 已解。
计数与联动
门禁 46→47;未解仍 44;版本联动 v2.61.1→v2.62.0。
逐条变更见 CHANGELOG.md 的 v2.62.0 条目;模块规格(链序列化、动作语义、六条边界、阶段 2 迁移路径)见 tools/disposition/README.md。