merge: task/wave-record 合入 v2-on-ui(故障录波数据面与单通道回放页)

冲突两处与处置
- docs/子系统设计/故障录波设计说明.md §5.2:上游把这张表交给格式化器重排,多出一列
  空列,并把「FA_WRITE 竖线 FA_OPEN_APPEND」里的竖线当成分隔符打断,标志位写法已损坏。
  取我方四条陷阱版(含实现期复核新增的第四条:搬段途中环被解冻甚至已换段 → 关档后
  复检环侧身份判废),并把标志位里的竖线转义(与 运行与自检记录设计说明.md 同一写法)。
  上游在表后新增的「取窗竞态的原因」配图不是本任务内容,原样保留未删。
- scripts/size_attestation.json:不手工拼接,改为合并后在主树重新构建再重盖凭证。

顺手修一处上一轮我引入的排版断行
- docs/任务规划/数据可信.md §4.6.5「跨转换器相位」那一行少一个分隔符,三列表渲染成
  两列;同时把引用从 §7 精确回 §7.1(链路分段)。合并面 68 个文档、46 张表逐张核对
  列数一致,命中 0。

合并态权威构建(主树,本次凭证的来源)
- 0 错误 0 警告;Code=243,552 / RO=28,784 / RW=1,972 / ZI=145,388;RW_IRAM1 89,936 B
  (68.6%)/ RW_CCM 57,376 B(87.9%)——与任务树逐项相同:上游自 merge-base 起对代码
  只改了 sample_ring 的注释与函数头,故台账数字无需重排,仅重盖同码凭证。
- 上游 14 个提交带来的门禁与技能改造(skill-size 钩子、五个技能正文外置)与本波正交,
  真重叠只有 docs/门禁说明/README.md 与 docs/测试说明/主机单测覆盖率口径.md 两处,
  按 hunk 距离自动并上,已逐项核对。

状态与后续
- 台架三条判据(注 1 V/50 Hz 对表、FTP 拉回比对、与 meas 及 104 同表读数)按用户裁定
  保持未完成,卡片不销项;本笔交付的是软件闭环。
- 全仓计数清扫(主机单测 41 → 44 套、无专属钩子 19 → 22 套、黄金 60 → 66 张、提交
  钩子数口径、两处钩子显示名)另开一笔,不与本笔混编。
