diff --git a/docs/任务规划/README.md b/docs/任务规划/README.md
index 6e9cf0c0..4aa134ae 100644
--- a/docs/任务规划/README.md
+++ b/docs/任务规划/README.md
@@ -59,7 +59,7 @@
| 顺序 | 工作 | 当前状态 | 开始或切换条件 |
|---|---|---|---|
| **1** | **UI 补齐** | **清单已清空(2026-10-28)** | 记录 5 页与运行报告页已落地并绑页;余下 5 叶属 §5「当前不做」,重开条件见 docs/任务规划/UI补齐.md §5;上板判据见 docs/任务规划/登记簿.md §7 |
-| **2** | **net 层跨上下文收口** | **下一顺位(未开工)** | UI 清单已清空,切换条件已满足;**开工需用户点头**——换主线是产品决策,不由本批顺带做掉 |
+| **2** | **net 层跨上下文收口** | **✅ 2026-11-06 闭环** | 子项 A(裸指针收口为状态查询 API):审计确认收口已完成(`net_listener` 单一登记入口 `net_listener_request` + 单一执行者 `net_listener_tick`、`s_relisten_req` 0 处模块外直接读写;UI 读侧快照 API `ui_data_info`/唯一填充者 `ui_data_feed`);子项 B(突发分片让路):台架重验确认新负载剖面(SNTP 请求/退避 + FTP + 104 + 7003)下 **uiTask ≥800 ms 饿死签名不复现**(`task stall` 0 条、复位 0、NAND `wdev.log` 当日零新增 STALL、7003 最差 759 ms <800 ms 线)——证据见 `网络自愈架构设计.md` 与 `看门狗设计说明.md` 变更记录 2026-11-06 条目 |
| **3** | 其余结构与可靠性评估 | 排队 | net 收口后;逐项见 `登记簿.md`,观察项不为了“清清单”而强做 |
| **4** | 数据可信(采集数据可信度) | 动态波形验证 **✅ 2026-11-04 闭环(六轮)**;变比确认与两点标定等外部资源 | 信号发生器动态波形验证(不依赖外部资源,✅ 2026-11-04)→ 端子/子板变比确认 → 标准源两点标定;**排序调整(2026-10-29):动态验证让位给故障录波数据面**,段文件落地后判据升级为 PC 独立重算对表(docs/子系统设计/故障录波设计说明.md §11)(已知电压注入已于 2026-10-27 台架闭环并销项);外部资源到位可插入优先处理 |
| **5** | 标准源送检与第三方 104 主站验收 | 等待标定完成 | 两点标定完成且保护 VALID 已置位;送检窗口前 2 日冻结特性 |
diff --git a/docs/任务规划/登记簿.md b/docs/任务规划/登记簿.md
index c4aad674..bcaa1552 100644
--- a/docs/任务规划/登记簿.md
+++ b/docs/任务规划/登记簿.md
@@ -50,9 +50,10 @@
| 顺序 | 条目 | 要做什么 | 完成或关闭判据 |
|---|---|---|---|
-| 1 | **net 层跨上下文收口** | 同批处理两件事:裸指针收口为状态查询 API;对时 reconcile/relisten 突发导致 uiTask 800 ms 以上连续缺席,评估优先级矩阵与突发分片让路 | 同类台架负载下不再出现目标饿死签名;网络与 UI 回归通过;证据写入网络与看门狗模块文档 |
-| 2 | **网络性能资源建议簇** | 分别评估 PASV 重复建监听、PHY 强制 100M 无回退、`NET_MAX_SOCKETS` 与单连接语义不一致;DE 项随 RS-485,不在本项做。机理见 `../网络/Net层阻塞模型架构设计.md` 与 `Drivers/BSP/NET/README.md` | 每项形成“修改并验证”或“有理由不做”的结论;不为了清清单做无收益重构 |
-| 3 | **uvprojx 空 TU 观察** | 201 个 LVGL `.c` 中 127 个在 `.map` 零产出,但当前增量构建仅 4~5 秒;有全量构建耗时痛点时先补计时基线,再用 Keil 原生 `0` 可逆排除 | 有实测收益才保留改动;否则继续观察 |
+| 1 | **网络性能资源建议簇** | 分别评估 PASV 重复建监听、PHY 强制 100M 无回退、`NET_MAX_SOCKETS` 与单连接语义不一致;DE 项随 RS-485,不在本项做。机理见 `../网络/Net层阻塞模型架构设计.md` 与 `Drivers/BSP/NET/README.md` | 每项形成“修改并验证”或“有理由不做”的结论;不为了清清单做无收益重构 |
+| 2 | **uvprojx 空 TU 观察** | 201 个 LVGL `.c` 中 127 个在 `.map` 零产出,但当前增量构建仅 4~5 秒;有全量构建耗时痛点时先补计时基线,再用 Keil 原生 `0` 可逆排除 | 有实测收益才保留改动;否则继续观察 |
+
+> 原第 1 项「net 层跨上下文收口」已于 2026-11-06 闭环并销项(子项 A 审计确认收口完成、子项 B 台架重验确认新负载下 uiTask ≥800 ms 饿死签名不复现;证据见 `../网络/网络自愈架构设计.md` 与 `../子系统设计/看门狗设计说明.md` 变更记录 2026-11-06 条目)。原「dhara 重试自旋与卷锁评估」项随 #45 复核(卷锁无第二写者)关闭销项。
> RS-485 白名单随 `暂缓-RS485.md` 整簇处理,不列为 UI 后的独立编码任务。
> 并行写域、工作树与合并纪律统一见 `docs/环境与部署/并行任务工作树方案.md`。
diff --git a/docs/子系统设计/看门狗设计说明.md b/docs/子系统设计/看门狗设计说明.md
index d877ca05..ab745a94 100644
--- a/docs/子系统设计/看门狗设计说明.md
+++ b/docs/子系统设计/看门狗设计说明.md
@@ -713,3 +713,4 @@ enter/exit 段还能读出"此刻仍在段内已多久"——**永久阻塞的
| 2026-10-12 | **iec104Task / protectTask 纳入监视(IEC 104 上行/保护任务):必需掩码 `0x77`→`0xF7`→`0x1F7`** | 两行合并记录(IEC 104 上行 落地时漏补本文,保护任务 一并纠偏):**IEC 104 上行** 新增 `TASK_WD_IEC104 = 7`(iec104Task 100 ms 服务循环喂位,NET_READY 屏障等待按 100 ms 分片喂位),产品 `0x77`→`0xF7`、HW 层 `0x75`→`0xF5`;**保护任务** 新增 `TASK_WD_PROTECT = 8`(protectTask 20 ms 判据节拍喂位,见 `docs/算法/继电保护功能复现规划.md` §7),产品 `0xF7`→`0x1F7`、HW 层 `0xF5`→`0x1F5`。两任务均**不依赖存储/网络之外的屏障**(protectTask 无任何屏障)→ 任何构建都置位;均不做 NAND I/O → 不登记 FTL 心跳路由。主机侧单测 `beat_all()` 与 `tc_003`/`tc_005`/`tc_011` 掩码断言同步至 `0x1F7`,39 断言全绿。⚠ 注意 `0x1F7` 不含 bit3(testTask 任何构建不入掩码,口径不变) |
| 2026-10-25 | **停喂判定按位分账(v1.5,大窗判读 F2)**:stall/停喂唯一判据从「复合连续缺席窗数」改为「**任一必需位的连续缺席窗数**」——同一任务连续 8 窗(800 ms)没跑过才申报停摆并停喂;多任务交替缺席(本窗缺 A、下窗缺 B)各自清零、且缺席窗在容忍线下**照常喂狗**(旧实现自第一个缺席窗起就不喂,800ms 只是申报点)。动因 = 2026-10-25 台架大窗:54 个探针重建窗里 9 条 stall 行中 16:24/16:28 两起为复合误升级(mg=877/918,无任何单位到 800ms 单串),16:39 为真 UI 单串(~1.2 s,受害者面修复另立 F3 票);`MISS start` 降级为复合边沿**诊断行**(不再代表停喂,判读口径 §6.1/§11.1 同步);真停摆到复位的总时长最坏 +约 0.7 s(§2.2 链注)。§0/§2.2/§3.2/§5.3/§6.1/§11.1/§11.6 同步;主机单测 `test/host/watchdog/watchdog_test.c` 断言按新判据改写 + 新增 **TC-WATCHDOG-017**(20 窗交替缺席:零 stall、20 窗持续喂)/ **TC-WATCHDOG-018**(同位 8/9/10 连击必报停 + 停喂;恢复窗喂、账本重启,第二段亚容忍串不误报),47 断言全绿 |
| 2026-10-26 | **卷锁 try 失败纳入 ④「只计数」口径 + 修一处会骗人的契约(道G task-17)** | §4.3 场景表新增一行:卷锁 try 失败(defaultTask / uiTask 从不等锁,取不到就跳过本轮)既不需要分片也不需要心跳,缺的是**可观测**。落地形态:`App/fs/vol_lock.c` 记 5 态计数(`acquired` / `try_timeout` / `blk_timeout` / `failopen`,共 16 B 静态、一次自增),`vol_lock_get_stats()` **不取锁**、不关中断、任意上下文可调、NULL 无害。为什么不许在 try 失败处补一条日志:能把事写下来的通道(`/log/wdev.log`、`run.log`)自己也要取这把锁,而卷锁**非递归**,被卷忙挡住时既写不出东西还会自取死锁——所以留痕只能由 syslog 唯一写者按差值 latch 补投(另立 task-40 接在 `syslog_drain()` 的 `s_quiet_drop` 差值块之后)。同时修契约:`App/fs/vol_lock.h` 原写「0 - 超时未获取」、`vol_lock.c` 原 :38 把 fail-open 归给 0,而代码(:46)与 `TC-VOLLOCK-008` 都是**返 1**;现在两处都按代码写实并显式警告「返 1 也可能是零互斥」,`failopen` 计数就是它的证据。**观测时刻刻意不在锁层**:记时刻要读 tick,等于给 defaultTask 取锁链添 callee 与本帧(本档 §11 一贯按字节省的就是这条链),改由消费方观测并自盖 `obs_first_ms` / `obs_last_ms`——那是**被观测到的时刻**,不等于发生时刻,命名与文案都不许写成"首次发生"。机器证据:`test/host/vol_lock` 新增 TC-VOLLOCK-015~019(45 断言全绿:T2/T3 互不冒领、fail-open 计数可累加、读取不消耗证据);另把「喂狗点取锁一律 timeout=0」从注释纪律升级成会 FAIL 的断言——4 套假件加 `s_last_wait_to`,断言落在 TC-SYSLOG-010/012、TC-SOESTORE-016/018、TC-CFGFST-003/016/032/033、TC-LFTPIO-034,并做过红-绿反证(把 `sys_log_mcu.c:318` 的 `0u` 改 `50u` → 135/137 双红;把 `lftpd_io.c:48` 的 `100u` 改 `0u` → 32/33 红;随后按原串改回、SHA-256 逐字节相同) |
+| 2026-11-06 | **台架重验(#39 子项 B):新负载剖面下 uiTask ≥800 ms 饿死签名不复现** | 新负载剖面一整轮 30 min(00:34–01:04):SNTP 请求/退避(poll_min=1,无可达服务器)+ 持续 FTP 512KB + 周期 104 GI/COV + 7003 拉帧 10Hz。结果:看门狗 `task stall` **0 条**、复位 **0 次**、NAND `/log/wdev.log` **当日零新增 STALL**(独立佐证,最新一条为 2026-11-05 11:24:39);**880** 次瞬时节拍抖动(UI/FTP/IEC104 位)全部 <800 ms 自恢复、均与网络 relisten 瞬间同刻——阈值下抖动,非饿死;7003 最差单轮 **759.1 ms**(<800 ms 线)、18000/18000 零 CRC 零超时;FTP 188/188 全过;104 协议负载正常(16/18 检查项,COV 触发 FAIL = 台架浮空模拟输入已知限制、无 B10 源)。结论:8888 reconcile/relisten 突发源退役(#78,2026-11-04)+ 异步 `net_drop_conn` 收口后,新负载下 **uiTask ≥800 ms 饿死签名无触发源**——子项 B 完成判据(台架负载下不再出现目标饿死签名)本轮达成。网络侧记录见 `网络自愈架构设计.md` 变更记录 2026-11-06 条目 |
diff --git a/docs/网络/网络自愈架构设计.md b/docs/网络/网络自愈架构设计.md
index 67baff55..45cc0e23 100644
--- a/docs/网络/网络自愈架构设计.md
+++ b/docs/网络/网络自愈架构设计.md
@@ -644,6 +644,7 @@ DISCONNECT 会被 `(void)` 丢掉。但 RECV_OK 是条件位(下轮补回)
| **E18** | **负向注入打靶 · 三轮**(注入代码不入库):① 吞掉 DISCONNECT(在 i104 的 200 ms accept 轮询窗内 RST);③ 绕过本层簿记直接 close 芯片空闲监听;⑤ 开盲区吞掉芯片自发的中断 + 等芯片真 CLOSED 再 open+listen | **①③⑤ 全部命中并救回**;①⑤ 的前提会被更快的消费者路径消解 → 常态 0 命中;⑤ 还要先越过芯片 `FIN_WAIT_2`(E15 的 2MSL 长尾,实测 ≈1 s) | §4.1.4 / §4.1.5:**三条均不可降级为只留痕**;⑤ 的**取消挂起 recv/send** 不可省 |
| **E19** | **`force open` 反事实 A/B**(本层已收口 CLOSED + 芯片停 `FIN_WAIT_2` `0x05/0x06` + **对端挂住不关** = 队头阻塞场景;A = 现状放行,B = 只留痕不放行) | **放行与不放行的端口恢复时刻同一分布** → 动作在全部可产现场景内无可测收益;真正兜住"监听器永久失效"的是 **D10 预算 + 形态④ 重新登记**。两条实测坑:① 本层直接改 `state` **不会**进沉降窗(窗只由 `net_listener_settle` 开启);② `relisten retry budget exhausted` 在此被稳定复现 = 对端不配合拆链的签名,**非回归** | §4.3:800 ms 上限降级为**只留痕**(`keep waiting` 只留首末、隔离标志不清 → 继续排渣) |
| **队头阻塞审计**(非实验编号) | `net_drop_conn` 收口后的时序由台架定案(探针 `e02_probe.py` 已删除,2026-11-04 随 :8888 退役,正文见 git 历史) | 对端配合(收到 FIN 后其内核 close):`TIME_WAIT` ~150 ms → 形态④ relisten,恢复全程 ~500 ms;对端内核存活但不 close:芯片停 `FIN_WAIT_2` 长尾,**监听恢复受限于对端 close** | §4.6 |
+| **台架重验(#39 子项 B)**(2026-11-06) | 新负载剖面一整轮 30 min:SNTP 请求/退避(poll_min=1,无可达服务器)+ 持续 FTP 512KB + 周期 104 GI/COV + 7003 拉帧 10Hz。看门狗 `task stall` 0 条、复位 0 次、NAND `wdev.log` 当日零新增 STALL(独立佐证);880 次瞬时节拍抖动全部 <800 ms 自恢复、均发生在网络 relisten 瞬间(阈值下抖动,非饿死);7003 最差单轮 759 ms(<800 ms 线)、18000/18000 零错零超时;FTP 188/188 全过 | 8888 reconcile/relisten 突发源退役(#78)+ 异步断连收口后,新负载下 **uiTask ≥800 ms 饿死签名无触发源**——子项 B 完成判据(台架负载下不再出现目标饿死签名)本轮达成 | §4.6;§11.1;看门狗设计说明 §11.4 |
## 6. 红线(明确不做的事)