@agentunion/fastaun 0.5.29 → 0.5.31

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.
Files changed (88) hide show
  1. package/CHANGELOG.md +44 -0
  2. package/_packed_docs/CHANGELOG.md +44 -0
  3. package/_packed_docs/INDEX.md +11 -2
  4. package/_packed_docs/KITE_DOCS_GUIDE.md +10 -8
  5. package/_packed_docs/aun/346/265/213/350/257/225/350/277/220/350/241/214/346/214/207/345/215/227.md +18 -1
  6. package/_packed_docs/sdk/0.5.30-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +61 -0
  7. package/_packed_docs/sdk/0.5.30-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +68 -0
  8. package/_packed_docs/sdk/0.5.31-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +162 -0
  9. package/_packed_docs/sdk/0.5.31-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +167 -0
  10. package/_packed_docs/sdk/AUN_DOCS_GUIDE.md +5 -3
  11. package/_packed_docs/sdk/INDEX.md +9 -1
  12. package/_packed_docs//351/231/214/347/224/237/344/272/272/346/213/222/347/273/235/345/215/217/350/256/256TDD/345/210/206/351/230/266/346/256/265/345/256/236/346/226/275/350/256/241/345/210/222.md +138 -0
  13. package/_packed_docs//351/231/214/347/224/237/344/272/272/346/213/222/347/273/235/345/215/217/350/256/256/350/257/246/347/273/206/350/256/276/350/256/241.md +231 -0
  14. package/dist/agent-md-schema.js +7 -6
  15. package/dist/agent-md-schema.js.map +1 -1
  16. package/dist/agent-md.d.ts +2 -0
  17. package/dist/agent-md.js +33 -10
  18. package/dist/agent-md.js.map +1 -1
  19. package/dist/aid-store.d.ts +1 -0
  20. package/dist/aid-store.js +6 -3
  21. package/dist/aid-store.js.map +1 -1
  22. package/dist/aid.js +1 -1
  23. package/dist/aid.js.map +1 -1
  24. package/dist/auth.js +1 -1
  25. package/dist/auth.js.map +1 -1
  26. package/dist/client/control-messages.d.ts +0 -2
  27. package/dist/client/control-messages.js +79 -108
  28. package/dist/client/control-messages.js.map +1 -1
  29. package/dist/client/lifecycle.js +11 -3
  30. package/dist/client/lifecycle.js.map +1 -1
  31. package/dist/client/rpc-pipeline.d.ts +1 -1
  32. package/dist/client/rpc-pipeline.js +17 -5
  33. package/dist/client/rpc-pipeline.js.map +1 -1
  34. package/dist/client/v2-e2ee.js +7 -7
  35. package/dist/client/v2-e2ee.js.map +1 -1
  36. package/dist/client.d.ts +12 -0
  37. package/dist/client.js +346 -126
  38. package/dist/client.js.map +1 -1
  39. package/dist/config.js +23 -18
  40. package/dist/config.js.map +1 -1
  41. package/dist/discovery.d.ts +1 -0
  42. package/dist/discovery.js +3 -1
  43. package/dist/discovery.js.map +1 -1
  44. package/dist/facades.d.ts +20 -0
  45. package/dist/facades.js +9 -0
  46. package/dist/facades.js.map +1 -1
  47. package/dist/index.d.ts +1 -1
  48. package/dist/index.js.map +1 -1
  49. package/dist/keystore/aid-db.js +14 -2
  50. package/dist/keystore/aid-db.js.map +1 -1
  51. package/dist/keystore/index.d.ts +3 -0
  52. package/dist/keystore/index.js +61 -1
  53. package/dist/keystore/index.js.map +1 -1
  54. package/dist/keystore/local-identity-store.js +112 -76
  55. package/dist/keystore/local-identity-store.js.map +1 -1
  56. package/dist/keystore/local-token-store.js +15 -26
  57. package/dist/keystore/local-token-store.js.map +1 -1
  58. package/dist/ownership-v21.d.ts +2 -2
  59. package/dist/ownership-v21.js +18 -21
  60. package/dist/ownership-v21.js.map +1 -1
  61. package/dist/ownership-workflow.js +7 -4
  62. package/dist/ownership-workflow.js.map +1 -1
  63. package/dist/register-flow.js +4 -3
  64. package/dist/register-flow.js.map +1 -1
  65. package/dist/risk-control.js +2 -2
  66. package/dist/risk-control.js.map +1 -1
  67. package/dist/secret-store/file-store.js +68 -56
  68. package/dist/secret-store/file-store.js.map +1 -1
  69. package/dist/semantic-protocol.d.ts +2 -12
  70. package/dist/semantic-protocol.js +31 -48
  71. package/dist/semantic-protocol.js.map +1 -1
  72. package/dist/storage/lowlevel.d.ts +4 -0
  73. package/dist/storage/lowlevel.js +62 -1
  74. package/dist/storage/lowlevel.js.map +1 -1
  75. package/dist/storage/vfs.d.ts +4 -0
  76. package/dist/storage/vfs.js +55 -12
  77. package/dist/storage/vfs.js.map +1 -1
  78. package/dist/tools/cross-sdk-agent.d.ts +1 -1
  79. package/dist/tools/cross-sdk-agent.js +14 -3
  80. package/dist/tools/cross-sdk-agent.js.map +1 -1
  81. package/dist/transport.d.ts +1 -1
  82. package/dist/transport.js +8 -8
  83. package/dist/transport.js.map +1 -1
  84. package/dist/validators.js +9 -8
  85. package/dist/validators.js.map +1 -1
  86. package/dist/version.d.ts +1 -1
  87. package/dist/version.js +1 -1
  88. package/package.json +1 -1
