feat(overlay): 内容块级寻址 + 实例逐步拉起 + 骨干选路 + 组密钥加密(序24–㉛ 累积同步)

代码
- 内容分发块级寻址:新增 src/net/relay/content/{chunker,store,runtime,source,peer,crypto}.ts
- 组密钥(C 档)确定性加密:AES-256-GCM,块 id β′ = sha256(密文) 前 32 hex;双 epoch 过渡窗口
- 实例生命周期:三处 teardown() 不再杀实例(local/remote/leased-spawner);启动认领 + TCP 探活判孤儿
- 骨干选路:jitter 选路 + endpoint-target;relay client/server/wire/identity/directory/rendezvous/switcher 调整
- 工作台 src/web/server.ts、src/worker/relay-tunnel.ts 装配与候选链观测

脚本与测试
- scripts/overlay-{probe,keyring,jitter}.cjs 更新
- 探针新增 OBS-21(每连接候选数)/ OBS-22(teardown 静态守卫 + 认领面)/ OBS-23(组密钥加密)
- 新增 test/{orchestrator-teardown,orchestrator-rehydrate,overlay-content,overlay-jitter}.test.mjs;relay 两例更新

文档
- 新增交接单:覆盖网络-序24-内容分发块级寻址 / 序25-实例逐步拉起 / 序26-骨干稳定选路与加密
- INDEX.md、交接单/README.md、skills/dsh-auto-handoff-chain/SKILL.md 同步

验收(零回归,2026-09-18 08:0x 复核)
- npm test           201 tests / 200 pass / 0 fail / 1 skipped
- overlay-failover-drill --scene all --table   12 PASS / 0 SKIP / 0 FAIL
- overlay-probe --table                        23 PASS / 0 SKIP / 0 FAIL (rc=0)
This commit is contained in:
admin committed 2026-09-18 08:08:51 +08:00
1 parent 04776af4b1
commit 09ce76f3af
38 files changed
+9133 -211

No files matched your search

