故障录波回放页:开机后新段不进钉住的段表(F1)+ 数据 CRC 判废串口静默(F2)——#68 第二幕尾步现场发现建档,方案待裁定 #93

Open
opened 2026-11-06 20:11:51 +08:00 by super_agent_bot · 0 comments
Collaborator

This is by an automated agent, not a human.

立单缘由

2026-11-06 #68 第二幕尾步(回放页「坏段 / 无录波段」两画面板级闭环)的台架远程轮记下两条现场发现:F1 开机后新段不进回放页段表、F2 数据 CRC 判废在串口静默。收工报告(#91 尾步评论)口径「记录在案,不修码」;本次按 @wandering1 指示另立本单,把两条发现从「在案」升级为「带完整方案与影响评估的可排期工单」。本单零代码改动,是否执行、按哪个方案执行等用户裁定。

两条发现的实测画面与串口摘录在 docs/测试说明/测试数据/wave_shot_20261106/(发现原文见该 README §两条现场发现;复现口令同目录);台账面见 docs/子系统设计/故障录波设计说明.md §10「回放页坏段/空态画面闭环记录」末段。本单不改动 #68 已闭环的判定。

F1|开机后新段不进回放页段表(段表钉住缓存的实面)

现象(实测):开机后 FTP STOR /WAVE/WAVE09.BIN(坏版与有效版都试过),回放页段表始终不出现该段号——左右键把段环游满圈(周期 9,导航脚本连发 r)也到不了它,静默出局、串口零留痕。本轮据此按手册原文改用列内既有段同号覆盖(RETR WAVE06.BIN → byte[130]^=0x01 → STOR 同号),一次即中;手册 §4 步 7 的「同号覆盖」纪律本来就是绕着这条路写的。本单把「为什么投放新段号不行」钉成工单,免得后人重踩。

机理(代码钉死;钉表本身不是 bug,是 11-02 v1.6 的防抖纪律):回放页段表是 RAM 缓存静态表(App/task/ui_task.c)——

  • 表本体 s_wave_idx / s_wave_cnt / s_wave_scanned(ui_task.c:434–436);ui_task_wave_scan()(:464)成功即钉 s_wave_scanned=1(:535),失败不钉(11-02 修复)。
  • 全文件只有两处作废点:① 页面手动录波受理时 ui_task_wave_manual_req() 清 s_wave_scanned(:691,同一支还清段头缓存 :692,lead 裁定 2026-10-29 第 3 条);② 当前段号不在表内时先重扫再定位 ui_task_wave_seg_around()(:732–734)——即「当前段消失」天然收敛面。
  • 没有第三处:页开关不作废(Drivers/BSP/UI/ui_page_wave_play.c 的 pg_init 只清页状态、零 I/O,:328–331);ui_task_wave_table() 见 s_wave_scanned==1 直接返回不重扫(:545–550)。

⇒ 开机会话内,凡是磁盘上新出现的段号(FTP STOR、defaultTask 落盘占用新号)对已钉的表一律不可见,直到下一次作废触发。

影响:

  1. 测试 / 手工轮(本轮实测):FTP 投放段只有两条路让回放页看见——同号顶掉列内既有段,或触发一次手动录波(后者会往盘上多写一段,副作用不该成为操作规程的常态)。并且空态「再探盘」的承诺在表钉住时不成立:pg_key 空态按左右键 = wp_ensure 再探(ui_page_wave_play.c:408–411,注释原话「新段可能已落」),但 seg_first → ui_task_wave_table 被钉住的表短路,永远不会去枚举目录。钉表纪律与这句页面承诺之间存在缝隙——这是 F1 定性的本体:不是新缺陷复活(11-02 的「枚举恒空」是判返回值错误,性质不同),而是缓存失效面覆盖不全。
  2. 产品面(代码途径推断,本轮未实测):若开页首扫发生在前,boot 会话内在后落盘的新段号段——P 触发 / bench T 源等不经 manual_req 的落盘路径(P 触发现被标定闭锁,故未实测)——在回放页不可见,直到某次作废触发;同号轮转覆盖则可见(本轮坏段即这样命中),所以暴露面收窄为「段号尚未在表上出现过」的窗口。录波功能的核心场景恰恰是事后取新段,这个窗口值得修。
  3. 镜像噪声:全 DELE 后钉住的表仍会对已删文件逐个撞 open fail fr=4(本轮 18:14:55–58 三条)——画面结论仍对(「无录波段」),但取证面呈「表盘不一致的重试」而非 dir ok, 0 seg entries(ui_task.c:520)那条干净事实。

