Files
dsh_ai1net_server/交付物/心跳核对-N9复测在跑-20260929.md
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

5.9 KiB
Raw Permalink Blame History

心跳核对(第三轮)· N9 复测棒已在跑 · 2026-09-29 22:49

触发:监督程序心跳「需求仍未完成(持续 30 分钟)」。 目标:手机查看并可回复桌面 WorkBuddy 中会话。 本轮结论:该谁动 = 已经在动。不派新棒、不需要用户拍板。


§0 结论速览

问 答
任务图还剩什么 N9(running,复测棒在跑)+ N10(pending,deps=[N8,N9] 挡住)
卡住了吗 上游已通;垫片 20090 此刻 502(复测棒第①步的射程内,非新卡点)
该派谁 不派 —— 唯一两个后继(N9 复测 / 垫片常驻化)都在跑或已排期
需要用户吗 不需要(真账号验收那条是「待触发」,现在不用动)

§1 机器读数(本轮实测,2026-09-29 22:48–22:49)

层 读数 判
N9 复测棒会话 e17c96e0,status=working,updated_at 22:48:49 ✅ 在跑
它持的锁 [协作]N9复测-2248,域 ai1net-dsh-anywhere,22:48:13 ✅ 已开工
任务图上报 22:48:20 N9: blocked → running by [协作]N9复测-2248 ✅ 已接管
设备侧守护 node pid 50024 存活;overlay-daemon.log 末行 22:26:58 UP -- registered … accepted=[20090] ✅ 在服役
relay 客户端 state=up(for 1288810ms) ≈ 21.5 min 连续、reconnects=0、rtt=434ms ✅ 链路活
🔴 relay 转发量 streams=0 / in=0B / out=0B ⚠️ 至今零请求被转发
47 relay /status(权威) u:bdf89014-… 的 sessions 含 d-bdf89014-…-626dc095;dialers: [];capacity 7515/used 3 ✅ 注册在册
垫片 20090 health=**502**、无 LISTENING、electron.exe 0 个 🔴 不在
队列 head=null · pending=0 · gate=free · blocked={N9, N9-持续性, N10} ✅ 与事实一致

§2 本轮唯一新发现:relay 的「在线」≠ 端到端可用(登记为 M8)

上面两行并排看就是病根:

47 relay  /status   →  sessions: [d-…-626dc095]     ← 说「在线」
本机      20090     →  health=502 / 无监听 / 0 进程  ← 实际「背后没人」

机制:relay 判 worker 在线,只认「有没有客户端注册上来」(注册时自报 accepted=[20090]),从不校验 20090 背后是否真有进程在听。注册成功那一刻就把端口记进路由表,此后不再复核。

后果(今天已复发 3 次):

  • ④闸的 503 device-unreachable 与「relay 说 online」可以同时为真;
  • 任何只看 relay /status 就断定「上游已恢复」的判断都会假绿(上一轮我自己也差点这么判);
  • 唯一可靠判据是两个都读:relay 注册态 + 本机 20090 健康态。

⇒ 已把这条写进本轮 blocked.json 的 N9 条目,防下一棒只读 relay 就往下走。


§3 为什么本轮不派(三条硬理由)

  1. 唯一后继正在跑 —— N9 本体读数必须由复测棒自己出(它 22:48:20 已接管 N9);我另起一棒=制造两个工人抢同一个靶子会话,必出假读数。
  2. 会撞锁 —— 相关域 ai1net-dsh-anywhere(N9 复测)与 ai1net-dsh-desktop(垫片常驻化)都已被持/已排期,硬派即撞。
  3. 抢跑会取到假 502 —— 复测棒第①步就要(按协议)把垫片拉起来;此刻它正在做这件事,我在旁边复测只会读到它拉起来之前的 502。

兜底:N9 复测棒若收口时仍未出本体读数 ⇒ 下一轮心跳我直接派接续棒(同线、接它留下的缺口),不需要用户介入。


§4 在排的两棒(都不是本轮派的,本轮只核对)

棒 id 线 / 排期 硬判据
N9 复测 b8335866 ai1net-dsh-anywhere / 22:48(已在跑) ④闸 200 + V2 消息真落进桌面会话;单独点名 streams 是否由 0 变正
垫片常驻化 d27d2210 ai1net-dsh-desktop / 23:12 本会话收口后 20090 仍 200(自己活着时测不出来 ⇒ 必须交下一棒验)

两棒域不重叠,可并行;23:12 那棒内置冲突闸:若 20090 被别棒占着就避让并自接(+6 min)。


§5 用户介入档

档 内容
① 现在 无。全程走测试身份(E:\dsh-worker-dev,凭据有效至 09-30 11:06),AI 可自办
② 待触发 真账号验收需「用户身份」设备在线,其凭据 09-28 20:35 已过期 ≈26 h ⇒ 到那步只能你登一次(命令在 NEED-USER.md §②,标了「现在不用动手」)
③ 已撤回 上轮「需你放行 schtasks」作废 —— 经入口脚本 spawn 的 schtasks 实测可用(22:26:55 那次即证),被拦的只是会话里直接调这一条

§6 机制缺陷台账(累计,⛔ 本轮未动机制层 —— 需独占锁+用户确认)

# 缺陷 后果 状态
M1 last_progress_at 只认宿主 ACCEPTED run 「在干」判成「没干」⇒ 每轮假 STALL 未修
M2 受阻模板一律渲染「🛑 需人处理」 跨线等待被假升级(已第 3 次复现) 未修
M3 taskgraph().ready 只按 deps 算 running/blocked 仍算「可派」 未修
M4 泄漏锁无 TTL / 持有者 completed 不自动失效 必留泄漏锁 未修
M6 「垫片常驻」无归属无验收 缺口反复复发 本轮已派棒(23:12)试点
M7 只读棒不落盘 ⇒ 读数不可追溯 22:37 复核棒的读数无人能查 未修
M8 relay 的 online 判据不含后端(20090)健康 假绿 ⇒ ④闸 503 与「在线」并存 本轮新登记

§7 锁

窄域 2 键(ai1net-dsh-server/tmp + ai1net-dsh-server/交付物)RC=0;收尾 --release-exec "[主]心跳核对-2249"。 现存 .locks 里的 [协作]N9复测-2248 是复测棒在持,按 R9 未动。