Files
dsh_ai1net_server/交付物/任务图.json
T
admin c1b5e4d966 chore(工作区): 全量入库 + 补齐 .gitignore(以工作区为准)
- 变更规模:新增 514 / 修改 62 / 重命名 155 / 删除 4(归档重组与文档轮次)
- .gitignore 修:`归档/**/db-cwd归一-备份-*/` —— 原规则写绝对层级(归档/db-cwd归一-…),
  目录搬进 归档/配置与备份/ 后**静默失效**,43 MB 的 DB 备份又变成未跟踪
- .gitignore 补:嵌套 git 内部数据(归档/内嵌git-20261008/、归档/skills-git-旧线-20261007/dotgit-原样移出/)
- .gitignore 补:运行态与部署副本(.workbuddy/collab/、.workbuddy/tools/、.workbuddy/.load-pending、.workbuddy/tmp-*)
- .gitignore 补:备份件(*.bak-*)
- 未跟踪文件从 2190 降到 890(其余为 归档/ 归档件与 .workbuddy/memory/ 知识文件,按口径入库)
2026-10-10 23:13:22 +08:00

109 lines
24 KiB
JSON
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
{
"goal": "手机经 ai1net 覆盖网络操作电脑上的 WorkBuddy 会话(验收 V1–V7)",
"updated": "2026-09-30T07:58",
"rules": {
"dispatch": "只派「依赖已满足」的节点;优先派**关键路径**上的节点;一条线同时只挂一个,多条线可同时挂",
"domain": "域锁按**节点涉及的具体文件/子目录**声明 —— 不重叠即可并行。⛔ 禁止再用整工作区域粗域(自造串行瓶颈)",
"handoff": "收口即派(+3~4 分钟),⛔ 不要 +5~8 分钟空窗(🔴 2026-10-01 用户口径:基准=收口+3~4 分钟)",
"waste": "若「可派集合」非空且没有任何棒在跑 ⇒ 属**可派未派(浪费)** ⇒ 立即派"
},
"nodes": [
{
"id": "M1",
"title": "机制全面体检(五面:接线/自测/看板/总闸/队列)",
"line": "唤醒机制",
"status": "done",
"deps": [],
"evidence": "本轮实测读数(07:14–07:5x),见本报告"
},
{
"id": "M2",
"title": "修:已停总闸(goal.run != active ⇒ 只写一行、不产告警、不投递)",
"line": "唤醒机制",
"status": "done",
"deps": [
"M1"
],
"evidence": "collabd.py goal_paused/paused_round + selftest 新用例 6 项全绿"
},
{
"id": "M3",
"title": "修:退役线(手机接入)残留不再占队首",
"line": "唤醒机制",
"status": "done",
"deps": [
"M1"
],
"evidence": "旧台账/tasks.json/blocked.json 已归档,新件按当前类别重建"
},
{
"id": "M4",
"title": "修:日志降噪(同一结论每轮连刷 ⇒ 真事件被淹没)",
"line": "唤醒机制",
"status": "done",
"deps": [
"M1"
],
"evidence": "log_throttled(key,600s)"
},
{
"id": "M5",
"title": "验:--tick 真投递一次(wakeups.jsonl 新增 ok:true)",
"line": "唤醒机制",
"status": "done",
"deps": [
"M2"
],
"evidence": "2026-10-01 12:0x 核对:wakeups.jsonl 第 82 行 {\"ts\":\"2026-10-01T08:36:37\",\"http\":200,\"ok\":true,\"kind\":\"上报·单条\"},行数 81→82;判读由 target-busy 转为真投出。台账 tasks.json 亦为 done ⇒ 三点一致后由「协作遗留-队列解卡」置 done(原卡点:上报只写台账,任务图节点无人回写)"
},
{
"id": "M6",
"title": "验:实时看板 8788 在线且快照延迟 <15s",
"line": "唤醒机制",
"status": "done",
"deps": [
"M3"
],
"evidence": "127.0.0.1:8788 在线,/healthz ok:true,快照延迟 2.8s(<15s)"
},
{
"id": "M7",
"title": "验:selftest 全绿(含新用例)",
"line": "唤醒机制",
"status": "done",
"deps": [
"M2"
],
"evidence": "selftest 33/33 全绿(含本轮新增的已停总闸 6 项、活会话解析 2 项)"
}
],
"critical_path": [
"M5",
"M6"
],
"notes": [
"🟢 **2026-09-29 14:46–15:1x 手机接入线 · N17 派活棒(自动化 `9d92cb9b`)· 端侧同源落地 + 真 WebView 取证 + 顺带收口 N8**:① 只读判定 → 择 (a) 端侧自决(读 `@capacitor/[email protected]` 源码:`Bridge.java:627-638` 壳 origin 可由 `server.hostname` 钉到门户域;`WebViewLocalServer.java:468-491` **不带点**路径落回真网络)。🔴 **关键坑** = `server.html5mode` 默认 **true**,不显式关掉则不带点路径被当 `index.html` 顶掉 ⇒ 方案静默失效。② 落地端侧 3 文件(`capacitor.config.ts`/`www/lib/contract.js`/`www/index.html`),入库 `5e4ba21`(回滚点 `a2139c0`)+ 收尾 `f6a3b09`。③ 真 WebView 读数:`origin=https://ai1net.com`;无 cookie 腿 6 探针全 **401 真响应**(预检 0 · `Failed to fetch` 0 · CORS 日志 0);带 cookie 腿 6 探针全 **200**;列表 `可操作 11 · 不可发 53` 且 id 序列 ≡ 直连垫片(同窗 md5 全等);`/history` 200 渲染 8 条;`实时(长连)`;闸 401/200/**403 user-switch-off**/401。④ ⇒ **N17 判 done**,据此 **N8 判 done** ⇒ 关键路径推进到 **N9**(已派棒 `d9abe70b`@15:22,`claims/N9` 已建)。⑤ 新增端侧自证 `tmp/n17-20260929/verify-same-origin.mjs`(**pass=22 fail=0**,含「不带点不变量」:端侧 27 条出网路径零 `.`);N7 契约回归 `verify-send-contract.mjs` 仍 **pass=79 fail=0**。⑥ 如实登记三处:门户域成**构建期常量**/端侧**登录动作未以真凭据实跑**(避开平台首登自动建号副作用,改用 `GET /api/auth/me` 证链)/首轮模拟器默认 2560 MB 装 APK 后客体卡死(换 `-memory 4096` 后全稳)。⑦ 还原:`device_web_enabled=0` · 临时会话行 0 · `dshs=active NRestarts=0` · 模拟器与 `adb forward` 已清。⚠️ 跨线运行件:开工时 20090 无监听 ⇒ 用 `wb-client-launch.cmd` 拉起垫片,**收尾有意保留在跑**(对上 N5 常驻)。",
"🟢 **2026-09-29 14:46–15:1x 手机接入线 · N17 派活棒(自动化 `9d92cb9b` · 会话本棒)· 端侧同源落地 + 真 WebView 取证 + 顺带收口 N8**:① **只读判定 → 择 (a) 端侧自决**:读 `@capacitor/[email protected]` 源码坐实「壳 origin 可由 `server.hostname` 钉到门户域,且**不带点**的路径会落回真网络」;🔴 **关键坑** = `server.html5mode` 默认 **true**,不显式关掉的话不带点路径会被当 `index.html` 顶掉 ⇒ 方案静默失效。② **落地**:端侧 3 文件(`capacitor.config.ts` / `www/lib/contract.js` / `www/index.html`),入库 `5e4ba21`。③ **真 WebView 读数**:`origin=https://ai1net.com`;无 cookie 腿 6 探针全 **401 真响应**(`Failed to fetch`=0 · 预检 `OPTIONS`=0 · CORS 日志 0);带 cookie 腿 6 探针全 **200**;列表 `可操作 11 · 不可发 53` 且 id 序列 ≡ 直连垫片;`/history` 200 渲染 8 条;`实时(长连)`;闸 401/200/**403 user-switch-off**/401。④ ⇒ **N17 判 done**,并据此 **N8 判 done**(端侧腿在真 WebView 上全通)⇒ 关键路径推进到 **N9**(已排接续棒)。⑤ **新增端侧自证** `tmp/n17-20260929/verify-same-origin.mjs`(**pass=22 fail=0**,含「🟢 不带点不变量」:端侧 27 条出网路径零 `.` —— 这是本方案的结构前提,以后谁加一条 `/api/v1/x.json` 都会打穿同源);N7 的契约回归 `verify-send-contract.mjs` 仍 **pass=79 fail=0**。⑥ **如实登记三处**:(i) 门户域成**构建期常量**(`WB_PORTAL_HOST` 可覆盖)· 本机直连联调在此构建下不可用;(ii) **端侧「登录动作」未以真凭据实跑**(平台 `login` 对查无此账号会**首登自动建号** ⇒ 有生产副作用),改用零副作用的 `GET /api/auth/me` 证「同源+cookie 载体」链;(iii) 首轮模拟器(默认 2560 MB)在 `adb install` 后**客体卡死**(⛔ 非端侧缺陷),换 `-no-snapshot -memory 4096 -gpu swiftshader_indirect` 重启后三轮全稳。⑦ **还原**:`device_web_enabled=0` · 临时会话行 0 · `dshs=active NRestarts=0` · 模拟器与 `adb forward` 已清。⚠️ **跨线运行件(登记)**:开工时 `20090` **无监听** ⇒ 用官方入口 `wb-client-launch.cmd` 把垫片拉起,**收尾有意保留在跑**(对得上 N5「常驻」的看板状态;要停跑 `wb-client-stop.cmd`)。",
"🟡 **2026-09-29 14:33 主会话 · 按 NEXT.md 处理 N17(用户指令)· 抓到看板漂移第二例**:读 `NEXT.md` 时队首 = **N17**、`status: todo`、`gate: free`;但查宿主 `automations` 发现 **N17 的棒早已被 N14 棒派好**(`9d92cb9b` @14:46 ACTIVE —— 14:07 那根棒的收尾动作)⇒ **队列仍把它列为「可派」** = 与 13:5x 的 N11/N13 **同类漂移**(已派/已完成的节点不回写 `status` ⇒ 队首失真 ⇒ 诱使重复派、两条会话抢同一条线的口)。处置:⛔ 不重复派;`status` `todo`→`running` + 建 `claims/N17`(holder = `9d92cb9b(N17派活棒)@手机接入线(端侧可自决实现)`)⇒ 程序转入 `doing`、`head=None`、`gate=busy`、`NEXT.md` 被删(「一次只做一条」的闸门闭合)。",
"🔴 **机制层观察(⛔ 本轮不改)· 「派活」这一步必须同时回写 `status`**:`collabd.py` 的「可派」集合只看 `任务图.json` 的 `status`,而**派活者不强制把目标节点标 `running`** ⇒ 客观后果:**每次派棒都会留一个「已派但仍显示可派」的窗口**(N11/N13/N17 三例,今日全中)。两条候选修法:① **纪律层**(零代码):派活与 `status=running` 写在同一动作里;② **机制层**:让 `collabd` 与宿主 `automations` 对账 —— 若某节点存在 **ACTIVE 的一次性自动化**且标题/提示提到该节点 id ⇒ 视为「已派」不再列为可派。⚠️ 两者都属机制层/常驻脚本,须攒批后一次重启 + `ast.parse` 校验,⛔ 不在本棒动。",
"🟢 **2026-09-29 14:07–14:35 手机接入线 · N14 派活棒(自动化 `744aeb75` · 会话本棒)· B2 复验 + B1 判真伪**:① **数据腿全绿**(列表/最新消息 三路 md5 全等,3 轮同值);② **B2 独立复现=真修好**(带体 POST 经平台 404 且与 relay 落点同体同 md5;401→不挂起;端侧第 6 探针 200);③ 🔴 **B1 = 真缺口**:在**真 Android WebView**(模拟器真壳 APK + CDP)上端侧 6 探针全 `Failed to fetch`,**与无头 Chromium 逐条一致** ⇒ 不是「用浏览器页代替真机 WebView」的取证假象;并分离出四条独立机制(预检**天然无凭据** ⇒ 401 无 ACAO/未认证响应无 CORS 头/认证腿 `ACAO:*` 无 allow-credentials/闸只认 `sid` cookie 而端侧载体是 `x-access-token`)—— 其中「预检无凭据」**更正了 N8 单把成因记作「闸坏了」**(我用 curl 手工带 cookie 发 OPTIONS 拿到 204,属**测法假象**,真浏览器不会那样发)。④ **V1 仍判 ❌** ⇒ N8 保持 blocked,**新立 N17**(端侧与入口 API 同源 + 凭据载体对齐;关键路径新前置)并追加进 N8 的 deps;已派棒。⑤ 自纠两处:我自己的 history 腿首次 404 是**脚本把基址拼出双斜杠**(非平台缺陷,已改并重跑全等);`K1` 期望值写错(还原段先删令牌 ⇒ 401 是匿名而非 403)。",
"🟢 **2026-09-29 13:56–14:00 机制线 · 接续棒(`c7e9824a` · 会话本棒)· 触发锚点真实投递已取证 + 看板纠偏**:① **N16 判 done**:本棒会话起始 = 一次真实 `UserPromptSubmit` 投递,三条独立读数一致(stamp `13:56:31` ≈ 会话起始时刻;产物 mtime `13:56:37`;宿主 `HookExecutor spawn pid=53456 timeout=20000ms cmd=…/wb-result-hook.py` @13:56:31.675,`code=0 elapsed=5431ms`)+ 零误投唤醒。⇒ 13:40 那棒「`--once` 改挂 `UserPromptSubmit`」的改动**在真实投递路径上成立**,`SessionEnd` 那条死路不再阻塞协作程序。② 🔴 **看板纠偏(本棒最大发现)**:`任务图.json` 落后于宿主 `automation_runs` —— **N13 早已 done**(run `e370ca8d`:B2 修好并上生产,带体 POST 经平台入口 200/1.66 s/257 B、md5 ≡ relay 落点)而看板仍记 `running`;**N11 早已收口**(run `2e46b331` + `cae3e6b3` + `b4dd9b22` 三份一致)而看板仍记 `running` ⇒ `NEXT.md`/队列把**已完成项当队首**反复推荐 = 制造浪费。已据宿主结论判 done 并出队。③ ⇒ **N14 依赖(N13)由此满足**,已派棒 `744aeb75`@14:07(关键路径重新可推进);N8 deps 追加 N14,复判归 N14。",
"🔴 **2026-09-29 13:5x 机制线观察 · 协作程序的「队首」是看板的函数 ⇒ 看板不纠偏=程序会持续推荐废件**:本轮实证:`collabd.py --once` 读的是 `任务图.json` 的 `status`,看板不回写(或提前回写)会**双向**出错 —— ① 已完成的仍被派(N11/N13 实例);② 「可派」集合与「在跑」集合失真(`digest.md` 的「在跑 2;26 分钟无变化」里至少 1 个是已完成项)。⇒ **建议(未落地,属机制层,⛔ 本棒不动)**:① 收口会话**必须**在同一轮回写看板(现有纪律已写,但未被执行);② collabd 若能从宿主 `automation_runs` 直接读 `ACCEPTED` 结论并与看板**对账**,就能自动发现这类漂移(比人肉复核可靠)。⚠️ 另:§1.5 那句「默认一律带 `--domains ai1net-dsh-server/`」在本工作区**等于全域独占**(11:30 泄漏锁即为实证)⇒ 治本应改为**按子目录声明**。",
"🟢 **2026-09-29 13:14 机制线(接续棒 `eaa026c7`)· 唤醒回路已落地并实测**:`collabd.py` 拿到「把有活投给活会话」的能力(走网关官方 `POST /api/v1/sessions/{id}/reply`,**投递不夺 ACP writer**)。四道闸门 = 有 `NEXT.md` ∧ `gate=free` ∧ 内容哈希≠上次 ∧ 距上次 ≥180 s;每次投递追加 `tmp/supervise-inbox/wakeups.jsonl`(可列出/可删);任务图全 `done` ⇒ 停投;投递失败 ⇒ `NEED-USER.md`。**实测**:13:09:43 → `3a46cebb@57160 http=200`,库读数 `unread 1` / `last_activity_at 13:09:46` ⇒ 到达确认;负向用例 5 条全过。⇒ **12:5x 判定的「机制断了(无自主唤醒通道)」这条缺口已闭合**:此后 `NEXT.md` 出现(新内容)即由程序自动叫醒活会话,⛔ 不再依赖用户发话。",
"🔴 **治理侧阻塞(需用户拍板,⛔ 不属本图节点 · 13:14 复核仍未解)**:`ai1net-dsh-server/` **全域域锁**仍被 11:30 的截止交代会话(会话 `7ce7005a`,run 已 `automation-run-interrupted`,其会话诊断日志 mtime 停在 **11:35** ⇒ 已死 90 分钟以上)**泄漏未释放**。按 **R9** 处置权只属用户本人(11:43 已上抛 A/B/C,倾向 A=用户亲自删锁)⇒ ⛔ 本项目**不删、不接管**;改按**子目录窄域**声明即可开工(13:05 本棒用 4 键窄域 `ai1net-dsh-server/{交付物,.workbuddy,tmp}` + `skills/multi-session-collab`,RC=0)。⚠️ 治本建议仍在:SOP 与 §1.5 那句「默认带 `--domains ai1net-dsh-server/`」在本工作区**等于全域独占**,应改为**按子目录声明**。",
"🔴 **2026-09-29 12:49 主会话(自续轮 1246)· 上游重启窗口告警(给 N13 / N14 判读用)**:本机垫片(`127.0.0.1:20090`)所在的桌面宿主**在 12:47:13 重启过一次**(实测:pid `55384` = electron `dsh-desktop-host`,StartTime 12:47:13;`collabd-state.json` 记 `down:4` / `try_at=12:45:01` / `up:false`)。⇒ ① **12:46–12:47 之间 20090 有数十秒空窗** —— 本棒 12:46 首探读到「无 Listen 项」(**单读假阴性**),12:47 后**连测 5/5 全 200 · 3479 B · t≈0.08 s · md5 `31150122c43669615140a139783a7146`** ⇒ 判 B2「带体 POST 挂起」时**必须同时留 GET 对照腿并确认上游存活**,否则会把「上游正在重启」误读成 B2。② 该空窗**不是回归**,N5「20090 常驻」判据仍成立(本棒复核)。③ ⚠️ 看板/Digest 的「**服务探针:不通**」是**已登记的假阳性**(持续报「不通」而实况 200);后续轮次 ⛔ 不得拿它当判据、⛔ 不得据此派棒 —— 判垫片死活一律用**连测(≥3 次)+ 进程 StartTime**,⛔ 不用单次读数(11:50 曾因单次读数假判过一次抖动)。",
"🔴 **2026-09-29 12:42 主会话(自续轮 1239)**:① **队列取件 N12** → 复核后**判 done 出队**(N8 棒 12:45 曾把它改回 todo 并挂进 N8 的 deps,但它自己的 evidence 已证治本在生产 ⇒ 属**记账回退**;真正卡住 N8 的是另一件事)。② **把 N8 的实测卡点建成两条独立节点**:**N13** = 平台线修 B2「带体转发挂起」(**关键路径硬前置**,12:43 已派棒 `e370ca8d`/12:46 起跑)· **N14** = 手机接入线复跑 V1 + **分离 B1 是不是「用浏览器页代替真机 WebView」的取证假象**(等 N13)。③ **B3(入口根页是网关占位页)不单列** ⇒ 归 **N11**(垫片形态收口 · 正在跑)。④ **N8 deps 改为 N5/N6/N7/N13**(原先挂 N12 属挂错对象)。⑤ **N12 出队、N13 入队**(claims:N11 ・ N13)。",
"🔴 **2026-09-29 12:45 · N8 判 `blocked`(关键路径卡在别线,非本线可解)**:数据腿已证到「与直连网关逐字节相同」(列表 15 条同窗 md5 全等、history 直连/平台/relay 三路 md5 全等),端侧也能渲染(真客户端页 + 手机视口,`可操作 15 · 不可发 37` + 点开 88 条消息)。判死的是两条**一票否决**:**B2 =「带请求体的方法经平台设备入口挂起」**(`POST {P}…` 带体 6/6 超时;无体 POST / GET 正常 t≈1.7–2.1 s;同一请求走 relay 落点 200/0.8 s)⇒ 端侧启动链 `selftest().then(loadList)` 的第 6 探针正是 `POST /api/v1/acp/connect`,永不 resolve ⇒ 真机上是「加载中…永远转」;且**一切发送都是 POST 带体 ⇒ N9 在 B2 修好前不该开工**。**B1 = 跨源头缺位**(入口回 `access-control-allow-origin: *` 且无 `allow-credentials`、`OPTIONS` 预检 401 ⇒ 端侧 `credentials:'include'` 被浏览器拒收;关掉 CORS 强执即全 200)。两条均在**平台线 / 插件线**,⛔ 不在手机接入线域内 ⇒ 本棒只报告、未改别线一行。实测单:`ai1net-dsh-anywhere/docs/实测单_V1设备入口_20260929.md`。",
"**2026-09-29 12:31 主会话(自续轮)**:① **N12 关闭** —— 12:25 那条「真正卡点」是**修复前**状态复述,12:29 只读实测已确认治本在生产 ⇒ 重复条目(原 11:27 那棒 `3520cb5e` 已做完并上生产,未被重复派棒)。② **N11 已派棒**(`2e46b331`,12:34)。③ N8 由 `eb052f25` 在跑(12:24 起)。",
"**2026-09-29 11:27 关键变化**:唯一真阻塞(平台侧设备可达性快照被永久冻结)**已修复并上生产** ⇒ N8 的入口第 ④ 闸不再 `503 device-unreachable`。N8 此后只受「垫片对 `upgrade` 的处置」影响(WS 腿 101 未取到,归插件线/手机接入线)。",
"🔴 **治理侧阻塞(需用户拍板,⛔ 不属本图节点)**:`ai1net-dsh-server/` 全域域锁被 11:30 的截止交代会话(已 `completed`/run 被中断)**泄漏未释放** ⇒ 所有声明该粗域的会话(监管轮/心跳/收尾自判)开不了工。按 R9,处置权只属用户本人;11:43 监管棒已上抛(选项 A/B/C,倾向 A=用户亲自删锁)。**关键路径不受影响**(手机接入线用 `ai1net-dsh-anywhere/` 域)。",
"**可并行但今天没并行起来的**:N11(插件线卡片)本可与 N5 并行 —— 但它不阻塞 V1/V2,属非关键路径。",
"🔬 **机制线 · 实战复核(13:24–13:33 · 会话 `5e88fdda`)**:唤醒回路**投得出去但没被接走** —— ① 真投递仅 1 条(13:09:43 `3a46cebb@57160` http=200);② 到达确认成立(该会话 3 s 后产生活动);③ **但 `N11` 至今无人取件**(`claims/` 为空),被叫醒的是**另一个自动化会话**(`is_background_automation=1`),它随即 `completed`。根因三条:**常驻已死**(`:20099` refused,随宿主会话被回收,而「会话后台任务」起法项目明令禁止)/**唯一自动跑的钩子路径调的是无唤醒码的旧副本**(`.workbuddy/tools/collabd.py`)/**认口取 uptime 最大者(实测那个口 `live=''`)⇒ 有活会话也落 `no-live-session` 投不出去**。已最小改动修 2 处:技能版 `wake_round` 认口改「第一个带活会话的口」(实测对照:旧=投不出去/新=可投)+ 工作区版 `--once` 追加跑技能版一轮(实测 4.7 s RC=0,`digest/queue/state` 同步刷新 ⇒ 接线成立);均 `ast.parse` OK。**遗留交下一棒**:两处改动尚未在「真实会话收尾触发钩子」这条路上取证。🔴 另:**关键路径 `:20090` 未监听**(与 `advance.md` 13:30 同判)—— 属插件/手机接入线,⛔ 非本线。",
"🔬 **机制线 · 钩子真实触发取证(13:40–13:48 · 会话 `4d22f079`)**:判据**不成立**(读数如下,⛔ 非推断)——① 技能版专属产物 mtime 停在 **13:30:28**(=上一棒**手动** `--once` 的时刻),未随最近一次会话收尾(`5e88fdda` 13:34:21)推进;② `ledger.jsonl` / `hook.log` 末次真实写入 = **07:28**(且全是测试夹具),`gate-done.stamp` **不存在**(该逻辑 12:48 加入 ⇒ 若真实收尾触发过必存在);③ 宿主日志两日全部 `HookExecutor spawn` 里,**`SessionEnd` 那条注册(timeout=10000ms)零次出现**,而本钩子 **26 次投递全是 `UserPromptSubmit`(timeout=20000ms)**。⇒ **断点不在 collabd 接线,而在上游:`SessionEnd` 从未被宿主投递**(宿主自 09-28 13:55 未重启,而 hooks 配置 09-29 11:27 有改动 ⇒ 与项目规则「hook 改动需**完全重启**才生效」一致)。**最小修**(⛔ 只换触发锚点):把同一个 `--once` 挂到**确证会被投递**的 `UserPromptSubmit`(改在钩子脚本内 ⇒ ⛔ 不动注册、⛔ 不需重启),护栏=静默 · fail-open · 硬超时 12 s · 节流 180 s。**脚本级实测**:投一次 ⇒ 5 s 整轮、产物 mtime 13:46:45 同步刷新(stamp 13:46:40)、第二次 0 s(节流生效)、零误投唤醒。⚠️ 遗留上抛项(⛔ 本棒不动):`SessionEnd` 要生效恐怕需**完全重启宿主**(会掐断在跑的会话)⇒ 处置权属用户。",
"🟢 **V6 装载换挂 · 复核结论(2026-09-30 07:4x · 会话「[协作]-[手机接入]-V6装载换挂」· desktop 线)**:**V6 成立**,且**无需换挂** —— 任务书前提「在用 profile 里是已退役的 `@dsh-client/device-shim`」**被证伪**:被查的两处(`aa-verify-home`/`dsh-worker-dev`)**都不是在用的 profile**,在用的是**第三处** `C:\\Users\\Administrator\\.dsh\\profiles\\desktop`,其 `dsh.profile.bundles` **本来就是** `@dsh-local/ai1net`。四项证据:① 启动日志 `[devkit] profile=` ② host 进程 argv 第 3 参 ③ `netstat` —— `20090 LISTENING` 的持有者正是**客户端自己的 host 子进程**(`@deepseek-ai/dsh-desktop-host/lib/index.js`,父=桌面壳 Electron 主进程)④ 全机扫 `device-access|ai1net` **无任何独立进程**。装载生效取到**进程内证据**(`[hostlog]` 前缀 = host 内 cordis logger 桥吐出):`listening on 127.0.0.1:20090` + `device-access 装载判定(8s/16s)= OK`;模块自报口 `/__device_access/selfcheck` → `{module: device-access, moduleVersion: 1.0.0, port: 20090}`;`/api/v1/sessions` → **200**。重启前后 profile **md5 未变** ⇒ 换挂**不回退**。⇒ 结论:V6 的两条取证(包内模块清单 + `dsh.profile.bundles`)**同源同一个官方键**,无需任何改动。📌 遗留(登记、未动手):`aa-verify-home` 旧副本仍在盘上,属历史留档,是否归档由用户定。",
"🟢 **2026-09-30 07:53–07:58 · 桌面线 · 件 `前置-20090` 恢复(棒 `[协作]-[手机接入]-前置20090恢复`)**:V6 收口后 20090 掉线(主会话 07:50 实测无 LISTENING)⇒ 本轮诊断=**客户端整棵进程为 0**(非端口占用、非 profile 问题),经**宿主后台任务机制**跑正控入口起回 ⇒ `20090 LISTENING pid 54192`(host 子进程,argv 含在用 profile)+ host 内部日志桥三行齐 + 装载判定 8s/16s=OK;profile md5 `2ca1321c…` 改前=改后(未动 bundles)。产物 `ai1net-dsh-desktop/docs/实测单_前置恢复_2026-09-30.md`。🔴 如实登记两条未验证:**跨会话存活**(=未决 G1)与**经 20090 的功能可用性**(本机 Proxifier 会代理回环请求 ⇒ curl/connect 不可信,⛔ 本件拒用该判据)。⛔ 本件**未重复派**常驻化棒(`d27d2210` 已在做)。⚠️ 顺带:任务书推断「V6 收口把它带走」本轮**无法自证**(V6 实测单记其收口时 20090 仍在听;本机无进程退出历史)⇒ 原因未定论。"
],
"_目标": "本机(桌面客户端)内的多会话协作(类别:唤醒机制)",
"_说明": "2026-10-01 体检重建:原 18 个节点全属**已退役的手机接入线**(已归档)⇒ 队首判据长期指向退役需求。⛔ 判据按**可核对产物**,⛔ 不看自述。"
}