候选方案:

方案 内容 判语
A(推荐)开页作废 注入表扩一个纯内存作废钩子:Drivers/BSP/UI/ui_data.h 加 wave_enter op(契约与 manual_req 同族,ui_data.h:951–957);App/task/ui_task.c 实现 = 清 s_wave_scanned 且清 s_wave_cache_ok(与 manual_req:690–697 同纪律——同名文件被顶掉后旧段头不能拿旧尺子量新段);ui_page_wave_play.c 的 pg_init 调用一行;simulator/main.c 假桩补字段保编译。重扫仍懒在首帧,开页链零 I/O 不破 成本 = 每次开页首帧多一次 f_opendir + 至多 WAVE_ST_SEG_MAX(100)次 f_readdir——这笔账 ui_task.c:412–414 已列入既有「一次渲染最坏包络」,页内按键不新增任何重扫,11-02 钉表防抖纪律原样保留
B(推荐,与 A 同批)空态再探盘前作废 pg_key 的 IDLE 分支调 wp_ensure 前先调同一作废 op 兑现「新段可能已落」的承诺;成本有界在空态按键(表若真 0 段,每次再探重扫正是想要的语义)
C 时间 TTL 作废 — 否:引入非确定性与对时依赖,取证场景要的是「开页即新」,不是「等够就新」
D 写侧跨任务通知作废(FTP / defaultTask 落盘后叫 uiTask 清表) — 否:给 NET / 存储侧新增对 uiTask 的作废耦合,与「UI 只经注入表取数」的既有分层相抵,收益 A 已覆盖

A+B 后仍剩一个残余面:页开着时投放的新段要再开一次页才可见——属缓存语义内,写进手册 §4 与设计说明 §10 的纪律性事实段即可,不为它加机制。

验收标准(板级远程轮,bench 锁):

  1. 开机 → 开回放页(钉表)→ FTP STOR 新段号 → 关页再开 → 新段进表、开屏光标落数值最大段;
  2. DELE 全空 → STOR 任一文件 → 空态按左右键 → 该段可见(B 的独立判据);
  3. 页内 UD/LR 连按不新增 ui wave scan 串口锚点(钉表防抖回归面:11-02 行为零变化);
  4. manual_req 同时作废段表+段头缓存行为回归不变;坏段/空态两画面判据复跑 = 与 wave_shot_20261106 三态帧同判(F2 修前修后画面本就如此);
  5. 同号覆盖当前段 → 切出再切入即见新字节(段头缓存随开页作废后此面只会更稳)。

验证盲区点名:模拟器用假 s_wave_ops 桩、主机单测不编译 ui_task.c 读路径(11-02 修复记录原话:「模拟器……不编译读路径,黄金参考图与三组主机单测从未暴露此病」)——本单两条的验收只能落板级轮,主机全绿不构成修复证据。

F2|数据 CRC 判废在串口静默(靠画面自证)

现象(实测):坏版同号覆盖后进入该段,画面即刻「该段不可读」(WP_ST_BAD 显式文案、零波形元素、绝不平线——判据本身过,ui_page_wave_play.c:343–346),串口同一时刻零新增留痕。本轮靠 PC 侧对同一份字节 test/host/wave_read.py dump 打出 REJECT: data CRC16 mismatch: stored 0xF991 calc 0xB111 over 5120 bytes at offset 128(rc=1)才完成互证。

