fix(ui/wave): 回放页段表枚举恒空根因修复(seg_path 返回值判错 + 键处理缺重绘) #67

Merged
wandering1 merged 5 commits from fix-replay-enum-0e52b1963afa into master 2026-11-02 19:52:21 +08:00

5 Commits

Author SHA1 Message Date
super_agent_bot 364b163663 docs(wave): 回放页枚举恒空修复闭环入档并销项
CI / 静态门禁 (pre-commit) (push) Failing after 44s
CI / 主机侧单测 (MSVC) (push) Failing after 45s
CI / 静态门禁 (pre-commit) (pull_request) Failing after 40s
CI / 主机侧单测 (MSVC) (pull_request) Failing after 42s
- 故障录波设计说明 §10 新增「回放页枚举恒空缺陷修复记录」:四步证据链
  (失败不钉表+FR 埋点 → 诊断加强 → 根因 = 读侧用反 seg_path 返回契约 →
  同页键处理缺失效)、串口实录 `scan done cnt=7` / `head path fail idx=6`、
  修复前后板级对拍图与复现口令;10-31 那段「拿不到目录条目」的定性就地
  标注被推翻(保留为推理起点留痕);§10 表「板级·回放页」行与文首状态行
  同步为「测试面已开、坏段/空态画面仍待到场地拍」。
- 到场轮执行手册 §3 第一幕标注「已完成(2026-11-02)」,表 §1 与幕间
  依赖同步;历史三步保留但注明到场时不用再跑。
- 登记簿 §2 按「完成即销项」删除该行;任务规划 README 独立行同步。
- 证据入库 `docs/测试说明/测试数据/wave_enum_20261102/`:修复前/后回放页、
  切段、切道四帧 + README(含串口实录与复现口令)。Before = `7efa58d9`
  构建(身份戳 Nov 2 2026 14:21:24),After = 本分支构建(Code=247,288 B)。

Refs #38
2026-11-02 18:33:18 +08:00
super_agent_bot 046097918d fix(ui/wave): 回放页切通道/切段后不重绘——key_cb 接管键后补失效
回放页 v1.0 建的键处理返回 true(接管全部键),但从未调
ui_content_page_invalidate():框架只在 key_cb 返回 false 时才替页面
失效,于是「键送达、状态已切、屏上纹丝不动」。该病被枚举缺陷完全
遮住(整页恒空、没有可切的画面),随本波枚举修复首次上板才暴露:
真机按 ←/→/↑/↓ 帧字节完全不变(同帧哈希),布局与状态机无问题。

- 上/下切通道、左/右切段成功路径、空态再探路径,各补一次
  ui_content_page_invalidate()(与 ui_page_clock / ui_page_password
  等已接管键的页面同纪律);
- 切段失败仍保持「按了没动」的诚实语义(不重绘、不把忙态清成空);
- 修改记录 v1.1。

/keil-build 0 错误 0 警告(Code 247,288 B,+4 B),RAM 不变;
台账 / 同码凭证同批刷新。

Refs #38
2026-11-02 18:21:34 +08:00
super_agent_bot d6253aa974 fix(ui/wave): 钉死并修复回放页恒空根因——读侧用反 seg_path 返回契约
FR 埋点构建上板判读(本 boot 串口实录,临时诊断构建 = 上一提交):

    [UI_TASK] ui wave scan #1 done cnt=7 np=0 tt=0 ac=407
    [ERR][UI_TASK] ui wave head #1 path fail idx=6

- 目录枚举一直是好的(cnt=7 = 盘上七段全数入表,锁也拿到,tt=0):
  10-31「唯独 ui_task_wave_scan 拿不到目录条目」的定性被推翻。
