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

105 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# 心跳核对(第三轮)· 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 未动。