机理(设计如此,非漏修):ui_task_wave_load_head()(ui_task.c:586)判废共五类出口——头解析 / 尺寸自相矛盾(head_parse)、长度等式不符、数据窗读失败、尾 2B 读失败、CRC 比对不符——统一归 UI_WAVE_BAD;串口留痕只给「表上列着、开档失败」那一类(ofr != FR_OK 分支 :669–674,即 open fail fr=)。11-02 的设计逻辑:没视觉面的失败必须留痕,有画面自证的可以静默。本轮实测无违和,F2 不是翻案,是把该口径的适用边界钉出来。

影响:「画面自证」的前提是画面在场。

  1. 远程轮:本板的常态是台架远程——串口常驻、画面经 7003 间歇取帧。没抓屏的窗口段里 CRC 拒收完全不可观测,事后补证要 FTP RETR 复取 + wave_read 判(本轮即为此多走两道传输);
  2. 无人值守:现场人员可能瞥见过一次「该段不可读」,板上与串口都不留时间 / 段号 / 判废原因——事后调查「这段什么时候、为什么不可读」只能复现制造;
  3. 与 11-02 修复记录第一步的留痕教训(「留痕必须覆盖失败路径,否则『没打印』与『没执行』无法区分」)存在口径张力:画面在场时张力被屏幕吸收,串口-only 轮就退化成黑洞。

候选方案:

  • 落点(推荐):load_head 五类 BAD 出口汇成一个 DBG_* 留痕调用点(AGENTS.md 日志成本口径:每调用点约 90 B Flash),形如 ui wave head idx=%u reject=%u,原因枚举 = 1 头解析 / 2 长度等式 / 3 窗读 / 4 尾读 / 5 CRC 不符;第 5 类可再带 stored/calc CRC16——与 PC 侧 wave_read 的 REJECT 行同名互证。行长远低于 DBG_LINE_BUF_MAX(192)无需单独抬。
  • 频控:BAD 不缓存(:667–668 s_wave_cache_ok=0),天然形态 = 每次进入坏段一行,与按键、画面一一对应;若嫌反复进出坏段刷行,可加「(idx, 原因) 相对上一次变化才记」的去重——代价是同号再投放再判废不留行。默认推荐不去重(判废是低频人工动作,逐次留痕正是取证要的东西),取舍留给裁定。
  • 级别:DBG_ERROR 与同函数既有留痕同面(open fail 即 ERROR),但 [ERR] 是 /serial-boot-test 的 Forbidden 标记——故意投放坏段的轮次会命中(本轮已把 fr=4 按「留痕本意」写进证据 README 豁免口径)。不想扩豁免面可用 DBG_INFO(0 段事实行有 INFO 先例,ui_task.c:520)。推荐:保持 ERROR + 手册 §3 判读表补一行「坏段轮 reject 行 = 预期内」,拒收本属红色事件;最终级别留给用户拍板。
  • 否:落 /log 文件——判废要进七本定长记录就得开持久化新面(单写者纪律、记录格式扩容),成本一个量级、收益不比串口常驻的这行字多。

验收标准(板级远程轮):

  1. 按证据 README 复现口令第 2 步制造坏段 → 进入该段:串口出现 reject 行,段号 / 原因与 PC 侧 wave_read 同判一致(第 5 类附两组 CRC 值可逐值核对),画面「该段不可读」逐比特不变;
  2. 恢复原字节 → 再进该段:零 reject 行、放波正常(不误报面);
  3. 无坏段的常规板况跑 /serial-boot-test:零新增 [ERR],启动门禁标记不受扰;
  4. 坏段反复进出按频控设计计行数;
  5. 手册 §3 判读表与 docs/子系统设计/故障录波设计说明.md §10 同步新留痕口径(含级别裁定记录)。