+3
View File
@@ -22,6 +22,9 @@
| `T06-模型设置页-多厂家条目可开关.md` | ✅ **已完成并归档**(2026-09-13 23:5x,`craft-session-T06`) | `—`(已释放) | 平台自建「设置 → **模型设置**」:条目**各自开关、可同时启用** + 官方「模型」分区对全角色隐藏 + spawn 时把「已启用条目」落地到实例 `.credentials.yaml` / `settings.yaml` | **代码** `src/db/*`、`src/web/{model-landing.ts,server.ts,routes/auth.ts}`、`ensure-role-profile-patch.cjs`、`poc/business-plugins`(**0.3.11**) + `systemctl restart dshs` + `ensure-biz-plugins --all --restart`;**文档** `README`/`INDEX`/`03-路线图` | ✅ 无阻塞(口径用户已定);证据与判据见 **`04-87`**;⚠️ 本轮**顺手修掉两颗雷**:角色补丁脚本的整文件覆盖会抹掉 admin 另两个平台块、`verify-mem-model` 的陈旧断言 |
| `T07-内置dsh安装路径探测.md` | ✅ **已完成并归档**(2026-09-14 05:0x,`craft-session-installpath` + `craft-session-tailclear`) | `—`(已释放) | 修 **P1 静默失效**:三处把内置 dsh 安装目录写死 ⇒ 在 `npm root -g` = `/usr/lib/node_modules` 的发行版上,厂家目录读空 / 兼容性预检安全网失效 / 目录选择器 import 抛错 | **代码** 新增 `src/web/dsh-install.ts` + 三处调用点(含 `poc/workspace-scoped-picker`)+ 插件 `business-plugins` **0.3.13** / `workspace-scoped-picker` **0.1.5** + build/restart/铺发;**文档** `04-88` + `README` 补 3 个 env | ✅ 无阻塞;**由开源导出会话提出**(它抢不到锁按 R9 停手),源仓独立复核后经用户「确认修改」落地。⚠️ 复核时**发现提出方漏了第 3 处**、且其 env 名是导出侧的 ⇒ 均已纠正 |
| `T08-集群化落地-兼容单例模式.md` | ✅ **已完成并归档**(2026-09-15 18:0x,`exec-cluster-1a`) | `—`(已释放) | 把平台改造成「1 组 Manager(≥2 台,也支持单活)+ N 台 Worker + 共享归属状态」的集群形态;**硬约束 = 全程兼容单例模式** + 每步可单独回滚。**证据**:S0–S7 全绿(冒烟 6/8 与开工基线相同 · 5 个端到端 · lease 单测两后端 10/10)|**真跨机演练**(47 Manager / 106 Worker,跨云)✅|**域名形态访问** ✅|**2026-09-15 17:4x 生产整体切换**(47=Manager+本地 Worker w-47、106=Worker w-106、控制面库=47 的 PG13;存量用户留 w-47、新用户落 w-106;**回滚=删 drop-in**)。⚠️ **残留小项**(已登记 `03-路线图 §二`):`join-worker.sh` 一键装机 · 隧道服务化(心跳重建)· 集中日志/metrics · `smoke-domain` 定性。详见 §9–§16 | **代码**(`src/supervisor/`、`src/db/`、`src/cli.ts`、`src/fs/`)+ **服务器**(**106 另起一套**测试环境;**47 不动**)+ **文档**(本单 + 完工时的 `04-调整方案/101`) | 设计单一来源 = 项目根 `集群化改造方案_Manager-Worker_20260914.md`(19 节);**决策 D1–D5 已定**(双活+支持单活 / 存储可插拔 / 自建 PG / 跨云只当测试床 / 测试环境用 106);⏳ **仅 D6「生产拓扑最终落点」需用户拍板**,且**不阻塞 S0–S5** |
| `覆盖网络-序24-内容分发块级寻址.md` | ⏳ **待执行**(2026-09-17 20:4x 立单) | 🔄 已登记 automation `91251b14-9ee8-42a9-9d89-8559b7af75ed`(**2026-09-17 20:42** 起) | 首屏包冷启动改造:**块级内容寻址 + 同网段 peer 优先**(内容源优先级链 本地→同网段 peer→边缘缓存→分发点→公网源)。**主判据 `E1` = 版本发布时回源字节数 ≈ 1 份 × 组数**。🔴 **必须块级,⛔ 绝不做包级**(包级 = 版本一发即全量重拉风暴) | **代码** `src/net/relay/content/{chunker,store,peer,source}.ts` + `index.ts`/`web/server.ts`/`scripts/overlay-probe.cjs`/参数表;**文档** 本单 §8 | 用户拍板 2026-09-17:「**B 内容分发(块级内容寻址)是否立项:做**」;依据 `覆盖网络_瓶颈落地方案_20260916.md §3`;**§7 前缀 `49d0f405e08c909e18ba6825d1442b9d`** |
| `覆盖网络-序25-实例逐步拉起.md` | ⏳ **待执行**(2026-09-17 20:4x 立单;**待 序㉔ 收口时登记下一棒**) | ⛔ 未登记(等 序㉔ 收口) | Manager(portal)重启后**逐步接管既有实例**,而不是启动即清空。⚠️ **关键事实**:`orchestrator.ts:208` 构造函数里 `cleanAllStaleScopes()` ⇒ 现在**portal 一启动就把全部实例 scope 清掉** ⇒ 本单 = 把「清空」换成「接管」。**主判据 `E1` = 重启后实例数不变** | **代码** `src/supervisor/orchestrator.ts`(`cleanAllStaleScopes` / `cleanStaleScopes` 一带);**文档** 本单 §8 | 用户拍板 2026-09-17:「**Manager 重启后是否自动拉起既有实例:逐步拉起**」;三条硬约束(⛔ 不许删 `cleanStaleScopes(uid)`/⛔ 不许改成"什么都不做"/⛔ 不许"重启后重新 spawn 一遍");**§7 前缀 `d9d48121e68faa00e1da17ad8fea36ad`** |
| `覆盖网络-序26-骨干稳定选路与加密.md` | ⏳ **待执行**(2026-09-17 20:4x 立单;**待 序㉕ 收口时登记下一棒**) | ⛔ 未登记(等 序㉕ 收口) | 骨干节点服务范围落地:**连接稳定高效**(jitter 选路 + 2–3 候选路径 + 中继余量 30%+ + ≤10 成员全互联)+ **数据安全可加密传输**(TLS 已在 + 签名/哈希完整性 + 元数据最小化)。**主判据 `E1` = jitter 更低但 RTT 更高的候选被选中** | **代码** 新增 `src/net/relay/jitter.ts` + `directory.ts`/`switcher.ts`(只加"jitter 劣化即切",⛔ 不改冷却语义)/`server.ts`/`scripts/overlay-jitter.cjs`/参数表;**文档** 本单 §8 | 用户拍板 2026-09-17:「**入口 §4 骨干节点的服务范围:按照连接稳定高效的方式 数据安全可加密传输**」;判定 = **A 起步、口径按 B 的质量标准建设**;**§8 前缀 `dbcbe633aa1aef92f4c35c77fad3ec11`** |
> **🔒 占用怎么声明(2026-09-12 新增,防两会话撞车)**:开工前先**原子占位** ——
> `mkdir 交接单/.doing-<单号>`(`mkdir` 原子:**成功=你拿到;报 File exists=已有人在做 → 停手,别开工**),