464 lines
342 KiB
Markdown
464 lines
342 KiB
Markdown
# 接ç»å…¥å�£ · 覆盖网络线(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)。
|