Files
dsh_ai1net_server/接续入口_覆盖网络线_20260916.md
T

464 lines
342 KiB
Markdown
Raw Normal View History

# 接续入� · 覆盖网络线(2026-09-16)
> 🔴 **工作区**:E:/ProgramData/AIProject/aliyun-dsh-server —— 2026-09-21 加该字段,供 `state.py` 判定归属:头部该字段 ≠ 本工作区 ⇒ 判为「外�线�并排除出 §2 / �令。
> **这是本工作线的唯一入�。** 新会�先读这一份(约 3 KB),�按需打开下�的文档。
> 详细过程记录在 `.workbuddy/memory/2026-09-16.md` 末尾的「会�接续包�——**�必先读那个 60 KB 日志**。
---
## 0. 当�状�(一��)
> 🆕 **2026-09-19 07:5x 刷新(�㊿ 执行棒 · ✅ 旧域 `alotbuy.com` 已从项目移除(代� / �务端 / 文档技能三层)· ✅ 本线候选链 **5 → 3 �**(两机��)· ✅ 探针 **29 PASS / 0 FAIL / 0 SKIP**(rc=0)· � 判定 =「本线���(⛔ **未登记下一棒**)· 🔴 唯一在册红� = **D8 云安全组**(待你控制��地))**:**一�� = 旧域从此��作为候选入�存在** —— 🔴 **本行�代上一行的「5 ���径**;删掉的两�是「**摘����物��� 47 �一路径**�的**伪多样性**(其中一�还开� `ADDR_OVERRIDES` 直连 IP),**删除��少真实冗余**。**① 唯一载体(未�)** = 47 drop-in `overlay-443fb.conf`:`SEEDS=https://ai1net.com/dshs-relay,https://relay-direct.ai1net.com/dshs-relay,https://106.54.21.172/dshs-relay` + `ADDR_OVERRIDES=relay-direct.ai1net.com=47.77.182.89`;106 `/etc/dshs-worker.env` 第 26 行�值(备份 `.bak-dompurge-20260919-073149`)。**② 🔴 本轮唯一"看��的�" = 二次��控制�**:一次��� bootstrap **�是 5 �** ⇒ 根因 = Manager 把**自己�布的签�目录**缓存在 `/var/lib/dshs/overlay/directory.json`(**��生**���置)且**懒�建** ⇒ 备份 + 删除 + **���一次** ⇒ 得 **3 � / 0 旧域**(`source=seed-directory`,缓存�建 **578 B**)。⛔ **日�改候选链别忘这一步**。**③ 一�"判�撒谎"型�红(已修)** = 演练 `--scene all` 报 **11P/1F**(红在幕4-A「目标�是 47 那��)⇒ 实为**�红**:��**真生效�真切回 47**,�是脚本用**硬编�域�字符串**匹�端点 ⇒ 两处匹�器改读�数表 `DRILL_KILLED_MATCH`(⛔ 域�移类改动**必须�步这个键**)。**④ 验收(原文级)** = 探针 **29 PASS / 0 FAIL / 0 SKIP(rc=0)**(`OBS-21` 两机 `count=3 hosts=3`�全表零 `alotbuy`)|门户 **200**|旧域 **301**(��域映射 `guest.alotbuy.com → guest.ai1net.com`)|relay �传�域一致(裸 GET �域� **404**�带 WS �级头�域� **101** —— �回归)|探针**三处��** md5 `55568f87bfe2dc8e43289c69b4126004`。**⑤ 边界自�** = ⛔ 未 commit / 未 push;⛔ 未动 `nft` / `bwrap` / �� / `DEFAULT_BLOCK_SIZE`;对生产的动作�有**��**(R8 动手�已声明)。**⑥ 残留(本线相关)** = 旧域站点�留为 **301 过渡装置**(仅留 ACME + `/dshs-relay` + `/dshs-overlay/bootstrap` 三�� 301 路径;**退役�件 = 30 天零��**);`relay-direct.conf` / `dsh.alotbuy.com.conf` 属"导�新域 / 兜底"装置 ⇒ **�留**(删除�净�差 ⇒ R11)。**⑦ 姊妹件** = �棒产出 **`调整方案/136-控制�按两�中继�并集-立项交接�.md`**(**�立项�⛔ 未�地**)+ 本棒�地档案 **`调整方案/135-旧域alotbuy.com从项目移除.md`**;�数表 §10 指纹 → **`075a97239c2d1d8a1f442ec6cc787ede`**(2 键值格 + 示例 + 说明;⛔ 零个新增 / 改动生产 env)。**⑧ 🔴 本线唯一在册"未修"项(= 上一行 ⑤ 那�,已被本棒正�立项)** = Manager 对 `via=relay` host 的**�达性�读�一** `DSHS_RELAY_STATUS_URL`(47 中继)⇒ worker 漂到 **106 自家中继**时观测�绿�**平�实例���能 500**(**�㊾ 修了观测��控制�未修**)⇒ 立项�在 **档案 136**(�根因链 7 行 + 先红�绿强制 + 候选 A/B + 验收 E1–E8),**�地�起一棒**。
> �� **2026-09-19 06:1x–06:4x —— �本线任务(域��移 `alotbuy.com` → `ai1net.com`)已�地,但它**直接改写了本线的中继入�**,故在此留一行(详情 ⇒ 本机 `归档/域��移_ai1net_20260919/pending/RUNBOOK-cutover.md §5` + `.workbuddy/memory/2026-09-19.md`)**:**一�� = 线上�务域�切到 `ai1net.com`;两机候选链现为 **5 �**�**主入� = `wss://ai1net.com/dshs-relay`**。** **① 入�列表(🔴 唯一载体 = 47 `/etc/systemd/system/dshs.service.d/overlay-443fb.conf`)** = `ai1net.com`(主)> `alotbuy.com`(旧域·过渡)> `relay-direct.ai1net.com`(443 兜底·新)> `relay-direct.alotbuy.com`(443 兜底·旧)> `106.54.21.172`(第二中继·末�);地�覆盖�步加 `relay-direct.ai1net.com=47.77.182.89`。**② 🔴 踩�(已修 · ⛔ 别�犯)**:该键曾被**��**写进 `/etc/dshs.env`,而 `/etc/dshs.env`(`EnvironmentFile`)会**压过** drop-in 的 `Environment=` ⇒ 生效列表被窄化� 2 ��丢掉 106 那�第二中继 ⇒ Manager ��对 106 建拨�会� ⇒ **归属在 `w-106` 的用户实例�域 500**(`host "w-106" 声明 via=relay 但解��出�点:拒�回�到 endpoint`)。⛔ **该键�在本 drop-in 里改**。**③ 106 侧** = `/etc/dshs-worker.env` 的 `DSHS_RENDEZVOUS_URL` 与 `dshs-relay-client.service` 的 `--url` �由旧域切新域,并补�一份 5 � `SEEDS` ⇒ worker 把**主入��回 47 中继**注册(`w-106` 端点由 `online:false` 转 `true`)。**④ 验收** = 探针 **29 PASS / 0 FAIL / 0 SKIP(rc=0)**(`OBS-21`:`dshs@47` 与 `dshs-worker@106` **� count=5 hosts=5**);实例�域端到端 = `admin.ai1net.com` ⇒ 302 带 `?token=`�`guest.ai1net.com` ⇒ 302 到 `wake.html`(⛔ **���是 500**);`npm test` �当日日志。**⑤ �留(本线相关 · 已上报,⛔ 未擅自立项)** = Manager 侧对 `via=relay` host 的�达性**�读�一** `DSHS_RELAY_STATUS_URL`(= 47 中继)⇒ worker 一旦按抖动漂到 **106 自家中继**,`OBS-01/08/09` 会绿�而**平�实例�� 500** = **�㊾ 修了观测��控制�未修**(�一�"两�中继并集"�径,控制�尚未跟)。⚠� �:该 500 在**�� 5 �候选���现** ⇒ �是由��窄化�独导致;真正修好它的是 ③ 那一步。
> 🆕 **2026-09-19 01:4x 刷新(�㊾ 执行棒 · ✅「探针观测��一�已修好并上生产 · ✅ 探针**终� 29 PASS / 0 FAIL / 0 SKIP**(rc=0)· ✅ 零回归三件套全绿 · � 判定 =「本线���(⛔ **未登记下一棒**)· 🔴 唯一在册红� = **D8 云安全组**(待你控制��地))**:**一�� = 三�判�的绿从此���决于「106 worker 挂在哪�中继�—— 数��由「**�读 47**�改为「**按 `hostId`(� `network`)�并两�中继视图**�,而 ⛔ **阈值�派生规则�判�形�一字未动**(并集�消除"看��",⛔ �把真 FAIL 糊� PASS)。** **① 缺陷(= 交接� §15-10-1 那��留)**:`OBS-01` / `OBS-08` / `OBS-09` 的绿�决于 worker 归属,而 worker 通�按**抖动**��(`switcher.ts`,属既有设计)⇒ 一旦�到 **106 自家中继**,47 视角� `used=1 / endpoints=[]`(或两�离线孤儿)⇒ `OBS-01` FAIL�`OBS-08` FAIL�`OBS-09` SKIP —— ⛔ **全是�红 / � SKIP**(客户端在 106 自己的中继表里**如实在册**)。**② 实现(�文件六处 · `scripts/overlay-probe.cjs` · ⛔ `src/**` 零改动)** = 新增 `readPeerView()`(对端 `/status` 的**唯一�数入�**,一次 ssh � `/status` 原文 + `__RELAY_ACTIVE__` 哨兵,缓存一份供并集与"空表�分"**共用**)+ `mergeEndpoints()`(键 = `network:hostId:port`;`online` �**或**;`localPort` �**在线那一侧**)+ `unionUsed()`(= `network/hostId` **去��的并集基数**,⛔ �是求和 —— 求和会把两处残留的�一节点**��计数**)+ `remoteInstanceCodes()`(🔴 实例探活**必须回到"那一�"上�**:`localPort` 是**中继机回环**�点,归属 106 的端点得 ssh 到 **106** 探,�则必 `000` = �红)+ 三�判��数�� + `classifyEmptyView()` 收敛进 `readPeerView()`。**③ 先红�绿(原文级 · 三���)**:**(a) 夹具两腿**(�一份真实 `/status` + 真实 `ss`/`nft` + �数表副本�`SSH_TARGET_*=127.0.0.1` / `SSH_PORT=1`)—— �差是�给对端那一�:红 `rc=1`(`FAIL OBS-08 端点表(并集) 2 � / 离线 2 �`|`SKIP OBS-09 派生为空`)→ 绿 `rc=0`(`PASS 2 � / 离线 0 �`|`PASS w-106:36873=401`),两侧�行 `diff` **�差这 2 行**。**(b) 真机漂移�**(`--scene all` 收��现场�是 47 视角空:47 `used=1 / eps=[]`�106 `eps=[19000,21001] � online`)⇒ `PASS OBS-01 used=2(47=1 + 对端=1)`�`PASS OBS-08(47 视角 0 � + 对端 2 �)`�`PASS OBS-09 w-106:40701=401` —— 🔬 探的是**106 机上**的回环�点(47 上�存在该�)⇒ "分机探活"这�腿**真走到了 106**。**(c) 真机退化腿**(对端��达)⇒ `FAIL OBS-01 used=1`�`FAIL OBS-08 离线 2`�`SKIP OBS-09` = **改� 47 �点判法��一致**(⚠� 该腿�带 4 �**与并集无关**的红:`OBS-18/21/22/23` 本就� ssh 到 106)。**④ 硬约�③(先核��)**:对 47 `/status` 的读�次数**一次都没�**(�三次,全程�用已采到那份);对端那份在**第三次采样之�** ⇒ ⛔ �进 `OBS-16` 门窗� `(status2, status3]`;**隔离性实验原文** = 47 `statusHits 5→6 (Δ=1)` 而**中间�了 2 次读 106**�106 自身 `2→3` ⇒ ✅ 读 106 �动 47 的计数器(且 `OBS-16` 行末已写明"Δ 仅� 47"以防日�误并)。**⑤ 零回归三件套** = 探针 **29 PASS / 0 FAIL / 0 SKIP**(rc=0,终�;漂移�那次 28P/1F 的唯一红 = `OBS-04 identityOk=1` = **演练�� 47 relay 的计数余波**,⛔ 与并集无关)|`npm.cmd test` **200 pass / 0 fail / 1 skipped**(`# tests 201`;Node 22.22.2)|`--scene all` **12 PASS / 0 SKIP / 0 FAIL**(rc=0;**6m10s**;`幕1-A` 15386ms / `幕4-C` 19650ms,deadline 30000;⛔ 未套外层超时)。**⑥ 部署(⛔ 零新增监��)** = 47 `/opt/dshs/scripts/overlay-probe.cjs` 旧 `eaec1ad560adbec37a15cd145a5ebb77`(109266 B = �㊳
> 🆕 **2026-09-19 01:0x 刷新(�㊽ 执行棒 · ✅「�� worker �实例端�注册丢失 / 孤儿端点�目�自愈�已修好并上生产 · ✅ 探针回到 **29 PASS / 0 FAIL / 0 SKIP** · ✅ 零回归三件套全绿 · 🔴 唯一�留 = **观测��一**(worker 归属漂移会让这 3 ��红 / SKIP)· ➡� 下一棒 = **�㊾ 执行棒(探针观测�按两�中继�并集)**已登记)**:**一�� = 上一棒留下的 SKIP 既�是中继故障�也�"必须��实例" —— 真相是「worker ���**没人替已认领的实例把端��新声明出去**�。** **① 根因(文件 + 行 + 原文)** = `reconcileTunnel()` **早就存在**(`src/worker/agent.ts:256-264`),�是对账�径 `live` **��** `spawner.listUserInstances()`(`agent.ts:259`),而它是 `return [...this.mains.values()]`(`orchestrator.ts:558-560`)�**本进程 launch 过的**;认领�的既有实例**刻��进 `mains`**(`orchestrator.ts:290` 原文「已被「认领�的既有 scope —— ⛔ 刻�**�进** `mains`�,�由 = `launchToken` ����,�文件头 �㉕)⇒ 上一进程�留的实例端�**没有任何人**会�新声明。**relay 侧其实一直在等**:`dropSession()` **�摘会��⛔ �删�目**(`server.ts:2151-2203`),`onPortChange(add=true)` 命中既有�目时走 `ensureEndpoint()` ⇒ **�用�目���绑定会�**(`localPort` 沿用)⇒ **�登记 = 就地覆盖孤儿**。🔴 **⇒ 交接� §14-7 那�「��路径须"实例�新拉起"�本棒实测�伪:存在零中断路径。** **② 修�(2 个�文件 · ⛔ 零新�赖 / 零新监�� / 零新 env)** = `orchestrator.ts` 新增 `adoptedInstancePorts()` + `onRehydrateSettled` �定回调(`pendingProbes` / `rehydrateScheduled` 计数);`agent.ts` 对账�径改为 `listUserInstances()` **∪** `adoptedInstancePorts()`,抽出 `tunnelTick()` 供 20 s 定时器与"认领�定"回调**共用一份语义**;⛔ **未绕过既有准入 / 白��**(�走 `forward() → addPort() → PORT_ADD → onPortChange`,�窗�校验 + worker 侧 `allow`)。**③ 先红�绿(原文级)** = 探针 **26 PASS / 2 FAIL / 1 SKIP(rc=1)** → **29 PASS / 0 FAIL / 0 SKIP(rc=0)**:`OBS-01` `FAIL used=1` → `PASS used=2`|`OBS-08` `FAIL 端点表 1 � / 离线 1 �` → `PASS 端点表 2 � / 离线 0 �`|`OBS-09` `SKIP 派生为空(agent 0 � + 离线 1 �)` → `PASS 在册实例�(派生 1 �):w-106:42497=401`。🔴 **先红最关键一�** = 改� **106 自己的中继表里也�有 `19000`**,而 106 上 `ss -lntpH` 明明白白 `127.0.0.1:21001` 在� ⇒「**实例活���没人替它把端�声明出去**�(与挂在哪�中继无关)。**机�原文**(47 relay journal)= `AUTH OK … ports=[19000]` ⇒ **1 s �** `host ops/w-106 +port 21001 -> 127.0.0.1:36535`(⚠� 20 s 定时器首�在 **00:31:31** ⇒ 这一枪**�能**�自新回调)。**④ 孤儿自愈�控对照** = � worker ⇒ `used=1 eps=[(19000,45095,**False**),(21001,36535,**False**)]`(�目**�留表** = 改� `OBS-08` 红形�;**实例全程未动**,`ss -lntH 'sport = :21001'` 全程 **1 行**)⇒ 起 worker ⇒ `used=2`�两� `True`,且 **`localPort` �字沿用**(45095 / 36535)⇒ �明是"�用既有�目���绑定会�",⛔ **�是**新开监��。**⑤ 零回归三件套** = 探针 **29 PASS / 0 FAIL / 0 SKIP**(rc=0;终��跑)|`npm.cmd test` **200 pass / 0 fail / 1 skipped**(Node **v22.22.2**;53.2 s)|`--scene all` **12 PASS / 0 SKIP / 0 FAIL**(rc=0;**6m01s**;`幕4-C` **27087 ms** / 30000)|➕ 附加 `node --test test/orchestrator-rehydrate.test.mjs` **18/18**(该文件**刻��进 `npm test`**,但它是唯一盯 `adopted`/`mains` 边界的用例)。**⑥ 部署** = 包 `dshs-lib-seq48.tgz`(**685,368 B / 270 文件**,md5 **`a902c936cefdeeb3eb13c67dfcb5dd00`**;两机解包��自验包一致
> 🆕 **2026-09-19 00:1x 刷新(�㊼ 部署棒 · ✅ `C` 已�地两机 + ✅ `OBS-29` 真机腿 **PASS** · ⚠� 唯一差异 = `OBS-09` 退化 SKIP(**既有缺陷**被本棒硬�求的"�� 106 `dshs-worker`"触�)· ➡� 下一棒 = **�㊽**(`OBS-09` 孤儿端点�目修�)已登记)**:**一�� = � id 的 per-network 域分离从此在**两�真机上�时生效** —— 两机 `/status.content.blockIdKeyed = true`�`blockIdKeyId` **�字相�**(`d6e62322e5166938`)⇒ **跨机���径已对�**。** **① 部署�径(本棒实测认定 · ⚠� 与"�传改动文件"的旧�象��)** = 两机 4 处 `lib` 实为**历次增� scp 的�加**(47 `/opt/dshs/lib/net/relay/index.js` mtime **12:55:27**,而�目录 `content/chunker.js` **06:52:16**)⇒ 与本机 `build` 产物**�� md5 �� 38–41 个**(� `client`/`directory`/`switcher`/`wire`/`orchestrator` 等**与本�无关**的文件)⇒ 本棒按**全�替�**(**270 文件 × 4 处**)+ 🔴 **两机�一窗�内�**(包 md5 **`546b30719ca1bfca1e04189e1099424e`**;两机**解包��自先验包 md5**)。**② 备份** = 两机 `/opt/dsh/backups/seq47-20260918-2347/`(4 处;47 = 262/263 文件,106 = 260/262)。**③ 核对 = �一致 0** —— 与代�仓 `lib` **�� md5 �� 0 / 仅本机有 0**(**270 × 4 = 1080** 对全��字节一致);��置多出的 11–12 个 = 历� `.bak-*` �留(⛔ 未删)。⚠� **prompt 里"核 32 个 md5"的�径**本棒**未能�现**(已按全�核对并如实记入交接� §14-3)。**④ ��**(R8 已声明)= 47 `dshs-relay`/`dshs`/`dshs-worker` 全 `active`;106 `dshs-relay`/`dshs-worker` `active`(`dshs` `inactive` = **正常**)。**⑤ `OBS-29` 真机腿 ✅ PASS** = 两机 `blockIdKeyed=true` + `blockIdKeyId` **�字相�** + `blockSize=1048576`(⛔ 未动)/ `storeMaxBytes=67108864`(⛔ 未动);🔬 **第二��** = 两机 relay �动判别器日志原文 `[content] � id �径 = HMAC-SHA256(域密钥) blockIdKeyId=d6e62322e5166938`(47 **23:47:43** / 106 **23:47:37**)。**⑥ 零回归三件套** = 探针 **28 PASS / 0 FAIL / 1 SKIP**(⚠� 基线 **29P/0S/0F**)|`--scene all` **12 PASS / 0 SKIP / 0 FAIL**(rc=0;**6m28s**)✅ 与基线�字�(`幕1-A` 本次**未**触� 6 h � —— 因本棒刚�� 47 `dshs`�AUTH 行新鲜)|`npm test` ⛔ 本轮未跑(**本棒零代�改动**)。**⑦ 🔴 唯一差异 = `OBS-09` 由 PASS 退化 SKIP(**如实留档 · 根因是既有缺陷**)** —— **事实链**:106 实例 **`286172`**(`dsh --profile web --port 21001`)**�动于 10:18:34**(= ��� 13.5 h)�**未被 teardown**(`OBS-22 scanned=1 adopted=1 stopped=0` + 日志 `[rehydrate] probe OK dsh-100002-7d1c8cbf.scope :21001`)⇒ 但 47 端点表**�有 `w-106:19000`�缺 `w-106:21001`**(�数表 §3.9 `PEER_INSTANCE_PORT` 行 10:2x 实测**应有两�**);**机�** = `relay-tunnel.ts#cancel()` �撤销**当�进程** `forwarded` 集里的端� ⇒ 上一进程�留�目**无人撤销**�新进程也**��注册**已认领实例的端�(历�留档原文:「**��� `OBS-08`/`OBS-09` 必红,⛔ �是"跑一会儿就好"**�)⇒ 本棒**�跑探针两次(间隔 ~6 min)未自愈**。🔴 **��须"实例�新拉起"**(端�登记在 spawn �程内)⇒ 与 memory 明令「⛔ 别为�就旧值��生产实例�冲� ⇒ **本棒�修��凑绿** ⇒ 交下一棒。**⑧ 边界自�** = ⛔ 未 commit / 未 push(HEAD **`45b4999`**;`git status` � **21** 处)|⛔ 未改 `DEFAULT_BLOCK_SIZE` / `package.json` / 零新�赖|⛔ 未改 nft·nginx·bwrap|⛔ 未改�数表**值格**(§10 现算 **`ac6bbbbb8c92bd57ff0dc4cd8f4983ba`** 与 §13 记录**�值** ⇒ 本棒补记� **§11.14**,在 §10 �径之外)|🔴 密钥本体��网络 / relay(本棒�读 `/status`,⛔ 未触碰密钥文件)。➡� **下一棒 = �㊽(`OBS-09
> 🆕 **2026-09-18 23:3x 刷新(�㊻ 执行棒 · ✅ `C`(� id per-network 域分离)已�地并全绿 · 🔴 `OBS-29` 判�已��(正腿 3 + 具�负腿 2)· ✅ 零回归三件套全绿 · � 唯一未办 = **真机腿**(须部署)· ➡� 下一棒 = **�㊼ 部署棒**已登记)**:**一�� = � id 从此按「网络�分域 —— �字节在�� network 得到**�� id**(跨网共享必然失效 = **设计�图**),而**�网去�一点没丢**。** **① 交付** = 改 **8 个文件**(`content/{chunker,crypto,store,runtime}.ts` + `relay/{main,index}.ts` + `test/overlay-content.test.mjs` + `scripts/overlay-probe.cjs`):`blockIdOf` / `contentIdOf` 由**裸 `sha256`** 改为 **`HMAC-SHA256(netKey, bytes)` �� 32 hex**;per-network 密钥**�用 `crypto.ts` 既有组密钥链**派生(新增 `deriveBlockIdKey()` + `BLOCK_ID_DOMAIN_TAG`)⇒ 🔑 **⛔ 零新密钥文件 / ⛔ 零新 env**;🔴 **缺� / 空 `netKey` ⇒ 回�裸 `sha256`**(= **回滚路径**,且��既有�测语义)。**② 判���(本棒存在的主因)** = �㊺ 实测判 **`D` 无作用� ⇒ 本轮�实现**,故原 `OBS-29` 那�"稀释���确定性派生� ⇒ 必红"的负腿**失去对象** ⇒ **��为 `C` 的判�**:**正腿 3 �**(`P1` 跨网必��且**两侧都 ≠ 裸哈希** � `P2` �网必相��**去��得丢** � `P3` 装��无�改)+ 🔴 **具�负腿 2 �**(`flat-key-collapses` � `empty-key-falls-back-to-bare-hash`)。**③ `E1` 基线已��**(**定义��估** = 回�字节 ≈ **1 份 × 组数**;**旧读数作废**):�网 **4 轮 × 4 �全 local 命中**�`origin = 0`�`putRejected = 0`�`puts = dedupIds`;跨网**� 1 份**(起点 `local = 0`)。**④ 零回归三件套全绿** = `npm.cmd test` **200/0/1** + `overlay-content` **55/55** | 探针 **29 PASS / 0 FAIL / 0 SKIP**(基线 **28** ⇒ **+1 = `OBS-29`**)| `--scene all` **12 PASS / 0 SKIP / 0 FAIL**(rc=0;8m25s)。**⑤ 先红�绿两�都真跑过**(⛔ �纸�声明):**红腿 A**(派生**丢掉 `network` 维度**)⇒ �测 **6 失败**�探针 `腿数 4/5 � 缺 P1`;**红腿 B**(**�传 `netKey`** = �掉一个调用点)⇒ �测 **9 失败**�原文 `content-store: �校验失败(丢弃)`;两��已**�原**(md5 回��`REDLEG` 计数 **0**)。**⑥ 边界自�** = ⛔ 未 commit / 未 push(HEAD **`45b4999`**;`git status` **21** = �㊺ �留 **13** + 本棒 **8**)|⛔ **未 scp / 未部署** |⛔ 未动任何�置值 / nft·nginx·bwrap |⛔ 未改 `DEFAULT_BLOCK_SIZE` / `package.json` / 零新�赖。⚠� **本棒对生产的唯一动作 = �� 47 `dshs` 一次**(**R8**;为满足演练的 **6 h AUTH 窗�**,动手�已声明;无��逆项)。**⑦ 四�如实留档(�属既有缺陷 · ⛔ 本棒�报�动手 ⇒ �立�项)**:**(a)** 演练 `currentChannelHint()` 用 `journalctl --since -6h` �**� 2 s 一�**的 `[overlay-dir] ��`(6 h ≈ **1 万行 / ≈1.3 MB**)⇒ **�次 ssh ~47 s > `SSH_TIMEOUT_MS` 20 s** ⇒ 曾整轮 `spawnSync ssh ETIMEDOUT` **中止**(该函数**��自述「仅供人读���与判定�** ⇒ **装饰性线索�该是主�程硬�赖**);**(b)** 演练 `lastManagerAuthOn()` 的 **6 h 上�** ⇒ Manager 隧�**稳定 > 6 h** ⇒ 两�都读 **-1** ⇒ `幕1-A` �级 **SKIP** + **`幕1-B/C` 结构上�打�**(**本棒已�先红�绿**:首跑 **9P/1S/0F** ⇒ 按脚本自述办法�� Manager 刷新 AUTH ⇒ **12P/0S/0F**);**(c)** `mksess.cjs` 已失效(写 SQLite,而**��库 = PG** ⇒ 一�就 401);**(d)** `docs-sync-check.sh` **rc=2** 的真因 = **ssh 别� `bt-server` 端�陈旧**(� `Port 32022` ⇒ `Connection refused`;`-p 22` 正常�`/opt/dsh/docs` **确实存在**)⇒ **�"目录�存在"**。➡� **下一棒 = �㊼ 部署棒(`C` �地两机 + `OBS-29` 真机腿)**。
> 🆕 **2026-09-18 22:5x 刷新(�㊺ 执行棒 · ✅ `M1` 首次实测完�(**真实内容** · 四项读数�)· 🔴 实测结论 =「**D 的作用�为空**�⇒ **D 本轮�实现**(⚠� ��级 —— 目标已由测��实达�)· ✅ ⛔ 未改 `src/**` 一行 · ➡� 下一棒 = **�㊻ 执行棒(C 域分离 + 判���)**已登记)**:**一�� = 「低熵��第一次被**真实内容**�了 —— **首�包里 0 个低熵�;低熵物质�以 ≤ 80 KiB 的�内片段存在(� 1.0225%);60 份真实独立�内容里 0 份低熵** ⇒ **D(�确定性)当�没有对象�治**,而 **C(域分离)�值得�**。**① `M1` 四项读数(真实内容 · ⛔ 零��字节)**:**S1 = 真实首�包** = `GET https://admin.alotbuy.com/` 壳页�**按页�顺�**�回**全部 60 �** `/plugins/??…&rev=…` combo(由宿主**�行时**拼装 ⇒ **盘上无"�文件产物"**,�能 HTTP �)⇒ �计 **23,629,336 B**(🔴 **�径纠正**:历�档案里的 `11,363,655 B` = **最大�� combo**(本棒实测 **11,794,471 B**),⛔ **�是全部之和**;⚠� 该值�实例�动世代漂 ⇒ �现须记 `rev`)|**`M1-a`** � **23** / 唯一 **23** / ��率 **0.00%** / 完全�� **0** |**`M1-b`** 低熵�(`H ≤ 4.0`)**0 � · 0 B**,�� H ∈ **[5.1807, 5.8444]**,**直方图 `{5.0-5.5: 8, 5.5-6.0: 15}`** |**`M1-c`** �比 **0.000000%** |**`M1-d`(��腿)** 4 KiB 窗共 **5,768** 个 ⇒ **低熵段 15 段 / 241,664 B = 1.0225%**,段字节 min **4,096** / max **81,920**,直方图 `{≤4KiB: 10, 4KiB-16KiB: 3, 16KiB-64KiB: 0, 64KiB-256KiB: 2, 256KiB-1MiB: 0}` |**S2** 60 份内容中�� **56** 份�**低熵内容 0 份**(�份 Hmin ∈ `[4.8354, 6.3485]`)。**② 三�判�性结论(��引数字)**:**(甲)✅「首�包内�存在纯低熵��—— �实**(`04-133 §1.1` 推论 1:23 �**全部** H ≥ 5.1807);**(乙)�「< 1 MiB 的独立�内容若是低熵 ⇒ 纯低熵��—— 未�实**(S2 里**确实有 56 份���内容**,但它们**全是高熵 JS bundle**�低熵内容 **0 份**)⇒ **该风险�在当�真实内容上�存在**;**(丙)⚠�「什么算低熵�的阈值**无法由本次读数定死(全部��在 **5.0–6.0** ⇒ **阈值� ≤5.0 时"低熵�"� 0**;**字节分布熵对 JS 文本�是强判别器**)⇒ 🔑 **`M1-d` �是有效的腿**(它抓到那�内 1.0225% 的低熵片段)。**③ 对 **D** 的判定(自决 · �推翻)**:**D 的目标已由「定长 1 MiB 切分�结构性达�** —— 低熵物质�以 **≤ 81,920 B 的�内片段**存在 ⇒ **对�级去� / 枚举���**;且**�存在低熵内容�元**(②乙)⇒ **`D-1` 无对象�稀释�`D-2` 的�用����立**(`04-133` 决策点 4 **两分支都�命中**)⇒ **D 本轮�实现**(�则 = 纯增��度 + 测�上零收益 ⇒ 触 **R11**)。⚠� **这�是�级 / �是�默兜底**:目标已被**实测**�实达�;🔑 **回头�件(具�)= 出现「低熵内容�元�** ⇒ 由固化探针 **����查**(�跑一次��判定,⛔ �需�先写代�)。**④ 产物** = **`scripts/overlay-entropy.cjs`**(�读探针 · 零第三方�赖 · **切分调用仓库那份 `chunkify`** = `lib/net/relay/content/chunker.js` ⇒ ⛔ **无��**;�用 `OVERLAY_CHUNKER` 覆盖)+ �数表 **§11.12**(读数�点)+ 交接� **§8 回填**。**⑤ 边界自�** = ⛔ **未改 `src/**` 一行**(C 未开工 —— �由:`OBS-29` 的判��须� D 的移除一并��,�下一棒�点)· ⛔ 未动 `DEFAULT_BLOCK_SIZE` / `package.json` · ⛔ 未改生产实例 / ⛔ 未��在线�务 · ⛔ 未 commit / 未 push · 🔴 **两处临时物已清**(47 `/tmp/s45`;PG 临时会� `user_agent='seq45-entropy'` ⇒ `remaining=0`)· ⚠� �数表 **§10 指纹未�**(`6b37bfd506758d8
> 🆕 **2026-09-18 21:5x 刷新(�㊺ 规划棒 · ✅ 规划完� · ⛔ 零代�零�务器改动 · ➡� 下一棒 = �㊺ 执行棒已登记)**:**一�� = 「§10-3 低熵�治��立了方案,方�按你 21:28 的�� = 采纳 C + D(B �级�⛔ �立项);而方案的第一个动作是补测一个从未测过的读数。** **① 产出** = 方案 `调整方案/133-覆盖网络-低熵�治�方案-C域分离与D�确定性.md`(**原��� 133**;⚠� 130 空�未补� —— 记忆里 130 已言明归「� B�)+ 交接� `交接�/覆盖网络-�45-低熵�治�-测熵与实现.md`(**§8 ��缀 `be548afc3340583b2b63ca254bcf550f`** · 全文件 md5 `0169b900a6ea50608c0d50a3a0514e68`)+ `交接�/README.md §一` 新增一行 + `INDEX.md §二` 新增 `04-133` 行(⚠� 机器生�的状�摘�已用 `docs-index-stats.py --write` 刷新 ⇒ **档案 117 份**)+ `docs-manifest.json` 已刷新。**② 本轮新增的��级结构�现(⛔ 尚无任何文档记录 · 待实测确认)**:切分是**定长 1 MiB**(`chunker.ts:60` 常� + `:137` `offset += blockSize`)⇒ 首�包 10.8 MB ≈ **11 ����混高熵内容** ⇒ **首�包内几乎��能存在纯低熵�**;⇒ **D 的真实战场更�能是「整体�于 1 MiB 的独立内容�**(�切 1 �;本身低熵 ⇒ 就是一�纯低熵�)。⇒ 🔴 **推论:测熵�测首�包会得出"没有低熵�"的�绿 ⇒ 必须加�窗�熵腿**(滑窗找�内低熵片段)。**③ `M1` 四项指标** = �类数/��率 | 低熵�数 + 体积 + **H 直方图** | **�首�包比例** | **�窗�熵尺寸分布**。⚠� **为什么必须先测**:D 的边界(什么算低熵 / 稀释�元多大 / ����并)全是它的函数;而**历�所有"低熵"读数都是��字节**(`tmp/历�过程目录/_tmp_seq32/p01-perf.mjs:42` 用 `makeBytes()`�`p03-lowentropy.txt` 用 8 B ���)+ **�存储纯内存��盘**(`server.ts:909-911` �给 `maxBytes`�**无 `dir`**)⇒ 生产侧**无样本��**,�能对**真实内容**离线度�(⚠� 切分必须调用仓库里那份 `chunkify`,⛔ ��刻算法�����)。**④ �现一�既有漂移(⚠� �报�改)**:�数表 §10 头值记 `d408d640246a980f702fe7b0a2895219`(�㊴ 12:2x 记录),**现算 = `6b37bfd506758d882d9f803678f85d23`**(830 行 · mtime 09-18 15:18)⇒ **记录值未� §10 之�的内容更新**;⚠� 与�㊹ 自报值**一致**(两次独立计算�值)⇒ �是算错�是�更新。**⑤ 边界自�** = ⛔ 本棒**零代�**(⛔ 未改 `src/**` / `scripts/**` / `test/**`)· ⛔ **零�务器触碰**(⛔ 未 ssh / 未 scp / 未 build / 未��任何�元)· ⛔ **� commit / � push**(`git` 未�交改动 = 本棒 4 处:`04-133` / `交接�/�45` / `INDEX.md` / `交接�/README.md`)· ⛔ 未动 `�数表`(**§10 指纹现算� `6b37bfd5…`**)· ⛔ 未动 `package.json` / `DEFAULT_BLOCK_SIZE` / `content/**` 任何代�。⚠� **两�如实留档**:① `docs-sync-check.sh` 报 `无法读��务器目录 bt-server:/opt/dsh/docs(ssh 失败或目录�存在)` ⇒ **未能��端对账**(本棒是规划棒�⛔ � scp 且未推� ⇒ �构�阻塞;⚠� 执行棒**推��必须�跑并�功**)② `docs-audit.py` **退出� 0**(无 P0)。**回报�点** = 本入� §2 + 工作区日志 `.workbuddy/memory/2026-09-18.md`。➡� **下一棒 = �㊺ 执行棒**(低熵�治�:测熵先行 + C + D),automation **`f94f2973-4ead-471a-a020-df6dc0b144a4`**(一次性 · **2026-09-18 21:56** · `nextRunAt` = **1789739760000**);⚠� **�一时刻�挂这一个棒**。📌 **在册待你��项� = D8**(⛔ �阻塞排棒)。
> 🆕 **2026-09-18 15:5x 刷新(�㊹ 执行棒 · � **未收官 —— 阻塞上报**:「D8 云安全组�用户已批准,但**执行侧无云 API 凭�** ⇒ 按 §1 边界外④ �下;本机(开�机)在测试中的角色判定�时给出)**:**一�� = 用户原�「**1 开通,需�我�作还是你�以自己�作,所有的测试是�包�本机,当�结点或终端**�⇒ ���结论 = **D8 �能由用户侧控制��地**(两机 + 本机**�无�用云凭�**),**本机⛔ �是覆盖网节点�⛔ 也�是终端**(�是测试�起端 / 观测�)。**① D8 执行侧阻塞(原文级��)**:本机(WorkBuddy 开�机)**无**任何云 CLI / 凭�(无 `~/.aliyun` / `~/.tccli` / `~/.aws`)|**47(阿里云)**:`aliyun` CLI **存在**(`/usr/local/bin/aliyun`)但 **`~/.aliyun/config.json` �存在** ⇒ `aliyun configure list` = `default * | (空) | Invalid | (空) | en` ⇒ **凭�未�置**;metadata `http://100.100.100.200/latest/meta-data/ram/security-credentials/` ⇒ **404 - Not Found** ⇒ **无 RAM 角色**(拿�到 STS 临时凭�)|**106(腾讯云)**:**无** `tccli`;metadata `http://metadata.tencentyun.com/latest/meta-data/cam/security-credentials/` ⇒ **404** ⇒ **无 CAM 角色** ⇒ 🔴 �本线纪律 **⛔ �索��⛔ �硬编�任何云 AK/SK** ⇒ **�能用户侧�作**(或**由用户主动**给一次性凭� —— 本棒 ⛔ �索�)。**② 待�地规则(乙-1 · 原文级 · ⛔ 执行侧�得改形)**:**47 阿里云安全组 · 入方� · �议 `UDP` · 端� `21100/21115` · 授�对象 `106.54.21.172/32`** | **106 腾讯云安全组 · 入方� · �议 `UDP` · 端� `21100/21115` · 授�对象 `47.77.182.89/32`** ⇒ 🔴 **⛔ 零个 `0.0.0.0/0`**(�任何拆分 / 等价写法)�⛔ �放行 TCP 段(`LISTEN_ALLOWED_RANGES` 是 TCP �,⛔ 别混)�⛔ �改 `nft` / `nginx` / `bwrap`。**③ �置��(�读 · �明 D8 是"唯一缺�")**:固定公网 IP = **47 `47.77.182.89`**(阿里云 `i-rj99af19cibck1ge93tq`)� **106 `106.54.21.172`**(腾讯云 `ins-3q6k1p8t`);网�分别 `eth0 172.18.16.212/18` / `eth0 10.0.0.8/22` ⇒ 两侧公网 IP **�为云网关 NAT 映射**(⛔ �直挂网� ⇒ 入站须云安全组放行)|UDP 区间 = **`[21100, 21116)`**(`punch.ts#PUNCH_PORT_BASE=21100` + `PUNCH_PORT_SPAN=16`;⚠� 两机 `ss -lunp` 在该段**�无监�** = **正常** —— 打洞 socket �在**实打时**�开,⛔ **�是"没装"**)|`DSHS_OVERLAY_DIRECT` 两机 `/etc/dshs*.env` **命中 0** ⇒ 走**缺� = 开**(⛔ 无需改 drop-in)|🔴 **两侧本地防�墙都�拦 UDP 入站**:47 `nft` **72 行**�`hook input … policy accept`(⚠� 其中那� `udp … reject` 是**沙箱 uid `100000-199999` 的出站**�制�`daddr` � `47.77.182.89`,⛔ **与本腿无关**);106 `nft` **0 行**�`iptables -P INPUT ACCEPT` + `YJ-FIREWALL-INPUT` 仅 4 � `/32` REJECT(**�� 47**)+ `ipset test YJ-GLOBAL-INBLOCK 47.77.182.89` ⇒ **NOT in set**。**④ 本机角色判定 = 测试�起端 / 观测� + 开�机;⛔ �是覆盖网节点�⛔ 也�是覆盖网终端**(��五�:**a** 四�测试命令**�从本机�起** ⇒ 本机是**�起端**��是**被测对象**;**b** 本机 **零** `dshs*` / `dsh-*` 进程�**零** `20080` / `19100` / `20000` / `21000–21001` / `21100–21115` 监� ⇒ 结构上**�在** `endpoints[]` / `sessions[]` 里;**c** 47 �� `nodes.json` = `{"version":1,"nodes":{}}`(**空**)⇒ 本机**未注册**;**d** 本机 `curl -4 ifconfig.me` **回�到 IPv6**(`240e:332:cd0:a710:…`)⇒ **无固定公网 IPv4** ⇒ ⛔ 给�出稳定 `/32` ⇒ **D8 �对端放行对本机结构上��立**;**e** 本机 `~/.dshs/` 仅 `overlay-table-dir`(**�㊸ 本线自建**的�数表定�注册,⛔ �节点注册)+ `secret.key`(64 B · 09-13 15:40 · 系 `src/config.ts#ensureSecretKey
> 🆕 **2026-09-18 15:2x 刷新(�㊸ 执行棒收官 · ✅ 观测�缺�收�三项全绿 · ✅ 零回归三件套全绿 · 🛑 **本线��**(⛔ 未登记下一棒)· 🔴 D8 云安全组�为唯一红(既存�在册待你��))**:**一�� = 106 侧观测�缺�已收� —— 探针在 106 上从「一行都跑�了���「三��命令全通�,�数表定���挑 `cwd`(从代�仓根跑也认)。** **① 探针在 106 上�跑(先红�绿)**:**红腿**(106 上改�的副本 `/opt/dshs-cluster/scripts/overlay-direct-probe.cjs`,md5 `8d1ea60a01fc09fb5f56e492afb76fc9`)⇒ `status` 与 `selfcheck --json` **两�命令都**原文 `Error: Cannot find module '../lib/net/relay/registry.js'` + `Require stack: /opt/dshs-cluster/scripts/overlay-direct-probe.cjs`(根因:106 `/opt/dshs-cluster/lib` **无 `registry.js`** = 控制�注册表模�,节点��它);**绿腿**(�一命令��一**规范路径**)⇒ `status` rc=0(`直连(打洞):开|�� default|缺� true`)+ `selfcheck --json` rc=0(`{"degraded":true,"degradedLegs":["joinConf"],"joinConfAvailable":false,"joinConfReason":"module-missing","candAcc":3,"candRej":9,"silent":0,"bi":true,"ok":2,"cooldown":300000,"zero":"throws","deps":true}`)+ `punch --peer 47.77.182.89:21100` rc=0(`窗内零收包(deadline 3000 ms,实耗 3000 ms,� 21 包)⇒ 判死 + 进冷� 300000 ms`)。**办法 = 惰性 / �选加载 + 具��级**(⛔ **�是**"�铺一份 `registry.js`"):�有 `join 回读`(判� D3)这�腿惰性加载 `registry.js` / `join.js`,缺 ⇒ `{available:false, reason:'module-missing', missing:[…原文 message…]}`,文本原文 `join 回读:⛔ ��用(module-missing)—— 缺 …|⚠� 这是「没装��是「没采到�`;🔴 **⛔ ��默返"没有"**(缺�**�填** `direct`/`readback` ⇒ 形状�分)|⚠� �� `MODULE_NOT_FOUND`,其它异常照抛。**本地等效夹具**(临时改� `lib/net/relay/{registry,join}.js`)⇒ �一�级形状�其余腿全在,**还原� md5 �字回�**(`951a2526…` / `6946e1d8…`)。**② �数表定�与 cwd 解耦**:**红腿**(旧逻辑副本,与 `git show HEAD:scripts/overlay-probe.cjs` 的 `resolveTablePath` **�字一致**)⇒ 从代�仓根 rc=**2** `� �数表装载失败:在 D:\github\dsh_shenxian 下按 /^�数表_覆盖网络_.+\.md$/ 找到 0 个�数表(�求�好 1 个)`;**绿腿**(修�,**从代�仓根��给 `--table`**)⇒ 探针 **28P/0S/0F**(rc=0)+ 演练 `--scene all` **12P/0S/0F**(rc=0;原文 `# �数表=docs/覆盖网络/�数表_覆盖网络_20260917.md`);**防错腿两腿**(�目录人为 2 份 ⇒ rc=2;跨候选目录�计 2 份 ⇒ rc=2,**探针与演练�测一次**)。**候选目录链** = `--table`(显�,最高优先)> `--dir` > `DSHS_OVERLAY_TABLE_DIR` > **机器本地注册文件**(`DSHS_OVERLAY_TABLE_REGISTRY`,缺� **`~/.dshs/overlay-table-dir`**)> `cwd` > 脚本目录�上两级;🔴 **"�好 1 个��法"�留且更严**(任一候选目录 ≥2 ⇒ 立�报错;跨目录�计 ≥2 ⇒ 也报错;一份都没有 ⇒ 报错并列出**所有�过的目录**,⛔ **�放宽�"找�到就用缺�"**)。🔑 **为何必须有注册文件**:�数表**�在仓内**(`git ls-files | grep -c �数表` = **0**)而在**工作区根**,本机仓在 `D:`�工作区在 `E:`(**��盘**)⇒ 路径推算到�了 ⇒ **机器差异一律放 `$HOME`**(⛔ 仓内零机器路径)。**③ 106 残留副本处置 = 二选一选「使其�跑�**(⛔ 未删;�由 = 106 正是真机打洞腿的��机,删掉�会逼出更多 `/tmp/*.cjs`)⇒ 探针 scp 到**三处**且 **md5 全� = `4734686b5270059697ccbcf966c34ade`**(本机仓 / 47 `/opt/dshs/scripts` / 106 `/opt/dshs-cluster/scripts`);**回滚点** = 两机 `/opt/dsh/backups/seq43-20260918-150549/`(md5 `8d1ea60a01fc09fb5
> 🆕 **2026-09-18 14:4x 刷新(�㊷ 执行棒收官 · ✅ P2/S7「规模回归�四项�测全绿 · ✅ 零回归三件套全绿 · 🔴 D8 云安全组�为唯一红(既存�在册待你��)· ➡� 下一棒 = �㊸ 执行棒(观测�缺�收�))**:**一�� = 四项规模读数�自拿到原始读数并与基线�项对� —— 候选数�退化�回�字节"按组线性增长"被机器断言�切�耗时� 20.9 s(� 30 s)�而直连�功率**�有模拟器是 1.0000,真机�是 0**。** **四项读数(⛔ 无编数)**:**① 候选数** = `dshs@47` 与 `dshs-worker@106` � `count=3 hosts=3`(≥ `CAND_MIN=2`,**�字��㉙ 基线**;⚠� `hosts=3` **≠ 独立路径数** —— �两�候选摘���**�� 47** ⇒ 机器级�有 **2**)+ 直连候选准入 `accepted=3 / rejected=9(全具�)/ silentRejections=0 / 按网分桶=true` + **规模夹具**(2 网 × {4,16,64} 节点)`accepted 10/34/130`(线性)�`rejected 32/128/512`(8 类原因� perNet �)�`silentRejections=0`。**② 直连�功率** = 🔴 **"判��立"与"冗余建�"已分开报** —— **本系统规格器(离线 NAT 模拟器,�一份 `runPunchAttempt`)正腿 `24/24 = 1.0000` ���p50 建连 155 ms**,负腿 `one-way(a/b)` � 12 全 0�`both` 全 `deadline`;**真机** `47→106` **� 21 收 0**�`106→47` **� 28 收 0** ⇒ **��达**(D8 未放行)⇒ ⛔ **未把"直连建立了"写��功**,真机形� = **回� wss 且� id ��**。**③ 切�耗时** = `幕4-C` **20871 ms / 30000**�`幕1-A` **20605 ms**�`幕4-A` **18815 ms**(n=3,**�在 deadline 内侧**;对照�⑨ 修�基线 **20.9–23.9 s** ��级);收�� `jitter.p95AbsDeltaMs=6 ms / overThreshold=false`(⚠� 阈值���点在�数表 **§4** `RELAY_FAILOVER_DEADLINE_MS`,⛔ **�是 §3.2** —— §3.2 是打洞率;已如实留档于 §8.9-⑥-5)。**④ 回�字节** = �一份 5,255,225 B/6 �夹具:`1组×4节点` **1.0000**(5,255,225 B)�`1组×16节点` **1.0000** �`4组×4节点` **4.0000**(21,020,900 B)�`8组×4节点` **8.0000**(42,041,800 B);对照腿 **4/16/16/32×**;🔴 **�组�计� `1.0000` ⇒ 回�字节 � 组数�⛔ ��组内节点数增长**(与�㉔ `1.0000 ⇄ 4.0000`��㊛ `4 组 = 21,021,572 B = 4.0001×` �项对�);�行时接线腿(8 组×4 节点)**`hits.direct=144 / hits.wss=0`** 且 `idChecks=144 / idMismatches=0`(**�次命中都过 D7 �算闸门**)。📌 **附带更新 §10 未验�项**:`§10-1 本系统打洞�功率` = **模拟器 1.0000(n=24) � 真机 0.0000(n=2 方�) 并列(公网场景���判定)**|`§10-2 中继带宽节�(内容�)` = **75.00%(组内 4 人)�93.75%(组内 16 人)� 1 − 组数/节点数**,真机 = 0|`§10-3 切�耗时` = **18.8–20.9 s**。**零回归三件套** = `npm.cmd test` **201/200/0/1**(�字�基线)|`--scene all --table` **12P/0S/0F**(rc=0;**6m20s**;**未套外层超时** ⇒ 末尾 `restore()` 正常执行�两� relay `active`)|探针 **28P/0S/0F**(开工� + 收��两次�值)。**边界自�** = ⛔ 未 commit / 未 push(HEAD **`09ce76f`**,`git status --short` **19** 处 = 与�㊶ **�数相�** ⇒ 零新增)|⛔ **本棒零仓内改动**(三项夹具全在工作区 `tmp/历�过程目录/_tmp_seq42/`)|⛔ 未改 `server.ts` / `content/**` � id �径 / `nft`(**72 行**)/ `nginx` / `bwrap`(47=**0.4.0**�106=0.11.0)|🔴 `RELAY_FAILOVER_COOLDOWN_MS=0` 命中 **0**|🔴 密钥本体��网络 / relay(`content-group-key.json` 两机� `600`)|⛔ **零个新增 / 改动生产 env**�⛔ **零新增监��**(`21100–21115` 收�� **0 行**)。⚠� **三�如实留档**:① **探针 / 演练必须从「工作区根�跑**(按 cwd 找�数表;从代�仓根跑 ⇒ rc=2 `�数表装载失败`)② **演练��原程��"�够久"**("
> 🆕 **2026-09-18 14:0x 刷新(åº�㊶ 执行棒收官 · ✅ P2/S6「`peer` 档接线 + **D7 å�— id å¤�ç®—**ã€�å·²è�½åœ°ç”Ÿäº§ · ✅ 零回归三件套全绿 · 🔴 D8 云安全组ä»�未放行(既存唯一红,本棒å�ªè¯»æ ¸å¯¹ï¼‰Â· âž¡ï¸� 下一棒 = åº�㊷ 执行棒(P2 · S7 规模回归))**:**一å�¥è¯� = `peer` 档从此有了"优先直连ã€�回è�½ wss"çš„å�Œé€šé�“,且**å�–回的å�—å¿…é¡»å¤�ç®—å�— id æ‰�算命中** —— "零回æº�"å†�也没法é� å�‡ç»¿ç³Šè¿‡åŽ»ã€‚** **交付** = 改动 **2 个æº�文件**:`src/net/relay/content/runtime.ts`(`fetchFromPeers()` + å�Œé€šé�“ `PEER_CHANNEL_ORDER = ['direct','wss']` + 🔴 **D7 å¤�算闸门**(`blockIdOf(gotBytes) !== id` ⇒ **丢弃且ä¸�算命中**ã€�`idMismatches` 计数)+ `peerWireSnapshot()` + `noteDirectCandidate()` / `withdrawDirectCandidate()` + 注入å¼� `peerChannels`)ï¼�`src/net/relay/content/source.ts`(**仅注释**:写明å¤�算闸门**刻æ„�放在装é…�层**ã€�â›” ä¸�放进"五档通用链"以å…�分层退化);观测é�¢ = `scripts/overlay-direct-probe.cjs` 新增 **`peer-wire` å­�命令**(**13 æ�¡å…·å��判æ�®** + å�— id ä¸�å�˜æ€§è¯»æ•°ï¼‰ã€‚**判æ�® D7 先红å�Žç»¿ï¼ˆåŽŸæ–‡è¯»æ•°ï¼‰**:**主判æ�®** = 接线å‰�å�Žå�— id **é€�字一致** —— `idsDigest = ec70e7166ae24b1367c7c251ead8ad2979f66463ae3e6380eeda84fabb985c3a`(**四处å�Œå€¼**:本机接线å‰�ï¼�本机接线å�Žï¼�**47 生产接线å‰�**ï¼�**47 生产接线å�Ž**;明细 `plain putPlan[0] = 3374319c90813e8f7911654132f34a0c`ã€�`cipher putPlan[0] = 8dd3ea58093df7130ba07722cd28bf81`);**先红腿 â‘ ** = 扰动 `blockIdOf`(`sha256(bytes ‖ ff)`)⇒ digest → `fbb80585c86a4c492f6d71a7af9212121f35c2c43f2cc7018d08149e2cff5ac3`ã€�六个 id å…¨å�˜ï¼Œè¿˜åŽŸå�Ž md5 é€�字回 `a69b3379c719562c46d3e63832bdf25d`ã€�`diff` 空 ✅;**先红腿 â‘¡** = 拆掉å¤�算闸门 ⇒ `peer-wire` **判æ�® ⑦ 转 FAIL**,原文 `{"tier":"peer","bytesMatch":false,"hits":{"direct":0,"wss":1},"errors":{"direct":0,"wss":0},"idChecks":1,"idMismatches":0,"peerHitsTotal":1}` = **篡改å�—被记æˆ�"命中æˆ�功"çš„å�‡ç»¿æœ¬å½¢**,还原å�Ž âœ… 且 `idMismatches=1`ã€�`tier=null`。**E1 回归**(对照åº�㉔/㉛)= 接线腿 `amp=1.0000`(A 臂 `originFetches=6 / 5,255,225 B`ï¼›B 臂 `servedFromPeer=18`ã€�`peerWire.hits=[6,6,6]`ã€�`idChecks=[6,6,6]`ã€�`idMismatches=[0,0,0]`ã€�`downReasons=[{direct:not-wired:6}×3]`)ï¼�对照腿 `amp=4.0000`(`originFetches=24 / 21,020,900 B`ï¼›B è…¿ `downReasons={direct:not-wired:6, wss:not-wired:6}`)⇒ **4.00× → 1.00× é€�项对é½�**ï¼›`idGate = {idChecks:18, idMismatches:0}`。**读数** = 探针 **28 PASS / 0 SKIP / 0 FAIL**(rc=0,与基线å�Œå€¼ï¼‰ï½œ`npm.cmd test` **201/200/0/1**(é€�å­—å�ŒåŸºçº¿ï¼‰ï½œ`--scene all` **12P/0S/0F**(rc=0;幕4-C **18990 ms** / 30000ï¼›**未套外层超时** ⇒ 末尾 `restore()` 正常ã€�两å�° relay å�‡ `active`)|`test/overlay-content.test.mjs` **44/44**。**部署** = **4 处**(47 `/opt/dshs/lib` + `/opt/dsh-relay/lib`ï¼›106 `/opt/dshs-cluster/lib` + `/opt/dsh-relay/lib`ï¼›`runtime.js` md5 **四处全å�Œ = `c9a8b01a78524d31cd77fde32895839a`**ã€�`source.js` = `43cb1b7ab5387ff9745e8dab7726b68b`;接线å‰� `runtime.js` = `7fe548c42b71b9e4785f139561fe8925` = 47 生产原值);é‡�å�¯ 47 `dshs-relay` + `dshs`ã€�106 `dshs-relay`;回滚点 = 两机 `/opt/dsh/backups/seq41-20260918-135146/`。真机 **`content.peerWire` 新键在线**(`{"order":["direct","wss"],"wired":{"direct":true,"wss":false},"attempts":{"direct":0,"wss":0},"idChecks":0,"idMismatches":0,"directCandidates":0,"last":null}`;既有 `source` 读数未å�˜ï¼‰ã€‚🔴 **D8 ä»�红(å�ªè¯»æ ¸å¯¹ã€�â›” 未实施)**:å�Œå�‘å¹¶å�‘ UDP **47 å�‘ 29 æ”¶ 0 ï¼� 106 å�‘ 28 æ”¶ 0**(`reason=deadline`),两机 `nft` **72 行**未动 ⇒ 挡在**云侧**;拟录 **ä¹™-1** 两æ�¡**原样维æŒ�**,⛔ 未改任何云侧规则ã€�â›” **无任何 `0.0.0.0/0`**ã€�â›” 未索å�– / 未硬编ç �任何云 AK/SK。⚠ï¸� **三æ�¡å¦‚实留档**:**â‘ ** 真机å�Œå�‘直连ä»�**ä¸�å�¯è¾¾** ⇒ `peer` æ¡£**正确形æ€� = å
> 🆕 **2026-09-18 13:2x 刷新(åº�㊵ 执行棒收官 · ✅ P2/S5「直连候选交æ�¢ + 打洞探测ã€�å·²è�½åœ°ç”Ÿäº§ · ✅ 零回归三件套全绿 · 🔴 **D8 云安全组未实施(唯一的红)** · âž¡ï¸� 下一棒 = åº�㊶ 执行棒(P2 · S6))**:**一å�¥è¯� = 直连的"能ä¸�能连ã€�è°�æ�¥è¿žã€�怎么关"三件事已ç»�能在生产上被机器断言,但**云侧那é�“门还没开**。** **交付** = 新增 `src/net/relay/direct/{candidate,punch,index}.ts`(候选交æ�¢ + `dgram` 打洞 + 开关/默认值/æ��示)+ `src/web/routes/overlay-nodes.ts`(**P1 出å�£é¡¹**:管ç�†é�¢ API)+ `scripts/overlay-direct-probe.cjs`(å�ªè¯»è§‚测é�¢ï¼‰ï¼‹ `test/overlay-direct.test.mjs`(10 用例)+ 探针 `OBS-26/27/28` + å�‚数表 §3.11(12 键)/ §6(3 行);**改动** `network.ts`(**å�ªåŠ ** `isAllowedDialer` = 白å��å�•准入的**唯一å�¯å¤�用出å�£**,⛔ 未动 `server.ts` 一字)ï¼�`join.ts`(新节点é…�置带 `direct`,缺çœ�开)ï¼�`overlay-node-join.cjs`(`--direct`)ï¼�`web/server.ts`(挂路由)。**判æ�® D1–D6 é€�æ�¡è¿‡**(**先红** = 旧产物入å�£å�³ç¼ºï¼š`Error: Cannot find module '/opt/dshs/lib/net/relay/direct/index.js'`ï¼›**å�Žç»¿** = `OBS-26/27/28` 三行 PASS):**D1** 候选准入 `接å�— 3 / å…·å��æ‹’ç»� 9 / é�™é»˜æ‹’ç»� 0 / 按网分桶 true / 准入实现 network.ts#isAllowedDialer`(**"ä¸�å�¦å†™ä¸€ä»½"ç”± `T4` 读 `server.ts` æº�ç �原文核对两处闸门 + 断言 direct 模å�—内ä¸�出现 `dialers.get(` æ�¥å®ˆ**);**D2** 开关三层è¯�æ�® = 实现层(`on 1/1` ⇄ `off å�Œé›¶`)+ **内核å�¯è§�层**(47 `ss -lunp` 区间 `[21100,21115]`:基线 `0` → **正对照**(真绑一个å�£ï¼‰`1` → 关闭æ€� `0`)+ 真机腿;**D3** `default={enabled:true,source:default}` + `join 回读 direct=true` + 管ç�†é�¢ç«¯ç‚¹ **404 → 401**(对照 `/dshs-overlay/bootstrap` 200ã€�门户 200);**D4** æ��示 3 段(è°�会连进æ�¥ï¼�怎么关ï¼�关掉影å“�什么);**D5** æˆ�功路径 `å�Œå�‘=true / attemptsOk=2`(⚠ï¸� **云上真机å�Œå�‘ä¸�å�¯è¾¾** ⇒ ç”±**离线 NAT 模拟器**承载,⛔ ä¸�是"公网一定能打洞"çš„è¯�明);**D6** 判死 `deadline/600ms/bounded=true` + 冷å�´ `300000ms/二次被挡/0 值构造å�³æŠ›`。**读数** = 探针 **28 PASS / 0 SKIP / 0 FAIL**(rc=0;基线 25P ⇒ **+3 = `OBS-26/27/28`**)|`npm.cmd test` **201/200/0/1**(é€�å­—å�ŒåŸºçº¿ï¼‰ï½œ`--scene all` **12P/0S/0F**(幕4-C **23422 ms** / 30000)。**部署** = **4 处**(47 `/opt/dshs/lib` + `/opt/dsh-relay/lib`ï¼›106 `/opt/dshs-cluster/lib` + `/opt/dsh-relay/lib`,**32 个 md5 å…¨å�Œã€�ä¸�一致 0**)+ 3 个脚本到 47 `/opt/dshs/scripts/`ï¼›é‡�å�¯ 47 `dshs` + `dshs-worker`;回滚点 = 两机 `/opt/dsh/backups/seq40-0918-1255/`。🔴 **D8 = 本棒唯一的红(未实施)**:云安全组 UDP 入站**ä»�未放行**(**å�Œå�‘实测å�‡å�‘ 20 æ”¶ 0**;宿主机 `nft input policy = accept` ⇒ 挡在**云侧**);**拟录 ä¹™-1 两æ�¡**(目标 `47.77.182.89` / `106.54.21.172` × 入站 × UDP × `21100/21115` × æº�分别为 `106.54.21.172/32` / `47.77.182.89/32`,⛔ **零个 `0.0.0.0/0`** —— é€�æ�¡æ¸…å�•è§�交接å�• **§8.2-D8**);**未实施的ç�†ç”±** = 属 §1 边界外第 â‘£ 类(**需用户æ��供控制å�°è®¿é—®æ–¹å¼� / 审批**)⇒ â›” **未索å�–ã€�未硬编ç �任何云 AK/SK**。⚠ï¸� **三æ�¡å¦‚实留档**:**â‘ ** 本棒**自造过一次生产影å“�** —— 首次 `--scene all` 被我加的 `timeout 300` **截断** ⇒ 末尾 `restore()` 未执行 ⇒ **106 `dshs-relay` å�œæœºçº¦ 4 min**(13:05:58 → 13:10 å�‘现å�Žç«‹å�³ `systemctl start` å¤�原;该窗å�£é—¨æˆ· / 实例é�¢**全程 200**ã€�无业务中断è¯�æ�®ï¼‰â‡’ **教训已写进交接å�• §8.3 与下一棒 prompt:⛔ ä¸�许给 `--scene all` 套å°�于 ~8 min 的外层超时**ï¼›**â‘¡** 修掉**两æ�¡æœ¬æ£’自造缺陷**(å�‡åœ¨**本棒新建的观测脚本**内,⛔ ä¸�涉任何既有生产代ç �):`--ss` 是**布尔开关**å�´è¢«æŒ‰"带值选项"è§£æž� ⇒ 该腿**æ�’为 null(死代ç �)**ã€�ä
> 🆕 **2026-09-18 12:3x 刷新(�㊴ 规划棒 · ✅ P2 ���地 + 本线首份 P2 �执行�已出 · ➡� 下一棒 = �㊵ 执行棒(P2 · S5))**:**一�� = 你�的两�已��一份能直接开工的�。** 你的原� = `1 用户�设置,默认开��示用户 2 乙` ⇒ **①** 打洞能力**交给用户自己控制**(�设置)�平�**默认开�**且**必须�示用户**(⛔ �是简�的"开 / �开");**②** 云安全组 UDP 入站**仅放行对端节点 IP**(⛔ **�** `0.0.0.0/0`)。**产物** = 工作区根 **`交接�/交接�_覆盖网络直连与P2P_20260918.md`**(**归档� 132** · **239 行** · **§8 ��缀 `8925c2460810c6dc5cdbc075b6cdaed2`**):用户�径 + **8 �已��事实** + 在册文件集 + 技术路线 + 判� **D1–D8** + 步骤 **S5 / S6 / S7** + ��影�评估(**已��**)+ 回报格� + 回头�件 + 未验�项。**�数表 §8 新增 ⑩ 行**(= 本期**唯一**���的扩大项,形�已被��收窄)+ **§10 指纹** `2275870a5a9eb1964a648f2950dee528` → **`d408d640246a980f702fe7b0a2895219`**(现算并�步)。🔴 **一�如实登记的技术现实**:**乙**�求云安全组按"对端节点 IP"放行,而**家宽 / 移动节点的公网出� IP 会�** ⇒ �㊴ **自决(�推翻)** = **乙-1 起步**(�对**有固定公网 IP** 的节点开;**家宽节点本期走中继**,⛔ �影��用性);**乙-2**(�自动)/ **乙-3**(云 API 自动化,🔴 **需云 AK/SK**)登记为新� §9 回头�件 —— ⛔ **未请求任何凭�**。**边界自�** = ⛔ **零代�改动** · ⛔ **零�务器改动** · ⛔ 未 commit / push(HEAD `09ce76f`)· ⛔ 未改任何生产**值**(�数表**�加�改**)· ⛔ 未开工 P2。➡� **下一棒 = �㊵ 执行棒(P2 · S5:直连候选交� + 打洞探测)**,automation **`d4fa99ac-6f7b-400f-89e7-797de3b7681a`**(一次性 · **2026-09-18 12:33**)。
> 🆕 **2026-09-18 12:0x 刷新(�㊳ 执行棒 · ✅ �㊲ 留下的两项按你��全部收� · � 判定� =「线内���,⛔ 未登记下一棒)**:**一�� = 探针的"夹具模�"从此是**�闭**的 —— 夹具跑里�也�会有任何一次 ssh 摸到生产。** 按你 `1 a 2 改� 3 说下�定的具体内容` ���地:**① 夹具�闭性(A 方案)**:`OBS-24` / `OBS-25` �数改为 `… else if (fixture) { SKIP + 留痕 } else { ssh }`(**守�排在 ssh 之�**)+ 探针文件头新增「**�闭性**�硬约�段;**先红�绿**(两侧�一份 `--table` 副本:`SSH_TARGET_47/106` → `127.0.0.1`�`SSH_PORT` → `1` ⇒ **"是� ssh"���观测差异**)🔴 红腿(摘掉守�)= `FAIL OBS-24 � 注册表读�失败…:Command failed: ssh -p 1 -o BatchMode=yes 127.0.0.1 …` + `Connection refused`(**真 ssh 调用 2 次**);🟢 绿腿 = `SKIP OBS-24 夹具模�未给 --nodes-fixture ⇒ SKIP + 留痕(⛔ �去 ssh 读生产)`(**真 ssh 调用 0 次**);两侧�行 diff **�差这两行**;**�分性** = 给�存在的夹具路径 ⇒ `FAIL … 夹具�存在:…`(⛔ �是 SKIP)。**② 键�对�**:`DRILL_RELAY_UNIT` → **`RELAY_UNIT_NAME`**(**值格未动**�� `dshs-relay` ⇒ ⛔ 零个新增 / 改动生产 env;引用 3 处全改;⚠� 文档库档案�追改)—— 真机端到端�� = 演练� `SKIP OBS-08` 原文走通了� 「systemctl is-active ${RELAY_UNIT_NAME}� 的那� ssh ✅。**③ P2 待��清� = 交接� §8.11**(�登记�⛔ 零动作):核心两� =〔①〕**���为打洞开「UDP 入站�云安全组规则**(A 开 / B �开)〔②〕**若开,入站 UDP 段的��范围**(甲 `0.0.0.0/0` / 乙 仅对端节点 IP / 丙 走已建�的 443 兜底);�� = 实测三�(**云安全组拦 UDP 入站** —— 47 的 UDP 观察器开放 ≈75 s **零收包**�⛔ �是 nft:`input policy = accept`|打洞 **2/2 �打洞**�对端→本机 **10/10 收包**�本机→云机��到|**云机↔云机本就是 L1 直连��打洞场景**)。**读数** = 探针 **25 PASS / 0 SKIP / 0 FAIL**(rc=0)|`npm.cmd test` **201/200/0/1**|`--scene all` **12P/0S/0F**(幕4-C **20770 ms** / deadline 30000)。**�数表 §10 指纹** `71848fad4ee0d6a574d833169e042fd1` → **`2275870a5a9eb1964a648f2950dee528`**(**现算并�步**)。**边界自�**:⛔ 未 commit / 未 push(HEAD **`09ce76f`**,`git status` **11** 处 = �㊲ 的 10 处 + 本棒新增的 `scripts/overlay-failover-drill.cjs`,**���解释**)|⛔ 未改任何生产**�置值**(**值格一律未动**)|⛔ **零新增暴露�**(`OBS-11 多出 0 缺失 0`)|🔴 `RELAY_FAILOVER_COOLDOWN_MS` 命中 **0**|⛔ 未开工 P2。🔴 **�:P2 需你先��**(= 上�第 ③ 项,详�交接� **§8.11**);⛔ **在 P2 之�本线无其它在册项**。
> 🆕 **2026-09-18 11:2x 刷新(�㊲ 执行棒收官 · ✅ �㊱ 留下的两�点�全部消除 · ✅ 零回归三件套全绿 · � 判定 =「线内���,⛔ 未登记下一棒)**:**一�� = 观测�从此��钉死会漂移的端� —— `OBS-09` 的"在册"判�改为**从 `/status.endpoints[]` 派生**(派生的�一个端点都必须�达;派生为空 ⇒ SKIP + 留痕),「47 视角端点表为空�也��一律判红(`OBS-08` 能分开"挂在�一�中继"与"确实没挂客户端")。** **先红�绿**(原文级 · 两侧�行 diff **�差 `OBS-09` 一行**):夹具 = �数表**副本**(`PEER_INSTANCE_PORT` 回写�漂移�的 **21000**)+ 真实 47 `/status`(实例在 **21001**)⇒ 红 = `SKIP OBS-09 在册实例� 无|�在册 2 项:本机:20000,对端:21000`(**旧判�拿表值找�到实际在册的实例 = � SKIP**);绿 = `PASS OBS-09 在册实例�(派生 1 �):w-106:42717=401`。**�分**(�一份 47 空表输入 ⇒ **三�**输出):对端中继声明了端� ⇒ `SKIP OBS-08 端点表 0 � ⇒ SKIP + 留痕|… 客户端挂在**�一�中继**上(⛔ �故障�⛔ �判红)`(**真机 · `--scene all` 演练�实测**:47 = `ep=[] / used=1 / idOk=1`,106 = `[w-106:19000, w-106:21001]`)|两�中继都无该客户端会� ⇒ `FAIL OBS-08 …(两�中继都无该客户端会�)`|对端中继读�回� ⇒ `FAIL OBS-08 …(��判)`(⛔ �许�默当绿)。**产物** = 「交接�/交接�_节点一键加入与分组准入_20260918.md�**§8.9**(⛔ **§8 ��缀 `085e28b56a08aa1f01999bdb3e238911` �字��** ✅)+ �数表 **§11.5** + `scripts/overlay-probe.cjs`(**本棒唯一改动的仓内文件**)。**读数** = 探针 **25 PASS / 0 SKIP / 0 FAIL**(rc=0)|`npm.cmd test` **201/200/0/1**|`--scene all` **12P/0S/0F**(幕4-C **18353 ms** / deadline 30000)。**�数表 §10 指纹** `2ae954e2e07b47651a84e597c19a3444` → **`71848fad4ee0d6a574d833169e042fd1`**(**现算并已�步**;⚠� **值格一律未动** ⇒ **零个**新增 / 改动生产 env)。⚠� **�原**:跑完 `--scene all` � 47 视角确为空 ⇒ 按�内程�**� / � 106 `dshs-relay`**(~15 s �回� `used=2`)⇒ 探针回绿(⛔ **未��任何 worker**�⛔ **未�实例**);⚠� 演练�下 `OBS-01` / `OBS-04` �会红(**计数**判�:`used=1` / `idOk=1` < 阈值 2),**⛔ 与"端点表为空"无关**,�原��绿。**边界自�**:⛔ 未 commit / 未 push(HEAD **`09ce76f`**,`git status` **10** 处与开工�数相�)|⛔ 未改任何生产**�置值**|⛔ **零新增暴露�**(新读数走**回环 + 既有 ssh**;`OBS-11 多出 0 缺失 0`)。🔴 **两项待你过一眼(�**超本棒范围**�按纪律�报告�动手)**:① 探针**夹具模��闭性**歧义(`OBS-24`/`OBS-25` 分支**无 `fixture` 守�** ⇒ 未给�自夹具时会真去 ssh 读**生产**读数;二选一建议� §11.5-⑤-3)② �数表 `DRILL_RELAY_UNIT` 键�与用途已�相称(**文档**项)。🔴 **P2 �需你先����影�评估(R5)** ⇒ 在 P2 之�**本线无其它在册项**。
> 🆕 **2026-09-18 10:4x 刷新(�㊱ 收��核棒收官 · ✅ 唯一未�原项 `OBS-09` 已�原(SKIP → PASS)· ✅ 产物��现(33/33)· ✅ 零回归三件套全绿 · �� 下一棒 = �㊲ 执行棒)**:**一�� = 上一棒留下的那� SKIP �是 relay 故障,而是「实例被认领了�但平�看��� —— 用一次**设计内**的用户访问(自然替�)把「实例 → 本地 worker 的端�注册��新接上,探针回到 **25 PASS / 0 SKIP / 0 FAIL**。** 根因(原文级)= 106 `/healthz` 读 **`instances:0`** ⇒ `orchestrator.ts:558 listUserInstances()` � `mains`,而认领 `rehydrateAdoptedScopes()` **�写 `this.adopted`(:1492)** ⇒ 认领到的实例**平�侧���** ⇒ 端�永� `forward()`(**「退出路径��实例�候选 B 的已知边界的直接�果,⛔ � relay 故障**:relay 全程正常,`OBS-12` RSS ≈70 MB)。**�原** = 临时 session(**R4**)一次 `guest.alotbuy.com` 访问 ⇒ 实例被 `cleanStaleScopes` 自然替�(10:18:34 `dsh-100002-7d1c8cbf.scope`)⇒ `/healthz` = `{"instances":1,"tunnel":{"ready":true,"ports":[19000,21001]}}`�用户��� **http 200 / 62451 B / `502` 标记 0**;临时 session 已删(`DELETE 1` ⇒ 余 0)。**产物** = 「交接�/交接�_节点一键加入与分组准入_20260918.md�**§8.8**(⛔ §8 ��缀 **`085e28b56a08aa1f01999bdb3e238911` �字��**)+ �数表 **§11.4-⑧**。**读数** = 探针 **25 PASS / 0 SKIP / 0 FAIL**(`PASS OBS-09 在册实例� w-106:42717=401`)|`npm.cmd test` **201/200/0/1**|`--scene all` **12P/0S/0F**(幕4-C **17375 ms** / deadline 30000)|`test/overlay-join.test.mjs` **33/33**。🔴 **一处实测替�**:�数表 `PEER_INSTANCE_PORT` **21000 → 21001**(替��点漂移 = `spawn.ts#findFreePortInRange` 上扫;**事实优先,⛔ 未为�就旧值去��生产实例**)⇒ **§10 指纹 `695dcb4d88a778840322bc221417d339` → `2ae954e2e07b47651a84e597c19a3444`**。⚠� **两�点�(本棒 ⛔ 未改�)**:① `OBS-09` 的"在册"判�**钉死会漂移的实例端�** ⇒ �次自然替��都�能**� SKIP**;② **探针�读 47 的 `RELAY_STATUS_URL`**,而 `--scene all` 会把 106 worker 逼到 **106 自己的中继**(实测 47 视角 `ep=[] / used=1 / idOk=1`)⇒ 潜在**�红** —— 两者交 **�㊲**。⚠� **本棒对生产的 3 个动作**(� **R8**�动手�已声明�无��逆项):guest 实例一次设计内替� � 106 `dshs-relay` **���一次**(逼 worker 按候选链回� 47,~15 s)� �数表**文档**值�步 —— ⛔ 未��任何 worker�⛔ 未 commit / 未 push(HEAD **`09ce76f`**,`git status` **10** 处与开工�数相�)。
> 🆕 **2026-09-18 10:0x 刷新(�㊱ P1 执行棒收官 · ✅「节点一键加入 + 分组准入�P1 �地并真机跑通 · 🔴 唯一未�原项 = `OBS-09` 退化为 SKIP)**:**一�� = 用户�的「开一�结点�务器就能连上覆盖网络�在 P1 上已�能用一�命令�完** —— 控制�签�**一次性 + 有效期 + 网络绑定**的邀请凭�(载�**��密钥本体**)→ 节点侧 `overlay-node-join.cjs` **一�命令四步全自动**(校验凭� / 生�节点�钥(**�出机**)/ �地本机�置 / 产申请�)→ 控制� `overlay-node-admit.cjs apply` 收�(**原��� nonce ⇒ �好一��功**)→ `approve` 批准 → `derive` 把已批准集�**投影**� relay 白��(缺� dry-run;**手写 drop-in 退化为应急通��⛔ �删**)。**产物**(在册文件 8 个,⛔ 零越界):新增 `src/net/relay/registry.ts` / `src/net/relay/join.ts` / `scripts/overlay-node-admit.cjs`(8 �命令)/ `scripts/overlay-node-join.cjs` / `test/overlay-join.test.mjs`(33 用例);修改 `src/net/relay/network.ts`(**�加 40 行**)/ `src/net/relay/index.ts` / `scripts/overlay-probe.cjs`(**`OBS-24` / `OBS-25`**)/ `docs/覆盖网络/�数表_覆盖网络_20260917.md`(§3.10 新增 **8 键** + §6 两行 + §7 一行 + §11.4 补记)。**判�** = `J1`–`J6` **��先红�绿**(原始读数�交接� §8.2)+ 零回归三件套。**零回归三件套** = `npm.cmd test` **201/200/0/1**(与开工基线**�字一致**)|`--scene all --table` **12 PASS / 0 SKIP / 0 FAIL**(rc=0)|`overlay-probe --table` **24 PASS / 1 SKIP / 0 FAIL(rc=0)** —— ⚠� 与开工基线 **23P/0S/0F** 的差 = 新增 `OBS-24/25`(**+2P**)+ **`OBS-09` 由「在册�退化为「�在册 ⇒ SKIP�(−1P/+1S)**,**FAIL 数�为 0**。🔴 **`OBS-09` 是本棒唯一未�原项**:**归因有原文** —— 本次�行的零回归演练��了两端 relay / worker ⇒ `OBS-01/04/08` 转红;执行��(47 `restart dshs` + 106 `restart dshs-worker`)�三者回绿,但 106 worker 的�注册读数由 **`accepted=[19000,21000]`** �为 **`accepted=[19000]`**(**实例端� 21000 的注册未�进程�建**)。✅ 两端实例 `:20000`/`:21000` **都在监�**�门户 **200** ⇒ **无业务中断**。**回头�件** = 下一棒收�若� SKIP 或出现「跨机实例�访问�通�⇒ �级独立�项(先查"实例 → 本地 worker 的端�注册"链路)。🔬 **真机缺陷一�(已修 + 已补判�)**:控制� CLI 的 **`--file` 键�混用** —— 它本是 `apply` 的**申请�**入��被注册表**文件路径**�用 ⇒ `apply --file <申请�>` 把注册表也指到申请� ⇒ 收�炸在第 4 步**而 nonce 已被原���**(对外 =「收�失败 + **�一张邀请�也用�了**�);修 = 覆盖键改� **`--registry`**,**先红�绿** = 临时改回 ⇒ 新增的 **E10(CLI 级真回环)** 转红并报出**�一�**「注册表 …/app.json 形状�法�,还原 ⇒ **33/33 全绿**。**教训**:调库�判�(E9)**抓�到**�数解�类缺陷。**边界自�** = ⛔ 未 commit / 未 push(HEAD � **`09ce76f`**)|⛔ 未改任何既有 drop-in / env / nft·nginx / bwrap|🔴 `RELAY_FAILOVER_COOLDOWN_MS=0` 计数 **0**(七个改动文件 `grep -c` 全 0)|🔴 密钥本体 ⛔ ��网络 / relay(申请�内�钥出现次数 **0**�节点�钥 **600**)|⚠� **新增状�目录** `/var/lib/dshs/overlay/`(§3.10 登记的**状�**,⛔ ��置�⛔ 未覆盖既有文件)。**�数表** = §3.10 + §6 + §7 + §11.4;🔴 **§10 指纹** `52e59df229102d5afa8c8bf01a960398` → **`695dcb4d88a778840322bc221417d339`**(**已现算�步**;**零个新增生产 env**)。**交接�** = `交接�/交接�_节点一键加入与分组准入_20260918.md`;**§8 ��缀回填�� = `085e28b56a08aa1f01999bdb3e238911`** ✅(���)。**P
> 🆕 **2026-09-18 09:1x 刷新(规划棒收官 · ✅「节点一键加入 + 分组准入�已出�执行交接� · 🔴 盘点�现"分组准入/独立网络"的底层机制**已�在代�里**)**:**一�� = 用户 09:07 �� **B**(补"设备自动�为节点 + 节点直连")并�求「**开一�节点�务器就能连上�节点�分组��许指定节点加入�既能�大网也能独立组网**�;本棒把它��一份�开工的交接�,并**把"分期"与"��分期"对�** —— **P1(一键加入 + 分组准入产�化)零新增暴露���立�开工**,**P2(直连 + P2P)命中 R5�放最�**。**产物** = 工作区根 **`交接�/交接�_节点一键加入与分组准入_20260918.md`**(归档� **131**;**§8 ��缀 `085e28b56a08aa1f01999bdb3e238911`**;��快照全文 md5 **`ca4ca8aad292efaf02357e1e2dacb6da`�214 行**,⚠� **现算**)。🔬 **本棒三���(⛔ 与旧�象冲�时以本节为准)**:**① 「分组准入�与「独立网络�的底层机制已在代�里** —— relay 的拨�方白��是 **`Map<networkId, Set<hostId>>`**�**没列到的网络一个都拨�动(默认拒�)**,且跨网 `DIAL` **在"能�能拨"这一步就走�到**(`server.ts` 原�:「**结构性隔离,�是策略性**�);`network.ts` 已定义 **`ops`**(平�自己的机器)/ **`u:<userId>`**(用户网)/ **其它显�命�**(留给二级网与测试网)⇒ **"独立覆盖网络" = 新增一个 networkId,⛔ 零代�**。**② 「一键加入��存在**:加入一�机器现�手工�四件事(装�元 / �密钥 / 写 `DSHS_RELAY_DIALERS` drop-in / DB 登记),全仓**无 join 入�** ⇒ 这正是 **P1 的主体**。**③ 「直连�与「P2P �回�都�存在**:`grep -i "punch|打洞|directPath"` 仅命中 `addr-override.ts`(= 443 兜底**钉 IP**,�是打洞);内容� `peer` 档在生产路径**�返回 undefined** ⇒ 属 **P2**。**判�** = `J1`–`J6` 六�(邀请凭�一次性 / 白��外拨�动 / 跨网结构性拒� / 一�命令接入 / 独立网零共享 / �钥�出机)+ 零回归三件套(基线 **23P/0S/0F**)。**🔴 ��分期(⛔ �许颠倒)**:**P1 = ⛔ 零新增暴露�**;**P2 的 S5(打洞)命中 R5** ⇒ 执行到 S5 �会**��一次**给出具体端�/�议清�(⚠� 这是 **R5 硬�求**�⛔ **�是���问** —— 用户 08:2x 选 B 时已知悉"新增直连暴露�"这�缺点)。**归档�** = **131**(现核 04 目录最大 **128**;129 / 130 = � A / � B,⛔ ��用;`mkdir .lock-131` �功;⚠� 本棒�� 04 孪生 ⇒ 收����释放�执行棒建档案时须**�新现核��**)。**边界自�** = ⛔ 零代�改动 · ⛔ 零�务器改动 · ⛔ 未 commit / push · ⛔ 未改任何生产值(**纯规划棒**)。
> 🆕 **2026-09-18 07:5x 刷新(åº� ㉛ 执行棒收官 · ✅ §10 未验è¯�项已补三é‡�化 + å�£å¾„定稿 + §8.13-â‘¡ 缺å�£ç»“清 · â�¸ï¸� 在册红项继续为零 ⇒ **线内å�¯å�œã€�â›” 未登记下一棒**)**:**一å�¥è¯� = 组密钥加密(C 档)"最å�Žä¸€å±‚ä¸�确定"被消掉 —— 性能开销有原始读数ã€�è½®æ�¢ä»£ä»·æœ‰å®šé‡�结论ã€�低熵安全性给出**定性边界**ã€�过渡窗å�£ä¸‰æ¡£æ›²çº¿é½�ï¼›å�•文两处å�£å¾„打架已定稿;47 上 `sign-group-key` 从"临时投放脚本"å�˜æˆ�**æ­£å¼�å­�命令**。**本棒**â›” **无独立交接å�•** ⇒ **è¯�æ�® = `交接å�•/交接å�•_组密钥加密_20260918.md` §8.14(全节)**。**六项主题é€�æ�¡**:**â‘  性能** = å�Œä¸€ä»½ **11,363,655 B / 11 å�—**ã€�n = 11 ⇒ 总墙钟 **p50 22.636 → 42.782 ms**ã€�**p95 23.020 → 43.599 ms**(**1.890× / 1.894×**,ç»�对 **+20.1 / +20.6 ms**),å�žå�� **502.02 → 265.62 MB/s**,密文固定开销 **+28 B/å�—**(⚠ï¸� å�•æ ¸ã€�页缓存全热ã€�两臂零回æº� ⇒ 是"**加密层自身æˆ�本**",⛔ é�žç«¯åˆ°ç«¯æ‰¿è¯ºï¼‰**â‘¡ è½®æ�¢** = 4 组 × 4 节点ã€�包 **5,255,225 B / 6 å�—** ⇒ 冷å�¯åŠ¨å›žæº� **21,021,572 B = 4.0001 × 包 = 1 × 包/组**;轮æ�¢ï¼ˆå�— id 改å�˜ **24/24 = 100%**)å�Ž**首轮å�Œå€¼**(比值 **1.0000**)ã€�第二轮 **0**ã€�**对照腿**第 3 è½® **0**(⇒ "回æº�由轮æ�¢å¼•èµ·"å�¯æ–­è¨€ï¼‰ï¼›ðŸ”´ **æ–°å�‘现代价 = æ—§ epoch 密文å�˜åžƒåœ¾ä¸”ä¸�自清**(`storeBytes` **5,255,393 → 10,510,786** ≈ ç¿»å€�)**â‘¢ 低熵定性** = æŒ�钥者枚举å�¯è¡Œï¼ˆ1000 æ�¡ **11.644 ms** ≈ 85,878 æ�¡/秒,域 2³² ≈ **14.7 h**)ï¼�中继枚举**ä¸�å�¯è¡Œ**(自造字典 **0/1000**,æŒ� 1 对也预测ä¸�出别的)**但相等性泄露æˆ�ç«‹**(10,000 å�— / 100 值域 ⇒ **ä»… 100 ç§�密文**)⇒ **定稿 = "中继看ä¸�到明文"æˆ�ç«‹ã€�"内容ä¸�å�¯æŽ¨æ–­"ä¸�æˆ�ç«‹**,⛔ **ä¸�写"很安全"** **â‘£ 过渡窗å�£ä¸‰æ¡£** = æ··å­˜ 20 å�—(写 epoch 4 + 历å�² 1/2/3,时钟注入)⇒ 归零时刻 å°� **60 s ⇒ +24 h**|中 **24 h ⇒ +48 h**|大 **7 d ⇒ +8 d**(阶梯衰å‡�;窗å�£å†… `epochExpired = 0`,超窗é€� epoch 点å�� + `decryptRejected +1`;写 epoch æ�’ **5/5 å�¯è§£**)**⑤ å�£å¾„定稿** = `OBS-23` 对"缺çœ�ä¸�å�¯ç”¨"å�– **`SKIP + 留痕`**,§4/S6 的「对旧生产必 FAILã€�**作废**,"真红"è…¿ç”±**æ�ƒé™�è…¿**承载(`0600→0640 ⇒ FAIL` å¹¶**点å��** `47=640 106=600`,rc=1ã€�ä»… 1 红)⇒ 定稿è�½ **§11.5**,⛔ **§4 / §6 正文零改动**(ä¿� §8 å‰�å‰�ç¼€ä¸�å�˜é‡�)**â‘¥ ç­¾å�‘固化** = `overlay-keyring.cjs` 铺 47 **两处**æ­£å¼�路径(`/opt/dsh-relay/scripts/` **就地更新** — 旧版 `grep -c sign-group-key` = **0**ï¼›`/opt/dshs/scripts/` æ­¤å‰�**ä¸�存在** = §8.13-â‘¡ 缺å�£ï¼‰â‡’ 两处 md5 å�‡ **`f1855eaef30f71fbca00ac0a92865c0e`**ï¼›**在机验è¯�** = `sign-group-key` **rc=0**(凭æ�® **274 B**ã€�`epoch=1 keyId=3560130eb0e5e4aa`ã€�**密钥本体出现 0 次**)ï¼�`verify-group-key` **rc=0**ï¼�**篡改 epoch ⇒ `signature-mismatch` rc=1**ï¼�`--epoch 9` 交å�‰æ ¸å¯¹ **rc=1**;⛔ **未é‡�å�¯ä»»ä½•å�•å…ƒ**(纯 CLI);回滚点 = **`/opt/dsh/backups/seq31-20260918-073857/`**。**零回归三件套** = `npm.cmd test` **201/200/0/1**(与基线é€�å­—å�Œï¼‰ï½œ`--scene all --table` **12 PASS / 0 SKIP / 0 FAIL**|`overlay-probe --table` **23 PASS / 0 SKIP / 0 FAIL(rc=0)**。🔬 **过程如实留档**:收å�£æœŸé—´å®žä¾‹è�½ç‚¹é‡�排曾出现 **19P/1S/3F** 与 **22P/1S/0F**(`OBS-09` SKIP)⇒ ä¾�åº� ㉙ 留档机制用 `/api/dsh/stop` + `/api/dsh/enter` 把实例è�½å›ž **21000** ⇒ `OBS-09`(`w-106:39027=401`)与 `OBS-21`(两路径 **count=3**)å�Œå�Œè½¬ç»¿ï¼Œâ›” **未编数ã€�未凑绿**。**å�‚数表** = §3.9 `CONTENT_EPOCH_GRACE_MS` **说明列**补三档曲线 + §6 `OBS-23` 行末补å�£å¾„定稿 + §7 è¡¥"å¤�ç®—ä»� **0 项**" + **新增 §11.3 补记**(六æ�¡ï¼‰ï¼›ðŸ”´ **§10 指纹** `08c2835a…` → **`52e59df229102d5afa8c8bf01a960398`**(**已现算å�Œæ­¥**;⛔ **零键零值å�˜æ›´** ⇒ 探针å�–阈值ä¸�å�—å½±å“�)。**è
> 🆕 **2026-09-18 07:3x 刷新(� ㉘ → � B 执行棒收官 · ✅ 组密钥加密(C 档)�地生产 · 🎯 本线在册红项继续为零)**:**一�� = 内容载�层从此按「组�`(network, group)` � **AES-256-GCM 确定性(收敛)加密**:组内密文**�字节一致** ⇒ �㉔ 的「按哈希共享���退化(`E1` ⛔ 未退回 `4.00×`),�时**中继看�到明文**(性能与安全兼得);探针 **23 PASS / 0 SKIP / 0 FAIL(rc=0)**。**产物** = 工作区根 **`交接�/交接�_组密钥加密_20260918.md`**(= � B · 归档� **130** · **§8 ��缀 `149596460288ca1a5b7abddc490f7909`** ⇒ **回填 §8 全节 + 新增 §8.13 ���字��**(= "§8 是截断点"这��径的�一次自�);全文 md5 **`cb6c8f70892231423ec90e444ffbb36e`**�**579 行**,⚠� **现算**)。**�了什么** = 新增 `src/net/relay/content/crypto.ts`(`0600` 密钥文件装载 + 加解密 + � epoch)+ � id 改 **β′ = `sha256(密文)`** + `source.ts` **唯一解密点** + `peer.ts` 新增 epoch 闸门(⛔ ��认 `sameGroup`)+ `runtime/main/web` 三处装�(**缺���用** ⇒ 行为�字回到�㉔)+ `overlay-keyring.cjs` 三个组密钥�命令 + 探针 **`OBS-23`** + �数表 §3.9 六键 / §6 一行 + `test/overlay-content.test.mjs` 追加 **F 组 16 例**。**密钥�维(🔴 本体 ⛔ ��网络�⛔ �� relay)** = 本机 `init-group-key`(stdout **�出 keyId** `3560130eb0e5e4aa`)⇒ 47 用**既有签�者**签 `(network, group, epoch, keyId)` 三元组 ⇒ 凭� **274 B**��字核 **�� `key` 字段 / ��密钥片段**;验签 rc=0,**篡改 epoch ⇒ `signature-mismatch` rc=1**;组密钥铺两机 `0600 root:root`(md5 两机� `42d01c359abd59136d707ae89fb6ee7b`)。**�用** = relay 侧 drop-in **�加 1 行** env(`DSHS_CONTENT_GROUP_KEY_FILE`)+ `restart dshs-relay`(47 **06:55:59** / 106 **06:56:02**)⇒ 两机日志 `[content-crypto] 组密钥已装载 … perms=0600 ✓`。**判� F1–F7 ��过**:F1 �明文两次密文 **md5 相�**(`3385e9d0…`,长度 = 明文 + 28)|F2 `decrypts=3` + `local+peer 命中=2` + `decryptRejected=0`|F3 跨组 **在认�阶段被拒** + `decryptRejected+1`(`E5` 未退化)|F4 ① 命中 **0** + ② **��命中 ≥ 1**(⛔ 两�腿都在,未踩 §9-4)|F5 `E1` **�退化**(4 轮 × 3 � ⇒ 全部 local 命中 = **12**�零回�)|F6 **七例具�**(`no-file`/`bad-perms`/`parse-error`/`group-mismatch`/`bad-key`/`bad-epoch`/`prev-key-bad`)|F7 �三件套。**零回归三件套** = `npm.cmd test` **201/200/0/1**(与基线�字�)|`--scene all --table` **12 PASS / 0 SKIP / 0 FAIL**|`overlay-probe --table` **23 PASS / 0 SKIP / 0 FAIL(rc=0)**(**22 → 23**,新增� `OBS-23`)。**部署** = **18 文件 × 四处**(47 `/opt/dshs/lib` + `/opt/dsh-relay/lib`;106 `/opt/dshs-cluster/lib` + `/opt/dsh-relay/lib`)**md5 �一致�数 = 0**;回滚点 = 两机 **`/opt/dsh/backups/seq28-20260918-065104/`**;**回滚 = 删该 drop-in → `daemon-reload` → `restart dshs-relay`(秒级��逆)**(已�密文按"认�失败"被丢弃��从 origin ��)。**�数表指纹 `3b295a8c43aafc4a62c6f1a59ea0b43a` → `08c2835a7e9f0faef20f9c1d3e619d55`**(§3.9 +6 键�§6 +`OBS-23`)。**边界自�** = ⛔ 未改任何生产值(新 drop-in � 1 行 env;`40-content-probe.conf` 两机 md5 未�)· ⛔ 未新增公网监�� · ⛔ 未改 nft·nginx · ⛔ 未放�跨组 · 🔴 `COOLDOWN_MS=0` 两机计数 **0/0** · ⛔ 未 commit / 未 push(HEAD **`04776af`**,`git status` **35** 处)。**环境收�(按�㉙ 顺�)** = `restart dshs-worker` → `restart dshs` → 一次真实访问 ⇒ 实例�回 **21000** 基��端点表 `19000/21000` 全 True;临时 session `DELETE 3`�残留 **0**。⚠� **三�如实留档**:**① �文内部�径�一致(⛔ �本棒缺陷)** —— §4/S6
> 🆕 **2026-09-18 06:1x 刷新(åº� ㉙ 执行棒收官 · ✅ `OBS-21` 由红转绿 · 106 候选链建æˆ�冗余)**:**一å�¥è¯� = 106 ä¾§ relay 候选链从"退化å�•点"å�˜æˆ� **3 æ�¡**(判æ�® `CAND_MIN` = 2 未动),探针 **22 PASS / 0 SKIP / 0 FAIL(rc=0)** —— 本线**在册红项清零**。**根因(åº�㉗ å·²å�–è¯�ã€�本棒å¤�核一致)**:106 `/etc/dshs-worker.env` **æ— ** `DSHS_OVERLAY_DIR_PUBKEYS` ⇒ 目录**å�–到了也一律被 `no-trusted-keys` æ‹’** ⇒ 候选链æ�’退化为内置ç§�å­�å�•点。**改动(全åº�唯一一处,技术项自决)** = 106 `/etc/dshs-worker.env` **追加一行** `DSHS_OVERLAY_DIR_PUBKEYS=fd81a6dd7ee22cc121239253d9bee33585638823f5425b537da930e5054f3349`(= **47 å�Œä¸€æŠŠ**,47 侧真值æ�¥æº� = `/etc/systemd/system/dshs.service.d/overlay-dir.conf`ï¼›ç§�é’¥ `DSHS_OVERLAY_DIR_KEY=/etc/dshs/overlay-dir-key.pem`)+ `systemctl restart dshs-worker`。🔬 **å…ˆå�–è¯�å†�动手(⛔ 未采信"补钥å�³ç»¿",两æ�¡è·¯å¾„å�„自å�–è¯�)**:**(a) 公网路径** `https://alotbuy.com/dshs-overlay/bootstrap` ⇒ 106 上 `curl` = **http 200 / remote `172.67.194.206`(CF)/ 443 字节**,且 106 失败原因ç �是 **`no-trusted-keys`**(该ç �在 `fetchDirectory` 里**ä½�于 `fetch → res.json() → parseDirectory` 之å�Ž** ⇒ **"å�–到了ã€�å�ªæ˜¯éªŒä¸�过"** ⇒ å�¯è¾¾æ€§**æˆ�ç«‹**);**(b) 直连 `47.77.182.89:3080`** ⇒ `curl` **timeout(000)**(= 已知 `TCP_BLOCKED` 边界),⚠ï¸� **但å�–目录æµ�程根本ä¸�用 3080**(走域å�� → 443 → nginx → 回环 3080)⇒ **该边界ä¸�æž„æˆ�阻塞**。**先红å�Žç»¿ï¼ˆåŽŸæ–‡çº§ï¼‰**:补钥å‰� 106 = `[overlay-candidates] scope=worker count=1 source=chain urls=wss://alotbuy.com/dshs-relay`;补钥+é‡�å�¯å�Ž = `[overlay-dir] å�–å�€ = ç­¾å��目录(… relays=3, bootstrap=3):…(候选 3 æ�¡ï¼‰` + `[overlay-candidates] scope=worker resolves=1 count=3 hosts=3 source=startup`。**主判æ�®** = `OBS-21` **两æ�¡è·¯å¾„都** `count=3 ≥ 2` 且 rc=0(`dshs@47 count=3 hosts=3 ✓` ï¼� `dshs-worker@106 count=3 hosts=3 ✓`)。**零回归三件套** = `npm.cmd test` **201/200/0/1**(与基线é€�字相å�Œï¼‰ï½œ`--scene all --table` **12 PASS / 0 SKIP / 0 FAIL**|`overlay-probe --table` **22 PASS / 0 SKIP / 0 FAIL(rc=0)**(基线 21P/0S/1F ⇒ **该 1F å�³ `OBS-21`,本棒由 FAIL 转 PASS**)。**回滚点** = 106 `/opt/dsh/backups/seq29-20260918-054852/dshs-worker.env.orig`(md5 **`6b509ce447d9519241aa73243e07a69f`**);回滚 = 删该行 → `restart dshs-worker`(秒级)。**边界自è¯�**:⛔ 未改任何生产值(106 上 `RELAY_FAILOVER_|HB_SEC|PRESENCE_|DSHS_REHYDRATE_` 计数 **0**ï¼›106 env 与备份 `diff` = **å�ªå¤š 4 行注释+1 行键**)· â›” 未新增公网监å�¬å�£ï¼ˆ`OBS-11` 实际 **77** / 多出 **0** / nft accept 多出 **0**)· â›” 未改 nft·nginx · 🔴 `COOLDOWN_MS=0` 两机计数 **0** · â›” 未 commit / 未 push(HEAD **`04776af`**,`git status` **33** 处**与本棒开工时é€�数相å�Œ**)。**å�‚数表指纹 `3b295a8c43aafc4a62c6f1a59ea0b43a` 未å�˜**(本棒å�ªæ”¹ §11 补记区 ⇒ 按å�£å¾„**在 §10 å�£å¾„之外**);å�‚数表 **§11.2** 已记状æ€�改判。⚠ï¸� **两æ�¡å¦‚实留档**:**â‘  `DSHS_OVERLAY_DIR_CACHE` 106 ä»�为 0(⛔ 按"å�ªå�šè¢«æ˜Žç¡®è¦�求的事"未扩范围)** —— 47 的该键**å�Œæ ·ä¸º 0 且 47 侧一直绿** ⇒ 本棒**与"已验è¯�有效"çš„ 47 é…�ç½®é€�项对é½�**;缺它的å�Žæžœ = 目录ä¸�å�¯è¾¾æ—¶**没有 ④「过期缓存ã€�æ¡£**ã€�直接è�½ ⑤ ç§�å­�兜底(候选退回 1 æ�¡ï¼‰â‡’ 属**冗余韧性**而é�žæœ¬é¡¹åˆ¤æ�®ï¼Œè‹¥è¦�"CF 抖动期也ä¿�ä½� ≥2"需å�•独立项。**â‘¡ 🔴 一æ�¡æ—¢æœ‰ç¼ºé™·çš„实测补强(⛔ é�žæœ¬æ£’引入ã€�â›” 本棒ä¸�改ç �):孤儿端点æ�¡ç›®ä¸�会自愈** —— åº�㉚ è®°çš„"替æ�¢çª—å�£å†…短暂留 1 æ�¡ stale 端点æ�¡ç›®ï¼ˆ**自愈时延未测**)"本棒给出答案:`relay-tunnel.ts#cancel()` å�ªæ’¤é”€**当å‰�进程** `forwarded` 集里的端å�£ ⇒ **上一进程é�—留的æ�¡ç›®æ— äººæ’¤é”€**,å�ªèƒ½é� **å�Žç»­ä¸€æ¬¡"é‡�æ–°ç™
> �� **下一棒已登记(本棒唯一一个棒)= � B 执行棒(组密钥加密)**,automation **`65d2fc24-770e-4f33-93a3-db6e739aded7`**(一次性 · **2026-09-18 06:22** = 收� +~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = 1789683720000)。**��** = 工作区根 `交接�/交接�_组密钥加密_20260918.md`(**§8 ��缀 `149596460288ca1a5b7abddc490f7909`**,⛔ 回填 §8 �该�缀�须�字��)。⚠� **本棒收官� ㉙→� B 的定�已走完两棒**(� A ✅ 05:3x 收官 → ㉙ ✅ 06:1x 收官),**�一时刻�挂这一个**(用户 2026-09-18 00:3x 明令「最好��建立多个接续任务,一个会�结�时�排下一个�)。
> 🆕 **2026-09-18 05:3x 刷新(� ㉚ 执行棒收官 · ✅ 退出路径��实例已�地生产 + ✅ 探针 `OBS-22` 转绿 + 🔴 P1/P2 �绿)**:**一�� = 退出进程从此���实例;� ㉕ �留的「真机 E1 被 `teardown()` 挡��这个待��阻塞项已彻底结清,回收责任整体移交「�动认领 + TCP 探活判孤儿�。** **产物** = 工作区根 **`交接�/交接�_退出路径��实例_20260918.md`**(= � A · 归档� **129** · **§8 ��缀 `c9aeac82381f569fc8b9effad0fefa99`** ⇒ **回填 §8 全节 + 新增 §8.12 之���字��**(= "§8 是截断点"这��径的自�);全文 md5 **`681b84d503a1578178707a9ba6d87351`�584 行**,⚠� **现算**)。**�了什么** = 三处 `teardown()` �处最�改动(① `LocalSpawner.teardown()` **真改** = 删掉"� uid �实例"那行循环 + 17 行注释与守�标记 ② `RemoteSpawner.teardown()` **��已是 no-op**(与 HEAD �字相�)⇒ �补守�标记与说明�**语义改动� ≈ 0** ③ `LeasedSpawner.teardown()` **拆开"�心跳"与"�实例"** —— `stopHeartbeat()` �留)+ 新增 `test/orchestrator-teardown.test.mjs` **9 用例**(⛔ **刻��进 `npm test`** —— 那是硬编�文件列表)+ 探针新增 **`OBS-22`**(**两件套判�**:��守�读**部署产物**三处 `teardown()` 窗�须带 `MARKER` 且无 `TOKENS` + 认领� `scanned > 0 ⇒ adopted > 0`)+ �数表 **§3.8 六键**(`TEARDOWN_*`,⚠� **�被探针读��⛔ �写进任何 env**)与 **§6 一行**。**先红�绿(两�判别腿并列,⛔ �有一�会�绿)**:**(甲)** P1 判�对**旧生产** ⇒ 两机 `dsh-*.scope` 计数 **`1 → 0`**;**(乙)** `OBS-22` 对**旧产物** ⇒ **FAIL 并点�** `orchestrator` 的 `「await this.stop(userId);�`;**�测** ⇒ **红 3(`T1`/`T5`/`T6`,�处点�)/ 绿 9**,还原为**字节级**(3 个 `src` md5 �个相�)。**主判� = P1 + P2 �绿**:47 worker `1 → 1`�106 worker `1 → 1`�47 Manager `1 → 1`(**�判别腿**,�下);`{"scanned":1,"adopted":1,"stopped":0}` 自洽 + `[rehydrate] probe OK … :20000` / `:21000`。**零回归三件套** = `npm test` **201/200/0/1**(与基线**�字相�**)|`--scene all --table` **12 PASS / 0 SKIP / 0 FAIL**|探针 **21 PASS / 0 SKIP / 1 FAIL**(**1F = `OBS-21` 线内在册缺�,⛔ �本�引入**;⚠� `OBS-09` 由 SKIP → PASS = 存�实例在册且� `401` ∈ 集�)。**部署** = **4 处**(47 `/opt/dshs/lib` + `/opt/dsh-relay/lib`;106 `/opt/dshs-cluster/lib` + `/opt/dsh-relay/lib`)**六文件 md5 全�**(`orchestrator.js = 1456d1609f5872c2d635ae7cf4f5c26b` � `remote-spawner.js = 0438afd5738176999d3a4f4f404c9435` � `leased-spawner.js = 12ba045990b2054aaeebeb2c95d70f83`,**2026-09-18 05:3x �核未漂移**);回滚点 = 两机 **`/opt/dsh/backups/seq28-20260918-005909/`**(**6 文件**,� relay 侧旧值);�� 47 `dshs`+`dshs-worker`�106 `dshs-worker`(⛔ **未�� `dshs-relay`** —— 它�加载 supervisor);门户 **200**。**夹具已清**(两机 scope **0/0**�临时 session `DELETE 0`)。🔴 **本棒三�必须记�的**:**① 47 的 `dshs` 是 `LeasedSpawner(new RemoteSpawner(…))`(`DSHS_DEPLOY_MODE=cluster`)⇒ 它根本�构造 `LocalSpawner`** ⇒ 拿「47 `restart dshs`�当判别腿 = **�绿�判**(`[rehydrate]` 全�历�计数 **0** ��);**判别腿必须在两� `dshs-worker`**,�数表 §3.8 与 §6 已按此更正。**② 🔎 一处"范围新增"(如实登记)**:`/opt/dsh-relay/lib/supervisor/`(两机都在)**�有一套 supervisor 副本**且 `orchestrator.js` 曾�� **2 个版本**(`fad7926494578258f86a91eac613a204`)⇒ 本次**一并铺平**�旧值以 `relay-*.js` �存进�一回滚点(�� = R8 + R11 + � ㉖ �型先例);⚠� **回滚路径补正**(� §6 �写了 2 处)已写进该� **§8.12**(⛔ **§6 正
> ✅ **(已执行收官 · � ㉙ · 结果�上方 06:1x 刷新行)** 原登记:**下一棒(本棒唯一一个棒)= � ㉙(执行棒 · 106 候选链建�冗余)**,automation **`22170b0b-a606-461c-82a7-2f72fea68082`**(已于 2026-09-18 05:45–06:1x 跑完 ⇒ ✅ `OBS-21` 转绿�探针 22P/0S/0F)(一次性 · **2026-09-18 05:45** = 收� +~7 min ⇒ �在用户明令的 **5~8 分钟**窗�内)。**任务�点 = 让 `OBS-21` 真绿**(根因已��:106 `/etc/dshs-worker.env` 缺 `DSHS_OVERLAY_DIR_PUBKEYS`/`_CACHE` ⇒ 目录�被 `no-trusted-keys` 拒 ⇒ 候选链�退化为内置���点;⛔ �许放宽 `CAND_MIN` 凑绿;⛔ 先���动手,**若必须改网络拓扑 / 新增监�� / 改 nft·nginx ⇒ 立��手报告**(R5))。⚠� **� B 执行棒(组密钥加密)本轮⛔ 未登记** —— 用户 2026-09-18 00:3x 明令「**最好��建立多个接续任务,一个会�结�时�排下一个**�⇒ **�一时刻�挂一个棒**,� B 由**� ㉙ 收官时**登记。**定��写死:� A → ㉙ → � B**(� A ✅ 已收官;㉙ 紧�其�因其**�本最��能让探针转绿** —— 长期挂一�红项会�低判���度;� B 最大放最�,一次�动一个��)。
>
> 🆕 **2026-09-18 00:4x 刷新(� ㉘ 规划棒收官 · ✅ 两项架构级改造�出一份�执行交接�)**:**一�� = 用户 23:3x 的最终�径(`B` 先� + `C` 登记为架构目标 + 加密 `C 组密钥`)已�就��地��两份�直接开工的�。** **产物** = ① **`交接�/交接�_退出路径��实例_20260918.md`**(� A · **归档� 129** · **§8 ��缀 `c9aeac82381f569fc8b9effad0fefa99`** · ��快照全文 md5 `b1b93471081e10d9be9c28aa9b5c1d3c`�387 行;⚠� **全文 md5 �写死,���数 = `md5sum <本�>` 现算**)② **`交接�/交接�_组密钥加密_20260918.md`**(� B · **归档� 130** · **§8 ��缀 `149596460288ca1a5b7abddc490f7909`** · ��快照全文 md5 `40d35357a501596dcd1e6d7e70e8b371`�349 行)。**归档�现核**:`ls 调整方案/ \| grep -oE '^[0-9]+' \| sort -n \| tail -1` ⇒ **`128`**(🔴 **prompt 写的"至 112"已过期**;⛔ **63 空��补�** 已�核);�� `mkdir 调整方案/.lock-129` / `.lock-130` **��功**,⚠� **本棒�� 04 孪生**(��:本线 16 份 `交接�_*.md` **�无** 04 孪生 ⇒ 带孪生的是**方案类**文档,如 `123-` ↔ 根�� md5 �值)⇒ ��窗�����释放�**收官建档案时须�新现核��**。🔬 **本棒三���事实(⛔ 与上游结论冲�时以本节为准)**:**① 处② `RemoteSpawner.teardown()` 已�就是 no-op**(`remote-spawner.ts:329-331` **与 HEAD 版�字相�**,函数体�有一行注释「远端实例的寿命长于任何�个 Manager 副本�)⇒ 用户�径"三处一起改"与"处② 已符�"**�矛盾**:三处都纳入在册 + 都加机器断言,但处② **语义改动� ≈ 0**(�补守�固化);**② 两机当�活跃实例 scope 数 = `47: 0` � `106: 0`**(本棒实测)⇒ � A 的验收**必须先在真实形�夹具上�**(照� ㉕ �法:真 scope + 真 argv + 真监�端�),⛔ **�许拿"0 个实例"当绿**(`0 == 0` = �绿 ⇒ 已在� A §5 写��例�款);**③ `idle-reap` 缺�是�用的且 TTL 很长**(`config.ts:300-302`:间隔 **60 s** / TTL **7 天** / � host 上� **4**;两机 env �未覆盖)⇒ � A 的��「进程长期���时实例由 idle-reap / 用户访问替��收�**�立**,但**收得很慢(7 天)**。**� A 核心** = 三处 `teardown()` �处最�差异(① `LocalSpawner` **真改**�删掉�实例那行循环 ② `RemoteSpawner` **已 no-op��补断言** ③ `LeasedSpawner` **拆开"�心跳"与"�实例"**)+ **判�分三层**(**P0 夹具就� ≥ 1** → **P1 scope 数守�且两侧都 ≥ 1** → **P2 回收链**:`scanned > 0 ∧ adopted + stopped === scanned`)+ 🔴 **分层判定**:`scanned == 0` 而数守� ⇒ **P1 绿�P2 红,必须点�"实例没被�但认领没扫到"**�⛔ �得写全绿 + **对冲项**(�� grep 三处 `teardown` 体无 `stop`�动��测�`OBS-22` 三判�)+ **`C` �列一段**(为什么现在�� + 4 �回头信� + B→C �移路径四步)+ 与 lease����端�区间�`dsh_hosts`�provisioner 的�项关系。**� B 核心** = 组密钥(�用 `(network,group)` 与**四层密钥模型**,⛔ 零新信任根)+ 确定性(收敛)加密��**组内密文一致**⇒ 按哈希共享���立 + 🔴 **本棒纠正了一�上游��**:「� id 用明文哈希 ⇒ **跨组也能共享�一�**�**在本方案下��立**(组外没有组密钥 ⇒ 拿到密文也解�开;且 `E5` 本就�求跨组 0 穿�)⇒ **明文哈希"优点"净收益 ≈ 0��剩"把�存在性交给中继"的缺点** ⇒ **推�密钥相关�密文相关哈希(`sha256(密文)`)**,其唯一代价 = **轮� ⇒ 全�回�**(已写��数下� + 回头�件)+ 分�方案(🔴 **节点密钥是 `ed25519`���了公钥包裹** ⇒ 本阶段密钥本体**�� relay**�走 `0600` 文件;
> �� **下一棒已登记(本棒唯一一个棒)** = **� ㉚(执行棒 · � A:退出路径��实例)**,automation **�下方 §2 首行**(一次性 · **2026-09-18 00:50** = 收� +6 min ⇒ �在用户明令的 **5~8 分钟**窗�内)。⚠� **� ㉙(106 候选链建�冗余)本轮⛔ 未登记** —— 用户 2026-09-18 00:3x 明令「**最好��建立多个接续任务,一个会�结�时�排下一个**�⇒ **�一时刻�挂一个棒**;㉙ �**�留**给 106 冗余,由**� A 执行棒收官时**按本文件 §0 上一行的 �� �点登记。**三件事的定�与�由(写死,⛔ �许�上抛)**:**① � A(退出路径��实例)→ ② � ㉙(106 候选链冗余)→ ③ � B(组密钥加密)** —— �由:**� A 是用户最�一次行使纠错的直接产物**(23:3x「选 B�),且它结清的是 � ㉕ �留的**待��阻塞项**(把"待��"从线上彻底抹掉);**� ㉙ 紧�其�**是因为它**�本最���能让探针从红转绿** —— 长期挂�一�红项会**�低判���度**(新红项会被"�正是红的"淹没),先��"全绿 = 无新问题";**� B 放最�**是因为它是本次最大的一件(**10 个在册文件 + 密钥�维 + 6 �未验�项**,�性能与轮�代价),等生命周期语义与观测�都收敛干净��上,符�"一次�动一个��"。
> 🆕 **2026-09-18 00:3x 刷新(� ㉗ 执行棒收官 · ✅ E3 观测�已�地生产;`OBS-21` 开局为红 —— 且这是「如实判��是缺陷)**:**一�� = 「�连接候选数 ≥ 2�从此是一�命令�断言的观测�;它当场把 E3 的真实缺�照了出� —— 106 的 worker 侧�为 1 �候选。** **交付** = ① `src/worker/relay-tunnel.ts` 新增 `RelayCandidateObservation`(**固定 key �**观测行 `[overlay-candidates] scope= resolves= count= hosts= source= detail= urls=`;**�读�零网络 I/O**,周期��上次快照;`resolves=0 + source=unresolved` = **从未解�过** —— 与"解�出 0 �"必须�分,本线两处�默失效都栽在分�清"没装与没采到")② `src/web/server.ts` 的 C1(Manager 拨�)接入�一观测器(`resolveChain()` 把两处调用收�,**字级等价�明**写在注释里:`refreshOverlay` 从�传 `exclude`�且�用 `url`/`source` ⇒ `chain.urls[0] ?? ''` / `chain.source` 与原调用等价)③ `scripts/overlay-probe.cjs` 新增 **`OBS-21`**(**�判�**:该路径�有观测行〔⛔ 缺行� FAIL,且把 journalctl **原文字节数**一并打出 —— `0 字节`=读�失败�`>0`=真没有该行,两者必须�分〕+ `count ≥ CAND_MIN`;`hosts` **�作信�输出�⛔ �作判�**)④ �数表 §3.7 新增 **5 键** + §6 新增 `OBS-21` ⑤ `test/relay-failover.test.mjs` 新增 **O1–O4**(� key ���形状����写行〔防刷�〕�「从未解��≠「解�出 0 ��+周期��零网络�env 解���默� NaN)。**先红�绿(原文级)**:夹具四段 —— RED ⇒ `FAIL`(`dshs@47 count=3 ✓`�`dshs-worker@106 count=1 �`)|GREEN ⇒ `PASS`(三路径全 3)|NOLINE ⇒ FAIL 并打出「**原文 225 字节���缀 0 �**�|WRONGSCOPE ⇒ FAIL(「**154 字节���缀 1 �**�);**真机先红** = 新探针对**旧生产** ⇒ `FAIL OBS-21` 三路径全部「无观测行(原文字节 **0**)�;�全夹具对比 = RED 与 GREEN 两腿**�差 `OBS-21` 一行**。**零回归三件套**:`npm test` **201/200/0/1**(基线 197/196/0/1 + O1–O4)|`--scene all --table` **12 PASS/0 SKIP/0 FAIL**(�值)|`overlay-probe --table` **19 PASS/1 SKIP/1 FAIL**(= 基线 20 行 + 新增 `OBS-21` 这一行;`OBS-09` 无活跃实例 SKIP = 正常�)。**部署** = `lib/worker/relay-tunnel.js` + `lib/web/server.js` scp 到 **5 处**(47 `/opt/dshs/lib` + `/opt/dsh-relay/lib`�106 `/opt/dshs-cluster/lib` + `/opt/dsh-relay/lib`�本机编译产物),md5 **全�**(`b1bc3e042d8eff1aafc657142e2e99d3` � `cf844a2ee312fc167ebadf5b2b9884f2`);�� 47 `dshs`+`dshs-worker`�106 `dshs-worker`(🔴 动手�已�� **47 无活跃实例 scope** ⇒ 未影�任何用户);回滚点 = 两机 `/opt/dsh/backups/seq27-20260918-000259/`。🔴 **本棒最��的一� =「判��立�与「冗余建��已被彻底分开**:`dshs@47 count=3 hosts=3 ✓` | `dshs-worker@106 count=1 hosts=1 �`;106 侧根因**在 106 自己的日志里就�机读**(`journalctl -u dshs-worker | grep overlay-dir` 近 3h **166 行**)= `⚠ 拒� https://alotbuy.com/dshs-overlay/bootstrap(no-trusted-keys)` + `⚠ �目录全部失败 ⇒ 回�到内置��地�本身`;�� = `/etc/dshs-worker.env` **无** `DSHS_OVERLAY_DIR_PUBKEYS`(计数 **0**)�**无** `DSHS_OVERLAY_DIR_CACHE`(**0**)⇒ 目录**永远被拒** ⇒ 候选链�退化为内置���点 ⇒ **「建�冗余(≥2 �独立路径)�已点�独立�续项 = � ㉙**(⛔ 未放宽 `CAND_MIN` 凑绿)。**边界自�**:⛔ 未改任何生产值 · ⛔ 未新增公网�(`OBS-11` relay ��绑回环 **1/1**�集�**多出 0**)· ⛔ 未改 nft·nginx · 🔴 `COOLDOWN_MS=0` 计数 **0** · ⛔ 未 commit / 未 push(HEAD **`04776af`**)。⚠� **两�如实留档**:① **47 的 `nginx.service` / `bt-server` 显示 inactive 是正常�**(�塔托
> �� **本线下一项(⛔ 本棒�预登记 —— 用户 2026-09-18 00:3x 明令「**最好��建立多个接续任务,一个会�结�时在排下一个**�)**:**� ㉙ = 106 候选链建�冗余**(执行棒)。**由 � ㉘ 在其收官时登记**(⚠� **该指派已被 §0 最新行更正**:㉘ 实际登记的是 **� A 执行棒(� ㉚)** ⇒ **㉙ 改由「� A 执行棒�收官时登记**;㉙ ��留给 106 冗余)(间隔 **5~8 分钟** —— �一�明令:「**首个接续任务 5-8分钟**�)。🔴 **任务�点(㉘ 直接照此立棒)**:主题 = 把 106 侧 relay 候选链�� ≥ `CAND_MIN` �独立路径,让探针 `OBS-21` 真绿(⛔ �许放宽 `CAND_MIN` 凑绿);根因(**已��,⛔ 别��**)= 106 的 `/etc/dshs-worker.env` **无** `DSHS_OVERLAY_DIR_PUBKEYS`(`grep -c` = 0)�**无** `DSHS_OVERLAY_DIR_CACHE`(0)⇒ 目录�被 `no-trusted-keys` 拒 ⇒ 候选链�退化为内置���点(**106 自身日志近 3h 166 行��**);🔴 **先���动手** —— ① 47 上该键的**实际值与��**(公钥�⛔ �凭�)② 106 �目录两�路径�达性(已知边界:106 → 47:3080 `TCP_BLOCKED`)⇒ ⛔ **别�设"补钥�绿"**;改动首选 = 把 47 已验�有效的公钥�步到 106 worker env;改 env / ���元**自决**(R8);🔴 若��显示"必须改网络拓扑 / 新增监�� / 改 nft·nginx / 放开�蔽" ⇒ **立��手报告**(命中 R5);验收 = `OBS-21` **两�路径都** `count ≥ 2` 且 rc=0 + 零回归 `npm test`(基线 **201/200/0/1**)+ `--scene all --table`(基线 **12P/0S/0F**)。⛔ **原登记的 automation `cca5c43c…` 已按上述明令删除**(�一时刻�挂一个接续棒)。。⚠� **� ㉘ 收官时 ⛔ ���注册 ㉙**(该�已被本棒�用)⇒ ㉘ 若还有下一棒,顺延为 **� ㉚**。
>
> 🎯 **2026-09-17 23:3x �径最终�定(用户两��完�更正:「选 B�+「C 登记为架构目标�)**:**� ㉕ 的 E1 缺� ⇒ 执行 `B`(三处 `teardown()` �改:`LocalSpawner` + `RemoteSpawner` + `LeasedSpawner` ⇒ 退出进程���实例)+ `C`(systemd scope �一真相�)登记为架构目标�⛔ 本阶段�进执行**|**加密 ⇒ `C 组密钥加密`(��)**。⚠� **�径演�**:23:2x 用户答「①选B�②选C�两项指��一件事而答案相� ⇒ 我按 ②=C �盘并开纠错窗� ⇒ **23:3x 用户行使纠错** ⇒ 最终 = **B 先� + C 登记为架构目标**(= 我 23:1x 的原建议)。🔴 **本��时构�"扩范围授�"**:`remote-spawner.ts` / `leased-spawner.ts` **�在** `交接�/交接�_实例�步拉起_20260917.md §3.1` 在册集,现已获准纳入。�� = 该� **§8.3**(A/B/C ��优缺点;**倾� B**;A �达�目标�C 无增�价值)。⇒ **下一棒 = � ㉘**(已按 B 更新 prompt,� §2)。
>
> 🎯 **(被上行更正)2026-09-17 23:2x 用户第二轮��(对"待你��两项"的答�)**:**①(�问项「B 和 C 哪个更符�长期主义�)答「选B�|②(实�项)「选 C(实例由独立�元托管)�|③(加密档�)「选 C 组密钥加密�**。⚠� **�径张力已在回执里说明**:① 与 ② 是**�一件事**(� ㉕ 的 E1 缺�)�给出��答案 ⇒ **执行按 ② = C**(② 的括注� C 的定义�指�明确;① �解为"判断题上的务实倾�"�**�作执行项**)⇒ 回执里已给**纠错窗�**(该棒为规划棒��动生产,纠错�本低)。**新增登记 = � ㉘ 规划棒**(automation **`b60d5358-a443-4e29-87a3-6114ea0a7300`** · 一次性 · **2026-09-18 01:30**),产出**两份交接�**:**� A = 实例生命周期与 Manager 解耦(归属�到 systemd scope = �一真相�,Manager 退化为"�现+代�+记账")**|**� B = 组密钥加密**(�组共享一把对称密钥 ⇒ **组内密文一致 ⇒ 按哈希共享���立** + 中继看�到明文 = **性能与安全兼得**;🔴 �内最关键的�� = **� id 用明文哈希还是密钥相关哈希**)。⚠� 棒内已写死:两份�**�写一段「与 B 方案的差异与回退路径�**(对冲 ① 的�径张力)+ ⛔ **�出规划�零代� / 零�务器改动**。⚠� **执行次�**:� ㉗(E3,23:35)**先跑**;㉘ 若抢�到� ⇒ **�报告并�**(R9,属正常信�)。
>
> 🎯 **2026-09-17 23:1x 用户��(对� ㉖ §8.1-⑦ 三项待��的答�)**:**①** **E3 范围 ⇒ 选 `B`**(�许改 `src/worker/relay-tunnel.ts`�`src/web/server.ts` 暴露候选数)⇒ **下一棒已登记 = � ㉗ 执行棒**(automation **`d36e7068-3a9d-437d-ac39-33a57a086187`** · 一次性 · scheduledAt **2026-09-17 23:35**)。**②** **� ㉕ 的 E1 缺� ⇒ 用户未直接选,改为追问「B 和 C 哪个符�长期主义(对网络架构的稳定�安全�性能�应用性有帮助)�** ⇒ 我的判定 = **C 的方�更符�长期主义**(把"实例归属"从 Manager 进程内存�到 **systemd scope �一真相�** ⇒ Manager ��**天然**�影�实例�与"controller 与 workload 生命周期解耦"�构�且�掉"以��加一� spawner 都�记得别�实例"这��性负担),**但 C 的收益�规模兑现** —— 当� 47 �有 0–2 个实例�且 106 的 provisioner 尚未铺 ⇒ **现在上 C 是"收益�� × 改动�最大"**;⇒ 建议 **B 先�(止血 + 立�让"�步拉起"判��立)+ 把 C 登记为架构目标**,并把 B 的"�一语义三份实现"风险用**自动化判�对冲**(任何 spawner 若在 SIGTERM �实例 ⇒ 判�红)。**③** **E2E 加密 ⇒ 用户追问「牺牲的是什么 安全还是性能�** ⇒ 答� = **上 E2E(按接收者加密)牺牲的是性能**(密文�接收者�� ⇒ **按哈希共享�失效** ⇒ 回�从"1 份/组"�"1 份/人"),**安全是增强的**(连中继都看�到明文);**�上 E2E 牺牲的是"对中继的机密性"这一层**(relay �读明文载�),性能�留。🔑 **但这�是二选一** —— **按"组密钥"加密**(�一组共享一把对称密钥 ⇒ 组内密文一致)**�级共享��立且中继看�到明文** ⇒ **性能与安全��时拿到**(代价 = 组内�员互信 + 密钥分�/轮�机制)。⇒ **②(B/C 定�)与 ③(是�上组密钥)两项�待你���⛔ 未登记**。
>
> 🆕 **2026-09-17 23:2x 刷新(� ㉖ 执行棒收官 · ✅ 骨干稳定选路已�地生产 + ✅ 探针 `OBS-19`/`OBS-20` 转绿)**:**一�� = 「选路从此看 jitter�⛔ �看 RTT�已生效**。**交付** = 新增 `src/net/relay/jitter.ts`(237 行,全平�**唯一一份** jitter 算法:`absDeltas`�`percentile`�`histogram`�`JitterTracker`�`orderByJitter`�`pickJitterTarget`�`sharedJitterTracker`)+ `directory.ts` 候选�改 **jitter 主�**(未测样本�原��**零样本�字返回原数组** = 零回归判� `D9`)+ `switcher.ts` 新增「**jitter 劣化�切**�(🔴 **冷�表一行未动**;jitter ��**无���**)+ `server.ts` **利用率软门**(`used/max×100 ≥ 70%` ⇒ 拒**新**接入�⛔ **�驱�在线**,计数独立为 `utilRefused`)+ **`jitter` 观测�**(无样本也**结构完整**)+ �会� `rttSamples` 环。**主判� E1** = 夹具 **A(RTT 20/jitter 15) vs B(RTT 30/jitter 2) ⇒ 选中 B** ✅(**先红�绿**:把 `lib/net/relay/jitter.js:221` 的排� comparator 改� `() => 0` ⇒ **E1-a�E1-c�E1-e 三例红**;`npm run build` 还原 ⇒ 21/21 绿�md5 回部署值)。**真机读数(47,14 轮 × 400 ms)**:回环 `127.0.0.1:20080` jitter **3.88 ms**�RTT median 0.59 ms | 跨云 `106.54.21.172:443` jitter **1015.69 ms**�RTT median 151.64 ms ⇒ `order` 首� = 回环。⚠� **诚实标注**:真机两�真实路径的 jitter �与 RTT �**��** ⇒ **拓扑无法区分两个排�准则**,主判�判别力**由夹具�供**(⛔ �是判�失败:机器断言跑出�了)。**产�侧�续采样确�**:`/status.jitter` = `samples 9�deltas 7�sessions 2�p95 1540 ms�overThreshold true�alerts 2`;`journalctl | grep -c relay-jitter` = **11 行**(原文�会�� `ops/w-106` 与判别器数值;⚠� **两�径��直接比** —— `alerts` = 当�进程�日志 = 跨进程)。**零回归三件套**:`npm test` **197/196/0/1**(基线 176/175/0/1 + 新夹具 **21 用例**)|`--scene all --table` **12P/0S/0F**(�值)|`overlay-probe --table` **19P/0F/1S**(基线 17/0/1 + `OBS-19`/`OBS-20`;`OBS-09` SKIP = 47 无活跃实例,正常�)。**部署** = `lib/net/relay/{jitter,directory,switcher,server}.js` scp 到 47 **两处**(`/opt/dshs/lib` + `/opt/dsh-relay/lib`)**8 个文件 md5 与本机全�**,�� `dshs-relay`+`dshs`+`dshs-worker`(🔴 动手�已�� **47 无活跃实例 scope** ⇒ 未影�任何用户);回滚点 = `/opt/dsh/backups/seq26-20260917-225032/`。**�数表指纹 `93e38d1a57fbcd3126d2122150a2e838`(本棒实测起点)→ `4c78912d03f4f209d417407a80018361`**(+7 键 + `OBS-19`/`OBS-20`;⚠� ⛔ **`JITTER_SWITCH_MS` 未新造** —— �用已有�⑥ 键 `JITTER_LIMIT_MS`,��"�一事实两处写")。**边界自�**:⛔ 未改冷�语义 · ⛔ 未改任何生产值(本仓与 47 drop-in 的 `COOLDOWN_MS=0` 命中 **0**)· ⛔ 未新增公网�(relay ��绑回环)· ⛔ 未改 nft·nginx · ⛔ **未 commit / 未 push**(HEAD `04776af`)。⚠� **三�如实留档**:① 🔴 **`dshs` 侧 `server.js` 比 `dsh-relay` 侧��一个版本**(�㉔ 当时�铺了 relay 侧)⇒ **本棒两边�铺已消除该既存�一致**;② ⚠� **E3(路径多样性)未�得机器断言�** —— 判��点(`/status` 候选数 ≥ 2)在 §3.1 在册文件集**之外**(需改 `relay-tunnel.ts`�`web/server.ts`;relay `/status` 语义上�承载 client 侧候选)⇒ 按 **§9-5 �下报告**�未扩大;既存事实 = 候选链实现已在册(`directory.ts:789`�`web/server.ts:605`),但 47 当�形�**实际�用候选 = 1 �** ⇒ "冗余"尚未�立;③ ⚠� 本棒 prompt 写的探针编�是 `OBS-17/18`,**执行时�现 17/18 已被�㉔/㉕ �用** ⇒ 顺延为 **`OBS-19`/`OBS-20`**。
> 🛑 **本线当�无自动接续**(㉔→㉕→㉖ 三�已走完)⇒ **未登记下一棒**。触��件 = 对下列任一项��:**① ㉕ 的 E1 缺�**(退出路径��实例,三候选 A/B/C,倾� B)|**② ㉖ 的 E3 范围**(是��许改 `relay-tunnel.ts`�`web/server.ts` 暴露候选数)|**③ E2E 加密**(真��:加密�失去按哈希共享�)。
> 🛑 **(被上行�代)2026-09-17 22:3x 刷新(� ㉕ 执行棒收官 · ⚠� �程:认领逻辑已�地生产,**真机 E1 未达�**)**:**一�� = 「�步拉起�的第一刀已�地并被验�工作,但被一�**更深的原因**挡�**。**已�**:`src/supervisor/orchestrator.ts` 构造函数里 `cleanAllStaleScopes()` → **`rehydrateAdoptedScopes()`**(扫� OS 层既有 `dsh-<uid>-<8hex>.scope` ⇒ �� `setTimeout` 节� ⇒ TCP probe ⇒ 活的**认领**��通的**�掉**)。🔑 **两�设计红线(�� R11 净�差)**:⛔ **认领�写回 `mains`**(�则 `enter` �用分支会等一个**永�会出现**的 `launchToken` ⇒ 用户被 503 挡�)|⛔ **token ��盘**�"无感接管"(安全维度净�差,且改 dsh � token � R2)。🔑 **判��径 = "孤儿 = 端��通"**(⛔ �是"�动了��认识" —— 写��者会把好实例一起�掉)。**关键��(解开 P2 �点)**:`systemctl show -p MainPID` 回**空** ⇒ 原计划读 `/proc/<pid>/cmdline` ��行;改走 **`systemctl show -p Description`**(�带 `systemd-run` 记录的**完整 argv** ⇒ uid / 端� / `--chdir` 全�读回)⇒ 该� §8 回头�件 1 **未命中**。**�测先红�绿**:3 处故�破� ⇒ 3 红(R7 / R13 / R16)⇒ 还原� **18/18 全绿**�md5 �字一致(新文件 `test/orchestrator-rehydrate.test.mjs`,⚠� **刻��进 `npm test`** —— 那个脚本是硬编�文件列表,加进去会改测试总数);探针新增 **`OBS-18`**(认领日志在册 + `adopted + stopped === scanned` 自洽;三�夹具�备)。**零回归三件套**:`npm test` **176/175/0/1**(+`verify-inject` rc=0 �字一致)|`--scene all --table` **12P/0S/0F**|`overlay-probe --table` **17P/0F/1S**(= 基线 16 + 本棒新增 `OBS-18`;`OBS-09` 在 47 无活跃实例时为 SKIP = 正常�)。**部署** = `lib/supervisor/orchestrator.js` scp 到 47 `/opt/dshs/lib` + 106 `/opt/dshs-cluster/lib`(md5 全� **`5bfb15e00b592c293548ae17b639399b`**;回滚点 = 两机 `/opt/dsh/backups/seq25-20260917-220556/`,旧值 `fad7926494578258f86a91eac613a204`),已 `restart` 47 `dshs` + 106 `dshs-worker`,门户 **200**。
> 🔴 **本棒最大�现 —— E1 未达�的真凶 ⛔ �是认领逻辑**:先�**决定性实验**(造**真实形�夹具 scope**:真 systemd scope + 真 argv + 真监�端�)⇒ ���该 scope **� active**�端�**�在�**�日志 `[rehydrate] adopted … probe OK :21500` + summary 自洽 ⇒ **systemd �带走 scope�认领逻辑确实工作**;而对**真实实例** `restart dshs-worker` � 106 scope count **1 → 0**�日志�秒出现 `[rehydrate] 无既有实例 scope ⇒ �动作` ⇒ 真凶 = **`orchestrator.ts` 的 `teardown()` 在 SIGTERM 时主动�掉所有在册实例**(由 `src/worker/agent.ts` 在退出路径调用)⇒ **「�步拉起���立,必须先让退出路径��实例**。打通需**�改三处**(`LocalSpawner` + `RemoteSpawner` + `LeasedSpawner`),其中两个**超出该� §3.1 在册文件集** ⇒ 已按 **R7 �下报告**�未动手;**待�� A/B/C �本文件 §2 末�**(我的倾� = **B**)。
> **边界自�**:⛔ 未改任何生产值(`DSHS_REHYDRATE_STAGGER_MS` / `DSHS_REHYDRATE_PROBE_MS` **�写进�数表�生产 env 未设**)· ⛔ 未新增公网监�� · ⛔ 未改 nft·nginx · 🔴 `COOLDOWN_MS=0` 计数 **0** · ⛔ 未 commit / 未 push(HEAD `04776af`)。**�数表指纹 `54c854a5c09b561ea4920c44d8545cfe` → `93e38d1a57fbcd3126d2122150a2e838`**(§3 新增 2 键 + §6 新增 `OBS-18`)。**开工��� §7 ��缀指纹 `d9d48121e68faa00e1da17ad8fea36ad` 未�**;回填 §11 �全文 md5 = **`b73f2ec18fcf52055c4a24c3fcbdeb5b`**(242 行);`orchestrator.ts` md5 = **`86f1f05f878d706cdc656e3d769800e5`**。⚠� 两�如实留档:① `--scene all` 演练� `OBS-08` 曾**一次 FAIL**(端点表 2 � / 离线 1 �),�跑�回绿(1 � / 离线 0 �)⇒ 判为**暂�**�⛔ �本�引入(数��是 relay `/status`,与 `orchestrator` 无耦�);② 线外 **O-1**(`model landing` 读远端 home ⇒ ENOENT,有 env 注入兜底�用户���� 200)⇒ ⛔ �越线。
> ➡� **下一棒 = � ㉖(执行棒 · 骨干稳定选路与加密)**,�� = `交接�/交接�_骨干稳定选路与加密_20260917.md`(§8 ��缀 `dbcbe633aa1aef92f4c35c77fad3ec11`);automation = **`77b4d0f1-8663-4d08-bb79-1784f67d6999`**(一次性 · **2026-09-17 22:34** = 收� +4 min,`nextRunAt` = 1789655640000)。⚠� 下一棒的 prompt 里**已写死**:⛔ �许替 ㉕ 打通 E1 缺��⛔ �许改 `remote-spawner.ts` / `leased-spawner.ts`(那是 ㉕ 的待��项,⛔ �许被 ㉖ 顺手�掉)。
>
> 🆕 **2026-09-17 21:5x 刷新(� ㉔ 执行棒收官 · ✅ �级内容寻�已�地生产 + ✅ `OBS-17` 由红转绿)**:**主判� `E1` = 1.0000×**(N=4 �组;回� 5,255,225 B = �好 **1 份**;对照组 Before = **4.00×**)⇒ **4.00× → 1.00×**。**交付 = `src/net/relay/content/` 五个模�**(`chunker` �级切分�`store` 内容寻�存储+��校验�`source` 五档优先级链�`peer` �组候选+跨组显�拒��**`runtime` 本棒新增**——relay 进程侧装�)+ `test/overlay-content.test.mjs` **27 用例**(⛔ 未改 `package.json`)。`E2`–`E6` 全绿(`E3` 1,048,576 B ≤ 上� 4,194,304 B|`E4` 篡改�被丢弃且 `putRejected=1`|`E5` 跨组 0 穿�且 `crossGroupDenied=1`|`E6` 命中 `edge` ⛔ �越档)。**先红�绿 4 例全部命中预期**(id 算法 1 � `E4:` 1 � `E6:` **3** � `E5:` 1 �),还原� 27/0 全绿 —— ⚠� 踩到一�**必须留档的�**:测试 import 的是 **`../lib/**`(编译产物)** ⇒ 破� `src/` �**必须先 `npm run build`**,�则四例**全部�默"未命中"**。🔴 **本棒最大的一件事 = `OBS-17` 由红转绿**:首轮实测 `FAIL � 缺 content �缺失`,根因 = 探针读的是 **relay 的 `/status`**(**独立进程**)而内容�装�在平�侧�**两者�共享内存** ⇒ 处置 = relay 侧**自装 `ContentRuntime`**(**纯新增��选�缺��出现;无 IO�无监��无端� ⇒ �触 R5**)+ 两�新 drop-in 自投探针��**真实** `put`/`fetch`(⛔ **�是凑绿**:�真在存储里�真被读出,`store.hits` �步 +1)。⚠� **如实登记为范围新增**(超出该� §3.1 在册集):relay `server.ts`(`statusContent` 注入�)�`main.ts`�`content/runtime.ts`�`overlay-probe.cjs`�`overlay-content.test.mjs`�两� `40-content-probe.conf` —— �� = **R8 + R11 + §1 �决顺�**,且该缺�在 `交接�/交接�_presence在线�_20260917.md:81` **已被登记过** ⇒ 属**本��登**�⛔ �新开��。**零回归三件套(部署���一次,�值)**:`npm test` **176/175/0/1** | `--scene all --table` **12P/0S/0F** | `overlay-probe --table` **17 PASS / 0 FAIL / 0 SKIP**(**基线 16 + 本棒新增 `OBS-17` = 17**;`OBS-09` 亦由 SKIP 转 PASS)。**部署** = scp 到 **4 处**(47 `/opt/dsh-relay/lib`+`/opt/dshs/lib`�106 `/opt/dsh-relay/lib`+`/opt/dshs-cluster/lib`)md5 **四根全�**;��两� `dshs-relay` + 47 `dshs`(门户 **200**);两� `/status.content` � `local=1`�`store.puts=1`�`store.hits=1`。**回滚点** = 47 `/opt/dsh/backups/seq24-20260917-210957/`。**边界自�**:⛔ 未改任何生产值(47 `CONTENT` env 计数 **0**)· ⛔ 未新增公网�(relay �绑 `127.0.0.1:20080`;`OBS-11` 回环绑定 **1/1**)· ⛔ 未改 nft·nginx(`OBS-11` 多出 **0**)· 🔴 `COOLDOWN_MS=0` 计数 **0** · ⛔ 未 commit / 未 push。**�数表指纹 `42238175d84319ada99afa56d583f9db` → `54c854a5c09b561ea4920c44d8545cfe`**(§3.6 新增 5 个 `CONTENT_*` 键 + **3 个 relay 侧 `DSHS_CONTENT_*`**〔本棒自查出的�登记〕�§6 新增 `OBS-17`);本� **§7 �缀 `49d0f405e08c909e18ba6825d1442b9d` 未�**。
> ✅ **(已执行收官 · � ㉕ · �程)** 原登记:**下一棒 = � ㉕(「实例�步拉起�执行棒)**,�� = `交接�/交接�_实例�步拉起_20260917.md`(automation `16f0a3e7-4ef8-497b-aaa8-ce4d15d9353a`,已于 21:5x–22:3x 跑完 ⇒ **结果�上方 22:3x 刷新行 + 该� §11**)。
> 🆕 **2026-09-17 20:3x 刷新(� ㉔ 规划棒收官 · ✅ 三项��全部到手 ⇒ 线内��状�解除)**:用户 **2026-09-17 20:2x** 一次性�完三项(原�� §4-新),**规划棒已把三项���一份�执行交接�**(�在工作区根):
> ① 🔴 **B 内容分� ⇒ 「��** ⇒ 产物 = **`交接�/交接�_内容分��级寻�_20260917.md`**(166 行;§7 ��缀 `49d0f405e08c909e18ba6825d1442b9d`,全文 `3198288c8b0b102d43c87ca9a3a31cd2`)� **� ㉔ 执行棒**。核心判断:**必须"�级 + 内容寻�",⛔ ��"包级"**(包级 = 版本一� peer �全失效 ⇒ 客户端集体回� = **本线已实�的风暴�因**);**主判��值�测 = 回�字节数 ≈ 1 份 × 组数**;一次投资�时治瓶颈榜 **#3(首�包 10.8 GB)/ #5 / #9**。
> ② 🔴 **「Manager ���自动拉起既有实例�⇒ 「�步拉起�** ⇒ 产物 = **`交接�/交接�_实例�步拉起_20260917.md`**(161 行;§7 ��缀 `d9d48121e68faa00e1da17ad8fea36ad`,全文 `2c53a018c2d9bfc2c422d0758413a485`)� **� ㉕ 执行棒**。🔑 **本棒读��得出一�必须说的�直觉事实**:**现在�是"缺 reconciler",而是"�动时主动清空"** —— `src/supervisor/orchestrator.ts:208` 构造函数里 `cleanAllStaleScopes()` **portal �动�清掉全部实例 scope**(档案 30 的"防孤儿"修法)⇒ ��� **N=0�没有任何�接管的实例**。故 **"�步拉起" = 把"清空"��"接管"**(扫� OS 层既有 scope ⇒ 回填 map ⇒ 按节� probe);⚠� **三�硬约�**:⛔ �许删 `cleanStaleScopes(uid)`(spawn �清� uid,是档案 30 本体)�⛔ �许把�动�程改�"什么都��"(孤儿会失控)�⛔ �许"����新 spawn 一�"(�端���字 + 瞬间�起 = �动风暴)。
> ③ 🔴 **入� §4 骨干�务范围 ⇒ 用户未按 A/B 选,而是给了目标�径「按照连接稳定高效的方� 数�安全�加密传输�** ⇒ 产物 = **`交接�/交接�_骨干稳定选路与加密_20260917.md`**(176 行;§8 ��缀 `dbcbe633aa1aef92f4c35c77fad3ec11`,全文 `f85b86234c2ecfaef5b2e43aa40d86a3`)� **� ㉖ 执行棒**。**我的解读(已定项,�推翻):按"A 起步��径按 B 的质�标准建设"�地** —— ��范围� A(元数�暴露�最� ⇒ 直接满足"数�安全")�质�与冗余按 B 标准(jitter 选路 + 30%+ 余� ⇒ 直接满足"稳定高效");**主判� = 两候选路径中 jitter 更低者被选中��使其 RTT 更高**(⛔ 现行为是按�康度/冷�排�,�是 jitter ⇒ 这是主�缺�)。🔑 **"�加密"= 能力就�(TLS + 验签 + 内容哈希)+ 元数�最�化**,⛔ **�是**现在就上端到端加密 —— ⚠� **E2E 属真��**(加密 ⇒ �个接收者密文�� ⇒ **与按哈希共享�直接冲�**),已登记待评估�⛔ 本���。
> ➡� **下一棒 = � ㉔(执行棒 · 内容分��级寻�)**,automation **`91251b14-9ee8-42a9-9d89-8559b7af75ed`**(一次性 · **2026-09-17 20:42** = 收� +3 min)。⚠� 三�**执行顺�**:**㉔ 内容分� → ㉕ 实例�步拉起 → ㉖ 骨干稳定选路**(�由:㉔ 是用户明确"�"的最大瓶颈项且自�闭环;㉕ �赖"真实多实例"�件�与 ㉔ 的 S6 真机验收**共用�一批本机多实例**(�一次�环境);㉖ 收�时��用 ㉕ 的接管语义验"骨干����影�")。**边界自�**:⛔ 本棒**�出规划�零代�改动�零�务器改动**(�数表指纹 **`42238175d84319ada99afa56d583f9db` 未�**)· ⛔ 未 commit / 未 push。
> 🆕 **2026-09-17 20:4x 刷新(� ㉓ 执行棒收官 · ✅ E2E 验收通过 + ✅ 在册缺陷表清空 + 🛑 线内��(未登记下一棒))**:**两件全办** —— ① 🔴 **P-2 / P-2b 的 E2E 已验收(四�判�全绿)**:**R4 临时 session**(`mksess-guest.cjs`,用完�删�残留 **0**)⇒ `POST /api/dsh/enter` ⇒ � **`enter` 200**(�连接�� 200/200 + 6 轮�测全 200)ⓑ **47(Manager)上 `ss -lntp | grep -c ':21000'` = 0**(`:19000` 亦 0)ⓒ **`journalctl -u dshs | grep -c overlay-endpoint` = 0**(窗�内 delta 0�全�历� 0 ⇒ 失败关闭未触�)ⓓ **relay `counters.dial` 0 → 2**(`denied=0`/`failed=0`)。🔑 **判别器��(比计数更强)**:拨�原文显示**两�链�拨一次** —— `�点 127.0.0.1:25000 -> ops/w-106:19000`(agent �)+ `�点 127.0.0.1:25001 -> ops/w-106:21000`(实例�),�刻 `/status` 两�端点 `{19000,localPort 39525}` / `{21000,localPort 43431}`;而 **106 上 `dsh-100002-…scope` 的 argv 末尾 = `--port 21000` 正在�** ⇒ **"47 上无 21000" 与 "106 上有 21000" �时�立** = 翻译生效的**强判�**(若翻译失效,Manager 会去连 **47 自己的** `127.0.0.1:21000` ⇒ 连接被拒 ⇒ 正是本线 09-16 踩过的"空�应+零日志")。🔴 **顺带补�用户���**:`curl -H 'Host: guest.alotbuy.com' 127.0.0.1:3080/` ⇒ **200 / 62451 字节真 HTML / `502` 标记 0** ⇒ �⑬ **Q2**(guest(w-106) 实例页 502)的判�**已满足**。② ✅ **收��核 = 线内��**:在册缺陷 **P-1 ✅ / P-2 ✅ / P-2b ✅ + E2E ✅ ⇒ 表空**;剩余 = `§9-10`(回头�件,代�路径**��达**)+ **三项待��**(`B` 内容分� � 「Manager ���自动拉起实例�� 入� §4 骨干�务范围 —— 清� §五 第 7 步剩余**全部**�在其中)⇒ 按用户 2026-09-17 明令(待��未定 ⇒ **�登记下一棒**)**本棒未登记接续,链�到此为正常收�**。③ **零回归三件套**:`npm test` **176/175/0/1** | `--scene all --table` **12 PASS/0 SKIP/0 FAIL** | `overlay-probe --table` **16 PASS / 0 FAIL / 0 SKIP**(基线 15/0/1 ⇒ **`OBS-09` 由 SKIP 转 PASS** = �⑲ §9-8 写下的回头�件**已兑现**,⛔ �是真回归)。**边界自�**:⛔ **本棒零代�改动**(in-册三文件 md5 与�㉒ **全�**:`9f421a9f…` / `8c4c072c…` / `f08088b8…`)· ⛔ 未改任何生产值(**�数表指纹 `42238175d84319ada99afa56d583f9db` 未�**)· ⛔ 未动 nft·nginx · ⛔ 未新增公网� · 🔴 `COOLDOWN_MS=0` 计数 **0** · ⛔ 未 commit / 未 push · 代�仓 HEAD **`04776af`**(改动数 10,与 T0 一致)。⚠� **新登记一�线外项(R7 �报告�未动手)**:**O-1** = `enter` 时 47 日志 `model landing failed, falling back to env injection Error: ENOENT … /var/lib/dshs/users/<uid>/home/.credentials.yaml` ⇒ **用本地路径读远端实例 home**(与�⑬ Q2 真因**��**),有 env 注入兜底�**用户���� 200**,归属 `RemoteSpawner.resolveApiKey`(平�模型�地�)⇒ **�在本线 §3.1 文件集**,留待定立项。
> 🛑 **本线当�无自动接续**(� ㉓ 收��**未登记下一棒**):触��件 = 你对 **`B`(内容分�)�「Manager ���是�自动拉起既有实例�� 入� §4 骨干�务范围(A 自用 / B 全网)**任一项�� ⇒ ����建下一棒。
> 🆕 **2026-09-17 20:0x 刷新(åº� ㉒ 执行棒收官 · P-2b 已修 + P-1 长窗å¤�测通过)**:**两件全办** —— â‘  🔴 **P-2b 已修**:`relayEndpointTarget` 的候选链由「拨å�·è�½ç‚¹ → relay å¿«ç…§ã€�**两级扩æˆ�三级**(新增 **â‘¡' 级 `pushedLocalPort`** ï¼� 订阅推é€�è�½ç‚¹ï¼‰ï¼Œä¸Žåœ°å�€è§£æž�链 `addressOf` 的三级链**é€�级对é½�**;改动**å�ªæœ‰ 3 个在册文件**(`src/net/relay/endpoint-target.ts` ï¼� `src/web/server.ts` ï¼� `test/relay.test.mjs`),⛔ 未越界。**先红å�Žç»¿ï¼ˆåŽŸæ–‡çº§ï¼‰**:临时把 build 产物里的 â‘¡' 级去掉 ⇒ `not ok 1 - T37 … actual {port:41000,via:'snapshot'} / expected {port:37057,via:'pushed'}` ⇒ 改回 ⇒ **T37/T38 = 2 pass / 0 fail**。**é€�支å�¯æ–­è¨€**:三级å�„有一支(`dialed` → `pushed` → `snapshot`)+ `0` 哨兵é€�级下探 + 未知 host / é�ž relay â›” ä¸�碰拨å�·æ± ï¼ˆ`T38` æº�ç �级守å�«é’‰"闭包必须把 `presenceLocalPort(name, ep.port)` 传进判定")。② ✅ **P-1 长窗(706 s ≈ 11.8 min)å¤�测通过**:算å¼� `Manager ä¾§ = 窗å�£å†… ΔstatusHits − 探针自身读数(1)` ⇒ `statusHits 9 → 10`ã€�**Δ=1 ⇒ Manager ä¾§ = 0**;门开关 `journalctl -u dshs | grep -c overlay-presence` 窗å�£å†… **0 行**ï¼›`Δpushed = 0` / `Δsnaps = 0`(稳æ€�零帧)。相对基准 `60 000 / RELAY_STATUS_POLL_MS(5 000) = 12 次/分钟`:实测 raw **0.085 次/分钟** ⇒ **141.2×**(Manager ä¾§**零命中 ⇒ æ— ç©·å€�**)。③ **零回归三件套全绿**:`npm test` **176/175/0/1**(ï¼�基线 174/173/0/1 + T37/T38)ã€�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**ã€�`overlay-probe --table` **15 PASS/0 FAIL/1 SKIP**(**部署å�Žé‡�è·‘å�Œå€¼**)。**部署**:build ⇒ `lib/net/relay/{endpoint-target,index}.js` + `lib/web/server.js` scp 到 **4 处**(47 `/opt/dshs/lib`+`/opt/dsh-relay/lib`ã€�106 `/opt/dshs-cluster/lib`+`/opt/dsh-relay/lib`),四根 md5 **å…¨å�Œ**(`36b2dd9953a615de9a3e148752dffe94` / `486419ba443b99dd734ca79e987ffdea` / `460d360e8c6196341935b2f9a2a1d408`);**å�ªé‡�å�¯ 47 çš„ `dshs`**(三å�•å…ƒ active);回滚点 = 两机 **`/opt/dsh/backups/seq22-20260917-195602/`**(`endpoint-target.js 57e6c9ae…` / `index.js 486419ba…` / `server.js 74c077b3…`)。**边界自è¯�**:⛔ 未改任何生产值(六值é€�项未å�˜ï¼‰Â· â›” 未新增公网å�£ · â›” 未改 nft/nginx · 🔴 `COOLDOWN_MS=0` 计数 **0** · â›” 未 commit / 未 push。**å�‚数表指纹 `42238175d84319ada99afa56d583f9db` 未å�˜**(本棒无数值改动)。⚠ï¸� **E2E ä»�未å�š** ⇒ 交åº� ㉓。🔴 **环境勘误**:对 **106 必须用别å�� `test106`**(专用密钥 `id_ed25519_test106`,å�‚数表 `SSH_TARGET_106` 本就写ç�€ï¼‰â€”— 裸 `ssh [email protected]` 报 `Permission denied (publickey)`,⛔ 别å†�误判æˆ� MaxStartups é™�æµ�。
> ✅ **(已执行收官 · � ㉓)** 原登记:**下一棒 = � ㉓(执行棒)**,automation **`238e99eb-f173-4fe1-8c4a-0b07a6bba2fe`**(一次性 · **2026-09-17 20:08** = 收� +5 min)⇒ **主:P-2/P-2b 的 E2E 验收**(`mksess-guest` 临时 session ⇒ `enter` 200 + 47 上 `:21000` 计数 0 + `overlay-endpoint` 计数 0 + relay `dial` 增�)|**次:presence 线收��核**(在册缺陷是�清空�剩余项是�全在��区 ⇒ 写出"线内��")。
>
> 🆕 **2026-09-17 19:2x 刷新(� ㉑ 执行棒收官 · P-1 + P-2 两�在册缺陷�已修)**:**两�全办** —— ① 🔴 **P-1 已修并真机验收**:`presenceFresh()` 判�由「presence **载�**年龄 ≤ 45 s TTL�改为「**订阅已建立**(`state==='subscribed'` ∧ 拿到过首帧 `SNAP`)∧ **链路活�**(**任何**入站帧�心跳满足 `now − lastFrameAt ≤ max(�务端下� TTL, �开阈值)`)�—— 病根 = 把"**没有�化**"读�"**没有数�**"。**我选了什么(�推翻):选 A**(任何入站帧�心跳�算新鲜);**B**(relay 定期�推 `SNAP`)会推翻�⑲ E1「稳� `Δpushed ≤ 0`�与 `OBS-14` 的 `snaps ≤ pushed` ⇒ **R11 净�差**;**C**(拉长 TTL)�把竞速推远��治本。**真机 Before/After(��径)**:算� `Manager 侧 = 窗�内 ΔstatusHits − 探针自身读数(1)` —— **Before**(旧代�在跑)66 s 窗� `228→242` ⇒ Δ=14 ⇒ Manager 侧 **13**(≈11.8 次/分钟,�现 P-1);**After**(铺新 lib + `systemctl restart dshs`)67 s 窗� `247→248` ⇒ Δ=1 ⇒ Manager 侧 **0**;门开关日志 `journalctl -u dshs | grep overlay-presence` ��� 5+ 分钟(**远超 45 s TTL**)�有 **1 行** ⇒ **0 次翻转**。**先红�绿(原文级)**:临时改回旧判� ⇒ `not ok 1 - T33 …`(pass 0/fail 1),改回 ⇒ T33/T34 **2 pass / 0 fail**。**新增 `OBS-16`**(门窗�内"除探针外零命中"�机器断言):夹具 **PASS Δ=1 rc=0** / **FAIL Δ=12 rc=1 并点�**两侧实� + 真机 PASS。|② **P-2 已修(�测�)**:抽出纯函数 `src/net/relay/endpoint-target.ts#relayEndpointTarget` + `hostNameIndex`,`web/server.ts` 键�径改为**逻辑�索引**(`hostNameById`)⇒ **死分支消除**�并�失败关闭**点�**;⚠� **E2E 未�**(当�无活跃实例,按入�授�"��到�测"),**E2E 判�已写进** presence � §8.11-⑤。|③ **零回归三件套全绿**:`npm test` **174/173/0/1**(+T33–T36)�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**�`overlay-probe --table` **15 PASS/0 FAIL/1 SKIP**;收�归零 47 `dshs`+`dshs-relay`�106 `dshs-relay`+`dshs-worker` active�Manager 归� 47�监�行 **76**。**产物** = `交接�/交接�_presence在线�_20260917.md` **§8.11** + `交接�/交接�_观测�径与在册缺陷_20260917.md` **§14**(�� §13 在册表新增 **P-2b**)。**部署**:build � `lib/net/relay/{client,index,endpoint-target}.js` + `lib/web/server.js` scp 到 47/106 �两处(`/opt/dshs/lib`+`/opt/dsh-relay/lib`�`/opt/dshs-cluster/lib`+`/opt/dsh-relay/lib`),md5 全 = `6c14d4d4fcdb516854865520584ed0c2`;�在 47 `restart dshs`。**边界自�**:⛔ 未改任何生产值(六值�项未�)· ⛔ 未新增公网� · ⛔ 未改 nft/nginx · 🔴 `COOLDOWN_MS=0` 计数 **0** · ⛔ 未 commit / 未 push。**�数表指纹 `659c08949c193102f774822905fde3b7` → `42238175d84319ada99afa56d583f9db`**。
> ➡� **下一棒 = � ㉒(执行棒)**,automation **`25717418-6f01-4be5-b52a-1a3a8b90937d`**(一次性 · **2026-09-17 19:33** = 收� +4 min)⇒ **主:修 P-2b**(`relayEndpointTarget` 候选链补 `presenceLocalPort` 一级,与 `addressOf` 三级链对�)|**次:P-1 修��的长窗(≥ 10 min)真机收益�测**(�㉑ �用 67 s 短窗验�过"门 0 次翻转",长窗�径� §2)。
>
> 🆕 **2026-09-17 18:5x 刷新(� ⑳ 执行棒收官 · OBS-09 �径已修 + presence 真机收益已�化)**:**四�全办** —— ① `OBS-09` 判�改为「**在册 ⇒ 必须�达**;�在册 ⇒ **SKIP**�+ 新增 `--instance-fixture` 夹具�数 ⇒ **真机由"�红"转 SKIP�探针 rc=0**;两侧夹具四段实�(A �误红 PASS rc=0 � B 能判真红 FAIL rc=1 � C �在册 SKIP rc=0 � D 契约�缺� ⇒ FAIL 点�)|② 🔴 **presence 真机收益 = �幅仅 1.10×(设计目标未达�)**:60 s 窗� `ΔstatusHits 13 − 自身 2 = 11 次/分钟`(基准 `60 000/5 000 = 12 次/分钟`)�12.4 min 窗� 10.9 次/分钟�门开关�空比 **5.0%**;**根因** = `presenceFresh()` 的 45 s TTL 与「稳�零帧�互相打架(`src/net/relay/client.ts:593-600`)⇒ 登记在册缺陷 **P-1**|③ 收�三件套**零回归**:`npm test` **170/169/0/1**�`overlay-probe` **14 PASS/0 FAIL/1 SKIP**�`--scene all` **12 PASS/0 SKIP/0 FAIL**;47 `dshs`/`dshs-relay` active�池� **64**(⚠� 106 �元状�未�到 = ssh rc=255 ��,⛔ 放宽命中 R5)|④ `translateEndpoint` 键�径(`hostVia` 键 = 逻辑��传入裸 `hostId` ⇒ � `undefined` ⇒ 闭包整体是**死分支**)= **�立�**(登记 **P-2**;无活跃实例 ⇒ 本棒无 E2E �件)。**产物** = `交接�/交接�_presence在线�_20260917.md` **§8.10** + `交接�/交接�_观测�径与在册缺陷_20260917.md` **§13**。🔴 **�径勘误**:�⑲ 的「�幅 63×/10.5×/∞�是**帧**�径,**�是 `/status` 轮询�幅**(�者实测 **1.10×**);`OBS-13` 的 `ΔstatusHits ≥ 1` 由探针自身两次读�满足 ⇒ ⛔ �能当收益��。**边界自�**:`src/**` **零改动** · 未改任何生产值 · `COOLDOWN_MS=0` 计数 **0** · ⛔ 未 commit / 未 push。**�数表指纹 `13de5f9b77c486d71e5b83ec909b17b2` → `659c08949c193102f774822905fde3b7`**(§6 �改判�文字)。
> ✅ **(已执行收官 · � ㉑)** automation **`3029d2cb-235e-4073-9654-03f7fc3653db`** 于 18:54–19:2x 跑完 ⇒ **P-1 已修**(真机 Manager 侧 `ΔstatusHits` **13 → 0**�门开关 **0 次翻转**)+ **P-2 �测�已修**(E2E 无实例�件)⇒ 结果� `交接�/交接�_presence在线�_20260917.md` **§8.11** + `交接�/交接�_观测�径与在册缺陷_20260917.md` **§14**。原登记(存档):**下一棒 = � ㉑(执行棒)**(一次性 · **2026-09-17 18:54** = 收� +4 min)⇒ **主:修 P-1**(presence 新鲜度判�,让"订阅生效期间 `/status` �拉"真正�立)|**次:修 P-2**(`translateEndpoint` 键�径,⚠� 必须先抽纯函数��先红�绿)。
>
> 🆕 **2026-09-17 18:1x 刷新(� ⑲ 执行棒收官 · presence 节点在线�已上线)**:**presence 改造已�地生产并真机验收** —— 产物 = `交接�/交接�_presence在线�_20260917.md` **§8★ 回报(8.0–8.9 已回填)**。**改法**:节点/端点在线�从「Manager � 5 s 拉 `/status` 快照�改为「**连接生命周期驱动 + 订阅�推� + 1 s 批�并 + TTL 安全网**�;`wire.ts` **末尾追加** `SUB 0x10 / UNSUB 0x11 / PRESENCE 0x12 / SNAP 0x13`;`client.ts` 订阅侧 + `rendezvous.ts` 主路径(订阅 `undefined` �回� `/status`)+ `web/server.ts` 装�(订阅新鲜时 `/status` 轮询**挂起**)。**真机数�(47 relay)**:`presenceTiming={graceMs 10000, offlineDebounceMs 30000, batchMs 1000, ttlMs 45000, subMax 0}`�`counters={subs 1, pushed 3, snaps 2, rejected 0}`�Manager 日志 `[relay-client] presence SNAP 2 �(scope=all)`。**验收**:`npm test` **169/0/1**(基线 161 + 新用例 **T25–T32 共 8 个**)|�测**先红�绿**(0/7 → 8/8)|**S6 本机多实例真机 8/8**(稳� 60 s **Δ帧=0**(期间 24 个心跳帧在�)|一次上下线 **� 1 帧**�断连→改� **40985 ms**|首帧 `snapFrames=1`|跨网 **显�拒� rejected 0→1**|�幅 **63×**(字��径)/10.5×(�消费者)/∞(稳�))|`--scene all` **12 PASS / 0 SKIP / 0 FAIL**|探针 **15 PASS / 1 FAIL**(唯一红项 `OBS-09`)|池� **64**|`dshs/dshs-relay/dshs-worker/dshs-pg` 全 active。🔴 **两个必须记�的实测**:① **�死已修** —— `presenceTouch` 原早于 `ensureEndpoint`�且�点��是 `listen(0)` **异步**��地 ⇒ 首帧推 **`localPort=0`** 且**永��推** ⇒ 订阅方 `addressOf` 查�到 ⇒ **页�打�开但�报错**;修法 = touch �移 + �点�地/端��更时**强制�推**(`publishPresence(force)`),**新用例 `T32` 先红�绿覆盖**,真机�验 `localPorts=[{port:19000, localPort:35289}]`(� 0)。② **`OBS-09` 红 = S7 步骤与 E9 判�冲�**(`systemctl restart dshs` 会收掉 `dsh-*.scope`,平�**按需拉起**�⛔ 无 reconciler ⇒ 无人访问时实例�自回)⇒ 已按 **§9-8 �下报告**(详�该� §8.8-1/§8.8-4)。**边界自�**:⛔ 未改任何生产值(六值�项未�)· ⛔ 未新增公网� · ⛔ 未改 nft/nginx · 🔴 `COOLDOWN_MS=0` 计数 **0** · ⛔ 未 commit / 未 push。**�数表指纹 `8f08e74b026e6e5b5e1b3db813f031ae` → `13de5f9b77c486d71e5b83ec909b17b2`**。
>
> 🆕 **2026-09-17 17:2x 刷新(� ⑱ 规划棒收官 · presence 已出�执行�)**:**presence(在线状�)改造的规划已完�** ⇒ 产物 = 工作区根 **`交接�/交接�_presence在线�_20260917.md`**(287 行 + §11 回报;**§8 �缀指纹 `f612858344077420cff5f1f9ef1c942f`**;全文件 md5 `619a37818765152d74cef499e31bc41d`,��时;⚠� 加 §11 �**总字节�了��缀指纹��**)。**核心判断**:presence 的第一刀�在**节点 / 端点在线�** —— 因为**全仓零应用层**(`grep -rilE "\b(room|chat)\b" src | wc -l` = **0**)�`presence` 字样**�在 `src/net/relay/placement.ts:21` 的注释里**,而 Manager 现在的在线���是**拉 relay `/status` 快照 + 15 s 陈旧回退**(`src/net/relay/server.ts` 第 **413** / **1234** 行原文自�)� 正是�替�的"轮询"路径。**�法** = 照抄 `docs/覆盖网络/覆盖网络_瓶颈�地方案_20260916.md §1` 七�并��映射到本仓(**连接生命周期** + **1 s 批�并** + **订阅�扇出** + grace 10 s / debounce 30 s + **� hostId 设备��** + **最终一致 5–15 s** + **TTL 安全网**)。**用户��** = 「**a ��**�;⚠� **B(内容分� / �级内容寻�)�待��** ⇒ **�登记�⛔ �规划**(该� §0.4-1)。**边界**:§4.2 真�� = **空**�§4.3 待�� = **空**�**§4.4 R5 = 未命中**(新增监�� / 凭� / 入站� **0**,����收窄);**§9 有 9 �回头�件**(第 9 � = 🔴 `COOLDOWN_MS=0` 硬�令)。➡� **下一棒 = � ⑲(执行棒)**,automation **`107b8e38-ccbd-4dcf-8b49-25dad7c89be9`**(一次性 · **2026-09-17 17:28** = 收� +4 min)。
>
> 🆕 **(已被上行�代)2026-09-17 17:1x 刷新(用户�� ⇒ 下一棒已登记)**:用户答「**a ��**�⇒ **presence(在线状�)改造正��动**。**下一棒 = � ⑱(规划棒)**,automation **`50882a38-07cd-494c-ae73-cbbf27f3604d`**(一次性 · **2026-09-17 17:22** = 收� +~5 min)⇒ 产出 = presence 的**�执行交接�**(�� = `docs/覆盖网络/覆盖网络_应用场景与待完善清�_20260916.md` §五 第 7 步 + `docs/覆盖网络/覆盖网络_��全场景推演_20260916.md` + `docs/覆盖网络/覆盖网络_瓶颈�地方案_20260916.md`);⚠� **�出规划**(⛔ �改� / ⛔ �动 47/106 / ⛔ � commit·push)。⚠� �一项 **B = 内容分�(�级内容寻�)�待��** —— ��度已评估为「**中**�(方案 §3:需新建 ① �级切分与哈希标识 ② 内容寻�存储 + 客户端校验 ③ �网段 peer �现 + 内容�优先级链;�照抄 BranchCache / Delivery Optimization / SCCM;验收判��值�测「**回�字节数 ≈ 1 份 × 组数**�;⛔ ��"包级"�已被�过的全��拉风暴�因)⇒ **⛔ 本棒未登记�未规划**。
>
> 🆕 **2026-09-17 17:3x 刷新(� ⑰ 执行棒收官 · 本线在册项清干)**:**四�在册项 —— S1 ✅ / S2 ✅ / S3 ✅ / S4 ⚠�(临界档 · 记录入册�⛔ �判 FAIL)**。**S1** mksess �径「DB 直��→「**PG 直�**�(5 处�作性载体:`规范/02-�维手册.md` + `skills/dsh-change-workflow/SKILL.md`×3 行 + `skills/dsh-env-bootstrap/references/常驻规则-快照.md`×1 行 + 本机技能�内容;⛔ `调整方案/**` 档案正文**未动**;判� E1 = **0 行**)|**S2** 技能 `dsh-auto-handoff-chain`(v1.3.2)**三处�步首次建立** —— 文档库新建副本 + `README.md`/`INDEX.md` 登记 + 47 镜� `/opt/dsh/docs/skills/` ⇒ `diff -r` = **0 行**�md5 **三处�值**(`0c5c4103…` / `636c4f33…`)|**S3** 代�仓 `.bak-seq7-*` **5 个 → 0**(全 untracked�seq7 11:21 过期快照 ⇒ **�有效回滚点**;`npm run build` RC=0 + lib 产物 md5 **零差异**)|**S4** 幕 4-A 五样本 **18772 / 20121 / 20246 / 21223 / 24477 ms** ⇒ p95(�守 nearest-rank �径)= **24477 ms** ⇒ **临界档(24000 < p95 ≤ 27000)⇒ 记录在册�⛔ �判 FAIL�⛔ 未调任何生产值**,⚠� 回头�件(> 27000 ms)**未触�**。**零回归全绿**:`npm test` **162/161/0/1**�`--scene all` **12 PASS / 0 SKIP / 0 FAIL**(幕 4-A 20419 / 18333 ms)�`overlay-probe` **12/12**;收�三�务 active�池� **64**。
> 🗃 **Q4 已由用户授�解除并办结**(原�「执行完毕� �步到仓库�)⇒ `146c3d2`(代�/测试� **53** 文件)+ `bc0dd2c`(文档库� **10** 文件)已 push;远端 `master` = **`bc0dd2c`**,`git ls-files src/net/relay | wc -l` **0 → 15**(�⑭/⑮ 的修�**首次进版本库**)。
> 🛑 **本线已无自动接续**:四�在册项清干�,**剩余项全部�在「需���区**(presence / 房间层 / 内容分�**定�** = 业务优先级;骨干节点�务范围 = §4 的 A/B 既有待��项)⇒ 按登记门�**�登记下一棒**,等你����建。�� = `交接�/交接�_在册收尾_20260917.md` **§9**;�数表指纹 **`8f08e74b026e6e5b5e1b3db813f031ae` 未�**。
>
> 🆕 **2026-09-17 16:4x 刷新(� ⑯ 规划棒收官)**:**① �核判定 = 会� / 中继从 Manager 拆分「���** —— 原方案 `docs/覆盖网络/会�中继拆分_��与改造方案_20260916.md` 的四个耦�点 C1–C4 与两步改造 S3/S4 **��已被覆盖�未覆盖部分 = 无**:C1 → �② P0-2(`DSHS_RENDEZVOUS_URL` 优先 / `DSHS_TUNNEL_TARGET` �兜底,`src/config.ts:485-490`)|C2 → **R5**(Manager �拨出��点�到本机回环池 `127.0.0.1:25000..26000`,`src/config.ts:498-500`;`dialer.ts:11`)|C3 → S2/P2(`dsh_hosts.via` + `RendezvousRegistry`)|C4 → 方案 §8.1 实测**����立**|S3 → 方案 §9.1 自我�伪�改「实例端�区间隔离�|S4 → R2(`dshs-relay` 独立�元)+ �⑥ S8(106 �格第二中继)+ �⑦(多实例切�实测)。该方案文档**头部已加状���正文未改**(存档)。**② 剩余在册四�已定�并出执行�** ⇒ 产物 = 工作区根 **`交接�/交接�_在册收尾_20260917.md`**(243 行;**§8 �缀指纹 `bab83b7219b2669d5a6e9f1acf782e1f`**�全文 md5 `ca13b9ded3d71268f8b0e56755d7aea4`)� **� ⑰ 执行棒**,顺� = **S1 mksess 文档�径(「DB 直��→「PG 直��)→ S2 技能 `dsh-auto-handoff-chain` 三处�步建立 → S3 清�代�仓 `.bak-seq7-*`(🔴 **范围修正:5 个,�是 3 个**)→ S4 幕 4-A 余�判�化 + 5 样本采样**。🔴 本棒两�新事实:**① Q5 真实范围 = 5 个**(多出 `src/web/server.ts.bak-seq7-*`�`src/worker/tunnel.ts.bak-seq7-*`,**5 个全 untracked**��为过期快照 ⇒ 无回滚价值)② **`调整方案/**` 档案的 mksess 旧�径�改**(档案 = 当时事实,�改�作性载体 + 写勘误指针)。⚠� 登记:`src/worker/tunnel.ts`(SSH 隧�)现已是**生产死路径**,是�删 = 独立决策,⛔ 本�未处置。➡� **下一棒 = � ⑰(执行棒)**,automation **`067b0892-964e-4deb-bf84-4f1c37bebea8`**(16:44 起)。�� = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§12**。
>
> 🆕 **2026-09-17 16:3x 刷新(� ⑮ 执行棒收官 → 缺陷 B 已修)**:**拨�池"未分�槽�被一�连接永久�死"已修并端到端验收** —— 病根 = `src/net/relay/dialer.ts#onConn` �到 `slot.key === undefined` 时 `slot.server.close()`:关掉的�是**�务器**,槽�**�留在 `slots` 里**�`key` �是 `undefined` ⇒ `localPortFor()` 的 `slots.find(s => s.key === undefined)` **下次还会选中它** ⇒ 把死��当�点�出去(47 上实测:`16:00:27 �点 127.0.0.1:25000 -> ops/w-106:19000` 紧接 `16:00:31/35/40` 三� `POST /api/dsh/enter` → **500 `fetch failed: connect ECONNREFUSED 127.0.0.1:25000`**)。**改法 = �丢弃那�无法路由的连接(槽�原样�留)+ `stray` 计数 + 点�日志**,�加纵深防御(`localPortFor`/`lruIdle` �认 `server.listening`;`status().pool` 改报"实际在�")。⛔ **��"把槽�从 `slots` 摘掉"那�** —— 那等于让**任�本地连接**都能**永久**蚕食池容�(R11)。**验收**:**先故�对未分�池� 25000 �一�连接**,�� guest `enter` � **200/200**�该��连接连� 3 次 **200/200/200**�打�池�� **64**;`npm test` **162/161/0/1**(+T24)�`--scene all` **12 PASS / 0 SKIP / 0 FAIL**�`overlay-probe` **12/12**。部署 = `dialer.js`(`6446fe9b…`)**五处�值**���� 47 的 `dshs`。⚠� 顺带确认一�**环境�径**:对 47/106 的 ssh **必须显� `-p 22`** —— 别� `bt-server` 里的 `32022` 是**失效残留�**(47 上 sshd �监� 22,自 09-16 22:12:48 起)。➡� **下一棒 = � ⑯(规划棒:会�/中继拆分�核 + 在册收尾定�)**,automation `91c53ef8-c3f0-4bb3-9f0a-943790178176`(16:36 起)。�� = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§11**。
>
> 🆕 **2026-09-17 16:1x 刷新(� ⑭ 执行棒收官)**:**relay � keep-alive �用缺陷已修并端到端验收** —— 真因 = `src/net/relay/client.ts#openStream` 里多挂了一行 `duplex.on('data', …)`,把**读侧接回了出�**:agent 的�应� relay 回到拨�方��被 `pumpDial()` 打回去,worker 把它写进 agent socket ⇒ agent 拿 `HTTP/1.1 200 OK` 当**请求行**解� ⇒ Fastify `clientError` 回 `400`(**用户��:任何 `via='relay'` 的 host(今天 = w-106)用户 `POST /api/dsh/enter` 必 500,「登录直达工作区�整体��用**;curl 看到的"第 2 � 400"其实是第 1 ��应的回声)。**改法 = 删掉那一行**(出�唯一入�是 `_write`→`onOut`;`duplex.write()` 与 `tcp.pipe(duplex)` 本就走�一�路,该监�纯属多余且方�错)。**验收**:guest `enter` **200**��连接连�两次 **200/200**(三次 200/200/200)�`npm test` **160 pass / 0 fail / 1 skip**(基线 159 + 新回归用例 **T23**)�`--scene all` **12 PASS / 0 SKIP / 0 FAIL**�`overlay-probe` **12/12**。部署 = `client.js`(`b8b29afb…`)铺 5 处�**��� 47 的 `dshs`**(改动是拨�方专属)。🔴 **新�现在册缺陷 B(R7 �报告�未动手)**:拨�池**未分�**槽�被任�一�连接碰到 ⇒ 该槽�**永久死亡**(`dialer.ts#onConn` � `slot.server.close()` ��摘除槽�),而 `localPortFor()` 之�照样把它�出去 ⇒ `ECONNREFUSED` ⇒ `enter` 500 `fetch failed`。�� + 三个候选修法 + 判� = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§10.8**;�数表指纹� **`8f08e74b026e6e5b5e1b3db813f031ae`**(**未�** ⇒ D1 自�)。➡� **下一棒 = � ⑮(执行棒:缺陷 B 修�)**。
> 🆕 **2026-09-17 15:5x 刷新(� ⑬ 执行棒收官)**:**在册缺陷清算 Q1→Q3 —— `Q1 ✅` / `Q2 🔴 阻塞(新真因)` / `Q3 ✅`**。**Q1**:`/opt/dshs/mksess{,-guest}.cjs` 由**写 SQLite 旧库**改为**写 PG**(连接串从 env / `dshs.env` / `dshs.service.d` 读,⛔ �固化凭�)⇒ R4 的实例�验收手段��(实例� `curl` 回 **401**,� `000`);指纹 `mksess.cjs` **`a97c0f214650fbc552c07d804fd153be`**�`mksess-guest.cjs` **`af6eab38c4ff5c365ee17e29d7b98a31`**。**Q3** ✅:**探针 12/12 PASS · rc=0** —— `OBS-09 本机:20000=401 w-106:42461=401` 绿,且"有实例�"下 `OBS-11` �绿(实际 77 / 多出 0 / 缺失 0�`20000` 在�许区间)。🔴 **Q2 未达�,且真因�是�内记的 `landModels` 本地路径** —— 是**新�现的数��缺陷**:**relay �上的 HTTP keep-alive �用**(�一�连接第 2 � agent 请求必回 `400 clientError`,机制 = **worker 侧把上一份�应回�给 agent**)⇒ **任何 `via='relay'` 的 host(今天 = w-106)用户 `POST /api/dsh/enter` 必 500 = 登录直达整体��用(用户��)**。��链与 1 �命令的最��现 = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§9.3**;`src/` 与�数表**零改动**(�数表指纹� `8f08e74b…`)。➡� **下一棒 = � ⑭(执行棒:relay � keep-alive 缺陷修�)**。
> 🆕 **2026-09-17 15:3x 刷新(� ⑫ 执行棒收官)**:**`OBS-11` 已由「计数相等�改为「三集包��白��集��(`nft` ��改「入站 accept 集� ⊆ 白���)** —— �数表 §6 **新增 4 键**(`LISTEN_REQUIRED` / `LISTEN_ALLOWED` / `LISTEN_ALLOWED_RANGES` / `NFT_ALLOW_INBOUND`)�`LISTEN_COUNT` / `NFT_RULES` **退役为仅对账**;唯一代�改动 = 代�仓 `scripts/overlay-probe.cjs`(⛔ `src/**` 零改动 ⇒ `git status src/` **20 → 20**);**新增夹具模�**(`--listen/nft/status-fixture`,离线�零生产副作用�输出带 `FIXTURE` 标记)。**验收**:`overlay-probe` **10/12 → 11/12**(剩 `OBS-09` = 环境�);� **�红已消除**(真� 77 行 ≠ 旧阈值 79 ⇒ 旧判�必红,新判� PASS)ⓑ **�绿已能抓**(`fx-swap` 行数� 79 ⇒ 旧判� PASS,新判��时点� `多出 127.0.0.1:9999` + `缺失 0.0.0.0:888`)ⓒ 真机�控临时�「多出必红�实�(`127.0.0.1:27000` 起� ⇒ FAIL 点�,关� ⇒ 回 PASS�`ss` 回 77)ⓓ `nft` 走 `-j` 正路且退化文本路径**链感知**(�误抓 `FORWARD` 的 accept);零回归 = `npm test` **160/159/0/1**�`--scene all` 全绿�`ss` 77 / `nft` 72。**�数表指纹 `99e9e17b…` → `8f08e74b026e6e5b5e1b3db813f031ae`**。⚠� 两�与��符处已按**实质判�**处�(P1-注 的「零 `*`�⇒「**Local 列**零 `*`�;P4/E7 的「`src/` = 0�⇒「**�新增** `src/` 改动�,20 是既存未�交基线)。➡� **下一棒 = � ⑬(执行棒:在册�缺陷清算 Q1→Q2→Q3)**。�� = 本� §8 + `待清�/中间产物-20260919/seq11/`。
>
> 🆕 **2026-09-17 15:0x 刷新(� ⑪ 规划棒收官)**:**观测�径�构已定�并出�** —— 工作区根 `交接�/交接�_观测�径与在册缺陷_20260917.md`(**§8 �缀指纹 `3ece0f870cba67d0113a4c5f9de9d812`**,244 行)⇒ **① OBS-11 判�由「计数相等�改为「白��集��**(三集包�� + `nft` ��改「入站 accept 集��)|**② 6 �在册�缺陷清算排�**(`mksess*.cjs` 失效 ⇒ **阻塞实例�验收 ⇒ 先修**|guest(w-106) 实例页 502|…;排��该� §5.9)。范围 = **�改观测�**(`scripts/overlay-probe.cjs` + �数表 §6),⛔ `src/**` 零改动。➕ 顺手办:`.workbuddy/memory/MEMORY.md` **真瘦身 8 121 → 7 712 字符**(回到注入上�内)。➡� **下一棒 = � ⑫(执行棒)**,�径� §2「🎯 本轮动作�。�� = 该� §5–§7 与 §8.9。
>
> 🆕 **2026-09-17 14:5x 刷新(� ⑩ 收官 · 三件技术债全清)**:**① 幕 2 状��赖 ✅ 已修**(`--scene all` **12 PASS / 0 SKIP / 0 FAIL**,原 11/1;`--scene 2` �跑 **3 PASS / 0 FAIL**)|**② `COOLDOWN_MS=0` ✅ 0 命中**(`--scene 4c` / `ctrl` 整体移除 + 显�拒� = 退出� 2)|**③ OBS-11 `78 → 77` ✅ 有�字 = `20000`**(47 实例档;当� 47 无活跃实例 ⇒ 未监�。76 � socket **��点��零无�**,池 64 �全在;�订正 `39463` 实为 relay **动�**�点,现 `46147`)。➡� **下一棒 = � ⑪(规划棒:OBS-11 计数�径 → 白��集� + 在册�缺陷清算排�)**,�径� §2「🎯 本轮动作�。�� = `交接�/交接�_检测时延与deadline_20260917.md` **§8.8-4**。
>
> 🆕 **2026-09-17 13:5x 刷新(� ⑤–⑨ 全部收官)**:**① �数表 · 观测 · ��评估(⑤)② 3–5 �最�形�(⑥)③ 中继失败切�(⑦)④ 切�冷�语义(⑧)⑤ 检测时延与 deadline(⑨)—— 五�全绿**。现行形�:**两�真中继(47 + 106,��绑回环)**|`RELAY_MAX_HOSTS` = **7515**|**失败自动切� + 冷�语义(�一跳��)+ ��终�失败早退**已�三处装�点|`npm test` **160/159/0/1**。🔴 **本线唯一的"��慢"已闭环**:白等 **12.03 s → 0.09 s**�端到端 **34.1 s(中�)→ 25.3 s(中�)**。⇒ **下一棒 = � ⑩(覆盖网络线技术债清算 · 执行棒)**,�径� §2「🎯 本轮动作�。
> 🆕 **2026-09-17 11:0x 刷新(� ⑥ 执行部分收官)**:**覆盖网络已是"两�真中继"** —— 47 + **106**(106 �用既有 443�零新增公网���绑回环 `20080`);�数表 **五项待测全部��实测**�**待测 4 → 0**;`RELAY_MAX_HOSTS` 按实测�算 **225 → 7515** 并已下�两�;**收� `overlay-probe` 12/12 PASS**�47 监�� **79 = S0 基线**�`npm test` 137 pass ⇒ **无退化**。⚠� **唯一未过项 = 「�掉任一�中继�自动切�一��(无失败切�)** ⇒ 下一棒 = **� ⑦ 规划棒**。�� = `交接�/交接�_最�形�真机批次_20260917.md` §8(§8.9 ��现指纹)。
> 🟢 **2026-09-16 23:0x 刷新(机制层 R0–R5 全部完工)**:**R2 / R3 / R4 / R5 全部�地并端到端验收** —— relay 在 47 常驻(`dshs-relay`,�绑 `127.0.0.1:20080`)|� `https://alotbuy.com/dshs-relay` �达(origin 与 CF �路 `101`)|**w-106 已 `via='relay'`**(agent �与**实例�**都� relay)|**sshd ��隧�已下线且��能�建**(47 收回隧�公钥�`32022` 回收;106 摘掉 `DSHS_TUNNEL_*`��钥移走)⇒ 47 公网暴露�**净� 1 �**。
> 🆕 **R5 = 会���机(本轮新增)**:R1–R4 ��的「**Manager 必须与 relay �机**�这���**已�存在** —— Manager 改为**�拨出**一� wss,�点�到**自己本机**的回环池(`127.0.0.1:25000+`,64 �)。**relay 放哪�机器都��影� Manager。**
> **完整�� = 交接� `交接�/交接�_relay�地R2-R4_20260916.md` §9(R2)/ §10.4(R3 Step 0)/ §10.5(R3 本体 + R4 全链)/ §11(R5)**(��命令原文级输出);�测 `relay + remote-spawner + reachability + instance-port` = **38/38**(R5 新增 T18/T19);本机 `lib/` 与 47 `/opt/dshs/lib/` 对账 **0 差异**(R5 产物 29/29 hash 全�)。
> 🔴 **本线留下的一�硬教训(别�犯)**:`RemoteSpawner` 构造函数�赋值 `this.translateEndpoint` ⇒ 端点翻译**�默失效** ⇒ Manager 拿 Worker 侧��往**自己本机**拨 ⇒ **�览器��「空�应��平�零日志**。定��**判别器**(临时监� `21000` 把请求接走),��读代�猜 —— 判�已钉进 `test/remote-spawner.test.mjs`(先红�绿已实�)。
> ✅ **R5 �抓到��第二�(已于 2026-09-16 23:4x 修完并端到端验收 ⇒ R2-R4 �� §12)**:`src/fs/remote-user-fs.ts:70-73` 在 `agentFor(hostId)` 解��出时**�默回退到 w-47 本地 agent** ⇒ w-106 用户的 launch/文件�在**�次���的一�段窗�**里回 **� `404 {"error":"not_found"}`**(与"文件夹�存在"完全�形)。**判别器 = 看 relay 有没有 `DIAL`**:没有 = 请求根本没出去。
> 🔴 **下一个动作(⛔ 已勘误,勿�按旧指示走)**:⛔ **�是** "presence 改造"。机制层 R0–R5 已�,但 `覆盖网络_应用场景与待完善清� §五` 把**房间层/presence 排在第 7 步**,其�置是 **② 网抽象 + 地�规划 + 引导(P0-1/2/3) ③ 一机一钥 + 信任根 ④ 443/TCP 兜底 ⑤ �数表 ⑥ 3–5 �最�形�**(且仓库里目�**没有应用层代�**,"presence 改造"无从下手)。⛔ ���� R2/R3/R4/R5����开 32023����� SSH 版中继。
> 🟢 **2026-09-17 07:4x 刷新(② 收官)**:**� ② 已完�**(P0-1 网抽象 / P0-2 引导三级链 / P0-3 �字解�与授�,三步全部�地 + 端到端验收;执行进度:`交接�/交接�_网抽象与地�规划R6_20260916.md` 的「执行进度�段,指纹 `0d3f1f305e9e6219afa97cdfecff05ba`)。
> ⇒ **下一棒已定�(2026-09-17 07:5x 定� · 09:1x 刷新)**:~~� ③(一机一钥 + 信任根)~~ ✅ **已完�**(�� = `交接�/交接�_一机一钥与信任根_20260917.md` §8)→ ~~� ④(443/TCP 兜底)~~ ✅ **已完�**(�� = `交接�/交接�_443兜底_20260917.md` §8)→ ~~**下一棒 = � ⑤(�数表·观测·��评估)**~~(⛔ **已过期**:⑤–⑨ �已收官 ⇒ 现行下一棒 = **� ⑩**,�上方最新刷新行与 §2「🎯 本轮动作�)。**定��由**:③ 是身份基线�④ 是失败域分离,⑤ 建立在�两者之上(�数表�把 ④ 带回的 45% �径填�数值,��评估�覆盖 L3 跨机真容�)。⛔ ���� ② / ③ / ④ 的任何一步。
> �:本轮把 §11.6 **记下没动手**的两�缺陷修完并端到端验收 —— � R2-R4 �� **§12**(A1 � 404 真因定死为"文件� `hostDirectory` 无刷新机制"+ 治本/治安全�修 + 冷�动直接��;A2 `state.py` �报�空闲)。
覆盖网络/客户端化这�线已产出 **10 份规划文档 + 1 份执行交接�**(全在工作区根目录),**代�已有 S0+S1 �地(本机 commit `640813e`),且 R2–R5 的产物已铺到 47(Manager)与 106(Worker)两端**(R5 产物对账 29/29 hash 全�);⚠� **方案 S3 的机制已于 2026-09-16 15:2x 实测�伪并改写** ⇒ 详�下方「15:2x �核�与 §2。
| 项 | 值 |
|---|---|
| 文档库执行� | ✅ **空闲**(2026-09-17 15:0x 由「覆盖网络线-�11规划棒�释放;该棒�出规划 + 改 `.workbuddy/memory/MEMORY.md`,⛔ 未碰 `src/`�未动�数表) |
| **S0 / S1 �地真相** | ✅ **两端都已铺**(2026-09-16 23:0x �核):本机 `lib/` vs 47 `/opt/dshs/lib/` ⇒ **R5 产物�文件对账 29/29 hash 全�**;relay �行时 `/opt/dsh-relay/lib/net/relay/*` �步 |
| **15:2x �核(实测)** | 🔴 **S3 原机制�伪**:47 `sshd gatewayports no` ⇒ `-R 127.0.0.2:…` 被**�默改写为 `127.0.0.1`**(ssh 侧零报错)⇒ 回环别�方案作废,改「**实例端�区间隔离**�|🔴 **�现真 bug**:`findFreePort()` � worker �自�机 ⇒ ��在 47 的 `127.0.0.1` 撞��而 `tunnel.forward()` 返回值被忽略 ⇒ **�默打到别人实例**|⚠� `verify-cluster-cross.mjs` 默认端� 13080 ≠ 现役 3080,且**有生产副作用**(改容�/建用户/拉实例)⇒ 跑完�清 |
| 代� / �务器 | 🆕 **�⑩ 改动(2026-09-17)**:仅 `scripts/overlay-failover-drill.cjs`(幕 2 状�无关化 + 删掉 `4c`/`ctrl` 两个 `COOLDOWN_MS=0` 场景),⛔ **未碰 `src/`**�未改任何生产阈值�relay/Manager �已�原并�验(`systemctl restart dshs` 归零回 47)|⚠� **本轮有改动**:代�仓 `src/net/relay/*`(R5:`wire/duplex(新)/server/client/dialer(新)/main/index`)+ `src/config.ts` + `src/web/server.ts` + `test/relay.test.mjs`;47 上 relay/manager 两个 drop-in + `relay-keys.json`(�有 `.bak-r5*` 备份) |
| 文档库 | ✅ **10 份已转正�档案 103–112**(`4e3a1a4`)+ 已推镜�,**�端对账 192/192 全绿**(2026-09-16 11:5x) |
| 当�基线 | 代�仓 HEAD = `640813e` —— ✅ **已 push**(2026-09-16)|⚠� 本机工作区**有未�交改动**(S2 会�中继拆分 + R3/R4/R5 产物 + 新增 `test/remote-spawner.test.mjs`)⇒ ⛔ **未获授�� commit / � push** |
| 根副本 vs 档案 | 本线 10 份根文档的正文**已入档案 103–112**(行覆盖 **98.5–99.0%**,差异仅一级标题行)⇒ **根副本�留为工作副本,⛔ ��**(被 11 处引用,�走会断链) |
| **自动接续** | � **已于 11:00 删除,且⛔ ���建** —— 两版都试过(7 积分/轮 → 优化版 **9 积分/轮**),**�明"定时任务�积分"是伪命题**。原因�下方「�本真相�。 |
> 💰 **�本真相(终版 · 2026-09-16 11:2x,**实测那个会�本身**)**
> ⛔ �两版都错:v1 把固定注入当"一次性入场费"(错);v2 我**按最新 mtime 猜会�**,分�到了�一个"会��盘"会�(`e2e090be`,错)。
>
> **定�方法(��跑,别�用 mtime 猜)**:拿 prompt 里的独有字串去�转录 ——
> `grep "能脚本化的全部脚本化" <projects>/*.jsonl` ⇒ 唯一命中 **`e265f0cd-bd24-48c7-953e-4bbfa615bc7d.jsonl`**(761 KB,10:50:09 结�)。
>
> | 指标 | 实测 |
> |---|---|
> | **工具调用次数** | **32**(Bash 16 / Edit 6 / Write 5 / Read 4 / present_files 1) |
> | 模型请求(记录数) | 54(转录对�次请求记**两�**:一�无 `cache_read`�一�有 ⇒ **实际约 27**) |
> | **Σ input** | 5,205,114(��径折算 ≈ 2.6 M) |
> | Σ cache_read | 2.55 M(≈49%) |
> | �次 input:首 → 峰/末 | 52,582 → **141,401** |
> | **固定注入 5 万 × 请求数** | **� 51.9%**(对折�改�比例) |
> | **本次新�入的内容** | 工具输出�计 **84,870 字符 ≈ 2.4 万 token ⇒ 仅� 0.5%** |
>
> **它实际干了什么**:32 次调用集中在 `D:/github/dsh_shenxian` 的 **git / 文件读写**,并读过一次 `接续入�`(4,443 字符)。**并没有去读�����。**
>
> **三�结论**
> 1. **�本 ≈ 请求次数 × (固定注入 + 累积历�)**。本次 27–54 次请求里,**固定注入一项就� 51.9%** —— �**花掉的一�积分,�是"把指令与常驻规则���了二三��"**。
> 2. **本次真正"读进�"的东西�少(≈2.4 万 token,� 0.5%)** ⇒ 这笔钱**�是"上下文太大"造�的,是"请求太多次"造�的**。
> 3. ⇒ **唯一的大�� = 压请求次数(= 压工具调用次数)**:32 次调用若能压到 1–3 次,Σinput 掉一个数�级(9 积分 → ~1 积分�级)。**这�是真能�下�的钱。**
>
> **⛔ 由此两�硬规矩**
> ① **批�活��"�求 agent 写脚本",而�"�准跑这个脚本"** —— 脚本**由上一会�预先写好**,任务里命令�指定;agent 没有探索余地,请求次数自然压到个�数。
> ② **��把"读代� / 大范围��"派给无人值守会�**(�么脚本先 grep 计数,�么有人盯�)。
> ⚠� **�本教训(2026-09-16 实测,勿�蹈)**
> 1. **"新会�"�等于"�花钱"**:本工作区**�轮固定开销实测 ≈ 51,830 token**(系统�示 + 工具定义 + 常驻规则 + 注入的记忆)⇒ 任何新会�第一轮都�付这笔钱。准确的收益�径是「**把�轮水�从 39 万�到 ~5 万(约 1/8)**�,**�是"零�本"**(我此�把它说�"�低 token 消耗",属**�准确承诺**)。
> 2. **最大的�压缩项 = �轮注入的记忆文件超�**:✅ **2026-09-16 修�轮已办** —— 实测真被截断的是**用户级** `MEMORY.md`(注入上� **≈4,000 字符**),已按**分层�排�零删除**修好;🔑 **�排是��,删��是**(方法已沉淀为 `dsh-knowledge-upkeep §8.6「注入预算�`)。
> 3. ⛔ **��把"10 份文档档案化"交给 agent �份�** —— 那是 20+ 轮 × 7 积分 ≈ **140+ 积分**,��项目�积分第一招「**批�活写脚本**�。**正确�法 = 写一个转�脚本一次跑完**(加 8 段头部 + 原��� + 登记 + audit 全在脚本里),agent �读摘� ⇒ **1–2 轮完�**。
---
## 1. �份文档(按阅读顺�;� 3 份是决策层,其余是专项)
| # | 文件 | 一�� |
|---|---|---|
| 1 | `docs/客户端与桌�/�行性评估_客户端安装与覆盖网络互�_20260916.md` | 判定��;列出**现有架构已给出的 80% 形状**(soft 隔离 = 裸�进程 / Worker 四��议纪律 / 拨出���隧� / 全仓仅一处平�分支);§六 = 与�两份客户端文档的对账 |
| 2 | `docs/覆盖网络/覆盖网络_全�架构�盘_20260916.md` | 五层架构 + 12 �内建特性 + 选型对照 + **10 类风暴类型学** + ��组织五原则 + 7 步�地顺� |
| 3 | `docs/覆盖网络/覆盖网络_瓶颈�地方案_20260916.md` | **�大瓶颈�个给�执行�法**(� Slack / SCCM 官方�法照抄点 + 验收判�);**"��三件事"= presence + 游��放 L1 + �级内容寻�** |
| 4 | `docs/覆盖网络/覆盖网络_骨干层方案_20260916.md` | 多中心骨干(≤10–20 �员)+ 选择性加入;三�硬约�(接入/�员/��三分离�资格�能控制�签��骨干�得被默认�用) |
| 5 | `docs/覆盖网络/覆盖网络_百�规模推演_20260916.md`(v2) | 100 �异构画�;L1 10 / L2 30 / **L3 需中继 40–55**;全互� 4,950 vs 星型 100 |
| 6 | `docs/覆盖网络/覆盖网络_��全场景推演_20260916.md` | 1000 � × 11 场景;**瓶颈排�**(presence 第一)+ ��预算总表 |
| 7 | `docs/覆盖网络/覆盖网络_游�专项_MMORPG与MUD_20260916.md` | MMORPG/MUD/传奇 = **最匹�**;核心简化:**玩家之间�需�互�,中继按"�数"算** |
| 8 | `docs/覆盖网络/覆盖网络_调研_游�网络特�与群�上�_20260916.md` | 游�网络�数(�玩家 2–20 KB/s�jitter<20 ms)+ 群�上�**按扇出预算定义**的分档 |
| 9 | `docs/覆盖网络/覆盖网络_答疑_群�备份�移�密_20260916.md` | 四问:群�+agent / 备份(主备份用对象存储)/ �移�速 / 三层加密与元数��护 |
| 10 | `docs/覆盖网络/覆盖网络_补�与�考方案_20260916.md` | 补� 24 � + �考方案对照 + **�模� 12 �** |
| 11 | `docs/覆盖网络/�数表_覆盖网络_20260917.md` | **�⑤ 产物 · 唯一一张�数表**(155 行):输入�数 + 代�固化常� + 45% �径填值(`--max-hosts = 225`)+ 观测阈值 `OBS-01..12` + ��影�评估 + 待测汇总。**观测探针** = 代�仓 `scripts/overlay-probe.cjs`(一�命令 / 12 行 / 退出� 0-1-2;cwd = 本工作区根��跑) |
**�有两份他人产出(已按最佳方案收�,勿��改)**:`docs/客户端与桌�/dsh客户端化部署方案_20260916.md`(v3,平�侧�一��)|`docs/客户端与桌�/dsh桌�客户端_开�方案_20260916.md`(v1,交付载体层)。
> 🧭 **方法论(2026-09-16 16:4x 新增)**:`docs/覆盖网络/方案规划方法_覆盖网络线�炼_20260916.md` —— 把本线「**信�收集 → 方案调研 → 场景梳� → 逻辑验� → 应用推演**�五段作业法�推���用方法(��段骨架/出�判��**出�闸门三件事**�8 次真实纠错自���抄模�)。**下次�新方案规划时先读它。**
---
## 2. 下一步
> ✅ **本棒(�㊾ 执行棒 · 修「探针观测��一��按两�中继�并集)已收官 · 2026-09-19 01:0x–01:4x —— 判定 =「修��地并上生产�**(结果�本文件 **§0 最新行**;回填 = 交接� `覆盖网络-�45-低熵�治�-测熵与实现.md` **§16 全节** + �数表 **§11.16 补记**)。
> 📦 **已入仓(2026-09-19 05:3x �交 / 05:4x 补�镜�)**:�交 `d2ef362`(20 文件 · +2998 −183,�本棒 + �几棒已部署未入仓的��/文档)⇒ **�推两腿� ✅**(原仓 `work.alotbuy.com` ≡ CNB ≡ 本地 = `d2ef362`)。⚠� 首推时 **CNB 腿失败**,根因 = 本机旧令牌 **HTTP 401 已过期**(CNB 回泛化「仓库�存在�,⛔ **别改 URL**);**已�长期令牌** `~/.cnb/git-token`(用户� `cnb`)�补�,�推��常�。
> � **下一棒 = 无(本线��)** —— ⛔ 本棒**未登记接续**,�由是两�**都在"我这边的�执行�之外"**:① 唯一在册红 `D8`(云安全组 **乙-1**)**�能你在云控制��地**(两机 + 本机�无云凭�,�㊹ 已��;你已批准但定"先记下�续�处�" ⇒ 属挂起项,⛔ �进排棒队列)② 「**死�孤儿回收**�(�㊽ §15-10-2)的**回头�件尚未触�**(需先出现端�替�� `OBS-08` �红),且它是 **worker ↔ relay 的接�级**改动 ⇒ 应由**规划棒**先行,而"���现在开这�规划"属业务优先级(边界外①)。**��方�** = 跑 `state.py` 看 [入�] 段 + 本文件 **§0 最新行**的 ⑧⑨ 两�(现场形�:worker 若�漂到 106,探针**�应 29P/0S/0F** —— 那正是本棒的验收�;⚠� 若 `OBS-04` 红,先按 §0-⑨(c) �一次回�)。
> ⚠� **(上一棒记录 · 已由本棒结清)** �㊽ �留的原登记 = 「下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊾ 执行棒(修「探针观测��一�:把 `overlay-probe.cjs` 真机路径的端点/会��数从「�读 47 中继�改为「**按两�中继�并集**�)�,automation **`2febff6b-5786-46a3-b345-b648f2e19df3`**(一次性 · Scheduled)⇒ ✅ **本次已完�**。
> ✅ **本棒(�㊽ 执行棒 · 修「�� worker �实例端�注册丢失 / 孤儿端点�目�自愈�)已收官 · 2026-09-19 00:15 – 01:0x —— 判定 =「修��地并上生产 · 探针回到 **29P/0F/0S** · ⛔ 未为验���任何实例�**(结果�本文件 **§0 最新行**;回报 = 交接� **`交接�/覆盖网络-�45-低熵�治�-测熵与实现.md` §15 全节** + �数表 **§11.15**)。**一�� = 认领�的实例端�从此有人�新声明**(`adoptedInstancePorts()` 并入对账�径 + 认领�定回调),**活�孤儿被就地覆盖**(`localPort` �字沿用为�)。**判定��** = `agent.ts:256-264`(�径�� `mains`)+ `orchestrator.ts:290`(认领**刻��进 `mains`**)+ `server.ts:2151-2203`(`dropSession` **�摘会��删�目**)+ `server.ts:1447-1466`(`ensureEndpoint` **�用�目**)⇒ **�点 = 对账�径,⛔ �是 spawn �程** ⇒ 🔴 **§14-7 那�「��须实例�新拉起�被�伪**。**读数** = 探针 **26P/2F/1S(rc=1)→ 29P/0F/0S(rc=0)**|`npm.cmd test` **200/0/1**|`--scene all` **12P/0S/0F**(6m01s)|`orchestrator-rehydrate.test.mjs` **18/18**。**部署** = 两机 4 处 `lib` 全�替�(包 `a902c936cefdeeb3eb13c67dfcb5dd00`;**1080 对 md5 �一致 0**);回滚点 **`/opt/dsh/backups/seq48-20260919-0030/`**。⚠� **如实留档**:两机实际�地**相差 ≈ 28 s**(47 先�106 �,脚本 `cd` 写法失误所致;改动无�议/接��更 ⇒ 无跨版本�兼容)。**边界自�** = ⛔ 未 commit / 未 push(HEAD **`45b4999`**)|⛔ 未改 `DEFAULT_BLOCK_SIZE` / `package.json` / 零新�赖|⛔ 未改 nft·nginx·bwrap|⛔ 值格未动(§10 现算 **`ac6bbbbb8c92bd57ff0dc4cd8f4983ba`**)。
> ✅ **下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊾ 执行棒(修「探针观测��一�:把 `overlay-probe.cjs` 真机路径的端点/会��数从「�读 47 中继�改为「**按两�中继�并集**�,消除「106 worker 归属漂移 ⇒ `OBS-01` / `OBS-08` / `OBS-09` �红 / � SKIP�)**,automation **`2febff6b-5786-46a3-b345-b648f2e19df3`**(一次性 · **2026-09-19 00:55** = 本棒收�(00:4x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789750500000**)。**��** = 本入� **§0 最新行 ⑧** + 交接� **§15-10-1** + �数表 **§11.15-⑦(a)**;⛔ ��找��。**范围(写死,⛔ �许扩)**:① �改**观测�**(`scripts/overlay-probe.cjs` 真机�数路径)② �径 = **按 `hostId` �并两�中继**(`OBS-01` 在册节点数 / `OBS-08` `endpoints[]` / `OBS-09` 在册实例�三�数���并集;`endpoints` 按 `hostId:port` �并�`online` �**或**�`localPort` �**在线那一侧**)⛔ **�改阈值�⛔ �放宽判�**(并集�消除"看��",⛔ �许把真 FAIL 糊� PASS)③ 🔴 **`OBS-16` 计数约�必须先核**:⛔ �许改�对 47 `/status` 的读�次数(�用已采那份),106 那份**独立采样**并确认��与其 Δ 计算 ④ **先红�绿**(夹具�造"worker 挂 106�47 视角为空";⛔ �动生产)⑤ **零回归三件套**(探针 **29P/0F/0S** | `npm.cmd test` **200/0/1** | `--scene all` **12P/0S/0F**)⑥ ⛔ **��**:�改选路策略(`switcher.ts` 抖动�� / 一跳�� = 既有设计)��修"死�孤儿回收"(§15-10-2 已在册,worker 与中继�能��机 ⇒ �本轮��)��碰 `OBS-29` 与� id �径��动 D8。**硬门** = ⛔ � commit / � push|⛔ �改 `DEFAULT_BLOCK_SIZE` / `package.json`|⛔ �引新�赖|🔴 �改�数表**值格**(��许追加补记)|⛔ �改 nft / nginx / bwrap|🔴 密钥本体��网络 / �� relay|⚠� 动手�一��说明在动什么(R8)|🔴 �久�令:⛔ 调 `RELAY_FAILOVER_DEADLINE_MS`�⛔ 动 `HB_SEC`/burst�⛔ �用 `COOLDOWN_MS=0`|⚠� `--scene all` ⛔ �许套 < ~8 min 外层超时|⚠� 探针与演练**必须从工作区根跑**。**回滚** = 脚本回退上一份备份并�步两机(⛔ 本��涉 `lib` ⇒ 无需动�务)。**收�** = 回报写进该�新 **§16**(⛔ §8 ��缀 `be548afc3340583b2b63ca254bcf550f` �字��)+ �数表 **§11.16** + 本入� §0/§2 + 工作区日志 + `--release-exec` 释�。📌 **在册待你��项� = D8**(云安全组乙-1;⛔ �因它阻塞排棒)。
> ✅ **本棒(�㊼ 部署棒 · `C` �地两机 + `OBS-29` 真机腿)已收官 · 2026-09-18 23:43 – 2026-09-19 00:1x —— 判定 =「`C` 全绿且**已上生产** · ⚠� 唯一差异 = `OBS-09` 退化 SKIP(既有缺陷被本棒��触�)�**(结果�本文件 **§0 最新行**;回报 = 交接� **`交接�/覆盖网络-�45-低熵�治�-测熵与实现.md` §14 全节** + �数表 **§11.14**)。**一�� = � id 的 per-network 域分离**已在两�真机上�时生效**(两机 `blockIdKeyed=true`�`blockIdKeyId` **�字相�** = `d6e62322e5166938`)⇒ 跨机���径对�。** **交付** = ① **全�部署** `lib`(**270 文件 × 4 处**:47 `/opt/dshs/lib` + `/opt/dsh-relay/lib`�106 `/opt/dshs-cluster/lib` + `/opt/dsh-relay/lib`),🔴 **两机�一窗�内**�包 + ��(包 md5 `546b30719ca1bfca1e04189e1099424e`;两机解包��自先验包)② **备份/回滚点** = 两机 `/opt/dsh/backups/seq47-20260918-2347/` ③ **核对 = �一致 0**(**270 × 4 = 1080** 对�字节一致;多出的 11–12 个 = 历� `.bak-*` �留,⛔ 未删)④ **`OBS-29` 真机腿 PASS**(两机 `blockIdKeyed=true` + `blockIdKeyId` �字相� + `blockSize=1048576` ⛔ 未动;**第二��** = 两机 relay �动判别器日志原文)⑤ **零回归** = 探针 **28 PASS / 0 FAIL / 1 SKIP**(⚠� 基线 29P/0S/0F)|`--scene all` **12 PASS / 0 SKIP / 0 FAIL**(rc=0;**6m28s**)✅ �基线。⚠� **三�如实留档**:**(a)** 部署�径实为**全�**(两机 4 处 `lib` 是历次增� scp 的�加,47 `net/relay/index.js` mtime 12:55:27 vs `content/chunker.js` 06:52:16,与本机产物�� md5 �� **38–41 个**)—— ⛔ �是"�传改动文件";**(b)** prompt 里"核 32 个 md5"的�径**未能�现**(已按全�核对);**(c)** 🔴 **`OBS-09` 由 PASS 退化 SKIP** = **既有缺陷被本棒硬�求的"�� 106 `dshs-worker`"触�**(实例 `286172` �在且未被 teardown:`OBS-22 scanned=1 adopted=1 stopped=0` + `[rehydrate] probe OK … :21001`;但 47 端点表缺 `w-106:21001`;机� = `relay-tunnel.ts#cancel()` �撤销**当�进程** `forwarded` 集 ⇒ �留�目无人撤销�新进程��注册)⇒ **��须"实例�新拉起"** ⇒ 本棒**�修��凑绿**(�立�项 → 下一棒)。**边界自�** = ⛔ 未 commit / 未 push(HEAD **`45b4999`**)|⛔ 未改 `DEFAULT_BLOCK_SIZE` / `package.json` / 零新�赖|⛔ 未改 nft·nginx·bwrap|⛔ 值格未动(§10 现算 **`ac6bbbbb8c92bd57ff0dc4cd8f4983ba`** � §13 记录)。
> ✅ **(已执行收官 · 存档 · 2026-09-19 00:15–01:0x;结果�本文件 §0 最新行 + 交接� `覆盖网络-�45-低熵�治�-测熵与实现.md` §15 全节 + �数表 §11.15)原登记:下一棒(第 1 棒 · 本线当时唯一挂�的棒)= �㊽ 执行棒(修「�� worker �实例端�注册丢失 / 孤儿端点�目�自愈�⇒ 让探针 `OBS-09` 由 SKIP 回到 PASS)**,automation **`7dba0a2c-6cd4-456a-be0c-c53df4ac0d95`**(一次性 · **2026-09-19 00:15** = 本棒收�(00:0x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789748100000**)。**��** = 本入� **§0 最新行 ⑦** + 交接� **§14-7** + �数表 **§11.14-③**;⛔ ��找��。**范围(写死,⛔ �许扩)**:① 读�定�「实例端�登记 / 上报 relay�链路(`src/worker/relay-tunnel.ts` 的 forward/register + `src/supervisor/orchestrator.ts` 的 rehydrate/adopt),把判定��(文件 + 行 + 原文)写进回报 ② 修� = worker �动 / 认领�把**已 adopted 实例的监�端��新登记**为 forwarded 端�(覆盖孤儿�目 ⇒ `online=true`),⛔ �许绕过既有准入 / 白��实现 ③ **先红�绿**(未修缺�目 / 修��目在�,原文级)④ 零回归三件套(探针 **29P/0S/0F** | `npm.cmd test` **200/0/1** | `--scene all` **12P/0S/0F**)。**硬门** = ⛔ � commit / � push|⛔ �改 `DEFAULT_BLOCK_SIZE` / `package.json`|⛔ �引新�赖|🔴 ⛔ �改�数表**值格**(��许追加补记)|⛔ �改 nft / nginx / bwrap|🔴 密钥本体��网络 / �� relay|⚠� 动手�一��说明在动什么(R8)|🔴 �久�令:⛔ 调 `RELAY_FAILOVER_DEADLINE_MS`�⛔ 动 `HB_SEC`/burst�⛔ �用 `COOLDOWN_MS=0`|⚠� `--scene all` ⛔ �许套 < ~8 min 外层超时。⚠� **验��能需让 106 那个实例�新拉起一次**(端�登记在 spawn �程内)—— R8 �许但**优先找零中断路径**,必须中断时**先声明**并记时长;⚠� ⛔ �得为"�就�数表旧值"而动实例。**回滚** = 两机�窗�回退 `lib` 到本棒备份 + ��。**收�** = 回报写进该�新 **§15** + �数表补记 + 本入� §0/§2 + 工作区日志 + `--release-exec` 释�。📌 **在册待你��项� = D8**(云安全组乙-1;⛔ �因它阻塞排棒)。
> ✅ **本棒(�㊻ 执行棒 · `C` � id per-network 域分离 + `OBS-29` 判���)已收官 · 2026-09-18 22:33–23:3x —— 判定 =「`C` 全绿 · � 真机腿待部署�**(结果�本文件 **§0 最新行**;回报 = 交接� **`交接�/覆盖网络-�45-低熵�治�-测熵与实现.md` §13 全节(� §13.1 如实留档 + §13.2 零回归三件套)** + �数表 **§11.13**)。**一�� = � id 按「网络�分域了**:�字节**跨网必��**(⇒ 跨网共享**必然失效** = **设计�图**,⛔ �是缺陷),**�网去�一点没丢**。**改了什么** = `blockIdOf` / `contentIdOf` 从**裸 `sha256`** 改为 **`HMAC-SHA256(netKey, bytes)` �� 32 hex**;per-network 密钥**�用既有组密钥链**派生(`deriveBlockIdKey()`,🔑 **零新密钥文件 / 零新 env**);🔴 **缺�或空 `netKey` ⇒ 回�裸哈希**(= **回滚路径** + ��既有�测语义);`encode` 与 `netKey` 由 `writeTransforms()` / `readTransforms()` **�生��**(⛔ �许�开)。**读数** = �测 **200/0/1** + `overlay-content` **55/55**(新增组 G 共 10 例)|探针 **29 PASS / 0 FAIL / 0 SKIP**(基线 28 ⇒ **+1 = `OBS-29`**)|`--scene all` **12 PASS / 0 SKIP / 0 FAIL**(rc=0)。**判���** = 正腿 **3**(`P1` 跨网必��且都 ≠ 裸哈希 / `P2` �网必相��去��得丢 / `P3` 装��无�改)+ **具�负腿 2**(`flat-key-collapses` / `empty-key-falls-back-to-bare-hash`),🔴 **两�负腿都真跑过**(先红�绿:红腿 A �测 6 红 � 红腿 B �测 9 红,�已�原)。**边界自�** = ⛔ 未 commit / 未 push(HEAD **`45b4999`**)|⛔ 未 scp / 未部署|⛔ 未改 `DEFAULT_BLOCK_SIZE` / `package.json` / 零新�赖|⚠� **对生产的唯一动作 = �� 47 `dshs` 一次**(R8,为满足演练 6 h AUTH 窗�)。� **唯一未办 = `OBS-29` 的真机腿**(`/status.content.blockIdKeyed === true` 且 **47 / 106 的 `blockIdKeyId` �字相�**)⇒ **必须部署��能验** ⇒ 交下一棒。
> ✅ **(已执行收官 · 存档 · 2026-09-18 23:43 – 2026-09-19 00:1x;结果�本文件 §0 最新行 + 交接� `覆盖网络-�45-低熵�治�-测熵与实现.md` §14 全节 + �数表 §11.14)原登记:下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊼ 部署棒(`C` �地两机 + `OBS-29` 真机腿)**,automation **`92f8a1b9-5e38-4a7b-bd1b-7d7695e73d09`**(一次性 · **2026-09-18 23:43** = 本棒收�(23:3x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789746180000** ⇒ 🧾 已用 `date -d @…` �核 = **23:43:00** ✅)。**�点** = 🔴 **两机必须�一窗�内一起�**(`C` 改了� id �径 ⇒ **一�新一�旧 ⇒ 跨机��全部判校验失败**):`build` �把 `lib` scp 到 **47 的 `/opt/dshs/lib` + `/opt/dsh-relay/lib`** 与 **106 的 `/opt/dshs-cluster/lib` + `/opt/dsh-relay/lib`**(⚠� **32 个 md5 须全���一致 0**)→ ��两机 `dshs-relay` + 47 `dshs` + 两机 `dshs-worker` → 跑 **`OBS-29` 真机腿**(`/status.content.blockIdKeyed === true`�两机 `blockIdKeyId` **�字相�**)+ **探针�跑� 0 FAIL** + **`--scene all` � 12P/0S/0F**。**硬门** = ⛔ � commit / � push|⛔ �改 `DEFAULT_BLOCK_SIZE` / `package.json`|⛔ �引新�赖|🔴 **⛔ �改 `�数表` 的「值格�**(��许追加补记)|⛔ �改 nft / nginx / bwrap|🔴 密钥本体 ⛔ ��网络 / �� relay|⚠� 动手�一��说明在动什么(R8)|⚠� `--scene all` ⛔ �许套 < ~8 min 外层超时。**回滚** = 两机�窗�回退 `lib` 到 `/opt/dsh/backups/` 里本棒的备份 + ��(🔴 **回滚�注�**:`C` 的 id �代**�是无�的** —— 回退� id 会**�一次全�**,但因�存储**纯内存��盘**,���清空 ⇒ 无残留��)。**收�** = 回报写进本入� §0/§2 + 该� **§14** + 工作区日志 + `--release-exec` 释�。📌 **在册待你��项� = D8**(云安全组乙-1;⛔ �因它阻塞排棒)。⚠� **四��立�项在册**(⛔ ��本棒范围�⛔ �在下一棒范围):演练 47 s 超时腿 � 演练 6 h AUTH 上�腿 � `mksess.cjs` 失效 � ssh 别� `bt-server` 端�陈旧。
> ✅ **本棒(�㊺ 执行棒 · §10-3 低熵�治�「测熵先行�)已收官 · 2026-09-18 21:56–22:2x —— 判定 =「`M1` 实测完� · 🔴 **D 的作用�为空 ⇒ D 本轮�实现**�**(结果�本文件 **§0 最新行**;回报 = 交接� **`交接�/覆盖网络-�45-低熵�治�-测熵与实现.md` §8 回填** + �数表 **§11.12**)。**读数(真实内容 · ⛔ 零��字节)**:S1 = 壳页 `/plugins/??…` **全部 60 � combo**(**按页�顺�**拼装,�计 **23,629,336 B**;🔴 历� `11,363,655 B` = **最大��**,⛔ �全部之和)⇒ **`M1-a`** � 23 / 唯一 23 / **��率 0.00%** |**`M1-b`** 低熵� **0 � / 0 B**,�� H ∈ **[5.1807, 5.8444]**,直方图 `{5.0-5.5: 8, 5.5-6.0: 15}` |**`M1-c`** **0.000000%** |**`M1-d`** 4 KiB 窗 5,768 个 ⇒ **低熵段 15 段 / 241,664 B = 1.0225%**(max 段 **81,920 B**)|**S2** 60 份内容中�� **56** 份�**低熵内容 0 份**。**判定** = **D 的目标已由「定长 1 MiB 切分�结构性达�**(低熵物质�以 ≤80 KiB �内片段存在 ⇒ 对�级枚举���;且无低熵内容�元)⇒ `D-1` / `D-2` 两分支都�命中 ⇒ **D 本轮�实现**(⚠� ��级 —— 目标已被实测�实达�;回头�件 = **出现低熵内容�元**)。**产物** = **`scripts/overlay-entropy.cjs`**(�读探针 · 零第三方�赖 · 切分调用仓库那份 `chunkify`)+ �数表 **§11.12** + 交接� §8 回填。**边界自�** = ⛔ 未改 `src/**` 一行 · ⛔ 未动 `DEFAULT_BLOCK_SIZE` / `package.json` · ⛔ 未改生产实例 / 未��在线�务 · ⛔ 未 commit / 未 push · ⚠� �数表 **§10 指纹未�**(`6b37bfd506758d882d9f803678f85d23`)· 🔴 临时物已清(47 `/tmp/s45`;PG 临时会� `remaining=0`)。⚠� **留档两�**:① 仓里 **`mksess.cjs` 已失效**(写 SQLite,而��库 = **PG** ⇒ 一�就 401)—— **待收�缺陷**;② `/plugins/??…` **有鉴�**(无会� 401)。
> ✅ **本棒(�㊺ 规划棒 · §10-3 低熵�治�)已收官 · 2026-09-18 21:35–21:5x —— 判定 =「规划完� · ⛔ 零代� / 零�务器改动�**(结果�本文件 **§0 最新行**)。**产出** = 方案 `调整方案/133-覆盖网络-低熵�治�方案-C域分离与D�确定性.md` + 交接� **`交接�/覆盖网络-�45-低熵�治�-测熵与实现.md`**(**§8 ��缀 `be548afc3340583b2b63ca254bcf550f`**)。**方�已由用户 2026-09-18 21:28 ��** = **采纳 C + D**;**B(OPRF / SA-MLE)�级为�选加强�⛔ �立项**。🔴 **方案第一个动作 = 补测 `M1`「低熵��类数 / 体积 / �首�包比例�**(**从未测过**;且历�所有"低熵"读数都是**��字节** —— perf 用 `makeBytes()`�低熵定性用 8 B ���;�存储**纯内存��盘** ⇒ 生产侧无样本��)。🔑 **本轮新增结构�现(��级 · 待实测确认)** = 切分是**定长 1 MiB**(`chunker.ts:60/137`)⇒ 首�包 10.8 MB ≈ 11 �**混高熵内容** ⇒ **首�包内几乎无纯低熵�**;**D 的真实战场更�能是「�于 1 MiB 的独立内容�**,⇒ 测熵**必须��窗�熵腿**,�则会得出"全是高熵�"的**�绿**。🔴 **�时�现一�既有漂移(�报�改)**:�数表 §10 头值记 `d408d640246a980f702fe7b0a2895219`(�㊴ 12:2x),**现算 = `6b37bfd506758d882d9f803678f85d23`**(830 行 · mtime 09-18 15:18)⇒ 记录值未�内容更新(⚠� 与�㊹ 自报值一致 ⇒ 两次独立计算�值)。
> ✅ **(已执行收官 · 存档 · 2026-09-18 22:33–23:3x;结果�本文件 §0 最新行 + 交接� `覆盖网络-�45-低熵�治�-测熵与实现.md` §13 全节 + �数表 §11.13)原登记:下一棒(第 1 棒)= �㊻ 执行棒(C 域分离 + 判���)**,automation **`aab9e357-8101-4011-b829-bf9f4a459bf7`**(一次性 · **2026-09-18 22:33**)。**�点** = **�� C(per-network keyed hash)**:**①** `blockIdOf` / `contentIdOf` 改 `HMAC-SHA256(netKey, bytes)`�输出��� 32 hex;per-network 密钥**�用 `crypto.ts` 既有组密钥链路**从 network 维度派生(⛔ �新增密钥文件 / ⛔ �新增 env)。**②** �处过 **8 文件 / 36 处**调用点(⚠� **缺��传 netKey ⇒ 必须回�裸哈希** = 回滚路径,且��既有�测语义;⛔ �一处 = 校验必红且�难定�)。**③** 🔴 **判���(本棒存在的主��由)** = �里原写的 `OBS-29` 负腿(「稀释���确定性派生� ⇒ 必红�)**� D 被移除而失去对象** ⇒ ��� **C 的判�**:**正腿** = �字节 + **�� network ⇒ � id ��**;**负腿(必须真跑�必须具�)** = **去掉 per-network 维度(netKey ��值 / �空)⇒ 必红**(⛔ �许�给正腿 —— 本线�病根 = 装了没生效 = �默放行);编�自 **`OBS-29`** 起(现表最大 `OBS-28`)。**④** 🔴 **`E1` 基线必须��**(C � id �径 ⇒ 旧读数作废�去�率归零�算;⚠� `E1` 定义**��估**)。**⑤** 新增两��测断言:「�� network ⇒ �字节得�� id�+「� network ⇒ �字节得� id�。**硬门** = ⛔ �改 `DEFAULT_BLOCK_SIZE`|⛔ �改生产实例 / ⛔ ���在线�务|⛔ �引第三方�赖 / ⛔ �动 `package.json`|⛔ � commit / ⛔ � push|⛔ **�实现 D**(�㊺ 实测已判无效)。⚠� **�一时刻�挂这一个棒**(用户 2026-09-18 00:3x 明令)。📌 **在册待你��项� = D8**(云安全组乙-1;⛔ �因它阻塞本线排棒)。
> ⛔ **(被上行�代 · 已于 2026-09-18 21:56–22:2x 跑完)原登记** = **下一棒(第 1 棒 · 本线当时唯一挂�的棒)= �㊺ 执行棒(低熵�治�:测熵先行 + C 域分离 + D �确定性)**,automation **`f94f2973-4ead-471a-a020-df6dc0b144a4`**(一次性 · **2026-09-18 21:56**),automation **`f94f2973-4ead-471a-a020-df6dc0b144a4`**(一次性 · **2026-09-18 21:56** = 本棒收�(21:5x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789739760000** ⇒ 🧾 已用 `date -d @…` �核 = **21:56:00** ✅)。**�点** = 先按交接� **§5 步骤 1** 补测 `M1`(⚠� 必须**真实内容**�⛔ �用��字节顶替�**必须��窗�熵腿**)→ 由结论定 **D 的作用�** → �� **C**(per-network keyed hash;⚠� **� id �径�代 ⇒ 全部既有� id 失效 ⇒ `E1` 基线必须��**)+ **D**(D-1 稀释域首选,⚠� 稀释�必须�真�机且�出现在明文���,负腿 = ��确定性派生�必红)。**硬门** = ⛔ �改 `DEFAULT_BLOCK_SIZE`|⛔ �改生产实例 / ⛔ ���在线�务|⛔ �引第三方�赖 / ⛔ �动 `package.json`|⛔ � commit / � push|⚠� 改动 >10 文件先出�影�清�。⚠� **�一时刻�挂这一个棒**(用户 2026-09-18 00:3x 明令)。📌 **在册待你��项� = D8**(云安全组乙-1;⛔ �因它阻塞本线排棒)。
> � **本棒(�㊹ · D8 云安全组乙-1)未收官 · 2026-09-18 15:3x–16:0x —— 判定 =「阻塞在用户侧云控制��**(结果�本文件 **§0 最新行**;回报 = 工作区根「交接�/交接�_覆盖网络直连与P2P_20260918.md�**§8.11**)。**阻塞根因(原文级)**:47 `aliyun` CLI 无凭�(`~/.aliyun/config.json` �存在)+ metadata `ram/security-credentials` = **404**;106 无 `tccli` + metadata `cam/security-credentials` = **404**;本机无任何云 CLI / 凭� ⇒ 🔴 **⛔ �索� / �硬编� AK/SK** ⇒ **�能用户侧控制��地**。**待�地两�(乙-1)** = 47 阿里云入方� `UDP 21100/21115` � `106.54.21.172/32` | 106 腾讯云入方� `UDP 21100/21115` � `47.77.182.89/32`(🔴 **⛔ 零个 `0.0.0.0/0`**)。**本棒已顺带结清的�一问** = **本机(开�机)⛔ �是覆盖网节点�⛔ 也�是终端**(�是测试�起端 / 观测�;无固定公网 IPv4 ⇒ 结构上�能作被拨入节点)。⛔ **未登记下一棒**(阻塞项需人�作)。**�地�第一动作** = ��实测�测(基线 **47→106 � 21 收 0** � **106→47 � 28 收 0**)+ 探针 `OBS-27/28` �跑 + �数表 §11 补记。
> � **本棒(�㊸)已收官 · 2026-09-18 14:47–15:2x —— 判定 =「线内�� · 🔴 D8 待你���**(结果�本文件 **§0 最新行**;回报 = 工作区根「交接�/交接�_覆盖网络直连与P2P_20260918.md�**§8.10** + 「docs/覆盖网络/�数表_覆盖网络_20260917.md�**§11.11**)。**三项全绿**(先红�绿 / 两腿对照 + 防错腿 / 处置��)+ **零回归三件套 201/200/0/1 | 12P/0S/0F | 28P/0S/0F**。⇒ **本线��**:无�留 ⇒ ⛔ **本棒未登记下一棒**(用户 2026-09-18 00:3x 明令「最好��建立多个接续任务,一个会�结�时�排下一个�);**唯一在册大项 = D8(云安全组,需你��)**。📌 **在册待你��项 = D8**(���现在开通云安全组 **乙-1** = 47↔106 �放行**对端 `/32`** × UDP `21100/21115`,⛔ 零个 `0.0.0.0/0`;需你给控制�访问方� / 审批)—— 该项已在册,⛔ �因它阻塞排棒。
> ✅ **(已执行收官 · 存档 · 2026-09-18 14:47–15:2x;结果�本文件 §0 最新行 + 交接� §8.10 + �数表 §11.11)原登记:下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊸ 执行棒(**观测�缺�收�**:① `overlay-direct-probe.cjs` 在 106 上�跑 ② �数表定�与 cwd 解耦 ③ 106 上��跑残留副本处置)**,automation **`8dbee90b-7d49-4c97-a25e-fdc302f9ca32`**(一次性 · **2026-09-18 14:47** = �㊷ 执行棒收�(14:4x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789714020000**)。**�点** = �修**观测�**三件事(⛔ �碰数�� · ⛔ �� D8):① 把探针对 `registry.js` 的**硬 `require` 改�惰性 / �选加载**并在缺失时**具��级**(⛔ ��"�铺一份 `registry.js`"糊过去;⛔ **�许�默返"没有"**)② 让探针与 `overlay-failover-drill.cjs` 的**�数表定�与 cwd 解耦**(⚠� **�留**"�好 1 个��法"这�防错)③ 处置 106 `/opt/dshs-cluster/scripts/` 那份**��跑的残留副本**。**开工��** = 交接� **§8.9-⑥-2**(探针 / 演练须从工作区根跑)+ **§8.9-⑥-7**(106 无 `registry.js`)+ **§8.8-④**(�一缺�,�㊶ 已登记为独立�续项)+ �数表 **§6**(探针阈值键与 `OBS-26/27/28` 契约)。**验收** = ① **先红�绿**(红 = 106 上 `Cannot find module … registry.js` 原文级;绿 = �一命令在 106 上跑通并给出该�命令读数)+ ② **两腿对照**(从代�仓根跑:现在 rc=2 → 修�正常读数;**人为造两份�数表** ⇒ �须报错退出)+ ③ 处置�� + ④ 零回归三件套(基线 **201/200/0/1** � **12P/0S/0F** � **28P/0S/0F**)。**硬门** = ⛔ � commit / � push(R7)|⛔ �改 `server.ts` DIAL / 白��语义|⛔ �改 `content/**` � id �径|🔴 ⛔ �许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径|⛔ �改 bwrap(47=0.4.0)/ nft(**72 行**)/ nginx|🔴 密钥本体��网络 / relay|⛔ �引入新�赖|⛔ **D8 零动作**(⛔ �许 `0.0.0.0/0` �拆分等价写法�⛔ �许索� / 硬编�云 AK/SK)。🔴 **两�已踩过的�**:从代�仓根跑探针 / 演练 ⇒ rc=2(本棒正是�修掉它);`--scene all` ⛔ �许套 < ~8 min 外层超时,⚠� 演练�若 47 视角 `endpoints=[] / used=1` ⇒ **� 106 `dshs-relay` �够 ~25 s ��**("� 2 s ��"**�触�回�** —— 已实测)。**收�** = 回报写进该� **§8.10**(⛔ §1–§7 正文与 §8.1–§8.9 �节点�一律�动;**§8 ��缀 `8925c2460810c6dc5cdbc075b6cdaed2` 是���**)+ �数表 **§11.11**(**现算并�步** §10 指纹)+ 本入� §0/§2 + 工作区日志 + 过门��登记**一个**下一棒(若全绿且无�留 ⇒ 本线唯一在册大项 = **D8 需你��** ⇒ 明确写「线内���且 ⛔ �登记)+ `--release-exec` 释�。⚠� **�一时刻�挂这一个棒**(用户 2026-09-18 00:3x 明令)。
> ✅ **(已执行收官 · 2026-09-18 14:14–14:4x;结果�本文件 §0 最新行 + `交接�/交接�_覆盖网络直连与P2P_20260918.md` §8.9 全节 + �数表 §11.10)原登记:**下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊷ 执行棒(P2 · S7:**规模回归** —— 候选数 / 直连�功率 / 切�耗时 / 回�字节 **四项�测**)**,automation **`690f44e9-b6f7-4517-ae2b-ca0b05b8dfe9`**(一次性 · **2026-09-18 14:14** = �㊶ 执行棒收�(14:0x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789712040000**)。**�点** = 四项�测�自给出**原始读数 + 与�数表 §3.2 / §5 / §7 的�项对照**;⚠� **D8 未放行** ⇒ 直连**�功率**腿照 S5/D5 由**离线 NAT 模拟器**承载,⛔ **�许把"直连建立了"写��功**;⛔ **��� S5 / S6**(已收官�已部署)。
> ✅ **(已执行收官 · 2026-09-18 13:35–14:0x;结果�本文件 §0 最新行 + `交接�/交接�_覆盖网络直连与P2P_20260918.md` §8.8 全节 + �数表 §11.9)原登记:**下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊶ 执行棒(P2 · S6:`peer` 档接线 + **D7 � id �算**)**,automation **`32c2cde1-e5c4-427a-9b9b-e8adab1c8725`**(一次性 · **2026-09-18 13:34** = �㊵ 执行棒收�(13:2x)+~7 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789709640000**)。**开工��** = 工作区根 **`交接�/交接�_覆盖网络直连与P2P_20260918.md`**(**归档� 132**;**§8 ��缀 `8925c2460810c6dc5cdbc075b6cdaed2`**,⛔ 开工��字�核 —— ⚠� **§8 已由�㊵ 回填�该�缀��字��**)+ �数表 **§11.8**(�㊵ 补记)。**范围(写死,⛔ �许扩)** = **��该� §6 的 S6**(`source.ts` fetcher **优先直连�回� wss** + **回归"零回� / 共享命中"既有读数**,对照�㉔ / �㉛ 基线);⛔ **�� S7**(规模回归)。**验收** = **D7 先红�绿** —— 🔴 **`peer` 接线�� id 必须与接线��字一致**(⛔ �了这�就�算过;须给出**接线��两次� id 原文读数**)+ 零回归三件套(基线 **201/200/0/1** | **12P/0S/0F** | **28P/0S/0F** —— ⚠� 探针基线**已由 25P �为 28P**,⛔ 别拿旧基线当对照)。**硬门** = ⛔ � commit / � push(**R7**)|⛔ �改 `src/net/relay/server.ts` 的 DIAL / 白��**语义**(�读;�用 `network.ts#isAllowedDialer`)|⛔ �改 `content/**` 的**� id 计算路径**|🔴 **D8 ���读核对�⛔ ��实施**(⛔ ⛔ **�许索�或硬编�任何云 AK/SK**;⛔ **��出现** `0.0.0.0/0` �**拆分等价写法** ⇒ 出现��手回滚并报告)|🔴 ⛔ �许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径|⛔ �改 bwrap(47 = **0.4.0**)/ nft / nginx|🔴 密钥本体 ⛔ ��网络 / �� relay|⛔ �引入新�赖。🔴 **一�上棒踩过的�(⛔ �许�踩)**:`--scene all` 内� **120 s + 90 s** 两段观察窗� ⇒ ⛔ **�许给它套�于 ~8 min 的外层超时**(上棒被 `timeout 300` 截断 ⇒ 末尾 `restore()` 未执行 ⇒ **106 `dshs-relay` �机约 4 min**)。**收�** = 回报写进该� **§8 之�的新�节**(⛔ �改 §1–§7 正文�⛔ �改 §8.1–§8.7 �节点�)+ �数表 **§11.9** 补记(**现算并�步** §10 指纹)+ 本入� §0(新增一行)与 §2(更新下一棒)+ 工作区日志(append-only)+ 过门��登记**一个**下一棒(= **S7 · 规模回归**)+ `--release-exec` 释�。⚠� **�一时刻�挂这一个棒**(用户 2026-09-18 00:3x 明令)。
> � **本棒(�㊵)已收官 · 2026-09-18 12:33–13:2x —— 判定 =「线内�� · 🔴 D8 待你���**(结果�本文件 **§0 最新行**;回报 = 「交接�/交接�_覆盖网络直连与P2P_20260918.md�**§8 全节** + 「docs/覆盖网络/�数表_覆盖网络_20260917.md�**§11.8**)。**一�� = P2/S5「直连候选交� + 打洞探测�已�地生产,探针 25P → 28P 全绿。** **读数** = 探针 **28 PASS / 0 SKIP / 0 FAIL**(rc=0)|`npm.cmd test` **201/200/0/1**(�字�基线)|`--scene all` **12P/0S/0F**(幕4-C **23422 ms** / 30000)。**判�** = **D1–D6 ��先红�绿**(先红 = 旧产物 `Cannot find module '…/direct/index.js'`;�绿 = `OBS-26/27/28` 三行 PASS)。🔴 **唯一的红 = D8 未实施**(云安全组 UDP 入站�未放行:**��实测�� 20 收 0**;拟录 **乙-1** 两� = 47↔106 �放行**对端节点 IP /32** × UDP `21100/21115`,⛔ **零个 `0.0.0.0/0`**;��清��该� **§8.2-D8**)⇒ **需你给控制�访问方� / 审批**(⛔ 未索��未硬编�云 AK/SK)。⚠� **三�如实留档**:**①** 本棒**自造过一次生产影�** —— 首次 `--scene all` 被 `timeout 300` 截断 ⇒ `restore()` 未执行 ⇒ **106 `dshs-relay` �机约 4 min**(13:05:58 → 13:10 �现�**立� `systemctl start` �原**;该窗�门户 / 实例�**全程 200**�无业务中断��);**②** 修掉**两�本棒自造缺陷**(�在**本棒新建的观测脚本**内,⛔ �涉任何既有生产代�):`--ss` 为布尔开关�按"带值选项"解� ⇒ 该腿**�为 null(死代�)**�且正对照缺失 ⇒ **潜在�绿**(修 = 按"出现过"判定 + **新增正对照**)�`punch` 从 `direct/index.js`(**选择性桶导出**)�常� ⇒ `undefined` ⇒ `Number()` = `NaN` ⇒ **冷�构造期断言直接抛**(原文 `收到 null` 是�象,`JSON.stringify(NaN) === 'null'`;修 = 改从 `punch.js` � + **�动期硬断言**);**③** **D7 � id �算属 S6** ⇒ 本棒如实登记**未验�**(⛔ �编数)。**边界自�** = ⛔ 未 commit / 未 push(HEAD **`09ce76f`**;`git status --short` **17** 处与开工**�数相�**)|⛔ 未改 `server.ts` DIAL / 白��语义 · ⛔ 未改 nft(**72 行**�字一致)/ nginx / bwrap|🔴 `RELAY_FAILOVER_COOLDOWN_MS=0` 命中 **0**|🔴 密钥本体��网络 / relay|⚠� **值格一律未动** ⇒ 零个新增 / 改动生产 env(`DSHS_OVERLAY_DIRECT` 两机命中 **0** = 走缺��开)。
> ✅ **(已执行收官 · 存档 · 2026-09-18 13:2x;结果�本文件 §0 最新行 + 交接� §8 全节)原登记:下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊵ 执行棒(P2 · S5:直连候选交� + 打洞探测)**,automation **`d4fa99ac-6f7b-400f-89e7-797de3b7681a`**(一次性 · **2026-09-18 12:33** = �㊴ 规划棒收�(12:2x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789705980000**)。**开工��** = 工作区根 **`交接�/交接�_覆盖网络直连与P2P_20260918.md`**(**归档� 132**;**§8 ��缀 `8925c2460810c6dc5cdbc075b6cdaed2`**,⛔ 开工��字�核)。**范围(写死,⛔ �许扩)** = **��该� §6 的 S5**(候选交� + 打洞探测 + 开关 / 默认值 / �示 + �读观测� + 云安全组的 **乙-1** 形�);⛔ **�� S6**(peer 接线)�**S7**(规模回归)—— �是独立�续棒。**验收** = 该� §5 的 **D1–D5 / D8** 先红�绿 + 零回归三件套(基线 **201/200/0/1** | **12P/0S/0F** | **25P/0S/0F**)。**硬门** = ⛔ � commit / � push(**R7**)|⛔ �改 `server.ts` 的 DIAL / 白��**语义**(�读;准入判定**必须�用**既有实现)|🔴 云安全组**�准按「乙�**(仅放行对端节点 IP),⛔ **�对�许**出现 `0.0.0.0/0` 入站规则(出现�**�手回滚并报告**)|🔴 ⛔ �许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径|⛔ �改 bwrap(47 = **0.4.0**)/ nft / nginx|⛔ �引入新�赖(�用 Node 内建 `dgram`)|⛔ �许为"云安全组自动化"索�或硬编�任何云 AK/SK(乙-3 = 回头�件)。**收�** = 回报回填该� **§8**(⛔ �改 §1–§7 正文)+ �数表 §11 新�节(**现算并�步** §10 指纹)+ 本入� §0/§2 + 工作区日志 + 过门��登记**一个**下一棒(= S6)+ 释�。⚠� **�一时刻�挂这一个棒**(用户 2026-09-18 00:3x 明令)。
> � **本棒(�㊳)已收官 · 2026-09-18 11:3x–12:0x —— 判定 =「线内���,⛔ 本棒⛔ 未登记下一棒**(结果�本文件 **§0 最新行**;回报 = 「交接�/交接�_节点一键加入与分组准入_20260918.md�**§8.10** + **§8.11**(= P2 待��清�)+ 「docs/覆盖网络/�数表_覆盖网络_20260917.md�**§11.6**)。**一�� = 你��的两项全部收�**:探针**夹具模��闭化**(`OBS-24` / `OBS-25` 缺夹具 ⇒ SKIP + 留痕,⛔ �� ssh;红腿真 ssh **2 次** / 绿腿 **0 次**)+ `DRILL_RELAY_UNIT` 改� **`RELAY_UNIT_NAME`**(**值格未动**�⛔ 零生产 env �更)。**三件套全绿** = 探针 **25 PASS / 0 SKIP / 0 FAIL**|`npm.cmd test` **201/200/0/1**|`--scene all` **12 PASS / 0 SKIP / 0 FAIL**(幕4-C **20770 ms** / 30000)。🔴 **P2(直连 + P2P)�需你先��** —— **"具体�定什么"已列�清�**(交接� **§8.11**:① UDP 入站的云安全组开�开 ② 若开���范围怎么定);⛔ **在 P2 之�本线无其它在册项**。
> � **本棒(�㊲)已收官 · 2026-09-18 11:0x–11:2x —— 判定 =「线内���,⛔ 本棒⛔ 未登记下一棒**(结果�本文件 **§0 最新行**;回报 = 「交接�/交接�_节点一键加入与分组准入_20260918.md�**§8.9** + 「docs/覆盖网络/�数表_覆盖网络_20260917.md�**§11.5**)。**一�� = 观测�去常��赖已�地**:`OBS-09` 在册判�改从 `/status.endpoints[]` 派生(�个派生端点必须�达;派生为空 ⇒ SKIP + 留痕)�`OBS-08` 空表三��分(挂在�一�中继 / 确实没挂 / ��判);探针 **25 PASS / 0 SKIP / 0 FAIL**|`npm.cmd test` **201/200/0/1**|`--scene all` **12P/0S/0F**。🔴 **在 P2 之�本线无其它在册项**(P2 = 直连 + P2P,命中 **R5** ⇒ 须你先����影�评估)。⚠� �有**两项**(�超本棒范围�按纪律**�报告�动手**)写在 §0 最新行:探针夹具模��闭性歧义 � `DRILL_RELAY_UNIT` 键�文档项。
>
> > ✅ **(已执行收官 · 存档 · 2026-09-18 11:2x;结果�本文件 §0 最新行 + 交接� §8.9 全节)原登记:下一棒(第 1 棒 · 本线当�唯一挂�的棒)= �㊲ 执行棒(观测�去常��赖:`OBS-09` 在册判�跟�事实 + 观测点�红�分)**,automation **`7268e6e7-dc5a-4517-bd10-bf7e5557721f`**(一次性 · **2026-09-18 10:51** = 本棒收�(10:4x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789699860000**)。**��** = 工作区根「交接�/交接�_节点一键加入与分组准入_20260918.md�**§8.8-⑥**(两�点�:判�钉死漂移端� / 探针�读 47 中继的�红�)+「docs/覆盖网络/�数表_覆盖网络_20260917.md�**§11.4-⑧**;⛔ ��找��。**范围(写死,⛔ �许扩)**:**① `OBS-09` 的"在册"判�去端�常�** —— 改为**从 `/status.endpoints[]` 派生「该主机�下�� agent 端�的在线实例端点�**(⛔ ��读表内固定端��在册判�),**必须带两�先红�绿腿**:(a) 端�漂移夹具(实例在 21001 而旧�径按表值读 21000 ⇒ 旧判� SKIP�新判� PASS,原文级)(b) 派生为空 ⇒ SKIP + 留痕(⛔ �判红);**②「47 中继视角端点表为空�必须与「该主机确实没挂客户端��分**(⛔ �许��一个 FAIL�⛔ �新增暴露�);**③ 零回归三件套**(`npm.cmd test` **201/200/0/1** � `--scene all` **12P/0S/0F** � 探针 **0 FAIL**;三者都带 `--table`)。⚠� 跑完 `--scene all` 若 47 视角端点表为空 ⇒ **� / � 106 `dshs-relay`** 逼 worker 按候选链回� 47(⛔ **��� worker**�⛔ **��实例**)。**硬门** = ⛔ � commit / � push(**R7**)|⛔ �改任何生产�置值(**D1**)|⛔ **�许开工 P2**(命中 **R5** ⇒ 须用户先����影�评估)|⛔ �改 nft·nginx�⛔ �新增暴露�|🔴 ⛔ �许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径|⛔ �改 bwrap �数(47 = bubblewrap **0.4.0**)|🔴 密钥本体 ⛔ ��网络 / �� relay。**验收** = ①② 的**先红�绿原文**(�化项必须给数字;测�出 ⇒ 如实写"未验�",⛔ �许编数)+ ③ 三件套读数。**收尾** = �数表 §11 补记区新�节(�**现算并�步** §10 指纹)+ 该� **§8.9**(⛔ �改 §8.1–§8.8 �节点�)+ 本入� §0/§2 + 工作区日志 + 释�。⚠� **排下一棒的门�**:若全绿且无�留 ⇒ **明确写「线内���且 ⛔ �登记下一棒**(本线�续唯一大项 **P2 需用户��**);�则�登记**一个**(id �能�自工具返回值;间隔 = 收� +5~8 分钟;⛔ �预登记队列)。
> ✅ **(已执行收官 · 存档 · 2026-09-18 10:4x;结果�本文件 §0 最新行 + 交接� §8.8 全节)原登记:下一棒(第 1 棒 · 本线当�唯一挂�的棒)= 收��核棒(�㊱ P1 收� + `OBS-09` �原核查)**,automation **`8887ac37-6e91-4bf3-ab96-c0a0916fb922`**(一次性 · **2026-09-18 10:08** = 本棒收�(10:0x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = 1789697280000)。**开工��** = 工作区根 **`交接�/交接�_节点一键加入与分组准入_20260918.md` §8**(执行棒回报)+ **`docs/覆盖网络/�数表_覆盖网络_20260917.md` §11.4**;⛔ ��找��。**范围(写死,⛔ �许扩)**:① 跑探针�核 **`OBS-09`** —— 若�为 SKIP ⇒ 查「**实例 → 本地 worker 的端�注册**�链路并�原(⛔ �许�猜 relay�⛔ �许编数);② �核本棒产物��现(`node --test test/overlay-join.test.mjs` 须 **33/33**;探针须 **0 FAIL**);③ 若 `OBS-09` 已自愈 ⇒ **�记读数�⛔ �无事找事**;④ `git status --short` 现核未�交清�(⛔ �改动)。**硬门** = ⛔ � commit / � push(**R7**)|⛔ �改任何生产�置值(**D1**)|🔴 **⛔ �许开工 P2**(P2 命中 **R5** ⇒ 必须先由**用户��**��影�评估)|⛔ �改 nft·nginx�⛔ �新增暴露�|🔴 ⛔ �许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径|⛔ �改 bwrap �数|🔴 密钥本体 ⛔ ��网络 / �� relay。**验收** = ①② 的**原始读数**;若�了�原则 `OBS-09` 须由 SKIP 回到 PASS,且 `npm.cmd test` � **201/200/0/1**�`--scene all` � **12P/0S/0F**。**收尾** = �核结果写入该� §8 之�的新�节(⛔ �改 8.1–8.7 �节点�)+ 本入� §0/§2 + �数表 §11.4(有��补)+ 工作区日志 + 释�。⚠� **排下一棒的门�**:若无�留 ⇒ **明确写「线内���且 ⛔ �登记下一棒**(本线�续唯一大项 **P2 需用户��**);�则�登记**一个**下一棒(id �能�自工具返回值;间隔 = 收� +5~8 分钟)。
> ✅ **(已执行收官 · 存档 · 2026-09-18 10:0x)原登记:**下一棒(第 1 棒 · 本线当�唯一挂�的棒)= 执行棒(P1:节点一键加入 + 分组准入产�化)**,automation **`cc29cfb9-ae13-42fc-8da6-8b1caef1c382`**(一次性 · **2026-09-18 09:22** = 本规划棒收� +~7 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = 1789694520000)。**开工��** = 工作区根 **`交接�/交接�_节点一键加入与分组准入_20260918.md`**(**§8 ��缀 `085e28b56a08aa1f01999bdb3e238911`**,⛔ 开工��字�核)。**范围(写死)** = **�� P1 的 S1–S4**(网注册表与节点清� / 准入凭� / join 编排 / 白��派生);⛔ **�碰 P2**(直连 + P2P)。**硬门** = ⛔ � commit · � push(**R7**)|⛔ �改生产值(**D1**)|⛔ **P1 零新增暴露�**�⛔ �改 nft·nginx(**R5 命门**)|🔴 ⛔ �许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径|⛔ �改 bwrap �数(47 = bubblewrap 0.4.0)|🔴 密钥本体 ⛔ ��网络 / relay|🔴 ⛔ �许改 `server.ts` 的 DIAL/白��**语义**(�读�)。**验收** = `J1`–`J6` 先红�绿 + 零回归三件套(**基线 23 PASS / 0 SKIP / 0 FAIL**,三者都带 `--table`)。**收�** = 回填该� §8 + 推进本入� §0/§2 + �数表(**现算�步 §10 指纹**)+ 工作区日志 + 过门��登记下一棒 + 释�。⚠� **�一时刻�挂这一个棒**(用户 2026-09-18 00:3x 明令「最好��建立多个接续任务,一个会�结�时�排下一个�)。
> 🗃 **(已被上行解� · 存档)原判定:线内��(2026-09-18 07:5x · � ㉛ 执行棒收官�判定)= ⛔ 本棒未登记下一棒**。�由(��):**① 在册红项 = 0**(探针 **23 PASS / 0 SKIP / 0 FAIL**,rc=0)**② 用户��的定�「� A → ㉙ → � B�三棒全部收官**(05:3x / 06:1x / 07:2x)**③ 本棒六项主题全部完�**(§10 的 1/2/3/6 项 + �径定稿 + `sign-group-key` 固化)**④ §8.13 三�如实留档全部结清**(① �径定稿� §11.5;② `sign-group-key` 已� 47 两处正�路径;③ 轮�代价已�化)**⑤ 唯一剩余项 = §10-5(Ed25519→X25519 派生预研)**,其**触��件 = "规模上��自动分�组密钥"(§9 回头�件 7)** ⇒ ⛔ **�是当�执行项**。⇒ **无线内�自主推进项�无待��项** ⇒ **�登记**;本线**待真实信�**��(**§9 八�回头�件任一触�** � 用户新需求)。⚠� **下一棒(若�)的现���** = `交接�/交接�_组密钥加密_20260918.md`(`§8 ��缀 149596460288ca1a5b7abddc490f7909`)。
> ✅ **(已执行收官 · 2026-09-18 07:33–07:5x;结果�本文件 §0 最新行 + `交接�/交接�_组密钥加密_20260918.md` §8.14 全节)** 原登记:**下一棒(第 1 棒 · 本线当�唯一挂�的棒)= � ㉛ 执行棒(组密钥加密 · 补� §10 未验�项 + �径定稿)**,automation **`682e8bb0-fb05-41ba-ad00-e5e7fde4647e`**(一次性 · **2026-09-18 07:33** = � B 执行棒收�(07:2x)+~7 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = 1789687980000)。**开工��** = 工作区根 **`交接�/交接�_组密钥加密_20260918.md` 的 §10(未验�项)+ §8.13(如实留档三�)**(本棒**��立新�**)。**主题(写死,⛔ 别上抛 —— 全是"实测/固化"性质的技术项)**:**① 加密性能开销**(�一�机��一份 10.8 MB 首�包,测 **N ≥ 5** 次的"切� + 加密 + put + get + 解密"总墙钟 vs 纯明文对照;记 **p50 / p95**,⛔ �报�次)**② 轮�代价�化**(造 4 组 × 1 份包,轮����跑一次 `E1` �径 ⇒ 记回�字节;预期"轮��首轮 ≈ 1 份 × 组数"�之�回�到 1×)**③ 低熵明文的定性结论**(收敛加密对低熵有已知确认攻击�;�径 = ��定性,⛔ �写"很安全")**④ `CONTENT_EPOCH_GRACE_MS` 三档**混存夹具(�/中/大)⇒ 记"旧密文�解比例�时间"**⑤ �文�径定稿**(`OBS-23` 对"缺���用"� **SKIP** 还是 **FAIL** —— 把 §4/S6 与 §5 统一;本棒倾� **SKIP + 留痕**�"先红"腿写清为**��腿**)**⑥ 组密钥签�固化**(把 `sign-group-key` �� 47 上的**正��命令**,⛔ ��临时投放脚本 —— � §8.13-②)。**硬门** = ⛔ � commit / � push(**R7**)|⛔ **�改任何生产值**(**D1**)|⛔ �新增公网监���⛔ �改 nft·nginx(**R5**)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**|⛔ �改 bwrap �数(47 = bubblewrap **0.4.0**)|🔴 密钥本体 ⛔ ��网络�⛔ �� relay|🔴 §10-5(Ed25519→X25519 派生,为"自动分�"预研)**��纯本地实验�⛔ �进代�**。**验收** = 三项�化**给原始读数**(测�出 ⇒ 如实写"未验�",⛔ **�许编数**)+ **零回归三件套**(`npm test` 现核基线 � `--scene all --table` 现核 � 探针 `--table`;⚠� 三者都必须带 `--table "docs/覆盖网络/�数表_覆盖网络_20260917.md"`;**本棒开工基线 = 23 PASS / 0 SKIP / 0 FAIL**)。**收�** = 回报写进本文件 §0 最新行 + 推进本入� §2 + �数表对应�节(�**现算并�步 §10 指纹**)+ 写工作区日志 + 过登记门��登记下一棒(id �能�自工具返回值)+ 释�。⚠� **定��示**:「� A → ㉙ → � B�这�**用户��的定�已全部收官**(� A ✅ 05:3x|㉙ ✅ 06:1x|� B ✅ 07:2x)⇒ 本棒起进入**收尾补测阶段**,⛔ 且**�一时刻�挂这一个棒**(用户 2026-09-18 00:3x 明令「最好��建立多个接续任务,一个会�结�时�排下一个�)。
> ✅ **(已执行收官 · 2026-09-18 07:2x;结果� §0 最新行 + `交接�/交接�_组密钥加密_20260918.md` §8 全节)** 原登记:**下一棒(第 1 棒 · 本线当�唯一挂�的棒)= � B 执行棒(组密钥加密)**,automation **`65d2fc24-770e-4f33-93a3-db6e739aded7`**(一次性 · **2026-09-18 06:22** = � ㉙ 执行棒收�(06:1x)+~6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = 1789683720000)。**开工��** = 工作区根 **`交接�/交接�_组密钥加密_20260918.md`**(**§8 ��缀 `149596460288ca1a5b7abddc490f7909`**;⚠� **以 §8 ��缀为准**,⛔ 别拿"全文 md5 与�里记的快照��"判�被改过 —— �里记的是**��那一刻**的快照)。**目标(写死,⛔ 别�上抛)** = **按"组密钥"加密**(�一组共享一把对称密钥 ⇒ **组内密文一致 ⇒ 按哈希共享���立** + **中继看�到明文** = 性能与安全**兼得**;代价 = 组内�员互信 + 密钥分�/轮�机制)。🔴 **�内最关键的�� = � id 用「明文哈希�还是「密钥相关哈希�**。⚠� **规模 = 10 个在册文件 + 密钥�维 + 6 �未验�项**(�性能与轮�代价)⇒ 本线最大一件。**硬门** = ⛔ � commit / � push(**R7**)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**|⛔ �改 bwrap �数(47 = bubblewrap **0.4.0**,`--perms` 属 0.5+ ⇒ 沙箱起�� = 所有实例全挂)|⛔ ���已收官� ①–㉚。**收�** = 回填该� §8 + 推进本入� §0/§2 + 写工作区日志 + 登记下一棒 + 释�。
> ✅ **上一轮已完�(2026-09-18 05:45–06:1x,执行棒)**:**� ㉙(106 候选链建�冗余)已收官** —— ✅ **`OBS-21` 由红转绿**(`dshs@47 count=3` � `dshs-worker@106 count=3`,**两�路径都** ≥ `CAND_MIN`=2;⛔ **未放宽判�凑绿**)。**�了什么** = 106 `/etc/dshs-worker.env` **�追加一行** `DSHS_OVERLAY_DIR_PUBKEYS=fd81a6dd7ee22cc121239253d9bee33585638823f5425b537da930e5054f3349`(= 47 �一把)+ `systemctl restart dshs-worker`。**先���动手(两�路径�自��)**:(a) 公网 `https://alotbuy.com/dshs-overlay/bootstrap` 从 106 `curl` = **200 / CF `172.67.194.206` / 443 字节**,且失败� `no-trusted-keys` **�于 `fetch → json → parseDirectory` 之�** ⇒ "�到了��是验�过";(b) 直连 `47.77.182.89:3080` **timeout(000)**(已知边界,⚠� **�目录�程�用它**)⇒ �构�阻塞。**零回归三件套** = `npm.cmd test` **201/200/0/1** | `--scene all --table` **12 PASS / 0 SKIP / 0 FAIL** | 探针 **22 PASS / 0 SKIP / 0 FAIL(rc=0)**。**回滚点** = 106 `/opt/dsh/backups/seq29-20260918-054852/dshs-worker.env.orig`(md5 `6b509ce447d9519241aa73243e07a69f`)。**边界自�** = ⛔ 未改任何生产值(106 上 `RELAY_FAILOVER_|HB_SEC|PRESENCE_|DSHS_REHYDRATE_` 计数 **0**)· ⛔ 未新增监��(`OBS-11` 实际 77 / 多出 0)· ⛔ 未动 nft·nginx · 🔴 `COOLDOWN_MS=0` 两机计数 **0** · ⛔ 未 commit / 未 push(HEAD **`04776af`**,`git status` **33** 处与开工时�数相�)。**�数表指纹 `3b295a8c43aafc4a62c6f1a59ea0b43a` 未�**(本棒改动�在 §11 补记区 ⇒ 按�径**在 §10 之外**)。⚠� **两�如实留档**:**① `DSHS_OVERLAY_DIR_CACHE` 106 �为 0**(47 **亦为 0 且 47 侧一直绿** ⇒ 本棒**与"已验�有效"的 47 �置�项对�**;⛔ 按"��被明确�求的事"未扩范围 —— 缺它 ⇒ 目录��达时没有"过期缓存"档�候选退回 1 �,属**冗余韧性**,需�独立项);**② 🔴 孤儿端点�目�会自愈**(`relay-tunnel.ts#cancel()` �撤**当�进程** `forwarded` 集里的端� ⇒ 上一进程�留�目无人撤;实测�� 106 worker � `21000→41831` � `online=false` **约 10 min 未自愈**,�**�续一次"�新登记�一端��"**�覆盖回绿)⇒ **��� `OBS-08`/`OBS-09` 必红**,⛔ **�是"跑一会儿就好"**(�㉚ 留的"自愈时延未测"至此有了答案)。**全部�� = 本文件 §0 最新行 + �数表 §11.2**(本棒无独立交接�)。
> 🗃 **(存档 · 已执行收官)原登记:下一棒(第 1 棒 · 本线当�唯一挂�的棒)= � ㉙(执行棒 · 106 候选链建�冗余)**,automation **`22170b0b-a606-461c-82a7-2f72fea68082`**(一次性 · **2026-09-18 05:45** = � ㉚ 执行棒收� +~7 min ⇒ �在用户明令的 **5~8 分钟**窗�内)。**任务�点(写死,⛔ 别�上抛)**:**主题** = 把 **106 侧 relay 候选链**�� ≥ `CAND_MIN` �**独立路径**,让探针 **`OBS-21` 真绿**(⛔ **�许放宽 `CAND_MIN` 凑绿**)。**��** = � ㉗ 的真机读数(`dshs@47 count=3 ✓` � `dshs-worker@106 count=1 �`)+ 用户 2026-09-17 23:1x 的�径「�连接候选数 ≥ 2�。**根因(已��,⛔ 别��)** = 106 的 `/etc/dshs-worker.env` **无** `DSHS_OVERLAY_DIR_PUBKEYS`(`grep -c` = 0)�**无** `DSHS_OVERLAY_DIR_CACHE`(0)⇒ 目录�被 `no-trusted-keys` 拒 ⇒ 候选链�退化为内置���点(106 自身日志近 3h **166 行**��)。🔴 **先���动手(⛔ 顺���颠倒)**:① 47 上该键的**实际值与��**(公开密钥�⛔ �凭�)② 106 �目录两�路径的�达性(**已知边界**:106 → 47:3080 = `TCP_BLOCKED`,目录由 47 的 `127.0.0.1:3080` 签�)⇒ ⛔ **�许�设"补钥�绿"**。**改动首选** = 把 47 已验�有效的公钥�步到 106 worker env;**改 env / ���元自决**(R8)。🔴 **若��显示"必须改网络拓扑 / 新增监�� / 改 nft·nginx / 放开�蔽" ⇒ 立��手报告**(命中 **R5**)。**验收** = `OBS-21` **两�路径都** `count ≥ 2` 且 rc=0 + **零回归三件套**(`npm test` 基线 **201/200/0/1** � `--scene all --table` 基线 **12P/0S/0F** � 探针基线 **21P/0S/1F**,⚠� 三者都必须带 `--table "docs/覆盖网络/�数表_覆盖网络_20260917.md"`;本棒目标 = 探针 **22P/0S/0F**)。**收�五件** = 回报写进本文件 §0 最新行(本棒无独立交接�)+ 推进本入� §0/§2 + 写工作区日志 + **登记下一棒 = � B 执行棒(组密钥加密)**(�� = `交接�/交接�_组密钥加密_20260918.md`,§8 ��缀 `149596460288ca1a5b7abddc490f7909`;id �能�自工具返回值)+ 释�。
> ✅ **上一轮已完�(2026-09-18 00:50–05:3x,执行棒)**:**� ㉚(� A:退出路径��实例)已收官并�地生产** —— �� = 工作区根 `交接�/交接�_退出路径��实例_20260918.md`(**§8 ��缀 `c9aeac82381f569fc8b9effad0fefa99`**,⛔ **回填 §8 + 新增 §8.12 ���字��**;全文 md5 `681b84d503a1578178707a9ba6d87351`�584 行,⚠� **现算**)。**�了什么** = 三处 `teardown()` 最�改动(① `LocalSpawner` **真改** ② `RemoteSpawner` ��已是 no-op��补守� ③ `LeasedSpawner` 拆开"�心跳"与"�实例")+ 新�测 **9 用例**(⛔ 刻��进 `npm test`)+ 探针 `OBS-22`(��守� + 认领�两判�)+ �数表 §3.8 六键 / §6 一行。**验收** = 先红�绿(**两�判别腿并列**:P1 对旧生产 `1 → 0`;`OBS-22` 对旧产物 FAIL 并点�)+ **P1/P2 �绿** + 零回归三件套 **201/200/0/1** | **12P/0S/0F** | **21P/0S/1F**(1F = `OBS-21` 线内在册缺�)。**部署** = 4 处 md5 全�;回滚点 `/opt/dsh/backups/seq28-20260918-005909/`;�� 47 `dshs`+`dshs-worker`�106 `dshs-worker`。**全部�� = 该� §8.1–§8.12**。⛔ **����� ㉚**。
> 🔴 **� ㉚ 三�必须记�的(⛔ �续任何一棒都别踩)**:**① 47 的 `dshs` 走 `LeasedSpawner(new RemoteSpawner(…))`(`DSHS_DEPLOY_MODE=cluster`)⇒ 它根本�构造 `LocalSpawner`** ⇒ 拿「47 `restart dshs`�当判别腿 = **�绿�判**(`[rehydrate]` 全�历�计数 **0**);**判别腿必须在两� `dshs-worker`**。**② `/opt/dsh-relay/lib/supervisor/` 两机�有一份副本** ⇒ 铺 relay 类产物时**四处都�铺**(本棒已一并铺平,旧值存回滚点;⚠� 回滚补正�该� §8.12)。**③ � B 的收益边界** = 「实例�被� + 用户**访问时**自然替��,⛔ **�是**「����直接进�(`launchToken` ���� ⇒ `enter` ��能 503,**刻��留**的已知边界);⚠� 附带:替�窗�内会短暂留 **1 � stale 端点�目**(`OBS-08`/`OBS-11` 该窗�内会红,**自愈时延未测**)。
> 🛑 **(已被上方�代 · 仅存档)原本轮动作�径 = � ㉚(执行棒 · � A:退出路径��实例)**,automation **`11982d2f-6608-456a-b500-a6dfcc6bbb0f`**(一次性 · **2026-09-18 00:50** = � ㉘ 规划棒收� +6 min ⇒ �在用户明令的 **5~8 分钟**窗�内;`nextRunAt` = **1789663800000**)。**开工�� = 工作区根 `交接�/交接�_退出路径��实例_20260918.md`**(**§8 ��缀 `c9aeac82381f569fc8b9effad0fefa99`**;⚠� **以 §8 ��缀为准**,⛔ 别拿"全文 md5 与�里记的快照��"判�被改过 —— �里记的是**��那一刻**的快照,本棒收官改过 §0/§2 与 §11 ⇒ 全文 md5 必然已�,���数 = `md5sum <本�>` 现算)。**�目标** = 让**退出进程���实例**(三处 `teardown()`),回收责任全交「�动认领 + TCP 探活判孤儿�;**主判� = �� Manager/worker �两机 `dsh-*.scope` 计数守�且两侧都 ≥ 1 + 认领报告 `adopted + stopped === scanned` ∧ `scanned > 0**`。🔴 **棒内已写死两�最容易踩空的**:① **两机当�活跃实例 = 0/0** ⇒ **S1 造真实形�夹具���**(⛔ �许拿 `0 == 0` 当绿);② **P1(判��立)与 P2(回收链建�)必须分开报** —— `scanned == 0` 而计数守� ⇒ P1 绿�P2 红,**必须点�**,⛔ �得写"全绿"。
> 🗂 **本线已定�但⛔ 未登记的棒(�一时刻�挂一个 —— 用户 2026-09-18 00:3x 明令「最好��建立多个接续任务,一个会�结�时�排下一个�)**:**� B 执行棒(组密钥加密,�� = `交接�/交接�_组密钥加密_20260918.md`,§8 ��缀 `149596460288ca1a5b7abddc490f7909`)** —— 由 � ㉙ 收官时登记。**定��由(写死,⛔ �许�上抛)**:**� A → ㉙ → � B** —— **� A ✅ 已于 2026-09-18 05:3x 收官**(用户 23:3x 行使纠错的直接产物「选 B�,且它结清了 � ㉕ �留的待��阻塞项 —— 把"待��"从线上彻底抹掉);**㉙ = 当�唯一在途**,因其**�本最��能让探针从红转绿** —— 长期挂一�红项会**�低判���度**(新红项会被"�正是红的"淹没),先��"全绿 = 无新问题";**� B 放最�**因它是最大一件(**10 个在册文件 + 密钥�维 + 6 �未验�项**,�性能与轮�代价),等生命周期语义与观测�都收敛干净��上,符�"一次�动一个��"。(三件**文件集零交集** ⇒ 串行�浪费;⚠� � A ✅ 与 ㉙ **都��� 106 `dshs-worker`** ⇒ 串行�而更干净,��互相干扰。)
> ⚠� **(�径更正留档,⛔ 以本行为准)下�这�"第 3 棒 = � ㉙ · automation `cca5c43c…` · 2026-09-18 03:00"已作废**:`cca5c43c-80e6-4bfb-8638-25185608cbbe` **已被删除**(本棒用 `automation_update list` �核:**清�中确无该 id**),删除�� = 用户 00:3x 的"�一时刻�挂一个接续棒"。⇒ ㉙ **已于 2026-09-18 05:4x 由� ㉚ 执行棒登记**(automation **`22170b0b-a606-461c-82a7-2f72fea68082`** · 一次性 · **2026-09-18 05:45**;�� = 用户 00:3x「�一时刻�挂一个接续棒�⇒ **本棒�挂这一个**)。下�两�仅作**任务�点存档**。
> ➡� **(存档 · 其"已挂 automation"的部分已作废)下一棒(第 3 棒)= � ㉙(执行棒 · 106 候选链建�冗余)**,automation **`cca5c43c-80e6-4bfb-8638-25185608cbbe`**(一次性 · **2026-09-18 03:00**)。**�� = � ㉗ 的真机读数**(`OBS-21`:`dshs@47 count=3 ✓` � `dshs-worker@106 count=1 �`)+ **用户在 2026-09-17 23:1x 的�径「�连接候选数 ≥ 2�**。**�目标** = 把 106 侧候选数�� ≥ `CAND_MIN`,让 `OBS-21` 真绿(⛔ **�许放宽 `CAND_MIN` 凑绿**)。**棒内已写死**:🔴 **先���动手** —— ① 47 上 `DSHS_OVERLAY_DIR_PUBKEYS` 的**实际值与��**;② 106 �目录两�路径的�达性(**已知边界**:106 → 47:3080 = `TCP_BLOCKED`,目录由 47 的 `127.0.0.1:3080` 签�)⇒ **⛔ �许�设"补钥�绿"**;③ 若��显示"必须改网络拓扑 / 新增监�� / 改 nft·nginx" ⇒ **�手报告**(命中 R5)。技术项(改 env / ���元)**自决**(R8:开�环境�务器,动手�一��说明��)。⚠� **� ㉘ 收官时 ⛔ ���注册 ㉙**(该�已被本棒�用 ⇒ ㉘ 若还有下一棒顺延为 **� ㉚**)。
> ✅ **上一轮已完�(2026-09-18 00:3x,执行棒)**:**� ㉗(E3 候选数�查)已收官** —— �� = **用户 2026-09-17 23:1x ��「2�B�**(授�改 `src/worker/relay-tunnel.ts`�`src/web/server.ts` 以暴露候选数;�㉖ 因超 §3.1 在册集而按 §9-5 �下的那一步)。**�了什么** = 新增 `RelayCandidateObservation`(观测行固定 key ���读�零网络 I/O)+ `web/server.ts` C1 接入+ `resolveChain()` 收�两处调用|探针新增 `OBS-21`(**�判�**,� `--candidates-fixture-47` / `--candidates-fixture-106` 夹具)|�数表 §3.7 +5 键�§6 +`OBS-21`|`test/relay-failover.test.mjs` +**O1–O4**。**验收** = 夹具**先红�绿**四段(RED�GREEN�NOLINE�WRONGSCOPE,**原文级**,�"原文 225 字节 vs 154 字节"的�区分性��)+ **真机先红**(新探针对旧生产 ⇒ 三路径全"无观测行〔原文字节 0〕")+ **零回归三件套 `201/200/0/1`|`12P/0S/0F`|`19P/1S/1F`**。**部署** = 5 处副本 md5 全�(`b1bc3e04…` � `cf844a2e…`),�� 47 `dshs`+`dshs-worker`�106 `dshs-worker`。🔴 **本棒最大产出 = 把「判��立�与「冗余建��分开,并当场照出 106 侧�为 1 �候选**(根因 = `/etc/dshs-worker.env` 缺 `DSHS_OVERLAY_DIR_PUBKEYS`/`DSHS_OVERLAY_DIR_CACHE` ⇒ 目录永远被 `no-trusted-keys` 拒 ⇒ �回�内置���点;106 自身日志近 3h **166 行**��)⇒ 已点�独立�续项 = **� ㉙**。**全部�� = 本文件 §0 最新行**(本棒无独立交接� —— ��是用户直接授�的�径,故报告写在入� §0)。⛔ **����� ㉗**。
> 🔴 **本棒三�必须记�的**:① **47 的 `nginx.service` / `bt-server` inactive 是正常�**(�塔托管,真正在跑的是 `bt.service`;WS �手 101)⇒ ⛔ 别拿它判 relay 死活;② `OBS-21` 的 `hosts` = **主机�个数**,⛔ **�是独立物�路径数**(`alotbuy.com` 与 `relay-direct.alotbuy.com` 摘������ 47);③ 🔴 **`CAND_OBS_UNITS_47` = `dshs=manager` 一项**(47 的 `dshs-worker` **�是** relay 客户端 —— `grep -c DSHS_RENDEZVOUS_URL /etc/dshs-worker.env` = **0** ⇒ 列进去 = **�红**)。
>
> 🎯 **2026-09-17 23:3x �径最终�定(用户两��完�更正:先「选 B���「C 登记为架构目标�)**:**③ 加密 = C 组密钥加密**(未�)|**� ㉕ 的 E1 缺� ⇒ 执行按 `B`(三处 `teardown()` 一起改:`LocalSpawner` + `RemoteSpawner` + `LeasedSpawner` ⇒ 退出进程���实例;🔴 用户此�**�时授�了扩范围** —— �两个文件**�在** `交接�/交接�_实例�步拉起_20260917.md §3.1` 在册集)**|**`C`(实例归属�到 systemd scope �一真相�)⇒ 登记为架构目标,⛔ 本阶段�进执行**。⚠� **�径演�留档**:用户 23:2x 原答「①选B |②选C�两项指��一件事而答案相�;我 23:2x 按 ②=C �盘并给出纠错窗� ⇒ **用户 23:3x 行使纠错 =「选 B�+「C 登记为架构目标�** ⇒ �**回到"B 先� + C 登记为架构目标"**(与我 23:1x 的建议一致)。�� = `交接�/交接�_实例�步拉起_20260917.md` **§8.3**(A/B/C �项优缺点原文;**我的倾� = B**�A �达�目标�C 无增�价值);⛔ **A 与 ③ 的"按接收者 E2E"�已被排除,�得�上抛**。
> ➡� **下一棒(第 2 棒)= � ㉘(规划棒 · E1 缺�按 B 打通 + 组密钥加密)**,automation **`b60d5358-a443-4e29-87a3-6114ea0a7300`**(一次性 · ⚠� **时刻已更正为 2026-09-18 00:37**〔原 01:30 已按用户 2026-09-18 00:3x 明令「**首个接续任务 5-8分钟**�+「**一个会�结�时�排下一个**�压缩;🔴 **本线当��挂这一个** —— � ㉙ �预登记,� §2 顶部 �� 行〕;★ 该棒 prompt 已按最终�径 **`B`** 更新,若读到旧文本一律以**本行为准**)。产物 = **两份交接�**:**� A = 候选 `B` 的执行规划�**(**三处 `teardown()` 一起改**:`LocalSpawner.teardown()` + `RemoteSpawner.teardown()` + `LeasedSpawner.teardown()` ⇒ 退出进程**��**�实例,回收责任全交「�动认领 + TCP 探活判孤儿�;�� = `交接�/交接�_实例�步拉起_20260917.md` **§8.3 候选 B**。🔴 **必须写清三件事**:① �两个文件**超该� §3.1 在册集**�**本棒已获用户授�扩范围**(�把授���与新增文件清��在�里);② **架构目标 = `C`(systemd scope �一真相�)�独登记一段**(说明"为什么现在���什么信�出现�回头�")+ **回退路径**(回退 = ��三处 `teardown` 原语义,秒级);③ 影�� = **所有实例的生命周期语义**,须写"进程长期���时实例由 idle-reap / 用户访问替��收"这一��)|**� B = 组密钥加密**(�组共享一把对称密钥 ⇒ **组内密文一致 ⇒ 按哈希共享���立** + **中继看�到明文** = 性能与安全**兼得**;🔴 �内最关键的�� = **� id 用明文哈希还是密钥相关哈希**)。⚠� 棒内已写死:⛔ **�出规划�零代�改动�零�务器改动**。
> ⚠� **执行次�**:**� ㉗(23:35)先跑** → � ㉘(01:30)⇒ 若 ㉘ **抢�到�** ⇒ **�报告并�**(R9 属正常信�,⛔ �硬闯)。
>
> ➡� **下一棒(第 1 棒)= � ㉗(执行棒 · **E3 候选数�查**)**,automation **`d36e7068-3a9d-437d-ac39-33a57a086187`**(一次性 · **2026-09-17 23:35** = 收� +~10 min)。★ **�� = 用户 2026-09-17 23:1x ��「2�B�** ⇒ **�许改 `src/worker/relay-tunnel.ts`�`src/web/server.ts`** 以暴露候选数(� ㉖ 因超 §3.1 在册集而按 §9-5 �下的那一步,现已获授�)。⚠� 棒内已写死:**先�� 47�106 两侧实际候选数**,并**分清"判��立"与"冗余建�"**(� ㉖ 读数 = 47 侧实际候选 **1 �**)⇒ ⛔ �许放宽判�凑绿,冗余未建��**点�**为独立�续项。
> ✅ **原「两项待���⇒ 2026-09-17 23:3x 已全部�定**(结论�本区顶部 🎯 行):**② � ㉕ E1 缺� ⇒ 最终�径 = 执行 `B`(三处 `teardown()` �改)+ `C` 登记为架构目标** ⇒ B 化作� ㉘ 的**� A**�C 在� A 内**�列一段登记+回退路径**|**③ 加密档� ⇒ 用户选 `C 组密钥加密`** ⇒ 化作� ㉘ 的**� B**。⛔ **本区两项自此�得�当"待��"上抛**(⚠� 用户 23:2x 曾答「②选 C�,23:3x 以「选 B�+「C 登记为架构目标�更正 ⇒ **以更正�为准**)。📌 **原登记(存档 · 供对照)**:**② � ㉕ E1 缺�的 B�C 定�** —— 我的判定 = **C 是长期方�**(实例归属 systemd scope ⇒ �一真相�;Manager ��天然�影�实例),**但当�规模下 C 收益���改动�最大** ⇒ 建议 **B 先� + C 登记为架构目标**;**③ 是�上"组密钥"加密** —— 上按接收者 E2E **牺牲性能**(�级共享失效)�**安全增强**;�上则**牺牲对中继的机密性**;**按组密钥**�两者兼得(代价 = 组内互信 + 密钥轮�)。⚠� 用户 ① 答「选B�与 ② 答「选 C�指��一件事而答案�� ⇒ 已在顶部说明处��径(**执行按 ②=C**�① �构�执行项�已给纠错窗�)。
>
> ✅ **上一轮已完�(2026-09-17 23:2x,执行棒)**:**� ㉖(骨干稳定选路与加密)已收官** —— �� = 工作区根 `交接�/交接�_骨干稳定选路与加密_20260917.md`(**§8 ��缀 `dbcbe633aa1aef92f4c35c77fad3ec11` 开工��核一致**;回填 §8.1 �全文 md5 = **`f49a34275fa6628107e184c7f3a9a52e`**,250 行)。**�了什么** = 新增 `src/net/relay/jitter.ts` + 改 `directory.ts`(候选� → **jitter 主�**)�`switcher.ts`(新增「jitter 劣化�切�,🔴 冷�语义**一行未动**)�`server.ts`(**利用率软门** + **`jitter` 观测�**)�`scripts/overlay-jitter.cjs`(点测 → **�续采样 `--watch`**,�用编译产物 ⇒ 全平�**唯一一份** jitter 算法)�`scripts/overlay-probe.cjs`(+ `OBS-19`/`OBS-20`)��数表(+7 键)。**验收** = `E1` 主判�夹具**先红�绿**(3 红 → 21/21 绿)+ 真机��径读数 + **零回归三件套 `197/196/0/1`|`12P/0S/0F`|`19P/0F/1S`**。**全部�� = 该� §8.1**(� ④ 部署对账 8 文件 md5�⑤ 边界自��⑥ 指纹�⑦ 四�如实留档)。⛔ **����� ㉖**。
> 🔴 **本棒三�必须记�的**:① **探针编�顺延为 `OBS-19`/`OBS-20`**(prompt 写的 17/18 已被�㉔/㉕ �用);② ⛔ **`JITTER_SWITCH_MS` 未新造** —— �用�⑥ 已有键 `JITTER_LIMIT_MS`(�一事实�两处写);③ ⚠� **`dshs` 侧 `server.js` 曾比 `dsh-relay` 侧��一个版本**(�㉔ �铺了 relay 侧)⇒ 本棒两边�铺**已消除**(�续铺 relay 类产物**务必两边都铺**)。
> 🛑 **(已被�代 · �本区顶部 🎯/➡� 两行 —— 三问已全部答�,㉗ 与 ㉘ �已登记)原「本线当�无自动接续(未登记下一棒)�**,触��件 = 对下列任一项��:**① � ㉕ 的 E1 缺�**(退出路径��实例:`LocalSpawner`+`RemoteSpawner`+`LeasedSpawner` 三处�改;候选 A/B/C,**倾� B**)|**② � ㉖ 的 E3 范围**(是��许改 `src/worker/relay-tunnel.ts`�`src/web/server.ts` 以暴露"候选数 ≥ 2"的�断言�)|**③ E2E 加密**(真��:加密 ⇒ �接收者密文�� ⇒ **与按哈希共享�冲�**,已登记待评估)。(退出路径��实例:`LocalSpawner`+`RemoteSpawner`+`LeasedSpawner` 三处�改;候选 A/B/C,**倾� B**)|**② � ㉖ 的 E3 范围**(是��许改 `src/worker/relay-tunnel.ts`�`src/web/server.ts` 以暴露"候选数 ≥ 2"的�断言�)|**③ E2E 加密**(真��:加密 ⇒ �接收者密文�� ⇒ **与按哈希共享�冲�**,已登记待评估)。
>
> ✅ **上一轮已完�(2026-09-17 08:32,执行棒)**:**� ③(一机一钥 + 信任根)已收官** —— 四层密钥模型(离线根 → 47 在线签�者 → �机节点密钥 → 会�)�地;relay `keys` 表改**逻辑� `<net>/<hostId>`** 索引 + **�员资格校验**;新增密钥仪� CLI `scripts/overlay-keyring.cjs` 与 `test/overlay-identity.test.mjs`(25 例);**�销演练 + 节点密钥轮� + 根密钥��演练(判�①②③全绿,794 ms)全部通过**;**relay 已开强制身份**(`identityRequired=true` / `identityOk=3`);`npm test` 130/129/0;对账 148/148 + 26/26 全�。**全部�� = `交接�/交接�_一机一钥与信任根_20260917.md` §8**(回填�指纹 `md5 204c0f69630e5117c227828f5fc01f2d`,427 行)。⚠� 一�**与� ③ 无关**的未过项:guest(w-106) 实例页 **502**(真因 = 平� `landModels → writeHomeFile` 用**本地路径**写远端实例 home;��现 `/opt/dshs/mksess*.cjs` �写 SQLite 旧库�**已失效**)⇒ 两�并入� ④ 的相邻缺陷清�。⛔ ����� ③。
>
> ✅ **上一轮已完�(2026-09-17 08:4x,规划棒)**:**� ④ 的 443/TCP 兜底交接�已出** —— `交接�/交接�_443兜底_20260917.md`(工作区根,225 行,**md5 `b9aa6bbc0a458481627f7aeb1f17ab54`**)。�点:端�� 443(零新增公网�)+ 47 上**独立 server � / 独立 server_name**(去 CF�去门户 conf 两个失败域)+ 入�列表走 **`DSHS_OVERLAY_BOOTSTRAP_SEEDS`**(⛔ �用会**压制引导链**的 `DSHS_RELAY_URL`)+ 地�覆盖走**独立�置项**(⛔ �塞 URL / �塞签�目录)+ 签�目录 `relays[]`/`bootstrap[]` 自动广播(改一次 seeds 全网刷新)+ �级必须� grep。**L3(跨机真容�)已明确�置**(命中 R5,属� ⑤ ��评估)。⛔ ����规划。
>
> ✅ **上一轮已完�(2026-09-17 09:1x,执行棒)**:**� ④(443/TCP 兜底)已收官** —— 47 上新增**独立 443 server �** `relay-direct.conf`(`server_name relay-direct.alotbuy.com`,**�**放行 `/dshs-relay` 与 `/dshs-overlay/bootstrap`�其余一律 404)+ **seeds 广播**(`relays[]`/`bootstrap[]` ��兜底项�**主入�首�**)+ 客户端**地�覆盖**(定� DNS 改写 ⇒ 直连指定 IP�**SNI �为域�**��书照验)+ **「��优先�**(补掉"兜底项在��路径上**永远选�中**"这个真缺陷 —— 它使 §1 目标与 D6 �时�空)。**D1–D8 ��验收**(D2 **字�**判�因 `*.alotbuy.com` 是 **CF 泛解�**而��满足 ⇒ 按**实质**判�「�� CF�的两�独立��判绿;**§4.3 的 A/B 两个候选都�需� ⇒ 本�零�赖关闭**)。**全部�� = `交接�/交接�_443兜底_20260917.md` §8**(该� **§8.9** 有��现指纹�径)。
> ⚠� **� ④ 带回的四��留**(下一�读者必须看):① D2 解�层 —— �行期"去 CF"由 `DSHS_OVERLAY_ADDR_OVERRIDES` ��,"解�层也�� CF"需�云记录(未�);② 🔴 **106 的 agent ���引导链** —— `DSHS_RENDEZVOUS_URL` 被 `worker/agent.ts` **直接当 relay URL 用**,⚠� **S2-附 的字�执行会造�生产回归(`tunnel===undefined`)⇒ 已判定�执行**;③ 引导链缓存两支没有"答出者"信� ⇒ CF 打挂�切�有 **≤300 s 收敛期**;④ **45% 容��径未填数值**(留给� ⑤ �数表)。
> ✅ **上一轮已完�(2026-09-17 09:1x,规划棒)**:**� ⑤ 的交接�已出** —— `交接�/交接�_�数表与观测_20260917.md`(工作区根,**250 行**,md5 `40f08167990eac54ec8a026b9c57f807`)。�点:**三件一体**(�数表 / 观测最�集 / ��评估,= 清� §五 第 5 项原文);**唯一代�改动 = `src/net/relay/server.ts` 补 `dial/dialDenied/dialFailed` 判别器计数**(今天 `DIAL` **�有日志行**�脚本无法断言 —— 判别器教训的固化);45% �径**按"��中继 `--max-hosts`"填值**(⛔ �填"全网 45%",实例�数填全网数字��执行),设值走 47 **新建 drop-in** `capacity.conf` + 硬约� **`max > used×4`**(防自�,�满足就�设值);观测��**一�命令出 PASS/FAIL** 的 `scripts/overlay-probe.cjs`(阈值⛔�许是脚本魔数);**L3 跨机真容��评估��实施,归� ⑥**(�⑥本就�起 3–5 � ⇒ �批明显更�,现在��多花一�机器/一个公网 IP);**§4.3 待�� = 空**。⛔ ����规划。
>
> ⛔ ����� ② / ③ / ④。
>
> ✅ **上一轮已完�(2026-09-17 09:5x,规划棒)**:**� ⑥ 的交接�已出** —— `交接�/交接�_最�形�真机批次_20260917.md`(工作区根,**321 行**;核对�径 `sed '/^## §10 指纹/,$d' 交接�/交接�_最�形�真机批次_20260917.md | md5sum` = `8bea0ac79697b80790a273b54f1db37c`)。�点:**S0–S9 + E1–E12 + 回滚 + §8 回报格�**;五项待测/待校准(打洞率 / �玩家带宽 / 跨云稳��� / 中继 jitter / `MEM_PER_HOST_MB`)**�项写了"怎么测 / 样本多大 / 判� / 写回�数表哪一行"**;**�批�地 L3 第二中继机(106 �格)**;**回头�件写死**(§5 S7 七件必�)。🔴 **本�新增一�关键事实**:`src/` 全仓**零 UDP / NAT 穿�代�**(`grep -iE "dgram|createSocket|stun|punch|udp" src/` 命中**全是 `signature`/`native` �阳性**)⇒ ⇒ **打洞项的�径定为"测该网络能�能打洞",⛔ 本���打洞实现**(`§4.1-1`);�一�:`RELAY_RTT_W106 = 336 ms` 是**心跳往返**�**�一定是网络 RTT** ⇒ 本��求� **ICMP / TCP / relay 三方对比**(`S3(b)`;若它其实是�径问题,所有"跨云��玩"的结论都��判)。**§4.3 唯一待你��项 = 第 4/5 �真机的��**(A 先用现有 3 � / B 你自备设备跑一次性探测 / C 新开云主机;**倾� A+B,⛔ 执行棒�必等**)。⛔ ����规划。
>
> ✅ **上一轮已完�(2026-09-17 11:0x,执行棒)**:**� ⑥(3–5 �最�形�)执行部分已收官** —— 五项待测/待校准**全部��实测**(`HOLE_PUNCH_RATE_LOCAL` 分层实测 2/2 �打洞�`PER_PLAYER_BW_LOCAL` 9.8/3.9 KB/s�`JITTER_LINK_MEASURED` `p95(|ΔRTT|)`=**3 ms 达标**�`WAN_STEADY_THROUGHPUT` 352/12213 KB/s�`MEM_PER_HOST_MB` **2 → 0.06**,R²=0.9424)+ **�数表 §7 待测 4 → 0**;🔴 **S7 回头�件已触�并执行**:`RELAY_MAX_HOSTS` **225 → 7515** 并**�下�** 47/106 两�的 `capacity.conf`(drop-in �写 ExecStart,绕开"CLI 优先于 env"�默忽略�);**S8 L3 第二中继机已�地**(106 `dshs-relay` �绑 `127.0.0.1:20080`,�用既有 443 ⇒ **零新增公网�**,WS �手 **101**,seeds 末�广播);**收� 12/12 PASS**�监�� **79 = 基线**�`npm test` 137 pass。**全部�� = `交接�/交接�_最�形�真机批次_20260917.md` §8**(1–8.9 全节;§8.9 ��现指纹:�数表 `db1317c2f7aaef7b47785c1f4fc9de03`�本��缀 `1edde731eba5034c5f6f3a43864e5a8e`)。⚠� **唯一未过项 = E9 ��「无失败切��**(客户端把 relay url 首次解��**钉死**;worker ��引导链;Manager �在"目录地��了"时��)⇒ **� §8.8-1,已判为"新功能",本轮�报告�动手**。
>
> ✅ **上一轮已完�(2026-09-17 11:1x,规划棒)**:**� ⑦ 的交接�已出** —— `交接�/交接�_中继失败切�_20260917.md`(工作区根,**280 行**;**§8 �缀指纹 `419abf308c00b7668e8898aaa91ba9e8`**,�径 = `sed '/^## §8 回报格�/,$d' … | md5sum`)。�点:**一份切�实现(新增 `src/net/relay/switcher.ts`)+ 三个装�点�用**(C1 Manager 拨�通� `web/server.ts#refreshOverlay` / C2 worker 实例� / C3 `relay --client`);🔴 **规划棒新查出的��级细化**:根因�止"���件是目录地��了",而是 `directory.ts:348 pickFromDoc` **�到第一个候选就 return** ⇒ **候选集退化��点**(�解��返回�一�;S1 就改这里);**阈值已定** = `attempts ≥ 3` **∨** `backoff ≥ 15 s`(D3)+ **排除 + 冷� 300 s**(D5)+ **无候选时�切����默回退默认机**(D6);**S7 三幕真机演练**(� 106 / � 47 / 两�全� —— 幕 3 就是 **R11** 的现场判�);**§4.5 已出 R5 评估:未命中,暴露�零�化(新增监�� 0 / 凭� 0 / 入站 0)**;**§4.3 待�� = 空**(第 4/5 �真机��属�⑥ �留�题,⛔ 执行棒�必等)。⛔ ����规划。
>
> ✅ **��已闭环(2026-09-17 11:00,用户原�)**:「**1 本机内存大 �以模拟多�**�⇒ **第 4/5 � = 本机多实例**(本机 47.6 GB / 空闲 27.4 GB / 32 核;relay �实例 ≈ 48 MB),**放弃**"用户自备设备"与"新开云主机"。⚠� 局�:多实例共用�一出� IP ⇒ 对**切�逻辑**够用�对**家宽 / ��商 NAT 差异**无增�。**已�三处**:`docs/覆盖网络/�数表_覆盖网络_20260917.md` §11 � `交接�/交接�_最�形�真机批次_20260917.md` §11 � 本� `交接�/交接�_中继失败切�_20260917.md` §11(三处补记**�在�自指纹�径之外** ⇒ 三个指纹���)。⛔ **�续任何一棒都�许�上抛这�题**。
>
> ✅ **上一轮已完�(2026-09-17 11:2x–12:2x,执行棒)**:**� ⑦(中继失败切�)已收官** —— S1–S5 全�(`directory.ts` 拆出 `listCandidatesFromDoc`;**新增 `src/net/relay/switcher.ts` = 唯一实现**,三装�点 C1 `web/server.ts` / C2 `worker/relay-tunnel.ts`+`worker/agent.ts` / C3 `net/relay/main.ts` �用;`test/relay-failover.test.mjs` F1–F11;`scripts/overlay-failover-drill.cjs` 三幕真机演练);�数表新增 `RELAY_FAILOVER_*` 6 键 + 7 个演练�标,**§9 第 5 行已改「已闭环�**(指纹 → `24cf2efdbcdcbe61267126ed65dba006`)。**全部�� = `交接�/交接�_中继失败切�_20260917.md` §8**(§8 �缀指纹 `419abf308c00b7668e8898aaa91ba9e8`,收��**未�**)。真机:`--scene all` = **8 PASS / 0 SKIP / 0 FAIL**;� 47 ⇒ 切到 106,**三个时延样本 30563 / 27878 / 29176 ms(全部贴 30 s deadline)**;两�全挂 ⇒ **0 行切� + D6 原生判别器**;`npm test` **149/148/0/1**(+F1–F11)。⚠� �留四��该� **§8.8**(**§8.8-4 = 下一棒主题**)。⛔ ����� ⑦。
>
> ✅ **上一轮已完�(2026-09-17 12:3x,规划棒)**:**� ⑧ 的交接�已出** —— `交接�/交接�_切�冷�语义_20260917.md`(工作区根,**345 行**;**§8 �缀指纹 `aa3a6ec0d66dd81f465cea2a3a08ad27`**,�径 = `sed '/^## §8 回报格�/,$d' … | md5sum`)。**三问已给判定**:① **应当拆开,但拆的是「准入方��而�是「冷�时长�** —— health 路径�许**一跳��**�directory 路径 **⛔ 完全���**(�� = 11:43:26 真机实测:directory �"地��了"把刚冷�的 47 �回� ⇒ 给它��� = �活抖动风暴)② **键�按 `url`**,新增 `kind ∈ {switched-away, open-failed}` **�决定��优先级**(把键��"原因"会让�一 url 存在多�冷� ⇒ 抖动抑制失效 = **净退化 R11**;且 `reason` 是自由文本 ⇒ 字符串耦�)③ 🔴 **E5 改判为「幕 4�** —— 本�**已�明**(命题 P-③)在 D5 生产值下"� 106 时 47 未被冷�"这个窗�**�会被自然产生**(当�在 106 ⟹ 47 必曾进冷� ⟹ 若未满 300 s 则�在冷�)⇒ 上� §8.8-3 的回头�件**指�一�走�通的路**;正解 = `� 47 → 切 106 → �� 47 → � 106(预期 D6,记 SKIP)→ 等冷�过期 → 断言 ≤ deadline 切回 47`(副产� = §8.8-4 的正��现)。**�加一�判�级事实**:**构 C(`--url` / `DSHS_RELAY_URL` 钉 106)已判��用** —— `directory.ts:642-651` 明� env 显�会让**候选链退化��点**,� 106 ��无候选。**S0–S9 + E1–E13 + 回滚 + §8 回报格��已就�**;**§4.3 待�� = 空**;**§4.5 R5 评估 = 未命中,暴露�零�化**。⛔ ����规划。
>
> ✅ **上一轮已完�(2026-09-17 12:40–13:2x,执行棒)**:**� ⑧(切�冷�语义)已收官** —— S1–S5 全�:`src/net/relay/switcher.ts` 冷�表结构化(键�按 `url` + 新增 `kind ∈ {switched-away, open-failed}`)+ `replace(targetUrl, reason, origin)` 闸门**�对 directory 收�**(health �**一跳��**)+ `tick()` 的 **D6 现场**加��(新增�点判� `pickExemptTarget`)+ ��有界(� url �冷�周期一次,`exemptedAtMs`;��也失败 ⇒ �置冷� + 本周期����);`src/web/server.ts` **仅一处**(传 `'directory'`);`scripts/overlay-failover-drill.cjs` 新增 `--scene 4|4b|4c|ctrl`;`test/relay-failover.test.mjs` +**F12–F17**。**全部�� = `交接�/交接�_切�冷�语义_20260917.md` §8**(1–8.9 全节;**§8 �缀指纹 `aa3a6ec0d66dd81f465cea2a3a08ad27`,回填�未�**)。**真机核心�果**:**幕 4(构 A)= 4 PASS / 0 FAIL** —— ��在 **19218 ms** 内切回(原文 `|�� kind=switched-away 剩 269991ms` = "47 当时确在冷�"的**直接��**,原因 = 当�通���康�health 路径)⇒ **对�⑦ §8.8-4 缺陷正�闭环**(�⑦ 下�场景最长 ~300 s �切�);**幕 4b = 4 PASS** —— D6 判别器原文(`候选 3 �,排除 3 �`)+ 冷�未过期 **0 行**切� + 冷�过期�**自然**切回(25125 ms,**无��标记**)⇒ 归因收敛到冷�语义;幕 1/2/3 未退化(幕1-A 29586 ms PASS);`npm test` **155/154/0/1**(+F12–F17);部署 47/106 四处 lib,`grep -c RELAY_FAILOVER_EXEMPT <lib>/net/relay/switcher.js` = **2** 自�。⚠� **�留六��该� §8.8**(🔴 **§8.8-2 = 下一棒主题**:S0 基线样本 **32550 ms > deadline 30000**,回头�件已命中)。⛔ ����� ⑧。
>
> 🔴 **本�一�判�级新�现(§8.8-4,留档)**:**`RELAY_FAILOVER_COOLDOWN_MS=0` 是"看起��法�实际会自�"的�置** —— `num()` 的 `/^\d+$/` 放行 `'0'`,但归零会让**�⑦ F10 的"失败候选必须被排除"**一起失效 ⇒ 候选链�在第一个失败候选上(实测 **121–123 s 无切�**)。构 B(原定归因构造)因此判**��用**,已由 **幕 4b** 替代并拿到更强��。⛔ **任何一棒都�许把 `COOLDOWN_MS=0` 写进回滚路径**。
>
> ✅ **上一轮已完�(2026-09-17 13:40–13:5x,执行棒)**:**� ⑨(检测时延与 deadline)已收官** —— **P10 分解�项�现�功**(两样本结构完全一致:检测 **15.085 / 15.119 s** + 首试 0.258 / 1.416 s + 白等 **12.033 / 12.029 s** + 建连 2.821 / 2.724 s)⇒ D1 解�;**S2 修� N=5 = 5/5 全超 deadline**(33914 / 31646 / 34078 / 35321 / 41252 ms,中� 34078);**S4 �点 = 抽公共 `waitUpOnStatus`(`src/net/relay/client.ts`)+ 三处装�点全部委托**(C1 `web/server.ts` / C2 `worker/relay-tunnel.ts` / C3 `net/relay/main.ts`,D7 收�),�点自� 47/106 四处 `lib` � 3 命中;**S5 先红�绿**(改完先对旧 lib 跑 ⇒ `SyntaxError: … does not provide an export named 'openedChannelFailedTerminally'`;build � 22/22 全绿);**S7 修� N=5 = 5/5 进 deadline 内侧**(25465 / 25342 / 21985 / 27389 / 23318 ms,中� 25342);**白等 12.03 s → 0.09 s**�总 19.81–23.93 s,早退日志原文 `[relay-failover] ⛔ 新通�终�失败(state=backoff attempts=1 burst=false lastError="transport error")⇒ ��放弃,�等满 12000ms`;**S8 �退化**:`npm test` **160/159/0/1**(基线 155 +新增 F18–F22)�`--scene all` 11 PASS / 1 FAIL(幕 2-B 已归因)�幕 4-A/B/C 全绿�`overlay-probe` 10/12 与 S0 �项一致�`ss -lntp|wc -l` = 77�`nft` = 72�门户 200�演练 env 残留 0;**收�归零**(`restart dshs` 把 Manager 归�回 47,probe 回到 10/12)。**全部�� = `交接�/交接�_检测时延与deadline_20260917.md` §8**(1–8.9 全节;**§8 �缀指纹 `d903b4eeabf25ef381379cdbaac77e8a`,回填�未�**;全文件 md5 `ccc28dafd10004d11740834004b02154`,529 行)。�数表指纹 `e6b669c257d8e8964273b3b400238351` → **`99e9e17b0c1ce0550e4bc7626a5a0494`**(新增 `DRILL_SAMPLE_N`=5 / `RELAY_GRACEFUL_BURST_MS`=15000,`DRILL_POLL_MS` 2000→500,§9 新增第 9 行「��墙钟的四段分解�)。⚠� **�留三��该� §8.8**(= 下一棒主题)。⛔ ����� ⑨。
>
> ✅ **� ⑩ 已收官(2026-09-17 14:23–14:5x)** |🆕 **下一棒已登记自动接续** = automation `3d4dffc0-356e-4bc6-9628-b7d664da7db9`「覆盖网络线-�11规划棒(观测�径�构+在册�缺陷清算)�(**一次性** · `scheduledAt` = **2026-09-17 14:50** = 收� +5 min · `nextRunAt` = 1789627800000)⇒ 三件技术债全清 —— 幕 2 状��赖**已修**(幕 2 起手现场�读��通�归属�**两�都�** ⇒ 与上一幕解耦;`--scene all` **12 PASS / 0 FAIL**)|`COOLDOWN_MS=0` **0 命中**(`4c`/`ctrl` 整体移除并**显�拒�**,⛔ ��默空跑)|OBS-11 差�**有�字 = `20000`**(47 实例档�无活跃实例)。�� = `交接�/交接�_检测时延与deadline_20260917.md` **§8.8-4**。
>
> ✅ **� ⑪ 已收官(2026-09-17 15:0x,规划棒)** —— 出� = `交接�/交接�_观测�径与在册缺陷_20260917.md`(**§8 �缀指纹 `3ece0f870cba67d0113a4c5f9de9d812`**)⇒ **OBS-11 判� 计数 → 白��集�**(三集包�� + `nft` 入站 accept 集�)+ 6 �在册�缺陷排�(§5.9);�改观测�,⛔ `src/**` 零改动。⛔ ����规划。
>
> �� **(存档)� ⑭ 本轮动作�径(已收官 · 结果� `交接�/交接�_观测�径与在册缺陷_20260917.md` **§10**)**:**� ⑭ · 执行棒 —— 修掉「relay �上的 HTTP keep-alive �用�这�数��缺陷**(�径 = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§9.3**:现象 + **1 �命令的最��现** + 完整��链 + 回头�件;⚠� �必�出规划�)。**背景(上一棒结论)**:Q1 ✅(`mksess` 改 PG)�Q3 ✅(探针 **12/12**)�**Q2 🔴 未达�** —— �内记的 `landModels → writeHomeFile` 本地路径问题**�是** `enter` 500 的真因;真因是**�一�连接上的第 2 � agent 请求必回 `400`(Fastify `clientError`)**,抓包实� = **worker 侧把 agent 上一份�应回�给了 agent**。**开工顺�**:① 先按 §9.3 �现;② **补帧级��**(relay `workerStream`/`dialStream` 路由表�`net/relay/server.ts` 的 stream 表�`dialer.ts` 的 `tcp.pipe(duplex).pipe(tcp)` 收尾�`client.ts#onOpenRequest/onRemoteData`)**定�到代�行�改**;③ 先红�绿;④ 端到端:guest `enter` **200**��连接连�两次都 **200**�`npm test` �退化(160/159/0/1)�`--scene all` �退化�探针�� **12/12**。**三�硬门**:**D1**(�现类��未�现� ⛔ �许改任何生产值;⛔ �动 `RELAY_FAILOVER_*`/`HB_SEC`/burst)|**R7**(Q4 `src/net/relay/**` untracked 缺��在**�交授�** ⇒ ⛔ �报告�⛔ � commit/push;Q5 `.bak-seq7-*` 残留未动)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ **若改动必须超出 `src/net/relay/**` + 其测试 ⇒ �下报告�别扩大**。⛔ � commit / � push。**收�必须**:释放� + 陈述�告知 + 登记下一棒 + 推进本入� + 写工作区日志。
>
> ✅ **� ⑮ 已收官(2026-09-17 16:14–16:3x,执行棒)**:**缺陷 B(拨�池未分�槽�自�)已修并端到端验收** —— 判� a/b/c 全绿;**先故�对未分�池� 25000 �一�连接**,�� guest `enter` � **200/200**�该��连接连� 3 次 **200/200/200**�打�池�� **64**;`npm test` **162/161/0/1**�`--scene all` **12 PASS / 0 SKIP / 0 FAIL**�`overlay-probe` **12/12**。改法 = `onConn` ⛔ �� `close()` �务器(�丢连接 + `stray` 计数 + 点�日志)+ `localPortFor`/`lruIdle` �认 `server.listening` + `status().pool` 改报"实际在�"并新增 `stray`;⛔ ��"把槽�从 `slots` 摘掉"那�(= 让任�本地连接**永久**蚕食池容�,R11)。**全部�� = `交接�/交接�_观测�径与在册缺陷_20260917.md` §11**(� 47 上 16:00:31/35/40 三� 500 的时间线归因)。⚠� 顺带确认一�**环境�径**:对 47/106 的 ssh **必须显� `-p 22`**(别� `bt-server` 里的 `32022` 是失效残留�,�该� §11.10)。
>
> �� **(存档)� ⑰ 本轮动作�径(已收官 · 结果� `交接�/交接�_在册收尾_20260917.md` §9)**:**� ⑰ · 执行棒 —— 在册收尾(S1 → S2 → S3 → S4)**(⚠� **执行棒:按�开工,无须�出规划�**)。**开工�� = 工作区根 `交接�/交接�_在册收尾_20260917.md`**(**§8 �缀指纹 `bab83b7219b2669d5a6e9f1acf782e1f`**,全文 md5 `ca13b9ded3d71268f8b0e56755d7aea4`)⇒ 按该� §5 顺�:**S1** mksess 文档�径校正(「DB 直��→「PG 直��;�改�作性载体 � `规范/02-�维手册.md` + `skills/**` + 本机技能,⛔ **�改 `调整方案/**` 档案正文**)|**S2** 技能 `dsh-auto-handoff-chain` **三处�步建立**(本机 � 文档库新建副本 � 47 镜� `/opt/dsh/docs/skills/`;**与 S1 共用一次 scp** ⇒ 故 S1 必先)|**S3** 清�代�仓 `.bak-seq7-*`(🔴 **范围修正 = 5 个**,全 untracked��为过期快照 ⇒ �有效回滚点)|**S4** 幕 4-A 余�判�化(三档:`p95 ≤ 24 s` �康 � `24–27 s` 临界记录�判 FAIL � `> 27 s` �下报告)+ `--scene 4` × `DRILL_SAMPLE_N`=5 样本。**验收** = �内 §6 的 E1–E9(其中 E6 三件套 = `npm test` 162/161/0/1�`--scene all` 12 PASS�探针 12/12)。**两�硬门**:**D1**(�改任何生产值)|**R7**(Q4 ⛔ �报告�⛔ � commit/push)。🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ �改 `调整方案/**` 档案正文�⛔ ���已收官� ①–⑮�⛔ �� presence / 房间层 / 内容分�。**收�必须**:释放� + 陈述�告知 + 登记下一棒 + 推进本入� + 写工作区日志 + 回填该� §8。
>
> �� **(存档)� ⑯ 本轮动作�径(已收官 · 结果� `交接�/交接�_观测�径与在册缺陷_20260917.md` **§12**)**:**� ⑯ · 规划棒 —— �核「会� / 中继从 Manager 拆分�是��需� + 给剩余在册项定��出执行�**(⚠� **�出规划�⛔ �改��⛔ �动�务器**)。�� = 工作区根 `docs/覆盖网络/会�中继拆分_��与改造方案_20260916.md`(S0–S4)+ 事实「**R5 已解掉『Manager 必须与 relay �机�**(Manager 改为�拨出一� wss��点�到本机回环池 `127.0.0.1:25000+`)�。**�读�� ≤3 �命令**,结论��二选一:① 已被 R5 覆盖 ⇒ 判「���+ 写清��;② �有未覆盖部分 ⇒ 写��**�步验收 / 回滚**的 S 步骤。**�一张�**里给剩余在册项定�:`Q5`(`src/net/relay/*.bak-*` 3 个残留)|`seq13 文档�径`(文档库 / 技能对 `mksess.cjs` 的「DB 直���述已过期)|`长期在册`(技能 `dsh-auto-handoff-chain` 在文档库无副本 ⇒ 三处�步从未建立)|`§8.8-2`(幕 4-A 19.5–20.8 s 的临界项)。⛔ **Q4(`src/net/relay/**` untracked 的�交 / 推�授�)�写进执行范围**(待你��,�登记一行);⛔ �得自行为 presence / 房间层 / 内容分�定�(需��)。**收�必须**:释� + 陈述�告知 + 登记下一棒 + 推进入� + 写工作区日志 + 追加回报。
>
> �� **(存档)� ⑮ 本轮动作�径(已收官 · 结果� `交接�/交接�_观测�径与在册缺陷_20260917.md` §11)**:**� ⑮ · 执行棒 —— 修掉「拨�池未分�槽�被任�一�连接永久�死�(缺陷 B)**(�径 = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§10.8**:现象 + 出处代�行 `src/net/relay/dialer.ts#onConn` + 三个候选修法 + 判�;⚠� �必�出规划�)。**背景(上一棒结论)**:� ⑭ 已修好 relay keep-alive �用缺陷(guest `enter` 200�探针 12/12),但**从�路�现了缺陷 B** —— `onConn` 撞到 `key === undefined`(未分�槽�)时� `slot.server.close()` + `tcp.destroy()`,**�把槽�从 `slots` 里摘掉** ⇒ 该槽�永久死亡,而 `localPortFor()` 的 `slots.find(s => s.key === undefined)` **下次还会选中它** ⇒ `ECONNREFUSED`(实测:池报"64 个�"而 `ss` �� 63,缺�正是死掉的 `25000`)。**开工顺�**:① 先**�改代�**�现 + 帧级��(�/何时连了未分�槽�;`status().pool` 与实际在���数何时起�相等);② **定�到代�行**�改;③ 先红�绿(往 `test/relay.test.mjs` 追加用例,⛔ �许改 `package.json`);④ 端到端:guest `enter` **200**��连接连�两次 **200**�`npm test` �退化(现基线 **160/0/1 skip**)�`--scene all` �退化(现 **12 PASS**)�`overlay-probe` **12/12**(须带 `--table`)。🔴 **本棒专属陷阱**:⛔ **���对「未分��的池��连接**(那正是缺陷 B 的触�器)—— �打池�,**先用一次真实 `enter` 把�点分�出�**,�从日志 `[relay-dialer] �点 127.0.0.1:<�> -> <逻辑�>:<端�>` �**已分�**的那个��。**三�硬门**:**D1**|**R7**(Q4 untracked 缺��在**�交授�** ⇒ ⛔ �报告�⛔ � commit/push)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ **若改动必须超出 `src/net/relay/**` + 其测试 ⇒ �下报告�别扩大**。⛔ � commit / � push。**收�必须**:释放� + 陈述�告知 + 登记下一棒 + 推进本入� + 写工作区日志 + 追加本� §11。
> ✅ **� ⑮ 已完�**(automation `1933b18a-0c2a-46a2-829c-440a900fed08` 已执行完毕�入� §0/§2 已推进)。
> � **� ⑰ 已收官(2026-09-17 16:44–17:3x,执行棒)—— 本线「在册收尾四��全部清干**:**S1 ✅** mksess 文档�径校正(「DB 直��→「PG 直��,5 处�作性载体;E1 = 0 行)|**S2 ✅** 技能 `dsh-auto-handoff-chain` **三处�步首次建立**(本机 ↔ 文档库 ↔ 47 镜�,`diff -r` = 0 行�md5 三处�值;S1 的两个技能文件�批上镜�)|**S3 ✅** 代�仓 `.bak-seq7-*` 清�(**5 个 → 0**;untracked��有效回滚点;`npm run build` RC=0 + lib 产物 md5 零差异)|**S4 ⚠� 临界档**(`--scene 4` × 5 样本 18772/20121/20246/21223/**24477** ms;p95 �守�径 = **24477 ms** ⇒ 记录入册�⛔ �判 FAIL�⛔ 未调任何生产值;⛔ 回头�件未触�)。**零回归三件套全绿**:`npm test` **162/161/0/1**�`--scene all` **12 PASS / 0 SKIP / 0 FAIL**�`overlay-probe` **12/12**;收�归零 = 三�务 active + 池� **64**。**全部�� = `交接�/交接�_在册收尾_20260917.md` §9**(§8 �缀指纹 `bab83b72…` 回填�**未�**;�数表 `8f08e74b…` **未�** ⇒ D1 自�)。
> 🗃 **Q4 已解除**(用户本轮明确授�「执行完毕� �步到仓库�)⇒ 两个 commit 已推�:**`146c3d2`**(代�/测试� 53 文件)+ **`bc0dd2c`**(文档库� 10 文件);远端 `master` = **`bc0dd2c`**,`git ls-files src/net/relay | wc -l` **0 → 15**(untracked 缺�闭�)。
> 🛑 **本线已无自动接续**:四�在册项全部清干�,**剩余项全部�在「需���区**(presence / 房间层 / 内容分�**定�** � 业务优先级;骨干节点�务范围 � §4 的 A/B 既有待��项)⇒ 按登记门�(`dsh-auto-handoff-chain §3.3`)**�登记下一棒**,等你����建。
> �� **(存档)� ⑱ 本轮动作�径(已收官 · 产物 = 工作区根 `交接�/交接�_presence在线�_20260917.md`,§8 �缀指纹 `f612858344077420cff5f1f9ef1c942f`)**:**� ⑱ · 规划棒 —— presence(在线状�)改造的方案规划**(⚠� **�出规划**:⛔ �改任何代��⛔ �动 47/106 �置�⛔ � commit / � push�⛔ �改任何生产值)。**��** = `docs/覆盖网络/覆盖网络_应用场景与待完善清�_20260916.md` **§五 第 7 步** + `docs/覆盖网络/覆盖网络_��全场景推演_20260916.md` + `docs/覆盖网络/覆盖网络_瓶颈�地方案_20260916.md`。**用户��** = 「**a ��**�(2026-09-17 17:1x)⇒ presence 先�。**产出** = 按项目 8 段模�的**执行交接�**。⚠� **B(内容分� / �级内容寻�)�待�� ⇒ ⛔ 本棒�规划��登记**。✅ **已收官(17:2x)** —— �点判为**节点 / 端点在线�**(零应用层自�),S0–S7 + E1–E11 + §9 ��回头�件 + 三层回滚已就�;**§4.2 真�� = 空�§4.3 待�� = 空�§4.4 R5 = 未命中**。⛔ **����规划**。
>
> 🎯 **本轮动作(2026-09-17 17:28 起,唯一一件)**:**� ⑲ · 执行棒 —— presence(节点在线�)改造�地**(⚠� **按�开工,⛔ 无须�出规划�**)。**开工�� = 工作区根 `交接�/交接�_presence在线�_20260917.md`**(**§8 �缀指纹 `f612858344077420cff5f1f9ef1c942f`**)⇒ 按该� §5 顺�:**S0** �读�置 + 基线采样(§2 的 P1–P5,**零改动**)|**S1** relay 侧 presence ��表(连接生命周期驱动 + **TTL 安全网** + � hostId 设备��;**判别器必须�计数**,⛔ �许�写日志)|**S2+S3** 线�议帧(`SUB/UNSUB/PRESENCE/SNAP`,帧�**末尾追加**)+ **1 s 窗�批�并**|**S4** 消费侧接线(C1 `web/server.ts` / C2 worker,**`/status` �级为兜底�⛔ �删**)|**S5** 观测(�数表 `PRESENCE_*` + `OBS-13/14/15` + 探针新项,⛔ 无 `待测` 残留)|**S6** 本机多实例真机验收(N ≥ 4,实测 **稳� 0 帧 / 一次�化 ≤1 帧 / �幅 ≥ 10×**)|**S7** 收�(部署属 lane 内,**直接�**)。**验收** = �内 **E1–E11**(零回归三件套 = `npm test` **162/161/0/1**�`--scene all` **12 PASS**�`overlay-probe` **12/12 + 新项**,�**必须带 `--table`**)。**三�硬门**:**D1**(⛔ �改任何生产值 —— `RELAY_FAILOVER_*` / `HB_SEC` / burst)|**R5**(⛔ �新增公网监�� / �改 nft·nginx;新增监��·凭�·入站必须�为 **0**)|**R7**(⛔ �改 `调整方案/**` 档案正文�⛔ � commit / � push)。🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⚠� **命中该� §9 的任一�回头�件**(�动生产值 / �扩大暴露� / �超出该� §3.1 文件集 / 批�并失效 / 观测跑�出�值 / 出现�默放行 / �求"先有房间层" / 零回归退化)⇒ **立刻�下报告,别扩大**。⛔ ��内容分��⛔ ��房间层�⛔ ��打洞实现�⛔ ���已收官� ①–⑰。**收�必须**:释放� + 陈述�告知 + 登记下一棒 + 推进本入� + 写工作区日志 + 回填该� §8。
>
> 📌 **自动接续登记(2026-09-17 17:2x)**:**下一棒 = automation id `107b8e38-ccbd-4dcf-8b49-25dad7c89be9`**(�称「覆盖网络线-�19执行棒-presence节点在线��,**一次性**,`scheduledAt` = **2026-09-17 17:28** = 收� +4 min,`nextRunAt` = 1789637280000)⇒ **已登记自动接续,约 4 分钟�自动开新会�;接续点 = 本文件 §2「🎯 本轮动作�**。(已完�的一次性棒:� ⑱ 规划棒 = `50882a38-07cd-494c-ae73-cbbf27f3604d`;� ⑰ 执行棒 = `067b0892-964e-4deb-bf84-4f1c37bebea8`。)
>
> 📌 **(历�)自动接续登记(2026-09-17 16:4x)**:**下一棒 = automation id `067b0892-964e-4deb-bf84-4f1c37bebea8`**(�称「覆盖网络线-�17执行棒-在册收尾(mksess�径/技能三处�步/Q5清�/幕4A临界项)�,**一次性**,`scheduledAt` = **2026-09-17 16:44**,`nextRunAt` = 1789634640000)⇒ **已登记自动接续,约 5 分钟�自动开新会�;接续点 = 本文件 §2「🎯 本轮动作�**。(已完�的一次性棒:� ⑯ 规划棒 = `91c53ef8-c3f0-4bb3-9f0a-943790178176`。)
>
> 📌 **(历�)自动接续登记(2026-09-17 16:3x)**:**下一棒 = automation id `91c53ef8-c3f0-4bb3-9f0a-943790178176`**(�称「覆盖网络线-�16规划棒-会�中继拆分�核与在册收尾定��,**一次性**,`scheduledAt` = **2026-09-17 16:36**,`nextRunAt` = 1789634160000)⇒ **已登记,约 5 分钟�自动开新会�接续,接续点 = 本文件 §2「🎯 本轮动作�**。
>
> 📌 **(历�)自动接续登记(2026-09-17 16:1x)**:**下一棒 = automation id `1933b18a-0c2a-46a2-829c-440a900fed08`**(�称「覆盖网络线-�15执行棒-拨�池槽�自�缺陷B修��,**一次性**,`scheduledAt` = **2026-09-17 16:14** = 收� +4 min,`nextRunAt` = 1789632840000)⇒ 已登记,会自动开新会�接续。(已完�的一次性棒:� ⑭ 执行棒 = `3e0a7b01-9257-4b76-b82f-4998c9f7eab0`;� ⑬ 执行棒 = `a513b25c-9399-4fd5-9a00-a19a04c36d74`。)
>
> �� **(存档)� ⑬ 本轮动作�径(已收官 · 结果� `交接�/交接�_观测�径与在册缺陷_20260917.md` §9)**:**� ⑬ · 执行棒 —— 在册�缺陷清算 `Q1 → Q2 → Q3`**(�径 = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§5.9 表** + 本棒 §8.8 转办;**该�已给��的最�验收与回滚 ⇒ 直接执行�无须�出规划�**)。按�三�:**Q1** `/opt/dshs/mksess*.cjs` �写 **SQLite 旧库** ⇒ **已失效**(判� = 用它开一次临时 session ⇒ 实例� `curl -w '%{http_code}'` 回 **200/401**,⛔ � `000`;用完�删。**它是 R4 规定的唯一实例�验收手段 ⇒ �修则 Q2/Q3 连"�完了没有"都判�了**)|**Q2** guest(**w-106**) 实例页 **502**(真因 = 平� `landModels → writeHomeFile` 用**本地路径**写**远端**实例 home;判� = � Q1 的临时 session ⇒ w-106 实例页 **200**)|**Q3** `OBS-09` 实例� `000`(**环境��缺陷**:47 无活跃实例 ⇒ 起一个 ⇒ `OBS-09` 绿 **且** 新 `OBS-11` 在"有实例�"下�绿 = `20000` �在�许区间)。⚠� **Q3 与 Q2 �批�最�**(�一临时 session 一次验两件)。**三�硬门**:**D1**(分解类��未�现� ⛔ �许改任何生产值)|**R7**(范围外先报告��动手 ⇒ **Q4 `src/net/relay/**` untracked 缺��在"用户授�"�⛔ 本棒�报告;Q5 `client.ts.bak-*` 残留 = 清�类,待 Q1–Q3 �办**)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**(该值看似�法�实际自�)。⛔ **� commit / � push**(Q4 �授�)。**收�必须**:释放� + 陈述�告知 + 登记下一棒 + 推进本入� + 写工作区日志。
>
> 📌 **自动接续登记(2026-09-17 15:2x)**:**下一棒 = automation id `a513b25c-9399-4fd5-9a00-a19a04c36d74`**(�称「覆盖网络线-�13执行棒-在册�缺陷清算Q1-Q3�,**一次性**,`scheduledAt` = **2026-09-17 15:24** = 收� +3 min,`nextRunAt` = 1789629840000)⇒ 已登记,会自动开新会�接续。(已完�的一次性棒:� ⑫ 执行棒 = `52645861-6895-459c-a07e-a5d686787d9c`。)
>
> ~~(存档)� ⑫ 执行棒�径:**� ⑫ · 执行棒 —— 观测�径�构(`OBS-11` 计数 → 白��集�)**。✅ **已收官(2026-09-17 15:3x)**:�上 §0 最新刷新行;产物 = 代�仓 `scripts/overlay-probe.cjs`(新增夹具模�)+ �数表 §6 四键;`overlay-probe` **11/12**;�数表指纹 `8f08e74b026e6e5b5e1b3db813f031ae`。⛔ ����。~~
>
> ~~(存档)� ⑪ 规划棒�径:**� ⑪ · 规划棒 —— 观测�径�构 + 在册�缺陷清算排�**。⚠� **�出规划��改�**(规划与执行分离):产出交接�(8 段模�)+ 为下一棒定�。范围**仅�边界内技术项**:① **OBS-11 判�从「计数相等�改为「白��集��**(现�径两处结构缺陷:对实例/端点在线�**�感 ⇒ �红**;对"一进一出"**替���化��感 ⇒ �绿**),连带处� `LISTEN_COUNT` 的"有/无实例�"两值与 `scripts/overlay-probe.cjs` 改造;② **在册�缺陷清算排�**(`OBS-09` 实例� 000|guest(w-106) 实例页 502|`mksess*.cjs` 失效|`src/net/relay/**` untracked 留档缺�|`client.ts.bak-seq7-*` 残留|�数表 `LISTEN_COUNT`=79 与现�差的 1 �无��)。⛔ **�得自行为"大方� / 业务优先级"定�**(presence / 房间层 / 内容分� = **需用户��**,�列候选与优缺点��决)。➕ **顺手办(�一棒内)**:`.workbuddy/memory/MEMORY.md` 的**真瘦身** —— 现 **8 121 字符 > 注入上�(实测 ≈7 78x)** ⇒ �轮尾部被截断;把 §二 里"已有 PLAYBOOK 指针"的规则**下沉为一行指针**(体积���增)。**✅ 已办(15:0x)= `MEMORY.md` 8 121 → 7 712 字符**。⛔ � commit / � push。~~
>
> ~~**� ⑩ · 执行棒(已收官 · 内容留档)**~~:**� ⑩ · 执行棒 —— 覆盖网络线技术债清算(3 件)**。**直接出执行棒�无须规划棒**:三件�已定���属 §1 边界内技术项(实现路径 / 排查方法 / 脚本自洽),**无�上抛项**。三步:**① 演练脚本自洽 —— 幕 2 的状��赖**(`scripts/overlay-failover-drill.cjs`:注释写"两�全�"�实现�� 106,而幕 1 已把 Manager 通�切到 47 ⇒ �的是当�**�用**的那� ⇒ 120 s 窗� 0 行 `[relay-skip]`;修法 = 幕 2 先判定当�活跃通���它,并�验正确�置下 3 PASS);**② 清掉 `COOLDOWN_MS=0` 的 5 处命中**(全部�⑧ �留 ⇒ 该值已判「看似�法�实际自��⇒ 从演练 / 回滚路径彻底移除,改用�法构造);**③ OBS-11 的 `78 → 77` 那 1 �定�**(两次连采�值�差 1 < 2 未命中回头�件 ⇒ 需把 78 与 77 ��对账,定�是哪一�消失)。**验收**:`--scene all` 一键全绿(�幕 2)+ `grep -c 'COOLDOWN_MS=0' scripts/` = **0** + OBS-11 差值**有�字**(�则写明"已排查 N ���在哪�回头�件")。**三�硬门**:**D1**(分解类��未�现� ⛔ �许改任何生产值)|**R7**(范围外缺陷先报告��动手)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练路径**。⛔ � commit / � push;⛔ �� presence / 房间层 / 内容分�。**收�必须**:释放� + 登记下一棒 + 推进本入� + 写工作区日志。
>
> 📌 **自动接续登记(2026-09-17 14:1x)**:**下一棒 = automation id `be7242dd-ac3e-43d0-b52c-a465683cf972`**(�称「覆盖网络线-�10执行棒-技术债清算�,一次性,`scheduledAt` = **2026-09-17 14:23**)⇒ 已登记,会自动开新会�接续。(已完�的一次性棒:� ⑨ 执行棒 = `2ca4048b-ab74-4845-8964-47a88910c679`。)
>
> ~~(存档)� ⑨ 规划棒�径:~~ **� ⑨ · 执行棒 —— 按 `交接�/交接�_检测时延与deadline_20260917.md` 开工**(工作区根;8 段模�;**出��缀指纹 = `d903b4eeabf25ef381379cdbaac77e8a`**)。**核心结论(规划棒已用现有日志分解完�,执行棒须先�现)**:30 s ≈ **检测 15.0–15.1 s**(= `gracefulBurstMs` 的 15 s 地�,⛔ **�是** 2.5×`HB_SEC`�37.5 s,上� §8.8-2 的�径�示已在�内勘误)+ **白等 12.0 s**(`waitUpOn` �轮询 `state==='up'`�**�对终�失败早退** ⇒ 对一个必然失败的�机候选�满 `upTimeoutMs`)+ **建连 2.7–2.8 s**;两个�行�核样本(`unhealthyForMs=30563` / `29376`)结构完全一致。**首选修法 = `waitUpOn` 死候选早退**(三处装�点 `server.ts` / `relay-tunnel.ts` / `relay/main.ts` �处验收),⛔ **�调 `RELAY_FAILOVER_DEADLINE_MS`�⛔ �动 `HB_SEC`�⛔ �动 burst 语义**。**开工第一件事 = �内 §2-P10 分解�现**(�现�出,或 S2 采到任一 < 27 s 的样本 ⇒ �下报告)。**OBS-11 已�� = `77`**(47 无活跃实例档,�径 78;差 1 < 2 ⇒ 未命中 §8.8-3 回头�件;两次连采�值)。**三�硬门**:**D1**(⛔ 分解�现�功��许改任何 `RELAY_FAILOVER_*` 生产值)|**R7**(范围外缺陷先报告��动手)|**§8.8-4**(🔴 ⛔ �许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练路径)。⛔ � commit / � push;⛔ �� presence / 房间层 / 内容分�(清�第 7 步)。**收�必须**:释放� + 登记下一棒 + 推进本入� + 写工作区日志。
>
> ~~(存档)� ⑥ 规划棒�径:**� ⑤ · 执行棒已收官** —— �� = `交接�/交接�_�数表与观测_20260917.md` **§8 执行回报**(��现指纹�该� **§8.9**;E1–E9 = **8 绿 + 1 部分绿**;唯一部分绿 = E5 的"在 47 上�控制造一次真实拨�",�点 / 已�到哪一步 / 回头�件�该� **8.7-①**)⇒ **下一棒 = � ⑥ · 3–5 �最�形�**:按 `docs/覆盖网络/覆盖网络_应用场景与待完善清�_20260916.md` **§五 第 6 行**开工 —— **先把 `docs/覆盖网络/�数表_覆盖网络_20260917.md` §7 的 4 个 `待测` 项 + 1 个待校准推导项��实机实测**(打洞率 / �玩家带宽 / 跨云稳��� / 中继 jitter / `MEM_PER_HOST_MB`),并**�批**�地 **L3 第二中继机**(�数表 §5.2 校验③ 已算出:�� L3 需求 450 > �� `--max-hosts` 225 ⇒ **需 ≥2 �中继**)。⚠� **回头�件已写死**:`MEM_PER_HOST_MB` 或 `WAN_STEADY_THROUGHPUT` 一��实测 ⇒ **必须�算 `RELAY_MAX_HOSTS` 并�下� 47 的 `capacity.conf`**。⚠� 两�待办�本轮带过�:① guest(w-106) 实例页 **502**(`landModels → writeHomeFile` 用**本地路径**写远端实例 home;且 `/opt/dshs/mksess*.cjs` �写 SQLite 旧库�**已失效**);② 🔴 **106 agent ���引导链**(`worker/agent.ts` 把 `DSHS_RENDEZVOUS_URL` 直接当 relay URL 用;按字�撤掉 = `tunnel===undefined` 生产回归,**已判�执行**)。⛔ ���� ②/③/④/⑤;⛔ �� presence(清�第 7 步);⛔ � commit / � push。
>
> ~~(存档)原规划棒�径:**� ⑤ · 规划棒 —— 给「�数表 · 观测 · ��评估�出一份�执行交接�**(�盘工作区根,命� `交接�/交接�_�数表与观测_20260917.md`,按 8 段模�:目标 / �读�置 / 范围 / 决策点 / 步骤 S0–Sn / ��验收判� / 回滚 / §8 回报格�)。**必带输入** = `交接�/交接�_443兜底_20260917.md` **§8.7 的四��留** + 该� **§8.8 的 45% �径待填�数�**(relay `--max-hosts` / `/status` 的 `capacity{max,used}` / `retryAfterMs`)+ **L3 跨机真容�**(命中 **R5**,须先出��影�评估)。⛔ 本轮**�出���改�务器**(规划与执行分离);**� commit / � push / �� presence**;收�必须释放� + **登记下一棒**。~~
>
> ~~(存档)原规划棒�径:**� ④ · 规划棒 —— 给「443/TCP 兜底�出一份�执行交接�**(�盘到工作区根,命� `交接�/交接�_443兜底_20260917.md`,按 8 段模�:目标 / �读�置 / 范围 / 决策点 / 步骤 S0–Sn / ��验收判� / 回滚 / §8 回报格�)。**背景**:现役�有 `wss://alotbuy.com/dshs-relay` 一�路且� nginx + CF(�点);� ④ �补的是**CF / nginx ��用时的 443/TCP 直连兜底**(异构设计纪律:relay �按�构 15%,而是 **45% 设计�55% 留余�**)。**��入�** = `覆盖网络_应用场景与待完善清� §五`(主线第 ④ 项)+ `docs/覆盖网络/覆盖网络_补�与�考方案_20260916.md` + `docs/覆盖网络/覆盖网络_全�架构�盘_20260916.md`。⛔ 本轮**�出���改�务器**(规划与执行分离);**� commit / � push / ��� ⑤ / �碰 presence**;收�必须释放� + **登记下一棒**。
> 🟢 **最新�径覆盖本节历�内容(23:0x)**:**R2 / R3 / R4 / R5 全部已完�并端到端验收**(→ 交接� **§9 / §10.4 / §10.5 / §11**)⇒ **机制层 R0–R5 已�**(**R5 已解掉"Manager 必须与 relay �机"这���**)。
> 🔴 **下一动作已勘误**:⛔ **�是** "presence 改造"。按 `覆盖网络_应用场景与待完善清� §五` 的主线,presence�房间层是**第 7 步**,�置为 **② 网抽象 + 地�规划 + 引导(P0-1/2/3) → ③ 一机一钥 + 信任根 → ④ 443/TCP 兜底 → ⑤ �数表 → ⑥ 3–5 �最�形�**。(�:仓库里目�**没有任何应用层代�** —— 全仓唯一� "presence" 字样的文件是 `src/net/relay/placement.ts` ⇒ "presence 改造"根本无从下手,这�旧指示是上一轮的笔误。)
> ✅ **2026-09-17 07:4x:� ② 已收官(①②③ 全绿,其执行进度� `交接�/交接�_网抽象与地�规划R6_20260916.md`)** ⇒ 🟢 **2026-09-17 07:5x 已定�:下一棒 = � ③(一机一钥 + 信任根)**,之� ④ / ⑤(�由� §0)。
> ⛔ **���� R2 / R3 / R4 / R5����开 `32023`����� SSH 版中继**(隧�凭�与 `32022` 都已收回,那�路已��能�建)。
> (按顺� · **2026-09-16 11:5x 刷新**)
1. **先抢�**:`bash dsh-server-docs/scripts/handoff-guard.sh --claim-exec "<会��>"` —— �已释放,抢到��开工。
2. **�第一优先 · 真活】会� / 中继从 Manager 拆分的�地**(方案:工作区根 `docs/覆盖网络/会�中继拆分_��与改造方案_20260916.md`,S0–S4 分步 + �步验收 / 回滚)
- ✅ **P1 / P2 / P3 已完�并验收(2026-09-16 15:5x–16:2x)** —— 全部实测��在 **交接� §8**(�命令原文级输出)。摘�:
· **P1** 47 对�到 `640813e`(Manager 侧真补上 S0+S1)|多用户验收:`admin`(w-47) 与 `guest`(w-106) 实例页� 200�跨机文件��盘已核实
· **P2** `dsh_hosts.via` 列(�移 v8)|回填 `w-47=local` / `w-106=manager-ssh`|`hostsProvider` 走 `RendezvousRegistry`|`GET /api/admin/hosts` 已�� `via`
· **P3** **实例端�区间隔离**(`w-47` 20000+ / `w-106` 21000+,�开 OS 临时段)⇒ 修掉「跨 worker �� ⇒ 47 的 `127.0.0.1` 撞� ⇒ `tunnel.forward()` 返回值被忽略 ⇒ **�默拨到别人实例**�这�真 bug;两实例实测� 20000 / 21000 且互���
- ✅ **P4(SSH 版中继 / 新开 32023)已判「���**(17:2x)—— SSH ��隧�**�是"�安全"**(专用�特�账� + `PermitOpen` + �速是业界标准�法),但**�该长期�数��**;它想�的两样(与�塔 sshd 解耦�甩掉 root 凭�)在 relay 方案里**�样拿到** ⇒ 两步�一。⛔ **��新开 32023����� SSH 版中继**。
- ✅ **R0/R1/R1.5/R2 已完�**(R0 判�表+链路画��R1 relay 最�闭环�R1.5 韧性+准入选点�**R2 常驻+nginx 443 暴露**)⇒ 全部��在方案 **§9–§14**。
- ✅ **R3 + R4 已完�并端到端验收(2026-09-16 21:37–22:2x)** —— R3�`RendezvousRegistry` 已接线 `RelayRendezvous`(� relay 实时快照 + 15 s 陈旧回退)+ 106 常驻 + `w-106 via='relay'`;R4�实例�� relay(`PORT_ADD/DEL/ACK` + `RelayTunnel` + 端点翻译)+ **sshd ��隧�下线且��能�建**(47 收回隧�公钥�`32022` 回收;106 摘 `DSHS_TUNNEL_*`��钥移走)⇒ 47 公网暴露�**净� 1 �**。�� = 交接� **§10.5**(�一份"�默失效"缺陷的定�与修� + 先红�绿回归测试)。
- ✅ **R5 = 会���机 已完�并端到端验收(2026-09-16 22:3x–23:0x)** —— Manager 改为 `dialer: true` **�拨出**一� wss,�点在**自己本机**预绑池(`127.0.0.1:25000..26099`,64 �);新增 `DIAL(0x0e)/DIAL_ACK(0x0f)` 帧�`StreamPeer` 抽象(数���形)�relay 侧 `DSHS_RELAY_DIALERS=manager` 白�� + �机独立密钥(���收窄)。�� = 交接� **§11**:① �测 **38/38**;② E2E `endpoints: [(19000, 41233, 0)]`(**relay 回环� streams=0**)+ `DIAL manager -> w-106:21000 ok`(实例�)+ 门户 200/62451 B;③ 🔴 **�机等价实验**(清掉 `DSHS_RELAY_STATUS_URL` ⇒ Manager 对 relay 回环�一无所知)**�全通**,两个回环端点 `streams` **全为 0**;④ 新增 64 �**全部仅回环**,公网零新增。
- � **下一步 = 主线第 ② 项「网抽象 + 地�规划 + 引导�**(`覆盖网络_应用场景与待完善清� §五`)—— ⛔ **�是 presence**(那是第 7 步)。⛔ ���� R0/R2/R3/R4/R5。
🟢 **阶段 ①(S0–S4 + R5)已完工;`清� §11.6` 记下的两�缺陷(A1 � 404 / A2 �信�)也已修完并端到端验收**(→ R2-R4 �� **§12**)。
🟢 **2026-09-17 07:4x:② 的 Step 3(P0-3 �字解�与授�)也已完�并端到端验收 ⇒ ② 全�关闭(①②③ 全绿)**(�� = ② �的「执行进度�段)。⇒ **下一棒��看 ② 的��**,按 `清� §五` 主线往下走(� ③ 一机一钥 + 信任根 / � ④ 443/TCP 兜底 / � ⑤ �数表·观测·��评估 —— **开工顺�已于 07:5x 定为 ③ → ④ → ⑤**,�由� §0)。⛔ ����� Step 1 / Step 2 / Step 3。
- ✅ **A1 已修并端到端验收(2026-09-16 23:2x–23:4x)** —— `RemoteUserFs.target()` 原在 `agentFor(hostId)` 查�到时**�默回退** `DSHS_CLUSTER_AGENT_URL`(= w-47 本地 agent)⇒ �次 `restart dshs` 的窗�期内 w-106 用户回**� `404 not_found`**(与“文件夹�存在��形,误导排查)。**真因** = 文件� `server.ts:262` 的 `hostDirectory` 是惰性 Map�此�**�被 spawner** 刷新 ⇒ �动时表里�有本机。**修法** = `ensureHost` **按需补�**(治本)+新增� `host_unresolved` → **503 且零请求�默认机**(治安全)。**��** = R2-R4 �� **§12**(先红�绿 + 冷�动 `launch 200` + relay 有 `DIAL` + `not_found=0`)。判别器�是:**relay 有没有 `DIAL`**。
- ~~原 R0 �述~~(已过期,仅存档):�看 `交接�/接续包_覆盖网络线_20260916.md`(它 17:29 已�步):**R0-a** 把六�判�(认�模型 / 默认姿� / 零入站 / 爆炸�径 / �观测 / 生�)补�**�打分表**;**R0-b** 测链路画�(本机↔47↔106 的 RTT / jitter / 带宽)。**R1 起�选 relay 实现**(候选 OpenZiti / Nebula 身份型优先 > rathole > frp)。⛔ **本轮�引入任何第三方 relay**。
- 🔴 **本 §2 的�径截至 2026-09-16 17:29**(17:2x 起 P4 改判�17:3x 撤销"首选 frp")。⚠� **接续包�次更新�,必须回��步本入�** —— 16:43–17:29 期间本入�曾滞� 41 分钟,导致 17:04 那�自动接续会�按旧�径得出「P4 **并入自研 relay**�的结论,与最新定案(**实现未定�先� R0**)**表述�一致**(方�一致�粒度��)。⛔ 别�让"下一棒的第一信��"比接续包旧。
- � **未�**:git commit(未授�)�档案��建档(建议与 P4 �并�,届时�有 commit hash �写)。
3. **平�那批待办** ✅ **已清**:`BRIEF.md` 刷新至 09-16|T08 ��已归档 `交接�/archive/交接�-已完�/`|`.doing-T08` 已� T08 归档(内容�留为 `T08-执行标记-已释放.md`)|`调整方案/.lock-*` 16 个空��残留已清|未�交改动已按 5 个定� commit �交(HEAD `59f1a89`,**已 push**,远端 `master` 一致)。
� **�未动**:`INDEX.md §二` 的既有失真(`04-90~04-102` 共 13 行物��在表格外 ⇒ `docs-index-stats.py` 统计�到)—— �别人的行有风险,留待专项。
4. **10 份文档转正�档案** ✅ **已完�**(档案 103–112,`4e3a1a4`;正文行覆盖率 98.5–99.0%)。
5. **`MEMORY.md` 精简** ✅ **已完�**(工作区 -26%;**真被截断的是用户级那份**,已按「分层�排�零删除�修好)。
6. **技术侧开工**:按 `docs/覆盖网络/覆盖网络_瓶颈�地方案_20260916.md` 的「��三件事�(presence 改造 + 游��放 L1 + �级内容寻�)开工;**�置�是第 2 �**。
7. **代�分层 / �赖方�**(与覆盖网络并行的一�线)—— ✅ **P0 已完�**(2026-09-16 13:2x,本机):新增 `docs/architecture.md`(四层 `①入� → ②领域 → ③能力 → ④基础` + **R1–R4 判�** + 三�工程纪律)+ `README.md` 文档表登记。
- 📄 评估文档 = 工作区根 `docs/集群与实例/项目代�_分层范�与迭代风险评估_20260916.md`(**§8 已勘误**)。
- 🔴 **勘误(勿��用旧结论)**:所谓「**3 处基础层���赖**�**��立** —— 那几处是**入�层 `cli.ts`** 的�法�赖(`①→③`);实测 `src/*.ts` 里从�目录 import 的**�有 `cli.ts`**,基础层四文件**零 import** ⇒ **真实�规 0 处**。
- ✅ **�执行判�已补(�日)**:`scripts/check-layering.mjs`(`npm run check:layering`,已挂进 `npm run verify`)—— ��扫�四层 + **ratchet 基线**(`scripts/layering-baseline.json`,新增�规 ⇒ 退出� 1;�许�)。**首跑实测 60 个 .ts**:`①24 / ②0 / ③32 / ④4`,**现存�规 5 �**(全是 `③能力→①入�`:`supervisor/proxy.ts`→`web/auth.ts`+`web/middleware/authn.ts`;`fs/{local,remote}-user-fs.ts`+`fs/workspace.ts`→`web/middleware/fs-guard.ts`)。
- � **剩三件(�命中 R7,动工�先出�影�清�)**:① **整改上�那 5 �**(修法已写在 `docs/architecture.md §5.1`)② 补 `src/domain/*`(把 `web/routes` 的业务规则抽出� —— **行为�感�构**,�纯类型)③ 给模�入�补「�责 / �赖� / 被��赖�。
- **顺�建议**:**P0 ✅ → 覆盖网络 S1–S4 → P1**(P1 �阻塞覆盖网络)。
8. ✅ **两�「已定�未修�缺陷 —— �已于 2026-09-16 23:4x 修完并端到端验收**(�� = R2-R4 �� **§12**):
- **① `state.py` �误报(安全信�)**:`state.py:39` 原把 `交接�/.exec-lock` 当**文件**读,而 `--claim-exec` 建的是**目录**(内� `OWNER`)⇒ 永远报「[�] 空闲 ✅ �以动手�⇒ **�个新会�读到的第一个信�是错的**。**已修**:是目录就读 `LOCK/OWNER`(兼容�留的普通文件形�);�验 = ��时正确报「🔴 被�用�。
- **② � 404 / �默回退到错 agent**:�上方第 2 �末段(`src/fs/remote-user-fs.ts` 的 `target()`) —— **已修**。
> ✅ **上一轮已完�(2026-09-17 17:28–18:16,执行棒)**:**� ⑲(presence 节点在线�)已收官并上线** —— 详� §0 最新那�刷新的全部数�;**产物 = `交接�/交接�_presence在线�_20260917.md` §8★ 回报(8.0–8.9 已回填)**。一��:**在线�从"� 5 s 拉 `/status`"改为"连接生命周期 + 订阅推� + 1 s 批�并 + TTL 安全网"**,真机 `counters={subs 1, pushed 3, snaps 2}`��测 **169/0/1**�`--scene all` **12 PASS / 0 FAIL**�S6 本机多实例 **8/8**。⛔ ����� ⑲。
>
> 🎯 **� ⑳ 的动作已定(本棒登记)**:① **修 `OBS-09` �径** —— 「实例�在册 ⇒ **SKIP**(⛔ �是 PASS�也�是�红);在册 ⇒ 必须�达 `PROBE_CODE_SET`�+ 两侧夹具实�;② **�化 presence 真机收益**(`counters.statusHits` 增速 ⇒ `/status` 轮询�幅,给算�与实测);③ presence 线**收��验**(`npm test` / `--scene all --table` / `overlay-probe --table`);④ 处置 `web/server.ts` `translateEndpoint` 的**键�径既存缺陷**(`hostVia` 表键 = 逻辑��传入裸 `hostId` ⇒ � `undefined`)。
> ➡� **下一棒 = � ⑳(执行棒)**,automation **`51cfd12f-918d-4069-81d8-c148fc174282`**(一次性 · **2026-09-17 18:20** = 收� +4 min)。⛔ 未登记更�一棒:**`OBS-09` 的判��径修正属技术实现 ⇒ 本棒自决**,但「**平�是��在 Manager ���自动拉起既有实例**�是**业务��**(�用性 vs 资�/��度)⇒ **待��,⛔ �作为任何一棒的�置**(详�本棒回报的最�一节)。
> ✅ **上一轮已完�(2026-09-17 18:26–18:5x,执行棒)**:**� ⑳(OBS-09 �径 + presence 收益�化 + 收��验 + `translateEndpoint` 处置)已收官** —— 详� §0 最新那�。一��:**OBS-09 改为「在册 ⇒ 必须�达��在册 ⇒ SKIP�**(真机转 SKIP�rc=0;两侧夹具四段实� A/B/C/D)|🔴 **presence 真机收益实测仅 1.10×**(`/status` 轮询几乎照旧;根因 = 订阅新鲜度 TTL 与稳�零帧打架)⇒ **P-1**|三件套零回归(**170/169/0/1** · **14P/0F/1S** · **12P/0S/0F**)|`translateEndpoint` 键�径 = **�立� P-2**(无活跃实例 ⇒ 本棒无 E2E �件)。⛔ ����� ⑳。
>
> ✅ **上一轮已完�(2026-09-17 18:54–19:2x,执行棒)**:**� ㉑(P-1 + P-2)已收官** —— **P-1 判�改为「订阅已建立 ∧ 链路活��**(选 A;B 撞 R11�C �治本),真机门窗�内 Manager 侧 `ΔstatusHits` **13 → 0**�门开关 **0 次翻转**;**P-2** 抽纯函数 + 键�径修正(�测�;E2E 无活跃实例 ⇒ 判�已写入回报);零回归 **174/173/0/1** · **12P/0S/0F** · **15P/0F/1S**;新登记 **P-2b**。⛔ ����� ㉑。
>
> � **(存档)原本轮动作�径**:**� ㉑ · 执行棒 —— 修 P-1(presence 新鲜度判�)+ P-2(`translateEndpoint` 键�径)**(⚠� **按�开工,⛔ 无须�出规划�**)。**开工��** = `交接�/交接�_观测�径与在册缺陷_20260917.md` **§13**(两�缺陷的�� / 候选修法 / 判�全在那里)+ `交接�/交接�_presence在线�_20260917.md` **§8.10**(�⑳ 全部��与原文输出)。**P-1(主)**:病根 = `src/net/relay/client.ts#presenceFresh()` � `now − max(lastSnapAt, lastPushAt) ≤ PRESENCE_TTL_MS(45 s)`,稳� `Δpushed = 0` ⇒ 必然过期 ⇒ 轮询��(实测 10.9 次/分钟 vs 基准 12)⇒ 候选 **A(任何入站帧�心跳�算新鲜)/ B(relay 定期�推 `SNAP`)/ C(拉长 TTL)** 属**技术项,自己�**;**验收** = �测先红�绿 + 夹具能判 PASS 也能判 FAIL + 真机门开关**��翻转**且 Manager 侧 `ΔstatusHits − 探针自身读数 → 0`(给算�与实测)+ 零回归三件套。**P-2(次)**:`hostVia` 键 = 逻辑� vs 传入裸 `hostId` ⇒ 闭包死分支;⚠� **必须先抽出纯函数�谈得上先红�绿**;E2E 需起 `w-106` 实例(当�无 reconciler)⇒ **起�起�就��到�测并把 E2E 判�写进报告**,⛔ �许为凑 E2E 去改平��拉逻辑。**零回归基线**:`npm test` **170 tests/169 pass/0 fail/1 skip**�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**�`overlay-probe --table` **14 PASS/0 FAIL/1 SKIP**(三者都必须带 `--table`)。**硬门**:**D1**(⛔ �改生产值)|**R5**(⛔ �扩大暴露�;106 ssh ���报告)|**R7**(⛔ � commit/push;范围外先报告)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ **�删 `/status` 兜底路径**�⛔ �改 `switcher.ts` 冷�语义�⛔ ��内容分� / 房间层 / 打洞�⛔ ���已收官� ①–⑳。**收�必须**:释� + 陈述�告知 + 登记下一棒(id �自工具返回值)+ 推进入� §0/§2 + 写工作区日志 + 回填对应交接� §8。
> â�¹ï¸� **(已收官 · 结果è§� `交接å�•/交接å�•_presence在线æ€�_20260917.md` **§8.13** + `交接å�•/交接å�•_观测å�£å¾„与在册缺陷_20260917.md` **§16**)åº� ㉓ 本轮动作å�£å¾„(存档)**:**åº� ㉓ · 执行棒 —— P-2/P-2b çš„ E2E 验收(主)+ presence 线收å�£å¤�核(次)**(⚠ï¸� **按å�•开工,⛔ æ— é¡»å†�出规划å�•**)。**开工ä¾�æ�®** = `交接å�•/交接å�•_presence在线æ€�_20260917.md` **§8.11-⑤ / §8.12**(E2E 判æ�®å…¨åœ¨é‚£é‡Œï¼‰ï¼‹ `交接å�•/交接å�•_观测å�£å¾„与在册缺陷_20260917.md` **§14 / §15**(在册缺陷表)。**主:E2E(åº�㉑/åº�㉒ 都å�ªå�šåˆ°å�•测)** —— 用 `mksess-guest.cjs` å¼€**临时 session**(**R4**:用完å�³åˆ ï¼Œâ›” ä¸�用真实账å�·ï¼‰â‡’ `POST /api/dsh/enter` ⇒ å››æ�¡åˆ¤æ�®ï¼šâ“� `enter` **200**;ⓑ 47(Manager)上 `ss -lntp | grep -c ':21000'` = **0**(翻译生效 ⇒ 拨的是 relay 回环è�½ç‚¹ï¼Œâ›” ä¸�是 Worker ä¾§å�£å�·ï¼‰ï¼›â“’ `journalctl -u dshs | grep -c overlay-endpoint` = **0**(失败关闭未被触å�‘);ⓓ 判别器è¯�æ�®ï¼šrelay `/status` çš„ `counters.dial` **有增é‡�**(请求确实出去了,⛔ ä¸�是"没出去"被当æˆ�功)。⚠ï¸� 若实例**èµ·ä¸�æ�¥**(平å�°æŒ‰éœ€æ‹‰èµ·å¤±è´¥ / æ—  reconciler)⇒ **å�ªæŠ¥å‘Šã€�â›” ä¸�许为凑 E2E 去改平å�°é‡�拉逻辑**。**次:presence 线收å�£å¤�æ ¸** —— 核对在册缺陷表(P-1 / P-2 / P-2b 是å�¦**全部关闭**)+ 确认剩余项是å�¦**全部è�½åœ¨ã€Œéœ€æ‹�æ�¿ã€�区**;若是 ⇒ 明确写出「**线内å�¯å�œ**ã€�。⛔ **ä¸�自行给 `B`(内容分å�‘)/「Manager é‡�å�¯å�Žè‡ªåŠ¨æ‹‰èµ·å®žä¾‹ã€�定åº�或开工**(两者å�‡å¾…æ‹�æ�¿ï¼‰ã€‚**零回归基线**:`npm test` **176 tests/175 pass/0 fail/1 skip**ã€�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**ã€�`overlay-probe --table` **15 PASS/0 FAIL/1 SKIP**(三者都必须带 `--table "docs/覆盖网络/å�‚数表_覆盖网络_20260917.md"`)。**硬门**:**D1**(⛔ ä¸�改生产值)|**R5**(⛔ ä¸�扩大暴露é�¢ï¼‰ï½œ**R7**(⛔ ä¸� commit/push;范围外先报告)|🔴 â›” **ä¸�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ **ä¸�删 `/status` 兜底路径**ã€�â›” ä¸�改 `switcher.ts` 冷å�´è¯­ä¹‰ã€�â›” ä¸�å�šå†…容分å�‘ / 房间层 / 打洞ã€�â›” ä¸�é‡�å�šå·²æ”¶å®˜åº� ①–㉒。🔴 **ssh 勘误(åº�㉒ 实测)**:对 **106 必须用别å�� `test106`**(专用密钥)—— 裸 `ssh [email protected]` ⇒ `Permission denied (publickey)`,⛔ 别å†�误判æˆ� MaxStartups é™�æµ�ï¼›47 一律显å¼� `-p 22`。⚠ï¸� **两项ä»�å¾…æ‹�æ�¿** —— `B`(内容分å�‘ / å�—级内容寻å�€ï¼‰ä¸Žã€Œ**Manager é‡�å�¯å�Žæ˜¯å�¦è‡ªåŠ¨æ‹‰èµ·æ—¢æœ‰å®žä¾‹**ã€�⇒ â›” **ä¸�作为任何一棒的å‰�ç½®**。
> ✅ **(已执行收官 · � ㉓)** 原登记:**下一棒 = � ㉓(执行棒)**,automation **`238e99eb-f173-4fe1-8c4a-0b07a6bba2fe`**(一次性 · **2026-09-17 20:08** = 收� +5 min)。⛔ 未登记更�一棒。
> 🛑 **� ㉓ 收��:本线未登记更�一棒**(**线内��** —— 在册缺陷表已清空�E2E 已补�;剩余项**全部为待��**)⇒ 按用户 2026-09-17 明令「待��未定 ⇒ �登记下一棒�,��任一�建。
> ✅ **��已到(2026-09-17 20:2x)** ⇒ �下方 🎯 本轮动作(三项已全部���执行交接�)。
> �� **(存档)� ㉔ 本轮动作�径(已收官 · 结果� §0 最新刷新行 + `交接�/交接�_内容分��级寻�_20260917.md` §8.1)**:**� ㉔ · 执行棒 —— 首�包冷�动的「�级内容寻� + �网段 peer 优先�改造**(⚠� **按�开工,⛔ 无须�出规划�**)。**开工��** = 工作区根 **`交接�/交接�_内容分��级寻�_20260917.md`**(§7 �缀 `49d0f405e08c909e18ba6825d1442b9d`,全文 `3198288c8b0b102d43c87ca9a3a31cd2`,166 行)⇒ 按该� **§4 顺� S0 → S7** 开工。**用户��** = 「**B 内容分�(�级内容寻�)是�立项:�**�(2026-09-17 20:2x)。**�地�法** = 照抄上游 `docs/覆盖网络/覆盖网络_瓶颈�地方案_20260916.md` **§3**(内容�优先级 **本地 → �局域网 peer → �区域边缘缓存 → 区域分�点 → 公网�**;**�级 + 内容寻�**;客户端**校验哈希**;按用户/团队/局域网**分组**;�网段**广播�现**;已加载走 **304**)。**主判�** = **`E1`:版本�布时回�字节数 ≈ 1 份 × 组数**(局域网内多�设备**�回�一次**,而�是 1000 份);其余 `E2`(�拿到一部分也能共享)/ `E3`(�传�化�)/ `E4`(篡改�被丢弃)/ `E5`(跨组�穿�)/ `E6`(��档�点�)/ `E7`(零回归)。🔴 **必须"�级 + 内容寻�",⛔ ���"包级"** —— 包级必须完整下完�能当 peer ��**版本一�全部 peer ��时失效** ⇒ 客户端集体回� = **本线已实�过的"版本一�就全��拉"风暴�因**(命中该� §9-1 回头�件 ⇒ 立刻�下报告)。**零回归基线**:`npm test` **176 tests/175 pass/0 fail/1 skip**(Node 22)�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**�`overlay-probe --table` **16 PASS/0 FAIL/0 SKIP**(三者都必须带 `--table "docs/覆盖网络/�数表_覆盖网络_20260917.md"`)。⚠� 本棒**会新增�测** ⇒ 报「实测值 vs 基线值 + 新增用例数�,⛔ �许拿放宽判�凑绿。**硬门**:**D1**(⛔ �改生产值 —— `RELAY_FAILOVER_*` / `HB_SEC` / burst / `PRESENCE_*`)|**R5**(⛔ �新增公网监�� / �改 nft·nginx)|**R7**(⛔ � commit / � push;**超出该� §3.1 在册文件集 ⇒ �下报告,别扩大**)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ ��房间层 / 打洞实现 / 端到端加密�⛔ ���已收官� ①–㉓。⚠� **命中该� §9 任一�回头�件 ⇒ 立刻�下报告,别扩大**。**收�必须**:释� + 陈述�告知 + 登记下一棒(**� ㉕ · 实例�步拉起**,�� `交接�/交接�_实例�步拉起_20260917.md`;id �自工具返回值)+ 推进入� §0/§2 + 写工作区日志 + 回填该� §8。
>
> 📌 **本线三�执行顺�(已定,⛔ 勿�上抛)**:**㉔ 内容分� → ㉕ 实例�步拉起 → ㉖ 骨干稳定选路**。�由:㉔ 是用户明确"�"的最大瓶颈项且自�闭环;㉕ �赖"真实多实例"�件�**与 ㉔ 的 S6 真机验收共用�一批本机多实例**(�一次�环境);㉖ 收�时�**�用 ㉕ 的接管语义**验"骨干����影�"。
> 📌 **自动接续登记(2026-09-17 20:3x)**:**下一棒 = automation id `91251b14-9ee8-42a9-9d89-8559b7af75ed`**(�称「覆盖网络线-�24执行棒-内容分��级寻��,**一次性**,`scheduledAt` = **2026-09-17 20:42** = 收� +3 min,`nextRunAt` = 1789648920000)⇒ **已登记自动接续,约 3 分钟�自动开新会�;接续点 = 本文件 §2「🎯 本轮动作�**。(已完�的一次性棒:� ㉓ 执行棒 = `238e99eb-f173-4fe1-8c4a-0b07a6bba2fe`。)
> ✅ **上一轮已完�(2026-09-17 20:42–21:5x,执行棒)**:**� ㉔(首�包「�级内容寻� + �网段 peer 优先�)已收官并�地生产** —— 详� §0 最新那� + `交接�/交接�_内容分��级寻�_20260917.md` **§8.1**。一��:**五个模�**(`chunker` / `store` / `source` / `peer` / `runtime`)+ **27 �新�测**全绿;**主判� `E1` 放大比 = 1.0000×(对照组 Before = 4.00×)**,`E2`–`E6` 全绿;**先红�绿 4 例全部命中预期**;零回归 `npm test` **176/175/0/1** � `--scene all` **12P/0S/0F** � `overlay-probe` **17P/0F/0S**(= 基线 16 + 本棒新增 `OBS-17`);已部署 4 处并�� `dshs-relay`�`dshs`。⛔ ����� ㉔。
> �� **(存档)� ㉕ 本轮动作�径(已收官 · ⚠� �程 · 结果� §0 最新刷新行 + `交接�/交接�_实例�步拉起_20260917.md` §11)**:**� ㉕ · 执行棒 —— 「Manager ����步拉起既有实例�**(⚠� **按�开工,⛔ 无须�出规划�**)。**开工��** = 工作区根 **`交接�/交接�_实例�步拉起_20260917.md`**(§7 �缀 `d9d48121e68faa00e1da17ad8fea36ad`,全文 `2c53a018c2d9bfc2c422d0758413a485`,161 行)⇒ 按该� §4 顺�开工。**用户��** = 「**Manager ���是�自动拉起既有实例:�步拉起**�(2026-09-17 20:2x)。🔑 **本�最关键的一��直觉事实(规划棒读��得出,执行棒必须先�现)**:**现在�是"缺 reconciler",而是"�动时主动清空"** —— `src/supervisor/orchestrator.ts:208` 构造函数里 `cleanAllStaleScopes()` 让 **portal �动�清掉全部实例 scope**(档案 30 的"防孤儿"修法)⇒ ��� **N=0�没有任何�接管的实例**。故 **"�步拉起" = 把"清空"��"接管"**(扫� OS 层既有 scope ⇒ 回填 map ⇒ 按节� probe)。⚠� **三�硬约�**:⛔ �许删 `cleanStaleScopes(uid)`(spawn �清� uid,是**档案 30 本体**)�⛔ �许把�动�程改�"什么都��"(孤儿会失控)�⛔ �许"����新 spawn 一�"(�端���字 + 瞬间�起 = **�动风暴**)。**验收** = 该� §6 的 E 系列判�(⚠� � **�步**语义 = 有节��⛔ �是一次性�起)+ **零回归三件套**:`npm test` **176 tests/175 pass/0 fail/1 skip**(Node 22)�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**�`overlay-probe --table` **17 PASS/0 FAIL/0 SKIP**(三者都必须带 `--table "docs/覆盖网络/�数表_覆盖网络_20260917.md"`;⚠� `overlay-probe` 基线**已�� ㉔ 由 16 �到 17**)。**硬门**:**D1**(⛔ �改生产值 —— `RELAY_FAILOVER_*` / `HB_SEC` / burst / `PRESENCE_*`)|**R5**(⛔ �新增公网监�� / �改 nft·nginx)|**R7**(⛔ � commit / � push;**超出该�在册文件集 ⇒ �下报告,别扩大**)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ ��房间层 / 打洞实现 / 端到端加密�⛔ ���已收官� ①–㉔。⚠� **命中该�回头�件 ⇒ 立刻�下报告,别扩大**。**收�必须**:释� + 陈述�告知 + 登记下一棒(**� ㉖ · 骨干稳定选路与加密**,�� `交接�/交接�_骨干稳定选路与加密_20260917.md`;id �自工具返回值)+ 推进入� §0/§2 + 写工作区日志 + 回填该� §8。
> ✅ **(已执行收官 · � ㉕ · �程)** 原登记:**下一棒 = automation id `16f0a3e7-4ef8-497b-aaa8-ce4d15d9353a`**(�称「覆盖网络线-�25执行棒-实例�步拉起�,**一次性**,`scheduledAt` = **2026-09-17 21:52** = 收� +4 min)⇒ **已于 21:5x–22:3x 跑完**;结果� §0 最新刷新行。(已完�的一次性棒:� ㉔ 执行棒 = `91251b14-9ee8-42a9-9d89-8559b7af75ed`。)
>
> 🎯 **本轮动作(2026-09-17 22:34 起,唯一一件)**:**� ㉖ · 执行棒 —— 骨干稳定选路与加密**(⚠� **按�开工,⛔ 无须�出规划�**)。**开工�� = 工作区根 `交接�/交接�_骨干稳定选路与加密_20260917.md`**(**§8 ��缀指纹 `dbcbe633aa1aef92f4c35c77fad3ec11`**,全文 `f85b86234c2ecfaef5b2e43aa40d86a3`,176 行)⇒ 按该� **§4 顺� S0 → S6** 开工。**用户��** = 「入� §4 骨干节点的�务范围:**按照连接稳定高效的方� 数�安全�加密传输**�(2026-09-17 20:2x)。**我的解读(已定项,�推翻)**:**按"A 起步��径按 B 的质�标准建设"�地** —— ��范围� **A**(元数�暴露�最� ⇒ 直接满足"数�安全")�质�与冗余按 **B** 标准(**jitter 选路** + 30%+ 余� ⇒ 直接满足"稳定高效")。🔑 **主判� = 两候选路径中 jitter 更低者被选中��使其 RTT 更高**(⛔ 现行为是按**�康度 / 冷�**排��**�是 jitter** ⇒ **这是主�缺�**)。🔑 **"�加密" = 能力就�**(TLS + 验签 + 内容哈希)+ **元数�最�化**,⛔ **�是**现在就上端到端加密 —— ⚠� **E2E 属真��**(加密 ⇒ �个接收者密文�� ⇒ **与按哈希共享�直接冲�**),**已登记待评估�⛔ 本���**。**验收** = 该� §5 的 **E1–E7** + **零回归三件套**:`npm test` **176 tests/175 pass/0 fail/1 skip**(Node 22)�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**�`overlay-probe --table` **17 PASS/0 FAIL/1 SKIP**(三者都必须带 `--table "docs/覆盖网络/�数表_覆盖网络_20260917.md"`;`OBS-09` 在 47 无活跃实例时为 SKIP = 正常�)。⚠� 本棒**大概率新增�测** ⇒ 报「实测值 vs 基线值 + 新增用例数�,⛔ �许拿放宽判�凑绿。**三�硬门**:**D1**(⛔ �改生产值 —— `RELAY_FAILOVER_*` / `HB_SEC` / burst / `PRESENCE_*` / `DSHS_REHYDRATE_*`)|**R5**(⛔ �新增公网监�� / �改 nft·nginx)|**R7**(⛔ � commit / � push;**超出该� §3.1 在册文件集 ⇒ �下报告�别扩大**)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ ��房间层 / 打洞实现 / 端到端加密�⛔ ���已收官� ①–㉕。⚠� **上一棒(� ㉕)��到�程**(认领逻辑已�地并部署�夹具已实�;**真机 E1 被 `orchestrator.ts#teardown()` 挡�**,打通需改两个**超在册文件集**的文件 ⇒ 已按 R7 �下)⇒ **本� ⛔ �许替 ㉕ 打通该缺��⛔ �许改 `remote-spawner.ts` / `leased-spawner.ts`**;若 ㉖ 需��用 ㉕ 的接管语义(验"骨干����影�"),**�用已�地的认领路径**,并在回报里写明"㉕ �程对本�判�的影�"。⚠� **命中该� §9 回头�件 ⇒ 立刻�下报告,别扩大**。**收�必须**:释� + 陈述�告知 + 登记下一棒(本线三� **㉔→㉕→㉖ 已走完** ⇒ 若无�自决项就明确写出「**本线�� + 剩余项全部�在待��区**�并**�登记**)+ 推进入� §0/§2 + 写工作区日志 + 回填该� §8。
>
> 📌 **自动接续登记(2026-09-17 22:3x)**:**下一棒 = automation id `77b4d0f1-8663-4d08-bb79-1784f67d6999`**(�称「覆盖网络线-�26执行棒-骨干稳定选路与加密�,**一次性**,`scheduledAt` = **2026-09-17 22:34** = 收� +4 min,`nextRunAt` = 1789655640000)⇒ **已登记自动接续,约 4 分钟�自动开新会�;接续点 = 本文件 §2「🎯 本轮动作�**。(已完�的一次性棒:� ㉕ 执行棒 = `16f0a3e7-4ef8-497b-aaa8-ce4d15d9353a`。)
>
> 🔴 **待你��(� ㉕ �程�留 · ��编� · 候选竖排)** —— E1(**真机实例**���存活)�打通,必须先让**两处� `LocalSpawner`** 的退出路径�止�实例:
> **A** �改 `LocalSpawner.teardown()`:**优点** = 文件集最�(仅本�在册文件,零授��本);**缺点** = **Manager 跨机���会收掉 Worker 实例** ⇒ **诉求��立**。
> **B** 三处�改(`LocalSpawner` + `RemoteSpawner` + `LeasedSpawner`):**优点** = **唯一真正达�诉求**(跨机��也��);**缺点** = **超出该� §3.1 在册文件集�需你授�**,且实例**���进程退出回收**(孤儿治�改由认领路径承担)。
> **C** env 开关�度:**优点** = ��度��回退;**缺点** = **跨机那处照样�改**(默认开 = 等于 B;默认关 = 等于�生效)⇒ **无增�价值**。
> **我的倾� = B**(A �达�目标�C 无增�价值)。⛔ ����动 `LocalSpawner` / `remote-spawner.ts` / `leased-spawner.ts`,也⛔ �让 ㉖ 顺手�掉。
> ✅ **上一轮已完�(2026-09-17 19:33–20:0x,执行棒)**:**� ㉒(P-2b + P-1 长窗�测)已收官** —— 详� §0 最新那�。一��:**P-2b 修好**(候选链**两级 → 三级**,补 ②' 级订阅推��点,与 `addressOf` �级对�;先红�绿原文级;`T37/T38` 新增;⛔ 未越出 3 个在册文件)|✅ **P-1 长窗 706 s �测通过**(Manager 侧 `ΔstatusHits = 0`�门 **0 次翻转**�raw �幅 **141.2×**)|三件套零回归(**176/175/0/1** · **12P/0S/0F** · **15P/0F/1S**)|已部署 4 处 lib + 回滚点 `/opt/dsh/backups/seq22-20260917-195602/`。⚠� **E2E �未�** ⇒ 交� ㉓。
> � **(存档)原本轮动作�径**:**� ㉒ · 执行棒 —— 修 P-2b(主)+ P-1 的长窗真机�测(次)**(⚠� **按�开工,⛔ 无须�出规划�**)。**开工��** = `交接�/交接�_观测�径与在册缺陷_20260917.md` 在册缺陷表的 **P-2b** 行 + `交接�/交接�_presence在线�_20260917.md` **§8.11**(�㉑ 全部��)。**P-2b(主)**:`src/net/relay/endpoint-target.ts#relayEndpointTarget` 的候选链�有「① 拨��点 → ② relay `/status` 快照�**两级**;�㉑ 修好 P-1 � `/status` 快照路径**趋冷** ⇒ 若拨�池分�出槽�而**订阅推�里有�点**,�会判"实例��达(失败关闭)"⇒ 候选 = 把 `presenceLocalPort` �� **②' 级**(与 `addressOf` 三级链对�)。**验收** = �测先红�绿 + 三级优先顺�**�支�断言** + 零回归三件套。⚠� 属**行为�新增** ⇒ 若�现�超出 `endpoint-target.ts` / `web/server.ts` / 测试这三个在册文件集 ⇒ �下报告(R7)。**P-1 长窗�测(次)**:�㉑ �用 **67 s 短窗**验�过「门 0 次翻转�⇒ 本轮� **≥ 10 min** 长窗,给出算� `Manager 侧 = 窗�内 ΔstatusHits − 探针自身读数` 与相对基准 `60 000 / RELAY_STATUS_POLL_MS` 的**�数**;⚠� 长窗内门**�翻转** ⇒ P-1 未真正解决 ⇒ **立刻�下报告**,⛔ �许改生产值凑数。**零回归基线**:`npm test` **174 tests/173 pass/0 fail/1 skip**�`--scene all --table` **12 PASS/0 SKIP/0 FAIL**�`overlay-probe --table` **15 PASS/0 FAIL/1 SKIP**(三者都必须带 `--table "docs/覆盖网络/�数表_覆盖网络_20260917.md"`)。**硬门**:**D1**(⛔ �改生产值)|**R5**(⛔ �扩大暴露�;106 ssh ���报告)|**R7**(⛔ � commit/push;范围外先报告)|🔴 ⛔ **�许把 `RELAY_FAILOVER_COOLDOWN_MS=0` 写进任何回滚 / 演练 / 夹具路径**。⛔ **�删 `/status` 兜底路径**�⛔ �改 `switcher.ts` 冷�语义�⛔ ��内容分� / 房间层 / 打洞�⛔ ���已收官� ①–㉑。⚠� **两项�待��** —— `B`(内容分� / �级内容寻�)与「**Manager ���是�自动拉起既有实例**�⇒ ⛔ **�作为任何一棒的�置**。
---
## 3. 关键决定(**已定,勿�上抛**)
1. **方案��技术实现;跨境数��规由使用者自行考虑**(用户原�)⇒ 选型�为�规让路�跨境�设��⛔ ��把�规当�置�件。
2. **�机自用 ≠ �需�互�**(用户原�:「�机用也�互�,这正是建立覆盖网络的目的�)⇒ **租户维度收窄 ≠ 网络维度收窄**。
3. **覆盖网络按异构设计**:中继按 **45% 设计 / 55% 留余�**(�是�构�设的 15%);**必须补 443/TCP 兜底**;有公网 IP 的节点�格为中继候选。
4. **��状��点**:归属/租约/骨干资格�能控制�写;会�/中继�多实例。
5. **形�已��**:�机自用为默认;"当�务器给他人用"的多人维度已放弃。
6. **游��点是 MMORPG(2D/2.5D)/ MUD / 传奇类** ⇒ 判定上修为"最匹�",� 3D 强实时竞技。
## 4. 待你处�(**在册挂起项�下首�**;历�待��项�已�� ⇒ 已清空)
> � **在册挂起项(唯一)= D8 云安全组乙-1** —— 2026-09-18 16:1x 用户明令:「**这个测试先记下��续在处�**�。状� = **已获批准(09-18 15:4x)· 待人工�地 · ⛔ �进排棒队列**。
> - **��的事(原文级)**:两朵云�加一�**入方�**规则 —— **阿里云**(47 · **美国硅谷 `us-west-1`** · 实例 `i-rj99af19cibck1ge93tq`):`UDP` 端� `21100/21115` � � **`106.54.21.172/32`**;**腾讯云**(106 · **上海 `ap-shanghai`** · 实例 `ins-3q6k1p8t`):`UDP` 端� `21100-21115` � � **`47.77.182.89/32`**。🔴 **⛔ 零个 `0.0.0.0/0`**(�任何拆分 / 等价写法);⛔ �放 TCP 段;⛔ �动 `nft` / `nginx`。**�存�生效,⛔ 无需��实例。** �步�作 + 定�信� ⇒ `交接�/交接�_覆盖网络直连与P2P_20260918.md` **§8.11-④-补**。
> - **为什么 🛑 �能代� / �能自动化**:本机 + 47 + 106 **�无云 API 凭�**(47 `aliyun` CLI 在但 `~/.aliyun/config.json` **�存在**�metadata `ram/security-credentials` = **404**;106 **无** `tccli`�metadata `cam/security-credentials` = **404**)+ 连接器市场内**无**相关 Connector ⇒ ⛔ 按本线纪律**�索� AK/SK**。
> - **�地�第一动作(�先��本线会���)**:**��实测�测**(当�基线 **47→106 � 21 收 0** � **106→47 � 28 收 0**)⇒ 探针 `OBS-27/28` �跑 ⇒ �数表 §11 补记(� §10 指纹现算)。⚠� **⛔ ��为它登记接续棒**(阻塞项需人�作,无人值守�试无�义)。
> ✅ **三项�已��并����执行交接�**(2026-09-17 20:2x 用户原�):
> ① **「B 内容分�(�级内容寻�)是�立项:��** ⇒ `交接�/交接�_内容分��级寻�_20260917.md`(� ㉔)
> ② **「Manager ���是�自动拉起既有实例:�步拉起�** ⇒ `交接�/交接�_实例�步拉起_20260917.md`(� ㉕)
> ③ **「入� §4 骨干节点的�务范围:按照连接稳定高效的方� 数�安全�加密传输�** ⇒ `交接�/交接�_骨干稳定选路与加密_20260917.md`(� ㉖)
>
> ⚠� ③ 用户**未按 A/B 二元选**,而是给了**目标�径** ⇒ 我的解读(**已定项,�推翻**):**按"A 起步��径按 B 的质�标准建设"** —— ��范围� **A**(元数�暴露�最� ⇒ 满足"数�安全")�质�与冗余按 **B 标准**(jitter 选路 + 30%+ 余� ⇒ 满足"稳定高效")。**⛔ �续任何一棒�许�把这三项当"待��"上抛。**
>
> ✅ **2026-09-17 23:1x / 23:3x �一轮三问 ⇒ 亦已全部答�**(**�在本区**,登记在 §2 顶部 🎯 行):**① �㉕ E1 缺� ⇒ 最终执行 `B`(三处 `teardown()` �改)+ `C` 登记为架构目标**(⇒ � ㉘ � A;⚠� 用户 23:2x 曾答「选 C��23:3x 更正为「选 B�)|**② �㉖ E3 范围 ⇒ 选 B**(�许改 `relay-tunnel.ts`�`web/server.ts` ⇒ � ㉗)|**③ E2E 加密档� ⇒ 选 C 组密钥加密**(⇒ � ㉘ � B)。⇒ **本区(�本轮)没有任何未决项**。
> 🗃 **原登记(存档 · 已被上述���代)**:**骨干节点的�务范围**:A ��务自己�下设备(优点:无资�/计费纠纷������;缺点:骨干少�冗余低)| B �务全网(优点:骨干多��用性高�中继容�易满足;缺点:他人��跑在你的机器上�元数�暴露�被攻破影��大)。
> **倾� A→B �进**。详� `docs/覆盖网络/覆盖网络_骨干层方案_20260916.md` §7。
---
## 5. 回滚点
- **R5(本轮)三层回滚,�秒级**(详�交接� §11.7):
① **Manager 拨�通�** = 删 manager drop-in 里 `DSHS_RELAY_DIAL_*` 5 行 → `daemon-reload` → `restart dshs`(`addressOf` 自动回退到 R3 的 `/status` 快照路径,"relay �机"�设回�);
② **relay 侧白��** = 删 `dshs-relay.service.d/dialers.conf`(�删也行:无拨�方接入 ⇒ 行为� R3);
③ **代�级** = revert `src/net/relay/*` + `src/config.ts` + `src/web/server.ts` → `npm run build` → scp `lib/` → `restart dshs`。
⚠� 备份:`/etc/dshs/relay-keys.json.bak-r5-20260916-224838`�`/etc/systemd/system/dshs.service.d/cluster.conf.bak-r5-20260916-224838`(� `.bak-r5swap-20260916-225546`)。
- **缺陷 A1/A2(本轮)回滚**(详�交接� §12.5):A1 = `cp -a /opt/dshs/lib-bak-a1-20260916-232914/lib/. /opt/dshs/lib/` → `systemctl restart dshs`(回到"� 404"�现);A2 = 还原 `state.py` 第 1 节为"按文件读"(**�建议**)。
⚠� **A1 的备份目录�有这一份**(推�过程中滚动过两次,��文件以�者为准,两次都在�一个目录里)。
- **有��留�⛔ 别当"没�完"**:R5 新增的 `127.0.0.1:25000..25063` **仅回环**(公网零新增);relay �为端�绑动�回环�(`exposeLoopback` **有�未关**,�由�交接� §11.5)。
- 文档侧:10 份为**新增**;被修改的 3 份(客户端化部署方案 v3 / 桌�客户端方案 v1 / �行性评估)改动�为**追加或标注**,���还原。
- �务器侧待�核事实:控制�机规格(1.8 GB / 2 核 是 09-08 旧记录);47↔106 跨云实测 **~22 KB/s**。
> 📌 交接�指纹(2026-09-16 23:4x):`tail -n +4 交接�/交接�_relay�地R2-R4_20260916.md | md5sum` = `b110b5c4e3eb8afcac08af537d333c99`(**本�已执行完毕**:R2→§9�R3 Step 0→§10.4�R3 本体+R4→§10.5�**R5→§11**�**缺陷 A1/A2→§12**)
> 📌 **② 的交接�**(**已执行完毕**):`交接�/交接�_网抽象与地�规划R6_20260916.md`,指纹 `0d3f1f305e9e6219afa97cdfecff05ba`。
> 🟢 **2026-09-17 07:4x 更新(② 收官)**:**Step 1(P0-1 网抽象)/ Step 2(P0-2 引导三级链)/ Step 3(P0-3 �字解�与授�)全部�地并端到端验收** ——
> ���该�的「**执行进度**�段(�判�命令与实测输出)。**② �关闭 ⇒ 它��是下一棒的开工��**(指纹留��用于"文档有没有被改过")。
> ⛔ **���� Step 1 / Step 2 / Step 3**。下一棒按 `清� §五` 往下:� ③ 一机一钥 + 信任根(P0-4)/ � ④ 443/TCP 兜底 / � ⑤ �数表·观测·��评估
> —— **开工顺�已于 2026-09-17 07:5x 定为 �③ → �④ → �⑤**(�由� §0)。