@agentunion/fastaun-browser 0.5.19 → 0.5.20
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +129 -78
- package/_packed_docs/CHANGELOG.md +129 -78
- package/_packed_docs/INDEX.md +201 -195
- package/_packed_docs/KITE_DOCS_GUIDE.md +93 -90
- package/_packed_docs/agent.md/SCHEMA.md +7 -7
- package/_packed_docs/agent.md//350/277/234/347/250/213agent.md/347/274/223/345/255/230/344/270/216etag/351/200/217/344/274/240/346/226/271/346/241/210.md +11 -11
- package/_packed_docs/protocol/06-/346/234/215/345/212/241/345/215/217/350/256/256.md +1072 -1072
- package/_packed_docs/protocol/10-Group-/345/255/220/345/215/217/350/256/256.md +676 -676
- package/_packed_docs/protocol/11-Storage-/345/255/220/345/215/217/350/256/256.md +8 -12
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/211.md +443 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.0.md +161 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2112.1.md +658 -0
- package/_packed_docs/protocol/Ownership/345/215/217/350/256/256/345/256/232/344/271/2113.0.md +233 -0
- package/_packed_docs/protocol/agent.md/SCHEMA.md +1 -1
- package/_packed_docs/sdk/03-/346/240/270/345/277/203/346/246/202/345/277/265.md +1 -1
- package/_packed_docs/sdk/04-/350/277/236/346/216/245/344/270/216/350/256/244/350/257/201.md +67 -63
- package/_packed_docs/sdk/05-E2EE/345/212/240/345/257/206/351/200/232/344/277/241.md +1 -1
- package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +35 -8
- package/_packed_docs/sdk/08-/346/234/200/344/275/263/345/256/236/350/267/265.md +3 -3
- package/_packed_docs/sdk/09-group-rpc-manual.md +258 -254
- package/_packed_docs/sdk/09-message-rpc-manual.md +7 -4
- package/_packed_docs/sdk/09-storage-rpc-manual.md +18 -26
- package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +61 -52
- package/_packed_docs/sdk/INDEX.md +92 -80
- package/_packed_docs/sdk/Ownership-SDK/345/256/236/347/216/260/346/214/207/345/215/227.md +169 -0
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/227.md +349 -0
- package/_packed_docs/sdk/Ownership-SDK/347/274/226/346/216/222/346/214/207/345/215/2272.1.md +922 -0
- package/_packed_docs/sdk/Ownership-SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +270 -0
- package/_packed_docs/sdk/Ownership2.1-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +300 -0
- package/_packed_docs/sdk/Ownership2.1-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +382 -0
- package/_packed_docs/sdk/Ownership2.1-TDD/345/210/206/351/230/266/346/256/265/345/256/236/346/226/275/350/256/241/345/210/222.md +708 -0
- package/_packed_docs/sdk/Ownership2.1/350/257/246/347/273/206/350/256/276/350/256/241.md +476 -0
- package/_packed_docs/sdk/Ownership/347/256/241/347/220/206/344/270/223/351/242/230.md +559 -0
- package/_packed_docs/sdk/ProtectedHeaders/347/224/250/346/263/225/344/270/223/351/242/230.md +299 -0
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +173 -0
- package/_packed_docs/sdk//345/207/255/350/257/201/344/270/216/347/273/204/347/273/207/346/234/215/345/212/241SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +211 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/345/256/236/347/216/260/347/247/273/346/244/215/346/214/207/345/215/227.md +331 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273SDK/351/233/206/346/210/220/346/214/207/345/215/227.md +207 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/344/273/243/347/240/201/345/256/241/346/237/245/346/212/245/345/221/212.md +252 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/345/256/236/346/226/275/350/256/241/345/210/222.md +156 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/346/226/271/346/241/210.md +273 -0
- package/_packed_docs//350/267/250/350/256/276/345/244/207/345/267/262/350/257/273/346/234/252/350/257/273/350/257/246/347/273/206/350/256/276/350/256/241.md +211 -0
- package/dist/agent-md-schema.d.ts +15 -4
- package/dist/agent-md-schema.d.ts.map +1 -1
- package/dist/agent-md-schema.js +64 -30
- package/dist/agent-md-schema.js.map +1 -1
- package/dist/agent-md.d.ts +10 -2
- package/dist/agent-md.d.ts.map +1 -1
- package/dist/agent-md.js +278 -121
- package/dist/agent-md.js.map +1 -1
- package/dist/aid-store.d.ts +46 -0
- package/dist/aid-store.d.ts.map +1 -1
- package/dist/aid-store.js +149 -10
- package/dist/aid-store.js.map +1 -1
- package/dist/aid.d.ts +4 -1
- package/dist/aid.d.ts.map +1 -1
- package/dist/aid.js +23 -42
- package/dist/aid.js.map +1 -1
- package/dist/auth.d.ts +1 -1
- package/dist/auth.d.ts.map +1 -1
- package/dist/auth.js +85 -18
- package/dist/auth.js.map +1 -1
- package/dist/bundle.js +1581 -781
- package/dist/cert-utils.d.ts +49 -1
- package/dist/cert-utils.d.ts.map +1 -1
- package/dist/cert-utils.js +102 -56
- package/dist/cert-utils.js.map +1 -1
- package/dist/client/delivery.d.ts +7 -0
- package/dist/client/delivery.d.ts.map +1 -1
- package/dist/client/delivery.js +243 -28
- package/dist/client/delivery.js.map +1 -1
- package/dist/client/rpc-pipeline.d.ts.map +1 -1
- package/dist/client/rpc-pipeline.js +89 -77
- package/dist/client/rpc-pipeline.js.map +1 -1
- package/dist/client/v2-e2ee.d.ts.map +1 -1
- package/dist/client/v2-e2ee.js +99 -80
- package/dist/client/v2-e2ee.js.map +1 -1
- package/dist/client.d.ts.map +1 -1
- package/dist/client.js +31 -17
- package/dist/client.js.map +1 -1
- package/dist/crypto.d.ts.map +1 -1
- package/dist/crypto.js +8 -6
- package/dist/crypto.js.map +1 -1
- package/dist/events.d.ts +5 -2
- package/dist/events.d.ts.map +1 -1
- package/dist/events.js +33 -14
- package/dist/events.js.map +1 -1
- package/dist/facades.js +5 -5
- package/dist/facades.js.map +1 -1
- package/dist/index.d.ts +1 -1
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js.map +1 -1
- package/dist/org-protocol.d.ts.map +1 -1
- package/dist/org-protocol.js +72 -12
- package/dist/org-protocol.js.map +1 -1
- package/dist/ownership-v21.d.ts +25 -8
- package/dist/ownership-v21.d.ts.map +1 -1
- package/dist/ownership-v21.js +142 -73
- package/dist/ownership-v21.js.map +1 -1
- package/dist/ownership-workflow.d.ts +6 -1
- package/dist/ownership-workflow.d.ts.map +1 -1
- package/dist/ownership-workflow.js +221 -58
- package/dist/ownership-workflow.js.map +1 -1
- package/dist/tools/cross-sdk-agent.d.ts +2 -1
- package/dist/tools/cross-sdk-agent.d.ts.map +1 -1
- package/dist/tools/cross-sdk-agent.js +91 -8
- package/dist/tools/cross-sdk-agent.js.map +1 -1
- package/dist/transport.d.ts +1 -0
- package/dist/transport.d.ts.map +1 -1
- package/dist/transport.js +2 -0
- package/dist/transport.js.map +1 -1
- package/dist/version.d.ts +1 -1
- package/dist/version.js +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,708 @@
|
|
|
1
|
+
# Ownership 2.1 TDD 分阶段实施计划
|
|
2
|
+
|
|
3
|
+
本计划对照 [协议定义 2.1](../protocol/Ownership协议定义2.1.md)、[SDK 编排指南 2.1](Ownership-SDK编排指南2.1.md) 和 [详细设计](Ownership2.1详细设计.md),明确先验证什么、修改哪些现有文件、怎样修改,以及每阶段可稳定交付的能力。
|
|
4
|
+
|
|
5
|
+
基线为 2026-10-10 的工作区,HEAD `1f03bf2d`,包含尚未提交的实现。第 1—12 节定义当前验收计划;第 13 节保留各轮实施历史,旧契约通过不能替代当前双材料契约验收。
|
|
6
|
+
|
|
7
|
+
## 1. 范围、顺序与执行规则
|
|
8
|
+
|
|
9
|
+
当前通用计划不适用于 Group/Org owner 生命周期。当前实体分支为实体主签、owner token 上传及可选 owner 附签,Group 旧实体上传持续兼容,Org 不开放,见协议 §1.3、§2.5;下文历史 owner 主签/V2 授权验收不能证明当前多签契约,需按当前契约取得独立 Red → Green。
|
|
10
|
+
|
|
11
|
+
### 1.1 路径约定
|
|
12
|
+
|
|
13
|
+
| 前缀 | 实际目录 |
|
|
14
|
+
| --- | --- |
|
|
15
|
+
| SDK | [aun-sdk-core 根目录](../../);表内 ts/、js/、python/、go/ 均相对此目录。 |
|
|
16
|
+
| NS | [../extensions/services/nameservice/go](../../../extensions/services/nameservice/go)。 |
|
|
17
|
+
| ST | [../extensions/services/storage/go](../../../extensions/services/storage/go)。 |
|
|
18
|
+
|
|
19
|
+
本文标为“新增”的文件是计划路径;其它文件均指现有实现。不调整 Kernel、Launcher、Watchdog,不增加 ownership RPC,不改依赖版本。服务只共享协议和测试数据,不引入跨服务代码依赖。
|
|
20
|
+
|
|
21
|
+
### 1.2 阶段 Checklist
|
|
22
|
+
|
|
23
|
+
以下勾选记录原实施阶段的完成情况;本次双材料、动态释放及兼容规则修订须重新验收,不因历史勾选而视为通过。
|
|
24
|
+
|
|
25
|
+
- [x] P0:冻结验收矩阵和跨语言测试向量。
|
|
26
|
+
- [x] P1:实现完整文件格式、签名和角色校验。
|
|
27
|
+
- [x] P2:补齐 Storage 权威查询、完整原子文件发布及权限保护。
|
|
28
|
+
- [x] P3:原实施阶段完成 NS 持久化与原子提交;当前双材料/CAS 契约另按本次修订验收。
|
|
29
|
+
- [x] P4:接入 NS 绑定、锁、解绑、转移与名片同步。
|
|
30
|
+
- [x] P5:实现四端 SDK 内部文件方法与共识检查。
|
|
31
|
+
- [x] P6:接入七个 Facade、审批、P2P 编排与本地事件。
|
|
32
|
+
- [x] P7:恢复、降级、旧版隔离和授权审计完成既定验证;最终恢复缺口已定向补验,具体窗口、持久层及进程边界见第 13 节。
|
|
33
|
+
- [x] P8:既定跨 SDK、单域及双域矩阵已通过;实际运行输入、浏览器范围及历史限制见第 13 节。
|
|
34
|
+
|
|
35
|
+
```mermaid
|
|
36
|
+
flowchart LR
|
|
37
|
+
P0[契约与向量] --> P1[文件层]
|
|
38
|
+
P0 --> P2[Storage 条件与权限]
|
|
39
|
+
P1 --> P3[NS agent.md 与 CAS]
|
|
40
|
+
P2 --> P4[NS 关系验收与副本]
|
|
41
|
+
P3 --> P4
|
|
42
|
+
P4 --> P5[SDK 内部步骤]
|
|
43
|
+
P5 --> P6[SDK 应用编排]
|
|
44
|
+
P6 --> P7[恢复、降级、兼容、审计]
|
|
45
|
+
P7 --> P8[端到端验收]
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
每阶段按小切片执行 Red → Green → 必要的局部整理:先让关键断言在当前实现失败,记录原因;只实现使该断言成立的改动;通过后再做下一切片。阶段不是跨服务提交阶段,不引入 2PC/3PC。
|
|
49
|
+
|
|
50
|
+
每完成一项更新本 Checklist 和实际测试结果。依赖未完成的能力保持不可用,不能临时跳过锁、审批或证书验证来跑通流程。开发阶段部分功能通过不等于生产端已经支持完整 2.1。
|
|
51
|
+
|
|
52
|
+
测试失败立即停止;修复后从失败用例继续,仅重跑受修改影响的已通过用例。本轮用户已授权按现有指南启动、重建相关 Docker 服务;服务代码变化后必须重建并核对容器源码。不得启动裸 Kite 或修改 Kernel、Launcher、Watchdog。
|
|
53
|
+
|
|
54
|
+
## 2. P0:契约与测试基线
|
|
55
|
+
|
|
56
|
+
**前置:** 两份基准文档及详细设计的 D1—D12 不变量。
|
|
57
|
+
|
|
58
|
+
**先写失败用例:**
|
|
59
|
+
|
|
60
|
+
| 编号 | 输入/情景 | 必须观察的结果 |
|
|
61
|
+
| --- | --- | --- |
|
|
62
|
+
| V01 | 相同有效文件分别使用兼容标识、AGENTMD-V2、OWNERSHIP-V2 及合法 TAG。 | 各端按文件角色得出相同结论,不能把 TAG 当成 signer。 |
|
|
63
|
+
| V02 | 改一处正文、改换行、重复键/签名块、未知字段、别名、错误身份。 | 各端一致拒绝;修改尾块 timestamp 不能冒充可信历史验收时间。 |
|
|
64
|
+
| V03 | 版本边界、布尔/浮点伪装整数、非小写 AID、非 UUIDv4。 | 严格类型及范围校验,不依赖语言自动转换。 |
|
|
65
|
+
| V04 | declare、release、transfer_owner、无 owner、self-owner、human。 | agent.md / owner.md 角色规则、版本推进及拒绝条件一致。 |
|
|
66
|
+
| V05 | P2P 的 operation_id、角色方向、审批及 ready action 组合。 | 与指南 2.5 完全对应;旧 type 不能进入新处理器。 |
|
|
67
|
+
|
|
68
|
+
**改哪里、怎么改:**
|
|
69
|
+
|
|
70
|
+
| 位置 | 计划改动 |
|
|
71
|
+
| --- | --- |
|
|
72
|
+
| 新增 `tests/vectors/ownership_v21/` | 保存原始文件字节、测试证书、固定验证时钟、角色/路径上下文、期望解析或拒绝结果。正例包含完整文件签名,不用省略号当测试签名。 |
|
|
73
|
+
| 新增四端 `ownership-v21` / `ownership_v21` 测试文件 | 先接入同一向量,断言结果及原始字节保持。随机 ECDSA 签名不要求每次生成同一值,要求可跨端验签。 |
|
|
74
|
+
| 现有四端 ownership-proof 测试及 Python conformance 测试 | 标清旧格式测试用途;不能把旧 proof 的 complete 当成 2.1 通过证据。 |
|
|
75
|
+
| NS/ST 现有测试夹具 | 提供可控制的时钟、当前完整 owner 文件及存在性、证书状态、数据库冲突和网络响应丢失;测试替身保持既有接口风格。 |
|
|
76
|
+
|
|
77
|
+
契约测试固定当前双文件读取、完整原子发布、清理前核对 NS 与本任务原件,以及 NS HTTP 原 ETag 条件和响应投影;不新增 Storage 路径修订或条件 RPC。
|
|
78
|
+
|
|
79
|
+
**退出标准:** 测试能够证明当前实现缺少哪些 2.1 能力;后续阶段使用同一批断言逐步变绿。只建立测试基线,不开启生产 2.1 能力。
|
|
80
|
+
|
|
81
|
+
## 3. P1:文件格式、签名与角色
|
|
82
|
+
|
|
83
|
+
**前置:** P0;可使用固定证书和时钟,不依赖真实服务。
|
|
84
|
+
|
|
85
|
+
**Red 断言:** V01—V04;另覆盖 payload/尾块大小、严格 Base64 DER、证书 AID/指纹不符、已吊销/不可签名证书、owner.md 被误当名片、agent.md 伪造 action、transfer 中出现已删除的目标文件摘要字段。
|
|
86
|
+
|
|
87
|
+
正例须让两方 declaration_id、declared_at 不同但关系字段一致,以防误用旧 proof 的整段 statement 相等校验;另验证 sub 普通更新必须保留自己的完整旧 statement。
|
|
88
|
+
|
|
89
|
+
**修改清单:**
|
|
90
|
+
|
|
91
|
+
| 现有文件 | 怎么修改 |
|
|
92
|
+
| --- | --- |
|
|
93
|
+
| `ts/src/cert-utils.ts`、`js/src/cert-utils.ts`、`python/src/aun_core/_cert_utils.py`、`go/aid.go` | 扩展尾标识 TAG 解析与构造;支持连续尾块、附签 signer_aid、字段白名单及逐块 prefix 原字节规则;复用现有签名原语。 |
|
|
94
|
+
| `ts/src/agent-md-schema.ts`、`js/src/agent-md-schema.ts`、`python/src/aun_core/agent_md_schema.py`、`go/agent_md_schema.go` | 增加 ownership.statement 和关联 owner 规则,保留现有名片通用字段校验;普通正文更新不能重新生成已锁定 statement。 |
|
|
95
|
+
| `ts/src/aid.ts`、`js/src/aid.ts`、`python/src/aun_core/aid.py`、`go/aid.go` | 将完整文件签名底层与名片专用 schema 分开使用,使 owner.md 可被同一身份签署,不要求 name/type。 |
|
|
96
|
+
| NS `internal/httpserver/agent_md_schema.go` | 修改 `aidParseTailStrictAt` 和 schema 分派,独立实现与 SDK 相同的文件规则,不 import SDK。 |
|
|
97
|
+
| NS `internal/httpserver/agentmd.go` | 复用 CertificateResolver 的当前状态检查;将旧 proof 验证与新完整文件验证隔离。 |
|
|
98
|
+
| 新增四端 `ownership-v21.ts` / `ownership_v21.py` / `ownership_v21.go` | 本阶段只实现文件模型、解析和签名上下文,随后 P5 增加内部步骤;不导出文件操作 Facade。 |
|
|
99
|
+
|
|
100
|
+
**测试位置:** 新增 `ts/tests/unit/ownership-v21.test.ts`、`js/tests/unit/ownership-v21.test.ts`、`python/tests/unit/test_ownership_v21.py`、`go/ownership_v21_test.go`;扩展现有 Go agent_md_schema_test.go、四端 client-agent-md API 测试,以及 NS agentmd_test.go 的文件验证部分。
|
|
101
|
+
|
|
102
|
+
**通过及稳定结果:** 四端与 NS 对同一向量结果一致;普通无 owner 名片不回归。此时只具备文件能力,不声称已有 NS owner 锁或公开编排。
|
|
103
|
+
|
|
104
|
+
## 4. P2:Storage 权威对象与完整文件发布
|
|
105
|
+
|
|
106
|
+
**前置:** P0 的通用 Storage 契约。无需先实现 SDK 编排。
|
|
107
|
+
|
|
108
|
+
**Red 断言:**
|
|
109
|
+
|
|
110
|
+
| 编号 | 场景 | 关键断言 |
|
|
111
|
+
| --- | --- | --- |
|
|
112
|
+
| S01 | 原子替换完整 owner.md,写入中断。 | 读者只见完整旧/新文件;失败不产生不存在窗口。 |
|
|
113
|
+
| S02 | 当前完整原文、摘要或存在性已变化,旧请求迟到。 | 停止旧写入;不宣称检测同内容 ABA 或完整文件回滚。 |
|
|
114
|
+
| S03 | 旧清理任务遇到新 declare。 | 新声明保留;不能使用服务端刚读到的新版本替代旧条件。 |
|
|
115
|
+
| S04 | 缓存负值、网关 404、DB 异常、对象/元数据不一致、恢复未完成。 | 仅真正权威且已就绪的不存在结果可返回 exists=false。 |
|
|
116
|
+
| S05 | 非 owner 持 ACL/token,通过直接写、父目录删除、rename/move/copy、软链/挂载修改规范路径。 | 一律拒绝;不能只保护 PutObject。 |
|
|
117
|
+
| S06 | owner.md 设置私有、TTL 或进入自动清理。 | 不允许间接失去公开声明;已解除引用的 blob GC 仍正常。 |
|
|
118
|
+
| S07 | NS 同步到 sub 根 agent.md;伪造 NS 身份或改写 owner.md。 | 仅可信 NS 的受限副本写入通过;第三方不能获取声明写权限。 |
|
|
119
|
+
| S08 | 创建上传 session 后目标文件已变化,再 CompleteUpload。 | 按创建时保存的条件拒绝发布,force/overwrite 不绕过。 |
|
|
120
|
+
|
|
121
|
+
**修改清单:**
|
|
122
|
+
|
|
123
|
+
| 现有文件 / 方法 | 怎么修改 |
|
|
124
|
+
| --- | --- |
|
|
125
|
+
| ST `internal/repository/object_repository.go` | 保留既有完整文件事务;权威读取绕过正负缓存。 |
|
|
126
|
+
| ST `internal/service/service.go`:PutObject、CreateUploadSession、CompleteUpload | 沿用完整文件原子发布,不新增路径条件字段。 |
|
|
127
|
+
| 同文件:DeleteObject、deleteResolvedObject、FSRemove | 贯穿调用者原条件到仓库,不能用后读版本填充缺失条件。 |
|
|
128
|
+
| 同文件:HeadObject、FSStat、路径解析与授权、DeleteFolder、BatchDelete、MoveObject、FSRename、FSCopy、SetVisibility | 加权威查询模式和统一受保护路径判断;批量与目录操作先检查全部受影响对象。 |
|
|
129
|
+
| ST `internal/service/handlers.go`、`internal/contracts/methods.go` | 扩展已有通用参数与响应映射,沿用版本冲突类别;不新增 ownership 方法。 |
|
|
130
|
+
| ST `internal/rpc/request_context.go` 及现有可信调用者读取点 | 只从已认证上下文识别 NS 副本权限;限定 namespace 与根文件路径。 |
|
|
131
|
+
| ST `internal/cleanup/runner.go`、`internal/cleanup/pending_delete.go`、`internal/collab/service.go` | 检查旁路;让实际文件变更落到统一保护,不重写无关清理/协作流程。 |
|
|
132
|
+
|
|
133
|
+
**测试位置:** 扩展 ST 的 `internal/service/service_test.go`、`handlers_test.go`、`stable_access_test.go`,`internal/repository/object_repository_test.go`、`read_cache_test.go`,`internal/runtime/database_test.go` 及 cleanup 现有测试。
|
|
134
|
+
|
|
135
|
+
**通过及稳定结果:** 提供普通对象能力上的安全补齐;Storage 不保存关系账本。缺少原子发布或权威查询时不得开放 2.1 写流程。
|
|
136
|
+
|
|
137
|
+
## 5. P3:NS 原始文件持久化与本地事务
|
|
138
|
+
|
|
139
|
+
**前置:** P1 的验证材料模型;Storage 可先使用符合 P2 契约的测试替身。
|
|
140
|
+
|
|
141
|
+
**Red 断言:**
|
|
142
|
+
|
|
143
|
+
| 编号 | 场景 | 关键断言 |
|
|
144
|
+
| --- | --- | --- |
|
|
145
|
+
| N01 | NS 提交完整 agent.md 或 CAS 元数据失败。 | 本次名片事务全部回滚;owner.md 由 Storage 独立条件提交。 |
|
|
146
|
+
| N02 | release 发布后重复检查或响应丢失。 | 以当前 agent.md 与 owner.md 动态核验 released;不写独立终局、不递增版本。 |
|
|
147
|
+
| N03 | 正文更新与自签字段清理。 | 正文保留完整声明;清理提交无声明文件后版本投影 0,不保留历史上界。 |
|
|
148
|
+
| N04 | 同一旧版本两个验收同时提交。 | 至多一个成功;失败方不能覆盖新名片或版本。 |
|
|
149
|
+
| N05 | 旧文件重现、重新注册、重启。 | 重新核验两份当前材料与 CAS;不依赖本地缓存/独立账本,不承诺清理后识别全部历史重放。 |
|
|
150
|
+
| N06 | agent.md 提交后、副本同步前中断。 | 读取当前已提交完整文件继续同步;副本不是关系事实。 |
|
|
151
|
+
| N07 | 当前两份材料损坏或不可确认。 | 只降级关系共识、owner 授权及变更;普通名片读取、历史验签、展示和通信继续。 |
|
|
152
|
+
|
|
153
|
+
**修改清单:**
|
|
154
|
+
|
|
155
|
+
| 现有 / 新增文件 | 怎么修改 |
|
|
156
|
+
| --- | --- |
|
|
157
|
+
| NS `internal/repository/mysql.go` | 沿用完整 agent.md 的 CompareAndSwapAgentMD;数据库事务只提交完整文件及 CAS 元数据,不新增关系事实表。 |
|
|
158
|
+
| NS `internal/repository/ownership.go` | 如保留仓储适配,仅服务于完整 agent.md 的 CAS;不独立保存 owner、释放终局或历史证据事实。 |
|
|
159
|
+
| NS `internal/runtime/database.go` | 复用现有数据库恢复;不初始化专用日志、历史高水位或独立关系事实。 |
|
|
160
|
+
| 新增 NS `internal/httpserver/ownership.go` | 定义服务内部关系结果、验证材料和存储接口;本阶段先测试判定与提交边界,不开放新的 HTTP/RPC。 |
|
|
161
|
+
|
|
162
|
+
**测试位置:** 扩展 NS `internal/repository/mysql_test.go`、`internal/runtime/database_test.go`,新增 `internal/repository/ownership_test.go`。利用现有测试数据库设施;真实 MySQL 提交/重启行为在 P8 补验。
|
|
163
|
+
|
|
164
|
+
**通过及稳定结果:** NS 仅原子持久化完整自签 agent.md 和 CAS 元数据;关系由当前两份材料核验,owner.md 由 Storage 独立条件保存。
|
|
165
|
+
|
|
166
|
+
## 6. P4:NS 关系验收、HTTP 与副本
|
|
167
|
+
|
|
168
|
+
**前置:** P1—P3。
|
|
169
|
+
|
|
170
|
+
按“绑定与锁 → 释放 → 连续转移 → 副本同步”四个切片分别 Red/Green,不通过内部 release+bind 拼接转移。
|
|
171
|
+
|
|
172
|
+
**Red 断言:**
|
|
173
|
+
|
|
174
|
+
| 编号 | 场景 | 关键断言 |
|
|
175
|
+
| --- | --- | --- |
|
|
176
|
+
| H01 | owner 先发布、sub 先尝试、任一材料缺失。 | 仅最终材料齐全时接受目标名片;NS 不保存跨方 pending。 |
|
|
177
|
+
| H02 | 锁下删 owner、删 statement、改类型为 human、改为 self-owner、无检查头旧 SDK 上传。 | 全部拒绝;正文普通更新保留完整 statement 时可接受。 |
|
|
178
|
+
| H03 | owner 发布 release,sub 离线,新鲜 GET/HEAD。 | 动态返回 released;原名片字节和声明版本 v 不变。 |
|
|
179
|
+
| H04 | release 有效,但候选文件无效、原 ETag 失效,或旧声明未清理便向同 owner 再绑定。 | 无效候选拒绝;同 owner bind 在建任务或副作用前返回 conflict/action_required,先由 sub 按现有授权清理,不覆盖唯一 release 材料;不额外提交释放记录。 |
|
|
180
|
+
| H05 | 权威删除与缓存/路由 404、超时、错误身份分别出现。 | 只有权威删除释放;其余不解锁、不授权。 |
|
|
181
|
+
| H06 | 原 owner 授权指定目标,目标双文件匹配;另给错误 owner/版本/过期期限。 | 合法路径 v→v+1 直接换锁;非法路径保持原关系。 |
|
|
182
|
+
| H07 | 授权撤回、release 与在途目标 PUT 竞争。 | 按最终验收和实际提交裁决,不能在已提交后反向回滚;不可承诺跨 Storage 瞬时撤回。 |
|
|
183
|
+
| H08 | ETag 命中 304,但 owner 文件已 release;DB 故障。 | 先检查关系再判 304;故障为 unavailable,不是 404。 |
|
|
184
|
+
| H09 | 最终复核时证书吊销、完整 owner 文件变化、时间超限、数据库 CAS 冲突。 | 拒绝使用旧通过结果提交。 |
|
|
185
|
+
| H10 | 普通更新与旧副本 worker 竞争。 | 副本最终匹配 NS 当前全文;旧 ETag/摘要任务不能覆盖新内容。 |
|
|
186
|
+
| H11 | self-owner 绑定、释放、与外部 owner 双向转移,以及 human self-owner。 | 统一双文件/版本规则;human 拒绝。 |
|
|
187
|
+
| H12 | legacy owner 代理头、group 代理分支作用于 2.1 关系。 | 不能绕过本身份签署和上传条件。 |
|
|
188
|
+
|
|
189
|
+
**修改清单:**
|
|
190
|
+
|
|
191
|
+
| 现有 / 新增文件 | 怎么修改 |
|
|
192
|
+
| --- | --- |
|
|
193
|
+
| NS `internal/httpserver/agentmd.go`:get、put | 所有关系写入进入同一串行验收;新鲜 GET/HEAD 绕过缓存,返回三个头并确认释放;区分不可用与不存在。 |
|
|
194
|
+
| 同文件:validateAgentMDUpload、enforceStoredOwner、authorizeAgentMDUploader | 从当前已存 agent.md 确定原 owner,再核验当前 owner.md;新 Header 不是启动保护的开关。 |
|
|
195
|
+
| NS `internal/httpserver/ownership.go` 的关系逻辑 | 动态核验两份当前材料;release/删除只影响关系结果,不更改 sub 签名字节。 |
|
|
196
|
+
| NS `internal/httpserver/agentmd_cache.go` | 保留展示缓存用途;写后更新,最终授权回源。 |
|
|
197
|
+
| NS `internal/httpserver/router.go` | 在 applyBrowserCORS 暴露三个 ownership 响应头,验证带条件头预检。 |
|
|
198
|
+
| NS `cmd/nameservice-go/main.go` | 装配可信 Storage 查询、CA resolver、按 sub 串行服务及恢复检查;缺依赖时不可用。 |
|
|
199
|
+
| NS `internal/httpserver/agentmd_storage_sync.go` | 读取当前已持久化完整名片并按 ETag/完整摘要同步,不把同步待办作为关系事实。 |
|
|
200
|
+
| NS `internal/httpserver/sync.go` | 仅做用途隔离回归;不把原 sync_agent_md 拉取快照接口改成代理上传。 |
|
|
201
|
+
|
|
202
|
+
**测试位置:** 扩展 NS `internal/httpserver/agentmd_test.go`、`router_test.go`、`sync_test.go`,新增 `ownership_test.go`、`agentmd_storage_sync_test.go`;在现有 main_test.go 验证 resolver/worker 装配。
|
|
203
|
+
|
|
204
|
+
**通过及稳定结果:** 单实例 NS 基于当前双文件验收绑定与转移,动态判定 release/删除;不维护独立释放终局。
|
|
205
|
+
|
|
206
|
+
## 7. P5:四端 SDK 内部文件方法与共识
|
|
207
|
+
|
|
208
|
+
**前置:** P1、P4;单元测试用 HTTP/Storage 替身,随后对真实服务验证。
|
|
209
|
+
|
|
210
|
+
**Red 断言:**
|
|
211
|
+
|
|
212
|
+
| 编号 | 场景 | 关键断言 |
|
|
213
|
+
| --- | --- | --- |
|
|
214
|
+
| F01 | 两个 declare 方法签署、发布各自文件。 | 只能使用本端身份;owner 文件保存成功不等于绑定成功。 |
|
|
215
|
+
| F02 | revokeOwneraid 在锁定、release、权威删除三种结果下运行。 | 锁定时 owner_locked;新鲜确认释放才自签清理,清理后无声明、版本投影 0。 |
|
|
216
|
+
| F03 | 原 owner 发布 transfer_owner。 | 不要求目标文件先存在,不添加目标摘要或独立签名。 |
|
|
217
|
+
| F04 | 已签文件提交超时并恢复。 | 使用原 operation 上下文、declaration_id、原始字节和原条件;不重签为新文件盲传。 |
|
|
218
|
+
| F05 | 新鲜查询期间 NS 版本或文档 ETag 改变,或 owner 文件出现 release。 | 不能返回 consensus;按冲突重读或 unavailable。 |
|
|
219
|
+
| F06 | 旧 proof 状态为 complete,但 NS 不支持 2.1。 | 不能返回 2.1 consensus,不启动受保护关系变更。 |
|
|
220
|
+
| F07 | 清理时当前 NS 或 owner 原文已变化。 | 停止旧清理,关系完成状态不回滚。 |
|
|
221
|
+
| F08 | 上传的签名者正确,但调用方为 owner 代 sub 上传。 | SDK 不走 UploadAs,NS 拒绝非本身份认证。 |
|
|
222
|
+
|
|
223
|
+
**修改清单:**
|
|
224
|
+
|
|
225
|
+
| 现有 / 新增文件 | 怎么修改 |
|
|
226
|
+
| --- | --- |
|
|
227
|
+
| P1 新增的四端 ownership_v21 模块 | 实现五个内部方法,公共上下文保存固定版本、条件与原始字节;实现统一共识检查器。 |
|
|
228
|
+
| `ts/src/agent-md.ts`、`js/src/agent-md.ts` | 修改 build/updateOwnershipAgentMd 的新格式路径;抽出内部原始字节提交,避免 upload 每次重签;读写解析 NS 元数据。 |
|
|
229
|
+
| `python/src/aun_core/agent_md.py` | 为 build_ownership_agent_md、upload、download 增加 2.1 路径,完整保留原文;代理参数不能进入新文件流程。 |
|
|
230
|
+
| `go/agent_md_manager.go`、`go/agent_md_http.go` | Upload/resumePendingUpload 拆开准备与实际提交,支持原始字节、条件头及新鲜元数据;新流程不调用 UploadAs。 |
|
|
231
|
+
| 四端旧 ownership-proof / ownership.py 模块 | 只保留旧格式识别和历史工具;移除新流程对旧独立签名/ownership_release 生成器的依赖,不大面积重排文件。 |
|
|
232
|
+
| 四端现有通用 RPC/Storage 调用适配 | 权威完整文件及存在性再读;沿用完整发布与删除接口,不向应用暴露额外 ownership RPC。 |
|
|
233
|
+
|
|
234
|
+
**测试位置:** P1 新增文件继续扩展;更新 `ts/tests/unit/client-agent-md-api.test.ts`、JS 同名测试、`python/tests/unit/test_client_agent_md_api.py`、`go/client_agent_md_api_test.go`。现有 Go ownership_client_test.go 中代上传或托管成功的断言不能继续用作 2.1 成功条件。
|
|
235
|
+
|
|
236
|
+
**通过及稳定结果:** 五个内部步骤可独立完成并安全重试,checkOwnershipConsensus 可读;应用编排尚未接入时,不把内部方法当成正式 Facade 发布。
|
|
237
|
+
|
|
238
|
+
## 8. P6:Facade、持久任务、审批与 P2P
|
|
239
|
+
|
|
240
|
+
**前置:** P5;复用已有消息加密、发送、收件与事件机制。
|
|
241
|
+
|
|
242
|
+
**Red 断言:**
|
|
243
|
+
|
|
244
|
+
| 编号 | 场景 | 关键断言 |
|
|
245
|
+
| --- | --- | --- |
|
|
246
|
+
| W01 | sub 发起绑定。 | owner 未批准不发布文件;批准后 owner 发布,再由 sub 自签提交。 |
|
|
247
|
+
| W02 | owner 发起绑定。 | sub 可以拒绝;拒绝不创建稳定关系,也不发布后续文件。 |
|
|
248
|
+
| W03 | 原 owner 转移,两方审批乱序、只同意一方或一方拒绝。 | 收齐双方同意前不发布授权;拒绝通知另一方停止。 |
|
|
249
|
+
| W04 | 转移由 sub/新 owner 冒充发起,或 accept/ready 来自错误 AID。 | 根据已认证 from_aid、NS 旧关系和固定任务上下文拒绝。 |
|
|
250
|
+
| W05 | 重复 request/accept/ready、未知 action、旧消息 type,分别由 push/pull/重连送达。 | 统一拦截;不向普通 message.received 泄漏;不重复签署或创建任务。 |
|
|
251
|
+
| W06 | 审批或待发送消息保存失败、存储损坏、缺持久化能力。 | 不发回复、不写文件、不默认同意;有效收件不能丢失后仍推进接收确认。 |
|
|
252
|
+
| W07 | 本地应用无界面/未订阅事件/策略返回 pending。 | 保持待审批;明确 accept/reject 后才推进。 |
|
|
253
|
+
| W08 | ACK 或伪造 relation.confirmed 提示到达,NS 尚未验收。 | 不发 completed;重新读取权威事实。 |
|
|
254
|
+
| W09 | 同一 AID 多角色;外部 owner 转移到 self-owner。 | 合并同一接收 AID 的审批角色,不给自己发 P2P;两个文件均需完成。 |
|
|
255
|
+
| W10 | 初始注册保存 owner 意图后重连多次。 | 复用一项编排任务;不提前写旧 proof 或每次重连重发新请求。 |
|
|
256
|
+
| W11 | 两个本地任务/浏览器标签页同时修改同一任务审批。 | 原子条件更新,决定不能互相覆盖;后到冲突不触发网络副作用。 |
|
|
257
|
+
|
|
258
|
+
**修改清单:**
|
|
259
|
+
|
|
260
|
+
| 现有 / 新增文件 | 怎么修改 |
|
|
261
|
+
| --- | --- |
|
|
262
|
+
| 新增 `ts/src/ownership-workflow.ts`、`js/src/ownership-workflow.ts`、`python/src/aun_core/ownership_workflow.py`、`go/ownership_workflow.go` | 实现按 operation_id 持久任务、固定上下文、审批表、待发送项、幂等收件、阶段推进和新 type 校验。文件步骤复用 P5。 |
|
|
263
|
+
| `ts/src/client.ts`、`js/src/client.ts` | 将 _sendOwnershipControl、_handleOwnershipMessage、_resumeOwnership 等接入新编排器;在 _publishAppEvent 等统一投递点保持先拦截再发布。旧 type 独立分派。 |
|
|
264
|
+
| `python/src/aun_core/client.py` | 对应 _send_ownership_control、_handle_ownership_message、_resume_ownership、_resume_ownership_after_connect 接入新任务;接收路径等待持久化。 |
|
|
265
|
+
| `go/ownership_client.go`、`go/client.go`、`go/client_lifecycle.go` | Ownership 方法转接新编排模块;HandleOwnershipMessage 与恢复入口沿用统一语义,避免持有 Client 总锁做网络请求。 |
|
|
266
|
+
| `ts/src/index.ts`、`js/src/index.ts`、`python/src/aun_core/__init__.py` 及各端 AUNClient 定义 | 导出七个应用方法的必要类型;文件步骤保持内部。既有审批方法名按 operation_id 的新任务上下文执行。 |
|
|
267
|
+
| 四端 `aid-store.ts` / `aid_store.py` / `aid_store.go` 与 Client 的 registration_intent 恢复 | 注册 owner 参数只保存本地意图;首次确认无历史关系时发布无 owner 名片,不生成旧 proof。已有关系不得初始化覆盖;网络可用后进入绑定编排,保留审批及原 operation_id。 |
|
|
268
|
+
|
|
269
|
+
**持久化需要同步修改的位置:**
|
|
270
|
+
|
|
271
|
+
| SDK | 现有位置 | 怎么修改 |
|
|
272
|
+
| --- | --- | --- |
|
|
273
|
+
| TS | `ts/src/keystore/local-token-store.ts`、`aid-db.ts` | 增加 2.1 任务原子条件更新与明确读取错误;不使用“可选 saveMetadata 不存在则跳过”的路径。 |
|
|
274
|
+
| JS | `js/src/keystore/indexeddb-token-store.ts`、`indexeddb-shared.ts` | 用 IndexedDB readwrite 事务完成读取、比较和写入;持久成功后才能发送。自定义 store 不满足该能力时拒绝有副作用的编排。 |
|
|
275
|
+
| Python | `python/src/aun_core/keystore/local_token_store.py`、`sqlite_db.py` | 为任务记录在数据库事务内条件更新;解析/读取错误向编排器上报,不能当成空记录覆盖。 |
|
|
276
|
+
| Go | `go/keystore/local_token_store.go`、`aid_db.go`;按需接入 `keystore.go` 的内部能力约束 | 现有 GetMetadataValue 用空值表示缺失/失败,2.1 新读取能力须区分;任务修改使用本地事务与记录修订。 |
|
|
277
|
+
|
|
278
|
+
该能力只用于新的 ownership 任务,不改变其它 metadata 使用者的语义。任务按记录更新,避免读取整个 ownership_records 后覆盖其它任务;待发送项与审批决定存于同一本端原子记录。
|
|
279
|
+
|
|
280
|
+
**测试位置:** 新增 TS/JS `tests/unit/ownership-workflow.test.ts`、Python `tests/unit/test_ownership_workflow.py`、Go `ownership_workflow_test.go`;更新已有 client、ownership_client、aid-store/refactor 及本地存储测试。Browser 用现有 fake-indexeddb 验证事务和双实例竞争。
|
|
281
|
+
|
|
282
|
+
**通过及稳定结果:** 七个公开方法可完成默认审批编排;消息只是通知,NS 才是验收依据。无 UI 应用仅需配置自己的审批策略,不编写上传步骤。
|
|
283
|
+
|
|
284
|
+
## 9. P7:崩溃恢复、降级、兼容与审计
|
|
285
|
+
|
|
286
|
+
**前置:** P4—P6 的正常路径通过。重试能力不能等到本阶段才补持久化,本阶段验证前面每个稳定点。
|
|
287
|
+
|
|
288
|
+
**Red 断言:**
|
|
289
|
+
|
|
290
|
+
| 编号 | 故障/安全场景 | 关键断言 |
|
|
291
|
+
| --- | --- | --- |
|
|
292
|
+
| R01 | 审批保存后、消息发送前崩溃;发送后、本地清除待办前崩溃。 | 恢复相同决定与 operation_id,可重复通知,不重复产生文件副作用。 |
|
|
293
|
+
| R02 | owner 发布、sub PUT 响应丢失。 | owner 当前完整 raw/hash 匹配则仅确认;sub 保存原 ETag 并核对完整原文及已知提交 ETag。未提交时仅在保存的起始原件/原 ETag 仍匹配时重试,不以关系版本推定完成。 |
|
|
294
|
+
| R03 | release 已发布但 NS 不可用,或 sub 离线。 | 保留本地原件和重试进度;恢复按两份当前材料判定,不补造独立释放终局。 |
|
|
295
|
+
| R04 | 旧清理/上传请求在新关系或同路径新文件之后恢复。 | 不删除、不覆盖新代际;不能用最新 ETag 强行重试。 |
|
|
296
|
+
| R05 | 转移过期、撤回与目标上传竞争,或有人停止本端任务。 | 不自动延长期限、解绑重绑或删除文件模拟取消;已提交事实保持。 |
|
|
297
|
+
| R06 | 数据库/Storage 恢复中,当前材料不可确认。 | 仅关系功能 unavailable;普通名片可用。不设独立历史版本上界门槛。 |
|
|
298
|
+
| R07 | P2P、完整原子发布、权威读取、托管能力分别缺失。 | 按设计降级;托管缺失不影响关系,材料不可确认仅保留旧文件。 |
|
|
299
|
+
| R08 | legacy proof 及缺新 Header 的旧客户端。 | 兼容历史读取和原样保留关系材料的正文 CAS 更新,不自动迁入 2.1、不覆盖现代保护。 |
|
|
300
|
+
| R09 | 执行端持有旧共识结果或旧声明 token/ACL,owner 已 release/转移,或清理后重绑复用版本数字。 | 新鲜授权核对当前完整声明并拒绝旧授权;短 TTL 和仅比较版本均不替代核验。 |
|
|
301
|
+
| R10 | 审计写失败或仅保留 URL;历史证书当前过期。 | 前者不执行需 owner 权限的操作;后者按历史留证复验,不要求今天仍 active_signing。 |
|
|
302
|
+
|
|
303
|
+
**修改清单:**
|
|
304
|
+
|
|
305
|
+
| 位置 | 怎么修改 |
|
|
306
|
+
| --- | --- |
|
|
307
|
+
| P6 的四端 workflow 与现有重连恢复入口 | 按详细设计第 8 节逐个故障点恢复;重新读权威事实,分别保存释放确认、名片清理、旧对象清理进度。 |
|
|
308
|
+
| 四端旧 release/rekey/escrow 推进入口 | 新任务不得进入旧自动托管、代签、代传或自动 rekey 路径;保留必要旧记录识别,不能自动转成已批准的新任务。 |
|
|
309
|
+
| NS repository、ownership handler、runtime 恢复检查 | 核验当前完整文件与 CAS,移除关系表、证据表、独立日志及历史高水位作为事实或启动门槛。 |
|
|
310
|
+
| ST 权威查询与 runtime 恢复入口 | 恢复未完成不得返回不存在,不增加路径历史状态。 |
|
|
311
|
+
| NS 当前材料读取与 CAS 提交 | 覆盖完整自签文件、原 NS ETag 和 owner 完整原件;不新增关系事实库。 |
|
|
312
|
+
| 业务执行端接入契约测试 | 验证“实际授权时复验 → 先留证 → 执行 → 追加结果”。当前未定位到统一 owner 权限业务入口,不凭空向 Auth 新增关系方法;实际消费方按该契约接入。 |
|
|
313
|
+
| 四端导出与旧格式隔离 | 新 API 不依赖 legacy proof 的 complete/incomplete;明确未迁入旧关系的 unavailable,不能宣称自动迁移已完成。 |
|
|
314
|
+
|
|
315
|
+
**通过及稳定结果:** 任一失败均落在已定义稳定结果,不丢审批、不重放旧授权、不因旧任务覆盖当前文件。可选托管的业务凭据隔离单独验收;无托管主流程必须全部通过。
|
|
316
|
+
|
|
317
|
+
旧关系自动迁入是边界事项:基准文档没有定义将旧 proof 转成新双文件的授权切换,当前计划交付“保留旧保护并安全拒绝危险写入”,不擅自实现自动签名迁移。
|
|
318
|
+
|
|
319
|
+
## 10. P8:跨 SDK 与环境验收
|
|
320
|
+
|
|
321
|
+
本节保留历史验收计划,不代表当前源码已完成全部环境验收。**前置:** P0—P7 单元与服务模块测试及四 SDK 对齐通过;测试环境按用户已授权的现有指南启动。
|
|
322
|
+
|
|
323
|
+
### 10.1 需要修改的现有测试与适配器
|
|
324
|
+
|
|
325
|
+
| 位置 | 怎么修改 |
|
|
326
|
+
| --- | --- |
|
|
327
|
+
| `python/tests/e2e_test_ownership.py` | 从旧 proof/托管断言改为:两份原始文件、NS 新鲜版本/锁、审批、释放与连续转移;增加离线恢复和副本检查。 |
|
|
328
|
+
| `tests/cross-sdk/cases.single-domain.json` | 保留 Python→TS owner 发起、Go→JS sub 发起这两条入口,改为 2.1 期望;补拒绝、三方转移、释放、self-owner 和能力降级场景。 |
|
|
329
|
+
| `ts/src/tools/cross-sdk-agent.ts`、`js/src/tools/cross-sdk-agent.ts`、`tests/cross-sdk/python/test_agent.py`、`go/cmd/cross-sdk-agent/main.go` | /ownership/bind、accept、status 等测试适配调用新 Facade,返回任务与新鲜共识;补测试所需的 reject、release、transfer 和事件读取。它们是测试 HTTP,不是协议 RPC。 |
|
|
330
|
+
| `tests/cross-sdk/runner/run_cross_sdk_e2e.py`:_run_ownership_case | 不再等待 has_ownership_proof、proof_id 或 agent_md_notified;按 operation_id、审批、实际 NS 结果及双方文件验收。 |
|
|
331
|
+
| 同 runner 及 `test_run_cross_sdk_e2e.py` | 保留当前失败即停;为 ownership 用例保存任务/步骤检查点,恢复先核对真实 NS 版本,避免从开头重复不可逆场景。 |
|
|
332
|
+
| `python/tests/conformance/test_ownership_proof_cross_sdk.py` 及新增 `test_ownership_v21_cross_sdk.py` | 旧 proof 测试仅验证兼容识别,新测试消费统一完整文件向量和六种共识结果。 |
|
|
333
|
+
| `../docker-deploy/federation-test/tests/cross_domain_ownership.py` | 替换旧关系完成断言,覆盖跨域 owner Storage、CA/服务身份、转移通知和权威删除错误分类;不修改无关联邦机制。 |
|
|
334
|
+
|
|
335
|
+
### 10.2 最终验收矩阵
|
|
336
|
+
|
|
337
|
+
| 场景组 | 必须通过的事实 |
|
|
338
|
+
| --- | --- |
|
|
339
|
+
| 互通 | 四端均可作为绑定发起/接收方;轮换四端作为 sub、原 owner、新 owner;原始签名文件可互验。 |
|
|
340
|
+
| 审批 | sub/owner 双向发起绑定;转移仅原 owner 发起;两接收角色均同意、任意一方拒绝、无 UI 策略等待。 |
|
|
341
|
+
| owner 锁 | 通过 HTTP 直接绕过 SDK 尝试清空、换 owner、改 self-owner、改 type、代理上传均失败。 |
|
|
342
|
+
| 释放 | 匹配 release/权威删除动态解除 owner 授权,声明版本 v 不变;同 owner 再绑定须先由 sub 清理,建任务或副作用前阻止未清理重绑;清理后投影 0,SDK 默认再绑使用 1、不同 owner 未清理时用可见 v+1;NS 绑定验收仅要求双方明确一致正版本。 |
|
|
343
|
+
| 转移 | 连续 v→v+1 无无主窗口;错误目标/版本/过期、只获一方同意、缺失目标文件均不完成。 |
|
|
344
|
+
| 恢复 | SDK/NS/Storage 关键提交前后中断、响应丢失、旧消息重放、迟到清理、后续版本覆盖保护。 |
|
|
345
|
+
| 持久化 | 真实数据库事务/CAS 原子保存完整 sub agent.md;owner.md 独立条件保存。响应丢失核对原文、摘要及条件,不以关系表/证据表/日志验收。 |
|
|
346
|
+
| 副本 | NS 原始名片和 sub Storage 的最终副本逐字节一致;普通正文更新也同步;失败不回滚关系。 |
|
|
347
|
+
| 可信边界 | 公开下载 owner.md,第三方所有写删旁路被挡;网关 404/缓存错误不解锁;跨域查询验证服务及 namespace。 |
|
|
348
|
+
| 兼容/降级 | 旧 SDK 不绕锁;未知消息不误处理;NS 无 2.1 时拒绝关系变更;缺托管仍可正常完成。 |
|
|
349
|
+
|
|
350
|
+
**退出标准:** 记录每个场景的用例 ID、SDK 角色、NS 前后版本、文档摘要、owner 文件原件、审计引用和最终状态。先完成原有两条 cross-sdk 场景,再扩展角色轮换;已通过且未受后续修改影响的用例不重复运行。
|
|
351
|
+
|
|
352
|
+
## 11. 测试命令与续跑方法
|
|
353
|
+
|
|
354
|
+
本节命令供实施阶段使用;新增测试文件须先按阶段创建。它们不启动 Kite 服务,不代表本轮已执行。
|
|
355
|
+
|
|
356
|
+
| 工作目录 | 定向测试 / 静态检查 |
|
|
357
|
+
| --- | --- |
|
|
358
|
+
| `ts/` | `node --max-opt=0 node_modules/vitest/vitest.mjs run tests/unit/ownership-v21.test.ts --pool forks --bail=1`;P6 将文件换为 ownership-workflow.test.ts。类型检查:`node --max-opt=0 node_modules/typescript/bin/tsc --noEmit`。 |
|
|
359
|
+
| `js/` | 上述 Vitest 命令加 `--environment jsdom --maxWorkers=1 --no-file-parallelism`;类型检查沿用本地 tsc --noEmit。Browser E2E 沿用现有构建与 Playwright 配置。 |
|
|
360
|
+
| `python/` | `python -X utf8 -m pytest tests/unit/test_ownership_v21.py -x -v --tb=short`;后续指定 workflow/conformance 文件。当前 pyproject 没有独立 lint/typecheck 配置,记录这一限制,不虚报检查通过。 |
|
|
361
|
+
| `go/` | `go test . -run 'TestOwnershipV21' -count=1 -failfast`;后续选择 workflow/client 测试前缀。受影响 keystore 包单独测试。静态检查使用 `go vet` 对应包。 |
|
|
362
|
+
| NS 根目录 | 按阶段运行 `go test ./internal/repository -count=1 -failfast`、`./internal/httpserver`、`./internal/runtime`、`./cmd/nameservice-go`;必要时用 -run 限定失败用例。 |
|
|
363
|
+
| ST 根目录 | 同样定向运行 `./internal/repository`、`./internal/service`、`./internal/runtime`、`./internal/cleanup`;不以一次全仓扫描替代关键断言。 |
|
|
364
|
+
|
|
365
|
+
有明确失败时保存用例完整名称:Vitest 用 `-t`,pytest 用节点 ID,Go 用精确 `-run` 修复重跑;之后继续该阶段剩余测试。各阶段测试通过且无新改动,不反复扩大测试范围。
|
|
366
|
+
|
|
367
|
+
cross-sdk runner 当前通过 `CROSS_SDK_CASES` 选择用例文件,已经失败即停,没有通用 `--resume` 参数。实施时在 artifact 中保存本次 ownership 检查点,使用单独的剩余用例清单从失败处继续,不覆盖正式 cases 文件或伪造已经完成的步骤。
|
|
368
|
+
|
|
369
|
+
环境说明复用 [AUN 测试运行指南](../aun测试运行指南.md)、[分布式测试运行指南](../aun分布式测试运行指南.md)、[公网测试运行指南](../aun公网测试运行指南.md)。对外服务地址使用 `{svc}.{issuer}`;Windows 的 Python 命令保持 -X utf8。缺少环境、证书或服务时记录未运行项目,不将其算作通过。
|
|
370
|
+
|
|
371
|
+
## 12. 不变量追踪与交付门槛
|
|
372
|
+
|
|
373
|
+
| 详细设计不变量 | 主要用例 | 必须完成阶段 |
|
|
374
|
+
| --- | --- | --- |
|
|
375
|
+
| D1 身份与自签、自传 | V01—V04、F01/F08、H12 | P1、P4、P5 |
|
|
376
|
+
| D2 锁及所有写入口 | H02/H12、R08 | P4、P7 |
|
|
377
|
+
| D3 原 owner 授权 | H03—H07、W03/W04 | P4、P6 |
|
|
378
|
+
| D4 当前声明版本与原条件隔离 | N02—N05、H06、R04 | P3、P4、P7 |
|
|
379
|
+
| D5 NS 本地原子提交 | N01/N04/N06、H04 | P3、P4、P8 |
|
|
380
|
+
| D6 Storage 完整原件与权限 | S01—S08、F07 | P2、P5 |
|
|
381
|
+
| D7 不确定结果不解锁 | S04、N07、H05/H08/H09、R06 | P2—P4、P7 |
|
|
382
|
+
| D8 审批与验收分离 | W01—W09 | P6 |
|
|
383
|
+
| D9 本端持久与恢复 | W06/W10/W11、R01—R05 | P6、P7 |
|
|
384
|
+
| D10 独立后续恢复 | H10、R03/R04/R07 | P4、P7 |
|
|
385
|
+
| D11 授权审计 | N01、R09/R10 | P3、P7 |
|
|
386
|
+
| D12 降级及 self-owner | H11、F06、W09、R07/R08 | P4—P7 |
|
|
387
|
+
|
|
388
|
+
当前版本的交付门槛是单实例 NS、四端 SDK 与 Storage 的上述能力全部验收。启用 NS 多实例前另验证共享数据库、分布式锁、提交 fencing 和锁失效竞争,不能只把进程锁替换成 Redis 租约就宣称通过。
|
|
389
|
+
|
|
390
|
+
上线顺序为 Storage 必需能力 → NS 双材料核验与 agent.md CAS 保护入口 → 四端 SDK。已有 2.1 文件后,不能回退到会绕过原关系保护的旧 NS;关系不可确认时暂停相应关系变更和 owner 权限消费,保留普通名片与身份通信。旧客户端缺新 Header 的兼容入口仍按协议保护当前文件。本计划不表示已实施产品发布或依赖版本变更。
|
|
391
|
+
|
|
392
|
+
## 13. 2026-10-10 实施账本
|
|
393
|
+
|
|
394
|
+
### 13.1 当前 Checklist 与基线
|
|
395
|
+
|
|
396
|
+
- [x] 完整读取四份 2.1 文档及全局、SDK、服务目录规约。
|
|
397
|
+
- [x] 核对真实代码:初始为 legacy proof / `aun.ownership.v1` 基础;初始没有 `aun.ownership.sdk.v1`、2.1 NS 账本。
|
|
398
|
+
- [x] 已保存初始未提交代码基线与 SHA256。后续发生的宿主 js/dist 覆盖、69 份原字节未取得及原群 pending 丢失等偏差见 13.4;本项不表示全部原件已保全或恢复。本团队不修改文档索引,工作区外部索引变动单独保留。
|
|
399
|
+
- [x] 冻结文件格式、Storage 条件与返回、Facade 结果、审批及完成判断。
|
|
400
|
+
- [x] P0 共同向量生成;113 个文件向量已由四 SDK 和 NS 全部消费通过。
|
|
401
|
+
- [x] P0 消息向量与六态向量全部接入实际处理器。
|
|
402
|
+
- [x] NS、Storage、四 SDK 的 P1—P7 实现与所需定向验证完成;最终恢复补验新增 17 个 SDK 参数项及 1 个 Storage 独立进程父用例通过,静态检查无新增诊断。既有通过批次、历史失败、非零诊断及未运行环境项继续分列于 13.4。
|
|
403
|
+
- [x] 必要的 CA / Gateway 当前证书状态通用适配及单元、静态检查;单域及本轮双方向联邦的当前权威证书验收已通过,具体运行版本与证据范围见 13.4。
|
|
404
|
+
- [x] 四 SDK 一致性矩阵及相关文档与代码对齐;10.2 的提交前后中断、持久恢复和实际进程边界已按原断言及真实输出核对,见 13.4、13.6。
|
|
405
|
+
- [x] Docker 单域 integration 10 / 10、pub MySQL 原 4 项加 Storage 独立进程新增 1 项,累计唯一 5 / 5、Linux v3 race 19 / 19、单域 E2E 14 / 14。
|
|
406
|
+
- [x] 跨 SDK 按断点累计唯一 25 / 25 通过;本次原 CP4 续 12 全部通过,Docker client / 容器 / 实际外层 exit 0,全部运行保护通过,前 13 项未重跑。原 JS 进程旧 bundle 的交互结果与当前新 JS 的独立三 GET 验证分列。
|
|
407
|
+
- [x] `agentid.pub` / `agentid.cn` 双方向联邦按原 CP39 续 11 / 11 通过,累计唯一 16 / 16:12 项真实网络、2 项 Storage 权限边界、2 项 adapter 故障分类,正反各 8。Docker client / 容器 / 实际外层 exit 均为 0;原删除及前 5 项未重发,F1 无堆栈首败继续保留。该联邦脚本不覆盖真实服务重启。
|
|
408
|
+
- [x] 全部所需测试后再次复核 SDK 与四文档;原始失败、运行版本、证据范围及未恢复原件等限制保留于 13.4、13.6,未将通过外推为全工作区或所有平台已验证。
|
|
409
|
+
|
|
410
|
+
本轮证据根目录为 `tests/cross-sdk/artifacts/ownership-v21-20261010T100537Z/`。其中 `baseline/manifest.json` 和 `baseline/git-status.txt` 保存初始源码副本、逐文件摘要及约 405 项原有工作区状态;`baseline` 不作为测试结果。各执行线使用各自子目录,禁止覆盖既存的 `ownership-latest`、`results.json` 或 `cases.resume.json`。
|
|
411
|
+
|
|
412
|
+
### 13.2 依赖与文件所有权
|
|
413
|
+
|
|
414
|
+
总指挥通过显式 `gpt-6-astra` / `max` 配置承担安全裁决、契约、调度和审查。下列执行器均通过显式 `gpt-6.1-sol` / `max` 配置启动。单元阶段由所属执行器修复;Docker 阶段执行器只复现、留证和复测,业务修复由总指挥处理。
|
|
415
|
+
|
|
416
|
+
| 任务 / 负责人 | 输入、依赖 | 独占编辑范围及方式 | 输出 / 验收 | 当前状态 |
|
|
417
|
+
| --- | --- | --- | --- | --- |
|
|
418
|
+
| 公共向量及环境测试 / `vectors_tests` | 四文档与冻结契约 | `tests/vectors/ownership_v21/`、Python Ownership E2E / 新 integration / conformance、cross-sdk runner / cases、federation Ownership 脚本 | 完整可验签字节向量;真实环境断言、失败即停及续跑 | 向量与环境脚本完成本地验证;Docker 期间的事件选择器、释放等待及原群恢复修正见 13.4,最新静态新增诊断为 0 |
|
|
419
|
+
| NS / `ns_impl` | P1;Storage / CA 可先使用严格契约替身 | `extensions/services/nameservice/go/` 的相关 httpserver、repository、runtime、main 及测试 | 本地原子账本、证据、锁、释放 / 转移、恢复、副本及真实装配 | 单元及静态、单域、真实 MySQL 原子恢复、Linux v3 race 19 项及既定跨端 / 双域验收通过;MySQL 独立恢复进程范围见 13.4 |
|
|
420
|
+
| Storage / `storage_impl` | P0 通用契约 | `extensions/services/storage/go/` 相关仓库、服务、权限及测试 | 权威完整文件、原子发布、全部路径保护 | 历史验证不替代本次移除路径修订机制后的重新验收 |
|
|
421
|
+
| Python / `python_impl` | P1;P5 网络依赖未完成时仅单元替身 | `python/src/`、对应 `python/tests/unit/`、`tests/cross-sdk/python/test_agent.py` | 七 Facade、文件层、审批、持久恢复;单元与静态验证 | 普通 / 群条件上传及群生命周期修补完成,新增 10 项与旧 60 项通过;最终恢复新增 5 项通过,静态新增诊断为 0,历史诊断保留;网络结果见 13.4 |
|
|
422
|
+
| Node TS / `ts_impl` | 同上 | `ts/src/` 及对应 unit / conformance,含自身测试 agent | 同上;类型检查 | 群生命周期新增 10 项、旧 35 项及最终恢复新增 6 项通过;src 类型检查 exit 0,后续生产输入相同而沿用;既定网络验收完成 |
|
|
423
|
+
| Browser JS / `js_impl` | 同上 | `js/src/` 及对应 unit / conformance / browser 测试,含自身测试 agent | 同上;IndexedDB 多实例 CAS、浏览器适配、类型检查 | 群生命周期新增 10 项、旧 40 项及 R01 新单例通过,最新类型检查 exit 0;原生离线 8 项、当前 AuthFlow 三 GET 和 cross 旧 bundle 的结果分列 |
|
|
424
|
+
| Go SDK / `go_impl` | 同上 | `go/` 内相关源码、keystore、测试及自身测试 agent | 同上;Go 定向测试与 vet | 群生命周期 10 项、旧 38 个顶层用例及最终恢复新增 3 父 / 5 叶通过;定向 vet、格式和此前 Windows agent 构建通过,实际 Go 1.24.0;网络结果见 13.4 |
|
|
425
|
+
| 当前证书状态 / `cert_adapter` | 已证实旧 CA 缓存、PKI 无 lifecycle 的缺口 | CA / Gateway Go 的必要通用适配与对应测试 | 当前精确指纹的可签状态、链和吊销材料;跨域一致 | 单元及 vet 完成,单域与本轮双方向联邦当前权威证书验收通过;实际输入及首败限制见 13.4 |
|
|
426
|
+
| 文档、契约与最终验收 / 总指挥 | 所有实施输出 | 本节、四份 2.1 文档;Docker 阶段定位到的必要修复 | 四端一致性、独立审查、测试证据和真实限制 | 既定验证与四文档对齐完成;源码归属按真实窄补丁和冻结字节单独汇合,不认领外部漂移 |
|
|
427
|
+
|
|
428
|
+
P1、Storage 和 SDK 本地持久化可并行;NS / SDK 对未完成网络能力只能进行契约替身单元测试,不能计为真实集成通过。收尾时将 `go/cmd/cross-sdk-agent/main.go`、`main_test.go` 的 Ownership 部分从 `go_impl` 划给已冻结 TS 源码的原 `ts_impl` 执行器,避免同文件并行编辑,未新增代理。Docker 为全局唯一串行执行名额;服务源码冻结后允许唯一 tester 先构建镜像,SDK 收尾期间不切换运行服务、不运行数据库或网络测试。
|
|
429
|
+
|
|
430
|
+
### 13.3 原实施阶段冻结的实现契约(历史)
|
|
431
|
+
|
|
432
|
+
本节保留当时实现约定;其中独立账本、释放终局、版本递增及强制旧客户端 Header 的旧约定已由当前协议与第 1—12 节取代。
|
|
433
|
+
|
|
434
|
+
| 边界 | 本轮统一约定 |
|
|
435
|
+
| --- | --- |
|
|
436
|
+
| 文件与向量 | 遵循协议全部字节、字段、证书规则。共同文件为 `tests/vectors/ownership_v21/vectors.json`,固定验证时间 `1791524400`;`raw_base64` 保存完整文件,角色为 `agent` / `owner`,分别记录 schema 与完整验签预期。测试证书与当前状态替身不代表真实 CA 已通过。 |
|
|
437
|
+
| Storage 权威读 | 复用 `storage.head_object`、`fs.stat` / `storage.get_object`,参数 `consistency: authoritative`。返回 `exists`、`owner_aid`、`bucket`、规范 `path`、Unix 秒 `observed_at`;存在时附 `sha256`、现有 `object_id/version`。故障不返回 `exists=false`。 |
|
|
438
|
+
| 完整正文 | `get_object.content` 沿用严格 Base64;前后再读核对当前完整原文、存在性及摘要。复用认证 Gateway → owner 域路由 → 认证 federation → Storage service-plane 的通道及 RPC 响应绑定;服务标签来自路由约束,不是 Storage 自报证书。 |
|
|
439
|
+
| 写入与清理 | 写前核对起始存在性、完整原文和摘要,完整原子发布;清理前重新核对当前 NS 与本任务 owner 原件。沿用既有 Storage 接口,不新增路径条件或删除历史。 |
|
|
440
|
+
| NS HTTP | 普通主体的新鲜检查头、no-cache、禁止自动重定向及协议 / 版本 / 锁三响应头遵循协议;缺失能力返回 unavailable。初始 404 只有来自 NS 且具备完整可靠元数据才能认定 unbound,数据库失败为 503。普通完整文件 PUT 使用原 ETag 条件,认证上传者等于文件 AID;无声明或 unlocked 不回落代理上传。服务端缺少请求条件返回 HTTP 428,SDK 将其统一映射为 `unsupported_protocol`;合规 SDK 始终携带原条件,收到 428 不得移除条件或降级重试。Group/Org 按权威类型分流、查询新鲜专属生命周期及实体当前证书,使用实体主签、owner token 及可选 owner 附签,不使用普通六态头或通用关系流程。 |
|
|
441
|
+
| 名片副本身份 | 沿用 Gateway 已认证 service-plane 覆盖的 `_caller_id=nameservice`,在可信入站边界保存内部上下文;仅授予本域 `default/agent.md` 副本权限,federation 和公共参数不能伪造。受保护路径的联邦写删另核对 requester AID 的 issuer 与可信 `from_issuer`,不能让远端冒用本域 owner 绕过本人分支。NS 普通 Storage 查询使用本域 NS 的 `_auth.aid`,不冒充目标 owner。 |
|
|
442
|
+
| Facade 名称 | TS / JS 使用指南 camelCase;Python 使用 `bind_owner_aid` / `bind_sub_aid` / `release_sub_aid` / `transfer_sub_aid` 及对应审批、检查 snake_case;Go 使用 `BindOwneraid` / `BindSubaid` / `ReleaseSubaid` / `TransferSubaid` 及对应审批、检查方法。五个文件方法不公开导出。 |
|
|
443
|
+
| 任务返回 | 固定 `operation_id`、`operation`、参与 AID、起始 / 目标版本、`status`、`step`;status 为 `pending` / `completed` / `rejected` / `stopped` / `error`,错误可附 `code`、`reason`、`retryable`。网络提示不等于 completed。 |
|
|
444
|
+
| 重复发起 | 新操作资格检查前查找本端身份、发起方、operation、sub、原 owner、新 owner、base/target 版本完全匹配的进行中任务;复用原 ID、审批、原签名字节、原条件及期限。原代际继续,精确目标已提交时按新鲜事实与完整本人证据完成原任务;同代际不同意图 conflict 且不造第二任务,并发相同意图只保留一个。后代际先停止旧任务再发起新合法操作;拒绝、停止、不可重试 error 不复活,历史 completed 不凭参数相同复用。 |
|
|
445
|
+
| 时间整数 | declared_at、expires_at、签名 timestamp 统一为 `1..9007199254740991` 的十进制正整数原词法;拒绝符号、前导零、浮点、指数、hex、字符串、bool 和越界。先词法及范围、后数字或日期转换;无效归 invalid,保留证书、当前时钟及授权有效期语义,重试不延期,不另设年份上界。 |
|
|
446
|
+
| 错误与任务状态 | unavailable 表示服务、网络或验证依赖不可用;同一权威快照内部的元数据、正文摘要不自洽,以及 Storage Base64 传输封装损坏也归 unavailable。新鲜重读发现远端 NS ETag、关系版本、锁或 owner 完整原文、摘要或存在性已不满足原条件,归 conflict 并停止旧条件写入;本地任务存储/CAS/租约失败归 persistence_unavailable。invalid 表示确定无效的签名、证书、文件或证据,包括摘要匹配后的非法 UTF-8 或文件内容。等审批/材料、暂不可用、unsupported_protocol 为 pending/true;版本替代、目标改变、过期或原条件失效为 stopped/false;确定材料无效为 error/false;有效拒绝为 rejected/false;完整目标确认 completed/false。预检失败不建任务;已完成任务不因通知/清理失败降级,stopped 前先核精确目标,终态不被迟到消息重启。 |
|
|
447
|
+
| 共识返回 | 普通主体的 `status` 为协议六态;Group/Org 作为 `sub` 时返回特殊 `status/code=not_applicable`、`retryable=false`,不属于普通六态。附 `sub_aid`、当前有效 `owner_aid` 或 null、关系版本、锁、NS ETag / 全文摘要、owner 全文摘要。未观察的权威字段语义上为空;各 SDK 可用 `null` 或语言类型所需的占位值表示,但 `0`、`unlocked`、空字符串等占位值不是观察事实。调用方必须先检查 `status`,不能用这些值推断 v0 或无锁;也不能用 legacy complete 布尔值替代。总窗口 30 秒从首次 NS GET 发出前计时,覆盖首读、证书/Storage 与末读;材料变化或超时为可重试 unavailable。 |
|
|
448
|
+
| P2P 边界 | 协议不定义关系授权 RPC 或权威关系控制方法;SDK 可用普通加密 P2P 载荷进行非权威的本地申请、审批及 ready 编排。载荷不构成关系授权或 NS 提交事实,不能替代双方声明文件、NS 验收或持久任务状态。 |
|
|
449
|
+
| 释放当前读取 | 当前声明 v 与匹配 release/权威删除返回 released,版本仍 v;清理后无声明返回 unbound/0。缺头和旧文件仍允许普通读取。 |
|
|
450
|
+
| 审批与有效期 | 任务不因超时自动批准。转移首次发布授权时采用 3600 秒本地有限时长,持久保存实际期限;接收方首次验证后固定全文摘要 authorization_sha256 和实际 expires_at,恢复不接受换字节或延期;重试不延长,过期须新的明确发起与审批。 |
|
|
451
|
+
| 释放后的 sub 清理授权 | 收到 release 通知时,本人明确 accept、sub 角色及本人已签 agent 的原 owner/sub/完整 statement 匹配的原绑定/转移任务可授权,即使因发布响应丢失仍 pending;无控制消息仅已完成历史任务的恢复路径触发自动清理。按当前 release/删除和原 CAS 自签,无授权不自动签写;清理后须以本任务原件或匹配原任务 release_cleanup、摘要、原 CAS 及已知提交 ETag 精确确认当前 NS 原文/摘要/ETag,不能据空字段或版本判断。真实证据保存 unbound/0,任务版本仍 v,本地 completed 不构成当前关系事实。 |
|
|
452
|
+
| 持久化 | 每任务修订 CAS;审批与 outbox 原子保存;文件先保存原始已签字节和原条件后发布。普通待上传自动恢复先校验原条件,缺条件时在远端读取前拒绝并保留原元数据 / 错误,即使远端同字节也不能自动清待办。Group/Org pending 在实体命名空间保存实体主签及附签的完整原字节、原 CAS、固定 owner 和实体证书代际;恢复新鲜查专属 lifecycle,转移/解散或旧指纹后停止,不改 owner/指纹/条件重签。缺存储、读错、损坏不能当空任务,pending 不自动同意。 |
|
|
453
|
+
| 实体待办授权 | 取消实体 V2 上传授权及其过期窗口;显式重试验证完整原始多签文件、原 CAS、固定 owner 和当前实体代际,转移/rekey/解散后停止旧待办;不把附签或 token 当作当前 owner 事实。 |
|
|
454
|
+
| 完成原件 | 按本人文件角色、签名者、owner/sub、base/target、action、转移目标/实际期限及原条件核对固定任务上下文;原 owner 缺本任务 transfer 授权不得冒认外部转移完成。合法历史只复验结构/上下文,不要求现在仍可签或授权未过期,不从当前网络补造历史。 |
|
|
455
|
+
| 发起预检 | human 绑定与目标代际超过安全整数上界以 invalid 在任务/消息/文件副作用前拒绝;非当前 owner 发起 release/transfer 返回 forbidden。 |
|
|
456
|
+
| 实际收件边界 | 解密后保留控制 JSON 原文,拒绝重复键及非整数版本词法,发送者只取已认证 from_aid。有效收件持久成功后才移除 pending / 有序队列原消息、推进游标或 ACK;存储失败不得变成应用消息或不可解密提示。 |
|
|
457
|
+
| 恢复边界 | 重新读取当前 agent.md、owner.md,核对原 NS ETag 及起始完整原件;缺失或不可确认仅令关系 unavailable。无独立释放记录、历史版本上界、全局一致快照或 ABA 检测保证。 |
|
|
458
|
+
|
|
459
|
+
旧有 `ca.get_cert` 正向缓存、`get_cert_chain` 缺少 lifecycle、OCSP 对 verify-only 返回 good,以及 SDK 只通过普通 PKI HTTP 取证书,均不能单独证明当前 `active_signing`。以下通用适配已实现并通过 CA / Gateway 单元测试,四 SDK 严格消费已完成本地验证,真实网络验收进度见 13.4;单元中的显式验证材料不代表网络已通过。
|
|
460
|
+
|
|
461
|
+
| 当前证书边界 | 精确契约 |
|
|
462
|
+
| --- | --- |
|
|
463
|
+
| CA | 既有 `ca.get_cert` 增加 `consistency: authoritative`,完全绕过缓存和 issuer 内存 fallback,返回精确指纹所选 DB 证书的实际 `lifecycle_state`、`consistency` 及 UTC RFC3339Nano `observed_at`;不从 OCSP good 推导可签状态。 |
|
|
464
|
+
| SDK 的 PKI HTTP | 既有 `/pki/cert/{aid}?cert_fingerprint=sha256:<完整DER摘要>&consistency=authoritative` 保持 PEM 正文;精确 AID 和指纹查询可省略 `key_purpose`,已知 group 时使用 `group_identity`。响应增加 `X-AUN-Cert-Consistency: authoritative`、`X-AUN-Cert-Lifecycle-State`、`X-AUN-Cert-Fingerprint`、`X-AUN-Cert-Observed-At`,`Cache-Control: no-store`;浏览器可读取这些头。404 无这四头,不能用作权威不存在证明。 |
|
|
465
|
+
| 跨域 | 权威查询绕远端正缓存,传递相同请求条件;核对返回 PEM、AID、指纹、权威头和新鲜时间,缺失能力不回退普通缓存路径。 |
|
|
466
|
+
| NS 的认证 resolver | 既有 `gateway.resolve_verified_aid_cert` 增加相同 consistency,保留严格链、AID、DER 指纹及当前 OCSP 核验。权威结果包含当前 lifecycle、consistency、observed_at、完整证书链及 OCSP 材料;可规范化为 `chain_verified=true`、`revocation_checked=true`、`revocation_status=good`、`current_state_checked=true`。 |
|
|
467
|
+
| 新鲜度与验收 | CA `observed_at` 与 OCSP `ThisUpdate` 最多过去 30 秒,`ProducedAt` 最多过去 90 秒,未来时间偏差均最多 5 秒;`NextUpdate` 严格晚于当前时间和 `ThisUpdate`。CA 使用的 Go OCSP 签发器会把 `ProducedAt` 截断到分钟,90 秒包含该取整误差,不放宽当前状态窗口。最终 NS 验收重新核对。SDK 链获取及 OCSP 接收后按当时当前时间复核新鲜度,末尾再验链有效期;OCSP CertID serial、issuer name/key hash、ResponderID 均绑定本次链选定的直接 issuer,只接受其亲签及同一 issuer 内嵌证书,不接受委派 responder。新文件要求实际 `active_signing`,SDK 另做严格链和吊销验证,不能使用历史 signedAt 路径跳过当前状态。缺头 / 无法确认返回 unavailable,已知无效状态按 invalid;不默认验证成功。 |
|
|
468
|
+
|
|
469
|
+
四端错误保持相同业务含义,语言原有异常类型可保留:`owner_locked`(有效旧锁,不能自动继续)、`conflict`(HTTP 409 / 412 或 Storage 既有版本冲突,停止旧条件写入)、`invalid`(已知字段 / 签名 / 证书状态无效)、`unavailable`(当前网络 / 服务 / 证据无法确认,可重试)、`unsupported_protocol`(缺少 2.1 能力,不降级写入)、`persistence_unavailable`(本地任务无法可靠保存,不执行副作用)、`forbidden`(认证身份或方向不符)、`operation_not_found`(审批无对应本端任务)。已知无效与未知不可用不能混为一类;没有材料不能默认成已验签,HTTP 404 不能泛化为 released。
|
|
470
|
+
|
|
471
|
+
### 13.4 测试与失败续跑账本
|
|
472
|
+
|
|
473
|
+
以下为旧实现阶段的历史执行记录。其中 journal、关系账本、证据表、历史恢复上界及释放递增版本的记录仅描述旧实现,不是当前双材料契约的验收。当前只核验 sub agent.md 与 owner Storage 的 owner.md;本轮为文档更新,未据历史 PASS 宣称新契约已通过测试。
|
|
474
|
+
|
|
475
|
+
| 执行线 | 已得到的证据 | 当前续跑位置 / 限制 |
|
|
476
|
+
| --- | --- | --- |
|
|
477
|
+
| 共同向量 | 113 文件、51 消息、25 六态已接入四 SDK 实际处理器;字节 / hash / 27 有效文件签名 / 六套测试链自检通过;Python 共 `304` 项按断点通过;严格 Storage 适配后六态 25 项由 `conformance-005.log`、`conformance-006.log` 累计复验通过 | NS 亦通过 113 文件;预置证书材料不计生产 CA 验证。仅修正 `V05-sub-cleaned-release` 的 NS 上下文为目标版本 2 / unlocked / null,文件、消息字节与预期未变;当前向量 SHA256 为 `c0706789c1a6d37763ca0a2e0d926664a0ed847222a0786dd29995c19ad53044` |
|
|
478
|
+
| NS | 113 文件、事务 CAS / 证据 / 副本 job、数据库事务状态、最终材料时效、群本身份上传及完整历史事实核对均有定向 Red → Green;历史证书按原验收时间复验;15 包逐包验证及 vet、diff 检查完成 | `TestOwnershipV21MySQLAtomicRecovery` 已连接真实 pub MySQL 通过,exit 0、未 SKIP。同版本 Go 1.24.13 / Linux amd64 在经过正、负对照的 `GOAMD64=v3` 条件下,原 19 项正式 race 单次全部通过,三层 exit 0、无 SKIP;前 9 项复验不重复计数。原 Windows 缺 gcc 及 Linux v1 报警证据保留;v1 同类报警可脱离 AUN 在标准库串行程序中复现,根因仍未确定。网络验收进度见本节 Docker 行及续跑记录 |
|
|
479
|
+
| Storage | 权威完整正文、原子发布、可信 NS 受限副本、联邦身份及 ACL / GroupFS / collab / link / mount 权限应按本次冻结契约重新验收 | 不以已移除的路径修订机制历史测试证明当前实现通过;历史其它结果保留原记录 |
|
|
480
|
+
| Python | 文件 / 工作流此前 144 项、名片 API 断点累计 59 项、Client / Auth / Facade 570 项通过;释放观察、真实 SQLite 重载、旧证书与新签证书、自拥有释放修补后,79 项受影响回归通过。完整 Ruff 收口后受影响 176 项按 88 + 88 断点通过;与此前批次不重复累计。W06 七条实际收件故障路径、OCSP 十二项及注册固定 operation_id 有定向证据 | 初始脏基线 480 文件与 manifest 摘要一致。完整适用 Ruff 初检新增 65 项已局部收口,最终 297 → 284、新增 0 / 移除 13;同工具 / 同 13 源码 mypy 为 210 → 162、新增 0 / 移除 48,两项整体 exit 1 均保留历史诊断,两个新 Ownership 模块 mypy exit 0。`ruff-affected-regression-001.log` 第 89 项真实失败保留,按既有 `StateError` / `forbidden` 精确化测试预期后从该项续跑,不修改业务错误。该本地阶段快照为 `python/final-source-manifest-002.json`,文件 SHA256 `655932efb288dd74acfb33f0431536e7645f647125b7ce72ba33204f7e8426e4`;127 个 Python 源文件摘要 `ad3ee6d880c7ed2502763e6c7c5682d4f938accfd427112e9ec74ca8eeb96829`。001 仅为阶段快照 |
|
|
481
|
+
| Node TS | 189 共同向量、七个受影响测试文件原 696 项按断点通过;完成态恢复新增 8 项、释放清理新增 3 项 Red → Green,去重为 707 + 189 = 896;agent 11 项已包含在 workflow 中,不另计。`p10-client-isolated-001.log` 独占临时目录重验 Client 210 项,日志审计 50 个根目录均为临时路径,默认用户 `.aun` 命中 0;`p11-release-regression-001.log` 另有 9 项受影响复验,`p11-release-types-001.log` 记录真实类型检查 exit 0 | 首轮 Client 回归实际访问默认 `.aun`,仅后续隔离复验作为满足隔离要求的证据,不重复增加用例数。P11 已清理释放与旧证书 / 新签证书边界通过;`p11-cleanup-current-cert-green-001.log` 实际是断言差异失败,续跑 Green 为 `green-002`。P10 空输出未产生类型日志,仅有原工具 exit 0,不能引用不存在文件;本行记录本地阶段,后续真实环境进度见本节 Docker 行及续跑记录 |
|
|
482
|
+
| Browser JS | Client 155、Delivery 199、协调器 74、AIDStore 38 + 14、名片 API 77、文件 26、legacy 工具 13 项按断点通过;workflow 原 77 项已有逐例去重映射,最终完成态 / 已空释放 / 新鲜 NS 竞态新增 14 项 Red → Green,当时注册 91 项;另复验旧受影响 17 项,未整组重跑 91。后续 OCSP serial 修补新增 1 项,92 项受影响组复验见下文。Chrome 154 原生离线 8 项通过,内含 189 个共同向量,不重复累计;最新类型检查及浏览器打包通过 | 普通 / 群条件上传后续补验见下文。此前精确断点、命令与原工具 exit 0 见 `js/final-verification-index.json`,原始工具归档补齐至 `browser-terminal-evidence-20261010T143125Z/`。旧 62 项覆盖为 23 + 27 + 6 + 6;独立 agent 12 项不计入 workflow。空输出未生成 `terminal-typecheck-final.log`,不得引用该文件;原生浏览器离线证据不能替代线上 CA 或 Docker 联网验收 |
|
|
483
|
+
| Go SDK | 113 文件 / 51 消息 / 25 六态、SQLite CAS / outbox、六条实际收件边界、初始名片恢复与群本身份定向通过;completed 16 个损坏负例与 2 个历史正例已通过。`go/release-approval-resume-003.log` 中历史批准两分支、旧证书失效且无批准的 sub 恢复、交接后任务缺失均通过;最后受影响 workflow / NS 16 项及名片 / 注册 / legacy 85 项顶层通过。agent 独立审批 1 项、主回归 22 项、固定旧 owner 释放 1 项去重为 24;全包 `go vet ./...`、局部格式与 diff 检查通过 | 普通 / 群条件上传后续修补见下文。SDK Linux / macOS amd64 使用 `CGO_ENABLED=0` 静态编译、agent Windows / Linux 编译通过,不计运行时验证;首轮默认 CGO 缺 gcc 的失败保留。此前本地阶段证据为 `go/vet-all-final-001.log`、`go/build-agent-final-001.log`、`go/build-agent-linux-final-002.log`、`go/freeze-recheck-final-002.log`。`completed-evidence-green-release-red-002.log` 整体因随后释放 Red 失败,不能按文件名算全绿 |
|
|
484
|
+
| CA / Gateway | CA service 68 项、Gateway httpserver 643 项按断点累计通过;两个模块 `go vet ./...` 通过,证据在 `cert_adapter/` | Gateway 首轮旧用例 `TestServerServiceWriteFailureReturnsUnknownWithoutKernelFallback` 失败已保留;baseline 单例及十次重复未复现同一失败,随后原用例与余项通过;无断言放宽 |
|
|
485
|
+
| cross-sdk runner | 25 项业务清单保留原 16 顺序,三条追加链覆盖全部转移角色。released 取证新增 25 项、旧受影响 28 项及 single_sided 比较边界 2 项按断点通过;独立 Python 脚本从公开身份目录打开真实任务存储取证。四端 agent 静态契约按断点通过;Go 只更新既有初始化断言。六脚本静态收口后,SQLite 5、NS 3、续跑 9、群控制 8、共同文件 / 六态 138、runner 56 项限定复验均 exit 0,不与此前批次重复累计;E2E 真实导入错误 Red → Green | 专用清单 SHA256 `d48fbe0060f06a5cf7313d3802f09403208224db238c1b733c62f396c48225a7`。完整 Ruff 57 → 56、mypy 150 → 137,新增均为 0;保留项逐节点映射初始脏源码,两侧 mypy 使用当前 SDK 类型环境,整体 exit 1 为历史诊断。证据 `vectors-tests/scripts-static-final-inventory-001.json`;静态阶段六文件清单 `scripts-final-source-manifest-001.json` SHA256 `15271acb096c791c7f4a368bfcb710558587fdf69fe45650ca32b2e1b58bc330`,取代 003 / 004 阶段摘要;后续事件选择器、释放等待及原群恢复修正的六脚本清单见下文。以上为离线 / 本地验证,非真实环境 |
|
|
486
|
+
| Docker | 首次验收镜像 `sha256:3078a7ef9bead40401dfa0b4cd2f746407fd329edc684e7835fee90af4a68fa6` 完成构建、两域切换及测试环境准备;后续两域已切换到 `sha256:d1428bc1c70c31a9c1ba93ed4e563a7da1e1eb78ce588c26890a4afef05cfc79`,旧测试环境保护文件字节、app / MySQL 挂载及 aliases 保持。随后两域完成 CA serial 修补镜像 `sha256:21462ec218e2f9a7f69ad823c7aaf845d656c5dc9d3982cc3fd2f3ca19635677` 的断点切换,实际进程及保护核对通过,详见本节后续记录。三个镜像均仅覆盖各自冻结输入;新 Python SDK 通过 tester 独立只读挂载加载,不是所述服务镜像内置版本 | integration 已按断点累计 10 / 10 通过。第 10 项在补齐执行副本的原有公共根后,以同群新 If-Match 操作通过真实单次 PUT、响应丢失和重连恢复。原 428、17:49 恢复首败、19:36 认证首败及原 pending 丢失继续保留,不能报告原件恢复。真实 pub MySQL 已通过 NS 1 项及 Storage 3 项,NS race 已在 v3 条件下通过 19 项。E2E 原前 4 项保留,第 5 至 14 项从原任务单次续跑通过,累计 14 / 14,独立读回验收通过;cross-sdk 按断点累计唯一 25 / 25 通过;Go OCSP、两轮收敛等待修补均已实际加载,原 JS→Go、转移 CP8、TS→Python 绑定与释放原任务全部恢复通过。Python NS401 的历史拒绝为 invalid_token,原会话一次恢复完成,不认定 token 过期或 SDK 认证缺陷已修复。本次原 CP4 续 12 全部 PASS、无 FAIL / SKIP / 未启动,Docker client / 容器 / 实际外层 exit 0,全部原运行保护通过;双向联邦首批 5 PASS / 1 FAIL / 10 未启动的三层 exit 1 保留;清理等待修补后从原删除 CP39 续 11 全部 PASS,累计唯一 16 / 16,新三层 exit 0,分类为 12 项真实网络、2 项 Storage 权限边界及 2 项 adapter 故障分类;不计真实服务重启。cross 的原 JS 进程仍加载旧 bundle,依靠 CA 数值 serial 规范化兼容;当前新 JS 的独立真实三 GET 严格证书验证单列。正式 cross-sdk 使用 Node JS agent,fake IndexedDB 不计浏览器联网或跨进程持久恢复证明;Chrome 原生离线证据单列 |
|
|
487
|
+
|
|
488
|
+
失败条目必须继续补充精确用例 ID、命令、环境 / SDK 角色、预期与实际、日志、可获得的 operation_id / 版本 / hash、已通过位置和下一续跑点。任何 skip、环境缺失或未运行均不计通过。
|
|
489
|
+
|
|
490
|
+
正式单域 integration 首次运行在 `integration-bind` 停止,exit 1、passed 为空:sub 在 60 秒内未匹配到审批事件。原 operation_id 为 `761c2a51-f01c-4acd-b491-b49973d5fd43`,版本 `0 → 1`;两端任务均已持久保存,sub 为 pending。根因为三份环境脚本将请求事件的 `requester_aid` 错按持久任务字段 `initiator_aid` 匹配。仅修正事件选择器,任务仍须保留真实 initiator、原审批及上下文;未修改 SDK 或服务。三个脚本的合法请求、错误 / 缺失发起方、错误版本及错误 operation 共 15 项回归取得 Red → Green,四个受影响文件 Ruff / mypy 新增诊断均为 0。证据在 `commander/request-event-contract-001/`;新的六文件冻结清单为该目录 `final-source-manifest-001.json`,SHA256 `cf910cceefbee3e09bb64d1727649624d6ad1954c76f5472234650616ad71726`。首次续跑从原 `attempt-20261010T152511Z-953a99e0/checkpoint-0005.json` 开始,身份、slot、run_id `1010100537` 和原任务不变。随后发生的执行器异常与业务收敛失败分开记账:
|
|
491
|
+
|
|
492
|
+
- `integration10-resume-20261010T154119Z-fe4b766c` 在 Python 导入阶段崩溃,exit 139,尚未初始化 AUNClient 或新业务 attempt;原检查点摘要不变。该次 `result.json` 的旧 AssertionError 来自原检查点,不能视为修正后再次审批超时。完整 fatal、实际 tester 镜像及分类见该目录的 `executor-error-classification.json`。
|
|
493
|
+
- 唯一一次同参数执行器重试 `integration10-executor-retry-20261010T154224Z-c4b5001e` 越过原审批事件等待,仍使用 operation_id `761c2a51-f01c-4acd-b491-b49973d5fd43`,在 `integration-bind` 收敛等待处 exit 1、passed 仍为空。sub 本端批准已持久确认,`bind.accept` outbox 已发送;owner 仍为 `awaiting_approval`,两端关系文件尚未生成。真实 `message_inbox` 存有原批准消息 `m-e9305e9c5ccf49789c0b76ffae08390d`,目标 device / slot 正确,序号 1、ACK 0;旧消息表无行是统一收件箱布局,不能解释为未入库。取证见 `cert_adapter/approval-delivery-20261010T154801Z-a0735de8/approval-delivery-facts.json`。
|
|
494
|
+
- 从 `attempt-20261010T154226Z-7b7495a3/checkpoint-0004.json` 进行唯一一次带安全事件元数据 / await 调用链的原任务复现。`cert_adapter/approval-diagnostic-20261010T155621Z-c8c1d3c9/` 记录重连后 owner 收到并消费原 seq 1 批准消息,两端完成绑定,integration 前 8 项通过;原在线未消费原因仍未确定,不能把重连恢复算作该问题已修复。观测包装器位于 `commander/approval-receipt-diagnostic-001/`,未修改 SDK、服务或原测试断言。
|
|
495
|
+
- 第 9 项 `integration-release-cleanup` 随后 exit 1,原 operation_id `6998fdb5-85a2-4c92-8f36-bbf65328164e`,版本 `1 → 2`;最新断点为 `attempt-20261010T155624Z-8cfd62b5/checkpoint-0042.json`,SHA256 `096cde5659a1c5a7dab49da3437ddf0cef777e41f37526bf3c9225aedbb447f7`。owner 已 completed,sub 在 cleaning_sub,清理字节已持久、published=false;原 AssertionError 没有精确断言行取证。只读 NS 于 16:04:37 UTC 返回 version 2 / unlocked、ETag 与完整 640 字节摘要均为 `b47c76073263e36092c79adcdcb53d74bfb6f0740c4f8e7957dab4437a795bc3`,匹配 sub 待清理文件,Last-Modified 为 15:56:49 UTC;旧名片摘要为 `de350eea92ae9cdb36c5559e635fbd1147bf3bf4d053164c9fc6a2452b24fe41`。测试先等 owner 完成就读取严格一致性快照,确实可能与 sub 名片清理并发。
|
|
496
|
+
- `commander/release-cleanup-order-001/` 保存该等待缺口的 4 项 Red → Green:integration 的 release 也等待 sub completed 后才读取最终文件证据,bind 行为不变;没有修改协议中的 owner 释放终局条件。两个受影响测试文件 Ruff / mypy 新增诊断为 0,保留 runner 测试历史 2 / 45 项诊断。新的六脚本清单为该目录 `final-source-manifest-001.json`,SHA256 `eca6de44da1df56e44fb51a5185fa0735bf6c5a2731b1c844eab0c943880d286`,取代上一事件选择器修复清单作为当时快照。第 9 项随后从原身份、原任务通过,前 8 项未重跑;sub 名片及 Storage 副本均为 `b47c76073263e36092c79adcdcb53d74bfb6f0740c4f8e7957dab4437a795bc3`,旧 owner 文件已删除。
|
|
497
|
+
- 第 10 项 `integration-group-identity-upload` 在群创建成功、群身份导入后上传名片时收到 HTTP 428 `condition_required`,trace 为 `trace-ef4cd1c0e967465e3e915d2bb23d3f60`。当前检查点为 `attempt-20261010T161149Z-61963823/checkpoint-0005.json`,SHA256 `7e1ba67a2c85a799c0bf17a09199f6d635baece80698c64f573ee39cc5103d56`;passed 为 9,当前 stage 为 dispatching。固定群 ID / AID 为 `g-own21-1010100537.agentid.pub`,公共证书 DER / SPKI 及原凭据存在已留证,但原 `group.create` 完整 RPC 响应未直接归档,不能将日志与公共证书组合称为原始回执。证据在 `cert_adapter/release-cleanup-resume-20261010T161046Z-2daa75d4/`。不得重发建群、创建第二群或改写原检查点。
|
|
498
|
+
- 缺口位于四 SDK 普通显式上传:群本人签名和认证正确,但未携带 NS 原条件。NS 的 428 契约保持。新上传须新鲜读取后持久保存签名字节及 `If-Match` 或 `If-None-Match:*`;恢复只用原条件,完整字节 / ETag 已提交时去重,新文件出现时报冲突,缺条件的旧 pending 不能自动升级创建。Python、TS、JS 各有首项有效 Red 和 8 项 Green;TS 旧回归另发现持久层忽略 null,三端完成时改存空条件对象,并补持久清理断言。Python 111 项回归后,最新清理补丁相关 13 项按 6 + 7 断点通过;定向 Ruff 25 → 25 / mypy 12 → 12,新增加均为 0、历史整体 exit 1 保留。当时 Python `final-source-manifest-003.json` 的 127 源摘要为 `6b349c0edd18301d4493752f1ce87a0811152c0508295226be21550be75c2cb5`,仅为含并行修改的实际加载快照。TS 最后 17 项及类型检查通过;JS 最后 8 项恢复补验、类型检查和独占浏览器打包通过,不能重复累计此前已过用例。证据分列各语言 `group-condition-001/`。Go 前两次 Red 命令在依赖校验阶段退出,8 项均未运行,不计业务 Red;独占临时 modfile 补校验后,`red-003` 首个群不存在用例明确暴露未读 NS、未保存 pending 及缺条件头,得到有效业务 Red。生产补丁后 `green-001` 的群 2 项及重开 Client 恢复 6 项通过;旧受影响回归按 `affected-001` 前 28 项与 `affected-002` 剩余 2 项通过,共 30 项,不重复此前新用例。真实依赖清单不变,14 项 require 版本一致;独占测试 modfile 使用实际已安装的 Go 1.24.0,不能声称已验证仓库声明的 Go 1.22。`vet-001` 与 `build-agent-windows-001` 均 exit 0;构建生产输入与 vet 结束版本一致。回归后外部 `facades_test.go` / `org_protocol.go` 变化不在此前回归覆盖内。两份新增测试末尾共 4 个多余回车已局部清除,`commander/group-recovery-001/diff-check-002.json` 的限定差异检查 exit 0;未重跑不受该字节修正影响的业务用例。
|
|
499
|
+
- 构建后 Gateway 的 11 个 Go 文件出现并行 read_state 修改,NS / Storage / CA 的构建清单仍匹配;这些变动由根只读取证,不归本轮 Ownership 编辑。旧服务镜像不能声明覆盖当前 Gateway。已据完整独占上下文重建镜像 `sha256:d1428bc1c70c31a9c1ba93ed4e563a7da1e1eb78ce588c26890a4afef05cfc79`,构建 exit 0;镜像内 330 个 Go 文件、127 个 Python 文件及 8 份依赖清单与捕获输入逐项一致。证据 `cert_adapter/image-refresh-20261010T172855Z-14068f8b/refresh-result.json`,该文件证明构建及内容;两域已完成切换,`cert_adapter/refresh-switch-20261010T174204Z-e2e95e7d/switch-result.json` 记录真实 8 个进程的二进制与镜像一致,330 个 Go / 127 个 Python 文件逐项匹配,原挂载、aliases 及 MySQL 启动时间保持。原群恢复脚本当时取得 8 项本地 Red → Green;真实第 10 项于 17:49 续跑失败,原 pending 丢失事实和后续修补见下文。当时 pub MySQL / race、E2E、cross-sdk 和双向联邦尚未完成;后续验收进度见本节续跑记录。恢复仅接受原检查点中的明确 HTTP 428 `condition_required`,通过 `group.get_info(required:["member"])`、原创建 SPKI、原群私钥和 CA 当前群证书确认同一群。新读取明确标注为 `recovery_read`,不充作原 `group.create` 回执。旧 `agentmd.json` 原字节归档后,在新检查点记录同群的新条件上传步骤,原签名字节及条件先持久再上传;原件仍存在且 NS 已有相同完整字节 / ETag 时走显式人工确认,不同文件或后续关系则停止;不能将此人工路径视为 SDK 自动恢复授权。证据 `commander/group-recovery-001/`,含响应再次丢失后去重、错误群主 / 公钥、后续文件 / 关系和未知原失败的拒绝测试;不重发建群、不改写原检查点。本轮静态修正后仅 absent 定向复验 1 项,exit 0,其余 7 项未重复;`static-comparison-003.json` 逐节点证明 integration Ruff / mypy 0 → 0(exit 0),runner 测试 Ruff 4 → 4、mypy 57 → 57(真实 exit 1),新增均为 0。该 before 已含外部 read_state,不能使用旧 2 / 45 计数替代。六脚本 AST 与本轮新增行空白检查通过;该阶段实际快照 `final-source-manifest-001.json` SHA256 为 `c8ced61c36dc696c12e2aa433833da285565c2680ddbb952dab89cbc89e15b4d`,SDK 127 源摘要为 `bc4d0d6002687c433ecd648c8f6870eaa21c16b3dec411d2d8054457c2141103`;混合工作区快照不等于全文件 Ownership 归属。
|
|
500
|
+
|
|
501
|
+
- `cert_adapter/group-condition-resume-20261010T174902Z-9fc9657d/` 从原检查点续跑,exit 1、passed 仍为原 9 项,断言为“旧上传不是缺条件的普通pending”。owner 的 post-connect 在脚本人工恢复前重新签名并上传了群名片:17:49:06 UTC 的 GET 404 → PUT 201,trace `trace-620595535d9eee8d2b13f1507acdc746`;窗口内没有重发 `group.create`。有效窗口证据为 `failure-window-index-002.json`,001 选择器错误的空结果保留但不作为无事件证明。当前完整文件摘要为 `daed48426fab1808f4b45575505d77425dbe05bb8ffd95995fbe950b3adf7968`;原待办正文摘要 `416f8ecd22ab574d405a2915b256b39524d5b82fcf478e9a1b0064f946d91d60`、元数据摘要 `17eaa4cd1e488712bdeb5d88d4a56fed328db5085e951f111c3fb55c95cb87db` 对应原件已丢失。限定搜索仍未找回,证据 `original-group-pending-search-20261010T180126Z-9f79e61f/search-result.json`。后来的 daed 文件不能冒充原件恢复;原 428 检查点及前 9 项通过事实保持。
|
|
502
|
+
- `commander/group-lifecycle-001/` 修补四 SDK 群 post-connect / 自动上传入口:身份就绪后先恢复群自身待办,管理器的命名空间、签名身份及 token 均为群自身;普通待办在远端读取前核验原条件,缺条件时保留原元数据与错误,远端同字节也不能自动清除。Python 新 10 + 旧 60、TS 新 10 + 旧 35、JS 新 10 + 旧 40、Go 新 10 场景 + 旧 38 个顶层用例均由 Sol 按断点通过。Go 旧 tail 用例在阶段前生产副本复现相同身份初始化缺口,仅补既有 fixture 初始化一行后续跑;原 35 项不重跑。TS / JS 类型检查、JS 独占浏览器打包、Go vet / Windows agent 构建均 exit 0;Python Ruff / mypy 新增诊断为 0,整体历史 exit 1 保留。Go 实际为 1.24.0 / Windows amd64,不报告 Go 1.22 或本阶段 Linux / macOS 运行验证。
|
|
503
|
+
- 本阶段最初 Python / TS / JS 的 Red / Green 由总指挥直接执行,偏离已约定执行分工,初检日志原样保留。随后三位既有 Sol 执行器均在独占改前源码副本有效复现 Red,并验证当前 Green / 受影响回归;以其结果作为规范执行证据,不重复累计。最终证据分别为上述目录内 `python-validation-001/final-validation-manifest-002.json`、`ts-validation-001/validation-result-001.json`、`js-validation-001/final-validation-summary-001.json`、`go-validation-001/final-validation-001.json`。
|
|
504
|
+
- 已明确授权在同一原群执行新的条件上传,裁决为 `commander/group-explicit-upload-001/new-upload-decision-001.json`,SHA256 `bb5c3f93b68d0bdc1090159b020038a79e74240129df508a1b8b9eef2d2614d7`。该操作保留原失败及原件丢失事实,核对原群 / owner、证书 / SPKI 和新鲜 NS 的 daed 完整字节 / ETag,再保存新的 operation_id、签名字节与原 If-Match;在真实成功回执到达、SDK 消费前注入响应丢失,随后通过真实 Client 重连确认原字节且拒绝第二次 PUT。新分支本地 10 项 Red → Green 使用 aiohttp 实际收发和 SDK 严格替身,不能算 Docker / 真实 SDK 联网验收。旧人工确认 mock 加强后,committed 单项有效 Red;脚本仅在显式 `confirm_existing` 且原完整字节、原元数据归档及身份均已核验时本地确认,不制造条件、不上传、不重签,旧 8 项随后通过。两脚本静态以本阶段 before 和当前 SDK 类型环境逐节点比较,integration Ruff / mypy 均 0 → 0、exit 0;runner 测试 Ruff 4 → 4、mypy 57 → 57,真实 exit 1,新增均为 0。证据 `static-comparison-001.json` 的 SHA256 为 `6e5699ce2945f4df8a3c1141610be1001fd47bba4009ed6062c749c399f0d576`。最终六脚本与 127 份 Python 源码清单为同目录 `final-source-manifest-001.json`,SHA256 `8ca1564c60ba9a23c1482acadeaac20f542f207f5012c83c349390de720841c1`;按路径排序、键排序紧凑 JSON 的 SDK 摘要为 `a83d230ad2c222c1c5f8136575c0486f01bfa94c9d364eaf44a8cc6e9d8d366e`。六脚本 AST / 本轮新增行空白及 50 份引用证据校验通过。唯一 Docker 执行器当时获准按该清单串行验收,后续真实结果见下文。
|
|
505
|
+
|
|
506
|
+
- `cert_adapter/group-new-upload-20261010T193057Z-9c47c934/` 的单次真实执行于 19:36 UTC 首败,宿主执行器、Docker 进程及 tester 容器均 exit 1。`owner.connect()` 抛出 `AuthError: no trusted roots available for auth certificate verification`,新条件操作尚未创建;不是 PUT 或响应丢失断言失败。独占 SDK 副本只复制了 127 份 `.py`,遗漏原有 `aun_core/certs/root.crt`,与按 `__file__` 加载包资源的链路不符。`result.json` SHA256 为 `e5bd4495aaf0a84433f87f09790d9ea6e6f3429888a647c62e2ba14d0069cb88`;该 attempt 检查点摘要为 `3544f6250658d80e73d03602fa6611ff9a88ff18b40dc787692e1a232ea7f6e5`。原 9 项、原 428 检查点及原测试环境历史保持,SDK 127 源与六脚本前后仍匹配冻结清单,后续阶段未启动。已授权在新的独占执行快照补入原 762 字节公共根,文件 SHA256 `96eeabdcf12efabbb41c3b750b14556837940629107e0cb08a6dbf5253d69ee5`;另记资源清单,不修改源码、证书或信任策略,不覆盖这次失败。随后从原 428 检查点同群续跑,实际结果见下条。
|
|
507
|
+
|
|
508
|
+
- `cert_adapter/group-new-upload-with-root-20261010T194503Z-28120830/` 保留 127 源文件的原摘要,并单列公共根资源;离线导入及实际根加载检查 exit 0。冻结输入清单 SHA256 为 `937934c4d2208f48c193f7caa68f51e9f64a8a691b194ce905a1cbd82a742f5f`,资源清单 SHA256 为 `402f8a83d3b63c8df043ee9b06f3cd37f1abe050e7283ff36377b991d01f2e93`。随后 `attempt-20261010T194632Z-bdbd59c2` 的第 10 项真实通过,业务 / 容器 / 外层均 exit 0,前 9 项未重跑;`result.json` SHA256 为 `c30e4fd778e5f46d52b6816a2d100b8156ec4c712137f7e71a8f2bbd8f9fe2d0`,最终检查点摘要 `ace858b76b3d1d26fab3ecf1671726ddffa2b14cfbaecc4a5b99f79fd02f1c13`。新 operation_id `01777483-4fcd-47d7-85df-4be175fc578a` 使用原 daed ETag 的 If-Match,以群自身 token 仅发一次 PUT;真实 HTTP 200 到达后、SDK 消费前注入 Timeout,关闭重开存储并通过 `disconnect_connect` 恢复,pending 清除、签名字节与 ETag `6259b67b8f59fc274e17fbb3a10581a90fa4a8e802905176ee851f36c7eb6980` 保持,没有第二次 PUT。`source=recovery_read`、`original_create_receipt=false`;result 中 error 是保留的原 428,不是本次失败。原检查点、19:36 失败、两域 app / MySQL 控制项及原测试环境历史保持,唯一执行器继续 pub MySQL / race 及后续阶段。
|
|
509
|
+
|
|
510
|
+
- `cert_adapter/pub-mysql-20261010T195100Z-416c423e/` 于 19:51 UTC 启动 fixture 准备,Go package setup 在获取 `gopkg.in/yaml.v3@v3.0.1` 时因外部代理连接失败退出,Go / 容器 / 外层均 exit 1。入口遗漏既定 `GOPROXY=off`,独占缓存亦未补齐已有固定版本模块;测试体、真实 MySQL 用例及后续阶段均未执行。`result-001.json` SHA256 为 `858ba59e72721019173dbf4d5a3cc16664f39d1ca61b37387343b7a93978e8f5`;其中 `real_pub_mysql_used=true` 是入口无条件写入的目标字段,不能证明实际连接,真实执行数为 0。原结果保留,补充证据及新入口改为区分目标选择和实际执行。单域 10 / 10、Go 源码 / 依赖清单、运行环境记录 和服务控制项均保持。已授权从现有模块缓存按固定版本补齐新的独占离线缓存,明确设置 `GOPROXY=off`、只读依赖及独占临时目录;无网络预检后从 fixture 断点续跑,不改版本、不重新执行单域。
|
|
511
|
+
|
|
512
|
+
- `cert_adapter/pub-mysql-offline-20261010T200331Z-12e50020/` 从已有缓存按固定版本复制 28 个模块的归档及元数据,使用短的独占 Temp 根保存 mod / build / tmp;此前长路径复制失败的部分目录保留。缓存清单 SHA256 为 `4e62425fab3bc05837f4e0edb148c34eb2d3e9b527faf9f6b82709c5f403d6bf`;无网络 tester 的 7 项环境、完整性和依赖预检均 exit 0,实际 `GOPROXY=off`、`GOTOOLCHAIN=local`、`GOFLAGS=-mod=readonly`。独占 fixture 导出通过后,NS 原子恢复 1 项、Storage 已移除机制的历史用例 3 项均在真实 pub MySQL 通过,4 个测试体确实启动、全部 PASS、无 SKIP,Go / 容器 / 外层均 exit 0。`result-001.json` SHA256 为 `bd65096870daf17668650eb067a185054b743c6cc40041142c8401f521dadf34`;fixture 文件摘要 `7491b41b2842168d9b4dcae9858b785a644889770f91702d718043778134a654`,其准备不计入 4 项。服务控制项、测试环境保护文件、Go 源码及真实依赖清单前后相等;不修改版本,不暴露 DSN,19:51 的准备失败原件保持。下一阶段为 NS 定向 race。
|
|
513
|
+
|
|
514
|
+
- `cert_adapter/ns-race-offline-20261010T201410Z-c3be441f/` 在含 gcc 的 Linux 工具镜像 `sha256:e0cffc405270b9114fac7706d07c373727d1b42b0e47c525b9cd1ab1097779ff` 中执行 `go test -race ./internal/httpserver -run '^TestOwnershipV21(StorageSync|HTTP)' -count=1 -v -failfast -p 1`。选中 19 个顶层用例,前 9 项 PASS,第 10 项 `TestOwnershipV21HTTPRequiresLedgerFactsToMatchEvidence` 报 `WARNING: DATA RACE`,进程 / 容器 / 外层均 exit 1;余 9 项未运行,无 SKIP。原始输出的当前与前次写入均标为 goroutine 31,分别经 `putOwnership` 与 `refreshOwnership` 到达 `ownership.go:282` 的 `json.Marshal(material)`;同一请求内的调用顺序不能解释该报警,尚不能认定为业务竞争或检测器误报。`race.result-001.json` SHA256 为 `0f3a5386001a20b086f710968f5239308b82b82f1b3bdc6e499ce2b0bd7c462d`;服务、测试环境保护文件、Go 源码及真实依赖清单前后相等。后续真实验收暂停于此首败。
|
|
515
|
+
|
|
516
|
+
- `cert_adapter/ns-race-singleton-diagnostic-20261010T202319Z-979b7828/` 使用相同镜像、源码、独占缓存及离线只读依赖,仅以精确名称运行上述失败单例一次。实际为 Go 1.24.13 / linux amd64、`CGO_ENABLED=1`、`GOMAXPROCS=2`,`GOEXPERIMENT` 为空、`GORACE` / `GODEBUG` 均未设置。单例 PASS,进程 / 容器 / 外层均 exit 0,无 SKIP、无 race 报警;`result-001.json` SHA256 为 `74037d9d3bf18241241316083c8a31541ee2d690aae0af3c65c7ad1fa9861f79`。原 19 项清单及前 9 项、MySQL 4 项证据、服务和测试环境保护文件保持。此项为原版本诊断,不能算作修复或正式续跑;未自动重试、未进入余项。
|
|
517
|
+
|
|
518
|
+
- `cert_adapter/ns-race-first-ten-context-diagnostic-20261010T203139Z-566dd0f4/` 为检验原首败的进程内前序上下文,按原源码顺序、完整名称选择原前 10 项,仅执行一次;此次复访不增加正式覆盖计数。前 7 项 PASS,第 8 项 `TestOwnershipV21HTTPGroupUploadsRequireOwnIdentity/released_proxy` 报警后停止,第 9 / 10 项未启动,进程 / 容器 / 外层均 exit 1。当前读和前次写均标为 goroutine 28,位于同一次 `yaml.Unmarshal` 内的 `yaml_parser_update_buffer` 与 `yaml_string_read_handler`;与原 JSON 报警位置不同,仍未确定根因。`result-001.json` SHA256 为 `4df3c913c68329a454ecbd7a5f44834fd133d96bdbe2873ccb5714d5bd349f70`;同镜像 Go 1.24.13 的 JSON、sync.Pool、runtime race 源码及实际环境已只读归档,原证据、服务和项目源码保持。下一诊断仅使用标准库与原 fixture 公共证书材料,固定次数串行复制、首个报警即停;不修改业务源码、真实测试断言或依赖。
|
|
519
|
+
|
|
520
|
+
- `cert_adapter/ns-race-stdlib-diagnostic-20261010T203708Z-f6ed00af/` 运行证据程序 `commander/ns-race-stdlib-001/stdjson_sequential.go`,只读取原 MySQL fixture 的公共证书材料,不挂载 AUN 源码。实测依赖仅 65 个标准库包与命令行主程序,第三方为 0、`GOMOD=/dev/null`;固定 4096 轮、10 份材料,无用户 goroutine。程序在同一 main goroutine 的 `json.Marshal` 路径再次报警,当前写来自 `encoding/json.appendString`,前次写来自 `bytes.growSlice`。`GORACE=halt_on_error=1` 在首报警立即停止,4096 轮未完成;程序报告 exit 66,go run / 容器 / 外层均 exit 1。`result-001.json` SHA256 为 `2022aed496f6880ca5f5bf3f2e76b0bbb29c69d3ec376edafc06e108107787e7`,原始 stderr 摘要 `a7a7a5a93cfc58bc0f99a0b669bfea43fbe7fa341d22fb16ee2a8e3306c14afb`。原程序、fixture、业务源码、先前证据、服务及测试环境快照均保持。该结果证明同类报警可脱离 AUN 代码复现,尚未区分构建缓存、Go 工具链或宿主执行环境,不能记作 race 已通过;下一步保持版本及程序不变,仅使用全新独占构建缓存做一次对照。
|
|
521
|
+
|
|
522
|
+
- `cert_adapter/ns-race-fresh-gocache-control-20261010T204121Z-ef762a2b/` 仅将 `GOCACHE` 改为全新独占空目录,原 build 缓存未复制或清理,原 mod 缓存只读。相同标准库程序与输入重新编译后仍在同一 main goroutine 的 `appendString` / `Buffer.Write` 路径报警,程序报告 exit 66、go run / 容器 / 外层均 exit 1;4096 轮未完成。`result-001.json` SHA256 为 `9a8b9024affc0695aa1e94e5870732502cabafbde1f28f68169983c59c672a77`。新缓存由 0 条目增长为 582 文件 / 42537930 字节,排除原构建缓存污染作为这次复现的必要条件。镜像为 linux amd64,Docker engine 为 x86_64 / Linux、内核 `5.15.167.4-microsoft-standard-WSL2`;执行器进程的 `PROCESSOR_ARCHITECTURE` 未设置,随后注册表定向读取为 AMD64,两者分开留证。程序、fixture、业务源码、原证据、服务和测试环境快照前后均保持。下一步只读比对同版本官方 Go 1.24.13 的编译器及 race 运行库字节,不变更项目版本、不削弱检测器。
|
|
523
|
+
|
|
524
|
+
- `cert_adapter/ns-race-toolchain-readonly-20261010T205243Z-bfb237b1/` 从原退出容器只读归档六组 tar,指定的 5 个 Go 工具与 `runtime/race/` 的 52 个文件逐项匹配官方 Go 1.24.13 / linux amd64,缺失、额外及差异均为 0;不外推整个 GOROOT 一致。官方 78709986 字节归档的 SHA256 为 `1fc94b57134d51669c72173ad5d49fd62afb0f1db9bf3f798fd98ee423f8d730`;本次 `result-001.json` 摘要为 `8b06650bf866bb80a0bf9b6b1dc04717eb1004be36c080c26ad7e8e2c1a99eca`。既有 JSON 编码器、sync.Pool、runtime race 三份源码归档也逐字节匹配官方对应成员,补证 `commander/ns-race-toolchain-integrity-001/stdlib-source-comparison-001.json` 摘要为 `30c3d2b8a1639ac5753b9338848a52c4d0a0d2d52a23e028aa9a4fbac017a562`。一次隔离 CPU 查询确认实际 `GOAMD64=v1`,i9-13980HX 报告 v3 所需指令能力;原证据、源码、服务及退出源容器保持。下一步仅在隔离诊断环境使用同版本官方 v3 实现:先要求原串行程序完整完成 40960 次复制且无报警,再要求两个不同 goroutine 的真实无同步写入正确报警;任一结果不符即停,不自动重试,暂不放行正式 race 或后续网络阶段。
|
|
525
|
+
|
|
526
|
+
- `cert_adapter/ns-race-goamd64-v3-control-20261010T210124Z-1311afc0/` 保持 Go 1.24.13、镜像、原串行程序及 fixture 不变,在新的独占空构建缓存中以 `GOAMD64=v3`、`GOMAXPROCS=2`、`GORACE=halt_on_error=1` 顺序执行两个固定对照。负对照一次完整完成 4096 × 10 = 40960 次复制,无 race,程序 / go run / 容器均 exit 0。随后证据程序 `commander/ns-race-stdlib-001/race_positive.go` 一次准确检出 goroutine 8 / 7 在第 20 / 13 行对同地址的真实写竞争,程序 exit 66、go run / 容器 exit 1,属于预期正对照信号。两程序实际均链接官方 `runtime/race/internal/amd64v3`,未关闭或忽略 race。总 `result-001.json` SHA256 为 `7acc6040cb86c39c09099ed591d948624710a7775ad02a514f5d689a22a6e750`,入口 exit 0;原证据、源码、旧缓存、服务和测试环境保护文件保持。两个对照不增加业务覆盖数,也不能证明 v1 异常根因已修复。检测器执行条件变更影响原 19 项的验收依据,因此下一步在该 v3 条件下对原 19 项完整重验一次,首败即停;前 9 项复访不重复计数,其余正式网络阶段仍未启动。
|
|
527
|
+
|
|
528
|
+
- `cert_adapter/ns-race-goamd64-v3-formal-20261010T211554Z-03c4e8dd/` 核对原 19 项名称与顺序、NS 源码 / 依赖及 fixture 摘要后,在已校准的 v3 条件下单次执行原正式命令。19 个顶层用例全部 PASS,FAIL / SKIP / 未完成 / 未执行均为 0,无 race 报警,Go / 容器 / 外层均 exit 0。`race-result-001.json` SHA256 为 `b0304b7ebb03bb179c2f26fff0f2d1ed2fca40d9d6012f1f26c8e31d332e7c1a`,总 `result-001.json` 摘要为 `9cad44823b6a5a1b1ac246138b2d7a32a8d5676c3c96f060cd47f90ad8cb9016`。唯一通过数为 19,含原前 9 项在新检测器条件下的必要复验,新增唯一通过 10,不累计为 28。实际链接官方 amd64v3 race 库,原 v1 失败、两组标准库对照、源码、旧缓存、服务及测试环境 均保持;没有修改业务代码、断言、依赖或项目配置,不声称 v1 根因已修复。下一阶段为单域 E2E 14 项,使用最新 127 份 Python 源与原公共根的只读执行副本,其他通过项不重跑。
|
|
529
|
+
|
|
530
|
+
- `cert_adapter/single-domain-e2e-20261010T213251Z-cb08b06f/` 的首次真实 E2E 单次运行得到 4 PASS、1 FAIL、9 未执行、0 SKIP,脚本 / Docker 进程 / 容器 / 实际外层均 exit 1。失败项 `owner-release-sub-offline` 的原 operation_id 为 `1cf925f7-5e5f-4827-822c-70a60ad8ddb7`,版本 `1 → 2`;原检查点 `attempt-20261010T213522Z-4ea1e158/checkpoint-0030.json` 摘要为 `89ada152bb5322a0e8cfe52b448ec8d81b4267b50cbce286ccbf463420e8d1bc`。`relation_confirmed` 已保存 NS released / unlocked / version 2 及离线前后相同完整名片摘要 `1b4f5e13c9c4e025cbf7f2320d3c984b5d31bc6b6bb7e32c9bbca3f004c968ae`;sub 重连后,脚本的最终副本检查在 NS 双读期间遇到变化,严格返回 unavailable。归档 NS 日志显示 21:35:42.320 至 .572 UTC 的清理 PUT 与 GET 交错,PUT 200 的 trace 为 `trace-2f41e56fd17f38faad7bc9ed7901bc2f`。脚本未先等待名片字段清理便调用严格取证;修复须保留原离线阶段证据,不能放宽 SDK 双读、版本、签名字节或副本断言。`result-001.json` SHA256 为 `3f0b8853bc5412ab6b06a58b3d660afd27c57507a3de2dbb882e0dd0d041abfb`,独立读回摘要为 `b54f28402a3792b3924b2f398310bbdd30740bd252ad31362f4b41bd4442429d`。原 30 份检查点、4543 份旧证据及原测试环境历史保持;SDK 实际加载原 127 源与 762 字节公共根,输入未漂移,cross-sdk / 联邦未启动。两文件改前快照与定向 TDD 在 `commander/e2e-release-cleanup-001/`,后续真实续跑结果见下文。
|
|
531
|
+
|
|
532
|
+
- 原 E2E 任务的只读副本取证位于上述失败目录的 `e2e-first-failure-tasks-20261010T215507Z-51fe6427/`。owner 原释放任务已 completed;sub 同一 operation 的任务为 `pending / cleaning_sub`,已持久保存 565 字节清理文件,SHA256 为 `e5a88ce2fb29938b69845e9250652ee6a688f21bf107cd5b7773b1864c16c57a`,原条件仍为 `1b4f…` 的 ETag。本地 `published=false` 只表示未确认,不能推断远端未提交;原 NS 清理 PUT 200 的事实保留。公共任务证据 `ownership-public-tasks-001.json` 的摘要为 `c63ed2bf47a4d7a546e5bdf95c811220f0d361a736257629825e2faf4e9c2c4c`,取证未重放任务、未打开原数据库写入。
|
|
533
|
+
|
|
534
|
+
- `commander/e2e-release-cleanup-001/` 仅修正 E2E 脚本及既有 runner 测试:释放与权威删除的回调先新鲜观察原目标版本、unlocked 及 sub 名片字段清理,再执行原严格证据检查;离线释放从 `relation_confirmed` 续跑时复用原检查点的离线完整字节,最终仍新鲜核对实际清理文件及 Storage 副本。两项有效业务 Red 后,新增 16 项及原请求事件 5 项全部通过,均 exit 0;首个 AST 选择器 NameError 不计业务 Red。两处局部类型注解与 Green 输入的字节复原证明保留,不重跑这 21 项。静态逐节点比较为 E2E Ruff `2 → 2`、runner Ruff `4 → 4`、runner mypy `57 → 57`,新增均为 0,真实 exit 1 的历史诊断保留;E2E mypy 首次基线原生崩溃返回 `3221225477 / 0xC0000005`,获准的一次有界补证与 current 均正常 exit 0,不声称原崩溃根因已修复。静态比较摘要为 `4a426019517504e8eeed031577aa3b2608e6ee4ef2d9865fa3e518501b5d1e6c`。
|
|
535
|
+
|
|
536
|
+
- 本次六脚本及 Python 127 源的冻结清单为同目录 `final-source-manifest-001.json`,SHA256 为 `85cbf5df90638a42eeaf183637f841899304147992b4bc4a422460c90737706b`;相较 `8ca1564…` 清单仅 E2E 与 runner 测试变化,SDK 摘要仍为 `a83d230ad2c222c1c5f8136575c0486f01bfa94c9d364eaf44a8cc6e9d8d366e`。原 762 字节公共根另列,未重签、转换或复制。六脚本 AST、本轮新增行空白、59 份引用证据及整个 60 文件修复目录已独立读回;执行器已关闭该目录写入。唯一 Docker 执行器获准从原 checkpoint-0030 续跑第 5 至 14 项,保留原释放 operation、原清理文件与条件、原离线观察及前 4 项通过事实;不重发释放,遇首败即停。实际续跑与独立读回结果如下。
|
|
537
|
+
|
|
538
|
+
- `cert_adapter/single-domain-e2e-resume-prepare-20261010T220913Z-5d14b125/` 的准备阶段因生成器误将 `bytes` 纳入聚合摘要而停止,59 份引用文件逐项长度与 SHA 均未漂移;仅修正为对按路径排序的 `path/sha256` 数组做键排序紧凑 UTF-8 JSON 摘要,正确值为 `efbb1c0a83c1e4631d732a8a3157878fca8944dc817b4ae042c846075527ab4f`。原失败 `preexecution-first-failure-001.json` 及诊断 `preexecution-first-failure-diagnosis-001.json` 保留,未改已关闭的修复证据目录,未启动业务 attempt,不计业务失败或重试。
|
|
539
|
+
|
|
540
|
+
- 同目录随后执行唯一业务续跑 `attempt-20261010T223146Z-1fa5ed47`,第 5 至 14 项共 10 PASS,前 4 项未重跑,累计 14 / 14、FAIL / SKIP / 未执行均为 0;业务脚本、Docker 进程、容器及实际外层退出码均为 0。`result-001.json` SHA256 为 `77a29978557e244b52557a3d16d240d2240f2a29bf5f63a68e7d08bc0687d368`,最终 `checkpoint-0057.json` 的 stage 为 complete、摘要为 `e7749ce34779d30c8dd129407d113468b8831ba8cb4e8ed2fecaad28dbc5d4b6`。独立读回 `execution-readback-verification-001.json` 的摘要为 `01224e02d4052ed1d327618aa4f000041439ea5051ac154d6ea6b0d066e2df81`,业务验收及全部保护检查均通过:4675 份旧证据、原 30 份检查点、45 份不可变运行文件、身份材料、SDK 127 源与公共根、两域 app / MySQL 控制项及测试环境快照原前缀保持。原 71 份运行文件的全树摘要仅为执行前准备事实,SQLite 等可变文件随后有合法任务更新。原失败与本次续跑共 2 次真实业务 attempt,结果中原 AssertionError 作为历史证据保留。
|
|
541
|
+
|
|
542
|
+
- 第 5 项仍使用原释放 operation_id `1cf925f7-5e5f-4827-822c-70a60ad8ddb7`、原离线 `1b4f…` 文件及原 565 字节 `e5a88c…` 清理文件,原 If-Match 和 `initial=false` 均保持;新鲜 NS 为 released / unlocked / version 2,NS 与 Storage 副本逐字节等于原清理文件。sub 原任务修订 `4 → 6`,保存 `sub_cleaned=true` 和正确 `verified_consensus` 后进入 completed,`files.agent.published` 仍为 false,符合字段已清空时仅观察完成的既定语义。附加读回器曾错误要求 published=true,其原失败保留于 `recovery-readback-failure-001.json`;仅纠正只读判断,补证 `ownership-recovery-observed-completion-001.json` SHA256 为 `4fd4ee72120b10d3c1445bb148e2ad381cd148efd0918f71619fd0811b54c7a8`,未改 SDK、数据库、业务记录或原结果,未新增联网或业务 attempt。原清理窗口末尾 GET 503 缺少响应正文,原因仍未知;本次通过不证明该根因已修复。恢复去重仅按已有检查点、任务及日志的实际观察范围报告,不外推全部线上帧。
|
|
543
|
+
|
|
544
|
+
- cross-sdk 准备阶段前三次均在业务运行前停止:`cert_adapter/cross-sdk-fixed-25-20261010T224953Z-a5ba8847/` 的 Go vendor 摘要采用 WindowsPath 排序,与规范化相对路径字符串排序不同;1754 文件、213246131 字节未变,修正后的原规范摘要仍为 `3ddb7c30149cb0d1a169fff6d455638d78cbb89bd463ddf0683eb6838a6eaa12`。`cross-sdk-preflight-resume-20261010T225705Z-cf4a8f3f/` 错把 R 清单内相对路径按工作目录读取,改为相对 R 目录读取后,全部 59 引用长度 / SHA 和原聚合摘要一致。`cross-sdk-preflight-resume-20261010T230055Z-2f41ce67/` 误匹配 Docker 的 `No such object`,实际该命令返回 `No such container`;后续独立只读检查确认五个名称不存在,不能冒充未保存的首次 stdout / stderr。三个原 helper 和首败证据全部保留;仅在新的独占目录修正辅助预检,未改 SDK、服务、业务断言或冻结 R / 候选输入。
|
|
545
|
+
|
|
546
|
+
- `cert_adapter/cross-sdk-preflight-resume-20261010T230343Z-53afe9e7/` 通过宿主四 SDK / 六脚本 / 公共根、Go vendor、R60 / 59 引用、历史保护、测试环境保护状态、实际服务 / 镜像 / 网络和容器名检查后,首个 TS 离线依赖探针退出 133,外层 exit 1;`first-failure-001.json` SHA256 为 `faa79fc7d27d808e916c72cf3eb13769e5679bdafefd10550369e4dade342f57`。原容器 `own21-dependency-probe-ts-53afe9e7` 保留,实际 linux/amd64 镜像 `sha256:6622b5ce13429346f91fcdb936ec2e026ccc28465409fd25b7f79c623e7a20af` 和完整 argv 均匹配原命令,未 OOM、未重启、Error 为空。容器 stdout / stderr 日志各 0 字节;原 Docker-client subprocess 的 stdout 未保存,不能称已恢复原字节。实际 argv / 镜像补证摘要为 `a5c17b76adb558b97afce1c72b8b00e2206f9d6d8d878fdbd2cefe3cbc4f4448`。此次 TS 探针执行一次,JS / Python 探针、实际编译、四端及业务 runner 均为 0,22 个运行目录未创建,25 个业务用例均未运行。133 原因未确定;只授权在相同镜像、参数、离线网络及只读挂载下,各一次最小启动控制和成功后的阶段化原 TS 探针,不循环重试或放行后续业务。
|
|
547
|
+
|
|
548
|
+
- `cert_adapter/node-exit133-bounded-diagnostic-20261010T231516Z-79b7afe6/` 在同一镜像、Node 参数、离线网络和只读挂载下,各一次完成最小启动控制和带同步阶段标记的原 TS 探针,两个 Docker-client 进程、两个容器及实际外层均 exit 0;Node 实际为 v22.23.2 / linux x64,12 个阶段标记全部到达,得到 1950 份依赖文件 / 80328443 字节及 298 份 TypeScript 程序输入。`result-001.json` SHA256 为 `44873acf1db49583408a7514924e40cd9f501c7e6d80f04741280669c48059dc`,成功 TS 观察摘要为 `5b5f8179683f82f61d7b1f2683ba558b71aa002bc498fe1aa0cce45c87ee33c7`。全部原源码、vendor、host dist、4967 份历史证据、四服务及测试环境 前缀及原 133 容器保持;无实际编译或业务启动。总指挥独立读回摘要为 `d2502b1260f869774daec4b649b619b61a9fb655e288ba23435023fda56b4bf1`。执行器初次独立读回仅有换行判据错误:把 JS 字符串的 `\n` 转义预期成输出中的两个字节;冻结源码实际应输出单字节 LF,原 stdout 末尾为 `7d0a` 且严格 JSON 解析成功。原 false 记录保留,只读字节补证 `commander/node-diagnostic-readback-001/control-output-framing-diagnosis-001.json` 摘要为 `e230ca719955a67b0f70bc99a00640a053f02f1e7c5233fdf30cc618841e7e99`,未新增执行。修正后的 `execution-readback-verification-002.json` 全部通过,SHA256 为 `5fa1c5d9e3607642e0defff6434e9a7a1c626e4f1a1c0d690f6291696b99a8f1`;除该只读换行判据外,其余原检查结果均保持。诊断成功不证明原 133 根因已修复;后续预检复用成功 TS 观察,不再次运行同一探针。
|
|
549
|
+
|
|
550
|
+
- `cert_adapter/cross-sdk-remaining-preflight-20261010T232444Z-479efdd0/` 显式引用成功 TS 探针及其原命令 / 容器 / 退出证据,未再次执行 TS;原 JS 和 Python 离线只读探针各一次,Docker-client / 容器均 exit 0,完整预检实际外层 exit 0。JS 实际 Node v22.23.2,依赖卷 3661 文件 / 132480972 字节,程序选择 294 输入;Python 3.11.17 取得 7 项声明依赖的实际元数据与文件,未导入 SDK。新预检保存探针原始 stdout / stderr 后再解析,服务 inspect 仅保留安全字段及完整 Env 摘要。原四 SDK 源、六脚本、公共根、1754 vendor 文件、5000 份历史证据、服务 / 网络 / 镜像、测试环境保护状态和五个唯一容器名门禁通过。`preflight-result-001.json` SHA256 为 `57d960b484925bf39c1d549466297448ec49d4df9f46e8e855c5654f7059bc42`,`frozen-inputs-001.json` 为 `ee1e27dc7fd6eb9a04749662cebe8c8580bc05b67f23432a30720c217aa475bb`;总指挥对全部直接冻结引用、原输出与解析结果、实际 argv / 镜像 / 只读挂载的独立核对摘要为 `ecfb964172c84e344bc6d3c6876c86a32d7efb11186c59f6702537faa16f4ac4`。此为执行前证据,当时构建 / agent / runner 均为 0,22 个运行目录未创建;随后按原命令串行启动四端并验收固定 25 项。
|
|
551
|
+
|
|
552
|
+
- 上述 `execution-001/` 的原 runner 业务 attempt 为 `attempt-20261010T233514Z-cde562a1`。第 1 项 `ownership_owner_initiated_python_to_ts` PASS,operation_id `2d3ad74f-fd14-44f2-9d1d-b8c4cb86b888`;完成检查点 `checkpoint-0008.json` SHA256 为 `63de187a9740a078f6a4ac709a9c3b12423068d1f14f5cd40083158265d4e8fb`。第 2 项 `ownership_subject_initiated_go_to_js` 在初始 JS snapshot 首败:预期可确认未绑定状态,实际为 `unavailable / retryable=true`,reason 为 `ownership certificate OCSP status is unknown`,NS version 0 / unlocked / owner null。尚无 operation、任务、prepared 检查点或业务派发,不能借用第 1 项 CP8 作为恢复点。runner、容器、外层均 exit 1;唯一通过数为 1,剩余 24 项。原 resume SHA256 为 `b9b5984714e7dcf81ac93e88f8fbfa931bb3ce0f15f920d6e20a31af74deb675`。独立 `readback-001/readback-verification-001.json` 的 46 项记录核对全部成立,但明确 `execution_passed=false`,SHA256 为 `a3bc3d510ea491798bc4407b065489159f35a3e1f28406902527777aa14231ce`;首败独立证据为同目录 `first-failed-case-evidence-001.json`,SHA256 `e885b04555451929618ddac529f7bfdd9fccf75b715e716833f5b80a1f046f63`。四个 agent 继续保留原进程,JS fake IndexedDB 状态未重新初始化,联邦未运行。
|
|
553
|
+
|
|
554
|
+
- 本地源码分析发现 JS `parseCertDer` 将 DER INTEGER 前导零保留在 OCSP URL,而 CA 按字符串查库后才转换数值;此时尚未取得本次失败证书及实际 OCSP 回包,不把推测或合成 fixture 记为已证实的真实首败根因。最小 JS 修补将解析得到的 serial 规范化为无前导零的小写十六进制,并为 `0x80` 的合法 DER 编码增加既有 workflow 用例。原 Sol `js_impl` 在 `commander/cross-ocsp-serial-002/` 使用真实改前 auth 源码副本和当前测试复现 `/pki/ocsp/0080` 与 `/pki/ocsp/80` 的有效 Red,exit 1;当前 Green 1 项、受影响 workflow 92 / 92、tsc、独占 browser build 均 exit 0。新项已包含在 92 中,不重复累计。最终摘要 SHA256 为 `1ea5c7ed8b32ce83d977bb011260c75003be07705e126501e80aeb47a331a4aa`;当前 auth / workflow 测试 SHA256 分别为 `83f85336a49a6c98e9ae4da74c0152ae0c0ac1116a38e0a4dd5b92ff7f4ad152`、`6a82154e63a9ee21d16fcac381bea5616ecaa9a706b0ca7d4a50bd557841d4c3`,起止保持。缺少专用 cross 改前 JS 测试快照的限制保留,不宣称完整改前测试快照;92 项范围亦不外推所有普通 Auth 路径。
|
|
555
|
+
|
|
556
|
+
- 在 `commander/cross-ocsp-serial-001/` 中,总指挥 Astra 再次直接执行了 Red / Green、`npm run build` 及全包 `npm run test:unit -- --bail=1`,偏离约定的 Sol 测试分工及最小受影响验证范围。全包在 447 PASS 后由 `client-agent-md-api.test.ts:112` 的 `legacy注册intent保留原材料,不自动转为2.1批准任务` 首败,错误为 `AUNClient only accepts an AID object or no argument`;未在改前快照复现,归属未确定,原手工摘要的 `passed_before_unrelated_failure` 命名不能证明无关或既有失败,也不能报告全包全绿。001 是手工结构化摘要,不能充作完整保存的 stdout / stderr。该次 npm build 的 clean 确实删除并重建了宿主 `js/dist`,原宿主产物保持的表述撤回;原进程加载独占 `runtime-cross-sdk/resources/js/dist`,未热加载此次补丁。当前宿主 313 文件 / 5,714,952 字节已由 Sol 原样归档到 `commander/host-dist-side-effect-001/current-dist-001/`,清单 SHA256 为 `ff74cc77b421e2e25a0b4a4f9efdbb30a4eb4b057a054b19f2594edaeb4c4961`;误覆盖前真实原件仍在限定候选中核对,尚不能声称恢复。002 的 `dist_unchanged=true` 仅描述该 Sol 复核窗口,不倒推为 001 未改动。
|
|
557
|
+
|
|
558
|
+
- 原公共只读诊断 `execution-001/ocsp-public-readonly-20261010T234958Z-a91c4f2e/` 于诊断容器名称空缺检查后的证据写入首败:两个 257 字符日志路径成功,271 字符的 `diagnostic-name-absence-actual-process-exit-001.json` 在 `pathlib.open(x)` 抛出 `FileNotFoundError`。外层 exit 1,诊断容器未启动,公共 GET、agent 操作、runner 及业务执行均为 0,未取得证书或 OCSP 材料。`first-failure-archive-001.json` SHA256 为 `d9758e19ff5044f9b0f820e8ea126207ef90bca525e4be6e59095cfab9435141`。已授权原唯一 Sol Docker 执行器仅在新较短独占目录机械修正路径,再单次执行最多 4 个公共 GET,任一再失败即停;新鲜诊断不得冒称原失败时的回包,不重启或重连四 agent。
|
|
559
|
+
|
|
560
|
+
- `cert_adapter/ocsp-ro-002/` 将执行器改放短独占目录,probe 原字节不变,仅替换唯一诊断容器名;2026-10-11 00:17:38 UTC 单次完成 4 个公共 GET,全部 HTTP 200,helper / Docker client / 诊断容器均 exit 0,原 5 项保护检查全 true。证书 DER 指纹精确匹配首败名片的 `sha256:8faf92ff5797f1ec93289229a47fab1547132e799874a7ed9bb4d5c724e7f131`。真实 INTEGER 首字节为 `09`,没有 `00` 符号填充:原 JS 字节十六进制为 `09f4b2c7f25893a3ef9a76a14b69413ed312b82e`,整数规范表示为 `9f4b2c7f25893a3ef9a76a14b69413ed312b82e`。前者返回 JSON unknown / 签名 CertID UNKNOWN,后者返回 JSON good / 签名 CertID GOOD,CertID 数值相同;该证据确认当前同一证书存在序列号前导十六进制零的查库差异,不将其误写为真实 `00` padding。`public-ocsp-read-result-001.json` SHA256 为 `c8188218afe988fb088260969e018b7375ed5f91014be6d74149a3205b7aab30`。这是原失败后的新鲜诊断,原失败时的 OCSP 原始字节未取得;原四 agent 和原业务用例均未重启、重连或重跑。
|
|
561
|
+
|
|
562
|
+
- 此诊断的附加离线读回产生两次真实 exit 1,原件均保留。首次额外要求 ProducedAt 不早于 ThisUpdate,实际 Go 签发值分别为 `00:17:00Z` / `00:17:38Z`,属于已冻结的分钟截断和 90 秒窗口;按每份原 GET 的接收结束时间纠正该读回判据后,叶证书及两份 OCSP 签名、独立 CertID name/key hash 与数值 serial、状态和 30 / 90 / 5 秒新鲜度全部通过,`readback-002/offline-crypto-001.json` SHA256 为 `4287f03b463093d5d88aaacecb3985e00d5806c0d9e79dd94b8e1dd96504069d`。第二次额外要求全部服务历史 RestartCount 为 0,而 CN MySQL 在前后快照中均为 1、StartedAt 均为 `2026-10-10T15:01:05.754317726Z`;原要求为状态保持,不是历史重启数归零。四服务、四 agent、JS PID 9770 / 进程树、18 份原文件、59 份旧诊断文件及测试环境保护状态的原必需保护均保持。`protected-state-readback-001.json` SHA256 为 `9177c70eec1d7fd7e8edbc55ddc3190fc3047ef16a43d0e027b3bcb409b3cd9b`,原汇总摘要为 `827a88885136e48dc9bde01fe24fefd7421f334af4f5adb3539276bf8e68a9c8`;不能把两个原 exit 1 改记为 0,也无需为额外判据再发 GET、inspect 或业务执行。
|
|
563
|
+
|
|
564
|
+
- 宿主 dist 副作用的限定原件核对已收口,`commander/host-dist-side-effect-001/restorability-summary-002.json` SHA256 为 `3d26bf1c5515b6cc7dc64da2bc32c4d14456fb4838f0e424ffb3626a02e727b0`。误覆盖前清单为 305 文件 / 5,199,500 字节,四份既有清单最后落盘于 23:33:39 UTC,SHA256 均为 `332b7b3f9397cd324ee2922daa81b2e4a74410b0b61964ec55b598ef42dc3af8`。限定 10 个既有阶段 / 构建候选只找回 236 个匹配摘要的文件,69 个未取得原字节;当前有 8 个额外文件,运行独占 dist 属于 313 个启动编译产物,不能充作完整旧原件。无法排除最后快照到误 build 之间的外部工作,因此未覆盖、删除或声称恢复宿主 dist。001 中的时间戳比较误报保留,002 按 UTC 归一化确认本次核对窗口内 313 文件未变。
|
|
565
|
+
|
|
566
|
+
- 全包首败中的 legacy 注册 intent 单例属于本任务必要验收。`commander/js-legacy-fixture-001/` 以相同当前源码、测试、argv 和公共环境,仅变更 TMPDIR 进行两次有界单例:显式 unset 时在 `client-agent-md-api.test.ts:112` → `client.ts:980` 复现构造校验失败,1 FAIL / 93 筛选跳过、exit 1;使用独占 TMPDIR 时 1 PASS / 93 筛选跳过、exit 0,实际覆盖 `persistence_unavailable`、零 RPC / 上传 / 新任务、旧 intent 完整保留和关闭。最终摘要 SHA256 为 `072591978360ba6d7d437eb3d0d09366433bf63c9312ce9677697de5fbe7c2b9`。247 输入、私有副本及宿主 313 dist 文件保持,未修改实现或用例。原 447 项后的执行没有环境快照,不能证明当时 TMPDIR 值,也不将此单例通过外推为全包或完整 legacy 矩阵全绿。初次 PowerShell 环境哈希表重复键导致的 ParserError 发生于 Node / Vitest 启动前,测试数为 0,机械修正后的上述两次结果分列。
|
|
567
|
+
|
|
568
|
+
- `commander/cross-unstarted-resume-001/cases.remaining24.json` 从原 resume 仅删除 70 字节的 `ownership_resume` 元数据,保留原 24 项、suite 和 timeout 字节,逐项对应原 25 项清单的后缀;SHA256 为 `ac7bf4932c686056e6f146043d85967bef47b311dd6dd0103d1858a93d17186a`。`decision-001.json` SHA256 为 `c467e04ab1b756f6d26a6f3e606035ab8487f3782bf5b24b2557782fe8cf09b8`,当时 `execution_authorized=false`。runner 静态顺序证明第 2 项 snapshot 早于 prepared / dispatching / POST,且原失败无 operation、任务或检查点;候选用于真正未派发用例的首次派发,不伪造任务恢复、不借 CP8、不重跑第 1 项。实际执行须保持四原身份 / slot / 进程并确保 `CROSS_SDK_OWNERSHIP_RESUME` 未设置;此后发生的有检查点失败仍按原 runner 逻辑恢复。
|
|
569
|
+
|
|
570
|
+
- 为保持原 JS 进程及 fake IndexedDB,CA `ocspQuery` 已完成通用数值 serial 规范化:把已有十六进制整数解析移到查库前,查询传入 `SerialNumber.Text(16)`,不改变状态来源或 OCSP 签发。既有 `revocation_test.go` 的新顶层测试包含前导十六进制零 / DER 符号零两个子项,并核对真实已签 OCSP。原 Sol 在宿主 Go 1.24.0 / Windows、离线只读依赖及独占缓存下取得有效 Red:`leading_hex_zero` 报 `status=unknown, want good`,Go / 外层 exit 1,后一个子项按 failfast 未启动;`cert_adapter/ca-ocsp-red-001/red-result-001.json` SHA256 为 `887447bf14badb2e7ed14fe1ed6ea4b349e8833cb6f3a026149a1dcfb16e37a1`。局部修补后两个子项、4 个必要既有顶层回归及 service vet 均通过,5 阶段实际 Go / 外层 exit 0,`cert_adapter/ca-ocsp-green-001/green-result-001.json` SHA256 为 `b40320b2c76537ec81ce435751c331a73f7ca5a2e318ce854bc9e97c7685e771`;不与历史 68 项重复累计。当前 service / test SHA256 分别为 `1b2f29758c25b11800c5306e981b47cbd6eeb00c235f5528ee2b39971561038c`、`86c3bda3e5b78511891cb5e18dfde94341c75636e3a4e41b3ac80a1487944521`;Red 后测试只对齐 4 个 fixture 字段空格,逻辑未变,Red 原字节已归档。`commander/ca-ocsp-serial-001/before/` 的原件及外部服务证书恢复增量保持,源码块之外字节未变。CA 此时尚未部署,新 JS 独占 AuthFlow 三 GET 的随后执行见下条;后续原四进程 cross 将属于修复前 JS 与 CA 兼容证据,当前新 JS 实网只读证据单列,不冒称完整新 JS 交互矩阵或真实浏览器联网。部署时保留原进程和 fake IndexedDB,关闭自动重连的测试 agent 通过既有 `/session/connect` 恢复原 client 会话,实际服务 recreate / 会话重连另行记账。
|
|
571
|
+
|
|
572
|
+
- `cert_adapter/js-authflow-network-001/` 于 2026-10-11 00:47:01 UTC 在旧 CA 仍运行时,使用 Node v22.23.2 加载当前 JS 的独占 browser ESM bundle,单次调用真实 `AuthFlow.resolveOwnershipCertificate`。三个公共 GET 均 HTTP 200,实际 OCSP URL 使用规范 serial `9f4b2c7f25893a3ef9a76a14b69413ed312b82e`,公开回包 status 为 good;SDK 返回 `chain_valid=true`、`state=active_signing`、`revocation_checked=true`、`revoked=false`。bundle SHA256 为 `e75649fdc5964ff874bc0e61cdc36ea27d18ca30631935cdcf29aa75a33c2661`,绑定当前 auth 的 `83f853…` 原字节;内嵌根、verifySsl=true、严格 OCSP 与 Node 默认 TLS 保持,TokenStore 访问为 0,没有身份或 token 挂载。helper / Docker client / 容器 / 外层均 exit 0;`execution-result-001.json` SHA256 为 `dc7b1d9a50f0d2e32cc8b6b8f0799243cfbe8f52a93bd30079d5c6e82882788a`,`probe-result-001.json` 为 `b078201fa3eefd7baca0737da264d17b78d93a5701f3b29e041f6a983abf0d0d`。证书、链、OCSP 公开原始正文分别为 1103 / 2290 / 1309 字节,均有摘要。四原 agent、JS PID / 进程树、18 原件、服务及测试环境保护状态保持;未启动 runner、未部署、未重连。这证明当前 JS 实现的真实只读证书验证,不计完整当前 JS 交互矩阵、原生浏览器联网或原四进程热加载。准备阶段虚拟入口名称核对的辅助错误原件保留,不计网络执行。
|
|
573
|
+
|
|
574
|
+
- `cert_adapter/ca-img-001/` 基于已冻结的 d1428 完整上下文 2853 文件,只替换 CA 的 `service.go`、`revocation_test.go` 及已存在的外部 `issue_test.go` 三份当前输入,未扩入其他模块的新工作区变动。构建得到 tag `ownership-v21-ca-ocsp:20261011t005158z-faba6853`、镜像 `sha256:21462ec218e2f9a7f69ad823c7aaf845d656c5dc9d3982cc3fd2f3ca19635677`,构建及外层均 exit 0。镜像内四服务源码和依赖清单匹配;NS / Storage / Gateway 二进制及原 Python 127 源保持,CA 实际 Linux、CGO=0 二进制 SHA256 为 `761fc3720797952f0bfd2c61ebd33d53dfd3f7b994e30e3eb9c364a7a16fe2d4`。构建结果 SHA256 为 `1c3330717c6caeb5464082de74d353f0d07c0c27992b6d76df589b151e337831`,内容证据摘要为 `699250358ad78083776020f75eb89a982b7407b4946917eec3af4112e1bd8ca2`;外部 CA 测试及 TLS 恢复改动不归属本轮 Ownership 编辑。
|
|
575
|
+
|
|
576
|
+
- 切换首次在 `cert_adapter/ca-switch-001/` 于 01:00:12 UTC 因历史 process 记录缺少 `environment_overrides` 而 exit 1,尚无服务动作。新目录 `ca-switch-002/` 只修正 process / source 的缺失环境字段及 source 的缺失 cwd 读取,原 argv 保持;实际 stop-pub、stop-cn、recreate-pub 均 exit 0,pub 网络恢复完成后于 01:05:51 UTC 因环境摘要比较 exit 1,CN 尚未 recreate。第二份首败摘要为 `168b5e88efe8464d8655723b13c58ef93354ca45bfd4e81992eff7085ff43ed9`。单次只读 inspect 及原 17:45 工具调用证实:旧规则为 `sorted(Config.Env)` 的 compact JSON,新包装器误按列表原顺序比较;pub / CN 均 187 项、无重复键,完整排序摘要分别精确命中旧同实例基线,环境内容保持。安全诊断与旧算法追溯摘要分别为 `880f30ba56b213cb9c495e177ee2e5cb133a3fc69b46afcfa04cc43dfa85aa87`、`086f5268ea34d445873be26daf006198fef1c38932c0d7499cd2a9230530832d`。环境明文未归档,两次原 exit 1 保留;该差异不计业务测试失败。
|
|
577
|
+
|
|
578
|
+
- `cert_adapter/ca-switch-003/` 复用 W2 原始运行、进程、文件和 测试环境快照 基线,先补齐 pub 的 command / working_dir / mounts / port_bindings / networks 五项核对,仅续接 CN recreate 与原网络恢复,未再次停止或重建 pub。01:21:23 UTC 原 8 项保护均通过,helper / 外层 exit 0;`switch-result-001.json` SHA256 为 `125eb5b598ba1af0e9706903c12cd64db034d7e10e67e73ca49a111f776756cf`。两域实际运行新镜像,CA `/proc` 二进制均匹配 `761fc372…`,PID 为 pub 112 / CN 219;其余选定服务源码、依赖、二进制及原实例路径匹配冻结镜像。四原 agent、JS PID / 进程树、MySQL 启动及历史重启计数、18 原件、测试环境保护状态、挂载和完整环境内容保持,没有重新初始化测试环境快照。服务会话因本次 recreate 中断;随后以原 client `/session/connect` 恢复并执行第 2 项,其真实派发及新首败见下文。已通过第 1 项未重跑,当前新 JS 三 GET 与原 JS 进程加新 CA 的交互证据分别记录。
|
|
579
|
+
|
|
580
|
+
- `cert_adapter/ca-clients-001/` 于 01:27:03 UTC 完成原四 client 恢复:四端各一次 health 均为原 AID / standby,各一次 `POST /session/connect {background_sync:false}` 均 HTTP 200,随后各一次 health 为 ready。未 reset、重启、重新注册或替换 client,原 JS PID 及 fake IndexedDB 保持;实际服务会话中断与本次重连分别记录。helper / Docker client / 容器 / 外层均 exit 0,`connect-result-001.json` SHA256 为 `792f49f51babebc1337e287c4562f4b8378b98a197dfb34dac416f4b5e783eca`,实际退出记录摘要为 `da404990882251d109f64a7aaef9f046ef60318f85141e24a88dbd54e0b1cbc0`。
|
|
581
|
+
|
|
582
|
+
- `cert_adapter/cross24-001/` 于 01:31:27 UTC 单次启动原后缀 24 项,业务 attempt 为 `attempt-20261011T013128Z-acf6c9f7`。第 2 项已越过原 JS OCSP unknown,JS 真实创建并持久化 operation_id `4ec3998f-bec6-4199-b553-99469651bf2b`,固定版本 `0 → 1`、owner 为原 Go、sub / initiator 为原 JS。CP1 prepared、CP2 dispatching、CP3 dispatched、CP4 actor_persistence_confirmed;CP4 的 actor_task 为 pending / awaiting_peer_approval、local_approval=accepted,approvals 仍为空。随后 runner 在等待 Go 收件审批时,Go 当前共识返回 invalid,原因是 `current OCSP signature or certificate binding is invalid`,唯一来源为 `go/ownership_v21.go:844`。业务 / Docker client / 容器 / 外层均 exit 1,新通过 0、失败 1、未启动 23,累计保持 1 / 25;原进程、18 原件、配置、服务及测试环境 前缀保护保持。该 attempt 的 CP4 SHA256 为 `fba3b5a46576414849c5bb1a6396307b66bc2a5a8dbeeaa508c50b3d31514a45`,`results.json` 为 `8e5c2454139fdd63eb99cdf22fdefc0423725038fd4d609ee087cf5aee49957e`,新 `cases.resume.json` 为 `4af26e278347ee5213e7a4ba3871ca553765150c5a175ff9336bbe28771a2953`。后续须从该真实任务及新 resume 续接;原未派发 remaining24 候选已使用,不能再次首次 POST,也不能借第 1 项 CP8。原失败回包未保存 OCSP DER,后续离线或新鲜取证不得冒称本次原回包;联邦仍未启动。
|
|
583
|
+
|
|
584
|
+
- Go 首败的代码路径为 CA 在 OCSP 内嵌实际中间 issuer 证书,而 `x/crypto v0.29.0` 的标准解析器把该证书当作由 issuer 再签发的响应者,错误地用其自身公钥验证它的证书签名。`commander/go-ocsp-issuer-001/` 的原 Sol 单次离线复现使用 00:47 已归档公共回包,在原采样时间验证链后,`ParseResponseForCert(der, leaf, issuer)` 实际报 `bad OCSP signature: x509: ECDSA verification failure`;内嵌 DER 与已验证 issuer 逐字节相同,OCSP 响应对该 issuer 的签名验证成功。该旧回包诊断不充作 01:31 首败回包或当前网络验收。
|
|
585
|
+
|
|
586
|
+
- 同目录在既有 `ownership_v21_network_test.go` 增加实际根 → 中间 CA → leaf 的 8 个子项。合法内嵌 issuer 单项先得到有效 Red,生产校验报原 invalid、Go exit 1;取证 wrapper exit 0 仅表示记录完成。随后 `ownership_v21.go` 只新增 6 行:原标准解析失败时,第二次解析仍须验证签名和目标 serial,且内嵌证书 DER 必须逐字节等于此前验证链选定的 issuer;普通 / 委派响应者路径、生命周期、状态与 30 / 90 / 5 秒窗口保持。新 8 个子项、既有 7 个 OCSP 窗口子项及证书时效顶层用例、package vet 和两文件只读格式比较均通过,实际 Go exit 均 0;旧用例不重复累计。实际工具链为 Go 1.24.0 / Windows,依赖不变;生产 / 测试 SHA256 分别为 `16cdea8b492002fb8d01b4645faad65b9929e61e850a83dc166fc78d5d656aad`、`cb04eeb961e8d03d113077d90bdfdd9777c15a769fac112856566e8cf5ae7da0`。汇总 `go-ocsp-issuer-validation-summary-001.json` SHA256 为 `269f4c9e0ac04c991fea33c09c862a2b43651b8fbfdce94c07b1cb8cb71df1ff`。运行构建须以原 cross 的 98 个 Go 源码及 vendor 为基线,仅替换此生产文件;当前 `client_rpc_pipeline.go`、`errors.go`、`facades.go`、`org_protocol.go` 的外部漂移不纳入该运行版本,其原冻结字节均已找到并匹配。
|
|
587
|
+
|
|
588
|
+
- `cert_adapter/go-inbound-readonly-20261011T014521Z-4049e0da/` 一次宿主只读 SQLite 事务包含当前 WAL,一次历史窗口日志读取均 exit 0;`readonly-result-001.json` SHA256 为 `a04a0f98f31bb0c4f2f1df808a180ce75e2a614c5050cd846f0c1f36cb87adea`。Go 原 operation 无持久任务;原 device / slot 的 p2p contiguous / tail / head 均为 1,更新于 01:31:28.400 UTC,历史日志于 01:31:28.299 UTC 已见原 JS 的消息到达。没有明确服务端 ACK 成功记录,不能据本地游标作此结论。代码会将 invalid 收件消费而不保存任务,原 JS 已发送 outbox 也不会因重连自动重投。后续恢复保留原 JS 任务、operation 和审批意图,在 Go 修补加载后核对两端状态及新鲜 unbound / version 0,再由原 JS 身份通过既有 `message.send` 加密重投同 operation 的 `bind.request` 一次;仅传输 message_id 新建,不重新发起绑定、不直接写任务或审批,然后从新 CP4 resume 继续。该明确恢复不视为自动消息重投机制已修复。
|
|
589
|
+
|
|
590
|
+
- `cert_adapter/go-ocsp-load-20261011T015940Z-d73a8ab8/` 以原 cross 的 98 个非测试 Go 源码为基线,仅替换 `ownership_v21.go` 为 `16cdea8b…`;其余 97 源、2 份模块文件和 1754 个 vendor 文件均保持原冻结字节,四份外部 Go 漂移未纳入构建。原 Go 1.24.13 / Linux amd64 镜像、`CGO_ENABLED=0`、`-tags crosssdk -mod=vendor -p 1`、`network=none` 离线构建成功,Docker client / 容器均 exit 0;`build-result-001.json` SHA256 为 `c0a836094bf70ee8caece89717b21c716862654564f08ea6f31571a83b1010cd`。新二进制 21,917,317 字节,SHA256 为 `d4c2211d6ceed1478010f6582cd1d32164b67a6caf64925547cdb843d5050009`。旧 Go 容器仅停止并保留为 `ownership-v21-1010100537-go-pre-ocsp-20261011t015940z-d73a8ab8`,旧二进制保持;新容器以原名、镜像、环境、网络和挂载直接执行新二进制,ID 为 `86d5ea6f90cafcb5f49f51372c55abb17058a7cc3033e1d40ab38a2b42fcfdf5`、PID 53004。Go 进程及会话发生变化,原 JS PID 9770 与 fake IndexedDB 保持,不能声称四端进程均未改变。
|
|
591
|
+
|
|
592
|
+
- 该次加载在 02:06:09 UTC 的运行输入比较首次 exit 1;唯一差异为执行器按 `Config.Env` 列表原顺序计算的摘要。一次只读 inspect 在内存确认 32 个环境键无重复、键值完全相同,完整排序摘要一致;`go-load-environment-order-proof-001.json` SHA256 为 `2bb7b17f635ff40329509e9c56eff7692aaab925c38102fa5a7bd6d79875a11d`,环境明文未归档。新 `go-load-preservation-normalized-002.json` 仅修正该项,复用其余已通过检查,13 项保护均 true,SHA256 为 `e7bd8f180187bbf44182332fbc49cfe55248ee38ad53f8389f19e5390a43e75b`;未重启 Go。随后原 JS / 新 Go 各一次 status GET 均 HTTP 200,原任务仍 pending / accepted、Go 无对应任务、两端 NS 2.1 / unbound / version 0 及原文件摘要一致。执行器额外要求 Go status 带自身 `aid` 字段,违反既有测试 agent 响应契约,导致第二次机械误判;`go-load-continuation-first-failure-001.json` SHA256 为 `ddf5bcef7d45432befbb59cbb2890bc310de6f40d5fcb4b74dd6317fe1633463`。两次原失败保留,均未发生消息重投、runner 或联邦执行;后续按原响应契约静态补验后从该处继续,不重复 GET、不增加接口字段、不计业务用例失败。
|
|
593
|
+
|
|
594
|
+
- 同目录 `go-load-result-001.json` 完成既有契约静态补验,SHA256 为 `8a5df48a881a87aaadb0e1773f2a38246f13b27c2938f7ea7cda3549ad101715`。02:13:29 UTC 原 JS 通过既有 `/message/call` 调用 `message.send`,向原 Go 加密重投同 operation `4ec3998f-bec6-4199-b553-99469651bf2b` 的 `bind.request` 一次;载荷保持原 8 字段、版本 `0 → 1`,传输 message_id 为 `m-2d3b903cc4554e32a9c88c1116b361b6`,没有新建绑定或直接写审批。HTTP 200 / ok、Docker client exit 0;`go-ocsp-replay-result-001.json` SHA256 为 `7626e0ac45aa8dd5597765ba68d63205317e6006c1c57aeb05d6be9878d7c855`。随后从原 CP4 单次启动余 24 项,`attempt-20261011T021330Z-7a22327e` 中该原任务真实通过,累计 cross 2 / 25。
|
|
595
|
+
|
|
596
|
+
- 本次续跑下一项 `ownership_transfer_python_to_go_for_ts` 首败,实际新通过 1、失败 1、未启动 22、无 skip;业务 / Docker client / 容器 / 外层均 exit 1,`go-ocsp-resume24-result-001.json` SHA256 为 `94a0572be65c308cd185ca87b58558f1423ebdaf67ec7a5f1558b63c8a4ad65e`。原 operation 为 `7b7e24eb-534c-47fd-b6e0-4fb63f6cccce`,Python 发起、TS 为 sub、Go 为新 owner,固定 `1 → 2`;CP8 `approval_confirmed` 已记录 TS / Go 均 confirmed,SHA256 为 `9d15db20c28ac744ccd24e38e74f2a9e76ec3ff77419845ebefbdc7a47beba40`。失败响应中 Go 的任务为 pending / awaiting_ns_acceptance、本端 accepted,共识为 unavailable / retryable=true,原因 `NS relation or document changed during validation`。同响应的完整名片已为 Go / version 2,Storage 名片副本仍为 Python / version 1,不能据此认定完成。Go 前后 NS 一致性检查按契约拒绝变化窗口;runner 实际调用栈为 110 → 707 → 562,收敛轮询却把该可重试状态立即判为 AssertionError。仅修正测试等待语义,保留 SDK / NS 验收条件。最新 `cases.resume.json` 含原转移及余 22 项,SHA256 为 `41d679969a6b0c67200cafe3c733c313b218af0d34dd5f23a9a22996f991fc6f`;后续从该 CP8 恢复,不重发转移或双方已确认审批。全部运行保护通过,联邦未启动。
|
|
597
|
+
|
|
598
|
+
- `commander/runner-transient-consensus-001/` 在既有 runner 测试新增短暂 unavailable 后收敛的正向用例,以及发起前 unavailable、invalid、不可重试、缺 retryable、原 deadline 超时、后续版本和 stopped 任务七个边界。原 Sol 先在未修 runner 的 707 → 562 原调用链得到有效 Red,单项 pytest exit 1;`red-convergence-retry-001.command.json` SHA256 为 `79969d8dbf0f36cc1b5f70364d91456173cc705d2f416d24d7bac2ca704c7bab`。生产仅在收敛轮询显式允许 status / code 均为 unavailable 且 retryable=true 的快照:仍先核对协议、sub、权威元数据、固定任务、本端审批、停止状态及超目标版本,再在原 deadline 内重读;发起前、审批及副本验收保持默认严格,完成仍要求新鲜共识和完整文件。新 8 项与按原测试 AST 选取的 19 个既有函数 / 52 个参数项分别全部通过,实际 pytest exit 0,不重复计数;两个 Green command SHA256 分别为 `9acc780c23259f36e2289652a2a8986998482d0bb65d84db6813640899549cc2`、`8b3e75f3f561de00da35a8deaeec6e4500511b7d6bb7132fdbf52561466d1352`。同环境 Ruff 的 runner / tests 诊断为 51 → 51 / 4 → 4,mypy 为 93 → 93 / 57 → 57,逐代码、消息、作用域及行映射核对新增均为 0;八个真实工具 exit 均为 1,历史诊断不改写为通过。`static-delta-001.json` SHA256 为 `67ffdcf17b24b4cbd13f81527529b7bd31d5b4e31fc4cd4abc8f480b57ac4e5d`。冻结 runner / test SHA256 分别为 `e9c502baede9890588248eb32409b8a98389ac2a3317ed678af23cdb79bc1a79`、`2567d619a39f80491aea4770b143f68ede5aa4804310060162eeb3faca1da873`;仅该 runner 输入更新后从 A2 原 CP8 续跑 23 项,不再执行此前原 JS 重投,不重发 transfer 或已确认审批,不重跑前两项。
|
|
599
|
+
|
|
600
|
+
- `cert_adapter/runner-wait-load-20261011T024114Z-303a5a2b/` 以冻结 runner `e9c502ba…` 从 A2 原转移 CP8 单次续跑,实际业务 attempt 为 `attempt-20261011T024142Z-8a06c072`。原转移及后续共 10 项 PASS,随后 1 FAIL、12 未启动、0 SKIP,累计 cross 12 / 25;前两项已通过用例未重跑。业务 / Docker client / 容器 / 外层均 exit 1,`resume23-result-001.json` SHA256 为 `6b3b9c5dfb792dfab959501991592af661ced8994577649317c70f05dc6cb82f`。首败为 `ownership_owner_initiated_ts_for_python`,原 operation_id `3670421c-e15f-4ca1-8a0d-f6929b1c2f4b`、固定版本 `0 → 1`;Python 与 TS 本端审批均 accepted,Python 持久任务为 error / publishing_sub、unavailable / retryable=true,原因 `ownership NS PUT is unavailable: HTTP 401`;TS 仍 pending / owner。该失败属于任务错误,不能套用此前短暂共识 unavailable 的等待修补。最新 `checkpoint-0007.json` 为 task_stopped,SHA256 `4b66a67a6ad5eee28cf2d6a9750908f3baa59fedce8eb560b79717562678e551`;真正 `cases.resume.json` 含该项及后 12 项,SHA256 `c773b9e70bbc36dde971adb00df5d6b49e586dcc86f601c96bf08ba005a8c890`,指向本次 A3。独立既有结果读回 `resume23-first-failure-readback-001.json` 摘要为 `6c63ba56c166223a2b60029935b37075057a67b4f1984d5c82a8befe4257a61e`;13 项运行保护全部通过,原进程、任务、审批、签名字节、条件与测试环境保护状态保持,联邦未启动。HTTP 401 的具体认证拒绝原因仍待历史日志核实,不先修改 SDK 或认定为 token 过期。
|
|
601
|
+
|
|
602
|
+
- `cert_adapter/python-ns401-ro-20261011T025520Z-f0a83eb4/` 只读历史窗口确认 02:43:48.744 UTC 的认证拒绝为 `invalid_token`,对应原 Python NS PUT 401 与 trace `trace-3d6952ab17c34f418bdee08767020a27`;没有明确 expired 记录,不能认定 token 过期。`NS401-auth-classification-001.json` SHA256 为 `05a75aa2e5c3e2ecb74b062ad6e425047f6d949c7ae410c2440aa3dfaf2e7751`。Python 历史 stdout 为空、stderr 4903 字节,所选刷新标记为 0,缺失日志不能证明未刷新。现有代码及单测明确 `background_sync=false` 关闭后台 token 刷新,本轮不修改该语义或认证接口。
|
|
603
|
+
|
|
604
|
+
- `cert_adapter/python-session-recover-20261011T030347Z-d03e9896/` 仅对原 Python client 执行一次 `/session/disconnect` 和一次 `/session/connect {background_sync:false}`,均 HTTP 200。原绑定 operation `3670421c-e15f-4ca1-8a0d-f6929b1c2f4b` 的三次 status 观察依次为 error / unbound v0、pending / consensus v1、completed / consensus v1;SQLite 同任务为 completed / accepted、revision 13。原审批、固定上下文、856 字节签名文件 `f53c4de90401171d77882cfc885af4da72d615ee38b548b0ceb6dee9adeadf76` 与原 If-Match `"9ade54202594b4a220ac4ded5a8887cb04d96e64c6d0fcdf58c724288439bbb7"` 保持;完成时 NS 与 Storage 副本相同。准备包装器先误以 `is True` 判断 SQLite JSON1 的整数 1,在 HTTP 前停止;恢复成功后的包装器又把合法共识 `consensus` 误要求为 `bound`,原实际 exec / 外层 exit 1 均保留。仅从既有原件纠正判据的 `recovery-classification-correction-001.json` SHA256 为 `d274fada41e72fcf217180d4e8740ff69c72933de994e84f4f2bdf06abe779a9`,10 项核对均成立,未再次恢复或发送 HTTP;不将该恢复报告为认证根因修补。
|
|
605
|
+
|
|
606
|
+
- `cert_adapter/runner-resume13-20261011T030814Z-9e66b552/` 从原 A3 CP7 单次续跑,业务 attempt 为 `attempt-20261011T031004Z-04b235a1`。原 TS→Python 绑定正式 PASS,随后 `ownership_release_ts_for_python` 首败;本次 1 PASS、1 FAIL、11 未启动、0 SKIP,累计 cross 13 / 25,前三批已过项未重跑。Docker client / 容器 / 实际外层均 exit 1,`resume13-result-001.json` SHA256 为 `0f01dff71baad80d5207edd6144c4ed70f2187edbcbd7a6236aef8dc5267503f`。原释放 operation `4b446993-7c7a-4bd7-913f-66c344c7c69f`、固定版本 `1 → 2`,TS 为 owner / 发起者且 completed / confirmed / accepted,Python 为 sub 且 pending / cleaning_sub / accepted。Python 共识为 unavailable / retryable=true、无 code,reason 为 `NS relationship changed during the check`;NS 已 version 2 / unlocked / owner null,清理名片摘要前缀 `46a75793`,Storage 副本仍为原 `f53c4de9` 完整文件。runner 在 709 → 564 将合法变化窗口立即拒绝。最新 `checkpoint-0004.json` 为 actor_persistence_confirmed、approvals 为空,SHA256 为 `8165ef46416283b826130b0a955acef37516456fdacda24b6bcf3324e565b238`;原释放及后 11 项的 `cases.resume.json` 为 2096 字节,SHA256 `28b375122a30f2a535d27fbfddd35faf841dbeb187266b1ad163549803500abf`,ownership_resume 指向本次 A4。原 13 项运行保护全部通过,联邦未启动。
|
|
607
|
+
|
|
608
|
+
- `commander/runner-transient-consensus-002/` 在既有测试中增加 transfer 缺省 code、release 缺省 code 且等待真实 Storage 副本、显式矛盾 code 拒绝三项。原 Sol 在改前 runner 取得有效 release Red,pytest 1 FAIL / exit 1,实际拒绝位于第 564 行;旧包装器误要求第 562 行造成检测标记 false,保留原日志并只读补证,未重跑 Red。生产仅将 code 读取改为 `consensus.get("code", "unavailable")`;仍限定既有收敛阶段、status=unavailable、retryable 为布尔 True,显式矛盾 code 继续拒绝,初始 / 审批 / 最终副本取证保持严格,原 deadline、任务上下文、版本及完整文件条件不变。新 3 项、指定旧 10 项分别 exit 0,13 个唯一参数项通过,不重跑此前旧 52 项;新 release 断言原操作只派发一次。Ruff runner / tests 为 51 → 51 / 4 → 4,mypy 为 93 → 93 / 57 → 57;8 次真实工具 exit 均为 1,205 项历史诊断按代码、消息、作用域及精确字节行映射逐条匹配,新增 / 移除均为 0。`validation-summary-001.json` 为 26298 字节,SHA256 `09f996a2c39a42545292f2e7e298579fd8f1873629d850a6a7adff3641bca7ab`;`static-delta-001.json` SHA256 为 `68fa2629ecf8417c6f8b815ebb6e42e5efb7b345c84294cd90a2a8c9ee58ee1f`。当前 runner / test 分别为 468369 / 195776 字节,SHA256 为 `46eced0e8406904b400ae629e9cfbab041f8441e4ca84fa79f18ecd1280fa3c3` / `904c2ed73659f4051f5c209b72dfa4d13c69bd3b1c413fc3fb82d1a204480350`。仅更新冻结 runner 后从原 A4 CP4 续 12,不重发 release、不重连 Python、不重跑前 13;共识 code 本为可选字段,不修改 Python 或四 SDK 对外接口。
|
|
609
|
+
|
|
610
|
+
- `cert_adapter/runner-resume12-20261011T032342Z-10664878/` 使用已冻结 runner `46eced0e…` 从 A4 原释放 CP4 单次续跑,业务 attempt 为 `attempt-20261011T032402Z-108c1078`。12 项全部 PASS,FAIL / SKIP / 未启动均为 0;前 13 项未重跑,累计唯一 cross 25 / 25。原释放仍为 operation `4b446993-7c7a-4bd7-913f-66c344c7c69f` 与相同固定上下文,没有重新派发释放;最后一项 `ownership_release_python_for_js` 的 operation 为 `de9e3927-40b9-4785-a6f1-efd2c46c5bc7`。真实 Docker client / 容器 / 外层均 exit 0,原输入、身份、测试环境保护状态、两域服务 / MySQL、挂载及完整环境等既有保护均通过;Python / TS / Go / JS PID 仍分别为 6635 / 6824 / 53004 / 9770。`resume12-result-001.json` 为 2769 字节,SHA256 `87c8360048296c053b6af463727a227c5537a395e8ac1e5ef8959285d7eee966`;`resume12-cross25-completed-summary-001.json` SHA256 为 `8d3e30f3fc509bcf245cc5881ef736b535bcb90acd5eeab6d835e2e02f6d1cf3`。A5 `results.json` 为 3029356 字节,SHA256 `182f1fb7d90a2f28cdb6fdf9141510d9e18ceda95ceb9bfabf1be11301340f75`;`runner-preservation-001.json` SHA256 为 `e536a2fceeee47af35d8bd026b5b703941762b2cb50f3d2e20d497428a97b3d5`。原历史首败、恢复操作和工具限制保持,cross 结果属于原 JS 进程旧 bundle 加当前 CA 的互操作证据,不外推完整当前新 JS 交互矩阵或原生浏览器联网;下一阶段按既定连续授权直接串行执行双方向联邦各 8 项。
|
|
611
|
+
|
|
612
|
+
- `cert_adapter/federation-execute-20261011T033158Z-3b276728/` 按原候选命令单次执行,业务 attempt 为 `attempt-20261011T033201Z-ae8f750d`。正向 `forward-bind-rejected`、`forward-bind`、`forward-source-classification`、`forward-storage-permission-boundary`、`forward-three-party-transfer` 共 5 PASS,分类为 3 项真实网络、1 项真实 Storage 权限边界和 1 项 adapter 故障分类;下一项 `forward-authoritative-delete` 以无消息 AssertionError 首败,后 10 项未启动、反向未启动,Docker client / 容器 / 实际外层均 exit 1。`federation-result-001.json` SHA256 为 `37cfc3f495f7341673d18e96ed2bbdc339b76d9b2f490f68425cc486f987ab84`,`federation-first-failure-readback-001.json` 为 `e25e3f185ee6f8e022cfeaab16b9a1d477cb3ec47a15ab541f3e1992ddc4dbf8`;全部原运行保护成立。原 CP36 delete_prepared、CP37 delete_dispatching、CP38 delete_confirmed、CP39 failed 原件均保持;CP39 SHA256 为 `0fce638de8b062e58a0727504f637d6cf56b79b5ecc5750e6e8b0bf09742a98b`。before 为 consensus / locked / version 2、next-owner 完整原件 `:116`,after 为 released / unlocked / version 3 / owner null、权威 exists=false;两份 NS 完整签名字节摘要均为 `1739c314c8f860d949395271e9fbec2952ae4e6886780ddd4f01fda1fb917b5c`,删除不替 sub 重签名。CP38 证明删除确认断言已通过;原 stdout / stderr 无 Traceback,现有证据只将异常限制到随后重连或清理读取阶段,不能虚构原异常行号。原脚本 `cross_domain_ownership.py` SHA256 为 `131c081829a4daaf907c83032a7d3efc72165c06c1c2cb61759778f224673f04`,静态确认其 cleanup 回调先做严格快照、后检查 owner 字段,缺少单域 E2E 已有的字段清理等待;两文件 before 已保存于 `commander/federation-release-cleanup-001/before/manifest-001.json`,SHA256 `3064aeb71cab2677182c9936a8a904f801cd8393d53bdd0091cc9b09616b3ab4`,定向 TDD 进行中。真正续跑入口仍为 `AUN_OWNERSHIP_RESUME=/data/aun/ownership-v21-20261010T100537Z/federation/ownership-v21/1010100537/artifacts/attempt-20261011T033201Z-ae8f750d`,保留原六 AID、slot、run_id、原删除事实和已过 5 项,剩余 11 项未重发或重跑。
|
|
613
|
+
|
|
614
|
+
- `commander/federation-release-cleanup-001/` 在既有 runner 测试将清理等待用例参数化为 E2E / federation,联邦两个回调各覆盖 cleaning、ready、后续关系、严格证据 unavailable、陈旧副本;另验证从已保存删除 after 的 dispatching 阶段恢复时只等待清理、不再次调用删除。原 `cleaning-cleaned-federation` 单例得到有效 Red,pytest 与实际工具 exit 1,断言为“sub仍在清理时不能启动严格证据快照”;`red-cleaning-cleaned-federation-001.command.json` SHA256 为 `33e494b314b926761637859b4d8d32a360a33b12aba6aa449772dca2839b28fc`。生产只增加 `_sub_cleanup_ready` 并在 release / authoritative_delete 的最终回调先观察原目标版本、exists、unlocked 和 owner 字段清空,再执行原严格 `_evidence`;原签名、版本、完整副本和 90 秒 deadline 不变,不捕获严格证据错误。局部 Red 证明等待缺口,不证明 F1 原无堆栈 AssertionError 的具体异常行。
|
|
615
|
+
|
|
616
|
+
- 新增 11 项、共用 E2E 旧 10 项分别全部 PASS,pytest 与实际工具 exit 0,未重复此前 T1 / T2 或旧 52 项。两份 Green command SHA256 分别为 `dd65a62496949f388109681c92265f2e9a55ee027aa01773eafb20f6a48dd4ea`、`459b7e075705b06ee72ac67cb76cab642e5648f866bd9452c4e342514eef2e67`。首轮静态为联邦 Ruff 1 → 1、mypy 0 → 0、测试 Ruff 4 → 4,但测试 mypy 57 → 58,新增 `dict(before["agent_md"])` 的 call-overload;`static-failure-001.json` SHA256 为 `76400c6ec8135119d1f60a14ade7bfcc364e05f6bd8a535d7bfe8531b22caaf1`,首败真实 exit 1 保留。随后仅为该测试的局部 before 增加 dict 类型注解,恢复单例 1 / 1 复验通过,pytest / 工具 exit 0;复用原 baseline 和生产静态,当前测试 Ruff 4 → 4、mypy 57 → 57 按代码、消息、作用域和行映射逐项匹配,新增错误和 notes 均为 0,两工具历史整体 exit 1 保留,差量执行器 exit 0。未重复其它新 10、旧 10 或生产静态;单例 command SHA256 为 `cc72c1154f18834969ac769f0c7273430fb1b4c2676957e4a14f06441ac45512`,`static-delta-002.json` 为 126180 字节、SHA256 `566bdcb6c8c40eb464d70385881b099e470ff7321ded0ddb544b0b2d3680e094`。最终生产 / 测试分别为 30478 / 200777 字节,SHA256 为 `53046a7a22d6c8a25ecda1681230b983bf4d6e913d1158d5eb6743a97a46f14e` / `4cad98d9e0a8b0679fc43ca54720b87ca32eac9daad1af7034cea11c44e4f967`。已将唯一联邦脚本输入更新交给原 Docker 执行器,保留原六身份、slots、run_id、Python 冻结输入、helper、tester 和真正 AUN_OWNERSHIP_RESUME,从原 CP39 续 11;原删除、bind / transfer 和前 5 项均不重发,归属整理不阻塞续跑。
|
|
617
|
+
|
|
618
|
+
- `cert_adapter/federation-resume11-20261011T040534Z-f01125cc/` 使用冻结联邦脚本 `53046a7a…`、原六身份 / slots / run_id、Python 127 源及公共根、helper、tester,从 F1 原 CP39 单次续跑。新 attempt 为 `attempt-20261011T040556Z-1429241d`,本次剩余 11 项全部 PASS,原 5 项未重跑,累计唯一 16 / 16,正反各 8;真实分类为 12 项网络、2 项 Storage 权限边界、2 项 adapter 故障分类,FAIL / 未启动均为 0。stdout 仅有本次 11 项 PASS,新检查点链中正向权威删除的 delete_dispatching 为 0、原 5 项 dispatch 为 0,未重新派发原删除、bind / transfer 或 cross 用例。Docker client / 新容器 / 实际工具外层均 exit 0,session 51271 已结束;原 F1 的 exit 1、无 Traceback 限制及 CP39 保留。`federation-resume-result-001.json` 为 7256 字节、SHA256 `24422b69d90977ec1c87cdaaa79b8fafdfb299699c2eb94951b3a0cc83f29695`;`federation16-completed-summary-001.json` 为 8763 字节、SHA256 `e3794419fd66753712db6e1834c312789e46da7614ab0eb55aaff3889151192f`;最终 CP66 complete 为 315286 字节、SHA256 `89ef3802c316f499efc0614031cf3f783b7ed44e251fb8b4a3f44ddfdbfcb0f3`。本次没有新增环境 / 健康探针或额外 HTTP,结束只对新测试容器记账退出状态;四端 / MySQL / 应用 / 原 18 文件及 测试环境保护状态沿用 F1,不能声称本轮现场重验。该脚本不覆盖真实服务重启;10.2 的恢复与持久化门槛另逐项核对,不能以联邦 16 / 16 代替。
|
|
619
|
+
|
|
620
|
+
- F 局部验证汇总 `commander/federation-release-cleanup-001/validation-summary-001.json` 为 41645 字节、SHA256 `a331bd3f4440b9fb480fe16f83c9a419f413a94b85f0f126df04bd06db9a83eb`,记录 11 新增 + 10 旧回归 = 21 个唯一 PASS,类型注解后的 1 项复验不重复计数。写入汇总成功后,包装器末尾将 Python 元组与 JSON 数组按对象直接比较造成一次机械 exit 1,原脚本 / 回包保留为 `summary-serialization-failure-001.*`;随后按标准 JSON 序列化逐字节读回,`validation-summary-readback-001.json` 为 2345 字节、SHA256 `5f60594e0a2630b1e3bcfe4a9501105cd90d7c378877438d7c3fc9cdd5d0c132`,实际 exit 0。未改写原汇总或重跑测试 / 静态,窄归属单独追加。
|
|
621
|
+
|
|
622
|
+
- 最终恢复复核先保存 `commander/final-sdk-review-001/` 下四份 `*-recovery-map-001.json`,逐项对应原 P7 与 10.2,发现的直接证据缺口随后补验;这些映射是补验前原件,不覆盖为最终结果。以下仅修改五份既有测试文件,四 SDK 和 Storage 的相关生产输入未改;新增 17 个 SDK 参数项与 1 个 Storage 父用例全部通过。除 JS 新测试字段断言首败外,其余新增项首轮 Green,不补造生产 Red。既有且未受影响的单元、网络矩阵未重跑。
|
|
623
|
+
|
|
624
|
+
- Python `commander/python-recovery-windows-001/` 的 5 项覆盖 R01 发送前 / 后的审批通知中断、R02 sub PUT 已提交后失响应,以及 R04 新关系之后恢复旧 bind / release sub 请求;均关闭并重开同路径真实 SQLite,保留原 operation、决定、完整已签字节及原条件,新代际不被旧请求覆盖。`python -X utf8` 定向 pytest 为 5 PASS、exit 0;66 个旧函数 AST 不变。四输入 Ruff 为 10 → 10、整体 exit 1,本次 mypy 为 0 → 0、exit 0,新增诊断均为 0,历史全量非零退出继续保留。`python-validation-001/final-validation-manifest-001.json` 为 11879 字节、SHA256 `bc3de7683b5cd534740b9fe468f3af5684f4285dc0836a1a4f11adcdfe86e12a`。
|
|
625
|
+
|
|
626
|
+
- Node TS 的恢复补验分三批:`commander/ts-r02-sub-response-001/` 的 R02 单例 1 PASS / 52 筛选跳过,sub 已提交后失响应,真实 SQLite 重开后只按原 raw / hash / If-Match 确认,PUT 仍为一次。其 `ts-validation-001/validation-result-001.json` SHA256 为 `47cec40aa4c92d3164a5fb581f9fd820e4f8a060f1850a9a60c03b3aa6dda920`。`commander/ts-recovery-windows-001/` 再补 R01 两个通知窗口及 v2 转移后旧绑定消息重放,共 3 PASS / 53 筛选跳过;同名汇总 SHA256 为 `9f268ada53c5cca220f2f1046fbdf5c3315b29437a1b0f359d31bf7d62facfd4`。`commander/ts-r05-stop-order-001/` 的 before_commit / after_commit 共 2 PASS / 56 筛选跳过,提交前收到既有 `operation.stopped` 保持 v1 / stopped,提交后保持 v2 / completed;新建 Workflow 恢复后 PUT、写入及删除 mock 均未调用,原文件条件、审批及授权期限不变。首版 after-001 未执行,after-002 才是实际测试输入;同名汇总为 7453 字节、SHA256 `9fa420774a247f4dbed89df7813d06019c17884efbc860e81f84703a0162f909`。三批累计新增 6 项,Node / 包装 / 实际工具外层均 exit 0;首批 tsc exit 0,后两批生产输入不变且 tsconfig 只包含 src,按范围沿用,新增测试不计为 tsc 已检查。R01/R02 证明连接重开,R04/R05 只重建 Workflow,不声称跨 PID 恢复。
|
|
627
|
+
|
|
628
|
+
- Browser JS `commander/js-r01-approval-reopen-001/` 新增审批 CAS 提交后、首次发送前中断的 R01 单例。首轮在原 DTO 的 `to_aid` 被误断言为 `to` 时失败,1 FAIL / 92 筛选跳过、实际及外层 exit 1;仅修正测试字段后,同单例 1 PASS / 92 筛选跳过、两层 exit 0,原决定、operation_id、message_id 保留,owner / sub 各发布一次。真实边界为 jsdom + fake-indexeddb 关闭重开同 factory 的数据库连接并新建 Workflow,非 Node 或浏览器进程重启;原发送后清 outbox 前的既有通过项未重跑。最新 `tsc --noEmit` 对 78 个 src 文件绑定执行前后输入,exit 0,不包含本次测试文件。`final-validation-summary-001.json` SHA256 为 `1cd7731f8621e900b0db6dd5a6498606716d077a705e52d704db4c2941fefc0c`;首败属于新增测试断言错误,不计生产 Red。
|
|
629
|
+
|
|
630
|
+
- Go `commander/go-recovery-windows-001/` 的三个父用例、五个叶用例全部首轮 PASS:`TestOwnershipV21ApprovalInterruptReopensOriginalOutbox` 两个子项在通知发送前 / 后关闭并重开真实 SQLite,恢复相同任务 JSON、修订、审批和通知;`TestOwnershipV21ReleaseSurvivesNSOutageAndDeferredSubCleanup` 在同一父用例中核对 release 提交后 NS 不可用,以及 owner 已确认而 sub 延后收件两窗口;`TestOwnershipV21StoppedTransferPreservesTargetCommit` 两个子项核对停止消息在目标提交前 / 后分别保持 stopped / completed、原期限及文件条件,不产生额外 PUT / 删除。后两类是同 Client 重新读取持久任务,不是跨 PID。Go outbox 只持久 To / Payload / Sent,不声称持久传输 message_id。`recovery-five-001.command.json` SHA256 为 `ce6b3597669588a64941ef9dadf6c1f280315206f2ad3a63c4a22740a5e588f8`;定向测试 exit 0,只读 gofmt 无差异、vet exit 0,对应 command SHA256 为 `363d8268645650458ebf9437d4f7b08d66ad2315b7ed84d1b9c0427fbb6da4b5` / `8223a41a06c5b60491b5c38bdab81a24dc3584576a30d52e536d98b1dbb506dd`。237 份当前 Go 输入及四份依赖文件保持;实际为 Windows Go 1.24.0,不外推完整旧套件、外部漂移或 Go 1.22 已验证。
|
|
631
|
+
|
|
632
|
+
- Storage `commander/storage-process-recovery-001/` 曾记录一组独立恢复工件测试及其真实 MySQL 运行结果;该类 Ownership 专用独立恢复工件机制和测试已从当前契约与当前验收范围移除。它们仅作为旧实现阶段的历史执行记录保留,当前契约只使用 sub 的完整 agent.md 和 owner Storage 的 owner.md;旧工件测试不能证明新契约已验收。
|
|
633
|
+
|
|
634
|
+
- 最终当前 JS 三 GET 的输入映射已读回:`commander/js-ocsp-network-001/build-inputs-002.json` SHA256 `aaf1e5c06907e1df7c1fbe6ea67f77d25a1b0d3f5fb2cf5a411babae69af2c40`、`build-result-002.json` SHA256 `9dba0baab6b772fa287d919e28e872c5ab76a4e41b48deaae1c53232d83b994a`,与 `cert_adapter/js-authflow-network-001/bound-inputs-before-001.json`、`probe-result-001.json` 绑定同一 `e75649fd…` bundle;后两份 SHA256 分别为 `0688bd8f0e702caa3328777d859fefb967418427bd4e9fdcee7a1a71deb1f67b` / `b078201fa3eefd7baca0737da264d17b78d93a5701f3b29e041f6a983abf0d0d`。10 个实际 AuthFlow / CryptoProvider 依赖均与对应当前源码相同,包含 errors.ts,不包含 facades / org-protocol。该证据与 cross 原 JS 进程旧完整 bundle 分列,不能扩称当前 78 源完整互操作或原生浏览器联网。此前两次模型分工偏差、宿主 dist 尚缺 69 份原字节、原群 pending 丢失、基线失败及原因未确定的执行器异常均保持原记录,不因本轮新增 PASS 被删除或改判已修复。
|
|
635
|
+
|
|
636
|
+
本次继续执行后发现 Go 的 `v2/e2ee/decrypt.go` 与 `ownership_workflow.go` 在中断时成为全零字节;工作区 4,623 个源码 / 文本文件只读扫描未发现其它同类文件。已使用初始脏基线及执行器会话中九次成功补丁精确恢复,损坏原件和元数据保存在 `go/source-recovery-001/`,未使用 Git 回退覆盖本轮或无关修改。恢复后真实 E2EE 词法三项及 E2EE 包 30 项通过,随后 Ownership 专用 OCSP 30 / 90 秒窗口七分支通过。
|
|
637
|
+
|
|
638
|
+
Docker 使用现有 `kite-single` 与 `kite-agentid-cn-local` 及 federation overlay;`federation-test/docker-compose.yml` 默认 dist-aid 域不是本轮 agentid 双域环境。准备期两域镜像不同;已先后切换到 `3078a7…`、`d1428bc…` 服务镜像并核验实际进程;当前两域运行后续 CA 修补镜像 21462ec,新 SDK 从 tester 的独立只读挂载加载,二者摘要分开记录。后续若再改服务生产源码,须重建、recreate 并复核对应摘要;测试环境快照 已完成一次性初始化,不能再次初始化或覆盖。保留 CN 现有 MySQL 挂载及 local.env;不得打印带密钥的完整配置。所有 SDK 测试按指南执行、单个失败立即停止;本轮不擅改服务环境或凭据。
|
|
639
|
+
|
|
640
|
+
### 13.5 跨 SDK 测试适配契约
|
|
641
|
+
|
|
642
|
+
这些路径仅属于现有 cross-sdk 测试 HTTP agent,不是 AUN 协议接口;四 SDK 的业务 Facade 仍只有七个。统一返回 `{ok: true, ...}`;任务操作返回 `task`(13.3 的任务结果)并可重复顶层 `operation_id` 方便检查点记录,失败返回真实错误,不自动审批。
|
|
643
|
+
|
|
644
|
+
| 测试路径 | 请求与结果 |
|
|
645
|
+
| --- | --- |
|
|
646
|
+
| `POST /ownership/bind` | `{role: owner\|subject, peer_aid}`;owner 调 `bindSubaid`,subject 调 `bindOwneraid`;operation_id 由 SDK 生成,不接收旧 request_id / proof / extensions 授权。 |
|
|
647
|
+
| `POST /ownership/accept` | `{operation_id}`;仅关联已有本端待审批任务。 |
|
|
648
|
+
| `POST /ownership/reject` | `{operation_id, reason?}`;不回滚已发布文件或已验收关系。 |
|
|
649
|
+
| `POST /ownership/release` | `{sub_aid}`。 |
|
|
650
|
+
| `POST /ownership/transfer` | `{sub_aid, new_owner_aid}`。 |
|
|
651
|
+
| `GET /ownership/status` | 可带 `operation_id`、`sub_aid` 查询参数;返回 `task`(指定或最新匹配项)、`tasks`(匹配的公共任务结果数组)、`events`(Ownership 本地事件)、`consensus`(对应 sub 的新鲜六态结果)。从任务固定上下文确定 sub;没有任务或查询参数时用当前 AID。 |
|
|
652
|
+
| `GET /ownership/events` | 返回 `{ok: true, events}`;事件元素为 `{event, payload}`,payload 保留 operation_id、step、已核验版本等指南字段。 |
|
|
653
|
+
|
|
654
|
+
`status.task` 与 `status.tasks` 还提供只读 `initiator_aid` 和 `local_approval`:前者来自持久固定上下文,后者只按真实持久化决定映射为 `pending` / `accepted` / `rejected`(本端明确发起为 `accepted`)。审批 POST 丢失响应时据此核对原审批,不能从 step、网络回包或他人同意推断本端已同意。
|
|
655
|
+
|
|
656
|
+
`status` 另返回只读 `files`:`agent_md` 为 NS 完整文件,`owner_md` 为对应规范路径当前文件,`storage_agent_md` 为 sub 根目录副本;每项保存真实 `raw_base64`、`sha256`。缺少文件或不可用以 null 及 `file_errors` 表达,不合成文件或把失败解释为不存在。释放任务从固定上下文定位旧 owner 文件;异步副本一致性单独等待、验收,不阻塞已确认的关系 completed。共识 ETag 字段保持 `agent_md_etag`;如展示 `ns_protocol`,必须来自真实 NS 响应,不能根据任务状态推断。
|
|
657
|
+
|
|
658
|
+
测试 agent 可读取内部任务存储来构造只读公共快照,不新增 SDK Facade。runner 必须使用 SDK 生成的 UUID operation_id,等待请求事件后显式审批,以 NS 共识及实际完整文件及摘要判断完成;不得再断言 legacy proof_id、has_ownership_proof、agent_md_notified。失败保存任务上下文与已验证阶段,后续执行从同一任务和权威结果恢复,不重启已完成的不可逆步骤。
|
|
659
|
+
|
|
660
|
+
runner 的 release 完成契约接受本任务声明 v 对应的新鲜 released/v,或按本任务原件严格关联的真实 unbound/0;任务 base/target 及历史 verified 仍为 v,完成证据保存真实网络状态及版本,不伪造 released,不读取独立 NS 终局或要求版本递增。通过 unbound/0 完成时,sub 以本任务清理原件、摘要、原 CAS,或本人明确 accept 的匹配原 bind/transfer.release_cleanup,精确核对当前 NS 原文、摘要、ETag及已知提交 ETag;owner 以本任务 release 完整原件、hash 与当前 owner.md 一致且当前证书有效确认,不能补造旧条件或只比较版本。旧 owner 文件获取失败单独记录,不能写成权威删除证明。locked / consensus 的绑定和转移仍须核对双方完整文件及 owner 完整原件;异步名片副本另行等待验收。独立 Python 环境脚本从公开身份目录打开实际任务存储取证,不直接访问 Client 私有存储字段。
|
|
661
|
+
|
|
662
|
+
### 13.6 四 SDK 一致性检查点
|
|
663
|
+
|
|
664
|
+
本表的“通过”只表示原实施阶段对应单元、定向或本地浏览器历史证据;Docker 网络验收结果及实际运行版本单列于 13.4。旧释放终局、独立账本及 Header 契约不证明当前双材料兼容规则已通过,当前须按第 1—12 节重新验收。
|
|
665
|
+
|
|
666
|
+
| 边界 | Python | Node TS | Browser JS | Go |
|
|
667
|
+
| --- | --- | --- | --- | --- |
|
|
668
|
+
| 当前 119 文件 / 51 消息 / 24 六态共同向量 | 通过 | 通过 | 通过,另在原生浏览器消费 | 通过 |
|
|
669
|
+
| 完整原始签名字节、条件重试及五个内部文件方法 | 通过 | 通过 | 通过 | 通过 |
|
|
670
|
+
| 七 Facade、固定审批上下文、self-owner 与连续转移 | 通过 | 通过 | 通过 | 通过 |
|
|
671
|
+
| 每任务 CAS、审批 / outbox 原子保存、损坏完成态拒绝 | bind/transfer 及 release 观察完成 SQLite 重载通过 | 完成态 8 项修补后通过 | 完成态持久目标证据及本端批准修补后通过 | 完成态 16 负例 / 2 历史正例通过 |
|
|
672
|
+
| 实际收件持久化先于队列 / 游标 / ACK,保留原始 JSON 词法 | 通过 | 通过 | 通过 | 通过 |
|
|
673
|
+
| 精确当前证书、未知用途省略 / 已知 group_identity、OCSP 30 / 90 秒 | 通过 | 通过 | 用途及分类、serial 规范化共 6 项包含在后续 workflow 92 项通过中 | 通过 |
|
|
674
|
+
| 注册固定 operation_id、可靠条件初始化、普通补传隔离 | 通过 | 通过 | 通过 | 通过 |
|
|
675
|
+
| 历史群名片本身份上传(已由 2026-10-11 owner 本人代签代上传契约替代) | 旧契约通过,不证明新契约 | 旧契约通过,不证明新契约 | 旧契约通过,不证明新契约 | 旧契约通过,不证明新契约 |
|
|
676
|
+
| 旧释放终局契约下的 Storage / 证书与清理边界(历史,不能替代当前双材料核验) | 定向修补及 79 项受影响回归通过 | P11 新增 3 项及 9 项相关复验通过 | 已清空边界及前后两次 NS 新鲜核验通过 | 无授权 sub 恢复断点修补后通过 |
|
|
677
|
+
| 本轮实体 pending 原 V2 授权复用、过期停传/明确上传、整数原词法 | 通过 | 通过 | 通过 | 通过 |
|
|
678
|
+
| 本轮无控制消息的历史同意释放清理,保留完成历史和原 CAS | 既有规则回归通过 | 新增及五项恢复边界通过 | 新增及五项恢复边界通过 | 新增及五项恢复边界通过 |
|
|
679
|
+
| 本轮接收方固定授权摘要/实际期限、human/代际上界副作用前拒绝 | 通过 | 通过 | 通过 | 通过 |
|
|
680
|
+
| 实际 Client 生命周期恢复及 legacy 隔离 | 群 post-connect / 自动上传新增 10 项与旧 60 项通过 | 新增 10 项与旧 35 项通过 | 新增 10 项与旧 40 项通过 | 新增 10 项与旧 38 个顶层用例通过 |
|
|
681
|
+
| 普通待办先核验原条件,缺条件保留原元数据;群自身命名空间、签名及 token | 通过,含远端相同文件也拒绝自动清除 | 通过 | 通过 | 通过,含 SQLite 关闭重开与群 token 核对 |
|
|
682
|
+
| 13.5 测试 agent 的真实任务 / 三文件 / 事件 | 接线及六操作定向通过 | 接线及定向通过 | 接线及定向通过 | 接线与 24 个顶层定向用例通过,源码冻结 |
|
|
683
|
+
| 浏览器原生 IndexedDB、双页 CAS / fencing、WebCrypto | 不适用 | 不适用 | Chrome 154 离线 8 项通过,内含共同向量 | 不适用 |
|
|
684
|
+
| R01 审批已保存后的发送前 / 后中断 | 新两项均真实 SQLite 关闭重开,通过 | 新两项均真实 SQLite 关闭重开,通过 | 新首次发送前单例重开 fake-IDB;既有发送后清 outbox 前用例通过 | 新两子项关闭重开真实 SQLite,通过;不主张持久 message_id |
|
|
685
|
+
| R02 owner / sub 已提交后响应丢失 | owner 既有通过;sub 新单例 SQLite 重开、保留原字节及 ETag | owner 既有通过;sub 新单例 SQLite 重开,PUT 只一次 | 两窗口已有明确逻辑故障 PASS,核对完整字节 | 两窗口既有 PASS;原字节 / 条件及同版本异全文拒绝由既有独立用例核对 |
|
|
686
|
+
| R04 后续代际保护 | 新 bind / release 两项 SQLite 重开,旧 sub 请求不覆盖新关系 | 新 v2 后旧绑定控制消息重放通过,旧清理原件核对沿用 | 既有原 ETag / 原件及新文件出现后零删除通过 | 既有新关系后的迟到清理、原条件冲突及历史完成保护通过 |
|
|
687
|
+
| R05 过期、停止与已提交事实 | 沿用既有过期 / 停止及历史完成保护 | 新 stop 在目标提交前 / 后两项通过;旧过期不延期沿用 | 沿用既有期限不延长、停止后迟到消息保护 | 新 stop 在目标提交前 / 后两项通过;旧过期及新审批要求沿用 |
|
|
688
|
+
|
|
689
|
+
R03 的 release 保留、owner 完成与 sub 独立清理沿用各端既有证据,Go 新单例补齐两个明确离线窗口。R06 与 10.2 的真实 MySQL 持久化由 NS 原父用例和 Storage 原三项及新增独立进程父用例承担,SDK fixture、原生离线 8 项及联邦 16 项均不代替服务持久化证据。
|
|
690
|
+
|
|
691
|
+
本表不要求或声称四 SDK 均跨 PID 强杀恢复;SQLite / IndexedDB 连接重开、新建 Workflow、同 Client 重读任务、服务独立恢复子进程分别按实际边界报告。停止顺序补验不新增取消 Facade、不撤回已提交关系,也不代表全部撤回 / 上传竞争交叉组合已经执行。Go 1.22、Linux v1 race 根因、完整当前 JS 线上交互及原生浏览器联网等既有范围限制保留;当前工作区的外部 / 来源不明改动不纳入本团队归属。
|
|
692
|
+
|
|
693
|
+
### 13.7 2026-10-11 本轮复审修复验收
|
|
694
|
+
|
|
695
|
+
本轮复审发现并修复 6 个 P1、7 个 P2,逐项影响、修代码/修文档裁决、参考端和 Red → Green 落点见 [审查报告第十二节](../audit/Ownership2.1代码审查报告.md#十二2026-10-11-本轮复审与修复)。用户已明确选择:实体 V2 上传授权超过 ±300 秒后停止自动重传、保留原待办,须明确重新上传;原文件已提交的同全文/ETag 观察确认不执行 PUT。此记录只证明本轮工作区源码的本地验证,不改写 13.4 的历史网络事实或运行版本。
|
|
696
|
+
|
|
697
|
+
| SDK | 本轮已取得的验证 |
|
|
698
|
+
| --- | --- |
|
|
699
|
+
| Python | 六个受影响文件组合 686 项通过;最后仅新增授权词法 8 项通过,分批覆盖当前 694 项,非 694 项单次完整运行。共同向量 316 项通过;四个源码及三个已有测试文件 AST 通过,Ruff/Mypy/Pyright 未安装。 |
|
|
700
|
+
| Node TS | workflow 126、文件解析 139、auth 23 通过/7 既有跳过;API 最终完整 179 项通过,按文件覆盖 467 通过/7 跳过。共同向量 195 项通过;修复阶段 src 的 tsc --noEmit 通过,但末次复核在范围外服务事件 PKI 增量 ts/src/auth.ts:1545 报 TS2345、exit 1,最新类型检查不能记通过。 |
|
|
701
|
+
| Browser JS | workflow 首败前 66 项、从首败续跑 156 项,合计覆盖 222 项;文件解析 51、auth 14、auth-namespace 3 及 API 最终完整 189 项通过,分批覆盖 479 项。共同向量 195 项与 src 的 tsc --noEmit 通过。 |
|
|
702
|
+
| Go | 五个受影响测试文件的 144 个父测试按首败停止/断点完成;首批第 43 个父测试中的旧授权 hook 断言修正,原失败子项及后缀续跑通过;后续 101 个父测试/523 个子测试通过,最后授权词法 8 子项通过。go vet . 通过,共同向量包含在上述父测试。 |
|
|
703
|
+
|
|
704
|
+
TS 服务事件 PKI 的 Q11 测试增量及 _fetchFreshPkiJson 不归本轮 13 项修复;来源未确认,原样保留,末次 TS2345 已如实记录。TS auth-namespace 旧匿名下载 fixture 缺 YAML frontmatter 的范围外基线首败保留,后续未跑;不声称该文件全通过。未启动 Kite/Docker/真实服务,未执行本轮真实跨 SDK 网络、跨 OS E2E 或跨 PID 强杀恢复;新 Workflow/Client 与真实持久目录重读的测试按实际边界报告,详见审查报告 §12.5。
|
|
705
|
+
|
|
706
|
+
### 13.8 2026-10-13 复查更正与修复边界
|
|
707
|
+
|
|
708
|
+
本次复查更正、四 SDK 最小修复与实际本地验证见 [审查报告第十三节](../audit/Ownership2.1代码审查报告.md#十三2026-10-13-审查更正与最小修复验收)。第 13.4—13.7 节保留各轮历史证据;本次不据此宣称当前部署、真实跨 SDK 网络、多平台 E2E 或跨 PID 强杀恢复已经完成。当前 legacy 关系只降级依赖 owner 的功能,兼容读取及原样关系材料的正文 CAS 更新继续可用;不新增缺账本或可信历史上界门槛。
|