- 真正坏的在 load_head / seg_win 的拼路径判错:契约
  (App/algo/wave_store.h:458)是「成功 = 写入字符数(本形态恒 16),
  失败才是负码」,读侧自建成功能起写成 != 0 判失败——每次成功都被
  判死,f_open 永远走不到,盘上有段也恒显「无录波段」。写侧
  default_task.c 同函数用 <= 0,一直是对的,所以「FTP 六段全见、
  写侧枚举正常、唯独回放恒空」的怪象全线得解。
- 模拟器走桩、不编译本文件读侧,黄金参考图与主机单测因此从未覆盖
  这条链,此病从建成存活至今(板端首张真机波形图见 PR #67)。
- 两处口径改 <= 0(与写侧一致);表列着的段 f_open 失败补带 FR 码
  的永久留痕——该失败态页面无视觉面,10-31 误定性的教训就是静默。
- 临时诊断(#N 序号 / try 闸日志 / 无条件 done 行)收敛删除,留
  最小永久集:scan opendir/readdir FR、零条目 INFO、head/win 开档
  失败 FR。try 闸恢复静默(看门狗设计说明 §4.3 口径)。
- /keil-build 0 错误 0 警告:Code 247,284 B(较临时诊断构建
  −368 B,较修复前 +236 B),RAM 不变;台账 / 同码凭证 / 数字回填
  同批刷新。

Refs #38
2026-11-02 18:07:52 +08:00
super_agent_bot 3e01e9d98e diag(ui/wave): 枚举扫描诊断留痕第二组(临时构建,随根因修复收敛)
第一组埋点烧后开回放页串口零留痕(既无 FR 失败也无零条目
行),剩余唯一静默分支 = try 闸取锁失败直接返回/扫描成功但有条目
不打印/段头与窗口读取失败不打印。本组补齐:

- scan:每次尝试编号 #N;try 闸失败行带 vol_lock_get_stats 计数(消费方
  观测,不取锁,符合看门狗设计说明 §4.3 口径);完成行改为无条件打印
  cnt/np/tt/ac(排除「成功但页面仍空」歧义)
- load_head / seg_win:try 闸、路径构造、开档 FR 码与读失败出口全部留痕

临时诊断构建,判性后随根因修复收敛到最小永久集。
/keil-build 0 错误 0 警告(Code +604 B,RAM 不变)。

Refs #38
2026-11-02 17:39:58 +08:00
super_agent_bot ee002d7ead fix(ui/wave): 回放页枚举扫描失败不再钉「无段」缓存并补 FR 码留痕
真机回放页恒显「无录波段」而 FTP 六段全在盘上(登记簿同名条目,
见 #38 §5)。本提交按执行手册 §3 步骤 1 落两件事:

- ui_task_wave_scan:f_opendir/f_readdir 失败本轮返 -1(「本轮无完整
  事实」语义),不再无条件钉 s_wave_scanned——原实现把卷忙/FR_DENIED
  一类失败钉成「0 段」假空态,直到下一次 manual_req 才重试;失败不
  钉表后下一次进页/按键自然重试,与 soe_store 读者同纪律。
- FR_NO_PATH(从未录过波)仍归「0 段」并钉表,设计原口径不动。
- 失败分支补带 FR 码的留痕(opendir/readdir 各一条 DBG_ERROR),
  「FR_OK 但零条目」加一条 DBG_INFO(留痕行正文以
  「ui wave scan」前缀区分,tag 用本文件既有的 [UI_TASK])
  ——根因判读表见执行手册 §3,
  板级远程开一次回放页即可定性,不必猜。
- DBG_TAG 定义 + dbg_log.h 包含上收到包含区(原在 s_wave_ops 之后的
  文件中部;同标签同宏,不构成行为改动,本文件既有留痕照常)。
- 体积/RAM 同码凭证随 /keil-build(0 错误 0 警告)同批刷新:
  Code +8 B,RAM 不变;台账受管区水位按门禁要求随本次 .map 同步
  (台账此前落后 master 既有 flash 漂移 +320 B,--write 一并拉齐)。

Refs #38
2026-11-02 17:07:21 +08:00