chore(工作区): 纳入版本控制基线(回收 411 MB 过程产物)

回收 411 MB(470 M → 58.8 M),全部经回收站,可恢复:
- 待清理/(146.2 M,含 relay 分片 128 M 与 42 项过程目录)
- tmp/(32.4 M,按接续棒命名的过程临时区)
- .workbuddy/tmp/(39.5 M)
- 4 份 workbuddy.db 冗余副本(101 M,09-23 事故的坏副本 / 抢救产物)
- tmp/im16/gw/centrifugo 二进制(63.9 M,可重下)+ 缓存残留

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

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

No files matched your search

@@ -0,0 +1,22 @@
# 自动化执行记忆 · 序㊵ 执行棒(覆盖网络 P2 · S5:直连候选交换与打洞探测)
> 只记「高层执行摘要 + 可复用教训」,⛔ 不放正文/交付物全文。
## 2026-09-18 12:33–13:2x · 第 1 次执行 · ✅ 完成(判定 = 线内可停 · D8 待拍板)
**结果**:P2/S5 落地生产,判据 D1–D6 先红后绿全过,零回归三件套全绿 ⇒ 探针 **28P/0S/0F**(基线 25P,+3 = 新增 `OBS-26/27/28`)|`npm.cmd test` **201/200/0/1**|`--scene all` **12P/0S/0F**。**唯一红 = D8 云安全组未实施**(需用户给控制台访问方式/审批)。
**收尾四件套**:交接单 §8 全节(§8 前前缀 `8925c2460810c6dc5cdbc075b6cdaed2` 回填后逐字不变 ✅)|参数表 §11.8(§10 指纹 `d408d640…` → `6b37bfd506758d882d9f803678f85d23`)|入口 §0+§2|工作区日志|`--release-exec` 释锁。
**下一棒**:序㊶ 执行棒(P2·S6:`peer` 接线 + D7 块 id 复算),automation `32c2cde1-e5c4-427a-9b9b-e8adab1c8725`,2026-09-18 13:34。
**教训(⛔ 可复用,已同步进 MEMORY.md 与下一棒 prompt)**:
1. 🔴 **`overlay-failover-drill.cjs --scene all` 内含 120 s + 90 s 两段观察窗口 ⇒ ⛔ 不许套小于 ~8 min 的外层超时**。本次我加了 `timeout 300` ⇒ 进程被 SIGTERM ⇒ 末尾 `restore(h47)/restore(h106)` 未执行 ⇒ **106 `dshs-relay` 被留在停机态约 4 min**。发现后 `systemctl start` 复原;该窗口门户/实例面全程 200、无业务中断证据。**处置正确,但这类"我给工具加超时把工具打断"的坑要牢记**。
2. 🔴 **自造缺陷两条(均在本棒新建的观测脚本内)**:
- `--ss` 是**布尔开关**却用"只认字符串"的 `opt()` 解析 ⇒ 该腿恒 `null`(**死代码**);且正对照硬编码 `null` ⇒ "关闭态 0 行"在**测量坏了**时也是 0 = **潜在假绿**。修 = 按"出现过"判定 + **新增正对照**(真绑一个口、要求 `ss` 必须看得见)。
- 从 `direct/index.js`(**选择性桶导出** —— import 了常量供内部用但**不向外转发**)取 `DEFAULT_PUNCH_DEADLINE_MS` / `DEFAULT_DIRECT_COOLDOWN_MS` ⇒ `undefined` ⇒ `Number()` = `NaN` ⇒ 冷却构造期断言抛。⚠️ 报错文案 `收到 null` 是**假象**:`JSON.stringify(NaN) === 'null'`。修 = 改从 `punch.js` 取 + **启动期硬断言**(缺常量 ⇒ 具名 `exit 2`)。
⇒ **通用规则:从"桶/汇总模块"取常量前先确认它真的 re-export;宁可断言,⛔ 不要静默取缺省。**
3. ⚠️ **夹具"先红后绿"的 diff 要算上汇总行**:3 条判据 `PASS→FAIL` 会让末尾的"❌ N 项红"计数行同时变化 ⇒ `diff` 是 **4 行**,不是 3 行。报数时要分开说清(判据行 vs 派生行)。
4. ⚠️ **D8 的"实施"不是我能自决的**(需云控制台凭据/审批,属 §1 边界外第 ④ 类)⇒ 正确做法 = 给出**逐条规则清单**(源必须是**对端节点 IP `/32`**)+ **实测"被挡"证据**(双向发 20 收 0)+ 明确写"未实施 + 理由 + 回头条件",⛔ 不索取 AK/SK、⛔ 不做试探性开洞。
5. ✅ **有效的取证手法(可复用)**:用**双向 UDP 收发计数器**(各发 20 收 0)证明"云安全组挡 UDP 入站",比"观察器开着零收包"更强、且能区分**方向**;`nft input policy = accept` 用来证明"⛔ 不是 nft"。
6. ✅ **`--scene all` 跑完后的既定复原程序**:若 47 视角 `endpoints=[] / used=1` ⇒ **停 / 启 106 `dshs-relay`**(~24 s)逼 worker 按候选链回落 47 ⇒ 探针回绿(⛔ 不重启 worker、⛔ 不换实例)。本次照做有效。