@agentunion/fastaun 0.5.35 → 0.5.37

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 (49) hide show
  1. package/CHANGELOG.md +40 -0
  2. package/_packed_docs/CHANGELOG.md +40 -0
  3. package/_packed_docs/INDEX.md +10 -3
  4. package/_packed_docs/sdk/0.5.36-SDK/345/272/224/347/224/250/351/233/206/346/210/220/346/214/207/345/215/227.md +130 -0
  5. package/_packed_docs/sdk/0.5.36-SDK/345/274/200/345/217/221/344/270/216/347/247/273/346/244/215/346/214/207/345/215/227.md +176 -0
  6. package/_packed_docs/sdk/06-API/346/211/213/345/206/214.md +6 -6
  7. package/_packed_docs/sdk/INDEX.md +15 -10
  8. package/dist/agent-md.d.ts +2 -1
  9. package/dist/agent-md.js +34 -6
  10. package/dist/agent-md.js.map +1 -1
  11. package/dist/aid-store.js +5 -1
  12. package/dist/aid-store.js.map +1 -1
  13. package/dist/auth.js +5 -2
  14. package/dist/auth.js.map +1 -1
  15. package/dist/client/control-messages.js +4 -2
  16. package/dist/client/control-messages.js.map +1 -1
  17. package/dist/client/delivery.d.ts +2 -0
  18. package/dist/client/delivery.js +111 -40
  19. package/dist/client/delivery.js.map +1 -1
  20. package/dist/client/lifecycle.js +1 -1
  21. package/dist/client/lifecycle.js.map +1 -1
  22. package/dist/client/rpc-pipeline.d.ts +3 -0
  23. package/dist/client/rpc-pipeline.js +45 -3
  24. package/dist/client/rpc-pipeline.js.map +1 -1
  25. package/dist/client/v2-e2ee.js +16 -8
  26. package/dist/client/v2-e2ee.js.map +1 -1
  27. package/dist/client.js +90 -51
  28. package/dist/client.js.map +1 -1
  29. package/dist/ownership-v21.d.ts +2 -1
  30. package/dist/ownership-v21.js +19 -9
  31. package/dist/ownership-v21.js.map +1 -1
  32. package/dist/pubsub/binding.d.ts +2 -6
  33. package/dist/pubsub/binding.js +58 -61
  34. package/dist/pubsub/binding.js.map +1 -1
  35. package/dist/pubsub/channel.js +3 -3
  36. package/dist/pubsub/channel.js.map +1 -1
  37. package/dist/pubsub/client.js +3 -4
  38. package/dist/pubsub/client.js.map +1 -1
  39. package/dist/pubsub/service.js +1 -1
  40. package/dist/pubsub/service.js.map +1 -1
  41. package/dist/secret-store/file-store.js +8 -1
  42. package/dist/secret-store/file-store.js.map +1 -1
  43. package/dist/tools/cross-sdk-agent.d.ts +1 -1
  44. package/dist/udp-standby.d.ts +0 -1
  45. package/dist/udp-standby.js +10 -13
  46. package/dist/udp-standby.js.map +1 -1
  47. package/dist/version.d.ts +1 -1
  48. package/dist/version.js +1 -1
  49. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -6,6 +6,46 @@
6
6
 
7
7
  ---
8
8
 
