- 变更规模:新增 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/ 知识文件,按口径入库)
5.2 KiB
5.2 KiB
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=freecat 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)