Files

108 lines
24 KiB
JSON
Raw Permalink Normal View History

{
"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 个节点全属**已退役的手机接入线**(已归档)⇒ 队首判据长期指向退役需求。⛔ 判据按**可核对产物**,⛔ 不看自述。"
}