执行约束(排期时照此办)

  • 改动量小且局部:两条都落在 App/task/ui_task.c 读侧(F1 另触 ui_data.h 注入契约、ui_page_wave_play.c 一行、simulator/main.c 假桩),数十行级 + 文档同步(设计说明 §10、手册 §3/§4 判读面;登记簿按「完成即销项」删行、不留已消化行)。
  • 提交门禁按 repo 口径:/keil-build 0 错 0 警;F1 触页文件须跑 ui-golden(回放页黄金参考);bom-guard——App/task/ui_task.c 与 Drivers/BSP/UI/ 两文件都在带 BOM 名单内,Edit 后须核对补回;doc-links 三件套。
  • 板级验证复用本轮命令集(scripts/board_ui_nav.py 取帧注键 + test/host/wave_read.py 互证 + serial-assistant 摘录),复现口令现成,见 docs/测试说明/测试数据/wave_shot_20261106/README.md。
  • 两单可拆做也可一批:F2 完全独立;F1 的 A、B 同批最省一轮板级。

关联

  • #68(第二幕主单,已闭环——本单不改其判定);#91(收工报告所在 PR,两条发现原文在其尾步评论与本板 docs/子系统设计/故障录波设计说明.md §10);#90 / #67(测试面代码已在库)。
  • 证据目录:docs/测试说明/测试数据/wave_shot_20261106/(三态帧 + _raw3200.bin 原帧 + 串口摘录 + samples/ 坏样本 / 原件对,sha256 全清单)。
  • 纪律出处:docs/子系统设计/故障录波设计说明.md §10「回放页枚举恒空缺陷修复记录」(2026-11-02,钉表纪律与留痕设计的诞生地);docs/测试说明/专项验证/故障录波板级到场轮执行手册.md §4(同号覆盖纪律原文)、§7(收工二选一)。