9
+ ## 0.5.37 — 未发布
10
+
11
+ 对照 `0.5.35` 仓库基线 `80cf7cf49`,合并原 `0.5.36` 未发布草稿与后续 Node SDK 增量;四端实现、配套服务依赖及验证范围见 [parity 0.5.37](../python/CHANGES_FOR_PARITY.md#v0537)。
12
+
13
+ ### 派生密钥缓存与重连削峰
14
+
15
+ - 固定加密参数下按 seed 在进程内复用 PBKDF2 主密钥,向存储实例返回独立 Buffer;身份存储、Token 存储及 seed 迁移复用派生入口,不改变既有加密格式。
16
+ - 保留指数退避,等待时间改为全幅抖动;同一运行上下文、同 issuer 最多两个恢复在途,启动间隔随机为 250–500 毫秒,普通重连与 UDP 恢复共用限制。
17
+ - 重连优先复用网关发现缓存,按失败轮次或迁移需求刷新,移除额外 `/health` 探测;成功连接后的例行恢复首批延迟 30–60 秒、任务间隔 1–5 秒,凭据扫描也延迟启动,旧连接剩余任务可取消。
18
+
19
+ ### EventService 注册与消息大小
20
+
21
+ - Bus 服务注册改为连接会话绑定,校验 `session_bound: true`,移除定时续租和按旧 TTL 到期关闭的逻辑;离线停止承接,ready 后重新注册,旧连接的迟到注册结果不会恢复服务。PubSub 发布者/订阅者业务租约保持原逻辑,需配套支持会话绑定注册的 Message 服务。
22
+
23
+ - 移除发布、Bus 受理和订阅接收的独立 64 KiB 限制,事件沿用普通 RPC/`message.send` 的完整 WebSocket 报文上限 `1_000_000` 字节;JSON、控制信封和 E2EE 开销计入该上限,事件正文可用空间相应减少。
24
+ - 收发令牌桶的字节突发额度提高至 `1_000_000`,按实际序列化字节数扣费;持续速率、队列数量/总字节、TTL、去重和背压约束继续生效。旧 `max_event_bytes`/`event_bytes` 不再用于单事件大小判断。
25
+
26
+ ### Ownership 共识缓存与证书验签
27
+
28
+ - `checkOwnershipConsensus` 和 `AIDStore.resolve` 的 Ownership 查询复用已达共识的本地持久快照,保存共识时的 agent.md 正文及 `owner_md_sha256`,新 Client/重启后可恢复。
29
+ - 观察 agent.md ETag、Owner 文件摘要和观察代次,变化后重新校验;兼容参数 `force` 不再强制击穿有效成功缓存,非共识、缺失或本地材料不一致时继续联网。持久化失败或异步查询期间观察变化的结果不进入可复用缓存。
30
+ - 历史 Ownership 文件的主签、附签接受有效的 `active_signing`/`verify_only` 证书,继续核验 AID、指纹、有效期、信任链和撤销状态;新签 owner.md/agent.md(含群/组织及清理路径)仍须使用 `active_signing`。
31
+
32
+ ### 消息交付与 ACK
33
+
34
+ - 群 inline 消息可在同一 namespace 内保留多条待确认记录;累计 ACK 仅完成已提交项,减少因前一条待 ACK 而退回 Pull 的情况。
35
+ - 后台尾 ACK 优先复用已排队的自然 forward Pull;已确认水位可消解同代际内尚未发送的冗余后台 ACK,保留其他游标和新连接的确认责任。P2P 在线提交覆盖自动补拉目标时减少重复 Pull,并保留补发 ACK 责任。
36
+ - 群 Pull 实际发送前读取最新已提交 ACK;持久 forward 补拉不再无条件先探测 volatile,改为按提示独立恢复;分类控制流空页无游标变化时不再重复 ACK 或保存状态。
37
+
38
+ ### UDP 待机
39
+
40
+ - UDP 租约按服务端期限与当前心跳周期的 2.5 倍取较短值,先应用心跳回复的新周期再续租;移除固定对账重连及连续三次超时唤醒条件,由租约/ticket 期限和业务唤醒恢复 WebSocket。
41
+ - 后台尾 ACK 等待重试时保持 WebSocket;旧 UDP socket 的迟到错误不会唤醒新一轮待机。
42
+
43
+ ### 版本与验证
44
+
45
+ - 包配置、锁文件、运行时及相关测试引用统一为 `0.5.37`。2026-11-15 版本升级阶段,跨 SDK 版本一致性测试 1 项及 Node 类型检查通过。
46
+ - 前阶段 Ownership 460 项和实体发布专项 3 项的通过记录见 parity,不作为本次整理重新执行的结果;未完成 Node 功能全量或线上 E2E,尚未发布或部署。
47
+ - 配套服务继续按单实例范围记录;原生 MailClient 的整体端到端验收状态沿用 0.5.35 边界。
48
+
9
49
  ## 0.5.35 — 2026-11-12
10
50
 
11
51
  对照已发布的 `0.5.34`,包含发布后的已提交变更及当前工作区增量;比较基线和四端实现边界见 [parity 0.5.35](../python/CHANGES_FOR_PARITY.md#v0535)。
@@ -6,6 +6,46 @@
6
6
 
7
7
  ---
8
8
 
9
+ ## 0.5.37 — 未发布
10
+
11
+ 对照 `0.5.35` 仓库基线 `80cf7cf49`,合并原 `0.5.36` 未发布草稿与后续 Node SDK 增量;四端实现、配套服务依赖及验证范围见 [parity 0.5.37](../python/CHANGES_FOR_PARITY.md#v0537)。
12
+
13
+ ### 派生密钥缓存与重连削峰
14
+
15
+ - 固定加密参数下按 seed 在进程内复用 PBKDF2 主密钥,向存储实例返回独立 Buffer;身份存储、Token 存储及 seed 迁移复用派生入口,不改变既有加密格式。
16
+ - 保留指数退避,等待时间改为全幅抖动;同一运行上下文、同 issuer 最多两个恢复在途,启动间隔随机为 250–500 毫秒,普通重连与 UDP 恢复共用限制。
17
+ - 重连优先复用网关发现缓存,按失败轮次或迁移需求刷新,移除额外 `/health` 探测;成功连接后的例行恢复首批延迟 30–60 秒、任务间隔 1–5 秒,凭据扫描也延迟启动,旧连接剩余任务可取消。
18
+
19
+ ### EventService 注册与消息大小
20
+
21
+ - Bus 服务注册改为连接会话绑定,校验 `session_bound: true`,移除定时续租和按旧 TTL 到期关闭的逻辑;离线停止承接,ready 后重新注册,旧连接的迟到注册结果不会恢复服务。PubSub 发布者/订阅者业务租约保持原逻辑,需配套支持会话绑定注册的 Message 服务。
22
+
23
+ - 移除发布、Bus 受理和订阅接收的独立 64 KiB 限制,事件沿用普通 RPC/`message.send` 的完整 WebSocket 报文上限 `1_000_000` 字节;JSON、控制信封和 E2EE 开销计入该上限,事件正文可用空间相应减少。
24
+ - 收发令牌桶的字节突发额度提高至 `1_000_000`,按实际序列化字节数扣费;持续速率、队列数量/总字节、TTL、去重和背压约束继续生效。旧 `max_event_bytes`/`event_bytes` 不再用于单事件大小判断。
25
+
26
+ ### Ownership 共识缓存与证书验签
27
+
28
+ - `checkOwnershipConsensus` 和 `AIDStore.resolve` 的 Ownership 查询复用已达共识的本地持久快照,保存共识时的 agent.md 正文及 `owner_md_sha256`,新 Client/重启后可恢复。
29
+ - 观察 agent.md ETag、Owner 文件摘要和观察代次,变化后重新校验;兼容参数 `force` 不再强制击穿有效成功缓存,非共识、缺失或本地材料不一致时继续联网。持久化失败或异步查询期间观察变化的结果不进入可复用缓存。
30
+ - 历史 Ownership 文件的主签、附签接受有效的 `active_signing`/`verify_only` 证书,继续核验 AID、指纹、有效期、信任链和撤销状态;新签 owner.md/agent.md(含群/组织及清理路径)仍须使用 `active_signing`。
31
+
32
+ ### 消息交付与 ACK
33
+
34
+ - 群 inline 消息可在同一 namespace 内保留多条待确认记录;累计 ACK 仅完成已提交项,减少因前一条待 ACK 而退回 Pull 的情况。
35
+ - 后台尾 ACK 优先复用已排队的自然 forward Pull;已确认水位可消解同代际内尚未发送的冗余后台 ACK,保留其他游标和新连接的确认责任。P2P 在线提交覆盖自动补拉目标时减少重复 Pull,并保留补发 ACK 责任。
36
+ - 群 Pull 实际发送前读取最新已提交 ACK;持久 forward 补拉不再无条件先探测 volatile,改为按提示独立恢复;分类控制流空页无游标变化时不再重复 ACK 或保存状态。
37
+
38
+ ### UDP 待机
39
+
40
+ - UDP 租约按服务端期限与当前心跳周期的 2.5 倍取较短值,先应用心跳回复的新周期再续租;移除固定对账重连及连续三次超时唤醒条件,由租约/ticket 期限和业务唤醒恢复 WebSocket。
41
+ - 后台尾 ACK 等待重试时保持 WebSocket;旧 UDP socket 的迟到错误不会唤醒新一轮待机。
42
+
43
+ ### 版本与验证
44
+
45
+ - 包配置、锁文件、运行时及相关测试引用统一为 `0.5.37`。2026-11-15 版本升级阶段,跨 SDK 版本一致性测试 1 项及 Node 类型检查通过。
46
+ - 前阶段 Ownership 460 项和实体发布专项 3 项的通过记录见 parity,不作为本次整理重新执行的结果;未完成 Node 功能全量或线上 E2E,尚未发布或部署。
47
+ - 配套服务继续按单实例范围记录;原生 MailClient 的整体端到端验收状态沿用 0.5.35 边界。
48
+
9
49
  ## 0.5.35 — 2026-11-12
10
50
 
11
51
  对照已发布的 `0.5.34`,包含发布后的已提交变更及当前工作区增量;比较基线和四端实现边界见 [parity 0.5.35](../python/CHANGES_FOR_PARITY.md#v0535)。
@@ -1,6 +1,6 @@
1
1
  # AUN SDK Core 文档索引
2
2
 
3
- > 当前四 SDK 源码版本为 **0.5.35**,本版接入与实现见 [0.5.35 应用集成指南](sdk/0.5.35-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.35-SDK开发与移植指南.md),源码增量见 [parity 0.5.35](../python/CHANGES_FOR_PARITY.md#v0535),现行接口见 [SDK 索引](sdk/INDEX.md)、[API 手册](sdk/06-API手册.md)及各 RPC 手册;版本专题和 CHANGELOG 保留原版本。根级索引采用三层结构:Layer 1 快速定位,Layer 2 按主题查找,Layer 3 重点文档摘要。P2P 保留共享 seq、按 sender 隔离游标,网络 Pull Gate 同 namespace 单飞、每客户端最多4个并行,末页独立 ACK。
3
+ > 当前四 SDK 源码版本为 **0.5.36**,本版接入与实现见 [0.5.36 应用集成指南](sdk/0.5.36-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.36-SDK开发与移植指南.md),源码增量见 [parity 0.5.36](../python/CHANGES_FOR_PARITY.md#v0536) 和四 SDK CHANGELOG;[0.5.35 应用集成指南](sdk/0.5.35-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.35-SDK开发与移植指南.md)与 [parity 0.5.35](../python/CHANGES_FOR_PARITY.md#v0535) 保留历史记录,现行接口见 [SDK 索引](sdk/INDEX.md)、[API 手册](sdk/06-API手册.md)及各 RPC 手册;版本专题和 CHANGELOG 保留原版本。根级索引采用三层结构:Layer 1 快速定位,Layer 2 按主题查找,Layer 3 重点文档摘要。P2P 保留共享 seq、按 sender 隔离游标,网络 Pull Gate 同 namespace 单飞、每客户端最多4个并行,末页独立 ACK。
4
4
 
5
5
  ---
6
6
 
@@ -21,6 +21,7 @@
21
21
  | [AUN 服务 Go 化重构精细化源码审查](audit/AUN服务Go化重构精细化源码审查-20260718.md) | 10 个 AUN 服务的 Go/Python 调用链、字段、并发、安全与性能修复终审;开放 P0/P1/P2 已归零,并附 Claude 60+76 条复审映射、跨实例/资源边界修复和 Docker/Linux 2344 条 Python 回归证据 |
22
22
  | [AUNClient 拆分重构执行方案](design/AUNClient拆分重构执行方案.md) | Python / Go / TS / JS SDK AUNClient 内部拆分边界、执行步骤和验收矩阵 |
23
23
  | [AUNClient 门面化与 Runtime 状态迁移细化方案](design/AUNClient门面化与Runtime状态迁移细化方案.md) | AUNClient 完全门面化、ClientRuntime 单一状态源和四端分批迁移步骤 |
24
+ | [0.5.36 应用集成指南](sdk/0.5.36-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.36-SDK开发与移植指南.md)、[变更与跨端对齐](../python/CHANGES_FOR_PARITY.md#v0536);四 SDK CHANGELOG | 事件大小/令牌桶、共识持久复用与观察失效、历史验签/新签、UDP 租约、Node/Go 差异、服务依赖及单实例边界 |
24
25
  | [0.5.35 应用集成指南](sdk/0.5.35-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.35-SDK开发与移植指南.md);[0.5.35 变更与跨端对齐](../python/CHANGES_FOR_PARITY.md#v0535);[0.5.34 应用指南](sdk/0.5.34-SDK应用集成指南.md) / [移植指南](sdk/0.5.34-SDK开发与移植指南.md)保留历史专题 | 对照已发布 0.5.34:通配订阅/发布者过滤、本地事件收发、后台 ACK、Echo v3.2;三端 UDP/原生 Mail、语言专属修复及单实例发布边界 |
25
26
  | [0.5.33 SDK 应用集成指南](sdk/0.5.33-SDK应用集成指南.md) / [开发与移植指南](sdk/0.5.33-SDK开发与移植指南.md) | 弹性补拉:应用面板配置/流程/故障边界 L404-464;四端用途认证、策略准入、共享预算与断线退主 L413-499;保留本版控制消息、Ownership和ACL专题 |
26
27
  | [消息同步与历史拉取改造方案](消息同步与历史拉取改造方案.md) / [消息弹性补拉通道方案](消息弹性补拉通道方案.md) / [消息弹性补拉通道实施计划](消息弹性补拉通道实施计划.md) | Forward A/T/H 窗口、Group 可见性、Tail/History RPC、页内有序发布、跨页幂等排序、三 Pull Gate、缺 sender IK bootstrap及坏密文推进;弹性通道契约:本轮Gateway同AID+设备最多授权1条、SDK按策略支持0..N(协议测试到2)、同namespace串行/跨namespace并行、history_sync、面板持久开关、断线退主、独立volatile与共享预算;实施计划L338-375为原额度历史证据(不证明新规则通过),新Gateway上限、四端策略行为和Ubuntu验收待完成 |
@@ -74,7 +75,7 @@
74
75
  | [SDK 文档索引](sdk/INDEX.md) | SDK 使用手册、P2P peer 能力/游标、完整 pending peers/快照、need_render、50k 内存去重/应用持久幂等、四端门面、RPC、E2EE、Storage VFS、Group FS 和 Collab 的子索引 |
75
76
  | [SDK 查阅指南](sdk/AUN_DOCS_GUIDE.md) | SDK 文档按行区间渐进式查阅方法 |
76
77
  | [AUN SDK 0.5.6 更新日志](sdk/CHANGELOG-0.5.6.md) | 以 0.5.5 为基线的四 SDK 发布汇总;覆盖首次签名者回源、下载提交前验签、消息窗口、显式 change-seed 和语言能力边界 |
77
- | [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md);[0.5.29 应用指南](sdk/0.5.29-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.29-SDK开发与移植指南.md)、[共识与上传对齐](../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布);[0.5.28 应用指南](sdk/0.5.28-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.28-SDK开发与移植指南.md);[0.5.27 应用指南](sdk/0.5.27-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.27-SDK开发与移植指南.md) | v0.3.3 至 v0.5.35 跨语言对齐清单;0.5.29 历史指南覆盖应用接入、NS 单次查询、无 TTL 的 ETag 缓存、resolve、上传锁/恢复和四端移植;旧版记录保留 |
78
+ | [四 SDK 版本对齐变更清单](../python/CHANGES_FOR_PARITY.md);[0.5.29 应用指南](sdk/0.5.29-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.29-SDK开发与移植指南.md)、[共识与上传对齐](../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布);[0.5.28 应用指南](sdk/0.5.28-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.28-SDK开发与移植指南.md);[0.5.27 应用指南](sdk/0.5.27-SDK应用集成指南.md)、[开发与移植指南](sdk/0.5.27-SDK开发与移植指南.md) | v0.3.3 至 v0.5.36 跨语言对齐清单;0.5.29 历史指南覆盖应用接入、NS 单次查询、无 TTL 的 ETag 缓存、resolve、上传锁/恢复和四端移植;旧版记录保留 |
78
79
  | [AUN CLI 手册](cli/CLI手册.md) | Python CLI入口、profile及主要命令;credential 23命令、组织入口、文件/上下文、原字节和错误退出 |
79
80
  | [AUN CLI 设计文档](cli/AUN-CLI设计文档.md) | `python/src/aun_cli` 当前实现架构、命令注册面、配置解析、SDK 桥接和实现边界 |
80
81
  | [凭证与组织服务 CLI 开发与使用指南](cli/凭证与组织服务CLI开发与使用指南.md) | 流程图+TS示例;真实CLI调用、凭证全流程、组织材料衔接与SDK胶水开发 |
@@ -136,6 +137,8 @@
136
137
 
137
138
  ### SDK 使用与协议
138
139
 
140
+ - 当前 0.5.36 应用升级、大事件、持久共识、证书与 UDP → [应用集成指南](sdk/0.5.36-SDK应用集成指南.md);缓存失效、NS 配套、验签/新签及四端实现契约 → [开发与移植指南](sdk/0.5.36-SDK开发与移植指南.md);源码与已有验证 → [四端 parity](../python/CHANGES_FOR_PARITY.md#v0536) 和四 SDK CHANGELOG
141
+
139
142
  - 0.5.21 应用开发者的 TypeScript 接入、消息入库与 UI、resolve、Ownership、凭证组织及升级验收 → [应用集成指南](sdk/0.5.21-SDK应用集成指南.md)
140
143
  - 0.5.21 SDK 开发者的分层、peer/batch 提交、共识缓存、原件恢复、持久化和跨语言验收 → [开发与移植指南](sdk/0.5.21-SDK开发与移植指南.md)
141
144
  - 0.5.22 应用接入、两种绑定与审批恢复、resolve、60 秒读缓存与刷新、撤销同步及完整成员包 → [应用集成指南](sdk/0.5.22-SDK应用集成指南.md)
@@ -449,7 +452,7 @@ TypeScript 身份与消息接线、Ownership 审批恢复、resolve、默认缓
449
452
 
450
453
  0.5.29 [应用指南](sdk/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;[开发与移植指南](sdk/0.5.29-SDK开发与移植指南.md):契约 §1—§2 L5-63、缓存与 resolve §3—§4 L64-94、上传恢复 §5 L95-123、四端与继承契约 §6—§7 L124-151、核查 §8 L152-164。
451
454
 
452
- [0.5.35 应用指南](sdk/0.5.35-SDK应用集成指南.md):范围 L7-20、EventService L21-61、ACK/恢复 L62-77、Echo L78-94、UDP L95-124、Mail L125-163、语言专属 L164-177、验收 L178-189;[开发与移植指南](sdk/0.5.35-SDK开发与移植指南.md):职责 L7-17、事件契约 L18-63、ACK/同步 L64-83、Echo L84-99、UDP L100-136、Mail L137-172、语言落点 L173-184、回归 L185-204。 当前 [0.5.35 parity](../python/CHANGES_FOR_PARITY.md#v0535) L15-90:基线/矩阵 L17-29、EventService L30-43、ACK/同步 L44-51、Echo L52-58、UDP L59-65、Mail L66-73、语言专属 L74-80、核验范围 L81-90。历史 [0.5.29 parity](../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布) L456-528:公共入口与 NS 请求 L460-480、无 TTL 的 ETag 缓存及 resolve L481-488、普通上传与恢复 L489-508、NS 配套与定向验证 L509-528。四端 CHANGELOG 提供接口级摘要。
455
+ [0.5.35 应用指南](sdk/0.5.35-SDK应用集成指南.md):范围 L7-20、EventService L21-61、ACK/恢复 L62-77、Echo L78-94、UDP L95-124、Mail L125-163、语言专属 L164-177、验收 L178-189;[开发与移植指南](sdk/0.5.35-SDK开发与移植指南.md):职责 L7-17、事件契约 L18-63、ACK/同步 L64-83、Echo L84-99、UDP L100-136、Mail L137-172、语言落点 L173-184、回归 L185-204。 当前 [0.5.35 parity](../python/CHANGES_FOR_PARITY.md#v0535) L84-159:基线/矩阵 L86-98、EventService L99-112、ACK/同步 L113-120、Echo L121-127、UDP L128-134、Mail L135-142、语言专属 L143-149、核验范围 L150-159。历史 [0.5.29 parity](../python/CHANGES_FOR_PARITY.md#v0529--共识查询缓存与普通上传未发布) L525-597:公共入口与 NS 请求 L529-549、无 TTL 的 ETag 缓存及 resolve L550-557、普通上传与恢复 L558-577、NS 配套与定向验证 L578-597。四端 CHANGELOG 提供接口级摘要。
453
456
 
454
457
  历史 0.5.28 [应用指南](sdk/0.5.28-SDK应用集成指南.md):身份/消息接入 §2—§3 L18-95、凭证/组织 §4—§5 L96-137、Storage/Ownership §6—§7 L138-186、Owner 通知 §8 L187-201、风控/升级 §9—§10 L202-228;[开发与移植指南](sdk/0.5.28-SDK开发与移植指南.md):上传/下载 schema §1 L7-36、非一致共识 fresh §2 L37-62、分类控制消息 §3 L63-108、Owner outbox §4 L109-121、风控 §5 L122-134、移植矩阵 §6 L135-146。对应实现及验证边界见 `python/CHANGES_FOR_PARITY.md` 0.5.28 章节 L529-613。0.5.27 及更早版本保留原基线和执行记录。
455
458
 
@@ -530,3 +533,7 @@ L5-121定义TS运行器、profile、三种凭证模式及23命令;L124-298说
530
533
  ### 0.5.33 弹性补拉接入与移植
531
534
 
532
535
  [应用指南](sdk/0.5.33-SDK应用集成指南.md) L404-464:面板持久开关、无需新Client的补拉流程、暂停与断线退主、同版禁开及应用幂等;[移植指南](sdk/0.5.33-SDK开发与移植指南.md) L413-499:双能力/history_sync、发送前复核、消费预留、volatile主路径、真实辅助计数与回收;[连接协议](protocol/03-Gateway-连接模式.md)弹性专节及[Message](sdk/09-message-rpc-manual.md)/[Group](sdk/09-group-rpc-manual.md)分页段定义wire字段。
536
+
537
+ ### 0.5.36 四 SDK 应用、移植与对齐
538
+
539
+ [0.5.36 应用指南](sdk/0.5.36-SDK应用集成指南.md):范围 L7-19、事件大小/速率 L20-42、共识复用与失效 L43-76、证书 L77-87、UDP L88-107、Node/Go L108-117、验收 L118-130;[开发与移植指南](sdk/0.5.36-SDK开发与移植指南.md):契约 L7-19、事件 L20-50、持久共识 L51-85、观察失效 L86-102、NS L103-112、历史验签/新签 L113-128、UDP L129-153、语言专属 L154-161、回归 L162-176。[0.5.36 变更与跨端对齐](../python/CHANGES_FOR_PARITY.md#v0536) L15-78:基线/矩阵 L17-30、事件大小与速率 L32-38、共识缓存、观察及证书验签 L40-54、UDP/Node/Go 差异 L56-61、配套服务与边界 L63-67、核验 L69-78。
@@ -0,0 +1,130 @@
1
+ # 0.5.36 SDK 应用集成指南
2
+
3
+ 本文面向从 **0.5.35** 升级到目标 **0.5.36** 的应用,依据截至 2026-11-12 的四 SDK 工作区源码整理,比较基线为 `80cf7cf49`。源码版本不代表安装包、Go tag 或配套服务已发布。
4
+
5
+ 首次接入先读 [快速开始](01-快速开始.md)、[连接与认证](04-连接与认证.md)和 [API 手册](06-API手册.md)。实现契约见 [本版开发与移植指南](0.5.36-SDK开发与移植指南.md),源码差异与已有验证见 [parity 0.5.36](../../python/CHANGES_FOR_PARITY.md#v0536)。[0.5.35 应用指南](0.5.35-SDK应用集成指南.md)保留通配订阅、发布者过滤、后台 ACK、Echo 和 Mail 接线;其中事件大小、共识缓存及 UDP 行为以本版说明为准。
6
+
7
+ ## 1. 升级范围与支持边界
8
+
9
+ | 本版变化 | Python | Node TypeScript | Browser JavaScript | Go |
10
+ | --- | --- | --- | --- | --- |
11
+ | 取消事件独立 64 KiB 检查,提高默认字节突发额度 | 支持 | 支持 | 支持 | 支持 |
12
+ | check/resolve 复用持久共识,观察 Owner 摘要失效 | 支持 | 支持 | 支持;异步存储 | 支持 |
13
+ | 历史 Ownership 验签接受 verify_only,新签仍限 active_signing | 支持 | 支持 | 支持 | 支持 |
14
+ | UDP 动态心跳周期及租约恢复调整 | 支持 | 支持 | 无原生 UDP | 支持 |
15
+ | 待处理 Pull/目录工作阻止入睡的本版补强 | 支持 | 沿用已有检查 | 不适用 | 支持 |
16
+ | 语言专属修复 | UDP 阶段诊断与公网测试入口 | 群 inline 待 ACK、多余 Pull/ACK | 不包含 Node 专属交付修复 | 组织凭据续期复制身份快照 |
17
+
18
+ 四 SDK 的代码、配置及相关测试版本统一为 `0.5.36`。配套服务继续按**单实例**支持,Redis 缓存不构成服务多副本一致性承诺。独立 Mail 的整体验收边界沿用 0.5.35,核心 IM 接入不要求启用 Mail;Rust 不在本次四 SDK 文档的修改或验收范围。
19
+
20
+ ## 2. EventService:事件沿用普通消息大小边界
21
+
22
+ ### 2.1 取消的是事件额外上限
23
+
24
+ 发布端、Bus 受理端及订阅接收端不再执行独立的 64 KiB 检查,旧 `max_event_bytes`/`event_bytes` 配置不再参与单事件大小判断。事件继续走原有 `sdk_control`/`aun.pubsub/1` 通道,授权和调用方式不变。
25
+
26
+ 网络发送沿用 RPC/`message.send` 的完整 WebSocket 报文上限 **1,000,000 字节**,为十进制值。JSON、事件控制字段、接收目标和 E2EE 信封都占用预算,不能将其当作可发送的事件正文长度;中文、转义及加密也会改变实际编码大小。
27
+
28
+ 升级需要覆盖实际链路上的发布者、Bus 和订阅者。链路中仍使用旧 SDK 的节点可能继续拒绝超过 64 KiB 的事件,单独升级发布端不能保证完整投递。
29
+
30
+ ### 2.2 突发额度、持续速率与队列分别生效
31
+
32
+ | 边界 | 当前行为 | 应用影响 |
33
+ | --- | --- | --- |
34
+ | SDKChannel/事件接收默认字节突发额度 | `1_000_000` 字节 | 允许容纳普通报文上限范围内的一次突发,按完整序列化字节扣费 |
35
+ | SDKChannel 默认持续速率 | 40 次/秒、262,144 字节/秒;调用突发 4 次 | 大事件可能消耗大部分字节令牌,后续发送仍需等待补充 |
36
+ | 单条超过令牌桶突发额度 | 返回 `MESSAGE_TOO_LARGE`,不允许透支 | 自定义更小额度仍可能阻止大事件;本版默认额度已提高 |
37
+ | 发布、接收和 Bus fanout 队列 | 保留数量、总字节和 TTL 约束 | 容量不足仍可能等待、`OVERLOADED` 或到期 |
38
+
39
+ Python Bus 全局及单发布者发送字节突发额度也提高至 `1_000_000`,SDKChannel 使用紧凑 JSON 的 UTF-8 字节计费。取消单事件额外检查不会取消总容量、TTL、去重、公平调度或背压。
40
+
41
+ 事件授权、订阅过滤与恢复方式继续参考 [事件应用集成专题](AUN事件发布订阅应用集成指南.md);该专题中的历史 64 KiB 约束由本版规则替代。
42
+
43
+ ## 3. Ownership:复用共识,变化后重新校验
44
+
45
+ ### 3.1 check 和 resolve 共享持久材料
46
+
47
+ | SDK | 直接查询 | resolve 中启用共识查询 |
48
+ | --- | --- | --- |
49
+ | Python | `await client.check_ownership_consensus(sub_aid)` | `AIDStore.resolve` 的 `ownership` 选项传入查询客户端 |
50
+ | Node TS/Browser JS | `await client.checkOwnershipConsensus(subAid)` | `AIDStore.resolve` 的 `ownership` 选项传入查询客户端 |
51
+ | Go | `client.CheckOwnershipConsensus(ctx, subAID)` | `AIDStore.Resolve` 的 `Ownership` 选项传入查询客户端 |
52
+
53
+ 只有有效的 `status=consensus`、`lock=locked` 结果可以直接复用。SDK 同时保存共识快照、共识时的 agent.md 正文和 Owner 文件摘要;保留原身份存储及数据目录后,新 Client/进程重启可以恢复这些材料,首次共识查询不必仅因重启而联网。
54
+
55
+ `single_sided`、`released`、`unbound`、`invalid`、`unavailable` 等非共识状态继续联机检查。应用仅应从 `consensus` 结果读取已确认的 `owner_aid`,不能把名片中的单方 Owner 声明当作共识。
56
+
57
+ 公开 check 保留兼容参数 `force`/`Force`,当前四端忽略该参数;传入 true 也不会绕过有效共识缓存。resolve 同样先尝试本地共识,不能依靠 `ownershipTtlMs=0`/对应语言 TTL 选项强制重验已经命中的有效快照。
58
+
59
+ resolve 的 `ownership.cached=true` 表示这次 Ownership 结果来自本地快照,不表示整个 resolve 的证书、名片等步骤完全没有网络访问。`checked_at` 也不能用来证明刚刚执行过一次远端共识检查。
60
+
61
+ ### 3.2 缓存如何失效
62
+
63
+ | 观察或本地变化 | SDK 处理 |
64
+ | --- | --- |
65
+ | agent.md ETag、正文 SHA256 或目标 AID 不匹配 | 放弃旧快照,重新查询 |
66
+ | Owner 的 owner.md 摘要变化 | 递增观察代次,失效相关快照 |
67
+ | 关系版本、声明 Owner、锁状态不匹配,或观察到名片 missing | 不复用本地共识 |
68
+ | 已完成的 Ownership 操作 | 继续通过原有事件路径失效 |
69
+ | 查询期间切换身份/存储根,或观察到新变化 | 旧查询结果不进入可复用缓存 |
70
+
71
+ Owner 文件摘要通过 NS 的 `X-AUN-Owner-MD-SHA256` 响应头,以及 Gateway 的 `agent_md_etags`/消息发送者元数据中的 `owner_md_sha256` 传播。要获得完整观察能力,需要相应 NS/Gateway 配套更新。
72
+
73
+ 已达共识的 SDK 快照没有新增固定 TTL;SDK 从后续 HTTP、RPC 和消息中吸收观察信息,没有新增独立订阅或定时轮询。未观察到变化不等于实时证明远端从未变化,离线复用结果也不替代服务端对写操作的权限和版本检查。
74
+
75
+ NS 自身的结果缓存是另一层:最长 5 秒,并受证书材料期限及变化失效约束。它用于减少冷查询或失效重验的重复工作,不是 SDK 共识快照的有效期。
76
+
77
+ ## 4. Owner 证书:历史验签与新签分开
78
+
79
+ | 操作 | 允许的证书生命周期 | 其他检查 |
80
+ | --- | --- | --- |
81
+ | 校验已有 owner.md/agent.md 的主签、附签 | `active_signing`、`verify_only` | 继续检查有效期、签署时刻、AID、指纹、验链、撤销/OCSP 及权威观察新鲜度 |
82
+ | 新签 owner.md/agent.md | 仅 `active_signing` | 保存新签文件或上传前检查;群/组织双文件发布、清理路径同样适用 |
83
+
84
+ 证书轮换后,合法的历史签名不会仅因证书转为 `verify_only` 被拒绝。`verify_only` 不授权继续新签;过期、撤销、指纹或身份不匹配的证书仍不能通过。验签缓存命中也不能绕过新签限制。
85
+
86
+ 普通绑定、释放、转移和群/组织 Owner 操作继续使用现有 SDK 门面,应用无需自行把历史证书状态改成 active,也无需重新签发全部历史文件。配套 NS 已同步调整历史验签白名单;仅升级 SDK 不能改变旧 NS 的拒绝策略。
87
+
88
+ ## 5. UDP 待机:订阅兼容和租约恢复
89
+
90
+ ### 5.1 开启条件与空订阅
91
+
92
+ 原生 UDP 仍仅由 Python、Node 和 Go 提供,Browser 保持 WebSocket。Gateway 启动与 Control 缺省允许待机,实际仍须有可用 listener 和公告地址;主连接须同时协商到严格布尔值 `negotiated_capabilities.udp_standby_v1=true` 和 `udp_standby.enabled=true`,并满足空闲、无在途任务和主长连接等准入条件;已知 human 保持 WS。
93
+
94
+ Gateway 对已协商 UDP 的主 long 连接在认证时将订阅字段缺失、`null`、`[]` 或全空白集合归一为**全部 12 个可唤醒事件**,从首次 WS 事件路由生效;prepare 返回具体 `event_subscriptions` 快照。应用不必为绕过空订阅的 `unsupported_subscription` 人为缩窄集合;未协商 UDP 的会话保留原订阅语义。
95
+
96
+ 这里是 Gateway 通知订阅,和 `EventService.subscribe` 的 Bus 订阅不同。显式订阅中仍含不支持待机恢复的事件时,Gateway 仍会返回 `unsupported_subscription`;空订阅规则不绕过能力声明、queue/stream 等连接约束或忙碌检查。恢复连接时沿用 prepare 返回的通知快照。
97
+
98
+ ### 5.2 心跳更新和故障恢复
99
+
100
+ 三端仅接受与当前心跳匹配的有效回复,先应用其中正数 `heartbeat_interval_ms`,再续租。有效租约不超过服务端返回期限和当前心跳周期 **2.5 倍**中的较短值,同时不能超过 ticket 到期时间。
101
+
102
+ 默认周期 25 秒对应最多 62.5 秒租约,下一轮心跳保留 ±20% 抖动。连续未能续租时按租约/ticket 期限恢复 WebSocket 并进入冷却;不再使用旧版“连续三次超时”门槛,也不再按固定约 15 分钟对账周期唤醒。
103
+
104
+ 新业务请求、有效唤醒提示及相应期限仍可恢复 WebSocket,正常续租可持续待机。Python/Go 在 prepare 和 commit 前补强待处理 Pull、peer 目录及恢复任务检查,避免尚有交付工作时关闭连接。
105
+
106
+ UDP 只承载控制提示,不承载消息正文;`WAKE_ACK` 不是应用消费确认,也不能唤醒已退出的进程。待机不改变业务 TTL、消息幂等或写请求不可盲目重放的要求。
107
+
108
+ ## 6. Node/Go 专属变化
109
+
110
+ | SDK | 变化 | 应用影响 |
111
+ | --- | --- | --- |
112
+ | Node TS | 同一群 namespace 可保留多条 inline 待 ACK 记录 | 连续在线消息减少退回 Pull;累计 ACK 仍只完成已提交项 |
113
+ | Node TS | 消解同代际未发送的冗余后台 ACK,在线提交覆盖补拉目标时减少 Pull | 保留未确认水位的 ACK 责任;应用继续按消息标识幂等,不依赖内部 RPC 次数 |
114
+ | Go | 组织凭据续期先复制 identity map 再更新证书 | 避免原地改写旧身份快照,应用沿用现有续期入口 |
115
+
116
+ 这些变化不写成 Browser 或其他 SDK 的共同新增能力。ACK 仍表示协议消费进度,不是应用业务完成回执。
117
+
118
+ ## 7. 升级验收清单与已有证据
119
+
120
+ | 范围 | 应用验收重点 |
121
+ | --- | --- |
122
+ | 版本与服务 | 实际安装产物为目标版本;单实例;NS/Gateway 的配套修复和元数据传播 |
123
+ | 大事件 | 超过 64 KiB 的明文/密文完整链路;编码后总大小;突发补充、队列和 TTL |
124
+ | 共识 | check 和带 Ownership 的 resolve;重启复用;force 不触发额外重验;非共识仍联网 |
125
+ | 失效 | agent.md 或 owner.md 变化;名片 missing;查询期间观察变化;存储失败后重试 |
126
+ | 证书 | verify_only 历史主签/附签通过;同证书新签被拒;过期及撤销继续拒绝 |
127
+ | UDP(三端) | 空订阅、显式不支持订阅、能力未协商、忙碌准入、新周期及租约到期恢复 |
128
+ | 语言差异 | Node 同群连续 inline/累计 ACK;Go 续期前后旧身份快照 |
129
+
130
+ 已有定向回归、类型检查和 NS 核验结果见 [parity 的验证范围](../../python/CHANGES_FOR_PARITY.md#v0536)。本次专题整理只执行文档一致性、链接和索引检查,不新增功能全量、容量对比、公网/Docker/浏览器 live/跨域 E2E 或 Mail 整体验收结论。
@@ -0,0 +1,176 @@
1
+ # 0.5.36 SDK 开发与移植指南
2
+
3
+ 本文面向四 SDK 维护者和新语言实现者,整理 **0.5.35 → 目标 0.5.36** 的协议边界、缓存与连接状态机。比较基线为 `80cf7cf49`,依据截至 2026-11-12 的工作区源码;不代表版本已发布或部署验收已完成。
4
+
5
+ 应用调用及升级影响见 [应用集成指南](0.5.36-SDK应用集成指南.md),四端差异和已有验证见 [parity 0.5.36](../../python/CHANGES_FOR_PARITY.md#v0536)。[0.5.35 移植指南](0.5.35-SDK开发与移植指南.md)保留通配订阅、过滤、本地通道、ACK/同步、Echo 与 Mail 的历史增量;其中事件大小、共识复用和 UDP 恢复条件以本文为准。
6
+
7
+ ## 1. 本版实现契约
8
+
9
+ | 范围 | 必须保持的行为 | 语言边界 |
10
+ | --- | --- | --- |
11
+ | EventService | 去除独立 64 KiB 检查,复用消息报文上限;完整字节计费、有界容量 | 四端;Python 另调整 Bus 字节突发和紧凑 JSON |
12
+ | Ownership 查询 | check/resolve 优先复用有效持久共识,忽略 check 的 force;非共识联机 | 四端;Browser 存储异步 |
13
+ | 观察 | agent.md ETag 和 Owner 文件摘要失配时失效,拒绝旧观察结果落盘 | 四端;依赖 NS/Gateway 元数据 |
14
+ | 证书 | 历史主签、附签允许 verify_only;任何新签仍须 active_signing | 四端及配套 NS |
15
+ | UDP | 先更新周期再续租,租约受 2.5 周期及 ticket 约束 | Python/Node/Go;Browser 无原生实现 |
16
+ | 专属修复 | Node inline/ACK/Pull;Go 组织续期身份复制 | 不扩写为四端共同新增 |
17
+
18
+ 本次配套服务按单实例支持,保留现有模块协议和存储边界。Rust 保持只读,不在实现或核验范围;Mail 整体验收状态沿用 0.5.35。
19
+
20
+ ## 2. EventService 大小、速率与容量
21
+
22
+ ### 2.1 不再维护独立事件正文上限
23
+
24
+ 发布、Bus 受理和订阅接收均移除独立 64 KiB 检查,旧 `max_event_bytes`/`event_bytes` 不再驱动单事件拒绝。不要在新语言的任一入口重新加入该限制。
25
+
26
+ 沿用原有 P2P `sdk_control` 与 `aun.pubsub/1` 格式,复用普通 RPC/`message.send` 的完整 WebSocket 报文上限 `1_000_000` 字节,Go 复用 `MaxWSPayloadSize`。预算针对编码后的完整请求,包含 JSON、控制字段、目标及 E2EE 开销,不能直接以事件正文长度代替报文长度。
27
+
28
+ 保留现有发布凭据、角色租约、TTL、去重和接收代次检查。本地路径沿用原容量与调度规则,不为模拟网络再增加一层正文大小上限。
29
+
30
+ ### 2.2 令牌桶允许容纳最大报文,不透支
31
+
32
+ SDKChannel 收发及客户端事件接收默认字节突发提高至 `1_000_000`;默认调用速率 40 次/秒、字节速率 262,144 字节/秒和调用突发 4 次继续保留。
33
+
34
+ 一次成功获取须扣除该层实际序列化的完整 UTF-8 字节数;不足时按原期限等待补充,单条超过桶容量仍返回 `MESSAGE_TOO_LARGE`。不能以 `min(size, burst)` 少扣字节,也不能通过负令牌实现额外透支。
35
+
36
+ Python SDKChannel 使用紧凑 JSON 计费,Bus 的全局及单发布者发送字节突发也调整为 `1_000_000`。这些默认值不统一所有角色的持续速率;保留原有各层节流和配置语义。
37
+
38
+ ### 2.3 总容量与单条报文分开
39
+
40
+ 发布、结果、接收及 Bus fanout 的数量和总字节容量保持有界。超过总容量时继续等待、返回 `OVERLOADED` 或因原 TTL 到期结束;释放容量和取消任务时沿用现有记账路径。
41
+
42
+ 移植验收需同时覆盖超过 64 KiB 的合法事件、编码后超过报文上限、令牌补充、完整计费及容量回收。不能仅删除发布端检查而保留 Bus/Sub 的旧拒绝分支,也不能将取消单条限制变成无限排队。
43
+
44
+ | SDK | 主要实现入口 |
45
+ | --- | --- |
46
+ | Python | [pubsub/client.py](../../python/src/aun_core/pubsub/client.py)、[service.py](../../python/src/aun_core/pubsub/service.py)、[binding.py](../../python/src/aun_core/pubsub/binding.py)、[rate.py](../../python/src/aun_core/pubsub/rate.py) |
47
+ | Node TS | [pubsub/client.ts](../../ts/src/pubsub/client.ts)、[service.ts](../../ts/src/pubsub/service.ts)、[channel.ts](../../ts/src/pubsub/channel.ts) |
48
+ | Browser JS | [pubsub/client.ts](../../js/src/pubsub/client.ts)、[service.ts](../../js/src/pubsub/service.ts)、[channel.ts](../../js/src/pubsub/channel.ts) |
49
+ | Go | [pubsub_client.go](../../go/pubsub_client.go)、[pubsub_service.go](../../go/pubsub_service.go)、[pubsub_binding.go](../../go/pubsub_binding.go) |
50
+
51
+ ## 3. Ownership 持久共识与查询流程
52
+
53
+ ### 3.1 保存能重建共识的完整材料
54
+
55
+ | 材料 | 用途 |
56
+ | --- | --- |
57
+ | `ownership_snapshot` | NS 已确认的状态、目标、Owner、关系版本、锁、ETag 和文件哈希 |
58
+ | `ownership_agent_md` | 共识时的 agent.md 正文;没有普通名片正文缓存时仍可重建 |
59
+ | `remote_owner_md_sha256` | 最新观察到的 owner.md 摘要,与快照的 `owner_md_sha256` 比较 |
60
+ | `remote_etag`/`remote_status` | 观察到的名片版本和缺失状态 |
61
+ | `observation_version` | 识别查询期间的变化,包含 ETag 改变后又变回的情形 |
62
+
63
+ 沿用各语言现有身份存储及根目录隔离,不新建独立共识数据库。Browser 等待异步持久化;各端只有成功写入且观察未变的结果才能作为后续可复用快照。
64
+
65
+ ### 3.2 本地命中条件
66
+
67
+ 恢复或复用前须验证目标 AID、`status=consensus`、`lock=locked`、非 missing、agent.md 正文 SHA256,以及声明中的 Owner 和关系版本。已观察的 ETag/Owner 摘要存在时须与快照一致;内存缓存还核对观察代次和当前正文。
68
+
69
+ 正文优先使用当前名片内容,缺失时才使用 `ownership_agent_md`;不能为了命中快照忽略已经存在但不匹配的新正文。解析失败、材料不足或任一条件不满足,均回到联机检查。
70
+
71
+ 成功共识不新增固定 TTL,非共识结果不作为离线复用依据。`single_sided`、`released`、`unbound`、`invalid`、`unavailable` 等下次仍检查远端;不能把短暂失败缓存成长期无 Owner。
72
+
73
+ ### 3.3 check 与 resolve 的执行顺序
74
+
75
+ 1. 读取当前身份、存储根、名片记录、ETag 和观察代次。
76
+ 2. 尝试有效内存共识;没有可用命中时按入口规则恢复本地持久材料。
77
+ 3. 无有效共识则沿用现有 NS 查询和材料验证流程。
78
+ 4. 对齐返回的目标、关系版本、锁状态、正文哈希与 Owner 摘要。
79
+ 5. 提交前复查身份/存储根、正文、ETag、观察代次及当前查询归属;失败则不留下有效缓存。
80
+ 6. 持久化成功后才保留可复用快照;返回对象与缓存对象继续隔离。
81
+
82
+ 公开 check 的 `force`/Go `OwnershipConsensusOptions.Force` 保留签名兼容但不控制绕缓存。内部名字含 Fresh 的包装最终也调用该检查,不能仅凭方法名认定必然重新联网。
83
+
84
+ resolve 仅在传入 Ownership checker 时查询共识,先尝试同一持久快照,并核对展示名片与观察的一致性;本地命中返回 `cached=true`。`ownershipTtlMs`/对应语言 TTL 选项不排在有效本地共识命中之前,不能据此强制失效。无本地命中时保留已有并发合并及错误映射。
85
+
86
+ ## 4. Owner 摘要观察与失效传播
87
+
88
+ NS 通过 `X-AUN-Owner-MD-SHA256` 返回 owner.md 摘要。Gateway 在 `agent_md_etags` 主体条目和消息发送者元数据透传 `owner_md_sha256`,SDK 在已有元数据吸收路径中处理;这不是新增 RPC、事件订阅或独立轮询协议。
89
+
90
+ 新摘要与当前观察不同时,递增 `observation_version` 并清除不匹配快照。agent.md ETag/正文、missing、Ownership 完成事件等原有失效源继续生效;不要用 Owner 摘要替代 agent.md 自身版本检查。
91
+
92
+ 异步查询开始与结束都绑定观察。ETag 相同但观察代次已变化、存储根切换、身份切换或旧查询被替代时,旧结果不能覆盖新状态;持久化失败同样不留下有效内存共识。
93
+
94
+ 观察信息依赖后续流量携带,未观察变化不构成远端实时无变化的证明。本地快照复用与服务端的权限、证书及写入 CAS 是不同职责,不能将缓存命中扩写为新的写授权。
95
+
96
+ | SDK | 查询与存储落点 |
97
+ | --- | --- |
98
+ | Python | [client.py](../../python/src/aun_core/client.py) `check_ownership_consensus`;[aid_store.py](../../python/src/aun_core/aid_store.py) `_resolve_ownership`;[agent_md.py](../../python/src/aun_core/agent_md.py) `local_ownership_consensus`/`observe_ownership_meta`/`save_record` |
99
+ | Node TS | [client.ts](../../ts/src/client.ts) `checkOwnershipConsensus`;[aid-store.ts](../../ts/src/aid-store.ts);[agent-md.ts](../../ts/src/agent-md.ts) `localOwnershipConsensus`/`observeOwnershipMeta`/`cacheOwnershipSnapshot` |
100
+ | Browser JS | [client.ts](../../js/src/client.ts)、[aid-store.ts](../../js/src/aid-store.ts)、[agent-md.ts](../../js/src/agent-md.ts) 的对应异步方法,保留浏览器存储代际 |
101
+ | Go | [ownership_v21.go](../../go/ownership_v21.go) `CheckOwnershipConsensusWithOptions`/`ownershipV21LocalConsensus`;[aid_store.go](../../go/aid_store.go);[agent_md_manager.go](../../go/agent_md_manager.go) |
102
+
103
+ ## 5. 配套 NS 的共识读取优化
104
+
105
+ 普通共识读取移除原排队门槛,结果短缓存最长 **5 秒**,并受签名、证书材料和权威证据期限收紧。缓存保留依赖 AID、Owner 文件内容和观察信息;相关名片、Owner 文件或证书变化时必须失效,不能只按目标 AID 保存一个永不过期布尔值。
106
+
107
+ 保留 NS 验链缓存和既有材料验证,不为取消排队而省略安全检查。owner.md 条件读取及内容复用减少重复读取,避免沿用重复 HEAD→GET→HEAD 的完整往返;冷缓存及失效后的联机查询仍可能调用配套服务。
108
+
109
+ NS 的短 TTL 与 SDK 无固定 TTL 的观察缓存不可混为一层;Gateway 提供的证书证据和 NS 自身验链缓存也不等于最终共识结果。此处只描述当前单实例实现,不承诺多副本失效传播或大量 AID 的实测加速比。
110
+
111
+ 主要落点为 [agentmd.go](../../../extensions/services/nameservice/go/internal/httpserver/agentmd.go)、[agentmd_cache.go](../../../extensions/services/nameservice/go/internal/httpserver/agentmd_cache.go)、[ownership.go](../../../extensions/services/nameservice/go/internal/httpserver/ownership.go)及 [ownership_certificate.go](../../../extensions/services/nameservice/go/internal/httpserver/ownership_certificate.go)。
112
+
113
+ ## 6. 历史验签与新签证书策略
114
+
115
+ ### 6.1 历史文件验证
116
+
117
+ 已有 owner.md/agent.md 的主签与附签接受 `active_signing` 或 `verify_only`。生命周期只是材料检查的一项,仍核对角色、目标与签署者 AID、指纹、签署时刻、有效期、信任链、撤销/OCSP 和权威证据新鲜度;其他生命周期不能因签名字节正确而放行。
118
+
119
+ NS 同步采用这一白名单,不再额外要求 Gateway 证据中的 `active_signing` 布尔值必须为真。不能将其解释为关闭 Gateway 材料来源或撤销检查。
120
+
121
+ ### 6.2 新签路径不能借历史缓存放行
122
+
123
+ 新生成 owner.md/agent.md 必须使用 `active_signing`,覆盖绑定、释放、转移、群/组织双文件发布及清理。校验必须发生在保存新签文件或上传之前,主签与附签均须满足相应新签约束。
124
+
125
+ TS/JS 的 `requireActiveSigning`、Python 的 `require_active_signing` 和 Go 的对应验证参数区分验证意图;历史验证默认允许 verify_only,新签调用显式开启限制。限制须在历史验证缓存命中前检查,不能从缓存直接返回成功而漏验新签资格。
126
+
127
+ 四端核心落点为各自 `ownership-v21.ts`/`ownership_v21.py`/`ownership_v21.go`,并核对 `auth.ts`、Python 证书材料解析,以及 Client 群/组织直接签名后保存或上传的入口。移植时只改历史材料白名单不够,还须覆盖这些独立新签入口。
128
+
129
+ ## 7. UDP 租约与连接状态机
130
+
131
+ ### 7.1 准入与通知集合
132
+
133
+ 保持双能力严格协商、主长连接、空闲时长及忙碌检查;已知 human 保持 WS。待处理 Pull、peer 目录、恢复工作和后台尾 ACK 均须排空,并在 prepare/commit 前重检,避免异步准备期间新增工作仍进入待机。
134
+
135
+ Gateway 在已协商 UDP 的主 long 连接认证时,对缺失、`null`、`[]` 或全空白通知订阅归一化为全部可唤醒事件,prepare 返回实际 `event_subscriptions`。恢复认证及首次唤醒失败后的当前普通重连均写回该快照,主动关闭、身份切换和成功连接后清理。显式包含不可恢复事件仍拒绝;不要混用 Bus 的 EventService 订阅或跳过能力声明。
136
+
137
+ ### 7.2 匹配回复后先改周期,再改期限
138
+
139
+ 保持原包认证、standby 标识、epoch、序列和重放检查;心跳回复还必须匹配当前在途请求及有效等待窗口。仅正 `heartbeat_interval_ms` 更新策略,之后才按新周期计算租约,下一轮继续 ±20% 抖动。
140
+
141
+ 有效租约以服务端剩余期限和当前心跳周期 2.5 倍取较短值,并受 ticket 到期时间限制。各语言沿用既有单调时钟和发送/接收时间基准,不能把墙上时钟与单调截止时间混用。
142
+
143
+ 移除固定约 15 分钟对账唤醒和“连续三次心跳超时”判定。未能及时续租时由租约/ticket 期限恢复 WebSocket 并进入冷却;有效心跳可续租,业务请求及服务端有效提示继续触发唤醒。并发唤醒合并、关闭代际和原请求超时/取消边界继续保留。
144
+
145
+ UDP 不携带消息正文;`WAKE_ACK` 不推进消息消费、不延长业务 TTL。恢复连接后继续原同步及 ACK 流程,不重放已发出的非幂等写请求。
146
+
147
+ | SDK/服务 | 实现与回归入口 |
148
+ | --- | --- |
149
+ | Python | [udp_standby.py](../../python/src/aun_core/_client/udp_standby.py)、[test_udp_standby.py](../../python/tests/unit/test_udp_standby.py) |
150
+ | Node TS | [udp-standby.ts](../../ts/src/udp-standby.ts)、[udp-standby.test.ts](../../ts/tests/unit/udp-standby.test.ts) |
151
+ | Go | [udp_standby.go](../../go/udp_standby.go)、[udp_standby_test.go](../../go/udp_standby_test.go) |
152
+ | Gateway | [udp_standby.go](../../../extensions/services/gateway/go/internal/httpserver/udp_standby.go)、[udp_standby_test.go](../../../extensions/services/gateway/go/internal/httpserver/udp_standby_test.go) |
153
+
154
+ ## 8. 语言专属交付与身份修复
155
+
156
+ Node 交付引擎在同群 namespace 保存多条 inline 待 ACK 记录,累计水位只完成已提交项,不能因确认更高 seq 而删除尚未提交的记录。已确认水位可完成同代际中尚未发出的后台 ACK,在线 P2P 提交覆盖补拉目标时减少重复 Pull,但仍保留未确认水位的 ACK 责任。
157
+
158
+ 核对 [delivery.ts](../../ts/src/client/delivery.ts)、[rpc-pipeline.ts](../../ts/src/client/rpc-pipeline.ts)和 [v2-e2ee.ts](../../ts/src/client/v2-e2ee.ts)中的 namespace、身份/连接代际及已提交水位。此修复只记作 Node 本版增量,不要求 Browser 复制其内部任务结构。
159
+
160
+ Go [org_facades.go](../../go/org_facades.go)在组织凭据续期更新证书前复制 identity map,避免改写其他路径已经持有的身份快照。沿用现有存储格式及公开续期入口。
161
+
162
+ ## 9. 定向回归与证据边界
163
+
164
+ | 范围 | 现有测试入口 | 验收重点 |
165
+ | --- | --- | --- |
166
+ | 大事件 | 四端 pubsub client/service/rate/channel 测试 | 超过 64 KiB、完整报文预算、无透支及完整计费、TTL/总容量回收 |
167
+ | 持久共识 | 四端 Ownership/workflow、AIDStore 测试 | 重建 Client/存储恢复;check 与 resolve 命中;忽略 force;非共识联机 |
168
+ | 观察与并发 | 四端 agent-md/Ownership 测试 | Owner 摘要、ETag 往返、正文变化、missing、身份/存储根切换、旧查询和写入失败 |
169
+ | 证书 | 四端 Ownership/workflow、Client 实体发布专项;NS httpserver | verify_only 历史主签/附签;新签保存/上传前拒绝;缓存命中不绕过限制 |
170
+ | NS | `internal/httpserver` 缓存及 Ownership 测试 | 短 TTL、证据期限、依赖失效、验链缓存保留及条件读取 |
171
+ | UDP | 上节三端及 Gateway 现有测试 | 空订阅、显式不支持订阅、匹配回复、新周期先应用、租约到期、准备期间新增工作 |
172
+ | 专属修复 | Node delivery/v2-e2ee;Go 组织凭据测试 | 同群多 inline、提交与 ACK 水位、冗余任务、旧身份快照 |
173
+
174
+ 既有记录见 [parity 的核验范围](../../python/CHANGES_FOR_PARITY.md#v0536):Ownership 回归 Node 460 项、Browser 364 项、Python 399 项及三端实体专项各 3 项通过;Go Ownership/Entity 定向回归及 vet、NS httpserver 全包测试及 vet、TS/JS 类型及 Python 语法检查通过。这些是此前阶段的记录,本次文档整理不重新宣称执行。
175
+
176
+ 本次只校验两份指南及索引的一致性、链接和历史文档保留情况;未运行功能全量、容量对比、线上部署、公网/Docker/浏览器 live/跨域 E2E 或 Mail 整体验收,亦未修改或构建 Rust。
@@ -1140,13 +1140,13 @@ await client.call("stream.close", {"stream_id": stream["stream_id"]})
1140
1140
 
1141
1141
  ## AID 空闲 UDP 待机(测试能力)
1142
1142
 
1143
- Python、TypeScript/Node.js 与 Go SDK 支持独立 AID 实例的 UDP 待机,浏览器 JS 与本期暂不移植 UDP 的 Rust SDK 保持 WebSocket。具有待机控制器的主长连接通过 `auth.connect.capabilities.udp_standby_v1=true` 声明能力;Gateway 默认关闭,响应 `capabilities.udp_standby_v1` 表达当前实际可用性,只有 `negotiated_capabilities.udp_standby_v1` 与 `udp_standby.enabled` 均严格为布尔 `true` 才启用,缺失、`false` 或字符串 `"true"` 保持 WS;短连接和辅助连接不声明。客户端初次上线仍建立 WS 并正常认证、检查和补拉,通过双向空闲与在途任务门禁后才释放 WS。Node 使用内置 `node:dgram`,无需新增运行依赖。原定 Ubuntu Docker 单域 11 场景已分轮通过,新增动态心跳与 human 准入仍待增量实机验证,容量未验。
1143
+ Python、TypeScript/Node.js 与 Go SDK 支持独立 AID 实例的 UDP 待机,浏览器 JS 与本期暂不移植 UDP 的 Rust SDK 保持 WebSocket。具有待机控制器的主长连接通过 `auth.connect.capabilities.udp_standby_v1=true` 声明能力;Gateway 启动与 Control 缺省允许待机,实际仍须有可用 listener 和公告地址。只有 `negotiated_capabilities.udp_standby_v1` 与 `udp_standby.enabled` 均严格为布尔 `true` 才启用,缺失、`false` 或字符串 `"true"` 保持 WS;短连接和辅助连接不声明。客户端初次上线仍正常认证、检查和补拉,无在途 RPC、交付、补拉与后台尾 ACK 后才允许释放 WS;`background_sync=false` 保持 WS。Node 使用内置 `node:dgram`,无需新增运行依赖。历史实机结果与当前版本验证边界见实施计划,容量未验。
1144
1144
 
1145
1145
  准备阶段通过 `AIDStore.resolve(...)` 的 `agent_md.frontmatter.type` 识别自身 AgentMD 类型;已知 `human` 保持 WS,未知沿用原准入,不以注册意图替代本次 AgentMD 结果。UDP 心跳不查询 AgentMD。
1146
1146
 
1147
- `HEARTBEAT_ACK` 正文固定为 `lease_remaining_ms:uint32 + pending_generation:uint64 + reason_mask:uint32 + heartbeat_interval_ms:uint32`,共 20 字节,其他报文结构不变。Gateway 每次收到有效 HEARTBEAT 都返回当前周期 T 并按 4T 续租,SDK 按 T 的 ±20% 抖动安排下一次心跳;动态配置更新不追溯缩短已发租约。SDK 连续 3 次响应超时后恢复 WS;默认 T=25 秒、单次等待 5 秒,服务端正常窗口 100 秒,授权、票据或目录期限可更早到达。正常切换不产生应用离线回调,任一有效 WS/UDP 在线即保持应用在线;未新增切换完成回调或公开字段。
1147
+ `HEARTBEAT_ACK` 正文固定为 `lease_remaining_ms:uint32 + pending_generation:uint64 + reason_mask:uint32 + heartbeat_interval_ms:uint32`,共 20 字节。默认业务空闲 300 秒、恢复后最短活动期 60 秒;T=25 秒、单次 ACK 等待 5 秒,心跳按 T±20% 抖动。有效租约最多 2.5T(默认 62.5 秒),并受票据、授权和目录期限限制;未续租到期恢复 WS,没有连续三次超时门槛。普通 ACK 只续租,不按固定 15 分钟对账唤醒;兼容字段 `reconcile_interval_ms` 不驱动周期恢复。票据默认最长 1800 秒,普通心跳不无限延期。正常切换不产生应用离线回调,任一有效 WS/UDP 在线即保持应用在线;未新增切换回调或公开字段。
1148
1148
 
1149
- 应用仅在确定不依赖瞬时通知时,显式选择可恢复事件;以下示例改变服务端事件过滤,不适用于需要全事件的应用:
1149
+ 协商 UDP 的主 long 连接在认证时将通知订阅缺失、`null`、`[]` 或全空白集合归一为全部 12 个可唤醒事件,从首次 WS 事件路由生效。应用需要缩小过滤时,可用既有接口选择子集:
1150
1150
 
1151
1151
  ```python
1152
1152
  await client.connect()
@@ -1155,11 +1155,11 @@ await client.call("event.subscribe", {
1155
1155
  })
1156
1156
  ```
1157
1157
 
1158
- TypeScript 使用 `client.call()`,Go 使用 `client.Call(ctx, ...)` 调用同一 RPC。`event.subscribe` / `event.unsubscribe` 的 `subscribed` 返回完整过滤集合;默认全事件、queue、流式和非白名单事件会话继续保持 WS,SDK 不自动缩窄已有订阅。TypeScript/Node 可通过 `connect({udp_standby: false})` 禁止本次连接声明该能力;不要将该选项直接套用到其他 SDK。
1158
+ TypeScript 使用 `client.call()`,Go 使用 `client.Call(ctx, ...)` 调用同一 RPC。`event.subscribe` / `event.unsubscribe` 的 `subscribed` 返回完整过滤集合;显式含非白名单事件、queue、流式或服务注册的会话保持 WS。需要默认全事件 WS 语义的 Node 应用可用 `connect({udp_standby: false})` 禁止本次连接声明该能力;该选项不直接适用于其他 SDK。未协商 UDP 的连接保留原订阅语义。
1159
1159
 
1160
1160
  进入待机后,`call`、消息发送、认证刷新等真实网络需求会立即恢复 WS,多个并发调用共享恢复过程,各自保留原 deadline 与取消语义;缓存命中的本地读取不唤醒。服务端消息提示也通过恢复 WS 后的原 Pull/ACK 流程处理。WAKE_ACK 不代表业务消费,UDP 不发送正文、不延长消息 TTL、不重放已经发出的写请求。
1161
1161
 
1162
- 为支持连续待机,SDK 使用 `gateway.standby.prepare` 返回的 `event_subscriptions` 权威快照,在恢复 `auth.connect.options.event_subscriptions` 中提交;Gateway 从新会话首次事件路由起应用该过滤。未传字段仍为原全事件语义,显式 `[]` 为无事件。应用不需要每次唤醒后手工重新订阅,也不应自行重放待机票据或认证签名。
1162
+ SDK 使用 `gateway.standby.prepare` 返回的 `event_subscriptions` 权威快照,在恢复 `auth.connect.options.event_subscriptions` 中提交;首次唤醒失败后的当前普通重连仍保留快照,成功连接、主动关闭或身份切换后清理。空集合按全部可唤醒事件处理。应用无需每次唤醒后重新订阅,不应重放待机票据或认证签名。
1163
1163
 
1164
- `disconnect()` / `close()` 停止本实例的待机与自动恢复,不影响同主机其他 AID。UDP 验证失败、连续无应答、租约/票据到期或 Gateway 故障时回 WS 并遵守冷却与原重连限制;UDP 不能唤醒已退出的进程。协议、事件白名单、错误原因和部署方式见 [Gateway 连接模式 §3.10](../../../docs/AUN文档/AUN协议/03-Gateway-连接模式.md#310-aid-空闲-udp-待机测试能力),状态机与验收边界见 [详细设计](../../../docs/AUN文档/AID空闲UDP待机详细设计.md)。
1164
+ `disconnect()` / `close()` 停止本实例的待机与自动恢复。UDP 验证失败保留原 WS;已待机的 socket 故障、有效租约或票据到期时恢复 WS,故障冷却默认 300 秒;旧 socket 回调不得影响新代际。prepare 阶段 WS/UDP 可短暂并存,恢复通常先关 UDP 再建 WS;同 AID 不同设备/slot 可分别保持 WS 与 UDP。普通 ACK 不唤醒,WAKE、带 pending/reason 的 ACK、本地 RPC、续期需求及网络故障可唤醒。UDP 不能唤醒已退出的进程。协议与部署见 [Gateway 连接模式 §3.10](../../../docs/AUN文档/AUN协议/03-Gateway-连接模式.md#310-aid-空闲-udp-待机测试能力),序列图与状态图见 [详细设计](../../../docs/AUN文档/AID空闲UDP待机详细设计.md)。
1165
1165