- docs/任务规划/** 本应在主工作树改,本波由用户在任务树显式豁免、随本笔合回。
This commit is contained in:
2026-10-29 19:32:26 +08:00
81 changed files with 8874 additions and 430 deletions
+2 -2
View File
@@ -339,8 +339,8 @@ def main(argv=None):
ap.add_argument("--selftest", action="store_true", help="正例照得出 + 反例不误报 + 基线机制有效")
args = ap.parse_args(argv)
if not os.path.isdir(os.path.join(REPO, ".git")):
print("[ENV] 仓库根定位失败:%s 里没有 .git" % REPO)
if not os.path.exists(os.path.join(REPO, ".git")):
print("[ENV] 仓库根定位失败:%s 里没有 .git(目录或 worktree 的 gitdir 文件都算)" % REPO)
return 2
print("=== 块注释嵌套检查 check_nested_comment.py(注释体内出现 /* = ARMCC 诊断 9-D)===")
+1 -1
View File
@@ -11,4 +11,4 @@ date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi
2026-10-26 231712 25560 1520 136216 257272 24.5 80312 61.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4003;default_task.o=2736
2026-10-27 235372 26392 1572 136924 261764 25.0 81072 61.9 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055;default_task.o=2736
2026-10-28 236456 28124 1876 137084 264580 25.2 81536 62.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055;default_task.o=2736
2026-10-29 236456 28124 1876 137084 264580 25.2 81536 62.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055;default_task.o=2736
2026-10-29 243552 28784 1972 145388 272336 26.0 89936 68.6 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;wave_ring.o=5296;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055
1 date code ro rw zi er_irom1 er_pct iram1 iram1_pct ccm ccm_pct top_rwzi
11 2026-10-26 231712 25560 1520 136216 257272 24.5 80312 61.3 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4003;default_task.o=2736
12 2026-10-27 235372 26392 1572 136924 261764 25.0 81072 61.9 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055;default_task.o=2736
13 2026-10-28 236456 28124 1876 137084 264580 25.2 81536 62.2 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055;default_task.o=2736
14 2026-10-29 236456 243552 28124 28784 1876 1972 137084 145388 264580 272336 25.2 26.0 81536 89936 62.2 68.6 57376 87.9 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055;default_task.o=2736 heap_4.o=57376;lv_mem_core_builtin.o=16384;lftpd.o=7884;ui_net_sink.o=6770;ui_port.o=6420;nand_ftl.o=6216;wave_ring.o=5296;ch395f.o=4162;console_log.o=4132;sys_log_mcu.o=4055
+13 -13
View File
@@ -1,25 +1,25 @@
{
"built_at": "2026-10-29T17:51:46+08:00",
"fingerprint": "d9848eb18efe7902c936a791c0b649900c0088d4f2c582e0a71d9998ba9ae0f4",
"fingerprint_files": 1452,
"built_at": "2026-10-29T19:31:06+08:00",
"fingerprint": "5cc78605efbb7dd87e23d66915406c8487ee3f286a28ca50c8932693e3a4c614",
"fingerprint_files": 1460,
"fingerprint_source": "git-index",
"gated_regions": [
"RW_IRAM1",
"RW_CCM"
],
"git_head": "c51ac2e8ef09dbd51b1e81a82b73becc55ca1c3e",
"git_head": "efda416f427cea35465707cb26bf2f6517e732bc",
"map": "MDK-ARM/STM32F407-Demo/STM32F407-Demo.map",
"map_mtime": 1793267423,
"map_mtime": 1793273428,
"pct": {
"ER_IROM1": 25.23,
"ER_IROM1": 25.97,
"RW_CCM": 87.89,
"RW_IRAM1": 62.21,
"RW_IRAM1": 68.62,
"UNINIT_CCM": 18.75
},
"regions": {
"ER_IROM1": {
"max": 1048576,
"size": 264580
"size": 272336
},
"RW_CCM": {
"max": 65280,
@@ -27,7 +27,7 @@
},
"RW_IRAM1": {
"max": 131072,
"size": 81536
"size": 89936
},
"UNINIT_CCM": {
"max": 256,
@@ -37,10 +37,10 @@
"schema": 2,
"scope_note": "\u540c\u7801\u51ed\u8bc1\uff1a\u6307\u7eb9\u8986\u76d6\u56fa\u4ef6\u4f53\u79ef\u76f8\u5173\u6e90\u7801\uff0c\u53e3\u5f84\u89c1\u672c\u811a\u672c docstring",
"sizes": {
"code": 236456,
"ro_data": 28124,
"rw_data": 1876,
"zi_data": 137084
"code": 243552,
"ro_data": 28784,
"rw_data": 1972,
"zi_data": 145388
},
"threshold_pct": 92.0,
"worktree_dirt_at_stamp": 0,
+162 -49
View File
@@ -1,12 +1,12 @@
{
"files": {
"App/algo/adc_cal.c": {
"func_rate": 1.0,
"func_rate": 0.9412,
"funcs_covered": 16,
"funcs_valid": 16,
"line_rate": 0.986,
"funcs_valid": 17,
"line_rate": 0.9463,
"lines_covered": 141,
"lines_valid": 143
"lines_valid": 149
},
"App/algo/adc_health.c": {
"func_rate": 1.0,
@@ -80,6 +80,22 @@
"lines_covered": 41,
"lines_valid": 41
},
"App/algo/wave_ring.c": {
"func_rate": 1.0,
"funcs_covered": 15,
"funcs_valid": 15,
"line_rate": 0.9956,
"lines_covered": 225,
"lines_valid": 226
},
"App/algo/wave_store.c": {
"func_rate": 1.0,
"funcs_covered": 29,
"funcs_valid": 29,
"line_rate": 0.9612,
"lines_covered": 446,
"lines_valid": 464
},
"App/cfg/cfg_file.c": {
"func_rate": 0.963,
"funcs_covered": 26,
@@ -345,12 +361,12 @@
"lines_valid": 112
},
"Drivers/BSP/UI/ui_data.c": {
"func_rate": 0.9767,
"func_rate": 0.8235,
"funcs_covered": 42,
"funcs_valid": 43,
"line_rate": 0.9637,
"funcs_valid": 51,
"line_rate": 0.8692,
"lines_covered": 372,
"lines_valid": 386
"lines_valid": 428
},
"Drivers/BSP/UI/ui_net_sink.c": {
"func_rate": 0.7692,
@@ -373,10 +389,10 @@
"modules": {
"adc_cal": {
"files": {
"App/algo/adc_cal.c": 143,
"App/algo/adc_cal.c": 149,
"App/cfg/cfg_file.c": 689
},
"lines_total": 832,
"lines_total": 838,
"ok": true
},
"adc_health": {
@@ -447,7 +463,7 @@
},
"iec104": {
"files": {
"App/algo/adc_cal.c": 143,
"App/algo/adc_cal.c": 149,
"App/algo/freq.c": 130,
"App/algo/meas.c": 64,
"App/algo/phasor.c": 55,
@@ -461,7 +477,7 @@
"App/protocol/iec104/iec104_link.c": 405,
"App/protocol/iec104/iec104_pts.c": 255
},
"lines_total": 2365,
"lines_total": 2371,
"ok": true
},
"iec104_serv": {
@@ -562,14 +578,14 @@
},
"prot_dim": {
"files": {
"App/algo/adc_cal.c": 143,
"App/algo/adc_cal.c": 149,
"App/algo/freq.c": 130,
"App/algo/phasor.c": 55,
"App/algo/prot_elm.c": 122,
"App/algo/prot_set.c": 179,
"App/algo/sample_ring.c": 41
},
"lines_total": 670,
"lines_total": 676,
"ok": true
},
"prot_elm": {
@@ -600,11 +616,11 @@
},
"run_par": {
"files": {
"App/algo/adc_cal.c": 143,
"App/algo/adc_cal.c": 149,
"App/algo/run_par.c": 129,
"App/cfg/cfg_file.c": 689
},
"lines_total": 961,
"lines_total": 967,
"ok": true
},
"sha256": {
@@ -660,10 +676,10 @@
},
"ui_data": {
"files": {
"Drivers/BSP/UI/ui_data.c": 386,
"Drivers/BSP/UI/ui_data.c": 428,
"Drivers/BSP/UI/ui_w_soe.c": 62
},
"lines_total": 448,
"lines_total": 490,
"ok": true
},
"ui_sink": {
@@ -693,6 +709,29 @@
},
"lines_total": 73,
"ok": true
},
"wave_ring": {
"files": {
"App/algo/wave_ring.c": 226,
"App/algo/wave_store.c": 464
},
"lines_total": 690,
"ok": true
},
"wave_store": {
"files": {
"App/algo/wave_store.c": 464
},
"lines_total": 464,
"ok": true
},
"wave_trig": {
"files": {
"App/algo/wave_ring.c": 226,
"App/algo/wave_store.c": 464
},
"lines_total": 690,
"ok": true
}
},
"note": "主机单测覆盖率基线。口径与工具链限制见 docs/测试说明/主机单测覆盖率口径.md。门禁判据:files[].lines_covered 与 funcs_covered 只增不减,下降即拦提交。",
@@ -708,6 +747,8 @@
"App/algo/prot_set.c",
"App/algo/run_par.c",
"App/algo/sample_ring.c",
"App/algo/wave_ring.c",
"App/algo/wave_store.c",
"App/cfg/cfg_file.c",
"App/cfg/cfg_file_store_mcu.c",
"App/cfg/prot_set_store.c",
@@ -747,16 +788,16 @@
],
"totals": {
"files_generated_excluded": 5,
"files_tested": 46,
"files_untested": 151,
"func_rate": 0.9317,
"funcs_covered": 532,
"funcs_valid": 571,
"line_rate": 0.8983,
"lines_covered": 7058,
"lines_valid": 7857,
"modules_ok": 41,
"modules_total": 41
"files_tested": 48,
"files_untested": 169,
"func_rate": 0.9231,
"funcs_covered": 576,
"funcs_valid": 624,
"line_rate": 0.8992,
"lines_covered": 7729,
"lines_valid": 8595,
"modules_ok": 44,
"modules_total": 44
},
"untested_sources": [
{
@@ -768,9 +809,21 @@
"path": "Drivers/BSP/GD5F2GQ5UE/gd5f2gq5ue.c"
},
{
"code_lines": 407,
"code_lines": 486,
"path": "App/task/ui_task.c"
},
{
"code_lines": 466,
"path": "App/task/default_task.c"
},
{
"code_lines": 420,
"path": "App/app/ui_data_feed.c"
},
{
"code_lines": 369,
"path": "App/task/adc_task.c"
},
{
"code_lines": 353,
"path": "Drivers/BSP/UI/ui_w_setview.c"
@@ -783,10 +836,6 @@
"code_lines": 300,
"path": "Drivers/BSP/UI/ui_content_page.c"
},
{
"code_lines": 286,
"path": "App/task/default_task.c"
},
{
"code_lines": 265,
"path": "Drivers/BSP/UI/ui_w_editor.c"
@@ -796,8 +845,12 @@
"path": "Drivers/BSP/SD2506/sd2506.c"
},
{
"code_lines": 249,
"path": "App/task/adc_task.c"
"code_lines": 248,
"path": "Drivers/BSP/UI/ui_page_wave_play.c"
},
{
"code_lines": 230,
"path": "Drivers/BSP/UI/ui_data.h"
},
{
"code_lines": 218,
@@ -807,10 +860,6 @@
"code_lines": 215,
"path": "Drivers/BSP/UI/ui_w_setlist.c"
},
{
"code_lines": 214,
"path": "App/task/ui_task.c"
},
{
"code_lines": 206,
"path": "Drivers/BSP/CH395F/ch395f.h"
@@ -827,14 +876,18 @@
"code_lines": 200,
"path": "Drivers/BSP/UI/ui_w_ytview.c"
},
{
"code_lines": 196,
"path": "Drivers/BSP/UI/ui_data.h"
},
{
"code_lines": 157,
"path": "Drivers/BSP/TPAFE5160/tpafe5160.c"
},
{
"code_lines": 152,
"path": "Drivers/BSP/UI/ui_page_runreport.c"
},
{
"code_lines": 150,
"path": "App/algo/wave_store.h"
},
{
"code_lines": 150,
"path": "Drivers/BSP/UI/ui_page_password.c"
@@ -844,11 +897,11 @@
"path": "Drivers/BSP/UI/ui_page_device_info.c"
},
{
"code_lines": 134,
"code_lines": 142,
"path": "App/task/protect_task.c"
},
{
"code_lines": 132,
"code_lines": 135,
"path": "App/app/app_main.c"
},
{
@@ -911,6 +964,10 @@
"code_lines": 77,
"path": "Drivers/BSP/dbg_log.h"
},
{
"code_lines": 75,
"path": "App/algo/wave_ring.h"
},
{
"code_lines": 69,
"path": "Drivers/BSP/UI/ui_page_dc.c"
@@ -999,6 +1056,10 @@
"code_lines": 40,
"path": "Drivers/BSP/UI/ui_page_deadband.c"
},
{
"code_lines": 38,
"path": "Drivers/BSP/UI/ui_page_wave_manual.c"
},
{
"code_lines": 36,
"path": "Drivers/BSP/UI/ui_w_records.h"
@@ -1023,6 +1084,10 @@
"code_lines": 33,
"path": "Drivers/BSP/UI/ui_page_action.h"
},
{
"code_lines": 32,
"path": "App/algo/adc_cal.h"
},
{
"code_lines": 32,
"path": "App/util/boot_stats.h"
@@ -1031,10 +1096,6 @@
"code_lines": 32,
"path": "Drivers/BSP/RS485/rs485.h"
},
{
"code_lines": 31,
"path": "App/algo/adc_cal.h"
},
{
"code_lines": 31,
"path": "App/protocol/iec104/iec104_pts.h"
@@ -1115,6 +1176,18 @@
"code_lines": 22,
"path": "Drivers/BSP/NETCFG/ftp_cfg.h"
},
{
"code_lines": 22,
"path": "Drivers/BSP/UI/ui_page_accident.c"
},
{
"code_lines": 22,
"path": "Drivers/BSP/UI/ui_page_alarm.c"
},
{
"code_lines": 22,
"path": "Drivers/BSP/UI/ui_page_oper.c"
},
{
"code_lines": 22,
"path": "Drivers/BSP/UI/ui_page_runlog.c"
@@ -1127,6 +1200,14 @@
"code_lines": 22,
"path": "Drivers/BSP/UI/ui_page_soe.c"
},
{
"code_lines": 22,
"path": "Drivers/BSP/UI/ui_page_start.c"
},
{
"code_lines": 22,
"path": "Drivers/BSP/UI/ui_page_yk.c"
},
{
"code_lines": 20,
"path": "Drivers/BSP/UI/ui_net_sink.h"
@@ -1291,6 +1372,14 @@
"code_lines": 11,
"path": "Drivers/BSP/UI/ui_page_view_word.h"
},
{
"code_lines": 11,
"path": "Drivers/BSP/UI/ui_page_wave_manual.h"
},
{
"code_lines": 11,
"path": "Drivers/BSP/UI/ui_page_wave_play.h"
},
{
"code_lines": 11,
"path": "Drivers/BSP/UI/ui_page_yx.h"
@@ -1339,6 +1428,14 @@
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_ac.h"
},
{
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_accident.h"
},
{
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_alarm.h"
},
{
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_dc.h"
@@ -1347,6 +1444,22 @@
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_device_info.h"
},
{
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_oper.h"
},
{
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_runreport.h"
},
{
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_start.h"
},
{
"code_lines": 5,
"path": "Drivers/BSP/UI/ui_page_yk.h"
},
{
"code_lines": 4,
"path": "Drivers/BSP/UI/ui_page_runlog.h"