Files
dsh_ai1net_server/docs/覆盖网络/覆盖网络_功能整体完成情况报告_20260918.md
T
admin ce8e6ceed9 chore(工作区): 纳入版本控制基线(回收 411 MB 过程产物)
回收 411 MB(470 M → 58.8 M),全部经回收站,可恢复:
- 待清理/(146.2 M,含 relay 分片 128 M 与 42 项过程目录)
- tmp/(32.4 M,按接续棒命名的过程临时区)
- .workbuddy/tmp/(39.5 M)
- 4 份 workbuddy.db 冗余副本(101 M,09-23 事故的坏副本 / 抢救产物)
- tmp/im16/gw/centrifugo 二进制(63.9 M,可重下)+ 缓存残留

入库范围:常驻规则(CODEBUDDY.md / README.md / state.py)、在途接续入口与
接续包、docs/、交付物/、交接单/、归档/、scripts/、.codebuddy/、
.workbuddy/memory/;共 398 件,其中 >60 KB 的 26 件全为文档。

排除(.gitignore):tmp/、待清理/、运行态日志与缓存、*.db 与 DB 备份整目录、
打包二进制(*.tar.gz / *.tgz)、记忆修复前备份。
2026-09-24 07:51:03 +08:00

281 lines
22 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 覆盖网络 · 功能整体完成情况报告
> **报告日期**:2026-09-18 08:2x | **性质**:整体完成度 + 全景说明(背景目标 / 技术路线 / 架构 / 功能特性 / 应用场景 / 性能与安全评估 / 潜在风险)
> **单一来源**:工作区根 `接续入口_覆盖网络线_20260916.md`(唯一入口)+ `参数表_覆盖网络_20260917.md`(唯一参数表)+ 各序交接单
> ⚠️ **引用的都是实测值**;凡未实测的一律标"未验证",⛔ 不编数。
---
## 0. 完成度判定(先给结论)
| 维度 | 判定 | 证据 |
|---|---|---|
| **功能主体** | ✅ **全部开发完成并落地生产** | 序 ①–㉛ 全收官(含单 A「退出路径不杀实例」、单 B「组密钥加密」) |
| **在册红项** | ✅ **0** | 探针 `OBS-01..23` ⇒ **23 PASS / 0 SKIP / 0 FAIL(rc=0)** |
| **待测项** | ✅ **0 项** | 参数表 §7(与表内 `待测` 单元格一一对应) |
| **待拍板项** | ✅ **空** | 入口 §4(2026-09-17 20:2x 三项全拍板;23:3x 又一轮三问全答复) |
| **部署形态** | ✅ 两机生产运行 | 47(Manager + `w-47`)/106(`w-106`),relay 各一台(只绑回环 `20080`) |
**⇒ 一句话**:**覆盖网络线的功能开发已全部完成并落地生产**,线内**在册红项为零**、**无待拍板项**,当前处于 **⏸️ 线内可停**状态(待真实信号再启)。
**⚠️ 三项"不算未完成"的如实说明**(避免被误读为缺口):
1. **C 档「systemd scope 单一真相源」** —— 用户 2026-09-17 23:3x **明令"登记为架构目标、本阶段不进执行"** ⇒ 属**有意延后**,非缺口。
2. **§10-5 `Ed25519→X25519` 派生预研** —— 服务对象是回头条件 7「规模上来了要自动分发组密钥」⇒ **触发条件 = 规模上来**,⛔ 不是当前执行项;本条**本轮未测**(不在写死主题内)。
3. **档案 112「只做三件事」的第三件「游戏服放 L1」** —— 属**部署形态建议**,未见落地记录;前两件(presence、块级内容寻址)✅ 均已完成。
> ⚠️ **取证提示**:`dsh-server-docs/BRIEF.md` 最后人工核对 = **2026-09-16 10:5x**,其中「归档编号至 112」「覆盖网络线后续待排期」等行**已过期**(现核归档号 **130**)⇒ 涉及覆盖网络线的现行事实**以入口文件为准**。
---
## 1. 背景目标
### 1.1 要解决的问题
多租户 DSH 平台的用户设备散落在**服务器 / 家宽 / 共享 IP / 移动网 / 企业网 / VPN** 等异构网络里。需求 = 让**同一个人的多台设备**、以及**被授权的他人设备**能够互通,且**全球可接入**、**规模化时不产生流量风暴**。
### 1.2 目标形态(定性)
- 任何用户在任何网络里的设备,都能与自己的其他设备、以及授权的他人设备互通;
- **全球可接入**;
- 规模上去后**网络不产生风暴**(这是本线最核心的非功能目标)。
### 1.3 已锁定的边界与口径(用户拍板,⛔ 不许再上抛)
| # | 口径 | 含义 |
|---|---|---|
| 1 | **方案只做技术实现** | 跨境数据合规由使用者自行考虑 ⇒ 选型不为合规让路、跨境不设限、⛔ 不把合规当前置 |
| 2 | **单机自用 ≠ 不需要互联** | 「单机用也要互联,这正是建立覆盖网络的目的」⇒ **租户维度收窄 ≠ 网络维度收窄** |
| 3 | **按异构设计** | 中继按 **45% 设计 / 55% 留余量**(⛔ 不是同构假设的 15%);**必须补 443/TCP 兜底**;有公网 IP 者升格为**中继候选** |
| 4 | **权威状态单点** | 归属 / 租约 / 骨干资格**只能控制面写**;会合 / 中继**可多实例** |
| 5 | **形态默认** | **单机自用为默认**;"当服务器给他人用"的多人维度**已放弃** |
| 6 | **游戏重点** | **MMORPG(2D/2.5D)/ MUD / 传奇类** ⇒ 判定上修为"最匹配",⛔ 非 3D 强实时竞技 |
---
## 2. 技术路线
### 2.1 总路线:照抄成熟做法,不自创
> 判定原话:**「有完整可循的工程路径 —— 这套东西在 Tailscale / ZeroTier / Nebula / libp2p / BitTorrent 上已被反复验证,关键是照抄它们踩过的坑,而不是自己发明。」**
### 2.2 优先级:先"只做三件事",再铺开
| 序 | 三件事 | 状态 |
|---|---|---|
| 1 | **presence(节点在线态)** | ✅ 已完成(序⑲ 落地,`OBS-13..16` 四判据) |
| 2 | **块级内容寻址** | ✅ 已完成(序㉔ 落地,`OBS-17`) |
| 3 | **游戏服放 L1** | ⚠️ 属部署形态建议,未落地 |
### 2.3 关键实现取向(已定,非选型题)
- **自研 relay**(⛔ 不走第三方选型)⇒ 两台:47 + 106,**只绑回环 `20080`**;
- **⛔ 不做打洞实现**(打洞失败直接降级中继;不反复重试);
- **worker 永远只拨出**(106 入站 = 0)⇒ 不新增公网监听口;
- **内容源优先级链**:`local → peer → edge → region → origin`,**唯一解密点**在链的统一返回点;
- **块 id 口径 β′**:`sha256(密文)` 前 32 hex(组内稳定、组外不可预测);
- **加密档位**:**C 组密钥加密**(同一 `(network, group)` 共享一把 AES-256-GCM 对称密钥);
- **确定性(收敛)加密**:`iv = HMAC(key,"iv"‖plain)` 前 12 B、`k = HMAC(key,"k"‖iv)`、`AAD = "<groupKey>|<epoch>"` ⇒ **同组同明文密文逐字节相同** ⇒ 序㉔ 的"按哈希共享块"**不退化**。
---
## 3. 架构
### 3.1 五层架构(设计基线)
| 层 | 职责 | 关键要求 |
|---|---|---|
| **控制面** | 身份、授权、归属/租约、网络地图(netmap)分发 | **承载几乎零流量**;**挂了不影响已建立的数据面**(节点内存缓存状态) |
| **会合层** | 交换候选地址、协助打洞、签发骨干目录 | 多区域、多实例、可缓存 |
| **骨干 / 中继层** | 打洞失败时转发密文;可选做区域汇聚 | **限额资源**(预约制 + TTL + 配额),**不可无限使用** |
| **数据面** | 端到端加密的节点间直连/中继传输 | 直连优先;**空闲不建连**;扇出设上限 |
| **观测层** | 路径类型(直连/中继)、时延、重连次数、带宽 | 没有它,容量规划与排障只能靠猜 |
### 3.2 本平台的实际落地形态
```
┌───────────────────────────────┐
│ 控制面 = 47 的 Manager(dshs) │ ← 权威状态单点
│ PG13 127.0.0.1:15432 │ 归属/租约/骨干资格
└────────────┬──────────────────┘
│ 拨出式(Manager 拨号通道,周期重解析)
┌────────────▼──────────────────┐
│ 会合/目录:/dshs-overlay/ │ ← 签名目录(可信签名者 1)
│ bootstrap(只绑回环 3080) │ 候选链 3 条
└────────────┬──────────────────┘
│
┌────────────────────────┼────────────────────────┐
│ │ │
┌───────▼────────┐ ┌────────▼───────┐ ┌────────▼───────┐
│ relay@47 │ │ relay@106 │ │ 443/TCP 兜底 │
│ 只绑回环 20080 │ │ 只绑回环 20080 │ │ (nginx 反代) │
└───────┬────────┘ └────────┬───────┘ └────────────────┘
│ 转发密文(中继不解密) │
┌───────▼────────────────────────▼───────────────────────────────┐
│ 数据面:w-47(19100) │ w-106(19000) │ 用户实例 20000 / 21000 │
│ 内容面:local → peer → edge → region → origin(唯一解密点) │
└────────────────────────────────────────────────────────────────┘
│
┌────────────▼──────────────────┐
│ 观测层 = scripts/overlay-probe.cjs │
│ OBS-01..23(唯一取数来源=参数表) │
└───────────────────────────────┘
```
**形态要点**:47 = Manager(单元 `dshs`)**兼**本地 Worker `w-47`;106 = Worker `w-106`。⚠️ 47 兼作 Worker 是**有意设计**。⚠️ 106 入站 = **0**(worker 永远只拨出)。⚠️ nginx 归**宝塔面板**托管 ⇒ `is-active nginx` = `inactive` **是正常态**,⛔ 别拿它判死活。
### 3.3 密钥模型(四层)
```
离线根 ──► 47 在线签名者 ──► 每机节点密钥 ──► 会话
/etc/dshs/overlay-signer-key.pem
公钥 bad464dfd53048efe7b8531029b3030eda49bc12930703d3a2a8f60e3a7daddf
```
**组密钥凭据** = 签 `(network, group, epoch, keyId)` 四元组,⛔ **载荷不含密钥本体**。组密钥铺两机 `0600 root:root`。**双 epoch 过渡窗口** `CONTENT_EPOCH_GRACE_MS`(缺省 24 h)⇒ `previous[]` **只解不写**,超窗 ⇒ `epochExpired +1` + `decryptRejected +1`。
---
## 4. 功能特性
### 4.1 十二项内建特性 × 落地对账
| # | 特性(设计基线) | 落地状态 |
|---|---|---|
| 1 | 控制面 / 数据面彻底分离 | ✅ 控制面挂 → 已建连接不断(`LeasedSpawner` 远端实例寿命长于任何单个 Manager 副本) |
| 2 | 先中继、再升级直连 | ✅ relay 中继可用;直连升级属"打洞未做"范围(→ 特性 3) |
| 3 | 直连成功率作为一等指标 | ⛔ **不做打洞实现**(用户拍板范围外 ⇒ 判死直接降级中继) |
| 4 | 空闲不建连(懒建连) | ✅ 空闲会话不建连;`idle-reap` 间隔 60 s / TTL 7 天 / 每 host 上限 4 |
| 5 | 中继是稀缺资源,要准入 | ✅ **45% 设计 / 55% 余量** + 软门 `utilMaxPct=70` + `utilRefused` 计数 |
| 6 | 失败要能"判死" | ✅ 终态早退(`waitUpOnStatus`)+ `RELAY_FAILOVER_DEADLINE_MS` 内侧 |
| 7 | 端到端加密 + 中继不解密 | ✅ **组密钥 GCM**:中继只见元数据(谁连谁、量多大) |
| 8 | 一机一身份 + 可吊销 | ✅ `identityRequired=true` / `trustedSigners=1` / `revokedHosts` 清单 |
| 9 | 自报网络画像 | 🟡 部分(路径类型/在线态/端口已入观测;NAT 类型 / VPN 检测见特性 12 口径) |
| 10 | 内容寻址 + 分级缓存 | ✅ `local → peer → edge → region → origin` 五档链 + 块级寻址 `β′` |
| 11 | 统一限流与退避参数表 | ✅ **参数表 `参数表_覆盖网络_20260917.md` = 唯一取数来源**(探针脚本内零魔数) |
| 12 | 可见性默认最小 | ✅ 接入 ≠ 可见;⚠️ VPN/代理**检测即降级不重试** |
### 4.2 已落地的功能清单(按序)
| 序 | 功能 | 关键判据 |
|---|---|---|
| ①–⑥ | 可行性评估 / 架构复盘 / 瓶颈落地 / 骨干层 / 百台·千台推演 / 游戏专项 | 10 份规划文档(归档 **103–112**) |
| R0–R5 | relay 最小闭环 → 韧性选点 → 常驻 + 443 暴露 → Manager 拨号通道 | `OBS-01..12` |
| ⑦–⑩ | 失败切流(候选集不再退化单点)+ 冷却语义拆分(一跳豁免 / 终态早退) | 演练幕 `--scene 4/4b/4c`;`[relay-switch]` 行数 ≡ `switches` |
| ⑲ | **presence(节点在线态)**:首帧即全量、稳态零帧率、在线态不撒谎 | `OBS-13..16` |
| ㉑–㉒ | 观测口径与在册缺陷(P-1 门翻转 / P-2b 三级候选链) | `OBS-09` |
| ㉔ | **块级内容寻址**:五档源链 + 块级 store + 唯一解密点 | `OBS-17` |
| ㉕–㉚ | **实例逐步拉起**(启动认领 + TCP 探活判孤儿) | `OBS-18` |
| ㉖–㉚ | **骨干稳定选路与 jitter 选路** | `OBS-19`、`OBS-20` |
| ㉗ | **每连接候选数 ≥ 2**(E3 路径多样性) | `OBS-21`(两路径 `count=3`) |
| ㉘ 单 A | **退出路径不杀实例**(三处 `teardown()` 同改) | `OBS-22`(静态守卫 + 认领面自洽) |
| ㉘ 单 B | **组密钥加密**(GCM 确定性) | `OBS-23`(确定性 / 共享 / 明文不出现 / 权限=600) |
### 4.3 观测面(23 条判据 = 功能可断言面)
`OBS-01..23` 覆盖:容量与在册(01/02/20)|身份与授权(03/04/05/07)|判别器三件套(06)|端点表与实例面(08/09)|门户与暴露面(10/11)|relay 内存(12)|presence(13–16)|内容分发(17)|逐步拉起(18)|抖动选路(19)|候选数(21)|退出不杀实例(22)|组密钥加密(23)。
---
## 5. 应用场景
| 场景 | 匹配度 | 说明 |
|---|---|---|
| **MMORPG(2D/2.5D)/ MUD / 传奇类** | ⭐ **最匹配** | 核心简化:**玩家之间不需要互联,中继按"服数"算**;带宽 每玩家 **2–20 KB/s**、jitter **< 20 ms** |
| **群聊 + agent** | ⭐⭐ 高 | 扇出**按预算定义**分档(⛔ 不按人数拍脑袋) |
| **静态资源分发(首屏包)** | ⭐⭐ 高 | 块级寻址 + 五档链 ⇒ **同一份资源全网只取一次**(实测首屏包 11,363,655 B / 11 块) |
| **备份 / 迁移提速** | ⭐⭐ 高 | 主备份用对象存储;跨机搬运走内容面 |
| **多机分布式观测 / 远程运维** | ⭐⭐ 高 | presence + 端点表 + 探针 23 判据 |
| **跨异构网络接入**(家宽 / 移动 / 企业网 / VPN) | ⭐⭐ 高 | 拨出式设计 ⇒ 无需公网入口 |
| ⛔ 3D 强实时竞技 | 低 | 明确**不在**本线目标内 |
---
## 6. 性能与安全评估
### 6.1 性能(全部为本机 / 真机实测,附口径)
| 项 | 实测读数 | 口径 / 备注 |
|---|---|---|
| **加密开销** | 总墙钟 p50 **22.636 → 42.782 ms**、p95 **23.020 → 43.599 ms**(**1.890× / 1.894×**);吞吐 **502.02 → 265.62 MB/s**;密文 **+28 B/块** | 11,363,655 B / 11 块、n=11、单核、页缓存全热、两臂零回源 ⇒ **加密层自身成本**,⛔ 非端到端承诺 |
| **轮换代价** | 冷启动回源 **21,021,572 B = 4.0001 × 包 = 1 × 包/组**;轮换后首轮同值、次轮 **0**;对照腿 **0** | 4 组 × 4 节点夹具 ⇒ 轮换 = **一次完整冷启动** |
| **换址墙钟** | 总 **30.7–34.1 s → 20.9–23.9 s**(检测 15.0–16.6 s + 首试 0.3–5.0 s + 白等 **12.02 → 0.09 s** + 建连 2.7–5.2 s) | 真机 n=5+n=5;`RELAY_FAILOVER_DEADLINE_MS` 30000 内侧 **5/5** |
| **候选路径数** | 两条路径各 **count=3 / hosts=3**(判据 ≥ 2) | `OBS-21` |
| **容量** | `max=7515` / `used=2` / `free=7513` / **利用率 0%**(软门 70%) | `OBS-02` / `OBS-20` |
| **资源占用** | relay RSS **65,432 KB**(阈值 ≤ 800,000 KB);`MEM_PER_HOST_MB = 0.06`(空闲会话斜率) | `OBS-12`;⚠️ **带流量时未测** |
| **presence 帧率** | 稳态 `Δpushed = 0`、在线态陈旧 p95 **11,993 ms**(阈值 ≤ 15,000) | `OBS-13` / `OBS-15` |
| **零回归三件套** | `npm test` **201/200/0/1** | 演练 **12 PASS / 0 FAIL** | 探针 **23 PASS / 0 SKIP / 0 FAIL** | 2026-09-18 08:0x 复核 |
### 6.2 安全
| 项 | 状态 | 证据 |
|---|---|---|
| **中继看不到明文载荷** | ✅ 成立 | 组密钥 GCM;中继只见元数据(谁连谁、量多大) |
| **内容不可推断** | ⚠️ **不成立** | 收敛加密对低熵必然泄露**相等性**(10,000 块 / 100 值域 ⇒ 仅 100 种密文);⛔ **不写"很安全"** |
| **身份强制** | ✅ | `identityRequired=true` / `trustedSigners=1` / 可吊销清单 |
| **密钥不经网络 / 不经 relay** | ✅ | 只走 `0600` 落文件 + `scp`;凭据 **274 B**、逐字核**不含密钥本体** |
| **签名固化** | ✅ | `sign-group-key` 已落 47 **两处正式路径**(⛔ 不靠临时投放脚本);篡改 epoch ⇒ `signature-mismatch rc=1` |
| **明文不出现** | ✅ | `plainScans=1` / `plainLeaks=0`(`OBS-23`) |
| **暴露面零新增** | ✅ | 仅新增回环口;`nft` 多出 **0**;`OBS-11` 多出 **0** |
| **权限只收窄** | ✅ | 全程零 `nft` / `nginx` 命令;密钥文件权限 `47=600 106=600`(错则**失败关闭**) |
| **失败关闭** | ✅ | 组密钥装载六原因码具名:`no-file` / `bad-perms` / `parse-error` / `group-mismatch` / `bad-key` / `bad-epoch` |
| **跨组隔离** | ✅ | 跨组在**认证阶段被拒** + `decryptRejected +1`;`crossGroupDenied` 语义未放松 |
---
## 7. 潜在风险
### 7.1 技术风险(已登记,附回头条件)
| # | 风险 | 影响 | 当前处置 |
|---|---|---|---|
| 1 | **低熵明文的相等性泄露** | 中继可观测内容重复率(非明文) | 已定性量化;⛔ 不声称"很安全";如需更强,须换非确定性加密(**代价 = 放弃块共享**) |
| 2 | **轮换 = 一次全量回源 + 存储翻倍** | 旧 epoch 密文**不自清**(`storeBytes` 5,255,393 → 10,510,786) | 回头条件 8:**轮换必须约在发布窗口**;旧块逐出时延**未量化** |
| 3 | **relay 无 `MemoryMax`** | 只有软口径 `--max-hosts`;极端情况无 cgroup 硬顶 | **有意不动**(加 cgroup ⇒ 新失败模式 OOM-kill,命中 R11);`--max-hosts` 现为 7515、实测非绑定约束 |
| 4 | **孤儿端点条目不幂等自愈** | 重启 worker 后 `OBS-08`/`OBS-09` **必红**,靠"重新登记同端口"覆盖 | 已留档;⛔ 不是"跑一会儿就好" |
| 5 | **引导链缓存有 ≤ 300 s 收敛期** | 切兜底时最长 300 s 延迟 | 已把 300 s 收进参数表;⛔ 不改缓存结构 |
| 6 | **106 引导链不吃目录(agent 面)** | `DSHS_RENDEZVOUS_URL` 被当 relay URL 直接用 | 只记录、⛔ 不顺手撤(撤掉 = 生产回归) |
| 7 | **带流量内存开销未测** | `MEM_PER_HOST_MB = 0.06` 只是空闲斜率;带流每条流最多 1 MB 缓冲 | 回头条件:`--max-hosts` 若重新收紧,**必须先有本数** |
| 8 | **规模上来要自动分发组密钥** | 需新增 `x25519` 或 Ed25519→X25519 派生 ⇒ **属新增密钥类型** | 回头条件 7:**停下报告、另立单**;§10-5 预研**未做** |
### 7.2 运维风险
| # | 风险 | 说明 |
|---|---|---|
| 1 | **密钥文件属主被改** | 本线有"属主被改 ⇒ 实例全崩"先例(R10);密钥/用户目录权限须严格保持 |
| 2 | **106 nginx 归宝塔托管** | 若面板**重建站点**,需复查 `nginx -T | grep dshs-relay`(已写进 conf 头部注释) |
| 3 | **bwrap 版本异构** | **47 = 0.4.0 / 106 = 0.11.0** ⇒ `--perms` 属 0.5+,47 上用了 ⇒ **沙箱起不来 = 所有实例全挂**;要权限**用 `--tmpfs`** |
| 4 | **`--max-hosts` 的 env 陷阱** | CLI 压 env ⇒ 只设 `Environment=` 会被**静默忽略** ⇒ 必须 drop-in 重写 `ExecStart`(现 7515) |
| 5 | **参数表值格必须纯数字** | 夹注 ⇒ `NaN` ⇒ **假红**;探针 `cleanValue()` 会剥 `*` ⇒ 白名单值 ⛔ 别写 `*:443` |
| 6 | **"没装"与"没采到"必须可分** | `journalctl` 原文字节数 **0 = 读取失败**,⛔ 不等于"确无该行" |
| 7 | **持久禁令** | ⛔ 不调 `RELAY_FAILOVER_DEADLINE_MS`|⛔ 不动 `HB_SEC` / burst|🔴 **⛔ 禁用 `COOLDOWN_MS=0`**(实测 121–123 s 无切换) |
### 7.3 安全边界(明确的能力上限,⛔ 不得越界声称)
- **组内成员互信**:同一 `(network, group)` 的成员共享一把密钥 ⇒ 组内**互相可见**是设计前提;跨组隔离成立;
- **中继侧只减不增**:中继只见元数据、不见明文;**但可见性 ≠ 保密性**(相等性泄露见 7.1-1);
- **打洞未做**:所有跨机流量在打洞失败后走中继 ⇒ **中继是可用性单点**(已有 443 兜底 + 3 条候选链缓解);
- **跨境不设限**:按用户口径,**不做**地域封禁 / 数据落地约束(合规由使用者自担)。
### 7.4 规模风险
- 中继按 **45% 设计**;百台画像推演:**L1 10 / L2 30 / L3 需中继 40–55**;对比全互联 4,950 条 vs 星型 100 条;
- 千台 × 11 场景推演中,**瓶颈排序第一 = presence**(已由序⑲ 落地验证);
- ⚠️ 上述为**推演值**,⛔ 非实测;真实规模数据待上线后回归。
---
## 8. 附:证据与单一来源
| 项 | 位置 |
|---|---|
| 唯一入口(状态 / 下一步 / 关键决定 / 回滚点) | 工作区根 `接续入口_覆盖网络线_20260916.md` |
| 唯一参数表(输入参数 / 常量 / 观测阈值 / 待测 / 权限影响) | 工作区根 `参数表_覆盖网络_20260917.md`(§10 指纹 `52e59df229102d5afa8c8bf01a960398`) |
| 十份规划文档(归档 103–112) | `dsh-server-docs/04-调整方案/` |
| 各序交接单(含执行回报 §8 全节) | 工作区根 `交接单_*.md` + `dsh-server-docs/交接单/覆盖网络-序NN-*.md` |
| 观测探针(一条命令) | `scripts/overlay-probe.cjs --table "<参数表路径>"` ⇒ 23 判据 / 退出码 0-1-2 |
| 故障演练 | `scripts/overlay-failover-drill.cjs --scene all --table "<参数表路径>"` |
| 代码仓 | `https://cnb.cool/maogeigei/dsh-shenxian`(镜像原仓 `work.alotbuy.com:maogeigei/dsh_shenxian.git`),HEAD **`09ce76f`** |
> ⚠️ **报告生成时的核对基线**:HEAD `09ce76f` | 探针 **23P/0S/0F** | 归档号现核 **130** | 工作区日志 `.workbuddy/memory/2026-09-18.md`。