This is by an automated agent, not a human. ## 立单缘由 2026-11-06 #68 第二幕尾步(回放页「坏段 / 无录波段」两画面板级闭环)的台架远程轮记下两条现场发现:**F1** 开机后新段不进回放页段表、**F2** 数据 CRC 判废在串口静默。收工报告(#91 尾步评论)口径「记录在案,不修码」;本次按 @wandering1 指示另立本单,把两条发现从「在案」升级为「带完整方案与影响评估的可排期工单」。**本单零代码改动**,是否执行、按哪个方案执行等用户裁定。 两条发现的实测画面与串口摘录在 `docs/测试说明/测试数据/wave_shot_20261106/`(发现原文见该 README §两条现场发现;复现口令同目录);台账面见 `docs/子系统设计/故障录波设计说明.md` §10「回放页坏段/空态画面闭环记录」末段。本单不改动 #68 已闭环的判定。 ## F1|开机后新段不进回放页段表(段表钉住缓存的实面) **现象(实测)**:开机后 FTP `STOR /WAVE/WAVE09.BIN`(坏版与有效版都试过),回放页段表始终不出现该段号——左右键把段环游满圈(周期 9,导航脚本连发 `r`)也到不了它,静默出局、串口零留痕。本轮据此按手册原文改用**列内既有段同号覆盖**(`RETR WAVE06.BIN → byte[130]^=0x01 → STOR 同号`),一次即中;手册 §4 步 7 的「同号覆盖」纪律本来就是绕着这条路写的。本单把「为什么投放新段号不行」钉成工单,免得后人重踩。 **机理(代码钉死;钉表本身不是 bug,是 11-02 v1.6 的防抖纪律)**:回放页段表是 RAM 缓存静态表(`App/task/ui_task.c`)—— - 表本体 `s_wave_idx / s_wave_cnt / s_wave_scanned`(`ui_task.c:434–436`);`ui_task_wave_scan()`(`:464`)成功即钉 `s_wave_scanned=1`(`:535`),失败不钉(11-02 修复)。 - 全文件只有两处作废点:① 页面手动录波受理时 `ui_task_wave_manual_req()` 清 `s_wave_scanned`(`:691`,同一支还清段头缓存 `:692`,lead 裁定 2026-10-29 第 3 条);② 当前段号不在表内时先重扫再定位 `ui_task_wave_seg_around()`(`:732–734`)——即「当前段消失」天然收敛面。 - **没有第三处**:页开关不作废(`Drivers/BSP/UI/ui_page_wave_play.c` 的 `pg_init` 只清页状态、零 I/O,`:328–331`);`ui_task_wave_table()` 见 `s_wave_scanned==1` 直接返回不重扫(`:545–550`)。 ⇒ 开机会话内,凡是磁盘上**新出现的段号**(FTP STOR、defaultTask 落盘占用新号)对已钉的表一律不可见,直到下一次作废触发。 **影响**: 1. **测试 / 手工轮**(本轮实测):FTP 投放段只有两条路让回放页看见——同号顶掉列内既有段,或触发一次手动录波(后者会往盘上多写一段,副作用不该成为操作规程的常态)。并且空态「再探盘」的承诺在表钉住时不成立:`pg_key` 空态按左右键 = `wp_ensure` 再探(`ui_page_wave_play.c:408–411`,注释原话「新段可能已落」),但 `seg_first → ui_task_wave_table` 被钉住的表短路,**永远不会去枚举目录**。钉表纪律与这句页面承诺之间存在缝隙——这是 F1 定性的本体:不是新缺陷复活(11-02 的「枚举恒空」是判返回值错误,性质不同),而是缓存失效面覆盖不全。 2. **产品面(代码途径推断,本轮未实测)**:若开页首扫发生在前,boot 会话内在后落盘的**新段号**段——P 触发 / bench T 源等不经 `manual_req` 的落盘路径(P 触发现被标定闭锁,故未实测)——在回放页不可见,直到某次作废触发;同号轮转覆盖则可见(本轮坏段即这样命中),所以暴露面收窄为「段号尚未在表上出现过」的窗口。录波功能的核心场景恰恰是事后取新段,这个窗口值得修。 3. **镜像噪声**:全 `DELE` 后钉住的表仍会对已删文件逐个撞 `open fail fr=4`(本轮 18:14:55–58 三条)——画面结论仍对(「无录波段」),但取证面呈「表盘不一致的重试」而非 `dir ok, 0 seg entries`(`ui_task.c:520`)那条干净事实。 **候选方案**: | 方案 | 内容 | 判语 | |---|---|---| | **A(推荐)开页作废** | 注入表扩一个纯内存作废钩子:`Drivers/BSP/UI/ui_data.h` 加 `wave_enter` op(契约与 `manual_req` 同族,`ui_data.h:951–957`);`App/task/ui_task.c` 实现 = 清 `s_wave_scanned` 且清 `s_wave_cache_ok`(与 `manual_req:690–697` 同纪律——同名文件被顶掉后旧段头不能拿旧尺子量新段);`ui_page_wave_play.c` 的 `pg_init` 调用一行;`simulator/main.c` 假桩补字段保编译。重扫仍懒在首帧,**开页链零 I/O 不破** | 成本 = 每次开页首帧多一次 `f_opendir` + 至多 `WAVE_ST_SEG_MAX`(100)次 `f_readdir`——这笔账 `ui_task.c:412–414` 已列入既有「一次渲染最坏包络」,页内按键不新增任何重扫,11-02 钉表防抖纪律原样保留 | | **B(推荐,与 A 同批)空态再探盘前作废** | `pg_key` 的 IDLE 分支调 `wp_ensure` 前先调同一作废 op | 兑现「新段可能已落」的承诺;成本有界在空态按键(表若真 0 段,每次再探重扫正是想要的语义) | | C 时间 TTL 作废 | — | 否:引入非确定性与对时依赖,取证场景要的是「开页即新」,不是「等够就新」 | | D 写侧跨任务通知作废(FTP / defaultTask 落盘后叫 uiTask 清表) | — | 否:给 NET / 存储侧新增对 uiTask 的作废耦合,与「UI 只经注入表取数」的既有分层相抵,收益 A 已覆盖 | A+B 后仍剩一个残余面:**页开着时**投放的新段要再开一次页才可见——属缓存语义内,写进手册 §4 与设计说明 §10 的纪律性事实段即可,不为它加机制。 **验收标准(板级远程轮,bench 锁)**: 1. 开机 → 开回放页(钉表)→ FTP STOR 新段号 → 关页再开 → 新段进表、开屏光标落数值最大段; 2. `DELE` 全空 → STOR 任一文件 → 空态按左右键 → 该段可见(B 的独立判据); 3. 页内 `UD/LR` 连按不新增 `ui wave scan` 串口锚点(钉表防抖回归面:11-02 行为零变化); 4. `manual_req` 同时作废段表+段头缓存行为回归不变;坏段/空态两画面判据复跑 = 与 `wave_shot_20261106` 三态帧同判(F2 修前修后画面本就如此); 5. 同号覆盖当前段 → 切出再切入即见新字节(段头缓存随开页作废后此面只会更稳)。 **验证盲区点名**:模拟器用假 `s_wave_ops` 桩、主机单测不编译 `ui_task.c` 读路径(11-02 修复记录原话:「模拟器……不编译读路径,黄金参考图与三组主机单测从未暴露此病」)——**本单两条的验收只能落板级轮**,主机全绿不构成修复证据。 ## F2|数据 CRC 判废在串口静默(靠画面自证) **现象(实测)**:坏版同号覆盖后进入该段,画面即刻「该段不可读」(`WP_ST_BAD` 显式文案、零波形元素、绝不平线——判据本身过,`ui_page_wave_play.c:343–346`),**串口同一时刻零新增留痕**。本轮靠 PC 侧对同一份字节 `test/host/wave_read.py dump` 打出 `REJECT: data CRC16 mismatch: stored 0xF991 calc 0xB111 over 5120 bytes at offset 128`(rc=1)才完成互证。 **机理(设计如此,非漏修)**:`ui_task_wave_load_head()`(`ui_task.c:586`)判废共五类出口——头解析 / 尺寸自相矛盾(`head_parse`)、长度等式不符、数据窗读失败、尾 2B 读失败、CRC 比对不符——统一归 `UI_WAVE_BAD`;串口留痕只给「表上列着、开档失败」那一类(`ofr != FR_OK` 分支 `:669–674`,即 `open fail fr=`)。11-02 的设计逻辑:**没视觉面的失败必须留痕,有画面自证的可以静默**。本轮实测无违和,F2 不是翻案,是把该口径的适用边界钉出来。 **影响**:「画面自证」的前提是画面在场。 1. **远程轮**:本板的常态是台架远程——串口常驻、画面经 7003 间歇取帧。没抓屏的窗口段里 CRC 拒收**完全不可观测**,事后补证要 FTP `RETR` 复取 + `wave_read` 判(本轮即为此多走两道传输); 2. **无人值守**:现场人员可能瞥见过一次「该段不可读」,板上与串口都不留时间 / 段号 / 判废原因——事后调查「这段什么时候、为什么不可读」只能复现制造; 3. 与 11-02 修复记录第一步的留痕教训(「留痕必须覆盖失败路径,否则『没打印』与『没执行』无法区分」)存在口径张力:画面在场时张力被屏幕吸收,串口-only 轮就退化成黑洞。 **候选方案**: - **落点(推荐)**:`load_head` 五类 BAD 出口汇成**一个** `DBG_*` 留痕调用点(AGENTS.md 日志成本口径:每调用点约 90 B Flash),形如 `ui wave head idx=%u reject=%u`,原因枚举 = 1 头解析 / 2 长度等式 / 3 窗读 / 4 尾读 / 5 CRC 不符;第 5 类可再带 stored/calc CRC16——与 PC 侧 `wave_read` 的 REJECT 行同名互证。行长远低于 `DBG_LINE_BUF_MAX`(192)无需单独抬。 - **频控**:BAD 不缓存(`:667–668` `s_wave_cache_ok=0`),天然形态 = 每次进入坏段一行,与按键、画面一一对应;若嫌反复进出坏段刷行,可加「(idx, 原因) 相对上一次变化才记」的去重——代价是同号再投放再判废不留行。默认推荐不去重(判废是低频人工动作,逐次留痕正是取证要的东西),取舍留给裁定。 - **级别**:`DBG_ERROR` 与同函数既有留痕同面(`open fail` 即 ERROR),但 `[ERR]` 是 `/serial-boot-test` 的 Forbidden 标记——**故意投放坏段的轮次会命中**(本轮已把 `fr=4` 按「留痕本意」写进证据 README 豁免口径)。不想扩豁免面可用 `DBG_INFO`(0 段事实行有 INFO 先例,`ui_task.c:520`)。推荐:保持 ERROR + 手册 §3 判读表补一行「坏段轮 reject 行 = 预期内」,拒收本属红色事件;最终级别留给用户拍板。 - **否**:落 `/log` 文件——判废要进七本定长记录就得开持久化新面(单写者纪律、记录格式扩容),成本一个量级、收益不比串口常驻的这行字多。 **验收标准(板级远程轮)**: 1. 按证据 README 复现口令第 2 步制造坏段 → 进入该段:串口出现 reject 行,段号 / 原因与 PC 侧 `wave_read` 同判一致(第 5 类附两组 CRC 值可逐值核对),画面「该段不可读」逐比特不变; 2. 恢复原字节 → 再进该段:零 reject 行、放波正常(不误报面); 3. 无坏段的常规板况跑 `/serial-boot-test`:零新增 `[ERR]`,启动门禁标记不受扰; 4. 坏段反复进出按频控设计计行数; 5. 手册 §3 判读表与 `docs/子系统设计/故障录波设计说明.md` §10 同步新留痕口径(含级别裁定记录)。 ## 执行约束(排期时照此办) - **改动量小且局部**:两条都落在 `App/task/ui_task.c` 读侧(F1 另触 `ui_data.h` 注入契约、`ui_page_wave_play.c` 一行、`simulator/main.c` 假桩),数十行级 + 文档同步(设计说明 §10、手册 §3/§4 判读面;登记簿按「完成即销项」删行、不留已消化行)。 - 提交门禁按 repo 口径:`/keil-build` 0 错 0 警;F1 触页文件须跑 `ui-golden`(回放页黄金参考);`bom-guard`——`App/task/ui_task.c` 与 `Drivers/BSP/UI/` 两文件都在带 BOM 名单内,Edit 后须核对补回;`doc-links` 三件套。 - 板级验证复用本轮命令集(`scripts/board_ui_nav.py` 取帧注键 + `test/host/wave_read.py` 互证 + serial-assistant 摘录),复现口令现成,见 `docs/测试说明/测试数据/wave_shot_20261106/README.md`。 - 两单可拆做也可一批:F2 完全独立;F1 的 A、B 同批最省一轮板级。 ## 关联 - #68(第二幕主单,已闭环——本单不改其判定);#91(收工报告所在 PR,两条发现原文在其尾步评论与本板 `docs/子系统设计/故障录波设计说明.md` §10);#90 / #67(测试面代码已在库)。 - 证据目录:`docs/测试说明/测试数据/wave_shot_20261106/`(三态帧 + `_raw3200.bin` 原帧 + 串口摘录 + `samples/` 坏样本 / 原件对,sha256 全清单)。 - 纪律出处:`docs/子系统设计/故障录波设计说明.md` §10「回放页枚举恒空缺陷修复记录」(2026-11-02,钉表纪律与留痕设计的诞生地);`docs/测试说明/专项验证/故障录波板级到场轮执行手册.md` §4(同号覆盖纪律原文)、§7(收工二选一)。
super_agent_bot added the 排队 label 2026-11-06 20:11:51 +08:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: wandering1/STM32F4-Base#93