docs(任务规划): 按现状重排波次——UI 补齐转为当前波次,数据可信转收口态

用户要求按现状重新规划。盘点后现状与文档已有实质偏差,本次一并纠正。

一、盘点结论(2026-10-25)
- 批 1 / 批 2 / 批 2.5 全部收口,工作树清零、两锁空闲。
- 数据可信:软件侧 100%(卡 1~11 全销项;M4 ②③④⑥、M5 ①②③、M6 全达成),
  只剩卡 0(万用表)/ 0b(子板变比)/ 12(标准源)三张台架与外部卡。
- UI:33 叶已绑 12、剩 21。原口径「余批 5 = 整定 4 页」按页面批次统计,
  漏了批 1 剩的 3 页(时钟/复归/清除记录)与批 3 的 12 页,实际差 17 叶。
- 结构债:剩 net 收口、白名单、性能簇、dhara、卷锁、USART1 六项。
- 工具链 S12 / A-5 / P1-10 / S1-c 全销项。

二、关键发现:保护整条链现在是闭锁态
protect_task.c:98 要求 UA/UN/IA 的 ADC_CAL_F_VALID 全置位才走判据,而 VALID 只在
两点标定写入 [adc_cal] valid 后才置位(adc_cal.c:338)。产品构建(非 DTU_BENCH)
下保护不动作——这是卡 5 的有意设计,但意味着核心功能当前关闭,解锁只有
卡 0 -> 0b -> 12 一条路。已写进 README §1.1、数据可信 §3、采集保护收尾、AGENTS.md。

三、三条用户判断(2026-10-25)
1. 台架不在手边 -> 卡 0 顺延,本波整体不占编码道。
2. 保护保持未标定闭锁到标准源到位,不用万用表标定走捷径。
3. 下一波只做 UI 补齐,结构债押后。

四、新波次顺序(README §2.0)
采集保护收尾 -> 数据可信(收口态)-> UI 补齐(当前)-> 结构债(押后)->
预算与内存(暂缓)-> 验证常态 -> 仓库决策 -> 暂缓 -> 硬件改版。
排序原则补一条元规则:优先级只在「能开工」的项之间比较——高优先级波次全被
外部资源或硬件代次卡住时,按「现在能整波闭环」重排,阻塞原因写进「为什么在这」列。

五、新增 UI补齐.md(当前波次任务卡)
21 叶按数据源就绪度分三梯队:第一梯队 9 叶零依赖(整定 4 + 维护 3 + 遥测 2)、
第二梯队 4 叶需新配置段(通讯设置 + 遥信 3,后者无开入硬件不立卡)、
第三梯队 6 叶需写入方或计数器(记录 5 + 运行报告);不排 2 叶(手动录波 / SNTP)。
共 7 张任务卡,单道串行——ui_menu_tree.txt 与 ui_page_registry.c 是单写者生成物。

六、顺带清掉的文档漂移
- 排期详述 §1/§2 还挂着 3 条已销项条目(日志管线 N-2、写回 flush N-22、
  探针心跳 N-17),与 README §2 自相矛盾 -> 删除并补销项说明。
- 测试与架构专项:§1 P1-10 与 §2.1 S12、§2.3 A-5 已销项却仍留详述 -> 压缩成证据指针。
- README §1「网络 4」只列 3 条(漏 N-30)-> 补齐。
- docs/README 文件夹地图与登记簿卷首仍称「数据可信 = 当前波次」-> 改指 UI补齐.md。
- 页面补齐规划的就绪度表:遥测死区/系数随卡 10/卡 2 已具备数据层、SOE 页已落地,
  三行状态更正;统计口径改为「27 叶中 6 叶已落地,剩 21 叶」。

七、踩到的坑(写进日志备查)
测试与架构专项卷首那段「已完成事项的证据沉淀」清单是 S4/S5/S7/S9/S11 的**定义出处**,
压缩时一并删掉会让校验 2 在 6 个文件上爆 14 类新账(实机测试实施指南 S4x7/S5x5、
check_test_traceability.py S4x5 等)。清单已原样恢复——它看着像历史,实际是门禁的锚点。

