104 lines
5.9 KiB
Markdown
104 lines
5.9 KiB
Markdown
# 心跳核对(第三轮)· 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 未动。
|