@@ -0,0 +1,167 @@
1
+ # AUN SDK 0.5.31 开发与移植指南
2
+
3
+ 本文面向 Python、Go、TypeScript、Browser JavaScript SDK 维护者及其它语言移植者,按截至 2026-11-04 的未发布工作区说明共同契约和实现差异。应用接线见[应用集成指南](0.5.31-SDK应用集成指南.md),实现清单及已有验证见 [parity 0.5.31](../../python/CHANGES_FOR_PARITY.md#v0531--群组织共识控制流-v2-与严格版本写入未发布)。
4
+
5
+ 本版继承 0.5.29 的公共共识查询、实例 ETag 缓存和上传锁规则,以及 0.5.30 的按需控制恢复、转发字段净化与内部 RPC 边界;本页明确替代其中已变化的实体、消息分类及 Storage 版本行为。
6
+
7
+ ## 1. 跨端契约与配套服务
8
+
9
+ | 范围 | 0.5.31 必须保持的行为 |
10
+ | --- | --- |
11
+ | 群/组织关系 | 现代实体使用通用 Ownership 材料和共识;管理仍走各自生命周期接口 |
12
+ | owner 首次访问 | 本地材料预筛、确认 active owner、按连接和实体合并检查,必要时补绑 |
13
+ | 公共共识查询 | 委托 NS;SDK 公共查询不另读 owner.md;单文件验签不等于共识 |
14
+ | 控制流 | 协商 `message_classes_v2`,群不支持 `sdk_control`;ACK 不依赖 scan_proof |
15
+ | Storage | 对象写入自动携版本,force 不绕过版本条件;最终 CAS 由服务端执行 |
16
+ | 并发与恢复 | 实际写入前复核身份和连接代际;不把超时当成确定未提交 |
17
+
18
+ 配套 NS/Auth/Gateway/Group/Org 必须支持新旧实体材料及相应生命周期调用,Gateway/Message/Group 必须支持 V2 分类能力,Storage 必须执行携版本请求的严格 CAS。SDK 升级与服务端部署状态分别核对,不能由 SDK 版本推定服务器已具备全部能力。
19
+
20
+ 服务端控制消息存储、投影移除、GC 和数据库索引属于独立实现与验收范围,不写入 SDK 的公共 API 契约。
21
+
22
+ ## 2. 群/组织的文档与公共共识
23
+
24
+ ### 2.1 现代材料与历史兼容
25
+
26
+ 现代 `type=group`/`type=org` 的 agent.md 携带 `owner` 和通用 `ownership.statement`,由实体身份签名;owner 以自身身份签署配对 owner.md,保存于其 Storage `sub_aids/<实体AID>/owner.md`。声明中的 owner、sub、关系版本及声明标识必须配对。
27
+
28
+ 现代 agent.md 主签名不携带旧实体格式的 `signer_aid`;群实体证书验证仍使用对应身份用途。历史实体证书指纹、owner 签署等旧名片走原兼容分支,不能因此跳过现代声明 schema、签名或证书校验。human 名片仍禁止携带 Ownership 材料。
29
+
30
+ 普通 Ownership 的绑定/转让工作流继续拒绝以群/组织为被管理目标;创建、绑定实体 AID、转让、接收及解散由 Group/Org 生命周期编排。复用材料和共识不等于把实体管理开放给普通 agent API。
31
+
32
+ ### 2.2 查询入口与职责
33
+
34
+ | SDK | 公共查询 | 显式强查 |
35
+ | --- | --- | --- |
36
+ | Python | `check_ownership_consensus(sub_aid=None, force=False)` | `force=True` |
37
+ | TypeScript/JavaScript | `checkOwnershipConsensus(subAid?, force=false)` | 第二参数 `true` |
38
+ | Go | `CheckOwnershipConsensus(ctx, subAID...)` | `CheckOwnershipConsensusWithOptions` 与 `OwnershipConsensusOptions{Force: true}` |
39
+
40
+ 公共查询向 NS 请求 agent.md 及权威关系元数据,携带 `X-AUN-Ownership-Check: 1` 和禁止使用陈旧缓存的请求条件;SDK 不为这一公共查询另取 Storage owner.md。管理、补绑及恢复流程仍会直接读写关系文件。
41
+
42
+ 现代双文件可确认时,服务端使用文件共识;历史材料无法确认时,兼容路径再向对应群/组织生命周期服务确认。实体检查必须验证 agent.md 的 type 是所需 group 或 org,其它类型不得借用该回退。公共查询中无现代声明的旧实体返回 `unbound`,旧 owner 字段不能单独授予现代共识。
43
+
44
+ 缓存继续按 Client 实例和目标 AID 保存,不设 TTL;仅复用已达 consensus、未标记 missing 且本地观察 ETag 未变的结果。新实例首查、非一致状态和 force 均回源。观察缓存不能保证发现尚未观察到的远端变更,下载验签成功也不能替代关系检查。
45
+
46
+ ## 3. 首次访问补绑与生命周期写入
47
+
48
+ ### 3.1 连接内去重
49
+
50
+ owner 访问检查按以下顺序执行:
51
+
52
+ 1. 从请求识别并规范化实体 AID;创建、转让、解散等专门入口使用自身编排。
53
+ 2. 本地有实体身份,或存在可恢复的群绑定密钥材料,才继续远端检查。
54
+ 3. 向对应生命周期服务确认实体为 active,当前 caller 是 owner。
55
+ 4. 强查共识;与当前 owner 一致则结束,否则在材料允许时补齐现代关系。
56
+ 5. 补绑发布后再次确认共识;新连接重新开始本轮检查。
57
+
58
+ 任务按身份代际、连接代际和实体目标合并,规范化别名应复用同一在途结果。成功、失败和不适用结果在同一连接内都不反复执行;不在连接后遍历全部群补传。
59
+
60
+ 访问预检查失败仍继续原业务 RPC,由服务端判定权限;这一路径不保证补绑成功。创建、绑定及接收转让后的显式发布、pending 上传恢复则必须确认当前 owner 共识,不能仅凭上传成功作为完成依据。
61
+
62
+ ### 3.2 配对写入与并发保护
63
+
64
+ 补绑核对当前生命周期 owner、有效实体证书和本地私钥,再复用或生成匹配声明。已有一致双边材料直接复用;转让材料还须匹配新 owner、递增关系版本及有效期限。
65
+
66
+ owner.md 的更新保留读取到的原件与版本,写前确认原件未变化,通过版本条件提交并重读确认;agent.md 发布保留 NS ETag 条件与既有 pending 原签名字节。不能在重试时擅自生成新声明或覆盖已变化的关系。
67
+
68
+ 写入 guard 至少绑定 caller、身份代际、连接代际和相关 store/签名身份。RPC 排队、风险预算等待及 HTTP 提交可能发生异步切换,必须在实际发送前再检查;取消、切换身份或重连后,旧任务不得继续提交。
69
+
70
+ 相同目标、相同请求上下文的并发组织创建合并执行;已有在途创建的请求摘要不同则报告冲突,不能向第二个请求返回第一个请求的结果。
71
+
72
+ ### 3.3 转让、解散与失败恢复
73
+
74
+ 转让前 owner.md 发布 `transfer_owner`,解散前发布 `release`,再调用原生命周期接口;已存在相同有效授权可复用。新 owner 完成接收后发布自身声明及新的实体材料。
75
+
76
+ | 结果 | 恢复规则 |
77
+ | --- | --- |
78
+ | 明确业务拒绝 | 仅在仍为原 active owner、远端声明仍是本次原件且版本条件允许时,尝试恢复此前声明 |
79
+ | 超时、断连、可重试错误、结果不明 | 保留授权及恢复材料,不自动恢复旧声明;先查询当前生命周期与关系状态 |
80
+ | 文件或 owner 已变化 | 报告冲突,不能覆盖新材料 |
81
+
82
+ 本流程不增加独立 Ownership 任务/WAL,也不改变业务 RPC 原有的幂等与结果未知边界。
83
+
84
+ ## 4. 分类控制流 V2 与 ACK
85
+
86
+ ### 4.1 能力与调度
87
+
88
+ | 通道 | `message_classes_v2` 分类 | SDK 处理 |
89
+ | --- | --- | --- |
90
+ | P2P | `normal`、`control`、`sdk_control` | 普通与应用控制流按原订阅交付;sdk_control 由内部协议消费 |
91
+ | 群 | `normal`、`control` | 本地拒绝群 sdk_control 请求,忽略该类群 Push |
92
+
93
+ 协商结果决定分类与群 TTL 发送门禁,不能把旧 `message_classes_v1` 当作 V2。P2P 的 `aun.agent_md.changed` 等内部控制协议继续保留,不能因群不支持 sdk_control 而删除 P2P 内部消费。
94
+
95
+ 连接就绪后恢复一次,运行期 Push 仅唤起相关 peer/group、消息类别和持久/volatile 流;群读取 `streams[class][persistent|volatile].needs_pull` 选择有 gap 的流。整个 streams map 缺失时保留旧响应兼容,map 存在但缺少流则跳过。应用主动 Pull 不受后台调度限制,待确认 ACK 另行恢复。
96
+
97
+ ### 4.2 证明移除与持久状态
98
+
99
+ Pull 不再要求 `scan_proof`,ACK 不发送该证明;恢复旧 pending ACK 时主动剥离遗留字段。删除证明过期后重新 Pull 续证的循环,同时保留消息类别、目标、收件范围、快照 head、覆盖水位及 ACK 上界验证。
100
+
101
+ 处理完成后先持久保存待确认 ACK 及本页水位,再发送 ACK;失败后使用保存的待确认请求恢复。volatile 流仍使用自身游标,不套用持久流 SEQ。
102
+
103
+ | SDK | 本地游标提交时机 |
104
+ | --- | --- |
105
+ | Python/TypeScript/JavaScript | 保存已处理游标与 pending ACK 后确认;重试不能越过持久处理水位 |
106
+ | Go | 保存带本页水位的 pending ACK;ACK 成功后推进 `Seq` 并清除 pending |
107
+
108
+ 移植时应保留各端已实现的恢复顺序,不能仅删除证明字段而丢失待确认记录或范围检查。该调整减少的是为证明续期产生的重复拉取,不构成消息“恰好一次”业务执行保证。
109
+
110
+ ## 5. Storage 携版本写入
111
+
112
+ ### 5.1 预检与服务端 CAS
113
+
114
+ 对象 put、创建/完成上传、delete、meta、append、move 及文件 rename 使用版本条件。对象预检通过 `head_object(consistency=authoritative)`;文件 rename 检查源文件 `fs_lstat`,目录等非文件 rename 不套用该文件版本预检。
115
+
116
+ | 输入 | SDK 提交行为 |
117
+ | --- | --- |
118
+ | 未指定 expected_version | 读取当前版本并携带提交;明确不存在使用 `0` |
119
+ | 显式指定版本 | 与当前版本比较,不一致时先失败;符合条件则保留原版本提交 |
120
+ | force=true | 不清除显式版本,不绕过预检或服务端 CAS;未指定版本时跳过 VFS 历史版本选择,重新读取 |
121
+ | 仅 overwrite=true | 保留 VFS 原有版本选择;不能等同于 force 或无条件覆盖 |
122
+
123
+ 显式非零版本遇到不存在对象时,SDK 仍可在预检报告冲突,不会任意改写为 0。预读到提交之间仍有竞态,最终并发检查由服务端原子 CAS 完成;未携版本的旧请求保留服务端兼容路径,但新版对象写入不依靠该路径。
124
+
125
+ VFS 记录成功写响应中的版本,供后续写入选择;Python CLI 的 inline、去重与会话上传也携带版本。对版本冲突应重新读取并由应用决定是否重试,不能自动删除版本条件。低层权威预读补版本只适用于请求已到达 low-level 的路径;VFS 若发现目标已存在但没有已知版本,仍可能在调用 low-level 前拒绝,单独 `overwrite` 不绕过此规则,`force` 才跳过历史版本选择并重新读取。
126
+
127
+ ### 5.2 跨端差异
128
+
129
+ | 维度 | Python | Go | TypeScript/JavaScript |
130
+ | --- | --- | --- | --- |
131
+ | 文件 rename 预读 | 显式 `no_cache=True` | 显式绕过读缓存 | 调用 fs_lstat;当前未显式设置同类绕过条件 |
132
+ | 读权限不足但有显式版本 | 保留显式版本交服务端检查 | 预读失败返回错误 | 预读失败返回错误 |
133
+ | 挂载权威预读特定失败 | 确认为 mount 且已有显式版本时交服务端检查 | 无同类例外 | 无同类例外 |
134
+ | 写版本保存 | VFS 写响应版本 | VFS 写响应版本 | VFS 写响应版本 |
135
+
136
+ Python 的挂载例外仅限特定 `authoritative storage unavailable` 错误,并检查路径或祖先的 mount;未提供版本、非挂载及其它读取错误继续失败。不能将该例外扩大为任意预检失败均尝试写入,亦不能描述为四端共有能力。
137
+
138
+ ## 6. 连接及继承行为
139
+
140
+ Python 显式 connect 接管 `RETRY_BACKOFF`/`CONNECTION_FAILED` 且无 token 时,恢复完整认证;重设 session 前保存 identity/session token,保留旧重连取消、失败计数清理及连接所有权语义。此修复不代表四端新增相同状态转换。
141
+
142
+ 公网测试 helper 保留名片上传 Result 的连接/超时 cause,使既有瞬时重试生效;业务错误保留因果链继续失败。这属于测试辅助修复,不扩展 SDK 业务重试范围。
143
+
144
+ 以下 0.5.30 规则继续生效:observer.forward 仅净化外发副本中的本地证据/诊断字段,不改原接收对象;公开 RPC 管线拒绝 `gateway.risk_status`,风控 Push 验签及 ACK 保留;local Ownership 的 owner/新 owner 可为 human 或 agent,sub 仍限 agent。完整规则见[历史开发指南](0.5.30-SDK开发与移植指南.md)。
145
+
146
+ ## 7. 源码与回归映射
147
+
148
+ | 范围 | 实现入口 | 回归入口 |
149
+ | --- | --- | --- |
150
+ | Python 实体流程 | [client.py](../../python/src/aun_core/client.py)、[ownership_v21.py](../../python/src/aun_core/ownership_v21.py)、[org_facades.py](../../python/src/aun_core/org_facades.py) | [test_client.py](../../python/tests/unit/test_client.py)、[test_ownership_v21.py](../../python/tests/unit/test_ownership_v21.py) |
151
+ | TypeScript 实体流程 | [client.ts](../../ts/src/client.ts)、[ownership-v21.ts](../../ts/src/ownership-v21.ts) | [client.test.ts](../../ts/tests/unit/client.test.ts)、[ownership-v21.test.ts](../../ts/tests/unit/ownership-v21.test.ts) |
152
+ | Browser 实体流程 | [client.ts](../../js/src/client.ts)、[ownership-v21.ts](../../js/src/ownership-v21.ts) | [client.test.ts](../../js/tests/unit/client.test.ts)、[ownership-v21.test.ts](../../js/tests/unit/ownership-v21.test.ts) |
153
+ | Go 实体流程 | [ownership_v21.go](../../go/ownership_v21.go)、[org_facades.go](../../go/org_facades.go) | [ownership_v21_test.go](../../go/ownership_v21_test.go)、[client_test.go](../../go/client_test.go) |
154
+ | 控制流 | [Python](../../python/src/aun_core/_client/control_messages.py)、[TS](../../ts/src/client/control-messages.ts)、[JS](../../js/src/client/control-messages.ts)、[Go](../../go/control_messages.go) | 各端 client/control 回归,验证旧 pending、群类型及 ACK 恢复 |
155
+ | Storage | [Python](../../python/src/aun_core/storage/lowlevel.py)、[TS](../../ts/src/storage/lowlevel.ts)、[JS](../../js/src/storage/lowlevel.ts)、[Go](../../go/storage_lowlevel.go) | [Python P6](../../python/tests/unit/test_storage_vfs_p6.py)、[Go low-level](../../go/storage_lowlevel_test.go)、TS/JS storage-vfs 测试 |
156
+
157
+ SDK 包配置、运行时、Go Version/V2 envelope 及相关门禁和脚本统一为 `0.5.31`;历史日志与固定兼容样例保留原版本。版本门禁见 [test_aun_sdk_version_alignment.py](../../../tests/unit/test_aun_sdk_version_alignment.py)。
158
+
159
+ ## 8. 移植核查与验证范围
160
+
161
+ 移植交付须分别覆盖:现代与旧实体签验、类型拒绝、NS 共识与缓存、每连接首访去重、材料缺失及补绑失败、身份切换后的写入阻断、明确拒绝与结果未知、旧 pending ACK 恢复,以及版本冲突、force/overwrite、上传各路径和预读失败。对实际变更先运行对应回归,再做类型/静态检查,联网测试按指南断点续跑。
162
+
163
+ 已有分阶段证据包括 Python 连接相关定向回归 104 项、helper 35 项;版本对齐、Python 导入、TS/JS 类型检查、JS 加密回环 13 项及 Go E2EE 定向/vet。它们不等于四端全量功能测试。
164
+
165
+ Python `evolagent.cn` 公网验收采用 TLS 校验和串行断点续跑,覆盖服务端 12 项、smoke 9 项、E2E 24 项;签名审计仅正常生命周期 48 项。期间有间歇 WebSocket 握手超时,原因未确认;结果来自多次续跑,不能表述为单轮全绿、四 SDK 全量公网通过或最新服务端 GC/索引已部署。
166
+
167
+ 详细执行记录及限制以 [parity 的验证章节](../../python/CHANGES_FOR_PARITY.md#0531-已有验证与覆盖范围)为准。本次整理仅验证文档与实现对应关系、链接及格式,未新增代码或公网测试结果。联网操作遵循[公网测试指南](../aun公网测试运行指南.md),通用运行规则见[测试运行指南](../aun测试运行指南.md)。
@@ -61,7 +61,8 @@ Group 的成员 block/status、暂停群权限和两阶段群主转让,以及
61
61
  | - | [0.5.22 SDK 开发与移植指南](0.5.22-SDK开发与移植指南.md) | 同步、Stage/CAS、撤销续期、缓存、服务依赖及 Rust 清单 |
62
62
  | - | [0.5.24 SDK 应用集成指南](0.5.24-SDK应用集成指南.md) | 当前消息接线、无任务 Ownership、两个 local 编排、缓存和凭证组织 |
63
63
  | - | [0.5.24 SDK 开发与移植指南](0.5.24-SDK开发与移植指南.md) | 消息提交、NS 事实和远端 CAS、local 身份隔离、缓存新鲜度与语言差异 |
64
- | - | [0.5.29 应用指南](0.5.29-SDK应用集成指南.md)、[开发与移植指南](0.5.29-SDK开发与移植指南.md)、[变更与跨端对齐](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布) | 当前应用接入、共识输入输出、无 TTL 的 ETag 缓存、resolve、普通上传锁与恢复、NS 配套及四端移植 |
64
+ | - | [0.5.30 应用指南](0.5.30-SDK应用集成指南.md)、[开发与移植指南](0.5.30-SDK开发与移植指南.md)、[变更与跨端对齐](../../python/CHANGES_FOR_PARITY.md#v0530--控制流按需恢复与-sdk-行为对齐未发布) | 按需控制流恢复、observer.forward 本地字段剥离、本地 human owner、Storage 版本预检及四端差异 |
65
+ | - | [0.5.29 应用指南](0.5.29-SDK应用集成指南.md)、[开发与移植指南](0.5.29-SDK开发与移植指南.md)、[变更与跨端对齐](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布) | 0.5.29 基线:共识输入输出、无 TTL 的 ETag 缓存、resolve、普通上传锁与恢复、NS 配套及四端移植 |
65
66
  | - | [0.5.28 应用指南](0.5.28-SDK应用集成指南.md)、[开发与移植指南](0.5.28-SDK开发与移植指南.md);[0.5.27 应用指南](0.5.27-SDK应用集成指南.md)、[开发与移植指南](0.5.27-SDK开发与移植指南.md) | 0.5.28 agent.md 上传/下载校验、共识 fresh、分类控制消息、Owner 通知与风控;四端实现和验证范围见 [parity](../../python/CHANGES_FOR_PARITY.md#v0528--校验控制消息与风控未发布) |
66
67
  | - | [agent.md 与 group.index 的 ETag 观察与同步机制](agent.md与group.index的ETag观察与同步机制.md) | 服务端 ETag 来源、四 SDK 被动观察、agent.md 下载触发、group.index 显式 pull 与 CAS |
67
68
  | - | [CHANGELOG-0.5.6](CHANGELOG-0.5.6.md) | **0.5.6 版本更新日志**:首次签名者回源、下载提交前验签、消息窗口、显式 change-seed 与语言能力边界 |
@@ -85,7 +86,7 @@ Group 的成员 block/status、暂停群权限和两阶段群主转让,以及
85
86
  | - | [组织服务 RPC 手册](09-组织服务RPC手册.md) | Org Service 生命周期/成员 RPC、内部接口和未实现方法 |
86
87
  | 05 | [E2EE加密通信](05-E2EE加密通信.md) | E2EE V2、ProtectedHeaders、need_render、agent.md 版本提示、旧 SPK 保留 |
87
88
  | - | [ProtectedHeaders用法专题](ProtectedHeaders用法专题.md) | `protected_headers` 四端 API、实例级/单次调用、E2EE V2 HMAC 完整性和接收信任边界 |
88
- | 06 | [API手册](06-API手册.md) | AIDStore / resolve opts 与输入输出 / frontmatter 类型 / Agent.md 校验签名 / AID / AUNClient 生命周期并发 / 四 SDK access token getter / 群组高层身份编排 / History 与已读门面 / 已读变更及本地补偿完成 / 消息来源与 Pull 同步生命周期 / 事件 / RPC;当前 ownership 变更见 [0.5.29 parity](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布) |
89
+ | 06 | [API手册](06-API手册.md) | AIDStore / resolve opts 与输入输出 / frontmatter 类型 / Agent.md 校验签名 / AID / AUNClient 生命周期并发 / 四 SDK access token getter / 群组高层身份编排 / History 与已读门面 / 已读变更及本地补偿完成 / 消息来源与 Pull 同步生命周期 / 事件 / RPC;当前 Ownership 与内部 RPC 增量见 [0.5.30 parity](../../python/CHANGES_FOR_PARITY.md#v0530--控制流按需恢复与-sdk-行为对齐未发布) |
89
90
  | 07 | [错误处理](07-错误处理.md) | Result、Python `ErrorInfo.cause`、异常、错误码、重试 |
90
91
  | 08 | [最佳实践](08-最佳实践.md) | 幂等、消息同步/History、AUNClient 级 Pull Gate(同 namespace 单飞、客户端最多 4 个并行)、测试数据 |
91
92
  | - | [Storage RPC 手册](09-storage-rpc-manual.md) | Storage RPC、实际字节 MIME、三阶段 Content-Type、OSS 403、HTTP 下载与凭据边界、默认读缓存持久层、条件读取与 noCache |
@@ -104,7 +105,8 @@ Group 的成员 block/status、暂停群权限和两阶段群主转让,以及
104
105
  | 实现、移植或审查 0.5.22 SDK,查看 Stage/CAS、配套服务修复、读缓存及 Rust 验收清单 | [0.5.22 SDK 开发与移植指南](0.5.22-SDK开发与移植指南.md) |
105
106
  | 接入或升级 0.5.24,查看当前消息、无任务 Ownership、两个 local 场景、缓存及凭证组织 | [0.5.24 SDK 应用集成指南](0.5.24-SDK应用集成指南.md) |
106
107
  | 实现、移植或审查 0.5.24,核对提交/ACK、NS 事实、远端 CAS、local 身份隔离和缓存新鲜度 | [0.5.24 SDK 开发与移植指南](0.5.24-SDK开发与移植指南.md) |
107
- | 接入或移植 0.5.29,核查共识、resolve、上传锁与恢复 | [应用指南](0.5.29-SDK应用集成指南.md):接入 L5-54、共识 L55-80、resolve L81-104、上传管理 L105-145、缓存/业务 L146-167、升级 L168-180;[开发与移植指南](0.5.29-SDK开发与移植指南.md):契约 L5-63、缓存/resolve L64-94、上传恢复 L95-123、四端/继承 L124-151、核查 L152-164;[parity 当前章节](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布) L15-87 |
108
+ | 接入或移植 0.5.30,核查后台恢复、本地 Ownership 与 Storage 版本处理 | [应用指南](0.5.30-SDK应用集成指南.md):行为 L5-14、消息恢复 L16-29、Ownership L31-43、Storage L45-47、转发与风控 L49-53、升级 L55-61;[开发与移植指南](0.5.30-SDK开发与移植指南.md):契约 L5-14、控制恢复 L16-29、转发 L31-43、Ownership/YAML L45-49、Storage L51-55、差异 L57-68;[parity](../../python/CHANGES_FOR_PARITY.md#v0530--控制流按需恢复与-sdk-行为对齐未发布) L15-58 |
109
+ | 接入或移植 0.5.29 基线,核查共识、resolve、上传锁与恢复 | [应用指南](0.5.29-SDK应用集成指南.md):接入 L5-54、共识 L55-80、resolve L81-104、上传管理 L105-145、缓存/业务 L146-167、升级 L168-180;[开发与移植指南](0.5.29-SDK开发与移植指南.md):契约 L5-63、缓存/resolve L64-94、上传恢复 L95-123、四端/继承 L124-151、核查 L152-164;[parity](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布) L60-132 |
108
110
  | 回看 0.5.28 的 schema、共识、控制消息、Owner 通知与风控,以及 0.5.27 的历史增量 | [0.5.28 应用指南](0.5.28-SDK应用集成指南.md):接入与消息 §1—§3 L5-95、凭证/组织 §4—§5 L96-137、Storage/Ownership §6—§7 L138-186、通知 §8 L187-201、风控/升级 §9—§10 L202-228;[开发与移植指南](0.5.28-SDK开发与移植指南.md):校验 §1 L7-36、共识 §2 L37-62、wire §3 L63-108、outbox §4 L109-121、风控 §5 L122-134、移植 §6 L135-146。 [历史 parity](../../python/CHANGES_FOR_PARITY.md#v0528--校验控制消息与风控未发布) L88-172;公共共识流程以 0.5.29 为准 |
109
111
  | 0.5.24 应用按主题读:身份、消息、resolve、Ownership、文件缓存、凭证组织和升级 | `0.5.24-SDK应用集成指南.md` §2 L21-75、§3 L76-132、§4 L133-168、§5 L169-298、§6 L299-321、§7 L322-366、§9 L386-401;local bind L227-245、local transfer L246-267 |
110
112
  | 0.5.24 移植按主题读:消息提交、名片、观察、Ownership、缓存、PKI、凭证组织及语言差异 | `0.5.24-SDK开发与移植指南.md` §3 L32-84、§4 L85-92、§5 L93-122、§6 L123-217、§7 L218-245、§8 L246-261、§9 L262-297、§10 L298-325;Rust §11 L326-339、验收 §12 L340-354 |
@@ -14,7 +14,8 @@
14
14
  | [0.5.22 SDK 开发与移植指南](0.5.22-SDK开发与移植指南.md) | 后台退避 · 群状态 · 两种绑定与 Stage/CAS · 消息内部消费 · 撤销同步 · 组织恢复及配套服务修复 · 默认读缓存 · Rust 清单 |
15
15
  | [0.5.24 SDK 应用集成指南](0.5.24-SDK应用集成指南.md) | 当前身份与消息接入 · 无任务 Ownership · local 双/三身份编排 · resolve 与文件缓存 · 凭证组织 · 升级 |
16
16
  | [0.5.24 SDK 开发与移植指南](0.5.24-SDK开发与移植指南.md) | peer/batch 提交 · NS 事实与远端 CAS · local 短连接 · 观察与 PKI 缓存 · 持久化边界 · 语言差异和验收 |
17
- | [0.5.29 应用指南](0.5.29-SDK应用集成指南.md)、[开发与移植指南](0.5.29-SDK开发与移植指南.md)、[变更与跨端对齐](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布);[Python](../../python/CHANGELOG.md)、[Go](../../go/CHANGELOG.md)、[TS](../../ts/CHANGELOG.md)、[JS](../../js/CHANGELOG.md) CHANGELOG | 当前应用接入、共识默认 force=false、NS 单次查询、无 TTL 的 ETag 缓存、resolve、普通上传锁/恢复与四端移植 |
17
+ | [0.5.30 SDK 应用集成指南](0.5.30-SDK应用集成指南.md)、[开发与移植指南](0.5.30-SDK开发与移植指南.md)、[变更与跨端对齐](../../python/CHANGES_FOR_PARITY.md#v0530--控制流按需恢复与-sdk-行为对齐未发布) | 按需控制流恢复 · observer.forward 本地字段剥离 · human owner 本地 Ownership · Storage 版本预检 · 内部 RPC 边界 |
18
+ | [0.5.29 应用指南](0.5.29-SDK应用集成指南.md)、[开发与移植指南](0.5.29-SDK开发与移植指南.md)、[变更与跨端对齐](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布);[Python](../../python/CHANGELOG.md)、[Go](../../go/CHANGELOG.md)、[TS](../../ts/CHANGELOG.md)、[JS](../../js/CHANGELOG.md) CHANGELOG | 0.5.29 基线:共识默认 force=false、NS 单次查询、无 TTL 的 ETag 缓存、resolve、普通上传锁/恢复与四端移植 |
18
19
  | [0.5.28 应用指南](0.5.28-SDK应用集成指南.md)、[开发与移植指南](0.5.28-SDK开发与移植指南.md);[0.5.27 应用指南](0.5.27-SDK应用集成指南.md)、[开发与移植指南](0.5.27-SDK开发与移植指南.md) | 历史 agent.md 校验、共识 fresh、分类控制消息、Owner 通知与风控;四端差异及验证边界见 [parity 0.5.28](../../python/CHANGES_FOR_PARITY.md#v0528--校验控制消息与风控未发布),公共共识规则以 0.5.29 为准 |
19
20
  | [CHANGELOG-0.5.6](CHANGELOG-0.5.6.md) | **0.5.6 版本更新日志**:首次签名者回源 · 下载提交前验签 · 消息窗口 · 显式 change-seed · 语言能力边界 |
20
21
  | [01-快速开始](01-快速开始.md) | 安装 · 三主体模型 · 最小示例 · 多语言构造 |
@@ -77,6 +78,7 @@
77
78
 
78
79
  - 当前身份与消息接入、无任务 Ownership、两个 local 场景、名片及文件缓存、凭证组织与升级 → [应用集成指南](0.5.24-SDK应用集成指南.md)
79
80
  - 三主体分层、提交/ACK、NS 事实和远端 CAS、local 身份隔离、缓存新鲜度、语言差异与验收 → [开发与移植指南](0.5.24-SDK开发与移植指南.md)
81
+ - 0.5.30 应用行为、主动 Pull 边界、本地 Ownership、Storage 版本及内部 RPC → [应用指南](0.5.30-SDK应用集成指南.md);控制恢复、转发净化、YAML 与版本预检的四端契约 → [开发与移植指南](0.5.30-SDK开发与移植指南.md);验证范围见 [parity](../../python/CHANGES_FOR_PARITY.md#v0530--控制流按需恢复与-sdk-行为对齐未发布)。
80
82
  - 0.5.29 应用接入、共识输入输出、resolve、上传与业务服务 → [应用指南](0.5.29-SDK应用集成指南.md);缓存并发、上传恢复、NS 配套与四端落点 → [开发与移植指南](0.5.29-SDK开发与移植指南.md);已有增量及验证见 [parity 当前章节](../../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布)。
81
83
  - 0.5.28 agent.md 校验、共识 fresh、分类控制消息、Owner 通知、风控和四端验证边界 → [应用指南](0.5.28-SDK应用集成指南.md)、[开发与移植指南](0.5.28-SDK开发与移植指南.md);实现差异见 [历史 parity](../../python/CHANGES_FOR_PARITY.md#v0528--校验控制消息与风控未发布)。0.5.27 历史版本见对应旧指南与 parity。
82
84
 
@@ -178,6 +180,12 @@ TypeScript 身份与消息接线、Ownership 审批恢复、resolve、默认缓
178
180
 
179
181
  定义消息 peer/batch/Gate、Ownership NS 事实和远端 CAS、Stage、local 专属 slot 与身份代际、展示及文件缓存、PKI 和 Credential 查询新鲜度、组织 checkpoint。列出四端兼容差异、Rust 核查与分层验收,不将已有专项证据等同完整发布验证。
180
182
 
183
+ ### 0.5.30 更新日志与跨端对齐
184
+
185
+ 0.5.30 [应用指南](0.5.30-SDK应用集成指南.md):行为摘要 §1 L5-14、消息恢复 §2 L16-29、本地 Ownership §3 L31-43、Storage §4 L45-47、转发与风控 §5 L49-53、升级 §6 L55-61;[开发与移植指南](0.5.30-SDK开发与移植指南.md):跨端契约 §1 L5-14、控制恢复 §2 L16-29、observer.forward §3 L31-43、Ownership/YAML §4 L45-49、Storage §5 L51-55、内部 RPC 与差异 §6 L57-68。
186
+
187
+ 当前 [0.5.30 变更与对齐清单](../../python/CHANGES_FOR_PARITY.md#v0530--控制流按需恢复与-sdk-行为对齐未发布) L15-58:控制流恢复 L19-24、observer.forward L26-29、本地 Ownership 与 agent.md L31-35、Storage 预检 L37-41、内部 RPC/版本及验证边界 L43-58。
188
+
181
189
  ### 0.5.29 更新日志与跨端对齐
182
190
 
183
191
  0.5.29 [应用指南](0.5.29-SDK应用集成指南.md):接入与消息 §1—§2 L5-54、共识 §3 L55-80、resolve §4 L81-104、上传管理 §5 L105-145、缓存/业务 §6—§7 L146-167、升级 §8 L168-180;[开发与移植指南](0.5.29-SDK开发与移植指南.md):契约 §1—§2 L5-63、缓存/resolve §3—§4 L64-94、上传恢复 §5 L95-123、四端/继承 §6—§7 L124-151、核查 §8 L152-164。
@@ -0,0 +1,138 @@
1
+ # AUN 陌生人拒绝协议 TDD 分阶段实施计划
2
+
3
+ > 对应设计:[陌生人拒绝协议详细设计](陌生人拒绝协议详细设计.md)
4
+ >
5
+ > 状态:实施中;按提交次数计额度,Gateway 不实现消息 ID 去重,发布验收尚未完成。
6
+ >
7
+ > 版本:v1.0
8
+ >
9
+ > 更新时间:2026-11-01
10
+
11
+ ## 1. 交付范围
12
+
13
+ 交付 Gateway P2P 限额判定、互通/拒绝状态持久化与内存缓存、Console 手动历史回填和观察/启用控制、AID 对状态查询页面、拒绝状态 SDK RPC,以及回填/单域/跨域测试。
14
+
15
+ 本计划不改入群申请规则;不读写消息 payload;不做周期回填;不改 Peer/Relay 直连协议。受控 Gateway 之外的业务 P2P 路径不纳入强制范围,若实施阶段发现现存发送路径绕过 Gateway,先补齐路径清单并按设计边界验收,不以观察状态冒充全网状态。
16
+
17
+ ## 2. 交付清单与依赖
18
+
19
+ | 编号 | 任务 | 依赖 | 完成标准 |
20
+ |---|---|---|---|
21
+ | P0-1 | 冻结路由和 RPC 契约 | 无 | `message.send`/兼容 P2P 方法、身份来源、错误原因、三项 deny RPC、Console 管理接口均有契约测试 |
22
+ | P0-2 | 冻结配置和状态规则 | P0-1 | 默认 observe、enforce 必须配置正整数额度、配置 CAS、N/N+1、互通单调、拒绝优先规则由测试表达 |
23
+ | P1-1 | Gateway 状态表与事务仓储 | P0-2 | 幂等迁移、精确 AID 键、并发 pending 更新、失败不破坏既有状态通过 |
24
+ | P1-2 | 实时 Gateway 判定与互通标记 | P1-1 | 入站拒绝/额度、出站确认、互通豁免及错误不转发测试通过 |
25
+ | P1-3 | Gateway 内存缓存 | P1-1 | 命中/未命中/淘汰/TTL/本地更新/跨实例 TTL 收敛测试通过;数据库仍是判定权威 |
26
+ | P2-1 | Message 历史扫描内部 RPC | P0-1 | 分页稳定快照返回方向摘要,不读取/返回 payload;仅 Gateway 可调用 |
27
+ | P2-2 | Gateway 手动回填 Worker | P2-1,P1-1 | 单实例任务锁、checkpoint、幂等续跑、互通/pending 回填和任务报告测试通过 |
28
+ | P2-3 | 跨域反向存在探测 | P2-1,P2-2 | issuer 绑定、受认证批量探测、成功/无记录/远端失败/不支持协议状态测试通过 |
29
+ | P3-1 | 拒绝状态 RPC | P1-1 | 当前身份绑定、set/clear/list 分页、重复操作、无对端事件、发送拦截测试通过 |
30
+ | P3-2 | 四端 SDK 门面 | P3-1 | Python/TS/JS/Go 方法、类型、错误透传与跨 SDK wire 契约一致 |
31
+ | P4-1 | Console 管理 API | P1-1,P2-2 | 管理员鉴权、配置更新审计、状态过滤分页、启动/续跑/查询回填测试通过 |
32
+ | P4-2 | Console 策略与状态页面 | P4-1 | observe/enforce 切换、回填状态、未知提示、AID 对过滤分页及无 payload 渲染测试通过 |
33
+ | P5-1 | 单域与兼容集成 | P1-3,P3-1,P4-2 | 消息、拒绝、回填、默认开关、Group 回归、旧 SDK 通过 |
34
+ | P5-2 | 跨域集成 | P2-3,P5-1 | 双域收件箱回填证明双向关系、探测不可用则 unknown、实时反向交流互通通过 |
35
+ | P6-1 | 发布安排与索引同步 | 全部 | 默认 observe、初始配置 pending_limit=5、手动回填及开关功能验收,索引与报告一致;实际观察期不测试,到时管理员手动切换 |
36
+
37
+ ## 3. TDD 执行顺序
38
+
39
+ ### Phase 0:契约先行
40
+
41
+ 先新增会失败的 Gateway/Console/SDK 契约测试,再实现任何路径。
42
+
43
+ 1. Gateway 路由测试:认证 `from` 优先于客户端字段;目标 AID 从路由参数取值;覆盖所有当前 Gateway P2P 发送入口、持久和 volatile,不把 Group 方法计入。
44
+ 2. 策略纯逻辑测试:缺省配置为 observe;显式 enforce 缺少/配置非法上限时拒绝启用;限额 N 时前 N 条允许、第 N+1 条拒绝;observe 超限仍允许但计数;owner 回复后互通并豁免;互通后拒绝仍拦截。
45
+ 3. 拒绝 RPC 契约测试:owner 只能来自认证上下文;设置 rejected/blocked、解除、本人分页查询;不能查他人清单;RPC 不发布事件。
46
+ 4. 错误契约测试:拒绝、限额、服务不可用使用稳定 reason;拒绝前不调用 Message/federation 下游;具体 JSON-RPC 数值错误码先与现有登记表核对。
47
+ 5. Console API 契约测试:非管理员拒绝;默认读取 observe;有效配置可更新;无效额度拒绝 enforce;状态列表强制分页上限;回填只能显式 POST 启动。
48
+
49
+ Phase 0 完成后冻结方法名、字段、错误语义和 Gateway 入口清单。若现有 Gateway 代码显示某类业务发送不经过 Gateway,先把该范围列为未覆盖,不能跳过该发现继续宣称全量支持。
50
+
51
+ ### Phase 1:表与状态仓储
52
+
53
+ 1. 先写 Gateway store 测试:首次迁移、重复迁移、空库、已有数据、主键唯一、deny 清单索引查询和 AID 精确匹配。
54
+ 2. 再实现 `gateway_peer_state` 和策略配置持久化、repository;沿用 Gateway 当前数据库初始化路径及 AID 列定义。不建立逐消息准入/去重表。
55
+ 3. 先写并发测试:并行 N+K 次入站事务最多 N 次成功;不能有丢增量、重复互通回退、clear 与 set 竞态覆盖。
56
+ 4. 写事务失败测试:数据库读写失败时 enforce/deny 不调用下游;observe 的计数失败允许旧路由继续且能标记观察缺口。
57
+ 5. 先写策略配置测试:缺少记录初始化 observe,无效配置不生效,CAS 版本冲突返回冲突,数据库暂不可用时保留最后已知配置且缓存过期后停止 P2P 路由。
58
+ 6. 确认回填任务表有 job 唯一运行约束及稳定 checkpoint;pending 按当前值与历史摘要计数取较大值,相同 job 重放不累加。
59
+
60
+ ### Phase 2:Gateway 在线决策和缓存
61
+
62
+ 1. 先加状态机单测:deny 优先于 mutual;mutual 优先于额度;owner 出站成功确认互通;下游拒绝的出站不标记 owner 已发送;消息被额度拒绝时不增计数。
63
+ 2. 加 Gateway server handler 测试:成功请求只路由一次;被拒请求不调用本域 Message 服务或 federation;错误响应不泄露 block-list 内容。
64
+ 3. 接入跨域入站身份校验,测试 federation 注入身份与伪造 `from` 被拒绝。
65
+ 4. 加缓存测试:DB 回源、缓存命中、TTL 淘汰、写入后本地失效、跨实例 TTL 到期后回源,缓存缺失/故障不绕过 DB 原子判定。
66
+ 5. 覆盖相同、不同及缺省 `message_id` 的重复提交:Gateway 均按每次准入递增额度,达到上限后拒绝;入口不查询或存储消息 ID。
67
+
68
+ ### Phase 3:历史扫描与回填
69
+
70
+ 1. 先为 Message 内部扫描方法写契约测试:仅限 Gateway 内部调用;持久方向摘要快照;游标分页无漏项/重复;结果只有 AID 方向、计数和时间范围,没有正文/payload;任务结束后释放快照,快照过期必须显式重开 attempt。
71
+ 2. 为 Gateway Worker 写任务测试:仅手动触发、单任务并发锁、状态持久化、分批提交、断点续跑、失败域报告、管理员发起人记录。
72
+ 3. 写回填算法测试:同域 A→B 和 B→A 才确认双方 mutual;单向仅回填 pending;空结果不建虚构互通;重复运行幂等;live 状态与 deny 状态不被覆盖;pending 取当前值与历史计数的较大值,不做逐消息对账。
73
+ 4. 写保留边界测试:volatile/已删除/超过 Inbox 保留范围的消息不作为扫描证据;任务结果记录水位与扫描时间范围。
74
+ 5. 写跨域探测测试:只查询本地候选、批大小受限、远端双向认证、source issuer 与 `from_aid` 一致;远端确认反向入箱时标记 mutual;无反向、超时、不支持或数据不可用均记 unknown/failed,不作互通推断。
75
+ 6. 写 job API 和 Console 页面状态测试:进度、已确认、pending 回填、unknown、失败域和 checkpoint 字段完整显示;重启后不会自动启动任务,只能手动续跑。
76
+
77
+ ### Phase 4:拒绝 RPC 与 SDK
78
+
79
+ 1. 先为 Gateway RPC handler 写 set/clear/list 行为测试;owner 取 `_auth.aid`;`peer_aid` 不可为空或等于自身;重复 set/clear 幂等;只有本人可查。
80
+ 2. 写消息路由回归:blocked/rejected sender 即使 relation mutual 或模式为 observe,也被拒绝;解除后新消息可继续;不发对端事件。
81
+ 3. 四端 SDK 先写 facade 单测,核对方法名、参数、响应分页、错误透传;SDK 不缓存另一个权威拒绝状态。
82
+ 4. 运行四端 cross-SDK 契约矩阵,确保一个 SDK 设置的状态可由 Gateway 对其他 SDK 的消息统一执行。
83
+
84
+ ### Phase 5:Console 配置与状态面板
85
+
86
+ 1. Console 后端测试管理员鉴权、非法配置、配置 CAS 冲突、配置审计、状态查询条件、聚合观察数、page/page_size 边界、查询失败和 Gateway 不可达。
87
+ 2. 前端先测试查询参数构造、状态映射、分页、observe/enforce 表单校验、回填 start/resume 交互,再实现页面。
88
+ 3. 组件/API 测试覆盖默认 observe、上限未填时禁用 enforce、任务运行期间不重复启动、unknown/failed 明显展示、拒绝状态与 mutual 可以同时显示、pending 达限关系聚合数准确。
89
+ 4. 手动浏览器验收 Console 列表、过滤、分页、回填生命周期和开关切换;确认窄屏文本不重叠且 AID 不被截断到不可辨认。
90
+
91
+ ### Phase 6:集成、跨域与发布观察
92
+
93
+ 1. 单域集成覆盖 A→B 单向 N 条、N+1、B 回复后的互通、互通后继续交流、拒绝/解除、并发竞争、离线队列与 volatile 消息。
94
+ 2. 双域回填覆盖同一历史双向交流分别落入两域 Inbox;两域探测成功回填 mutual;一域历史缺失/离线时为 unknown,面板显示其限制。
95
+ 3. 跨域在线覆盖来源身份绑定、目标域限额、目标域拒绝、反向消息让两域各自确认本地 owner 互通。
96
+ 4. Group 回归验证 `group.request_join` 仍由 Group `max_pending` 执行,不被 Gateway P2P 策略影响。
97
+ 5. 旧 SDK 回归验证不调用新增 RPC 时发送行为不变;peer/relay 直连覆盖范围按设计明确记录,不虚报 Gateway 可拦截。
98
+ 6. 以用户确认的初始配置 `pending_limit=5` 作为本轮环境基线,默认部署 observe;验证手动回填、Console 计数与未知/失败关系,以及管理员手动 enforce/回退功能。开启前必须展示未知关系数及 Inbox 保留范围。实际观察期不执行测试,到时管理员根据报告手动切换。
99
+
100
+ ## 4. 断点续跑和完成门禁
101
+
102
+ 遵循项目 AUN 测试指南的首失败停测/修复/续跑规则。每阶段记录首次失败用例、修复提交范围和续跑起点;已经通过且不受修改影响的阶段不重复执行。
103
+
104
+ 本轮实现与测试完成门禁:
105
+
106
+ - Gateway Go 单测、Console 后端测试、Console 前端测试和四 SDK 受影响单测通过;
107
+ - 单域与双域集成通过,跨域数据不可证明时返回 unknown 而非误标 mutual;
108
+ - 默认部署模式为 observe,用户确认的初始额度配置为 5;回填只能手动触发,完成后不自动 enforce;
109
+ - Console 能查看并过滤 AID 对状态、回填覆盖率和错误域;管理员显式操作可以打开/关闭限额;
110
+ - 现有 Group `max_pending`、旧 SDK、消息存储、ACK/Pull 和 E2EE 路径无回归;
111
+ - 设计文档、实施计划、AUN SDK 索引与 Kite 总索引引用及行区间一致。
112
+
113
+ ## 5. 明确未纳入
114
+
115
+ - 从已清理 Inbox、volatile 队列或 SDK 本地历史恢复互通事实;
116
+ - 周期运行回填或自动从 observe 切换到 enforce;
117
+ - 由 Gateway 自动判断某个 AID 应被拒绝/屏蔽;
118
+ - 向对端发送拒绝通知或提供对端名单查询接口;
119
+ - Gateway 消息 ID 去重、逐消息准入账本及其清理任务;
120
+ - 通过 Message/Group 共用数据库或跨模块共享代码实现状态查询。
121
+
122
+ ## 6. 当前实施进度(2026-11-01)
123
+
124
+ - [x] Gateway 关系/策略存储、事务限额、互通与拒绝、只读缓存及启动接线已落地;每次提交独立计数,不保留消息 ID。
125
+ - [x] Message 元数据快照、Gateway 手动回填/续跑、跨域探测及未知/失败报告已落地;pending 仅取当前值与历史计数的较大值。
126
+ - [x] 四端 SDK 拒绝门面和 Console 策略/状态页已接入;页面展示互通比例、超限候选、观察缺口和扫描时间范围。
127
+ - [x] 已执行受影响业务单测、Go 静态检查、四端 SDK 定向验证及 Console 隔离构建;隔离 MySQL 已验证 Message 快照及回填任务锁/持久化。
128
+ - [x] 简化后的 Gateway 状态仓储真实 MySQL 回归通过;实际仅创建关系和策略两表,无逐消息准入表。
129
+ - [x] Ubuntu 真实单域及 PUB→CN、CN→PUB 专项通过:observe 超额放行、enforce 额度、重复提交计数、回复互通、拒绝/屏蔽/解除,以及 V2 解密、Pull、ACK。
130
+ - [x] 真实手动回填与续跑通过:PUB 原失败任务 attempt 2 完成;CN 报告 partial,保留 5 对既有 aid.com 未知关系。自然历史 pending、backfill 互通及完成/部分完成的快照释放/保留已核验,策略保持 observe。
131
+ - [x] 新增 RPC 正常成功分发、内部 scan 独立预算及普通在线期限回归通过;真实测试发现的跨域 Message 拒收错误透传已修复。
132
+ - [x] Console 最近回填任务读取补齐并完成仓储/RPC 红绿及真实隔离 MySQL 验证;管理方法仅允许已认证 Console 服务,跨域探测的通用单次/批量转发出口已关闭,合法内部探测回归通过。
133
+ - [x] Ubuntu 两域 Console 浏览器专项通过:默认读取持久任务、AID 对过滤、真实未知关系、CN 原任务 attempt 1→2 手动续跑、策略确认/取消及切回 observe、1440/390 宽度布局;分页仅验证不足 51 条的按钮边界。CN 复用原快照后仍为 partial/未知 5 对,PUB/CN 最终均为 observe。
134
+ - [x] 真实 Group 回归通过:P2P observe/enforce、额度 5 下,本域与跨域申请仍按 Group `max_pending=1` 执行,重复申请保持单条 pending;四个 P2P 有向 pair 状态不变,测试群 `14275.agentid.pub` 身份保留。
135
+ - [x] 未改源码的旧 SDK 0.5.19(commit `ab05792f2db86d534830c7a9e67e793c2caf3ce0`)真实回归通过:单域及双向跨域分别验证旧端发送/接收,共 6 个角色均完成 V2 解密、Pull、ACK,不调用新增 RPC;最终 PUB 为 observe/5/v20,CN 为 observe/5/v22。
136
+ - [x] Python/TS/JS/Go 四端原生 cross-SDK 专项矩阵完成:单域、PUB→CN、CN→PUB 各 16 组合,共 48(实跑 45 PASS、沿用 3 REUSED);实跑项各 7 子步,在 observe/5 下验证 set/list/clear、拒绝/屏蔽覆盖 mutual 及解除后 V2 解密/Pull/ACK 恢复,16 个客户端均 disconnected 且无 disconnect_errors。矩阵夹具适配仅限 Temp 的公开 CA 输入、各 SDK 目录瞬态有界等待及不同 Pull 返回契约,未修改 SDK/服务代码;历史失败记录保留,本矩阵不代表全量 Group/SDK suites。
137
+
138
+ 运维后续操作(不纳入本轮自动验收待办):保持 observe,观察期不执行测试;管理员到时根据 Console 报告手动切换 enforce,实际观察与手动切换不作为本轮测试完成的签收条件。