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,104 @@
# 执行摘要 — IM 线 · 棒次记录
> automation id `b4312852-71ae-41a1-9304-a857cb1d7eba`|线 = **IM 线**
---
## 第 10 棒(收口棒)· 2026-09-23 12:0x–12:2x · 会话名 `IM线-第10棒`
| 项 | 结果 |
|---|---|
| 全局执行锁 | 首抢命中 `插件投放与分库线-执行棒⑧` ⇒ 按 R9 停手报告(未删锁未接管);12:0x 复抢成功 → 收尾已放 |
| 动作 | 把第 9 棒上抛的**三项待拍板**按用户拍板固化 |
| 判定 | ✅ **完成**(决策面落定;⛔ 未落码 —— 三项都是"先定方向再动工"的决策项) |
| 下一棒 | ⛔ **未登记** —— 动工范围取决于**先做哪一项**,属优先级拍板 ⇒ 停手等 |
### 用户拍板三条
1. **E2EE 形态档位 = 强度档**(「强度档是否影响性能,影响较小就用强度档」)
2. **房间上限与预算 = 按建议固化**(「按照建议执行」)⇒ `2000` / `10` / `30 s` 转正式值
3. **连接层 = 候选 B(引入 Centrifugo 类)**(「2 选 b」)
### 核心产出:强度档性能影响的量化回答
**CPU 维度不影响**:AES-GCM 0.5–2 µs + X25519 ~50 µs + HKDF 1–2 µs ≈ **55 µs/条**,vs 扇出 P99 **23 µs** ⇒ 占 1 s 事件循环预算 **0.006%**、50 msg/s 下占单核 **0.3%**。
**三处结构性代价(不受"影响较小"覆盖)**:
1. 棘轮状态**必须每设备持久化** —— 丢了永久断链 ⇒ 新增持久化表 + 恢复逻辑
2. 🔴 **群聊必须 Megolm 化(每发送者一条链)** —— 误用严格双棘轮 ⇒ 扇出 `O(N)`→**`O(N²)`**,**这才是会压垮连接层的那条**
3. 🔴 **agent 代答模型重做** —— `im_agent_grants` 在强度档下不成立 ⇒ agent 升格一等成员设备 ⇒ **D 单 §四-2 重写**、E4-6 断言改写
### 落点(文档面)
选型单新增 **§十四 用户拍板落定**(14.1 档位+量化 / 14.2 三处代价 / **14.3 九条连带重写清单** / 14.4 数值固化+适用前提 / 14.5 连接层 B+三条硬实现项 / 14.6 未决)|A 单 §四-7 与 §十-4 加状态块(⛔ 技术结论未改)|入口 §4 标已拍板 + §0 追加状态行。
### ⚠️ 硬约束(下一棒必须遵守)
**档位重写(选型单 §十四-14.3 的 9 条清单)先于任何 E2EE 代码动工** —— E-4 八条断言里 **E4-4/E4-6/E4-8 三条是档位相关的**,抢跑等于白写。
### 仍悬(⛔ 未替用户拍)
- **跨区可见性默认**(倾向"互不可见")—— 与三项拍板解耦
- 强度档下 agent 代答**具体形态**("一等成员设备"撤销语义、agent 间是否互见)—— 属 D 单重写面
---
## 第 9 棒(执行棒)· 2026-09-23 06:2x–06:3x · 会话名 `IM线-第9棒`
| 项 | 结果 |
|---|---|
| 全局执行锁 | ✅ 抢到(`IM线-第9棒`,退化为全局独占)→ 收尾已 `--release-exec` |
| 动作 | 开工 **E 单**(`交接单/IM群组-E-会话界面UI.md`)—— IM 线 A–E 五单**最后一单** |
| 判定 | ✅ **完成**(本机交付面);⚠️ **线上可见面未做**(本棒边界明令不部署) |
| 下一棒 | ⛔ **未登记** —— A–E 五单全完 ⇒ 只剩 §4 待拍板项 ⇒ **停手等拍板** |
### 关键读数
- `npm run build` rc=0|`node --check` client.js / index.js 双通过
- `node --test test/im-ui.test.mjs` = **29 / 29 过 / 0 败**
- `npm test`(Node 22)rc=0 = **420 / 418 过 / 0 败 / 2 跳过**(基线 366 ⇒ 本棒 +29)
- `node scripts/check-layering.mjs` rc=0 = **✅ 无新增违规**
### 产出(本机代码面,`D:\github\dsh_shenxian`)
- **步 0 前置缺口已补**:`src/db/schema.ts` 追加 **v16**(`rooms.discoverable` + `rooms.join_policy`,**显式列路线**)
⚠️ E 单写的是 v15 但**实测 v15 已被别的线占用 ⇒ 取 v16**
- `src/im/{types,store,hub}.ts` 增量(`joinRoom` 判序 / `presenceSnapshot` / 双后端 `1|0` 归一 / 下推)
- `src/web/routes/im.ts` **新增 4 条端点**(发现列表 · 自助加入 · 成员表 · 改自己)
- 新建 **`poc/im-conversation-tabs/`** 四件(`lib/client.js` **1228 行** = 会话区 tab 接管主交付)
- 新建 **`test/im-ui.test.mjs`(29 用例)**|改 `test/im-store.test.mjs`(ratchet)|`package.json` 登记
### 两条值得留档的坑
1. **迁移号 v15 被别的线占用** ⇒ 取 **v16**(与「取下一个空号」纪律一致)。
2. **抽数组字面量的截断陷阱**:`[data-slot="…"]` 自带 `]` ⇒ 用 `indexOf(']')` 抽会**提前截断**、断言形同虚设(首版踩过)。解法 = **逐行抽取 + 行首 `]` 收尾 + 钉死项数**。
### 未完成 / 卡点
🔴 **生效链路第 ④ 关「线上可见面」未做** —— 本棒边界明令「⛔ 不部署到 47/106」,且实例内 client bundle 投放属**插件投放线**(候选池 → 用户自助启用 → **重启实例**)⇒ **E 单 ⛔ 不能判「已交付」**,需投放线接力。
---
## 19:0x|状态应答(⛔ 非执行棒)· 会话 = 用户交互轮
| 项 | 结果 |
|---|---|
| 动作 | 回答用户「im 的相关任务完成了吗」⇒ 先只读取证再作答 |
| 判定 | **未全部完成**:A–E 代码面已落 + 四项拍板已定;**第 12 棒(动工连接层 B 案)零开工**;**E 单线上可见面卡投放线** |
| 全局执行锁 | 未占用(`.exec-lock` 目录不存在)⇒ 无并发冲突 |
| automation | ✅ **库已于 18:55 由 app 自愈**(旧库改名 `*.corrupt-2026-09-23T10-55-47-845Z` + 落 `.recovery-pending`);**历史记录全丢**(剩 2 条 08-27 旧条目) |
### 本轮落地
- ✅ **补登下一棒** = automation `89e11630-4a06-41ca-bfc7-3c66ff4d8a53`(`IM线-第12棒(动工连接层 B 案)`· 一次性 · 19:10 · `cwds` 为反斜杠原生路径)
- ✅ 入口 §0 追加状态行 + §2 编号更正(第 11 棒 ⇒ **第 12 棒**)+ 「登记受阻」块标已解 + 手工接力段标存档
- ✅ `MEMORY.md` 瘦身 8191 → **7,713 字符**(原超注入上限)
### 零开工取证
`grep -ril "centrifugo|ImConnectionBackend|connection-backend" src poc test` ⇒ **零命中**;`src/im/` = 8 文件 + `sdk/`。
### 新发现的缺口(⛔ 未认领)
投放线入口里 **`im-conversation-tabs` 零命中** ⇒ E 单的线上投放没落在任何一方待办上。