八、门禁
check_ids --strict 通过(可判定 9306/11003 = 84.58%,基线 84.0%);
check_doc_links --all --sections-strict 通过(180 文档 / 2684 处章节引用)。
This commit is contained in:
2026-10-25 22:07:29 +08:00
parent 17ece864d1
commit 68cbf8ea75
11 changed files with 341 additions and 191 deletions
+1 -1
View File
@@ -10,7 +10,7 @@
## 项目概况
**现状一句话**:平台能力(网络 / 存储 / 时间 / UI / 日志 / 看门狗 / FTP / 配置)**已实现并台架验收**;采集主线已闭环到业务消费者(L1→L2 相量→L2.5 遥测快照→L3 保护判据 protectTask→104 遥信/遥测+UI,B5/批 2);**RS-485 采集尚未接线**(B2 按用户决策冻结,见 `docs/任务规划/暂缓-RS485.md`)——当前最大功能缺口,接线节奏受 E-59 门禁约束(见「平台约束」)。
**现状一句话**:平台能力(网络 / 存储 / 时间 / UI / 日志 / 看门狗 / FTP / 配置)**已实现并台架验收**;采集主线已闭环到业务消费者(L1→L2 相量→L2.5 遥测快照→L3 保护判据 protectTask→104 遥信/遥测+UI,B5/批 2);⚠ **保护判据现处于「未标定闭锁」态**——产品构建下 `adc_cal_flags()` 的 `ADC_CAL_F_VALID` 未置位,`protect_task.c:98` 直接停走判据,等卡 12 两点标定写入 `[adc_cal] valid` 后自动解卡(用户裁定 2026-10-25:保持闭锁,不用万用表走捷径);**RS-485 采集尚未接线**(B2 按用户决策冻结,见 `docs/任务规划/暂缓-RS485.md`)——当前最大功能缺口,接线节奏受 E-59 门禁约束(见「平台约束」)。
**数据主线**(能力视角;分层图与跨层依赖表 → `docs/架构设计/项目架构总览.md`):
+1 -1
View File
@@ -238,7 +238,7 @@ docs/
| 位置 | 内容 |
|---|---|
| [`任务规划/`](任务规划/README.md) | **统一待办登记簿(文件夹)**——`README.md` = 排序权威(推进顺序 + 波次语义名)+ 编号空间 + 维护约定;`数据可信.md` = **当前波次**(通道标定 → 遥测链 → 运行参数,14 张卡);`采集保护收尾.md` = 「采集保护收尾」剩余(只剩 M3 送检);`登记簿.md` = N/S/T-x 长期观察;`排期详述.md` / `暂缓-RS485.md` / `测试与架构专项.md` = 波内详表 / 冻结簇 / 专项;`基线与待确认.md` = 待确认(开放问题,OQ 族属主);**`并行分道方案.md` = 待办横向归道(写域 域1~域8 + 道A~道H + 批次 + 合并次序)**;只保留未闭环项,完成即删 |
| [`任务规划/`](任务规划/README.md) | **统一待办登记簿(文件夹)**——`README.md` = 排序权威(推进顺序 + 波次语义名)+ 编号空间 + 维护约定;`UI补齐.md` = **当前波次**(21 叶补齐,7 张卡);`数据可信.md` = 收口态(软件侧已 100%,剩 3 张台架/外部卡);`采集保护收尾.md` = 「采集保护收尾」剩余(只剩 M3 送检);`登记簿.md` = N/S/T-x 长期观察;`排期详述.md` / `暂缓-RS485.md` / `测试与架构专项.md` = 波内详表 / 冻结簇 / 专项;`基线与待确认.md` = 待确认(开放问题,OQ 族属主);**`并行分道方案.md` = 待办横向归道(写域 域1~域8 + 道A~道H + 批次 + 合并次序)**;只保留未闭环项,完成即删 |
| `硬件平台/` | 网表详细分析报告与语义图(V0.0 / V0.1);**[`ADC通道映射说明.md`](硬件平台/ADC通道映射说明.md)——V0.1 十七路 ADC 语义/网名/通道号权威映射表(固件取数、UI 显示、自检注入以此为准)** |
| `芯片手册/` | 外部芯片数据手册转录(CH395F / GD5F2GQ5UE / SD2506 / TPAFE5160 / RTL8305NBI 等) |
| `images/` | 文档技术配图(`.svg` 产物,由 `tools/arch_diagram/`、`tools/refgraph/` 生成) |
+4 -4
View File
@@ -66,8 +66,8 @@
| 14 | 定值(查看) | 列表(18 项 / 3 页) | 同 9 | ✅(需快照层) |
| 15 | 控制字(查看) | 列表(4 项) | 同 10 | ✅(需快照层) |
| 16 | 软压板(查看) | 列表(10 项 / 2 页) | 同 11 | ✅(需快照层) |
| 18 | 遥测死区 | 可编辑列表(4 项) | 运行参数段 0x8020~0x8023 | ❌ 运行参数段未实现 |
| 19 | 遥测系数 | 可编辑列表(9 项) | 微调系数(参考 TLV10) | ❌ 随标定 |
| 18 | 遥测死区 | 可编辑列表(4 项) | `[run_par]` 9 键死区 | ✅ 数据层已落地(卡 10),**页面未做** |
| 19 | 遥测系数 | 可编辑列表(9 项) | `[adc_cal]` 的 k / b | ✅ 数据层已落地(卡 2),**页面未做** |
| 20 | 遥信类型 | 可编辑列表 | 开入量 | ❌ 开入未实现 |
| 21 | 遥信防抖 | 可编辑列表(1 项) | 运行参数 0x8030 | ❌ 同上 |
| 22 | 双点遥信 | 可编辑列表 | 开入量 | ❌ 同上 |
@@ -77,7 +77,7 @@
| 27 | 清除记录 | 操作页(选类型 + 确认) | `sys_log`(**缺删除 API**) | 🔶 需补 API |
| 29 | 通讯设置 | 可编辑列表(4~6 项) | 104 公共地址/端口/主站(当前固定) | 🔶 需 `comm_cfg` |
| 31 | SNTP设置 | 可编辑列表(3 项) | SNTP 客户端 | ❌ 未实现(产品口径亦未定) |
| 33 | SOE记录 | 动态列表(每记录 2 行) | `/log/soe.log` 二进制 64B | 🔶 需专用 reader |
| 33 | SOE记录 | 动态列表(每记录 2 行) | `/log/soe.log` 二进制 64B | ✅ 已落地(`ui_page_soe.c`) |
| 34 | 事故记录 | 动态列表 | 跳闸记录 | ❌ 记录类型未实现 |
| 35 | 操作记录 | 动态列表 | 操作记录 | ❌ 同上 |
| 36 | 保护告警 | 动态列表 | 告警记录 | ❌ 同上 |
@@ -85,7 +85,7 @@
| 38 | 遥控记录 | 动态列表 | 遥控记录 | ❌ 同上 |
| 41 | 运行报告 | 信息页(统计) | 上电次数/运行时长/复位原因/通信统计 | ❌ 计数器未实现 |
**统计**:数据现成 **11** 项 · 需新数据层 **3** 项 · 数据源不存在 **13** 项。
**统计(2026-10-25 复核)**:本表 27 叶中 **6 叶已落地**(遥信量 / 查看 4 页 / SOE),剩 21 叶 = 数据现成 **8** 项(整定 4 + 时钟 + 复归 + 死区 + 系数)· 需新数据层 **2** 项(清除记录 / 通讯设置)· 数据源不存在 **11** 项(遥信 3 + 手动录波 + SNTP + 记录 5 + 运行报告)。**分批与 DoD 见 `docs/任务规划/UI补齐.md`**——本表只讲逐页形态与数据源,不重复排期。
---
+35 -24
View File
@@ -9,7 +9,8 @@
> |---|---|---|
> | `README.md`(本文件) | 编号空间(§0)· 未闭环一览(§1)· **推进顺序权威(§2)** · 维护约定(§3) | 低频;仅主工作树 |
> | `采集保护收尾.md` | 「采集保护收尾」剩余:只剩 M3 送检(B10) | 低频——送检窗口前后改 |
> | `数据可信.md` | **当前波次(2026-10-23 用户定项)**:通道标定 → 遥测链 → 运行参数段;含事实基线、折算模型、**14 张任务卡**(含"已知电压注入验证"与"端子变比确认"两卡)、前置决策 | **高频**——开工后状态流转只改它 |
> | `UI补齐.md` | **当前波次(2026-10-25 用户定项)**:菜单树剩 21 叶未绑,按数据源就绪度分三梯队;含现状核对、三梯队、**7 张任务卡** | **高频**——开工后状态流转只改它 |
> | `数据可信.md` | **收口态**:软件侧 100%(卡 1~11 已销项),只剩卡 0 / 0b / 12 三张台架与外部卡;含事实基线、折算模型、前置决策 | 低频——只在上机或外部资源到位时改 |
> | `排期详述.md` | 「结构债」/「验证常态」波内详表 | 低频 |
> | `并行分道方案.md` | **待办横向归道**:文件级写域(域1~域8)· 八条道(道A~道H)· 批次与合并次序 · 不能并行的事项 | 低频——分道或批次变化时改;**明细不复制**,只做归道 |
> | `暂缓-RS485.md` | B2 RS-485 整簇冻结清单(用户决定) | 极少 |
@@ -17,7 +18,7 @@
> | `测试与架构专项.md` | S1x / A-x 专项(P1-10 / S12 / A-5 已于 2026-10-25 销项) | 低频 |
> | `基线与待确认.md` | **只放还没答案的问题**(OQ 族属主登记处);基线类内容已移出到模块文档 | 参考,少改 |
>
> **怎么用**:想知道"现在该做什么、按什么顺序" → 本文件 **§2**;想知道"当前波次任务卡状态 / 验收判据 / 并行道" → `数据可信.md`;
> **怎么用**:想知道"现在该做什么、按什么顺序" → 本文件 **§2**;想知道"当前波次任务卡状态 / 验收判据 / 并行道" → `UI补齐.md`;
> 想知道"某条待办的来龙去脉" → 按编号查 `登记簿.md` / `测试与架构专项.md`;想知道"还差哪些验证" → `排期详述.md` §2。
>
> **只保留待办**:已完成条目直接删除,不留变更记录(历史见 `git log` 与各模块文档);
@@ -56,27 +57,33 @@
| 类别 | 数量 | 条目 |
|---|---|---|
| 网络 | 4 | N-3(L5 基线重验)· N-16(A2/A4 负向台架)· **reconcile 突发饿死 uiTask**(🟦并档 E-27/28 批 3 评估)——2026-10-25 台架两轮分箱定案的饿死型签名。本波连带三修已合入并销项(按位分账 66f862e / sink 往返喂位 9d90e00 / v5 判读 v1.1 4c05b58+a92baa2,两轮验收与分箱证据 `boot_log_data/f3rounds_r1/r2` 两 gz)。本波道F 原三张条目(日志静默观察 / 探针窗口心跳 / 写回 flush)已于 2026-10-25 台架大窗销项删行——心跳主签名在 9 条 stall 行中 NET 位全程在场 = 旧 44/44 必发归零;复跑暴露的两个新签名以语义标识上行为本表独立条目,详 `登记簿.md` §1 |
| 网络 | 4 | N-3(L5 基线重验)· N-16(A2/A4 负向台架)· N-30(relisten 沉降段统一受阻,观察)· **reconcile 突发饿死 uiTask**(🟦并档 E-27/28 批 4 评估)——2026-10-25 台架两轮分箱定案的饿死型签名。本波连带三修已合入并销项(按位分账 66f862e / sink 往返喂位 9d90e00 / v5 判读 v1.1 4c05b58+a92baa2,两轮验收与分箱证据 `boot_log_data/f3rounds_r1/r2` 两 gz)。本波道F 原三张条目(日志静默观察 / 探针窗口心跳 / 写回 flush)已于 2026-10-25 台架大窗销项删行——心跳主签名在 9 条 stall 行中 NET 位全程在场 = 旧 44/44 必发归零;复跑暴露的两个新签名以语义标识上行为本表独立条目,详 `登记簿.md` §1 |
| 存储 / 日志 | 3 | **S-3(USART1 TX-only 根治)** · S-4(dhara 重试自旋)· S-5(可选全序列卷锁) |
| 结构 / 健壮性 | 3 | N-23(注册校验残余白名单)· N-25(性能/语义簇)· N-28(uvprojx 空 TU 观察) |
| 仓库 | 1 | N-29(`.git` **233 MB**,**已决策暂不处理、登记观察**) |
| 硬件 | 1 | N-18(V0.2 改版项) |
| 测试 / 基础设施 | 3 | T-7(CI 远端两 job 闭环 + 第二机交叉验证)· A-4(采集链路测试约束,RS485 侧随 B2 暂缓)· 串口助手 A6/A7 补验(待 CH340) |
| UI | 1 | U5 页面落地 🟦**批 2 道E 大部落地**(批 1~4:`ui_data` 三通道 + 遥信 33 行 + 定值查看 4 页 + 记录页 reader 链,黄金 18 页入库;余批 5 = 整定 4 页 + `param_request` 写路径,板端有状态导航器已备) |
| **UI**(当前波次) | 1 簇 · **21 叶** | **U5 页面落地**——33 叶已绑 12、剩 **21**(不是原口径的 4 叶):第一梯队 9 叶(整定 4 + 维护 3 + 遥测 2,数据源全就绪)· 第二梯队 4 叶(通讯设置 + 遥信 3 页)· 第三梯队 6 叶(记录 5 + 运行报告)· 不排 2 叶(手动录波缺模块 / SNTP 缺口径)。组件层三件套已落地但**零消费者**,详表 `UI补齐.md` |
| **暂缓** | 2 簇 | **B2 RS-485 整簇**(`暂缓-RS485.md`)· **N-27 内存优化簇剩余**(R-2 后半 / R-3 / R-4 / R-6;重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4)。⚠ 已落地的 R-9 与 `mem-budget` 门禁/台账/趋势**不回退** |
| **数据可信**(当前波次) | 1 簇 · 在途 3 卡 | 🔴台架/外部:已知电压注入(卡 0,一块万用表就能开)· 端子变比确认(0b,🟡)· 标准源两点标定(12,🟡)。**卡 1~7 批 1 销项、卡 8~11 批 2 销项(2026-10-25,遥测快照/104 读快照/运行参数段/频率绑定全链 + 大窗与验收窗台架钉证;详表 `数据可信.md` §5)** |
| **数据可信**(收口态) | 1 簇 · 剩 3 张外部卡 | **软件侧已 100%**:卡 1~7 批 1 销项、卡 8~11 批 2 销项(2026-10-25,遥测快照/104 读快照/运行参数段/频率绑定全链 + 大窗与验收窗台架钉证;详表 `数据可信.md` §5)。剩 🔴 已知电压注入(卡 0,一块万用表即可)· 🟡 端子变比(0b)· 🟡 标准源两点标定(12)。⚠ **保护现处于未标定闭锁态**——`protect_task.c:98` 要求 UA/UN/IA 的 `ADC_CAL_F_VALID` 全置位,而 VALID 只在标定写入 `[adc_cal] valid` 后才置位;用户裁定(2026-10-25)**保持闭锁到标准源到位**,不缩短解锁路径 |
> **网络侧 E-xx 存量项**(历史编号族,属主文档已于 2026-10-15 删除,编号冻结见
> `docs/编号规范.md` §4.3):E-27 / E-28 挂「net 层跨上下文收口」(见 `排期详述.md` §1);
> E-47 待 CH395F 驱动侧定案;E-12 为 `FF_FS_LOCK` / 单写者纪律记录项;E-31 后续与 E-62
> 为回归监督项(纪律已固化于 `AGENTS.md`,无需改动)。
> UI 标准化只剩 U5 页面落地,见 §2「UI 扩展」;lftpd 主机测试缺口为整簇排期项。
> UI 标准化只剩 U5 页面落地(21 叶),见 §2「UI 补齐」;lftpd 主机测试缺口为整簇排期项。
### 1.1 结构性判断(排序依据)
1. **功能主线优先(用户决定 2026-10-12)**:把"采集→相量→保护→上送"链路收口到"台架闭环 + 功能面完整 + 可送检"。前两项已达成,「采集保护收尾」只剩 M3 送检(`采集保护收尾.md`)。**RS-485 对下采集(B2)暂缓**(`暂缓-RS485.md`),主线不等它。
2. **内存预算红线已机械化**:`mem-budget` 钩子拦 RW_IRAM1/RW_CCM >92%,子系统配额 / CCM 台账 / 趋势基线 → `docs/内存管理/RAM预算台账.md`。**R-2 后半与 R-3 / R-4 / R-6 整簇暂缓**(CCM 只剩 **7,904 B**,重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4)——**门禁与台账继续常开,它们正是"何时该重开"的传感器**。
3. **验证债仅剩窗口性事项**(L5 基线重锁 / A2-A4 负向台架 / 探针窗口心跳 / 串口助手补验),不单独排期、逢窗口顺手做。
2. **产品功能面在 V0.1 已到顶**(2026-10-25 复核):保护元件的三相类(B/C 相过流、零序过流、PT/CT 断线、方向/功率类)**全部被 N-18 硬件缺陷挡住**(跨转换器无同一时刻性 + STM32 侧削顶),剩余可行的只有 A 相涌流制动 / 突变量启动 / 无压无流闭锁 / 元件级校验和 4 项,而它们**没有标准源就无法验证**。加上**保护当前整条链处于未标定闭锁态**(`protect_task.c:98`),保护侧的工作在标准源到位前**没有可闭环的增量**。
3. **数据可信软件侧已尽**:卡 1~11 全销项,剩下的卡 0 / 0b / 12 三张全是台架或外部资源(万用表 / 子板 / 标准源),软件道插不上手。
4. **内存预算红线已机械化**:`mem-budget` 钩子拦 RW_IRAM1/RW_CCM >92%,子系统配额 / CCM 台账 / 趋势基线 → `docs/内存管理/RAM预算台账.md`。**R-2 后半与 R-3 / R-4 / R-6 整簇暂缓**(CCM 只剩 **7,904 B**,重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4)——**门禁与台账继续常开,它们正是"何时该重开"的传感器**。
5. **验证债仅剩窗口性事项**(L5 基线重锁 / A2-A4 负向台架 / 串口助手补验 / T-7 CI 两 job),不单独排期、逢机顺手做。
> **结论(2026-10-25 重排的实质)**:第 1~3 条说明**高优先级波次全部被外部资源或硬件代次卡住**,
> 而 UI 补齐是唯一"数据源已就绪、不依赖台架、能整波闭环"的工作。故本轮**只做 UI**,
> 结构债押后——不是它不重要,是它没有外部依赖、随时能捡起来,而 UI 的 21 叶一直压着产品可见度。
---
@@ -85,7 +92,10 @@
> **本节是全项目所有工作流唯一的权威顺序**:`产品需求设计文档.md` §9.2、`../算法/继电保护功能复现规划.md`、
> 各模块文档里的路线图均为局部视图,**顺序变更只改本节,其它文档只留指针**。
> 排序原则:**安全风险 > 产品功能主线 > 数据正确性 > 预算/结构债 > 验证常态 > UI 扩展 > 仓库决策**(当前无未闭环安全项)。
> 波内详表在挂接文件里(`采集保护收尾.md` / `排期详述.md` / `暂缓-RS485.md`),但**波次增删与先后只改 §2.0**。
> **但优先级只在"能开工"的项之间比较**:高优先级波次若全部被外部资源(标准源 / 子板 / 台架 / runner)
> 或硬件代次卡住,波次表按"**现在能整波闭环**"重排,阻塞原因写进「为什么在这」列——
> 2026-10-25 的重排就是这种情况(保护元件被 N-18 挡、数据可信被标准源挡 → UI 补齐顶上)。
> 波内详表在挂接文件里(`采集保护收尾.md` / `UI补齐.md` / `排期详述.md` / `暂缓-RS485.md`),但**波次增删与先后只改 §2.0**。
### 2.0 波次总览
@@ -95,12 +105,12 @@
| 波次 | 内容 | 为什么在这 |
|---|---|---|
| **采集保护收尾** | **只剩 M3 送检**(B10,Fixed Date)——任务卡与判据见 `采集保护收尾.md` | 收口目标"台架闭环 + 功能面完整 + 可送检"的前两项已达成;**真约束只剩送检窗口**,窗口一到全道让路、窗口前 2 日特性冻结 |
| **数据可信**(当前) | **通道标定 → 遥测链 → 运行参数**:M4 系数与量纲 / M5 遥测链 / M6 运行参数与点表;14 张卡与事实基线见 `数据可信.md` | **用户决定(2026-10-23):下一步做通道标定,先于 UI 页面与结构债**。它是唯一"改一处、全链受益"的入口(`App/task/adc_task.c:335` 是码值→工程量的唯一位置),也是「UI 扩展」页面与 104 遥测的共同前置——先做页面则 `ui_data_feed` 组装的码值帧要返工。本波紧随「采集保护收尾」,排在「预算与内存」「结构债」之前。⚠ 2026-10-23 补记:ADC 至今**从未采过已知电压**(连极性都没验过,见 `数据可信.md` §2.6),故第一张卡是"已知电压注入验证"——只需一块万用表,不需要信号源/示波器,是开工的第一刀 |
| **采集保护收尾** | **只剩 M3 送检**(B10,Fixed Date)——任务卡与判据见 `采集保护收尾.md` | 收口目标"台架闭环 + 功能面完整 + 可送检"的前两项已达成;**真约束只剩送检窗口**,窗口一到全道让路、窗口前 2 日特性冻结。⚠ B10 的「L1-5 标定复核」依赖卡 12,而卡 12 要标准源;保护现处于未标定闭锁态(`protect_task.c:98`),送检前必须先解卡 |
| **数据可信**(收口态) | **软件侧已 100%**:M4 系数与量纲 ②③④⑥ / M5 遥测链 / M6 运行参数与点表全部达成;**只剩 3 张台架与外部卡**——卡 0 已知电压注入(万用表)· 卡 0b 端子变比(子板)· 卡 12 标准源两点标定。详表 `数据可信.md` | **用户决定(2026-10-23):通道标定先于 UI 与结构债**——它是唯一"改一处、全链受益"的入口(`App/task/adc_task.c:335` 是码值→工程量的唯一位置),软件道已于 2026-10-25 全部走完(卡 1~11 销项)。⚠ **剩下的三张卡没有软件道可做**:0 要万用表与台架、0b 要子板、12 要标准源。**台架不在手边(2026-10-25 确认)→ 本波整体顺延**,不占编码道 |
| **UI 补齐**(当前) | 菜单树剩 **21 叶未绑**(33 叶已绑 12):第一梯队 9 叶零依赖 · 第二梯队 4 叶需新配置段 · 第三梯队 6 叶需写入方或计数器;7 张任务卡见 `UI补齐.md` | **用户决定(2026-10-25):下一波只做 UI 补齐,结构债押后**。判据是"能开工"——产品功能面被 N-18 挡、数据可信被标准源挡,而结构债无外部依赖、随时能捡;UI 是唯一**数据源已就绪、不依赖台架、能整波闭环**的工作,且 21 叶一直压着产品可见度。组件层三件套(编辑器 / 定值表 / 操作页)已落地但**零消费者**,不写页面等于白做 |
| **结构债**(押后) | **net 层跨上下文收口(含 2026-10-25 台架实证的 reconcile 饿死签名)→ 注册校验白名单清理 → 性能语义簇 / 空 TU**;USART1 改为只发不收**单独独占一轮**(CubeMX 重生成,需清空全部工作树)。日志管线与 S8 合并评估、写回 flush 已于 2026-10-25 销项;详表 `排期详述.md` §1 | **无人在等、无外部依赖 → 随时能捡起来**,故排在 UI 之后。其中 net 收口优先于 USART1:饿死签名是台架**实测捕获**的可用性缺陷(8 连窗 UI 缺席 800 ms+,v1.1 判据下 3 事件 8 行、漏检与误报均为零),而 USART1 那条只是 IWDG 误复位的机制根源、且已有 250 ms drain 预算 + 300 ms 冷却的缓解 |
| **预算与内存** | ⏸ **整簇暂缓**:R-2 后半(缩堆 56→32 KB → 29.5 KB 迁 CCM)· R-3 · R-4 · R-6;R-5 已判定不可行 | **不再排期**:没有功能在等这块预算,而搬迁要动 scatter、要逐条过 DMA 可达性清单、缩堆还要上板复测。重开条件 → `../内存管理/RAM使用分析与优化方案.md` §4 |
| **结构债** | **USART1 改为只发不收 → net 层跨上下文收口(含重建窗回执排队问题的根治)→ 注册校验白名单清理 → 性能语义簇 / 空 TU**(日志管线与 S8 合并评估、写回 flush 已于 2026-10-25 销项;详表 `排期详述.md` §1) | 无紧急,按性价比排:USART1 那条灭 IWDG 误复位的机制根源;net 层收口体量大、验证重,放后 |
| **验证常态** | T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 探针窗口心跳 · 串口助手 A6/A7(详表 `排期详述.md` §2) | 窗口性,逢机顺带,不单独排期 |
| **UI 扩展** | **U5 页面落地**——27 是目标数不是差集(现存 7 个页面实现;27 个空叶子已归并为 7 模块 + 2 项前置能力) | 🟦**批 2 道E 在途**(2026-10-25 开工,组件层三件套已于批 1 落地)。地基已齐(U1~U4 落地、`ui-golden` 与字符集差集检查已挂 pre-commit),新增一页 = 3 处人工 + 1 条生成器命令。**最早在「数据可信」的 M4 之后开工**——`ui_data` / `ui_data_feed` 需要真数据(`数据可信.md` §10)。逐页规格见 `../UI设计/页面扩充详细方案.md` |
| **验证常态** | T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 串口助手 A6/A7(详表 `排期详述.md` §2) | 窗口性,逢机顺带,不单独排期。探针窗口心跳已于 2026-10-25 台架大窗销项(心跳主签名在 9 条 stall 行中 NET 位全程在场 = 旧 44/44 必发归零) |
| **仓库决策** | **N-29** `.git` **233 MB** + 图片 36.3 MB | **已决策(2026-10-11):暂不处理、登记观察**——推送/协作前重评(`git filter-repo` 历史重写影响未推送提交与协作者) |
| **暂缓** | **B2 RS-485 整簇**(`暂缓-RS485.md`) | **用户决定(2026-10-12):当前不处理 RS-485** |
| **硬件改版** | N-18 8 路电气量全接 TPAFE(V0.2) | 下一版硬件;固件侧已用语义映射隔离,改版只动映射表 |
@@ -109,19 +119,20 @@
```
采集保护收尾 只剩 B10 送检(M3, Fixed Date) 详表 采集保护收尾.md
↓ ⚠ 送检的「L1-5 标定复核」依赖卡 12(标准源),且保护要先解卡
数据可信 ⏸ 软件侧已 100%(卡 1~11 销项,M4/M5/M6 达成)
只剩 卡 0(万用表)→ 0b(子板变比)→ 12(标准源) 详表 数据可信.md
台架不在手边(2026-10-25)→ 整体顺延,不占编码道
↓
数据可信 通道标定 → 遥测链 → 运行参数
M4 系数与量纲 → M5 遥测链 → M6 运行参数与点表 详表 数据可信.md
关键路径: 量程口径 → 标定模块 → 落盘 → 未标定即闭锁 → 量纲回归
「UI 扩展」可在 M4 后开工
UI 补齐 21 叶:第一梯队 9(零依赖)→ 第二梯队 4(新配置段)
→ 第三梯队 6(写入方 / 计数器) 详表 UI补齐.md
单道串行(菜单树与页面注册表是单写者生成物)
↓
结构债 net 收口(含 reconcile 饿死签名)→ 白名单 → 性能簇 / 空 TU
USART1 只发不收 = 单独独占一轮(需清空全部工作树)
↓
预算与内存 ⏸ 整簇暂缓(重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4)
↓
结构债 USART1 只发不收 → 日志管线与 S8 → net 层收口 → 白名单清理 → 写回/性能/空TU
↓
验证常态 T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 探针心跳 · 串口助手
↓
UI 扩展 U5 页面落地(未排期,最早「数据可信」M4 之后)
验证常态 T-7 CI · L5 基线重锁 · A2/A4 负向台架 · 串口助手
仓库决策 N-29 .git 233MB(已决策暂不处理) 硬件:N-18 V0.2
暂缓 B2 RS-485 整簇(见 暂缓-RS485.md)
```
+126
View File
@@ -0,0 +1,126 @@
# UI 补齐(U5 页面落地 · 当前波次)
> **一句话**:菜单树 33 个叶子已绑 12、剩 **21**;组件层三件套(数值编辑器 / 定值表 / 操作页)
> 已落地但**零消费者**。本波按**数据源就绪度**把 21 叶分三梯队,先做零依赖的 9 叶。
>
> **本文定位**:本波次的任务卡与验收判据。**排序权威在 `docs/任务规划/README.md` §2**。
> 逐页行表与代码改动量见 `docs/UI设计/页面扩充详细方案.md`;清单与就绪度见
> `docs/UI设计/页面补齐规划.md`;数据供给契约见 `docs/UI设计/UI_数据供给设计说明.md`。
>
> **修订**:2026-10-25 建档(用户决定:下一波只做 UI 补齐,结构债押后;台架不在手边,
> 卡 0 顺延)。**取代原「余批 5 = 整定 4 页」的口径**——那是按页面批次统计的,漏了批 1
> 剩的 3 页与批 3 的 12 页,实际剩 21 叶。
---
## 1. 现状(2026-10-25 代码级核对)
| 项 | 数 | 说明 |
|---|---|---|
| 菜单树叶总数 | **33** | `ui_menu_tree.txt` 实际叶子(不含 9 个父节点) |
| 已绑页面 | **12** | 装置信息 · 交流量 · 直流量 · 遥信量 · 查看 4 页 · 网口设置 · SOE · 自检记录 · 运行记录 |
| 未绑叶子 | **21** | 见 §2 三梯队 |
| 组件层 | **3 就绪** | `ui_w_editor` / `ui_w_setlist` / `ui_page_action` 均已落地(批 1 道B),**当前无任何页面消费**——写了不用等于没写 |
| 数据供给 | 3 通道 | `ui_data` 的 rt / par / info 三通道 + `ui_data_feed` 已接线(批 2 道E) |
| 黄金用例 | 18 页 | `ui-golden` 像素基线 + 字符集差集检查均已挂 pre-commit |
> ⚠ **未绑叶子 ≠ 空菜单项**:未绑的叶子按菜单树规则是"无内容页",进得去但只显示空框架。
> 21 叶里 8 叶(整定 4 + 维护 3 + 通讯设置)**数据源已就绪**,只是没写页面;
> 6 叶(遥信三页 + 记录 5 页中的 5 叶)**缺数据层或写入方**;1 叶(手动录波)缺模块。
---
## 2. 三梯队(按数据源就绪度分,不按菜单顺序)
### 2.1 第一梯队:数据源已就绪(9 叶,可立即开工)
| 叶 | 数据源 | 为什么现在能做 |
|---|---|---|
| 参数 / 定值 / 控制字 / 软压板(整定 4 页) | `prot_set` 31 项 + `ui_w_editor` | 编辑器已落地;只缺**写路径**(UI 只投递 → `prot_set_set_sealed` → 置脏 → defaultTask 落盘) |
| 时钟设置 | `sys_clock_set_unix()` | API 就绪,6 字段表单 + 回读校验 |
| 强制复归 | `prot_elm_request_reset()` | 单字标志,任意上下文可投;`ui_page_action` 直接套 |
| 清除记录 | `sys_log` | ⚠ **缺删除 API**(按 ID 删文件 + 重建 + 计数归零),需先补 ~40 行 |
| 遥测死区 / 遥测系数(2 页) | `run_par`(9 键死区,卡 10)+ `adc_cal`(k/b,卡 2) | 两个数据层都已落地,页面只做可编辑列表 |
### 2.2 第二梯队:需先补数据层(4 叶,但只立 1 张卡)
> 遥信类型 / 防抖 / 双点这 3 叶**不立卡**——V0.1 没有开入硬件,三类配置没有可配的对象,
> 做出来只是"改一组没人读的参数"。随开入固件(独立立项)一起做,见 §5。
| 叶 | 缺什么 |
|---|---|
| 通讯设置 | `[comm]` 段(104 公共地址 / 端口 / 主站地址)——当前编译期固定。照 `net_cfg` 的"RAM 副本 + 保存请求交接"范式 |
| 遥信类型 / 遥信防抖 / 双点遥信(3 页) | 开入量本身不存在(V0.1 无开入硬件),三类遥信配置**没有可配的对象**。⚠ 这三页做出来只能是"改一组没人读的参数" |
### 2.3 第三梯队:需先立模块或补写入方(6 叶)
| 叶 | 缺什么 |
|---|---|
| 事故 / 操作 / 保护告警 / 保护启动 / 遥控记录(5 页) | 每类记录 = 一个写入点 + 一个 `syslog_id_t`。当前只有 SOE 与 selftest/run 三类有写入方 |
| 运行报告 | 计数器:上电次数 / 104 统计;`uptime_s` 与复位原因**已有**(`ui_data_feed` 的 info 通道 + `app_main` 锁存) |
---
## 3. 任务卡(五字段;完成即销项删行)
> 资源图例:🔴 台架(COM6/ST-LINK,`bench.lock` 独占)· 🟡 外部 · 🟢 纯软件。
> 状态:⬜ 未开始 · 🟦 进行中。**条目用语义标识,不新增字母+数字编号**
> (规则见 `docs/任务规划/README.md` §0)。序栏只为阅读顺序。
| 序 | 任务 | DoD(可验证验收判据) | 硬依赖 | 资源 | 写范围 | 状态 |
|---|---|---|---|---|---|---|
| 1 | **`param_request` 写路径** | `ui_data_param_request/state` 落地:小环形队列(深度 4,满返 -1)+ 状态四值 `OK` / `ERR_RANGE` / `ERR_LOCKED` / `ERR_BUSY`;`ui_data_feed_tick()` 侧取出后调 `prot_set_set_sealed()` + 置脏;**主机单测覆盖**:满队列、越界拒绝(`bad_mask` 指出越界项)、闭锁态拒绝、正常往返 | `ui_data` 三通道(已落) | 🟢 | `Drivers/BSP/UI/ui_data.*` + `App/app/ui_data_feed.*` | ⬜ |
| 2 | **整定 4 页** | 4 叶绑页面;就地改一条定值 → 保存 → **掉电重启后值保持且校验和自检通过**;主站 `C_RD` 读到同一值;越界时高亮越界行、页脚"越界"、值不落盘;黄金用例入库 | 1、`ui_w_editor`(已落) | 🟢 | `Drivers/BSP/UI/` + `ui_menu_tree.txt` + 生成物 | ⬜ |
| 3 | **装置维护 3 页** | ① 时钟设置:写 `sys_clock_set_unix()` 后回读校验(RTC 慢墙钟 8 h 的现象要在证据里说明);② 强制复归:确认后 YX 动作位复归、SOE 有复归记录;③ 清除记录:选类型 → 确认 → 计数归零且文件重建(**先补 `sys_log` 删除 API**,单测覆盖删后重建/计数归零/不存在时幂等) | `ui_page_action`(已落);③ 需 `sys_log` 删除 API | 🟢 | `Drivers/BSP/UI/` + `App/log/sys_log.*` | ⬜ |
| 4 | **遥测死区 / 系数 2 页** | 改死区 → 104 上送门限随之变化(PC 主站读回核对);改 `k` → 页面显示值按比例变化;两页都走 `[run_par]` / `[adc_cal]` 的既有落盘链,**不新增第三份真源** | `run_par` / `adc_cal`(均已落) | 🟢 | `Drivers/BSP/UI/` + `ui_menu_tree.txt` | ⬜ |
| 5 | **通讯设置(`[comm]` 段)** | 新建 `[comm]` 段(公共地址 / 端口 / 主站地址);改后重启,主站仍能连上且公共地址生效;`CFG_FILE_MAX_KEYS` / 段数上限核对(当前 5/8 段) | — | 🟢 | `App/cfg/` + `App/protocol/iec104/` + `Drivers/BSP/UI/` | ⬜ |
| 6 | **记录 5 页** | 每类记录一个写入点 + 一个 `syslog_id_t`;页面能翻到最近 20 条,空记录显示"无记录"而非空白;5 页共用一份 reader | — | 🟢 | `App/log/` + `Drivers/BSP/UI/` | ⬜ |
| 7 | **运行报告** | 4 组:上电次数 / 运行时长 / 复位原因 / 104 统计;前两组与 info 通道一致,后两组新建计数器(掉电不丢则需落盘,否则页面标注"本次运行") | — | 🟢 | `App/log/` 或 `App/app/` + `Drivers/BSP/UI/` | ⬜ |
> **遥信三页(类型/防抖/双点)不立卡**:V0.1 无开入硬件,三类配置没有可配对象——
> 做出来只是"改一组没人读的参数"。随开入固件(独立立项)一起做,见 §5。
---
## 4. 顺序与并行
```
1 param_request 写路径 ─→ 2 整定 4 页
3 装置维护 3 页(独立;③ 先补 sys_log 删除 API)
4 遥测死区/系数 2 页(独立)
↓ 第一梯队 9 叶
5 通讯设置([comm] 段)→ 6 记录 5 页 → 7 运行报告
```
- **单道串行**(2026-10-25 用户决定:本波只做 UI):`ui_menu_tree.txt` 与
`ui_page_registry.c` 是**单写者生成物**,两条道并行会在菜单树与注册表上互相覆盖。
一条道 = 零冲突;需要并行度时优先拆"数据层"与"页面层"(如 `[comm]` 段可先行)。
- **每页标准动作**(已被生成器收敛成 3 处人工 + 1 条命令):写 `ui_page_xxx.c/.h` →
菜单树加 ` #page=xxx` → 跑 `python tools/menu_gen/gen_menu.py` → 登记黄金用例。
- **字符集**:新文案的汉字必须先过 `tools/font_gen/extract_cn.py` → `make_font.py`,
否则显示方块(`font-charset` 门禁会拦)。40 条定值名建议沿用 2~4 字缩写
("过流Ⅰ段定值"→"Ⅰ段定值")。
- **台架**:本波 21 叶里只有整定 4 页与遥测 2 页需要上板验证(保存/重启/C_RD 回读)。
台架不在手边时先做页面 + 黄金用例,**把上板项累积成一批,下次上机一次过**。
---
## 5. 范围边界(本波不做)
| 不做 | 理由 / 归属 |
|---|---|
| 遥信类型 / 防抖 / 双点(3 叶) | V0.1 无开入硬件;随开入固件独立立项(`docs/任务规划/并行分道方案.md` §4.2 的 L4-1~L4-3 同批) |
| 手动录波(1 叶) | 录波模块未立项;且录波通道必须先有工程量(`docs/任务规划/数据可信.md` §9) |
| SNTP 设置(1 叶) | 当前对时走 8888 端口私有协议,SNTP 是另一条链;产品口径亦未定。只做页面 = 又一个"看着能用其实不生效"的页 |
| 交流量 / 直流量回炉 | 批 1 已做(接 `ui_data` 快照层);直流量行表按 V0.1 实际可用量裁剪,已并入 |
| 结构债 / net 收口 | 用户决定(2026-10-25):本波只做 UI,结构债押后(`docs/任务规划/README.md` §2) |
---
## 6. 与其它波次的关系
| 波次 | 关系 |
|---|---|
| **数据可信** | 本波消费其产出:`ui_data` 的 `eng` 字段由 `adc_cal_flags()` 决定(M4 后 `eng=0` = 引脚电压);遥测死区页直接改 `run_par`。**保护当前处于未标定闭锁态**(`protect_task.c:98`),整定页可改定值但判据不会动作——页面须显示闭锁原因,不能让用户以为"改了没用" |
| **采集保护收尾** | B10 送检不依赖 UI 页面;无交集 |
| **结构债** | 押后;`sys_log` 删除 API 与日志管线同域,本波只补这一个 API,不动管线 |
+100 -81
View File
@@ -2,7 +2,7 @@
> **本文只做三件事**:把未闭环待办**归到道**、划**文件级写域**、定**合并次序**。
> **明细不复制**——DoD / 硬依赖 / 验收判据仍在 `docs/任务规划/登记簿.md`、
> `docs/任务规划/数据可信.md`、`docs/任务规划/采集保护收尾.md`、
> `docs/任务规划/UI补齐.md`、`docs/任务规划/数据可信.md`、`docs/任务规划/采集保护收尾.md`、
> `docs/算法/继电保护功能复现规划.md`。机制(worktree / 两把锁 / `done` 流程)见
> `docs/环境与部署/并行任务工作树方案.md`。
>
@@ -13,25 +13,33 @@
---
## 1. 一句话结论
> **批 1 已收口(2026-10-25)**:九分支全合主干(`15aa085`→`db9f256`,工作树清零、两锁空闲);
> M4 六条 ②③④⑥ 达成、①⑤台架面 deferred(归卡 0/0b/12);台架 f2→f3 转 PASS 并顺带复活
> HW 模式看门狗掩码死分支。**批 2 主体已收(2026-10-25 大窗+验收窗全绿,主干 1a624b1)**:道D 遥测(卡 8~11 销项)∥
> 道E UI 页面(黄金 18 页;余批 5 整定写路径)∥ 道F 结构债(三条销项;复跑暴露两新签名,
> 修复 F2/F3 已合入、台架两轮判据在跑;附 R1 主站 RX 位修)。批 2.5 尾单 = 两轮判据 +
> v5arch 日志归档 + 道E 批 5;批 3(道G/H)**未开,另行请令**。
> 道C 不含主机单测(S1-c 已完成,证据见 `docs/测试说明/主机单测覆盖率口径.md` §9),
> 只剩"断言宏 + 门禁 + 构建实测"三件。
> **批 1 / 批 2 / 批 2.5 全部收口(2026-10-25)**,工作树清零、两锁空闲。
> 批 1(九分支):M4 六条 ②③④⑥ 达成、①⑤台架面 deferred(归卡 0/0b/12);台架 f2→f3 转 PASS。
> 批 2(三大道):道D 遥测(卡 8~11 销项)∥ 道E UI 页面(黄金 18 页)∥ 道F 结构债(三条销项;
> 复跑暴露两新签名,F2/F3 修复已合入)。批 2.5 尾单三件全清:两轮判据(`17ece86`)、
> v5arch 日志归档(`ac51ff2`)、v5 判读工具 v1.1(`4c05b58`)。
>
> **批 3 重定义(2026-10-25 用户决定)**:原计划的「道G 保护元件 ∥ 道H 采集增强」**整体押后**——
> 产品功能面在 V0.1 已到顶(三相类全被 N-18 挡)、且保护当前处于未标定闭锁态、没有标准源就
> 无法验证;道H 的幅值类判据同样依赖标定。**批 3 只剩道E 一条道(UI 补齐 21 叶)**,
> 单道串行。结构债(含 USART1 独占轮)押后到批 4。
>
> 道C 不含主机单测(S1-c 已完成,证据见 `docs/测试说明/主机单测覆盖率口径.md` §9)。
```
批 1 道A 标定与量纲 ∥ 道B UI 组件层 ∥ 道C 工具链与验证
批 1 道A 标定与量纲 ∥ 道B UI 组件层 ∥ 道C 工具链与验证 ✅ 2026-10-25 收口
↓
批 2 道D 遥测链 ∥ 道E UI 页面 ∥ 道F 结构债与网络
批 2 道D 遥测链 ∥ 道E UI 页面 ∥ 道F 结构债与网络 ✅ 2026-10-25 收口
↓
「USART1 改为只发不收」独占一轮(CubeMX 重生成,不能与任何分支并存)
批 2.5 两轮判据 ∥ v5arch 归档 ∥ 判读工具 v1.1 ✅ 2026-10-25 收口
↓
批 3 道G 保护元件 ∥ 道H 采集增强 ∥ 台架/外部窗口(卡 12、N-16、N-3、B10)
批 3 道E UI 补齐(21 叶,单道串行) ← 当前
↓
批 4 结构债:net 收口(含饿死签名)∥ 白名单 ∥ 性能簇
→ 「USART1 改为只发不收」独占一轮(CubeMX 重生成,清空全部工作树)
↓
批 5 道G 保护元件 V0.1 子集 ∥ 道H 采集增强 ← 等标准源 / V0.2 硬件
台架/外部窗口:卡 0 / 0b / 12、N-16、N-3、B10
```
**道名对照**(全文只用这 8 个标签):
@@ -42,16 +50,16 @@
| **道B** | UI 组件层(等数据时先做的活) | 1 | 域5 |
| **道C** | 工具链与验证(断言/门禁/构建实测) | 1 | 域8 |
| **道D** | 遥测链(「数据可信」M5/M6) | 2 | 域1+域4+域2 |
| **道E** | UI 页面(27 叶 + 3 页回炉) | 2 | 域5 |
| **道F** | 结构债与网络(net 层收口 / 日志管线 / 探针心跳 / 写回 flush) | 2 | 域6+域7 |
| **道G** | 保护元件扩展 | 3 | 域3+域2 |
| **道H** | 采集增强(等周波/零序/谐波轨) | 3 | 域1+域3 |
| **道E** | UI 页面(21 叶补齐) | **3(当前)** | 域5 |
| **道F** | 结构债与网络(net 收口 / 白名单 / 性能簇 / USART1) | 4 | 域6+域7 |
| **道G** | 保护元件扩展(V0.1 子集) | 5(等标准源) | 域3+域2 |
| **道H** | 采集增强(等周波/零序/谐波轨) | 5(等标定) | 域1+域3 |
**关键判断**:用户最关心的"保护待做"**大部分不能与标定并行**——因为保护元件的判据全是
"与定值比",而定值是工程单位(10 A / 120 V),标定没落地时新元件写出来就是"码值比二次值",
和现在 `prot_elm` 的错配是同一个病。真正能提前的只有**比值类判据**(涌流制动、CT 断线、
突变量启动),但它们要往 `prot_set` 里加定值项 → 改 `PS_ID_COUNT` 与 blob VER → 与「数据可信」
的落盘/闭锁卡互斥。**所以保护整簇排在「数据可信」M4 之后**,逐项归道见 §4.2。
的落盘/闭锁卡互斥。**所以保护整簇排在「数据可信」之后**(批 5,等标准源),逐项归道见 §4.2。
---
@@ -104,6 +112,10 @@
### 4.1 数据可信(14 卡)
> **卡 1~11 已全部销项**(批 1 道A + 批 2 道D,2026-10-25),下表保留作为归道记录。
> **只剩卡 0 / 0b / 12 三张**,全是台架或外部资源,**批号改为「顺延」**——台架不在手边,
> 不占编码道(`docs/任务规划/数据可信.md` §5)。
| 条目 | 写域 | 道 | 批 |
|---|---|---|---|
| 卡 1 TPAFE 量程口径定死 | 文档(`docs/硬件平台/`) | **道A 标定** | 1 |
@@ -127,18 +139,18 @@
|---|---|---|---|---|
| L1-5 通道标定 | — | 域1 | = 卡 2/4 | 1 |
| L5-2 码值越界检出(残余) | 否(越界门限可用 FS 百分比) | 域1(`adc_health`) | **道A 标定** | 1 |
| L3-7 涌流制动(二次谐波占比) | **否**(比值) | 域3 + 域2(加定值) | **道G 保护** | 3 |
| L3-9 CT 断线(电流不平衡) | **否**(比值) | 域3 + 域2 | **道G 保护** | 3 |
| L3-11 故障启动(突变量) | **否**(相对量) | 域3 + 域2 + 新 `prot_start.*` | **道G 保护** | 3 |
| L3-8 PT 断线 | **是**(电压阈值) | 域3 + 域2 | **道G 保护** | 3 |
| L3-12 无压/无流闭锁 | **是** | 域3 + 域2 | **道G 保护** | 3 |
| L3-10 母线接地告警 | **是** | 域3 + 域2 | **道G 保护** | 3 |
| L5-1 残余(元件级校验和常量表) | 否 | 域2 + 域3 | **道G 保护** | 3 |
| L5-3 硬件自检 | 否(但需出口硬件) | 域3 | **道G 保护** | 3 |
| L3-7 涌流制动(二次谐波占比) | **否**(比值) | 域3 + 域2(加定值) | **道G 保护** | 5(等标准源) |
| L3-9 CT 断线(电流不平衡) | **否**(比值) | 域3 + 域2 | **道G 保护** | 5(等标准源) |
| L3-11 故障启动(突变量) | **否**(相对量) | 域3 + 域2 + 新 `prot_start.*` | **道G 保护** | 5(等标准源) |
| L3-8 PT 断线 | **是**(电压阈值) | 域3 + 域2 | **道G 保护** | 5(等标准源) |
| L3-12 无压/无流闭锁 | **是** | 域3 + 域2 | **道G 保护** | 5(等标准源) |
| L3-10 母线接地告警 | **是** | 域3 + 域2 | **道G 保护** | 5(等标准源) |
| L5-1 残余(元件级校验和常量表) | 否 | 域2 + 域3 | **道G 保护** | 5(等标准源) |
| L5-3 硬件自检 | 否(但需出口硬件) | 域3 | **道G 保护** | 5(等标准源) |
| L4-1 跳闸出口 / L4-2 告警出口 / L4-3 出口自检 | 否 | 新模块 `prot_do.*` | **独立立项** | — |
| L1-7 等周波调频 | 是(依赖标定后幅值) | 域1 + 域3 | **道H 采集增强** | 3 |
| L1-8 零序通道接入 | 是 | 域1 | **道H 采集增强** | 3 |
| L2-8 遥测谐波轨 | 是 | 域1(`phasor`) | **道H 采集增强** | 3 |
| L1-7 等周波调频 | 是(依赖标定后幅值) | 域1 + 域3 | **道H 采集增强** | 5(等标定) |
| L1-8 零序通道接入 | 是 | 域1 | **道H 采集增强** | 5(等标定) |
| L2-8 遥测谐波轨 | 是 | 域1(`phasor`) | **道H 采集增强** | 5(等标定) |
| L3-2 零序过流 / L2-5 线·负序·零序合成 | — | 域1 + 域3 | **V0.2 硬件** | — |
| L4-6 故障录波 | — | 新子系统 | **独立立项** | — |
@@ -146,43 +158,56 @@
> (`docs/问题记录/采集与数据处理短板评测.md` 登记),出口要驱动 U18 桥 + 继电器,
> 是一整个模块(GPIO 安全默认电平 + 出口保持/脉冲 + 回读自检),量级与"加一个元件"不同。
### 4.3 UI(两篇规划)
> **为什么道G 整簇押后到批 5(2026-10-25 复核)**:表里 10 项只有 4 项在 V0.1 上可行
> (L3-7 A 相涌流制动 / L3-11 突变量启动 / L3-12 无压无流闭锁 / L5-1 元件级校验和)——
> L3-8 PT 断线、L3-9 CT 断线要三相同时刻,被 N-18 硬件缺陷挡死;L3-10 母线接地只有电压侧可判;
> L5-3 硬件自检要出口硬件。而这 4 项**没有标准源就无法验证**,加上保护现处于未标定闭锁态,
> 写出来只能"建接口不使能"。**等标准源到位或 V0.2 硬件改版后再开**。
| 条目 | 写域 | 道 | 批 |
|---|---|---|---|
| 字库扩充(约 25 字:段/投/延/零/频/荷/闸/跳/低/过/Ⅰ/Ⅱ/Ⅲ…) | `ui_cn_chars.txt` + `tools/font_gen/` + `ui_font_cn_12.c`(生成物) | **道B UI** | 1 |
| `ui_w_editor` 数值编辑器 | 域5(新增) | **道B UI** | 1 |
| `ui_w_setlist` 定值表组件 | 域5(新增) | **道B UI** | 1 |
| `ui_page_action` 动作确认页 | 域5(新增) | **道B UI** | 1 |
| 记录 reader 注入(削 3 条分层基线) | 域5 + `scripts/check_layer_deps.py` | **道B UI** | 1 |
| `ui_data` 快照层 + `ui_data_feed` | 域5 + `App/app/` | **道E UI 页面** | 2 |
| 27 个空叶子 + 3 页回炉(30 页次) | 域5 + `ui_menu_tree.txt` + 生成物 | **道E UI 页面** | 2 |
### 4.3 UI(批 3 唯一在跑的道)
> **`ui_data` 为什么排在批 2 而不是批 1**:`ui_data_feed` 组装的 `eng` 字段要等「数据可信」M4
> 的结论(`docs/任务规划/数据可信.md` §2.6 与 §10)。组件层(编辑器/定值表/记录 reader)
> 与标定无关,所以单独提到批 1——**这是本次分道最大的收益点**:让 UI 在等标定的同时有活干。
**批 1 / 批 2 已交付**(过程记录,不再排期):字库扩充 · `ui_w_editor` · `ui_w_setlist` ·
`ui_page_action` · 记录 reader 注入 · `ui_data` 三通道 + `ui_data_feed` · 遥信 33 行 ·
定值查看 4 页 · 记录 3 页 · 交流量/直流量回炉。**黄金 18 页入库**。
**剩余 21 叶按数据源就绪度分三梯队**(明细与 DoD 见 `docs/任务规划/UI补齐.md`):
| 梯队 | 条目 | 叶数 | 写域 | 前置 |
|---|---|---|---|---|
| **一** | `param_request` 写路径 → 整定 4 页 · 装置维护 3 页(时钟/复归/清除记录)· 遥测死区/系数 2 页 | 9 | 域5 + `App/app/` + `App/log/`(仅补删除 API) | 组件层已就绪;清除记录需 `sys_log` 删除 API |
| **二** | 通讯设置(`[comm]` 段)· 遥信类型/防抖/双点 3 页 | 4 | 域2 + 域4 + 域5 | `[comm]` 段不存在;遥信三页**无开入硬件,不立卡** |
| **三** | 记录 5 页(事故/操作/告警/启动/遥控)· 运行报告 | 6 | 域6 + 域5 | 记录写入方 / 计数器不存在 |
| **不排** | 手动录波(缺录波模块)· SNTP(对时是另一条链) | 2 | — | — |
> **为什么批 3 只有一条道**:`ui_menu_tree.txt` 与 `ui_page_registry.c` 是**单写者生成物**,
> 两条道并行会在菜单树与注册表上互相覆盖;`uvprojx` 也要逐条手工并。单道串行 = 零冲突,
> 而 UI 是当前唯一在跑的波次,并行度换来的收益抵不过合并成本。
>
> **`ui_data` 为什么当初排批 2 而不是批 1**:`ui_data_feed` 组装的 `eng` 字段要等「数据可信」M4
> 的结论(`docs/任务规划/数据可信.md` §2.6 与 §10)。组件层与标定无关,所以单独提到批 1——
> **这是分道最大的收益点**:让 UI 在等标定的同时有活干。
### 4.4 结构债、验证与其它
> **批 1 的道C 三项已全销项**(`docs/任务规划/测试与架构专项.md` 的 P1-10 测试固件构建实测 /
> S12 断言宏 / A-5 体积门禁),
> **批 2 的道F 三项也已销项**(日志管线与 S8 合并评估 / 写回缓存 flush / 探针窗口心跳)——
> 均不再列入本表。剩余条目归批 4。
| 条目 | 写域 | 道 | 批 |
|---|---|---|---|
| **USART1 改为只发不收**(S-3) | `.ioc` + `Src/*`(重生成) | **独占** | 2.5 |
| **日志管线与 S8 合并评估**(N-2) | 域6 | **道F 结构债** | 2 |
| N-22 写回缓存空闲 flush | 域6 | **道F 结构债** | 2 |
| N-17 探针窗口心跳缺口 | 域7 + `App/sync/` | **道F 结构债** | 2 |
| **net 层跨上下文收口**(E-27 / E-28) | 域7 | **道F 结构债** | 3 |
| N-25 性能与语义簇(PASV/PHY/SOCKETS) | 域7 | **道F 结构债** | 3 |
| S-4 dhara 重试自旋 | 域6 | **道F 结构债** | 3 |
| S-5 全序列卷锁评估 | 域6 | **道F 结构债** | 3 |
| `docs/任务规划/测试与架构专项.md` 的 P1-10 测试固件构建实测 | `MDK-ARM/` 测试配置 | **道C 工具链** | 1 |
| S12 模块级断言宏 | `App/util/app_assert.h`(新增)+ 试点 | **道C 工具链** | 1 |
| A-5 残余 CI 体积门禁盲区 | `.gitea/` + `scripts/` | **道C 工具链** | 1 |
| **L5 队列往返基线重锁**(N-3) | 无码(需 PC peer) | **台架道** | 3 |
| **A2/A4 负向台架**(N-16) | 无码 | **台架道** | 3 |
| **net 层跨上下文收口**(E-27 / E-28 裸指针收口 + reconcile 饿死签名) | 域7 | **道F 结构债** | 4 |
| N-25 性能与语义簇(PASV / PHY / SOCKETS) | 域7 | **道F 结构债** | 4 |
| S-4 dhara 重试自旋 · S-5 全序列卷锁评估 | 域6 | **道F 结构债** | 4 |
| N-23 注册校验白名单清理(只剩 `rs485_task.c`,随 B2) | 域8 | **道F 结构债** | 4(或随 B2) |
| **USART1 改为只发不收**(S-3) | `.ioc` + `Src/*`(重生成) | **独占** | 4(清空全部工作树后单独一轮) |
| **L5 队列往返基线重锁**(N-3) | 无码(需 PC peer) | **台架道** | 窗口 |
| **A2/A4 负向台架**(N-16) | 无码 | **台架道** | 窗口 |
| **串口助手 A6/A7 补验** | 无码(需 CH340) | **台架道** | 待硬件 |
| B10 送检(标准源 + 第三方主站) | 无码 | **外部窗口** | Fixed Date |
| T-7 CI runner | 外部基础设施 | **外部** | 待 runner |
| N-30 relisten 收口 / 原报告 F-5 空 TU(N-28 簇)/ N-29 `.git` / N-18 V0.2 / N-27 内存簇 / B2 RS-485 / 开入开出 / 录波 | — | **不排** | — |
| 道G 保护元件 V0.1 子集 · 道H 采集增强 | 域1+域3 | **道G / 道H** | 5(等标准源 / 标定) |
| N-30 relisten 收口 / N-28 空 TU / N-29 `.git` / N-18 V0.2 / N-27 内存簇 / B2 RS-485 / 开入开出 / 录波 | — | **不排** | — |
---
@@ -290,40 +315,30 @@
| 事项 | 为什么不能并行 | 正确做法 |
|---|---|---|
| **USART1 改为只发不收**(S-3) | 改 `.ioc` → CubeMX 重生成会**打回 5 处手工定制**(IWDG 延迟启动、Fault Handler、FreeRTOSConfig 加固区等),且重写 `Src/*` 大片生成文件 → 与任何分支必冲突 | **独占一轮**:清空所有工作树 → 在主工作树做 → `check_cubemx_survival.py` 全过 → 台架闭环 |
| **字库重生成** | `make_font.py` 重写 `ui_font_cn_12.c`(整文件生成物),两人同时扩字会互相覆盖 | 归道B 一个分支独占;后续加字必须重新走一次 |
| **往 `prot_set` 加定值项** | 改 `PS_ID_COUNT` → blob VER 2→3 → 影响落盘格式、104 定值段、UI 整定页分组 | 只在**没有任何「数据可信」定值卡在飞**的时候做(批 3 的道G) |
| **字库重生成** | `make_font.py` 重写 `ui_font_cn_12.c`(整文件生成物),两人同时扩字会互相覆盖 | 归道E 一个分支独占;后续加字必须重新走一次 |
| **往 `prot_set` 加定值项** | 改 `PS_ID_COUNT` → blob VER 2→3 → 影响落盘格式、104 定值段、UI 整定页分组 | 只在**没有任何定值卡在飞**的时候做(批 5 的道G);⚠ 整定 4 页(批 3)会改 `prot_set` 的读写路径,**道G 必须在它之后** |
---
## 8. 执行清单(批 1 起步)
## 8. 执行清单(批 3 起步)
```powershell
$PY = ".venv\Scripts\python.exe"
$WT = ".dsh\skills\task-worktree\scripts\task_worktree.py"
# 批 1 道A(ID 必须唯一:台账按 ID 落盘,branch = task/<ID>-<slug>)
& $PY $WT new cal-scale doc
& $PY $WT new cal-adc cal
& $PY $WT new cal-lockout dim
# 先确认没有残骸占名额(当前有一棵:D:/Code/DTU Code/_wt/v5tool2-v11,分支已合入)
& $PY $WT list
# 批 1 道B
& $PY $WT new UI-font subset
& $PY $WT new UI widgets
& $PY $WT new UI-rec reader
# 批 1 道C
& $PY $WT new S12 assert
# 台架(在主工作树,验证已合入镜像)
& $PY $WT lock acquire bench --task cal-adc
# ……注入验证 / @test……
& $PY $WT lock release bench --task cal-adc --bench-pass
# 批 3 道E:单道串行,一次只开一棵工作树(菜单树/注册表是单写者生成物)
& $PY $WT new UI-param write # param_request 写路径(无页面,先落通道)
& $PY $WT new UI-set edit # 整定 4 页
& $PY $WT new UI-maint pages # 装置维护 3 页(含 sys_log 删除 API)
& $PY $WT new UI-cal par # 遥测死区 / 系数 2 页
```
> ⚠ **`new` 必须给两个参数**(`<ID> <slug>`),少一个直接 rc=3;**ID 不能重复**——
> 台账是 `.state/<ID>.json`,同 ID 第二次 `new` 会报"任务已存在"。所以同簇多任务要靠
> ID 区分(上面 `cal-scale` / `cal-adc` / `cal-lockout` 三段即三个不同 ID,分支名恰好是
> `task/cal-scale-doc` / `task/cal-adc-cal` / `task/cal-lockout-dim`)。
> 台账是 `.state/<ID>.json`,同 ID 第二次 `new` 会报"任务已存在"。分支名是
> `task/<ID>-<slug>`(上面四段即 `task/UI-param-write` / `task/UI-set-edit` / …)。
>
> ⚠ **活跃任务数按"台账 + 目录是否存在"统计**,不是按 git 注册表。遗留目录会让名额被白占——
> 开工前先 `list` 确认没有 `<ID>` 显示 `? ?`(那是分支已删、目录还在的残骸)。
@@ -333,7 +348,7 @@ $WT = ".dsh\skills\task-worktree\scripts\task_worktree.py"
> 删完补一条 `git worktree prune`。
> **删前先确认目录里没有联接**(`.venv` / `simulator/SDL2`)——直接删会把主工作树的 `.venv` 带走。
> 分支 ID 用语义 slug(`cal-scale-doc` / `UI-font-subset`),与 `docs/任务规划/README.md` §0 的
> 分支 ID 用语义 slug(`UI-set-edit` / `cal-scale-doc`),与 `docs/任务规划/README.md` §0 的
> "新条目用语义标识"一致;存量编号(N-x / S-x)仍可直接当 ID 用。
---
@@ -346,6 +361,10 @@ $WT = ".dsh\skills\task-worktree\scripts\task_worktree.py"
| N-27 内存优化簇剩余(原报告 R-2 后半 / R-3 / R-4 / R-6) | ⏸ 用户裁定 2026-10-15 | `docs/内存管理/RAM使用分析与优化方案.md` §4 |
| N-29 `.git` 233 MB | 决策:登记观察 | 推送/协作前重评 |
| N-18 V0.2 硬件改版 | 下一版硬件 | 硬件改版立项 |
| **道G 保护元件 V0.1 子集**(A 相涌流制动 / 突变量启动 / 无压无流闭锁 / 元件级校验和) | ⏸ 等标准源(2026-10-25 复核) | 标准源到位 **或** V0.2 硬件改版;且保护须先解卡(当前未标定闭锁,`protect_task.c:98`) |
| **道H 采集增强**(L1-7 等周波 / L1-8 零序 / L2-8 谐波轨) | ⏸ 等标定 | 卡 12 两点标定完成(幅值类判据依赖工程量) |
| **遥信类型 / 防抖 / 双点 3 页** | ⏸ 无开入硬件 | 开入固件立项(与 L4-1~L4-3 出口同批) |
| **SNTP 设置页** | ⏸ 对时是另一条链 | SNTP 客户端立项(当前走 8888 私有协议) |
| N-30 relisten 收口 | 观察(原语版实测回退) | 三条语义前置满足后 |
| 原报告 F-5 空 TU(N-28 簇) | 观察 | 有全量构建耗时痛点时 |
| T-7 CI runner | 外部基础设施 | runner 就绪 |
+13 -8
View File
@@ -1,9 +1,13 @@
# 结构债与验证常态
> 波次总览与顺序权威在 `docs/任务规划/README.md` §2;当前波次任务卡在 `数据可信.md`,
> 「采集保护收尾」只剩 M3 送检(`采集保护收尾.md`)。
> 波次总览与顺序权威在 `docs/任务规划/README.md` §2;当前波次任务卡在 `UI补齐.md`,
> 「数据可信」已转收口态(`数据可信.md`),「采集保护收尾」只剩 M3 送检(`采集保护收尾.md`)。
> 本文件只放**已排期但非当前波次**的详述表——低频改动,随窗口更新。
>
> **结构债整体押后**(2026-10-25 用户决定:下一波只做 UI 补齐)。押后不等于降级:
> 它**没有外部依赖、随时能捡起来**,这正是它让位给 UI 的原因——UI 那 21 叶一旦等台架就卡死,
> 结构债不会。
>
> **条目一律用语义名**(2026-10-25 起):原先「C 组短码」(结构债 1/3/5/6)与「D 组短码」
> (验证窗口 2/5/6/7)已废止。原因是它们**同字母不同义**——`C` 组在
> `docs/UI设计/UI_界面制作流程.md` 里是 UI 设计约束(屏幕/字符集/文本/编码),`D` 组在
@@ -12,15 +16,17 @@
## 1. 结构债(按性价比排序)
> 顺序 = 先可靠性根治,后大体量重构;评估簇随窗口。
> 顺序 = 先灭实测缺陷,后可靠性根治,再大体量重构;评估簇随窗口。
> **2026-10-25 已销项三项**:日志管线与 S8 合并评估(N-2)、写回缓存空闲 flush(N-22)、
> 探针窗口心跳缺口(N-17)——结论沉淀在模块文档,本表不再保留。
| 条目 | 内容 | 出处 |
|---|---|---|
| **USART1 改为只发不收** | 灭 ORE 僵尸机制根源(2026-10-02 台架 IWDG 误复位的机制根源):改 `.ioc` 令 USART1 不使能 RX / PA10 不复用为 `USART1_RX` → CubeMX 重生成 → 跑 `check_cubemx_survival.py`。结构性改动,需单开一轮 + 复跑台架闭环 | S-3 |
| **日志管线:与 S8 非阻塞日志合并评估** | 剩余动作只有这一条。丢弃可观测性代码已具备、V5 30 min 未复现 49s 静默(运行期 >10s 静默全在 `e02_probe` 窗口内=N-17) | N-2 |
| **net 层跨上下文收口** | 剩余动作:**消化 E-27 / E-28**(裸指针收口为状态查询 API) | E-27 / E-28 |
| **net 层跨上下文收口(含 reconcile 饿死签名)** | 两件事同批做:① 裸指针收口为状态查询 API(E-27 / E-28);② **对时 reconcile/relisten 突发把 uiTask 压成 800 ms+ 单串缺席**——2026-10-25 台架两轮分箱定案:同负载换 `:7003` churn 2200 周期 stall=0(阻塞型已被 F3 治愈),探针轮 3 事件 8 行全为该签名(漏检零、误报零)。处置两案并评:优先级矩阵复核 ∥ reconcile 突发分片让路 | E-27 / E-28;`../网络/网络自愈架构设计.md` §4.6;`../子系统设计/看门狗设计说明.md` §11.3 |
| **USART1 改为只发不收**(独占一轮) | 灭 ORE 僵尸机制根源(2026-10-02 台架 IWDG 误复位的机制根源):改 `.ioc` 令 USART1 不使能 RX / PA10 不复用为 `USART1_RX` → CubeMX 重生成 → 跑 `check_cubemx_survival.py`。结构性改动,**需清空全部工作树后独占一轮** + 复跑台架闭环 | S-3 |
| **注册校验白名单清理** | 剩余动作:清 `KNOWN_GAPS` 白名单(现只剩 `App/task/rs485_task.c`,见 `登记簿.md`)。**RS-485 DE 收尾已移入 `暂缓-RS485.md`** | N-23 残余 |
| **写回缓存空闲 flush · 性能与语义簇 · 空 TU 观察** | 三项随窗口评估,逐项见 `登记簿.md` 对应行 | N-22 / N-25 / N-28 |
| **性能与语义簇 · 空 TU 观察** | 两项随窗口评估,逐项见 `登记簿.md` 对应行 | N-25 / N-28 |
| **dhara 重试自旋 · 全序列卷锁** | 两项低优先,先确认是否真有第二写者/是否再出"存储侧喂狗饥饿" | S-4 / S-5 |
## 2. 验证常态(逢窗口顺带,不单独排期)
@@ -28,5 +34,4 @@
|---|---|---|
| **L5 队列往返基线重锁** | 下次 Phase 13 窗口顺带做(低风险:阈值余量 >8×;**需 PC peer**) | N-3 |
| **A2/A4 负向台架窗口** | PHY 拔线(需断 DTU 侧 / 关受管交换机端口)、A2 芯片级 `net_init` 失败(SPI 故障注入)、A4 短写压测 | N-16 |
| **探针窗口心跳缺口** | 定位 `time_sync` 监听重建为何阻塞 NET/FTP/UI(~1s 缺口,余量仅 ~0.7s);评估缩短重建重试或让掉线路径不阻塞其它任务 | N-17 |
| **串口助手 A6/A7 正路径补验** | 需 CH340 硬件接入后补验(`../测试说明/串口助手设计说明.md` 状态行 A1–A5/A8 已过) | — |
+35 -21
View File
@@ -13,6 +13,12 @@
> 2026-10-23 补卡:用户指出"ADC 还没采过真实电压"——经核查成立且更严重(连极性都没验过,
> 见 §2.6),故新增"已知电压注入验证"与"端子变比确认"两卡,并把 M4 的承诺边界改为
> "引脚电压"(`eng=0`),"端子二次值"降为依赖变比的条件项。
> **2026-10-25 转收口态**:卡 1~7(批 1 道A)与卡 8~11(批 2 道D)全部销项,**软件侧已 100%**;
> 剩卡 0 / 0b / 12 三张台架与外部卡。**台架不在手边(2026-10-25 确认)→ 本波整体顺延**,
> 不占编码道,当前波次已切到 `UI补齐.md`。
> ⚠ **保护现处于未标定闭锁态**:`protect_task.c:98` 要求 UA/UN/IA 的 `ADC_CAL_F_VALID`
> 全置位才走判据,而 VALID 只在标定写入 `[adc_cal]` 的 `valid` 位图后才置位
> (`adc_cal.c:338`)。用户裁定(2026-10-25)**保持闭锁到标准源到位**,不缩短解锁路径。
---
@@ -163,11 +169,11 @@ set = prot_set_get_f(cfg->set_id); /* 定值侧,单位 A / V(二次值)
**波次目标**:把"数"从原始码值推进到**有物理含义、有品质、有死区、能上送**的工程量。
| 里程碑 | 退出判据(全部满足才算完成) | 服务分类 |
|---|---|---|
| **M4 系数与量纲** | ① **至少 1 路电压通道经已知电压注入验证**(卡 0),斜率与理论 LSB 偏差 ≤2 %;② `adc_cal` 折算落地,采样环里是**引脚电压 V**而非码值(`eng=0`;若卡 0b 已给变比则直接到二次值 `eng=1`);③ 8 通道系数/零点可落盘、上电加载失败回退 ROM 默认;④ 三处下游常数按工程量重定并注明依据;⑤ "未标定 → 保护闭锁"生效;⑥ 量纲回归用例(不该动作时不动作)通过 | Standard |
| **M5 遥测链** | ① 200 ms 遥测快照模块产出值 + 品质;② 104 与 UI 共用同一份快照(不再各自取相量);③ 死区从编译期常量改为运行参数;④ 104 上送值与工程量一致(PC 主站读回核对) | Standard |
| **M6 运行参数与点表** | ① 运行参数段 `0x8020~0x8058` 可读写并持久化;② `0x401D` 频率点绑 `freq_get()`,品质位正确;③ 总召/周期/变位三种上送路径均取新值 | Standard |
| 里程碑 | 退出判据(全部满足才算完成) | 服务分类 | 状态(2026-10-25) |
|---|---|---|---|
| **M4 系数与量纲** | ① **至少 1 路电压通道经已知电压注入验证**(卡 0),斜率与理论 LSB 偏差 ≤2 %;② `adc_cal` 折算落地,采样环里是**引脚电压 V**而非码值(`eng=0`;若卡 0b 已给变比则直接到二次值 `eng=1`);③ 8 通道系数/零点可落盘、上电加载失败回退 ROM 默认;④ 三处下游常数按工程量重定并注明依据;⑤ "未标定 → 保护闭锁"生效;⑥ 量纲回归用例(不该动作时不动作)通过 | Standard | 🔶 **②③④⑥ 达成**(卡 2/4/6/7 销项);**① 与 ⑤ 的台架面 deferred** —— 卡 0 未跑(台架不在手边),故 M4 行保留、本波不收口 |
| **M5 遥测链** | ① 200 ms 遥测快照模块产出值 + 品质;② 104 与 UI 共用同一份快照(不再各自取相量);③ 死区从编译期常量改为运行参数;④ 104 上送值与工程量一致(PC 主站读回核对) | Standard | ✅ **①②③ 达成**(卡 8~11 销项,大窗 24 项读回 + 验收窗全绿);④ 的"值与快照一致"已验,**"与工程量一致"待卡 0/12**(工程量口径尚未成立) |
| **M6 运行参数与点表** | ① 运行参数段 `0x8020~0x8058` 可读写并持久化;② `0x401D` 频率点绑 `freq_get()`,品质位正确;③ 总召/周期/变位三种上送路径均取新值 | Standard | ✅ **全部达成**(`[run_par]` 9 键死区 + 0x401D 频率绑定 + 三路径取新值,台架钉证) |
> **批 2 裁定补记(lead,道D 票转述)**:遥测轨的两项增强——谐波**方和根真有效值**(挂
> `继电保护功能复现规划.md` L2-8)与快照**4 点平均平滑**——**不进 M5/M6 退出判据**,
@@ -291,6 +297,10 @@ typedef struct {
> (规则见 `docs/任务规划/README.md` §0)。
> **2026-10-23 新增"已知电压注入验证"与"端子变比确认"两卡**(序栏 0 / 0b 只为阅读顺序):
> 补的是 §2.6「ADC 从未采过已知电压」这一前置验证,不改动既有 1~12 的编号与引用。
>
> **2026-10-25 收口态**:卡 1~11 已全部销项,本表只剩 **0 / 0b / 12** 三张——三张全是台架或
> 外部资源,**没有软件道可做**。台架不在手边 → 本波顺延,不占编码道(当前波次 `UI补齐.md`)。
> 顺序不变:**卡 0 是唯一"只需一块万用表"的卡**,它同时是 M4 ①、卡 12 与 B10 送检的前置。
| 序 | 任务 | DoD(可验证验收判据) | 硬依赖 | 资源 | 写范围 | 状态 |
|---|---|---|---|---|---|---|
@@ -311,36 +321,40 @@ typedef struct {
## 6. 并行与顺序
```
② 核心折算+三条分支(✅ 2026-10-25 销项:231dc81 / d39e5c9 / 59da40b)
② 核心折算 + 三条分支(✅ 2026-10-25 全部销项:231dc81 / d39e5c9 / 59da40b)
2 标定模块 ─→ 4 落盘 ─→ 5 未标定闭锁 ─┐
6 三常数重定 ─────────────────────┼─→ 7 量纲回归
③ 批 2 在途
③ 遥测与运行参数(✅ 2026-10-25 全部销项:9c2653c / 969fc5c / 7bbcc9c)
8 遥测快照 ─→ 9 104 读快照 ─→ 10 运行参数段
6 ─→ 11 频率点绑定
台架道(🔴,串行):0 注入验证 → 5 闭锁验证 → 9 主站读回 → 11 频率核对
外部道(🟡,与软件道并行):0b 变比确认 → 12 标准源两点标定(本波末)
④ 剩余三张(⏸ 顺延,等台架/外部)
0 注入验证(万用表)→ 0b 变比(子板)→ 12 两点标定(标准源)
0 ─→ 5 闭锁验证(VALID 置位后保护才走判据)→ B10 送检
```
- **卡 0 斜率规则对 ROM 默认仍有效**(卡 1~7 已按理论 LSB 冻结销项):实测斜率与理论值
偏差 >2 % 时**先查前端(分压/变比/焊接)再改系数**——用系数凑斜率会把硬件的错固化成"标定值"。
- **WIP ≤ 2**:代码道最多 2 个并行(台架道 1 个),沿用 `docs/环境与部署/并行任务工作树方案.md` §7.3。
- **写范围冲突预警**:卡 9 / 11 都改 `App/protocol/iec104/iec104_pts.c`,必须同一分支顺序做;
卡 8 新 `App/algo/meas.*`、卡 10 新 `App/algo/run_par.*`,落新文件须双端注册。
**当前软件道为 0**(本波已收口)。
- **写范围冲突预警**(历史记录,卡 9 / 11 均已销项):两卡都改
`App/protocol/iec104/iec104_pts.c`,必须同一分支顺序做;卡 8 新增 `App/algo/meas.*`、
卡 10 新增 `App/algo/run_par.*`,落新文件须双端注册。
---
## 7. 前置决策(需用户拍板)
## 7. 前置决策
| # | 问题 | 备选 | 建议 |
> 2026-10-25 收口复核:原 7 条里 5 条已随实现定案,只剩 **2 条真开放**。已定案的结论沉淀在
> 代码与 `App/algo/adc_cal.h` / `meas.h` 的头注释里,不再占本表。
| # | 问题 | 备选 | 建议 / 现状 |
|---|---|---|---|
| 1 | **未标定时保护是否闭锁** | ① 闭锁(安全)② 照常动作(现状,但量纲错配)③ 编译期开关 | **①**。拿端子电压比二次值定值等于保护瞎动作;现有台架期望要跟着改 |
| 2 | **精度目标** | 0.5 级 / 1 级 | 决定卡 12 的判据;也决定 `k` 是否需要 Q16(建议直接 Q16,成本为零) |
| 3 | **`CFG_VAL_INT` 是否本波做** | ① 补引擎类型(30 行)② 零点加偏置绕开 | **①**。运行参数段的死区/系数后面也要有符号值,一次做完;绕开的偏置约定是给未来埋坑 |
| 4 | **遥测快照由谁驱动 200 ms** | ① `adc_task` 分频(生产者发布)② `protect_task` 分频 ③ 独立软定时/新任务 | **①**。快照是"数据层",应由生产者在自己的上下文发布(与 `ui_data_feed` 同理);放协议任务会让 UI 在 104 未连接时拿不到新值,新任务则白占栈 |
| 5 | **温度通道是否纳入** | ① 不纳入(`flags=0`)② 补热敏曲线 | **①**。V0.1 温度只是机箱监视,非线性折算没有精度要求;纳入会拖长本波 |
| 6 | **端子 / 子板变比从哪来** | ① 有子板原理图(直接算)② 只有子板实物(万用表同时量端子与引脚)③ 都没有 | 决定 `eng` 能否置 1。②同样可行且够用;③则本波只交付"ADC 引脚电压",二次值登记为缺口 |
| 7 | **首次注入在哪一级** | ① ADC 引脚侧(验 LSB,排除前端)② 端子侧(验全链,但需先确认耐压) | **①**。引脚侧加 ≤2 V 不会烧任何东西;端子侧在变比未知前也只允许 ≤2 V 直流,**严禁直接上 100 V / 220 V** |
| 1 | **精度目标** | 0.5 级 / 1 级 | 决定卡 12 的判据。**仍未拍板**——保护判据本身只需 3~5 %,0.5 级是计量口径;**卡 12 开跑前必须定**,否则"误差 ≤ 目标精度"这条 DoD 无法判定 |
| 2 | **端子 / 子板变比从哪来** | ① 有子板原理图(直接算)② 只有子板实物(万用表同时量端子与引脚)③ 都没有 | 决定 `eng` 能否置 1。②同样可行且够用;③则本波只交付"ADC 引脚电压",二次值登记为缺口。**未拍板**(取决于子板是否到手) |
**已定案(不再讨论)**:未标定即闭锁(卡 5 实现;2026-10-25 用户裁定**保持闭锁到标准源到位**,
不缩短解锁路径)· `CFG_VAL_INT` 补引擎类型(卡 3)· 遥测快照由 `adc_task` 分频发布(卡 8)·
温度不纳入线性标定(`adc_cal_flags(TEMP)` 恒 0)· 首次注入在 ADC 引脚侧(卡 0 DoD,≤2 V 直流)。
---
+17 -48
View File
@@ -8,18 +8,18 @@
> `../测试说明/实机测试实施指南.md`(S4/S5/S7/S9/S11)、`../问题记录/GD5F2GQ5UE_Trap_Records.md`(S9)、
> `../测试说明/主机单测覆盖率口径.md` §9「P1 落地」与「P2 落地」(S1-c:`sys_log_mcu` 106 例、
> `time_sync` 既有 4 例,两套均已被 `test-coverage` 总闸覆盖)。
>
> **本文件只剩 1 项未闭环**(A-4,且 RS485 侧随 B2 暂缓)。2026-10-25 复核时把已销项条目
> 压缩成证据指针——原来的详述与「完成即销项」规则冲突,留着会让读者以为还有活。
## 1. P1 收尾(0 项:P1-10 已于 2026-10-25 销项)
## 1. P1 收尾(0 项)
### P1-10 测试固件静态 RAM 预算(基线已重建、缓冲已瘦身,剩构建实测闭环)
**P1-10 测试固件静态 RAM 预算** 已于 2026-10-25 销项(`task/P1-10-test-fw`→73f9e10):
CH395F 套件 5 档构建全部链接通过,最坏态 `RW_IRAM1` 91,088 B / 69.5%(距 92% 线余 29,498 B);
`@test` f3 轮 VERDICT PASS(Phase 1/12/15 = 9/9、1/1、21/21)。**数字与规范正文的唯一出处**是
`test/board/ch395f_test.h` 的开关区注释,本文件不再重复。
- **位置**:`MDK-ARM/STM32F407-Demo/STM32F407-Demo.sct`(`RW_IRAM1 0x20000000 0x00020000` = 128KB;芯片 192KB 的上部 64KB 有意未映射,克隆芯片兼容性考量)
- **已销项(2026-10-25,`task/P1-10-test-fw`→73f9e10)**:① CH395F 套件 **5 档**实际构建全部链接通过
(PHASE5 三静态缓冲确证在链:ch395f_test_task.o 数据段 12,285 B;最坏态 RW_IRAM1 91,088 B / 69.5%,
距 92% 线余 29,498 B——数字与规范正文见 `test/board/ch395f_test.h` 开关区,同一事实不在此重复);
② `@test` f3 轮 **VERDICT PASS**(Phase 1/12/15 = 9/9、1/1、21/21,身份戳 + 烧后回读核对,
bench PASS 入 task-worktree 台账;f2→f3 顺带复活 HW 模式看门狗掩码死分支 a9ba8ec,台架记录同文件)。
- **约束**:**不建议**扩 scatter 到 192KB(破坏既有克隆芯片兼容决策)。
**约束(仍然有效)**:**不建议**扩 scatter 到 192 KB——破坏既有克隆芯片兼容决策。
## 2. 测试与架构改进专项(S1x / A-x)
@@ -29,32 +29,11 @@
|---|---|---|---|
| **A-4** | ADC / RS485 采集链路的**测试可验证性约束** | ⏸ ADC 侧随 B1 闭环;**RS485 侧随 B2 暂缓(`暂缓-RS485.md`)** | §2.2 |
### 2.1 S12:模块级轻量断言宏 ✅(2026-10-25 销项,实现 `Drivers/BSP/app_assert.h`→658fbe7;
落位与示意稿 `App/util/` 的偏离理由 = layer-deps 方向约束,载于该头注释与提交正文)
### 2.1 S12:模块级轻量断言宏(✅ 2026-10-25 销项)
**动机**:`configASSERT` 只覆盖 FreeRTOS 内部;自研代码的"不该发生"靠散落的 `if`。
**设计要点**(**必须零生产开销**):
```c
/* App/util/app_assert.h —— 示意,非最终实现 */
#ifdef APP_ASSERT_ENABLE
#define APP_ASSERT(cond) do { if (!(cond)) { \
DBG_ERROR("[ASSERT] %s:%d", __FILE__, __LINE__); vApplicationAssertFailed(__FILE__, __LINE__); } \
} while (0)
#else
#define APP_ASSERT(cond) ((void)0) /* 生产构建:编译期消失,零符号零开销 */
#endif
```
**⚠️ 关键纪律**:
- **不得**在中断 / 高频路径使用(`DBG_ERROR` 有代价);
- **不得**替代正常的错误返回(断言是"内部不变量",不是"外部输入校验");
- 生产构建 `APP_ASSERT_ENABLE` **关闭**——与 `ENABLE_DESTRUCTIVE_TESTS` 同级策略。
**建议先在 1~2 处试点**(如 `net_socket.c` 的状态机不变量),验证收益后再推广。
**完成判据**:宏存在 + 生产构建 `@build` 0/0 且 `.map` 无新增符号;试点处有实际使用。
实现 `Drivers/BSP/app_assert.h`(→658fbe7)。**落位从示意稿的 `App/util/` 改到 `Drivers/BSP/`
的理由 = layer-deps 方向约束**,载于该头注释与提交正文。生产构建 `APP_ASSERT_ENABLE` 关闭时
宏展开为 `((void)0)`,零符号零开销——口径唯一正文 = 该头文件注释。
### 2.2 A-4:ADC / RS485 采集链路的测试可验证性约束 ⏸
@@ -72,18 +51,8 @@
**完成判据**:B2 设计文档体现上述三条;协议解析函数有对应 L0.5 单测。(B1 侧:ADC 无协议解析面,其"同一时刻性"由原子快照保证、已闭环。)
### 2.3 A-5 残余:CI 体积门禁盲区 ✅(2026-10-25 销项,同码凭证 + CI 复核→564715c、
跨树稳定修复→7c4628b;口径唯一正文 = `scripts/check_size_gate.py` docstring)
### 2.3 A-5 残余:CI 体积门禁盲区(✅ 2026-10-25 销项)
**现状**:`mem-numbers` 钩子**在 CI 上被跳过**(CI 无 `.map`)→ **CI 不守体积门禁**。
S14 已在 workflow 显式提示"体积门禁未执行"(`::notice::`)并在 `../CI/远程CI完整指南.md` 声明,
但**盲区本身未消除**——看到 CI 全绿仍可能误以为体积也守住了。
**可选处置**:
- 让 runner 具备 Keil 后,在 CI 增 `@build` job(成本高,需授权与许可证);
- 或把"体积校验"固化为**提交前必跑的本地门禁**(`scripts/ci_local.py`,当前已是事实标准)。
**完成判据**:存在**强制的**体积校验路径(CI 侧或本地侧),且文档明确其边界。
> **注**:本项与栈预算是同一话题的两面——**具体栈风险(原 S-1)已于 2026-10-10 削链闭环**
> (核算见 `docs/内存管理/RAM使用分析与优化方案.md`),本项仍是**门禁缺口**。
同码凭证 + CI 复核→564715c、跨树稳定修复→7c4628b。**口径唯一正文** = `scripts/check_size_gate.py`
的 docstring(含"CI 侧跳过 `mem-numbers` 的边界"与本地强制路径)。`docs/内存管理/RAM预算台账.md`
§1 仍指向本条目名,读那里的数字即可,不必回本文件。
+3 -3
View File
@@ -1,7 +1,7 @@
# 登记簿(长期观察项;存量 `N-x / S-x / T-x`,**新条目用语义标识**)
> 编号空间与"不回收"规则见 `docs/任务规划/README.md` §0;排期位置见 `docs/任务规划/README.md` §2 波次总览;
> 当前波次任务卡(带 DoD / 写范围 / 状态)在 `数据可信.md`——**「采集保护收尾」的 M1/M2 已收口,只剩 M3 送检**;
> 当前波次任务卡(带 DoD / 写范围 / 状态)在 `UI补齐.md`(`数据可信.md` 已转收口态)——**「采集保护收尾」的 M1/M2 已收口,只剩 M3 送检**;
> 并行归道(写域 / 道 / 合并次序)见 `并行分道方案.md`。
> **本文件是低频文件**:新发现按类别进对应表;销项 = 删行 + 清引用(`docs/任务规划/README.md` §3)。
> **2026-10-14 起新条目的 `#` 列填「语义标识」**——一行短语直接说清是什么事(如
@@ -14,7 +14,7 @@
|---|---|---|---|---|
| N-3 | **L5 队列往返基线(1223/988µs)的 L3 后重验**——L5 测 DONTWAIT 队列全程;L3 对该路径逐位不变 → 机制上无影响,但基线数值属分片时代,严格重锁需跑一轮 Phase 13(需 PC peer) | 2026-09-22(L3 收尾留档) | 低风险:10ms/100ms 阈值余量 >8×;下次 Phase 13 窗口顺带重锁即可 | `链路延迟测试说明.md` §6.4 L5 注¹ |
| N-16 | **A2/A4 专项场景台架验证待办**(正常路径已实测零回归):① PHY 拔线负向测试——断链需断 **DTU 侧**线缆或关**受管交换机端口**;② A2 芯片级 `net_init` 失败分支(需 SPI 故障注入);③ A4 短写压测(需远显客户端 + UI 推流压力) | 2026-10-03(台架拓扑 = CH395↔交换机,拔线操作受限) | 待专项台架窗口 | `实机测试实施指南.md` §10 |
| reconcile 突发饿死 uiTask | **对时 reconcile/relisten 突发(0~4s 窗)把唯一 BelowNormal 的 uiTask 压成同一任务 800ms+ 单串缺席(饿死型,非等待型——F3 返回点喂位射程外)**:8 连窗级 UI 缺席期间喂狗面本身未断(cf=0 seg=1)、uisn=0(不在 sink 段内)、uip 在途 307→1083ms 而 uis 峰仅 183ms——被拖的 1s 在 feed/port 纯计算段墙钟。**2026-10-25 台架两轮分箱定案**:同负载换 :7003 churn 2200 周期 stall=0(阻塞型已被 F3 治愈),探针轮 3 事件 8 行全为该签名(漏检零、误报零,v1.1 口径 FAIL 面精确收缩)。处置方向 = 自愈设计 §11.3 脆弱点 1 实测样本并档 **E-27/28 批 3**:优先级矩阵复核 与 reconcile 突发分片让路 两案并评 | 2026-10-25(F2/F3 验收轮②,v1.1 判据下捕获) | `docs/测试说明/boot_log_data/f3rounds_r2_probe_30min.log.gz`(3 事件 8 行 + STALL 证据行 + 同行 PROF);对照轮 `f3rounds_r1_7003_churn_30min.log.gz`;机理归档 `../网络/网络自愈架构设计.md` §4.6、`../子系统设计/看门狗设计说明.md` §11.3、`../UI设计/UI_设计架构.md` §5.8 | `../算法/继电保护功能复现规划.md`(E-27/28 属主文档指针) |
| reconcile 突发饿死 uiTask | **对时 reconcile/relisten 突发(0~4s 窗)把唯一 BelowNormal 的 uiTask 压成同一任务 800ms+ 单串缺席(饿死型,非等待型——F3 返回点喂位射程外)**:8 连窗级 UI 缺席期间喂狗面本身未断(cf=0 seg=1)、uisn=0(不在 sink 段内)、uip 在途 307→1083ms 而 uis 峰仅 183ms——被拖的 1s 在 feed/port 纯计算段墙钟。**2026-10-25 台架两轮分箱定案**:同负载换 :7003 churn 2200 周期 stall=0(阻塞型已被 F3 治愈),探针轮 3 事件 8 行全为该签名(漏检零、误报零,v1.1 口径 FAIL 面精确收缩)。处置方向 = 自愈设计 §11.3 脆弱点 1 实测样本并档 **E-27/28 批 3**:优先级矩阵复核 与 reconcile 突发分片让路 两案并评;**排期 = 批 4(结构债)**,与 E-27/E-28 裸指针收口同批 | 2026-10-25(F2/F3 验收轮②,v1.1 判据下捕获) | `docs/测试说明/boot_log_data/f3rounds_r2_probe_30min.log.gz`(3 事件 8 行 + STALL 证据行 + 同行 PROF);对照轮 `f3rounds_r1_7003_churn_30min.log.gz`;机理归档 `../网络/网络自愈架构设计.md` §4.6、`../子系统设计/看门狗设计说明.md` §11.3、`../UI设计/UI_设计架构.md` §5.8 | `../算法/继电保护功能复现规划.md`(E-27/28 属主文档指针) |
| N-30 | **relisten 沉降段统一到驱动 `sock_reset` 原语受阻**——"去重复实现"的收口已实测回退:原语版 `ftp_abort_probe` RST **0/10**、FIN **0/5**(中止后首笔复连仍被截断到 ≤2048B),另新增 `sock_reset_sync timeout (600ms)` 与 `close: sock_reset not done` 两条 `[ERR]`;同场 net 层自建序列 **10/10 + 5/5** | 2026-10-14(同一块板 A/B,判据 `test/host/ftp_abort_probe.py`;快复连 50/50、背靠背 30/30 两版都过 → 失效面精确落在"中止后首笔复连") | **现状 = `net_listener.c` 保留自建排渣序列**(排空 + CLOSE + 排事件 + 等 CLOSED,30 ms 重试轮持续清)。重开前置三条语义:① 隔离窗内**持续**排空/关闭(残渣在 CLOSE 之后才落进 RX,一次排空接不住)② **复用让位**(复位机不得拆上层刚在同一芯片 Socket 上重建的监听)③ `net_sock_reset_sync` 改"已在运行 = 加入等待"(`begin` 返 -1 ≠ 失败) | `../网络/网络自愈架构设计.md` §8 延后项 1、§5.2 E16;`../问题记录/CH395F_Trap_Records.md` TRAP-NET-18 |
## 2. 存储 / 日志管线
@@ -46,4 +46,4 @@
| N-27 | **内存优化簇剩余**:原报告 R-2 后半(缩堆 56→32 KB → 迁 CCM)· R-3 · R-4 · R-6 | ⏸ **整簇暂缓**(2026-10-15 用户裁定):没有功能在等这块预算,而搬迁要动 scatter、要逐条过 DMA 可达性清单、缩堆还要上板复测。⚠ 代价落在"以后加任务 / 抬栈 / 加堆"那一刻——CCM 只剩 7,904 B、FreeRTOS 堆 `min_ever` 8,464 B,届时 `mem-budget` 会先报警 | 重开条件见 `../内存管理/RAM使用分析与优化方案.md` §4。⚠ **原报告 R-5 已判定不可行**(CMSIS-RTOS2 `freertos_os2.h` 有 `#if (configMAX_PRIORITIES != 56) #error`,改小直接编译失败),不再列入 | **暂缓** | 报告 R-2 剩余/R-3/R-4/R-6/§5.5 |
| N-28 | **报告 F-5:uvprojx 里 127 个空 TU**(201 个 LVGL `.c` 中 127 个 `.map` 零产出) | 增量构建实测 4~5 s、远程 CI 刻意不跑 `@build` → **非产品指标**;报告原"编译时长 −40%"无基线记录 | 🟡 观察:等有实测的全量构建耗时痛点再做——用 Keil 原生 `<IncludeInBuild>0</IncludeInBuild>`(可逆)而非删条目,且排在任何 `lv_conf.h` 改动之后;动手前先补一次全量构建计时做基线 | 结构债 | 报告 F-5 |
| N-29 | **仓库膨胀**:`.git` **233 MB**(2026-10-25 实测)+ 手册图片 36.3 MB(受控文件合计仅 79.3 MB,`.git` 已是它的 3 倍) | clone/备份慢,且持续恶化 | 降采样 / 拆 submodule / LFS 三选一 **+ 一次 `git filter-repo` 历史重写**(三项都不解决历史膨胀)。**已决策(2026-10-11):暂不处理、登记观察**——推送/协作前重评 | **仓库决策** | 报告 D-1 |
| U 簇 | **U5 页面落地**——⚠ "27 页"是目标数、不是差集:现存 **7 个页面实现**(`ui_page_ac/dc/device_info/net_cfg/password/runlog/selftest.c`,`ui_page_registry.c` 是生成物不算页面),27 个空叶子已归并为 **7 模块 + 2 项前置能力**(`../UI设计/页面补齐规划.md`) | 地基已齐(U1~U4 已落地;`ui-golden` 与 UI 字符集差集检查均已挂 pre-commit),新增一页 = 3 处人工 + 1 条生成器命令;缺的是产品定义与真数据 | **未排期**(2026-10-20 用户裁定暂缓);最早在「数据可信」M4 之后开工——`ui_data` / `ui_data_feed` 组装的是码值帧,先做会返工(`数据可信.md` §10)。逐页规格:`../UI设计/页面扩充详细方案.md` | UI 扩展 | `../UI设计/页面补齐规划.md` |
| U 簇 | **U5 页面落地**——33 叶已绑 **12**、剩 **21**("27 页"是目标数、不是差集;`ui_page_registry.c` 是生成物不算页面)。组件层三件套(`ui_w_editor` / `ui_w_setlist` / `ui_page_action`)已落地但**零消费者** | 地基已齐(U1~U4 落地;`ui-golden` 与字符集差集检查均已挂 pre-commit),新增一页 = 3 处人工 + 1 条生成器命令 | **当前波次**(2026-10-25 用户决定:下一波只做 UI 补齐、结构债押后)。21 叶按数据源就绪度分三梯队,第一梯队 9 叶零依赖——明细与 DoD 见 `UI补齐.md` | UI 扩展 | `../UI设计/页面补齐规划.md` |
+6
View File
@@ -28,3 +28,9 @@
> ⚠ **B10 与「数据可信」的依赖**:B10 的"L1-5 标定复核"依赖「数据可信」的通道标定卡(卡 12),
> 即 **「数据可信」是 B10 的前置**。该依赖已在 `docs/任务规划/数据可信.md` §10 登记,两边不要
> 各写一套;送检窗口若早于「数据可信」的 M4,先按卡 0 的注入结果对齐口径。
>
> ⚠ **送检前必须先解保护闭锁**(2026-10-25 复核):产品构建下 `protect_task.c:98` 要求
> UA/UN/IA 的 `ADC_CAL_F_VALID` 全置位才走判据,而 VALID 只在标定写入 `[adc_cal] valid`
> 后才置位——**当前保护不动作**。B10 要验"过流/过负荷/电压+频率类判据全通过",
> 必须先完成卡 12 把 VALID 置起来,否则送检现场所有保护判据都表现为"不动作"。
> 用户裁定(2026-10-25):**保持闭锁到标准源到位**,不用万用表标定走捷径。