引用纠偏: 工作区 16 件旧路径 AI技能->AIProject + 接续包 §6 执行记录
This commit is contained in:
1 parent
12e9497609
commit
9a2896f179
19 files changed
+64
-32
No files matched your search
+11
-11
@@ -4,7 +4,7 @@
|
||||
> **开线棒**:会话 `aliyun-dsh-server` · 2026-09-22 16:4x(用户当场提要求,本会话因上下文过高收口开线)
|
||||
> **上游文档**(文档库 = `D:\github\dsh_shenxian\dsh-server-docs`):`调整方案/142-IM群组对话-需求基线与方案.md`(需求基线)+ 五份交接单 `交接单/IM群组-{A,B,C,D,E}-*.md`(均已按 09-22 两份架构定稿对齐,各单 §〇)
|
||||
> **代码基线**:`D:\github\dsh_shenxian`(生产口径 `dshs`)
|
||||
> 🔴 **cwds 判据(2026-09-23 加;**优先级高于本文任何历史记录**)**:本线接续棒的 automation `cwds` 一律写 **小写盘符 + 反斜杠** —— `e:\ProgramData\AI技能\aliyun-dsh-server`。宿主**逐字落库、⛔ 不规范化**(连大小写也不),写法不同即裂成**两个同名会话分组**(09-22 正斜杠裂一次、**09-23 大写盘符又裂一次**)。⛔ **下文出现的 `cwds = E:\…`(大写盘符)全是误写的历史记录,登记新棒时不得照抄其大小写。**
|
||||
> 🔴 **cwds 判据(2026-09-23 加;**优先级高于本文任何历史记录**)**:本线接续棒的 automation `cwds` 一律写 **小写盘符 + 反斜杠** —— `e:\ProgramData\AIProject\aliyun-dsh-server`。宿主**逐字落库、⛔ 不规范化**(连大小写也不),写法不同即裂成**两个同名会话分组**(09-22 正斜杠裂一次、**09-23 大写盘符又裂一次**)。⛔ **下文出现的 `cwds = E:\…`(大写盘符)全是误写的历史记录,登记新棒时不得照抄其大小写。**
|
||||
|
||||
---
|
||||
|
||||
@@ -131,7 +131,7 @@
|
||||
- ✅ **2026-09-23 19:0x|automation 库已自愈(app 自动重建)+ 第 12 棒接续棒已补登** ——
|
||||
**库状态(实测)**:`workbuddy.db` **magic 已恢复为 `SQLite format 3`**(mtime **18:55**);损坏库被 app 自动改名留档 = `workbuddy.db.corrupt-2026-09-23T10-55-47-845Z`(**35,377,152 B**,与既有诊断读数同尺寸)+ 同目录留 `workbuddy.db.recovery-pending`(`state=PENDING` / `walReplayed=null`)⇒ **app 自己走了「重建空库」那条路**(= DB 修复讨论里的**案 A**)。
|
||||
🔴 **代价**:**历史 automation 记录全丢** —— `list` 只剩两条 2026-08-27 的旧条目 ⇒ 其余各线的接续棒**需逐线重登**。
|
||||
**补登结果**:第 12 棒(动工连接层 B 案)已登记 = automation **`89e11630-4a06-41ca-bfc7-3c66ff4d8a53`**(一次性 · `scheduledAt = 2026-09-23T19:10` · `cwds = E:\ProgramData\AI技能\aliyun-dsh-server`)⇒ 下行「登记受阻」块**已解**。
|
||||
**补登结果**:第 12 棒(动工连接层 B 案)已登记 = automation **`89e11630-4a06-41ca-bfc7-3c66ff4d8a53`**(一次性 · `scheduledAt = 2026-09-23T19:10` · `cwds = E:\ProgramData\AIProject\aliyun-dsh-server`)⇒ 下行「登记受阻」块**已解**。
|
||||
🔴 **B 案零开工取证(本行实跑)**:`grep -ril "centrifugo\|ImConnectionBackend\|connection-backend" src poc test` ⇒ **零命中**;`src/im/` 仍为原 8 文件 + `sdk/` ⇒ 与「第 11 棒收口时⛔尚无一行按新档位改动的代码」一致。
|
||||
🔴 **编号口径更正(本节内两处撞号)**:§2 那段标题与下行受阻块原写「第 11 棒」,与 §0 已完成的第 11 棒(①档位重写 + 收口)**撞号** ⇒ 本节起**下一棒 = 第 12 棒**(与手工接力模板的会话名 `IM线-第12棒` 一致)。
|
||||
🔴 **E 单线上可见面的缺口(本行实查,⛔ 尚无人认领)**:投放线入口 `接续入口_插件投放与分库线_20260922.md` 里 **`im-conversation-tabs` 零命中** ⇒ 该投放**没有落在任何一方的待办清单上**(本线 §0/§3-③ 说"须投放线接力",投放线入口没登记它)⇒ **第 12 棒收口时须显式登记到投放线**(或本线自行排棒)。
|
||||
@@ -148,7 +148,7 @@
|
||||
⚠️ **口径更正(本棒)**:「心跳超时率 = 0」**不能**直接用 `e2sum.py` 的 `hbTimeoutRate`(它把爬坡期建立的连接也算作"应完成整轮" ⇒ 结构性非零:1k 0.0005 / 5k 0.0067 / 10k 0.042–0.052)⇒ **权威判据应改为「服务端 `num_clients` 不下降 + worker `closed=0`」**(E-7 的 `conn` 口径两条都满足)。
|
||||
⚠️ **未完成项**:在线态取数**未接线**(`stats().presenceIngest='not-wired'`)|gateway **未部署**(47/106 一行未动)|**客户端侧垫片未接线**(被 P0 阻塞)|50k 以上容量为线性外推、CPU 未测。
|
||||
⛔ 未 commit/push/scp|⛔ 未部署|⛔ 未动 47/106|⛔ 未引入新依赖|⛔ 未改 A–E 五单结论|⛔ 未替用户拍 §14.6 的未决项。
|
||||
**下一棒(唯一)** = **第 13 棒 · 执行棒** = automation **`31f0b0d7-f652-4081-88d0-3aec69136949`**(一次性 · `scheduledAt = 2026-09-23T19:43` · `cwds = E:\ProgramData\AI技能\aliyun-dsh-server`)= **修 §15.7 的 P0(客户端协议对齐 + 保活垫片接进客户端传输层)**,动作见 **§2「⏭️ 第 13 棒」**。排它的理由 = **先修掉阻塞「已交付功能」的缺陷**(属客观可判,非业务优先级);② 部署 + ③ 在线态接线排在它之后。
|
||||
**下一棒(唯一)** = **第 13 棒 · 执行棒** = automation **`31f0b0d7-f652-4081-88d0-3aec69136949`**(一次性 · `scheduledAt = 2026-09-23T19:43` · `cwds = E:\ProgramData\AIProject\aliyun-dsh-server`)= **修 §15.7 的 P0(客户端协议对齐 + 保活垫片接进客户端传输层)**,动作见 **§2「⏭️ 第 13 棒」**。排它的理由 = **先修掉阻塞「已交付功能」的缺陷**(属客观可判,非业务优先级);② 部署 + ③ 在线态接线排在它之后。
|
||||
✅ **收尾五件全过**:① 结果回填(选型单 §十五)② 域锁已 `--release-exec`(复核 `交接单/.locks/` 为空)③ 下一棒已登记(= 上行 automation `31f0b0d7`;automation 库本轮实测**可写**)④ 入口 §0/§2 已推进 ⑤ 当日日志 `.workbuddy/memory/2026-09-23.md` 已追加。
|
||||
✅ **顺带办掉一条跨线缺口(本行第 136–137 行)**:E 单投放面此前"两不管" ⇒ 已在**投放线入口 §5「本线后续」新增第 5 条**(写明"硬阻塞 = 本棒 P0")+ 改正该入口 §0 末行「automation 不可用」的**过时前提**(库 18:55 已由 app 重建)。⚠️ **该投放的归属仍未认领** ⇒ 已列进 §2「第 13 棒」的连带待办。
|
||||
⚠️ **编辑事故与修复**:插入 §2「第 13 棒」块时**误把 §3 的标题行当作了 `old_string`** ⇒ 一度删掉 `## §3 已取事实…`;本棒已复原,`grep "^## §"` 复核 §0/§1/§2/§3/§4/§5/§6 **齐全**。教训:用 Edit 插块时 ⛔ 不要把**下一节的标题行**当锚点。
|
||||
@@ -162,9 +162,9 @@
|
||||
**三处口径偏离(已逐条写进回报 §6)**:① `resume` 的 `since` **不用** `subscribed` 回带的 `cursor`(那是**房间最新 seq** ⇒ 补拉取出 0 条),改用**本端自己的进度** `cursorRef.current` ② 发送路径**保持 REST**(入口那条以"bundle 没有发送路径"为前提,**该前提不成立** ⇒ ⛔ 未做未被要求的路径变更)③ REST `pull(cursorRef.current)` **保留不动**(E 单既有判据 `E-9c`),与 WS `resume` 并存且按 `m.id` 去重。
|
||||
🔴 **未完成项**:**E 单线上可见面(生效链路第 ④ 关)仍未验收** —— 须走候选池投放 → 用户自助启用 → **重启实例** ⇒ E 单 ⛔ **仍不能判「已交付」**;本棒只解掉它的**唯一硬阻塞**。
|
||||
⛔ 未改 `src/im/**` | ⛔ 未改 A–E 五单结论 | ⛔ 未部署 / 未投放 | ⛔ 未 commit/push/scp | ⛔ 未引入新依赖 | ⛔ 未动 47 / 106 | ⛔ 未碰 §14.6 未决项。
|
||||
**下一棒(唯一)** = **第 14 棒 · 执行棒** = automation **`2d059ec8-0664-45de-a1c1-e8478f1686df`**(一次性 · `scheduledAt = 2026-09-23T20:15` · `cwds = E:\ProgramData\AI技能\aliyun-dsh-server`)= **认领并执行 `im-conversation-tabs` 的投放(可自动部分)+ 出线上取证清单**,动作见 **§2「⏭️ 第 14 棒」**。
|
||||
**下一棒(唯一)** = **第 14 棒 · 执行棒** = automation **`2d059ec8-0664-45de-a1c1-e8478f1686df`**(一次性 · `scheduledAt = 2026-09-23T20:15` · `cwds = E:\ProgramData\AIProject\aliyun-dsh-server`)= **认领并执行 `im-conversation-tabs` 的投放(可自动部分)+ 出线上取证清单**,动作见 **§2「⏭️ 第 14 棒」**。
|
||||
|
||||
- ✅ **2026-09-23 20:2x|第 14 棒(执行棒)✅ 完成 —— `im-conversation-tabs` 的投放(可自动部分)已落地 47;E 单只剩「用户点启用」这一步** —— 回填见 `交接单/IM群组-E-会话界面UI.md` 新追加的 **§执行回报(IM 线第 14 棒)**(⛔ E 单正文与结论一字未改)+ 操作单 `E:\ProgramData\AI技能\aliyun-dsh-server\交付物\IM群组-ui投放与线上取证操作单-20260923.md`。
|
||||
- ✅ **2026-09-23 20:2x|第 14 棒(执行棒)✅ 完成 —— `im-conversation-tabs` 的投放(可自动部分)已落地 47;E 单只剩「用户点启用」这一步** —— 回填见 `交接单/IM群组-E-会话界面UI.md` 新追加的 **§执行回报(IM 线第 14 棒)**(⛔ E 单正文与结论一字未改)+ 操作单 `E:\ProgramData\AIProject\aliyun-dsh-server\交付物\IM群组-ui投放与线上取证操作单-20260923.md`。
|
||||
**投放物**:`@dsh-local/im-conversation-tabs` v`0.1.0`|tgz sha256 **`c9b1184aca8eadd6c84316d2e79427546a65f59f0614a2ec9704c895a311bfb1`**(21,494 B)|`lib/client.js` md5 **`21fbc52fdedc9915238dd1c3f5c5e827`**(=第 13 棒修完 P0 的那一版,本机源 / tgz 包内 / 47 共享层**三处逐字一致**)。
|
||||
**判据读数**:① 包三件齐断言 **rc=0**(`exports['./client']` / `dsh.client.platform='web'` / `dsh.bundle.patch`)② `POST /api/plugins/business` ⇒ **http=200**、池 **4 → 5**、`replaced:false`、`trustedOverride:false`、`compat.level:"unknown"`(非 incompatible)、无 P0 命中 ③ `POST /api/plugins/business/share` ⇒ **http=200 `action:"created"`**、`fileRef = link:/var/lib/dshs/bundled-plugins/_dsh-local_im-conversation-tabs`(root:root、全 world-readable)④ 审计 `audit_log` id **360**(upload)/ **361**(share)⑤ 回滚素材 `/opt/dsh/backups/plugins/_dsh-local_im-conversation-tabs/0.1.0.tgz`。⛔ 未铺 profile、⛔ 未改任何源码、⛔ 未 commit/push/scp。
|
||||
🔴 **本棒自决项(可推翻)**:入口 §2 只写「打进候选池」,本棒**同时发布到共享层** —— 装配协议是 `link:`(09-23 拍板)⇒ profile 写的是软链依赖、目标是共享层目录,**只进池不发布**用户启用必撞 `plugin_bundle_missing`(=半成品投放)。⇒ 已写进投放线入口 §5-5:**本线后续给任何插件投放都要带上这一步**。
|
||||
@@ -172,7 +172,7 @@
|
||||
⚠️ **另两条实测发现(只报告未动,R7)**:① 47 上在跑的 **admin 实例**其 bwrap **没有** `--ro-bind-try /var/lib/dshs/bundled-plugins`(scope 启动于 **09-21 00:55**,早于该绑定上线;47 的 `orchestrator.js:1047-1048` 已含)⇒ **必须走一次重启**才带上——**启用动作自带重启**,无需额外动作;106 在跑的实例 cmdline 里**有**该绑定。② 47 admin profile 有一条 **09-21 的陈旧软链** `node_modules/@dsh-local/storyforge`(`dependencies`/`bundles` 里都已无),第 8 棒探针残留;③ 发现 **13 条 `user_agent='poc-curl2'` 的历史临时 admin 会话**未清(TTL 600 s ⇒ 早已过期)——本棒**只删自己那一条**(`deleted_sessions=1`),其余只报告。
|
||||
⚠️ **未完成项(卡点,⛔ 非"更慢更绕")**:① **E 单「线上可见面」仍未验收** —— 卡在**用户动作**(实例「功能管理」启用),本棒把"无解"推进到"只差点一下",⛔ 不能替用户点 ② **106 共享层缺该包** ⇒ 若目标实例在 106 启用会失败(属「跨节点内容分发」立项面,操作单 §四-1 已给手工同步命令,**本棒未执行**)③ 在线态取数未接线 / gateway 未部署(与第 12 棒同一批,排在再后)。
|
||||
⛔ 未改 `src/im/**` | ⛔ 未改 `poc/im-conversation-tabs/**`(打包只做**只读复制**)| ⛔ 未改 A–E 五单结论 | ⛔ 未 commit/push/scp | ⛔ 未引入新依赖 | ⛔ 未铺 profile | ⛔ 未取用 47 的 PG 凭据 | ⛔ 未碰 §14.6 未决项 | ⛔ 未替用户点启用。
|
||||
**下一棒(唯一)** = **第 15 棒 · 执行棒** = automation **`4e08cc77-c222-43ee-a3f5-521baebe2d70`**(一次性 · `scheduledAt = 2026-09-23T20:45` · `cwds = E:\ProgramData\AI技能\aliyun-dsh-server`)= **47 就地部署连接层 gateway + 在线态取数接线**(第 12 棒 §十五 的两个未完成项),动作见 **§2「⏭️ 第 15 棒」**。⚠️ 若用户先反馈了操作单 §三 的六条取证结果 ⇒ **优先按反馈处置**(那是"已交付功能"的验收面)。
|
||||
**下一棒(唯一)** = **第 15 棒 · 执行棒** = automation **`4e08cc77-c222-43ee-a3f5-521baebe2d70`**(一次性 · `scheduledAt = 2026-09-23T20:45` · `cwds = E:\ProgramData\AIProject\aliyun-dsh-server`)= **47 就地部署连接层 gateway + 在线态取数接线**(第 12 棒 §十五 的两个未完成项),动作见 **§2「⏭️ 第 15 棒」**。⚠️ 若用户先反馈了操作单 §三 的六条取证结果 ⇒ **优先按反馈处置**(那是"已交付功能"的验收面)。
|
||||
|
||||
- ✅ **2026-09-23 21:3x|第 15 棒(执行棒)✅ 完成 —— 47 就地部署连接层 gateway + 在线态取数接线(第 12 棒 §十五 的两个未完成项**全部闭合**)** —— 回填见选型单 `交接单/IM群组-稳定性机制与框架选型.md` 新追加的 **§15.11**(⚠️ 落点**不是**本入口原写的「§15.8」—— §15.8 已被「未完成项 / 已知限」占用 ⇒ 改落 §15.11,⛔ §十五 既有小节一字未改,只在 §15.8 表前加了一段 🔻 状态标注)。
|
||||
**交付(①代码面 / ②47 部署面)**:① `src/im/presence-ingest.ts` **新建**(取数端口 + fail-closed 解析器 + 常量时间 `secretEquals`)+ `src/im/connection-backend.ts`(增可选 `presenceIngest`)+ `backends/{native,gateway}.ts`(自述如实报 `local-hub` / 未接线则仍自曝 `not-wired`)+ `src/web/routes/im.ts`(**网关回调面 `POST /api/im/gateway/presence`** + 成员表/发消息的在线态改走端口 + `stats()` 增 `presenceIngest` / `presenceOnline`)+ 新测 `test/im-presence-ingest.test.mjs` **13 用例**;② 47 上 **20 个 `lib/**` 产物逐字一致**(属主 `root:root`)+ 网关进程 `/opt/dsh-gateway/centrifugo`(v6.9.6,sha256 `f4869bf9…a848c`)+ `config.json`/`gateway.env`(600)+ 单元 `dsh-gateway.service`(enabled+active、**只绑 `127.0.0.1:18081`**、公网 IP 探测 rc=7)+ 边缘片段落盘 + 旧产物备份 `/opt/dsh/backups/im-gateway-deploy-20260923-210125/`。
|
||||
@@ -182,8 +182,8 @@
|
||||
⚠️ **未完成项(卡点,⛔ 非"更慢更绕")**:① **边缘未接进生效 vhost**(边界明令本棒不切流;片段已落盘 + `nginx -t` rc=0、生效 vhost md5 `897c26bf89165e55a7a22a8c46932972` 未变 ⇒ 只剩"插入 `ai1net.com.conf` 443 块 + reload"一步)② **客户端侧未按网关协议接入**(E 单 bundle 传输层仍按平台协议 ⇒ **切流的硬前置**)③ **106 未部署**(本棒只做 47)④ **容量未复测**(未切流 ⇒ 复测条件未到)。
|
||||
⚠️ **一条异常(原因已查明)**:抢锁约 30 分钟后 `交接单/.locks/` **被清空**(本会话域锁消失、写文档被 hook 拦下)⇒ 已**重抢同一组域**并复核 `OWNER`(会话名/session_id 吻合)后继续。🔴 **原因 = 另一条线的棒放锁跑了 `--release-exec "<会话名>"`(脚本不读位置参数、取 `_who="${ME:-}"`,其 shell `ME` 未设)⇒ 命中 `-z` 分支 ⇒ 遍历 `.locks/*` 全删**(已记当日日志 + 沉淀 PLAYBOOK §24.4)⇒ ⛔ 与本棒无关。✅ 正确姿势 = `ME="<会话名>" bash scripts/handoff-guard.sh --release-exec` + 放锁后必核 `.locks/`;本棒收口已按此执行(**只释放自己的锁**)。
|
||||
⛔ 未 commit/push/scp 源码(部署产物除外)|⛔ 未动 `poc/im-conversation-tabs/**` 一行|⛔ 未改 A–E 五单结论|⛔ 未引新依赖进 `src/**`(网关是**外部进程**)|⛔ 未动 106 用户实例面|⛔ 未取用 DB 凭据|✅ 清场:`poc-curl2` 临时会话 **0**、47 `/tmp` 残留 **0**、演练连接 **0**。
|
||||
**下一棒(唯一)** = **第 16 棒 · 执行棒** = automation **`e14edc3d-0ab2-4a78-84be-c93752308bb9`**(一次性 · `scheduledAt = 2026-09-23T21:43` · `cwds = e:\ProgramData\AI技能\aliyun-dsh-server` **小写盘符**)= **换连接层的剩余代码面:① 能力口径修正(`providesServerHeartbeat`)② 平台侧接入面(令牌 / `connect` 代理二选一,执行棒自决)③ E 单客户端传输层双模化(含"按连接回 `{}`")④ 本机回环 E2E**,动作见 **§2「⏭️ 第 16 棒」**。⚠️ 若用户先反馈了操作单 §三 的六条取证结果 ⇒ **优先按反馈处置**。⚠️ **本棒不切流 / 不重打包 / 不重投放 / 无需部署**(切流 + 重投放 + 目标档位复测留第 17 棒,届时再排)。
|
||||
⚠️ **`cwds` 字面取证 —— 本棒一次差点写错的更正(⛔ 记下来别再犯)**:判据群体 = **`sessions.cwd`**(宿主就是按它分组)—— **小写 `e:\ProgramData\AI技能\aliyun-dsh-server` = 159** vs 大写 `E:\ProgramData\AI技能\aliyun-dsh-server` = **4** ⇒ **正解 = 小写**。🔴 **陷阱**:若只量 `automations.cwds` 会**得出反结论**(大写 3 / 小写 1)—— 那只是"前面几棒写错的人多"(棒 12/13/15 用的正是那 4 条错字面里的),⛔ **不是判据**。⇒ 第 16 棒 `cwds` 已按**小写**登记(本棒初登记时曾误用大写,已当场改正)。
|
||||
**下一棒(唯一)** = **第 16 棒 · 执行棒** = automation **`e14edc3d-0ab2-4a78-84be-c93752308bb9`**(一次性 · `scheduledAt = 2026-09-23T21:43` · `cwds = e:\ProgramData\AIProject\aliyun-dsh-server` **小写盘符**)= **换连接层的剩余代码面:① 能力口径修正(`providesServerHeartbeat`)② 平台侧接入面(令牌 / `connect` 代理二选一,执行棒自决)③ E 单客户端传输层双模化(含"按连接回 `{}`")④ 本机回环 E2E**,动作见 **§2「⏭️ 第 16 棒」**。⚠️ 若用户先反馈了操作单 §三 的六条取证结果 ⇒ **优先按反馈处置**。⚠️ **本棒不切流 / 不重打包 / 不重投放 / 无需部署**(切流 + 重投放 + 目标档位复测留第 17 棒,届时再排)。
|
||||
⚠️ **`cwds` 字面取证 —— 本棒一次差点写错的更正(⛔ 记下来别再犯)**:判据群体 = **`sessions.cwd`**(宿主就是按它分组)—— **小写 `e:\ProgramData\AIProject\aliyun-dsh-server` = 159** vs 大写 `E:\ProgramData\AIProject\aliyun-dsh-server` = **4** ⇒ **正解 = 小写**。🔴 **陷阱**:若只量 `automations.cwds` 会**得出反结论**(大写 3 / 小写 1)—— 那只是"前面几棒写错的人多"(棒 12/13/15 用的正是那 4 条错字面里的),⛔ **不是判据**。⇒ 第 16 棒 `cwds` 已按**小写**登记(本棒初登记时曾误用大写,已当场改正)。
|
||||
- ✅ **2026-09-23 23:1x|第 16 棒(执行棒)✅ 完成 —— 换连接层的剩余代码面全部闭合** —— 回填见选型单 `交接单/IM群组-稳定性机制与框架选型.md` **新建 §十六**(⛔ §十五 既有小节一字未改)+ E 单 `交接单/IM群组-E-会话界面UI.md` **追加**「§执行回报(IM 线第 16 棒)」(⛔ 未改既有正文)。
|
||||
**交付(三项代码 + 一份 E2E)**:① `src/im/backends/gateway.ts` 的 `providesServerHeartbeat` **`false`⇒`true`**(依据 = §15.11.3 三向实测)+ **连带**新增结构性判据 `fanoutOffsite && !needsKeepaliveShim ⇒ throw`(否则原"构造即抛"因该字段改真而**变成装饰**)~ 口径依据 = 「会不会自己发 ping」与「平台能不能替远端 socket 代发」**正交**;② 平台侧接入面 **选 (a) 发二层票据 + 新增订阅回检**(`POST /api/im/gateway/token`、`POST /api/im/gateway/subscribe`、`GET /api/im/transport`、`stats()` 增 `gatewayAccess`)~ 被否 (b) `connect` 代理(理由:改动落部署物、回滚面更大、鉴权依赖边缘带 cookie ⇒ **与"边缘未接 vhost"耦合**,且工作量不更少);③ `poc/im-conversation-tabs/lib/client.js` 传输层**双模化**(`native` **逐字不变**、分发共用一个 `onAppFrame`;`gateway` 走网关协议:`connect` → `subscribe` → **空对象即回 `{}`** → `push.pub.data.frame` 后照原路径分发;模式**从平台只读面取,⛔ 未硬编码**);④ 新增测试 `test/im-gateway-access.test.mjs` **15 用例**(**G-8/G-9 直接驱动真客户端件**)。
|
||||
**判据读数**:`npm run build` **rc=0**|新测 **15 / 15**|B 组 **28 / 28**|presence 组 **13 / 13**|`npm test`(Node 22)**507 用例 / 505 过 / 0 败 / 2 跳过**|`check-layering` **rc=0**(未归类 1 = 既有 `src/platform-paths.ts`)|**本机回环 E2E(真 Centrifugo v6.9.6 + 真平台进程 + 真客户端件)16 / 16 PASS**:`upgrade=101/101/101 connect应答=3/3`、订阅票据 `alice=200 / bob=403 not-a-member`、带票据订阅 `{"id":2,"subscribe":{…}}`、**不带票据**非成员 `{"id":2,"error":{"code":403,"message":"not-a-member"}}`(回检兜底生效)、一条消息 `发送=200 delivered=1` 双端收到且原文含标记、presence `进=true 出=true`、**保活 `ping数=10 / alice.closed=false / carol.closed=false / num_clients=2`(掉线 0,两侧同证)**。
|
||||
@@ -191,7 +191,7 @@
|
||||
⚠️ **本机载体受限(与产品无关)**:Windows 版网关二进制**不可得**(GitHub 0–19 KB/s、六镜像全败、106 亦 rc=28)⇒ 用 **106 上已有 Linux 版**(md5 `17f814b5e048d1393508d4617b104a98`,回传后逐字一致)+ 混合载体(**网关跑 WSL 回环 18099**、**平台跑 Windows**,因 `better-sqlite3` 是 Windows 版原生模块)⇒ 两条链路均已实测。
|
||||
⚠️ **未完成项(卡点,⛔ 非"更慢更绕")**:① **presence 回填生产侧缺调用方**(Centrifugo OSS 无 join/leave 回调,如实记 §16.7-1)② 切流 / 106 部署 / 容量复测(按边界留第 17 棒)③ **E 单线上可见面仍未验收** —— 卡在**用户动作**(实例「功能管理」启用现版 `v0.1.0`),⛔ 不能替用户点。
|
||||
⛔ 未切流|⛔ 未重打包|⛔ 未重投放|⛔ 未 commit/push/scp|⛔ 未引新依赖进 `src/**`|⛔ 未改 A–E 五单结论|⛔ 未动 §14.6|⛔ 未动 106 用户实例面|⛔ 未取用 DB 凭据|⛔ 网关密钥未打印/未进日志/未进文档|✅ 网关全程只绑回环 + 端口避开 47 的 `18081`|✅ 清场:本机与 WSL 网关进程 **0**。
|
||||
**下一棒(唯一)** = **第 17 棒 · 执行棒** = automation **`19904b63-431a-4f0a-85cc-c80fcb47221f`**(一次性 · `scheduledAt = 2026-09-23T23:37` · `cwds = e:\ProgramData\AI技能\aliyun-dsh-server` **小写盘符**)= **重打包 + 重投放 + 边缘接 vhost + 切流 + 目标档位复测(`2000` / `10` / `30 s`)+ 本棒新增面的部署同步**(`lib/**` 产物 + 47 网关 `config.json` 回检块按 §16.5-2 修正形态落盘),动作见 **§2「⏭️ 第 17 棒」**。⚠️ 若用户先反馈了操作单 §三 六条取证结果 ⇒ **优先按反馈处置**。
|
||||
**下一棒(唯一)** = **第 17 棒 · 执行棒** = automation **`19904b63-431a-4f0a-85cc-c80fcb47221f`**(一次性 · `scheduledAt = 2026-09-23T23:37` · `cwds = e:\ProgramData\AIProject\aliyun-dsh-server` **小写盘符**)= **重打包 + 重投放 + 边缘接 vhost + 切流 + 目标档位复测(`2000` / `10` / `30 s`)+ 本棒新增面的部署同步**(`lib/**` 产物 + 47 网关 `config.json` 回检块按 §16.5-2 修正形态落盘),动作见 **§2「⏭️ 第 17 棒」**。⚠️ 若用户先反馈了操作单 §三 六条取证结果 ⇒ **优先按反馈处置**。
|
||||
|
||||
|
||||
## §1 目标(**用户原话,⛔ 不得改写**)
|
||||
@@ -374,7 +374,7 @@
|
||||
|
||||
**✅ 手工接力方式(⛔ 现已不需要 —— 19:0x 已补登 automation,本段仅存档)**:入口 §2「第 12 棒」段**已自包含**(动工范围 + 三条硬实现项 + 验收判据对账表 + 环境注意 + 边界)⇒ 万一 automation 再次不可用,**用户手工开一个新会话**,说:
|
||||
|
||||
> 按 `E:\ProgramData\AI技能\aliyun-dsh-server\接续入口_IM线_20260922.md` 的 **§0 最新行 + §2「第 12 棒」**段执行(会话名 `IM线-第12棒`);开工第 0 步跑 `state.py`,第 1 步抢全局执行锁。
|
||||
> 按 `E:\ProgramData\AIProject\aliyun-dsh-server\接续入口_IM线_20260922.md` 的 **§0 最新行 + §2「第 12 棒」**段执行(会话名 `IM线-第12棒`);开工第 0 步跑 `state.py`,第 1 步抢全局执行锁。
|
||||
|
||||
**✅ 回头必做 —— 已于 19:0x 完成**:库由 app 自愈后**已立即补登**第 12 棒接续棒(`89e11630-4a06-41ca-bfc7-3c66ff4d8a53`),「补登完成」已写进 §0。
|
||||
🔴 **连带待办(本线 ⛔ 别忘)**:**其余各线的接续棒全部丢失**(automation 记录随重建清空)⇒ 各线开工前须先按自家入口 §2 重登。
|
||||
@@ -582,7 +582,7 @@
|
||||
- **源仓 HEAD**:`git -C D:/github/dsh_shenxian log --oneline -1`(以实跑为准)。
|
||||
- **入口漂移判据**:以本文件 **§0 最新一行** 为准;若 §0 与 §2 冲突 ⇒ 以 §0 为准。
|
||||
- ⚠️ **本机 Bash 工具 shim 已坏**(`dirname: command not found` ⇒ `ls`/`cat`/`mkdir` 全 not found,`export PATH` 救不回)⇒ 抢锁 / 放锁 / 任何需要 shell 的活**一律走**:
|
||||
`"E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" "E:/ProgramData/AI技能/aliyun-dsh-server/tmp/claim_lock.py" --claim-exec "<线名>-第N棒"`(该脚本用 `subprocess` 调 PortableGit 的 `bash.exe` 并给足 `usr/bin`+`bin`+`mingw64/bin`)。
|
||||
`"E:/ProgramData/.workbuddy/binaries/python/versions/3.13.12/python.exe" "E:/ProgramData/AIProject/aliyun-dsh-server/tmp/claim_lock.py" --claim-exec "<线名>-第N棒"`(该脚本用 `subprocess` 调 PortableGit 的 `bash.exe` 并给足 `usr/bin`+`bin`+`mingw64/bin`)。
|
||||
⚠️ 抢锁失败时脚本 **rc=1 且中文输出乱码** ⇒ 别把「乱码」误判成「锁被占」,**解锁文件**读 `dsh-server-docs/交接单/.exec-lock/OWNER` 才准。
|
||||
|
||||
## §6 ⛔ 不要重做
|
||||
|
||||
Reference in new issue
Block a user