Files
dsh_ai1net_server/交付物/N9卡点判定与派活-20260929.md
T

70 lines
5.2 KiB
Markdown
Raw Normal View History

# N9 卡点判定与派活(2026-09-29 22:19 · 主会话)
> 触发:监管程序报警 `STALL.md`「有会话在跑但 **398 分钟无成果**」(22:14:30)。
> 本轮唯一任务 = 判「该谁动」(有活就派/被卡就明确报用户)。执行会话:`[主]STALL判定与派活-2216`,域锁 = `ai1net-dsh-server/tmp` + `ai1net-dsh-server/交付物`。
---
## 0 一句话结论
**报警是口径假阴性**(没有「结算事件」≠ 没有成果);**真卡点是跨线工程缺口**:设备侧 relay worker 通道不在 ⇒ 入口④闸 503。**不需要用户授权**,已派桌面线一棒解卡(`41182645` @22:23)。
## 1 「398 分钟无成果」为什么是假信号
| 项 | 实测读数 |
|---|---|
| 报警 | `STALL.md`:有会话在跑但 398 分钟无成果(22:14:30) |
| 被指对象 | `9443dbb5` = `[协作] N9 派活 · V2…`,宿主库 `status=working`,`updated_at` = **22:14:57**(仍活着) |
| 它其实有成果 | 22:13 落了 `ai1net-dsh-anywhere/docs/实测单_N9_发送腿与入口四闸_20260929.md`(含泳道图+事故链图);22:14:03 上报 N9 → `blocked` 并带 `block_reason` |
| 病灶 | `collabd-state.json` 的 `last_progress_at` 只认宿主 **ACCEPTED** run;21:56 起的 N9 棒是 **IN_PROGRESS** ⇒ 不刷新 ⇒ 报警器把「上次结算(15:36:17)到现在」当成「无成果」 |
| 已自愈 | 本轮跑 `collabd.py --once` 后,摘要变「在跑 1 个;**4 分钟** 无成果」,`STALL.md` 已消除 |
## 2 真卡点:唯一红格 = 设备侧 worker
链路:手机 → 平台入口**四闸** → relay → **设备侧 worker** → 垫片 `127.0.0.1:20090` → WorkBuddy 网关 → 桌面会话
| 环节 | 读数 | 判 |
|---|---|---|
| relay | `refuse d-bdf89014-c66f-4060-a2df-995d8c18a951-626dc095:20090 (worker offline)` | 🟥 无 worker 通道 |
| 平台④闸 | `503 device-unreachable`(`声明的端口全部离线(20090)`,连打 3 次) | 🟥 请求进不来 |
| 设备侧 worker | 匹配 `overlay-device-join\|dsh-worker\|relay` 的进程 **0 个**;`overlay-daemon.log` 最后一次 `UP -- registered … accepted=[20090]` = **2026-09-29 11:06:46** | 🟥 之后掉了 |
| 垫片 20090 | `/api/v1/health` = 200 · 直连 `/api/v1/sessions` = 200(22 条 / 7103 B) | ✅ 不是它的问题 |
**为什么掉**(最可能):11:06 那次是当**会话后台任务**起的 ⇒ 工具调用/会话一结束被沙箱回收。⇒ 解卡必须用**独立进程**拉起。
## 3 本轮唯一动作:派活(不动手做别线的事)
| 项 | 值 |
|---|---|
| 棒名 | `[协作]N9解卡 · 桌面线:设备侧节点守护独立拉起(relay 通道恢复 · 20090)` |
| automation id | **`41182645-6253-4d96-90ce-49a0de18de16`** |
| 排期 / 域 | 22:23 / `ai1net-dsh-desktop`(与 N9 线的 `ai1net-dsh-anywhere` 不重叠 ⇒ 可并行) |
| 要它做的 | 用**独立进程**拉起测试身份的节点守护(DataRoot `E:\dsh-worker-dev`,凭据有效期至 **09-30 11:06**)⇒ relay 重新 `online`+`ports=[20090]` ⇒ 复测④闸不再 503 |
| 已同时提示的坑 | ⛔ 别启用计划任务 `DSH-Worker-Dev`(2026-09-20 已退役的 S1 遗留任务,占 9411,与覆盖网络节点守护无关) |
同线接续棒(不是本轮派的):`c048a986` @22:20 = ④闸复测 + 桌面 `/sessions/live` 指针**受控归还**(N9 棒探针把指针移到了 `nope-0000`)。
## 4 要不要用户出手
| 档 | 内容 |
|---|---|
| ① 现在 | **不用**。测试身份凭据在有效期内(expiresAt `2026-09-30T03:06:10Z` = 本地 09-30 11:06)⇒ 解卡 AI 可自做 |
| ② 待触发 | 真账号验收要用**「用户身份」**的设备在线,而它凭据 **09-28 20:35:27 已过期(约 25.7 h)** ⇒ 到那一步**只能**你登一次(命令见 `tmp/supervise-inbox/NEED-USER.md` §②) |
⇒ 本轮**未**以「需用户授权」上抛(21:26 那版上抛是**过期信号**,你 21:51 已授权且已办结)。
## 5 顺手登记的机制缺陷(⛔ 本轮未动机制层 —— 需独占锁+你确认)
| # | 缺陷 | 后果 |
|---|---|---|
| M1 | `last_progress_at` 只认宿主 **ACCEPTED** run | 「在干」被判成「没干」⇒ 每轮假报警(本轮 STALL) |
| M2 | `collabd.py` 的受阻模板把**一切**受阻渲染成「需人处理 · 要哪一句授权」 | 跨线等待被当成「要用户放行」⇒ **假升级**(本轮已用 `NEED-USER.md §① 无` 对冲) |
| M3 | `taskgraph().ready` 只按 deps 算 ⇒ `running` / `blocked` 的节点仍算「可派」 | `digest` 喊「可派 N9」而队首空 ⇒ 口径打架、有重复派活风险(本轮用 `blocked.json` 兜住) |
| M4 | 泄漏锁无 TTL、持有者 `completed` 不自动失效 | 必留泄漏锁(21:5x 那把已按 R9 授权处置) |
## 6 收尾核验(可复跑)
- `cat tmp/supervise-inbox/queue.json` → `head=null` · `pending=0` · `blocked={N9: 跨线等待…}` · `gate=free`
- `cat tmp/supervise-inbox/digest.md` → 「可派:无」·「等待:N10」· 无 398 分钟报警
- `ls tmp/supervise-inbox/` → `STALL.md` 已消;`NEXT.md` = 受阻通报(内容引 `NEED-USER.md`)
- 归档:`tmp/lock-forensics/n9-20260929-2149/`(`blocked.json.empty-20260929-2218` · `NEED-USER.md.as-cleared-20260929-2218`)