- 变更规模:新增 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.9 KiB
5.9 KiB
心跳核对(第三轮)· 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 为什么本轮不派(三条硬理由)
- 唯一后继正在跑 —— N9 本体读数必须由复测棒自己出(它 22:48:20 已接管 N9);我另起一棒=制造两个工人抢同一个靶子会话,必出假读数。
- 会撞锁 —— 相关域
ai1net-dsh-anywhere(N9 复测)与ai1net-dsh-desktop(垫片常驻化)都已被持/已排期,硬派即撞。 - 抢跑会取到假 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 未动。