super_agent_bot
|
493fa6ba0e
|
feat(ui/remo): 7003 总线新增 STATUS 身份查询与 GOTO 直达页(#69)
STATUS(命令 4)一帧回答"现在在哪个画面":kind(MENU/PAGE/STANDBY)
+ 菜单路径/选中 + 页 id,布局契约与字节序见 ui_net_sink.h。由 uiTask
轮询驱动,同上下文读静态导航状态:零画面副作用、免锁、不发日志。
新增只读接口 ui_menu_get_nav_state / ui_content_page_current_desc。
GOTO(命令 5)按页 id 查生成表直开内容页,以 VIEW 权限进入(与
"已过查看密码"同档,不代输任何密码)。编译期门控
DTU_BENCH || UI_REMO_ALLOW_GOTO:产品构建恒拒(status=4),模拟器
构建默认开启便于无板验证;执行类页(clear/reset)固件侧同样拒绝
(status=2,与主机 EXEC_PAGE_IDS 同一事实源);待机中拒绝(status=5),
由主机按键唤醒后再来。成功应答带回目标叶节点下标便于对账。
ui_sink 主机单测补导航侧链接假件 + 最小 lvgl 桩(仅本测试目录)。
产品构建 Keil 0 Error 0 Warning;ui_sink 单测 17/17。
|
2026-11-02 22:19:58 +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 |
|
wandering1
|
7efa58d9a1
|
network: 台架 IP 迁到 192.168.31.100,并把重复写死的值收进单一真源
CI / 静态门禁 (pre-commit) (push) Failing after 25s
CI / 主机侧单测 (MSVC) (push) Successful in 48s
分两段(用户裁定 2026-11-02):先做地址迁移,再把同类字面量收敛成
单一真源,以后再改地址只动一处。
一、IP 迁移 192.168.1.100 → 192.168.31.100(gw 同步 → .31.1)
- 工厂默认:Drivers/BSP/NETCFG/net_cfg.c 的 NET_CFG_DEF_IP/_GW
- 注释/文档示例、主机与板级测试、台架 py 脚本、两份 sim_config.ini
- 字节序教学点同步换算 hex:0x6401A8C0 → 0x641FA8C0(内存
C0 A8 1F 64),旧版示例引文与历史 Trap 记录按冻结纪律不动
- UI 黄金基准:网口设置 4 态 + shot_info 共 5 张 .bin 由
check_content_pages.py --update 重刷(渲染值 IP 变了,属预期变更)
- 保留判定:客户点表引用(IEC104/继电保护规划)、芯片手册摘录、
日期冻结的变更记录行、已退役台架档案 MDK-ARM/retracted_bench_*
二、单一真源收口(A+B+C+D,用户批准全做)
- 新建 test/host/bench_defaults.py:台架 py 默认值唯一定义点
(DEVICE_IP/DEVICE_GW/PC_IP/NET_BCAST),22 个脚本改为引用;
MDK-ARM 两探针与 scripts/board_ui_nav.py 经 sys.path shim 引入
- test/board/net_test_task.h 新增 TEST_PC_PEER_IP,板测三处
PHASE*_REMOTE_IP 改引该宏(保留 -D 覆盖);Phase1 断言改
memcmp 数组比较,数组各只出现一次
- simulator/tests/check_content_pages.py 从 net_cfg.c 正则解析
NET_CFG_DEF_* 推导期望值(解析失败即报错、不静默兜底),
脚本内台架 IP 字面量清零
- 装饰性注释去具体值(net_cfg.h/net_socket.h/net_socket.c/
net_socket_sim.c);字节序教学 hex 对刻意保留为唯一写值点
- 刻意不动:主机单测夹具 IP(逐文件钉住的任意值是正确测试
实践)、文档正文 IP(那是文档内容本身)
顺带:scripts/gen_task_table.py 规范串清掉「,B5」——编号清退提交
72b4b094 改了受管区没重跑生成器,task-table 门禁因此一直红
验证:产品 @build 0/0;CH395F 套件开关构建 0/0 后还原产品态;
6 套主机单测 rc=0;content_pages(含宏推导路径)/菜单 8 态/
推流位比对全 PASS;bom-drift 99 无漂移;doc-links/coding-standard/
cppcheck 绿;py_compile 23 文件 + --help 冒烟(含 shim 绝对路径)
|
2026-11-02 14:46:42 +08:00 |
|
wandering1
|
c373e2e97d
|
chore(台账): waveclose 合并后回填体积同码凭证
主干合并 docs(任务规划) 录波卡片登记簿销项(51ce5900)后
git-index 指纹变为 80504df8;全量重建 /keil-build -r 0 错
0 警,测量与本码:Code=246,720 B / RW_IRAM1=94,336 B (72.0%)
RW_CCM=57,376 B (87.9%),均 ≤92%。本笔仅重写凭证,无代码改动。
|
2026-10-30 18:28:46 +08:00 |
|
wandering1
|
2525c2d948
|
docs(104): 端口口径统一成「工厂默认」,登记「改后立即重 bind」待办
用户裁定两条:① 剩余裸写端口的地方加「工厂默认」限定词,不改固件行为;
② 生效语义按需求口径「保存即生效」定,现实现(端口下次重 bind 才生效)是
要改的一侧 → 建任务登记,本笔不动代码行为。
限定词(24 处 / 17 文件):AGENTS 数据主线、App/protocol/README、根 README
文档索引、Src/freertos.c 三处任务注释、docs/README、项目启动顺序管理、存储
架构说明、软件架构与运行时规格(2)、RAM 使用分析、产品需求设计文档(5)、
项目架构总览(3)、test/host/README、iec104_master 流程注释、IEC104 上行设
计说明、继电保护功能复现规划。配图两张同批重跑:gen_arch_svg.py 与
gen_memory_svg.py(脚本与产物同一笔)。
两处陈旧计数(都做过双源核证):
- 测试开发标准流程 像素层「60 内容页」→ 内容页黄金参考 66 张(64 页);
双源 = simulator/tests/ref/shot_*.bin 实数 66 与 check_content_pages.py
的 PAGES 66 条(含两个 _p2)。
- .pre-commit-config.yaml 的 uinav-selftest 注释「18 张黄金参考」→ 写成
「接线当时 18 张、现 66 张」:git log -S 定到 6a904c1b(2026-10-25),那
天 ref 目录确实 18 张,写时为真,但它描述的是钩子现有行为,属当前态。
口径修正与登记:
- 页面扩充详细方案「通讯设置 = 无配置模型(端口与 CA 都是 #define)」→ 标
「当时」,并写明现已在 /config.ini 的 [comm] 段可配、UI 通讯设置页可改。
- 产品需求 §通讯配置:删掉「改后需重启生效」这句把两件事混为一谈的话,改成
需求要求「保存即生效」+ 现实现(公共地址重启、端口下次重 bind)+ 指向登记簿。
- docs/任务规划/登记簿.md §1 新增「104 端口改后立刻重 bind」:含隐性耦合
—— .serialtest/config.json 的必检锚点写死 listening on 2404,端口一改串口
回归必假失败;改行为时要么锚点只查 listening on,要么由脚本注入端口。
复扫(旧形态归零判据)剩 20 处未带限定词,逐条定性为刻意不改:默认值定义处、
出厂模板与断言、usage 与 argparse default、UI 黄金参考显示值、台架主站地址
(同数不同义)、串口锚点、叙事句、引用关系图坐标。逐条理由见一次性台账。
门禁:check_doc_links --sections-strict 对 16 篇改动 .md 逐个 rc=0;
check_mermaid --all 31 文件 62 围栏新发 0;check_nested_comment --all 449
文件新发 0;check_bom_drift --all 99 个名单内文件无漂移;
check_generated_fresh PASS(25 生成器 / 21 一致 / 4 只减不增基线);字节体检
无新增 BOM / CR / U+FFFD / 行尾空格(三连空行与 HEAD 逐项相同 = 存量)。
/keil-build 0 错 0 警,Program Size Code=246720 RO=29836 RW=2052 ZI=149708
与凭证同码:本笔只碰注释与配图文字,无固件行为变更。
|
2026-10-30 15:40:27 +08:00 |
|
wandering1
|
b79ae0abfc
|
chore(台账): docfix 合并后回填体积同码凭证
合并提交 1b5b2f6b 让主干源码索引变了码,`/keil-build` 实测 0 错 0 警、
Program Size 逐项未变(Code=246720 RO=29836 RW=2052 ZI=149708,
RW_IRAM1 94,336 B / RW_CCM 57,376 B)——这笔合入只碰注释与文档,
体积数字与合并前一致,故只重写凭证、不新增趋势行。
- 工具:`task_worktree.py postmerge`(短链 `ram_baseline.py --update`)
- 复检:`check_size_gate.py --local` 绿(同码 ✓ 受管区 ≤92% ✓)
- 顺带:`check_doc_links.py --all` 全库绿(218 文档 / 3058 处章节引用 /
机器可判定 81% / 失效 0)
|
2026-10-30 14:26:47 +08:00 |
|
wandering1
|
8d8ecd9c56
|
chore(台账): archsplit 合并后回填体积同码凭证
done 的门禁跑在 @build 之前(已知时序坑):合并落主干 3cce00a7
后 postmerge 重写凭证——build 0 错 0 警(Code=246,720 B /
RW_IRAM1 72.0% / RW_CCM 87.9%),索引指纹 b3a7b7fb 同码凭证
scripts/size_attestation.json 与趋势行 scripts/ram_baseline.tsv。
doc-links --all 218 文档 0 问题;受管区一致。
|
2026-10-30 13:37:33 +08:00 |
|
wandering1
|
a157b443cb
|
chore(台账): keyresp 合并后回填 RAM 台账与体积/覆盖率凭证
主干 0cabed0b 合入 task/keyresp-ui-key-latency 后按 C5 链补绿:
- @build 0 错 0 警(Code=246720 RW=2052 ZI=149708,与分支树同码)
- check_mem_numbers.py --write + ram_baseline.py --write/--update
- check_test_coverage.py --update-baseline(47/47,line 90.2%)
- add 后重打体积凭证(check_size_gate.py --stamp,同码免涨)
- check_doc_links.py --all 通过(214 文档 / 2966 引用)
RAM 增量归因见台账:本任务自身仅 ui_port.o +12 B 级,
其余为主干批 3 屏板链路累计(前笔 7708f12c 正文已如实说明)。
|
2026-10-30 09:56:12 +08:00 |
|
wandering1
|
44596f1487
|
ci(体积凭证): 屏板链路合并后同码凭证更新(@build 0/0 后回填)
主干合并 add61ca2→899e4a6b 后代码 blob 指纹变化(仅注释与文档改动,
Code=246,160 B / RW_IRAM1=94,312 B (72.0%) / RW_CCM=57,376 B (87.9%) 均无增量)。
|
2026-10-30 09:30:07 +08:00 |
|
wandering1
|
8f5ac7f5d0
|
chore(台账): 合并后刷新体积同码凭证(代码内容变了、体积未变)
done testdoc 的门禁跑在 @build 之前:这笔合并把 20 个 .c/.h 的注释与文档
路径一起改了,索引指纹由 1ed4267c77f6 变成 172c6c78b8fb,而凭证仍记着
01:15 的那次测量,size-gate 因此报「不同码」。合并后 done 自己跑的 @build
是 0 错 0 警,Program Size 与合并前逐项相同
(Code=246160 RO-data=29816 RW-data=2036 ZI-data=149700),
数字没动,只按脚本自己的提示跑 ram_baseline.py --update 重写凭证。
复验:check_size_gate.py --local rc=0(同码 ✓ 受管区 ≤92% ✓);
主树全库 check_doc_links.py --all rc=0(215 个文档 / 2993 处章节引用)。
|
2026-10-30 07:22:20 +08:00 |
|
wandering1
|
2533a72a0a
|
chore(台账): done 后重生成凭证,对齐合并态 .map
CI / 静态门禁 (pre-commit) (push) Failing after 44s
CI / 主机侧单测 (MSVC) (push) Failing after 43s
|
2026-10-30 01:15:07 +08:00 |
|
wandering1
|
b4588108ed
|
merge: v2-on-ui into task/screenlink-bench-serial (wave + screenlink)
|
2026-10-30 01:08:37 +08:00 |
|
wandering1
|
0b84c43d2e
|
feat(屏板): 状态灯位映射 sb_led_map + 104 RUN 观测口(批 3);附 4-1 并发压测脚本
批 3(LOGO 按用户裁定出局,不实现、sb_proto 的 LOGO 组帧挂待删标注):
- 新增 App/algo/sb_led_map.c/h:业务状态 → 屏板 LED 位掩码的唯一映射表
(纯逻辑,主机单测可跑)。ID1 运行心跳 500ms 半周期闪(与主板 LED 同拍)、
ID2 保护动作、ID3 104 链路 RUN、ID4 采样电平故障(不选 sticky——灯要能灭)、
ID5 保护启动 picked;bit0 与 ID 6~19 恒 0。这张表参考源码里没有,属自定,
出处 docs/产品需求/产品需求设计文档.md §5.16.3 ①。
- iec104_serv 新增 iec104_serv_link_run()(透传 link 状态机,不另存镜像量)。
- ui_task.c 帧组装块每拍现采四路状态源(均为任意上下文可读观测口)折算后
传 sb_link_frame_update——替换批 2 的恒 0 占位;掩码变了帧就重组,
复用 busy/dirty 机制,无新通路。
- 主机单测 test/host/sb_led_map 17/17(位语义/恒零位/闪烁相位/tick 回绕/
NULL 契约);注册豁免走 SIM_EXEMPT(模拟器无屏板串口)。
批 4 的 4-1 双通道并发回归(真屏板在线实测):
- 新增 test/host/remolcd_pull_test.py:RemoDispBus 拉帧压测客户端
(INIT→LCDMEM 10 Hz、逐帧 XOR+长度校验、往返延迟统计、--dump PBM)。
- 实测:网络侧两轮 2200 拉帧零错零超时(min 35/avg 63/max 131 ms);
屏板侧 60 s 隔离窗口 rx +233 全收、drop 零新增、bad=0、off=0、无
OFFLINE——两侧互不拖。观察项 len=7(断帧尺寸≠6,累计 7 次)出现窗口
无法归因压测、隔离窗口零新增、有效帧零损失,已挂设计说明 §5.7 待查。
附带:sb_link.h frame_update 注释回填实测耗时(509/688 µs 取代旧估算)。
Keil 0 错误 0 警告;ci_local 全绿(SKIP=nested-comment,主树脚本另查 0 新发);
Code=239,064 B / RW_IRAM1 65.5 % / RW_CCM 87.9 %;覆盖率 90.1 % / 44 套件。
|
2026-10-30 00:39:57 +08:00 |
|
wandering1
|
dab0d8ba17
|
feat(屏板): 帧 B 组帧 + 中断起发 TX DMA + 按键队列 + 离线判定(批 2)
批 2 五项全部落地(docs/任务规划/屏板链路.md §3):
- 2-1 sb_link_frame_update():uiTask 渲染后按需组帧,不留 3200 B 影子
副本,直接拿活显存与帧内点阵段 memcmp;组完自校验,过了才置 ready。
静态 4208 B 帧缓冲实测落 RW_IRAM1(0x20006d98),不在 CCM。
- 2-2 空闲中断校完 6 B 召唤帧直接点 TX DMA(sb_tx_kick),不排队不攒批;
busy 期间再来的召唤丢帧并计数,绝不叠发(屏板收帧一次 IDLE 一包)。
- 2-3 按键走环形队列(中断入、任务出),uiTask 按 §4.3 表映射 UI_KEY_*
后调 ui_port_queue_key;9/10(RESET/FACTORY)按决策四先丢弃并留痕。
- 2-4 HAL_UART_TxCpltCallback 在 rs485.c 加第三行转发(三个全局回调
落点收一处,防日后重复定义);busy 冻结帧缓冲,错误中断按 gState
收拾被打断的 TX,防残留 busy 把链路永久锁死。
- 2-5 连续 >=10 s 无有效召唤帧才判离线(不按 500 ms——屏板约 5000 s
自复位有 1 s 空窗),恢复即清标志;CRC 错帧静默丢弃并计数。
实测:台架 40 s(PC 顶替屏板,--key-fixed 2 持续改画面)rx=143 ok=143
keys=143 crc=0 / tx=143 done=143 drop=0 abor=0 fb=144 bad=0;脚本一停
10 s 准点出 OFFLINE。组帧耗时 509 µs 典型 / 709 µs 峰值——原 0.3 ms
判据系估算,已按实测在规划文档改口为 1 ms 并给出压降路径(未做)。
附带:rs485_on_rx 补 CODE-RULE-09 文档块(本轮改 rs485.c 触发整文件
重扫被拦);CRC 循环计数改 32 位(消掉 ARMCC 每轮 UXTH);bench 脚本
加 --reply/--key-fixed/--dump,并写明 CH340 收不了 700 kbaud 连续流、
--reply 收不全 4208 B 不是固件问题。
主机单测 146/146 PASSED(+65);Keil 0 错误 0 警告;ci_local 全绿
(SKIP=nested-comment,worktree 限制,主树脚本另查 0 新发)。
Code=238,936 B / RW_IRAM1 65.5 % / RW_CCM 87.9 %。
|
2026-10-29 20:59:36 +08:00 |
|
wandering1
|
7c8669e52a
|
feat(屏板): USART1 700 kbaud + 收中断传输层 sb_link(1-2/1-3)
批 1 的 1-2 / 1-3:把屏板(DTU-LCD)发来的 6 B 帧 A 在 USART1 上稳定收下来。
1-2 波特率:.ioc 不保存任何 UART 的波特率(只有
USART1.IPParameters=VirtualMode),GUI 里改也不落盘,所以只能在
Src/usart.c 的 USER CODE BEGIN USART1_Init 2 区覆盖 huart1.Init.BaudRate
后重调一次 HAL_UART_Init(第二次调用时 gState 已非 RESET,HAL 只重算
BRR、不再跑 MspInit,GPIO/DMA/NVIC 不会被重配)。开机日志实测
BRR=0x0078,与理论值 84 MHz/(16x700 kHz)=7.5 逐位相符,误差 0%。
1-3 收中断:新建 Drivers/BSP/ScreenLink/sb_link.c/h——16 B 缓冲 + IDLE
中断断帧、帧 A 校验、错误中断里按 RM0090 清 ORE/NE/FE/PE、周期统计上报。
HAL_UARTEx_RxEventCallback / HAL_UART_ErrorCallback 是全局单例(唯一实现
在 rs485.c),故只在那里各加一行转发,按句柄过滤放在 sb_link 内。
台架实测(PC + USB 转 TTL 顶替屏板,COM6@700000)撞出两个真问题:
- 错误回调里无条件重挂 -> 出现 err=160 / rearm=160 同步增长,看着像每帧
都重挂失败。真因是 HAL 把 NE/FE/PE 归为非阻塞型(接收照跑、RxState 仍是
BUSY_RX),此时 ReceiveToIdle_IT 只会返回 HAL_BUSY。改为仅当
RxState == HAL_UART_STATE_READY(ORE 那类阻塞型)时才重挂。
- 日志字面量里带中文 -> ARMCC #870-D invalid multibyte character
sequence。字面量一律纯 ASCII,中文只写注释。
验证:主机单测 81/81 PASSED(test/host/sb_link/,其中按 RM0090 的清除语义
把"必须 SR->DR 顺序才清得掉 ORE"钉成断言);Keil 0 错误 0 警告;台架
rx == 发送帧数、ok == rx、crc=0、len=0、size=6、keys 随按键帧递增;先用
错波特率灌 64 B 垃圾(len=31、bits=0x06)后自动恢复且 rearm=0。
新增 test/host/screenlink_bench.py 作为可复跑的屏板激励(--key / --glitch-baud)。
|
2026-10-29 20:13:18 +08:00 |
|
wandering1
|
15bcfc7c92
|
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/任务规划/** 本应在主工作树改,本波由用户在任务树显式豁免、随本笔合回。
|
2026-10-29 19:32:26 +08:00 |
|
wandering1
|
d64bbdc57f
|
feat(wave): 故障录波数据面、接线与单通道回放页(软件闭环交付)
数据面(App/algo,纯逻辑,双端编译)
- wave_ring:8 路 × 320 点列优先环(1 kHz,预触发 160 + 后触发 160),adcTask
唯一写者;触发/冻结/封存/冷却四态,冻结持续到落盘回执才解冻,滞留 2 s 自弃
兜底——下一次真故障无波可录比丢一段更贵
- wave_store:段头编解码 + 拉模式打包游标 + 自带无表位运算 CRC-16/MODBUS(带
锚点自检)+ 段名与整段长度等式;格式不依赖平台类型宽度
- 段头只存原始码值与封存瞬间生效系数,工程量只当单位标签、不进任何算式
- 三套主机单测(环 113 / 编解码 170 / 触发状态机 110),全部无桩、生产源原样
纳入;新文件补 stddef 是 ARMCC 与主机差异,主机侧照不出这条分叉
- test/host/wave_read.py 是按 §6.2 的独立第二实现(dump/fft/shape/plot),92 条
自洽断言;三份合成段互读双校验全过、哈希钉死,格式面双向闭合
- 三套新单测不加专属钩子,由覆盖率总闸全量真跑(沿用既有裁定)
接线(任务层)
- adc_cal:新增生效系数的 32 位定点原值入口(与既有浮点入口共用生效视图),
段头按最低有效位精确记账,不经浮点回算
- adcTask:每拍压 8 路语义原始码值并推进状态机,封存那一拍同拍交棒封存瞬间事实;
台架定周期自抓走双层编译门,产品镜像里零存在;串口新增一条 wave: 周期行
- defaultTask:卷空闲后一次心跳整段搬完(try 锁 + 256 字节分片 + 一次完整开档到
关档),成败都回执;失败先删半成品再计错,段号只在成功时推进;持锁超 50 ms
补一条告警并记历史峰值(喂狗余量可核)
- Lead 复核补第四道并发陷阱:采集任务优先级高于落盘道,搬段中途它可能正好把滞留
超时的本段自弃、甚至封出下一段——数据区校验和是对「实际读到的字节」算的,
半新半旧的段照样自洽,故关档后复检环侧身份判废:删文件、不补账、段号不推进
- Lead 复核抓到触发挂号不是原子操作(旧实现分三个字节写,消费者可在窗口里读到
上一段的触发源与元件号):已把载荷压进一个字节,越界当场拒且不记任何计数;
段文件字节布局零改动,三份合成段哈希逐字节不变
- protectTask:保护启动上升沿同点请求录波,一拍一次、元件号取最低位;判据本体
零改动
人机(160×160 单色屏)
- 菜单树节点 26「手动录波」绑页面 + 记录查询组末新增「录波回放」叶,重跑生成器
得 43 节点 / 34 叶 / 30 已绑,页面映射 28 → 30
- 回放页一屏一路、触发点前后各一周波共 40 点、每点 3 像素阶梯线(只用水平与
垂直两种线段——单色屏斜线会被阈值裁掉);零点虚线、触发光标、窗口峰值、
单位徽标与形状受限徽标;空态与坏段各一句显式文案,绝不用半截波形冒充数据
- ui_data 新增录波注入通道(六件操作表、三态返回);执行侧胶水带段头缓存、
手动请求后连缓存一起作废、逐点走全仓唯一的码值换算入口
- 模拟器接真实环与编解码合成两段(含坏段与空态旗标),6 张新黄金参考,既有
60 张逐字节零漂移未用更新模式;字库 218 → 224 字 / 319 字形
- 两份图形配置里图表组件仍为关;零堆分配;页面池水位不变
- 回放读路径的 uiTask 阻塞上界按实码写清:一次渲染 = 段表刷新 + 未缓存段头最坏
22 次小读;已验段只剩一次开窗读 + 40 点解码;无实测数不编,实测归台架、
仪器用已在跑的单轮工作耗时探针,不新加埋点
台账与文档
- 内存台账:录波环与落盘/回放静态逐条入册,三档对照 81,536 → 88,296 → 89,936
字节(62.2% → 68.6%),累计 +8,400;预估 5.9 KB 与实测 +6,760 的差额点名;
散列文件头注释同步;任务栈表核对后无需抬栈;体积趋势行与同码凭证由权威构建
重打(0 错误 0 警告,四项体积与上一轮相同——本轮改动只有注释与声明位置)
- 设计说明:§5 补第四条并发陷阱;§6.3 定字段口径(两份独立实现的共同依据);
§7 回填实测;§9 周期行写实;§10 台架判据改两段式且不比绝对相位;§12 补读路径
风险行;抬头状态改成「代码面已交付、未做完的只有板级那一轮」
- 卡片:软件闭环一栏列证据;台架三条按用户裁定保持未完成,不做虚假销项
- 口径同步:数据可信、UI 补齐、页面补齐规划、产品需求、采集短板评测、任务规划
索引与两份 README;陈旧现状句清扫 16 处(带日期戳的历史取数行一律不动)
- 门禁说明:nested-comment 记仓库根探测必须兼容 linked worktree 的 gitdir 文件
形态(修前该钩子在任务树里恒报环境错、静默不可用);coding-standard 记
「函数头注释超过 24 行就把函数功能挤出回看窗口」这条机制与本次现场
- 覆盖率基线登记两个新覆盖模块(套件 41 → 44 套);环单测重打后该文件有效行
227 → 226、覆盖行 226 → 225,比率仍 99.6%,是分母变小不是覆盖率回退
为什么是单一提交:文档链接、双端注册、生成器幂等(菜单与字库)、内存数字与
体积事实源、编号门禁这五道整仓门禁要求代码、页面、菜单树、字库、文档与台账
同处一个提交才自洽,按数据面/接线/人机/台账拆成四笔必然红其中至少四道
编号门禁新增行 14 处命中已按语义改写:魔数常量按字符命名、段名样例改由格式串
生成、频谱表头改 f / 2x / 5x 并加一行图例;改写后自洽断言 92 条仍全过
|
2026-10-29 19:23:15 +08:00 |
|
wandering1
|
16048140fd
|
chore(体积): 重盖同码凭证(sb_proto 进索引)
上一条提交漏带 scripts/size_attestation.json。指纹按 git 索引内容生成,
sb_proto.c/h 进索引后指纹从 bfe075e7 变为 df1c01ab,凭证不跟着走就会
判"不同码"。
Code=236,460 B 不变(新模块尚无调用者),RW_IRAM1 81,536 B / RW_CCM
57,376 B 均未动。
|
2026-10-29 19:17:56 +08:00 |
|
wandering1
|
f5161e1567
|
feat(日志): 控制台迁到 RS232#1/UART5,USART1 让位给屏板链路
批 0 的第 2 项。USART1 是唯一 MCU 引脚直出的 TTL 通道,700 kbaud 的屏板
链路要用它,控制台必须先让开。
console_log.c 加一处端口收口块,换口只改这一段:
CON_UART / CON_UART_IRQN / CON_UART_CLK_DISABLE/ENABLE / CON_UART_INIT
代码实际改动 4 处:con_tx_bounded 的 huart1.Instance(NULL 判据、counted
回退、赋值)与 con_uart_reinit 全函数体。其余是把描述当前行为的注释里的
USART1 换成「控制台串口」;历史变更记录(2026-10-02 / 10-24)里的 USART1
保持原样,那是当时的实况。
注意事项:UART5 在 APB1、USART1 在 APB2,时钟宏不能照抄;
__HAL_RCC_UART5_CLK_ENABLE 定义在 stm32f4xx_hal_rcc_ex.h。
不改 UART 模式(2026-10-26 裁定:保持 UART_MODE_TX_RX,不动 RX 配置)。
MX_UART5_Init 在 Src/main.c:135,比 MX_USART1_UART_Init 晚几个初始化调用,
该窗口内的日志由 CON_UART.Instance == NULL 短路接住(记 dropped,不崩)。
构建:Code=236,460 RO=28,124 RW=1,876 ZI=137,084(Code 较迁移前 +4 B)。
台架验证(COM3 @115200,RS232#1 经 CN1.10/CN1.12):
- 烧录回读 no difference found;8 个 required 锚点全中,无 forbidden;
启动到 net init: OK 用时 661 ms
- 连续 10 分钟长稳:1218 行,零 [ERR]、零 dropped、零 tx_fault,
末行仍在正常 PROF 输出
- USART1 已无任何控制台写入(全文件 grep 只剩历史注释)
|
2026-10-29 18:45:59 +08:00 |
|
wandering1
|
0c8fb5e1b6
|
chore(体积): 合并后重盖同码凭证(指纹 d9848eb1,体积零变化)
X-20261029 合入 v2-on-ui 后体积门禁报「不同码」,原因是凭证按 git 索引
blob 计算指纹,纯注释改动也会改变文件哈希,尽管链接产物一字未变。
@build 已在合并提交 c51ac2e8 上跑过 0 错误 0 警告,.map 为 17:50:23 的
产物、晚于最新受管源码,前置条件满足,故按门禁自身给出的修复路径重盖:
ram_baseline.py --update
check_mem_numbers.py --write 与 ram_baseline.py --write 均报「已是最新」,
tsv 今日行数字相同未变,本次只改凭证四个字段(fingerprint / built_at /
git_head / map_mtime),sizes 与 pct 保持原值:
Code=236,456 RO-data=28,124 RW-data=1,876 ZI-data=137,084
RW_IRAM1 81,536 B (62.2%) / RW_CCM 57,376 B (87.9%)
check_size_gate --local 现已通过:同码 + 受管区 <= 92%。
|
2026-10-29 17:52:33 +08:00 |
|
wandering1
|
db5109e41d
|
chore(size): 重打体积同码凭证——补上一笔注释收尾提交的同码缺口
@build 0 错误 0 警告之后跑 ram_baseline.py --update:新增 2026-10-29 趋势行,并由它
自动 --stamp 重打 scripts/size_attestation.json。
数字与 2026-10-28 那行逐项相同(Code 236,456 / RO 28,124 / RW 1,876 / ZI 137,084;
RW_IRAM1 62.2%、RW_CCM 87.9%,红线 92%)——所以缺的不是体积变化,是"这份源码对应
一次真实链接"的同码性:上一笔收尾提交改了保护任务源文件(纯注释)却没有重测,凭证
自那次起一直红着,主干 push 会被它拦下。
现在 check_size_gate --show 与 --local 均判同码通过;本地 CI(含体积步)全绿。
|
2026-10-29 07:50:33 +08:00 |
|
wandering1
|
e9cae5fdcd
|
chore(size): 重打体积凭证(合树后同码 @build 0/0,数字未变)
前面几笔(含并发会话那两笔)改动了在册文件,凭证指纹还停在 21:41 的
索引上,体积门禁因此报「代码与测量不同码」。现在按合树后的状态重打:
@build 0 错 0 警,Program Size Code=236456 RO=28124 RW=1876
ZI=137084,与 scripts/ram_baseline.tsv 的 2026-10-28 行完全一致,
所以台账不追加新行(ram_baseline.py --update 自行判定同码不重复登记)。
check_size_gate.py --stamp / --local 均 rc=0。
|
2026-10-28 22:24:33 +08:00 |
|
wandering1
|
511fd30cc6
|
docs: 清理全仓变更记录流水(43 篇整节删 / 23 篇留一行 / 5 篇保留)
用户裁定:文档只写现状,历史流水一律删掉,过程查 git log。
- 43 篇「变更记录 / 修订记录」整节删除:继电保护规划 12.6 KB、产品
需求 11.8 KB、项目部署环境 5.5 KB、BSD Socket 指南 5.3 KB、架构
总览 5.0 KB、实机测试实施指南 3.8 KB 等
- 23 篇别处仍有指向:只留节名 + 一行「本文件不再记流水账,过程查
git log」,节号与锚点不位移(doc-links 不因此断链)
- 5 篇整表保留(被当唯一证据 / 活台账引用):看门狗设计说明、配置
文件设计说明、RAM预算台账、内容页架构、本地工具路径环境变量方案
- 规范同步:文档规范 §5.1 改新裁定;测试文档模板规范删示例节与
登记句;测试开发标准流程 / UI 两篇 / 实机测试实施指南 / 四篇单测
说明 / 并行任务工作树方案 / 编号规范 的「登记变更记录」改「写进
正文」
- 技能同步:stale-doc-count-sweep / ui-verify / id-family 三个 SKILL
正文不再要求追加流水行(顺带消掉 SKILL.md:121「产品需求 §12」
失效引用)
- 修 5 处悬空指针:采样有效性校验目录锚点、BSD 指南「文末变更
记录」、docs/README 过期描述、网络自愈架构两处指向面
72 篇文档净减 600 余行;check_doc_links --all --sections-strict 可判
定比例 61% → 78%、失效引用 0;静态门禁 passed=50 failed=0;gitlint
10 条历史提交信息 0 failed。
未提交他人在飞改动:.dsh/skills/keil-build/*(%SystemDrive% 守卫)。
|
2026-10-28 22:00:34 +08:00 |
|
wandering1
|
f50e74c63b
|
docs+log: 撤销"PA10 未接线"结论,ORE 机理改为"RX 使能却不读 DR"
用户反馈:PA10 这个端口是接线的,当年那个分析应该是错的。
核查确认:console_log.c(文件头与 con_uart_reinit() 注释)和
控制台单写者日志设计说明.md 12 节里的"PA10 悬空 / 未接线"是 2026-10-02 的
归因推断,不是实测,且与用户确认的接线状态相反。
ORE 的充分条件本来就不依赖引脚悬空:RX 使能了却从不读 DR,
线上任意一个字节或一个噪声沿使 RXNE 置位后无人读,下一个事件即锁存 ORE
(常伴 NE/FE/PE);而 ORE 只能靠"先读 SR 再读 DR"清除,所以永不自愈。
引脚悬空只影响发生率,不是必要条件。
当年那场风暴的真因仍待定:接线正常时更常见的是对端波特率不匹配
(适配器不是 115200)或适配器 TX 在 USB 掉线时浮空。下次复现先量
适配器 TX 的空闲电平与波特率,不要再默认"引脚悬空"。
改动:
- console_log.c:函数注释改按正确机理表述;修改记录加 2026-10-28 一条
说明归因更正。纯注释,Code 236456 B 与上版一致,@build 0/0。
- 控制台单写者日志设计说明.md 12 节:机理段后加更正块,写明观察与缓解
措施仍成立、只有归因需要改写。
- 产品需求文档:4.2 表 USART1 行改为"PA10 双向均已接线";5.16.2 的
"PA10 没接线"警示块整段重写为"旧结论已撤销 + 真正机理 + 两条硬要求"
(屏板链路必须消费 DR 并在错误回调清 ORE;新日志口仍设 UART_MODE_TX);
9.13 前置阻塞由"两条物理前置"改为"一条物理前置 + 一条实现纪律";
12 节加 v1.9。
- 屏板链路规划:0 章第 2 行标为已撤销、执行顺序去掉"接 PA10";
批 0 由 4 项减为 3 项;批 1 第 3 项判据补"拔插 TX 线制造噪声后能自动
恢复";风险表把"PA10 没接"换成"一次噪声后链路永久静默"。
- 任务规划 README 独立轨道行同步为两条前置。
体积凭证随索引刷新(scripts/size_attestation.json),数字未变。
|
2026-10-28 10:41:32 +08:00 |
|
wandering1
|
94b0d79026
|
feat(ui)+chore(docs): UI 补齐清单清空;数据可信销项与「卡」号清退
本笔含两组收尾工作(同一工作区内交错在 6 个共享文档/门禁配置里,
拆开会产生"文档声称的页数与树里黄金数不一致"的中间提交,故合为一笔):
一、UI 补齐(清单清空)
- 新建 6 个内容页模块:ui_page_accident / oper / alarm / start / yk
复用 ui_w_records 共享组件(分页、空态"无记录"、按实例读盘缓存),
记录层与五个写入点已由道F task-10 / 道G task-12 落地,本批只补页面;
ui_page_runreport 为 13 行 2 页只读统计,四个数逐个挂范围标签
(自电池周期 / 本次开机),boot_ready=0 显 "--" 不显 0。
- 数据面:ui_data_info_t 尾部追加 9 字段,ui_data_feed 用
boot_stats_get() + iec104_serv_get_stats() 纯搬运;模拟器填确定值假数据
(差异登记 docs/测试说明/模拟器差距清单.md §2.3 两行)。
- 接线:菜单树 6 叶绑 #page=,绑定叶 22→28、UI_PAGE_MAP_COUNT=28;
字库 185→218 字 / 280→313 字形;双端注册 uvprojx +30、CMakeLists +6。
- 回归:内容页黄金 53→60(含 runreport_p2 真拍第 2 页),文本断言
425 正向 / 36 反向;存量 53 张逐字节零漂移;记录 5 页各用独立空目录
(模拟器把操作留痕写进 cwd 的 sim_oper.log,共用 tmp 会让空态拍不到)。
二、数据可信销项 + 「数据可信」任务卡号整族清退
- 删除已闭环的"已知电压注入验证"行与闭环结论块(证据在
docs/硬件平台/ADC通道映射说明.md §8.1 与
docs/测试说明/ADC前端注入验证流程.md §5~§7),§5 标识列改语义短语。
- 卡 0/0b/1~12 共 14 个号全仓 288 站点 / 56 文件清退成语义短语,
代码注释、测试、门禁配置与文档一并改;换算表入 docs/编号规范.md §9.3。
这一族是中文前缀,不进 check_ids 语料,刻意不入 id_aliases.json。
验证(实测)
- @build 0 错 0 警:Code=236456 RO=28124 RW=1876 ZI=137084;
RAM +464 B(RW +304 / ZI +160),RW_IRAM1 62.2% / RW_CCM 87.9%,
体积同码凭证与 RAM 台账已回填。
- check_menu_rows 8 状态 rc=0(池 5368/5448 常量未动);
check_content_pages 60 页 rc=0;check_font_charset / registration /
coding-standard / bom-drift / mojibake / doc-links --all / layer-deps /
nested-comment 全 rc=0;check_ids --strict 无错误;主机单测
ui_data 295 / boot_stats 21 / sys_log_mcu 141 / soe 32 / soe_store 27。
未做(不是遗漏)
- 六页真机判据(真记录翻页、掉电保持、清除后归零、boot_count 自增、
拔 RTC 电池落 RESTARTED、IWDG 复位落 rst_cause、主站连一次 conn_up+1)
已登记 docs/任务规划/登记簿.md §7;模拟器结构上照不到。
- docs/产品需求/产品需求设计文档.md 属另一条在飞改动,本笔不含;
其中我已同步 6 处现状数字(28 叶 / 60 页 / 218 字),随该笔入库。
|
2026-10-28 07:23:16 +08:00 |
|
wandering1
|
343305b433
|
feat(adc): 心跳新增 adc: 行输出 9 路原始码值,并补卡 0 台架注入验证流程
背景:ADC 采集的软件链路已全部打通(节拍、语义取数、折算、相量、
200 ms 快照、104/UI 消费),但"读数对不对"从未验证过——卡 0 的
已知电压注入一直挂账。挂账的直接原因之一是读数出口不够用:
固件只有 cal: 行(UA/UN/IA 三路,mV)与 first: 行(9 路码值,仅
开机一次),验 8 个通道 × 3 个注入点要复位二十余次。
改动一(App/task/adc_task.c,v3.3)
- 心跳新增 adc: 行,每 10 s 输出 9 路原始码值,与 first: 行同序
同格式,台架"改电压 → 读一行"即可对表,全程免复位。
- 不并入 cal: 行:9 个码值会把该行推到 168 字符,撞
DBG_CON_LINE_MAX(192) 的静默截断边界(截断不报错,只会少打几路,
是最难发现的台架假数据来源)。
- 无新增跨任务状态、无新增外设访问;栈 +36 B(局部码值数组),
adcTask 静态最坏 1400 B / 余量 1160 B(底线 1024 B),stack_report
PASS;静态 RAM 不变,Flash +188 B。
改动二(新增 docs/测试说明/ADC前端注入验证流程.md)
- 卡 0 的执行侧:注入点清单、期望码值表、零点/线性/映射/极性/节奏
五步、现场记录表、安全红线、已知坑。
- 固化 2026-10-27 的网表结论:逐通道追 V0.1.tel 确认 ADCn 节点上
只有"串阻 2 脚 + 滤波电容 + 转换器引脚",没有对地分流电阻;所谓
"1k 到地"是 TPAFE 负输入脚 AIN_nGND 经 1k 拴到 AGND 的差分滤波。
故本板不存在 2:1 分压,端子侧斜率 = 引脚侧斜率 = 6553.6 / 1241.2
码/V。数据可信.md §2.1 的 305.18 / 1611.3 µV/码 确认不成立。
- 不验交流:台架无信号源,且五路单极性削顶。
改动三(索引与指针)
- docs/README.md 测试说明索引、测试文档模板规范.md 的 ADC 缩写行
(原"待立")同步。
- 数据可信.md 卡 0 增加指向该流程的指针(本表只写判据,不写怎么
接表笔)。
门禁:Keil 构建 0 错误 0 警告;check_ids --strict 通过;
check_doc_links --all --sections-strict 通过(193 文档 / 2871 处引用);
pre-commit 全过(含 cppcheck、编码规范、体积档、标定层与量纲回归
单测);两处内存台账已按 --write / --update 刷新。
|
2026-10-27 15:14:07 +08:00 |
|
wandering1
|
8ff2743374
|
chore(台账): RAM 基线、体积凭证与覆盖率基线随 22:52 构建回填
三个基线文件与一篇内存文档表格同步到同一事实源(MDK-ARM 下 .map,mtime 2026-10-26
22:52:12;.map/.htm 按约定不入库,故把身份写进正文):
· Code 231,712 B / RO 25,560 B / RW 1,504 B / ZI 136,216 B
· ER_IROM1 257,272 B(24.5%)、RW_IRAM1 80,312 B(61.3%)、RW_CCM 57,376 B(87.9%)、
Flash 合计 258,792 B(24.7%)
· scripts/size_attestation.json 记录索引指纹 06808c35e47b…(1430 个文件),把「这份
体积数出自哪一份工作树状态」变成机器凭证,而不是口头
覆盖率基线登记两条 [NOTE](此前挂着不登记就是在攒债):
· Drivers/BSP/UI/ui_data.c 65 → 316 行——账在 Lead:task-1 那笔改了装配层却没回填
基线,此后每次提交都打印同一条 NOTE;一条长期存在的 NOTE 等于没有 NOTE。
· App/protocol/iec104/iec104_comm.c 36/36 行——task-8 搬家新增模块,作者已自测,
登记归共享台账(我串行改,避免两个道同改一份门禁账)。
当前口径:line 6854/7626(89.9%)、func 505/542(93.2%)、suites 40/40、
tested_files 45、untested_files 142。
为什么这一笔能走真钩子:这是今天第一个静默窗口——四条道全部 PAUSED,全量
pre-commit 实跑(改写型钩子在没人写盘时才安全),因此这一笔不需要任何 --no-verify
例外。今天前三次 --no-verify 共放过三类真问题(5 条 CODE-RULE-17、2 个缺尾换行加
1 个漏提文件、共享尾段 +80 B 把 iec104Task 压到 ISR 底线之下),根因都是「抢跑时
没跑等价门禁」;task-37 把那张自查表写进了 pre-commit 使用说明,这一笔是还清的债。
仍然挂着的一条闸线:id-check 不可判定引用 1,162 处 / 上限 1,166,余量只剩 4。
主要吃进者是今天 UI 那笔(三页与其 68 条文本断言的注释引用),账在 Lead。
清账之前任何人新增编号都可能直接撞闸——已记进 task-34:要么把裸 TC 引用改成指向
属主登记处的写法让 und 掉头,要么把余量当硬约束写进协作口径。
|
2026-10-26 23:39:08 +08:00 |
|
wandering1
|
77779d49d6
|
feat(ui+记录): 整定写路径与四类页落地,五类记录写入方补齐
UI 面:ui_data 增加深度 4 参数写队列(请求 168 B、队列 .bss 672 B)与状态机
OK/ERR_RANGE/ERR_LOCKED/ERR_BUSY,ui_data_feed 出队后按注入 ops 走「闭锁 → 整批
预检 → 逐项 prot_set_set_sealed」,只提交改动位图;par 帧尾追加 cal_block
(口径 = UA/UN/IA 三路 ADC_CAL_F_VALID,与 protect_task 判据同构,不用 rt.eng
反推,V0.1 下 eng 恒 0)、UI_DATA_VER 升到 2。参数/定值/控制字/软压板四叶绑定
内容页(UI_PAGE_MAP_COUNT 12→16,复用四个查看模块,零新增 .c),编辑态按
is_editable 分派,LOCK(写不进去)与「未标定」(仍可改值)两源两通道两词。
记录面:syslog_request_clear/state/apply 三段式删除 API(UI 只发请求,落地在
defaultTask 的 drain 尾部且必须后置,卷锁一律 try,幂等只认 FR_NO_FILE);
事故/告警/启动/操作/遥控五类各有一个真实写入点,记录类型 = 日志 ID 本身
(一类一个 /log 严格 8.3 文件;64B 定长体没有类型字段位,塞字段会砸掉既有读者)。
为守 protectTask 872 B 静态最坏链另拆 syslog_post_quiet()(无 DBG 的投递核,
丢弃留痕挪到 drain 侧差值补发),syslog_post 对外语义逐字不变。
为什么两道合成一笔而不是各一笔(实测,不是省事):simulator/main.c 同时消费
两道新增 API(整定 pump 与 logtest 清除用例),按道切文件会让中间提交编不过;
RAM 受管快照与体积同码凭证描述的是合并后的 .map,拆开必落在「台账与 .map 不同
码」这条红线上。pre-commit 跑钩子前会 stash 未 staged 部分,这类耦合没法绕。
实测:@build 0 错误 0 警告;Code 228,260 / RO 24,960 / RW 1,440 / ZI 135,976 B;
RW_IRAM1 79,992 B = 61.0%、RW_CCM 87.9%(阈值 92%);九个任务静态最坏链全 PASS,
protectTask 872 B / 57% 改前后逐字节不变(记录投递没垫栈)。主机单测 ui_data 82→
164、sys_log_mcu 106→137、prot_elm 47→60、iec104 141→154、iec104_serv 28→34,
既有断言零删改;48 个钩子 --all-files 全绿;编号门禁可判定 86.34%(基线 86.0%)、
不可判定 1,153 处低于上限 1,166;doc-links 无法判定 0;UI 黄金 18 页扩到 27 页
连跑两次逐字节一致;字库 diff 空。
顺手修掉三处既有缺陷(都是本轮第一个消费者才暴露):sim_syslog.c 的 s_paths 行宽
16 而 "sim_selftest.log" 正好 16 字符没有 NUL 位(stat/remove 读越过数组尾,此前
靠后面 .rodata 碰巧为 0);ui_w_setlist 二态行 ENTER 不回绕(控制字与软压板出厂值
全在最后一项,按了像没反应而叠层里已是越界值);生成物 ui_menu_tab.h 与 gen_menu.py
模板漂移(上一笔改了模板没重跑生成器),现随生成器输出对齐。
未收口(不算完成):保存后重启值保持与主站 C_RD 读回两条只能上板,台架窗口执行;
LOCK 屏显与越界反显的页面侧在模拟器造不出来(模拟器不跑定值自检、无 NAND),
已由生成侧单测与代码注释点名差距;同类页数与钩子数陈述残留另立待办。
|
2026-10-26 15:51:12 +08:00 |
|
wandering1
|
0f7b5a87fb
|
chore(编号): 存量编号全量转语义短语,门禁识别面与语料同批重打
登记簿、文档与代码注释里的存量字母加数字编号(N-x / S-x / T-x / E-x / A-x / 卡号)
一律改写为语义短语,净删 2,028 处引用;删除基线与待确认、并行分道方案、排期详述、
采集保护收尾 4 篇(内容已并入 docs/任务规划/README 与登记簿)。
门禁机器与三张账同批重打:check_ids.py 新增变更记录行豁免与第二根护栏
undecidable_total_ceiling;check_test_traceability.py 只加 stdout/stderr UTF-8
reconfigure(TC_RE 未动);check_cubemx_survival.py 的 --write 固定 newline=LF;
id_registry / id_aliases(+19 条 retired-to-phrase)/ id_known_backlog 重打。
test/ 56 个文件同步 TC 标签语义化,其中 18 个 TU 改了 CHECK / printf 里的标签文字,
是本批唯一改变构建产物的文件集合。
为什么合成一笔、不拆四笔(实测撞闸,非偏好):pre-commit 跑钩子前会 stash 未 staged
部分,拆开后中间提交必然是「新规则 + 旧语料」——实跑可判定 85.15% < 基线 86.00%、
不可判定 1,453 > 上限 1,166,编号门禁直接拦下。编号识别面与它描述的语料只能同码移动。
实跑基线(工作区全量):754 文件 / 8,230 处编号字面量 / 可判定 7,079 = 86.01%
(基线 86.0%,容差 0.1pp)/ 不可判定绝对数 1,151(上限 1,166)/ 校验 1-6 错误级 0 /
告警 = 悬空 2(App/algo/freq.c 的 S2,属 §4.4 同号不同义)+ 孤儿 50。
基线从 84.0 抬到 86.0 的理由见 docs/门禁说明/id-check.md §7.6:本批真删了 2,028 处
引用,可判定面随真实内容上升,不是把分母做小。同批新增排除 docs/硬件平台/ 语料,使
识别面少 264 处——芯片手册位号与网表料号不属编号空间(registry 有 excluded_paths_note)。
⚠ 余量只剩 0.11pp(约 10 处)与绝对数 15 处:把「可判定的引用」改成散文会立刻撞第二
根护栏。另遗留一项:id_aliases 里 retired 的 N / S / T / A 别名没有 scope(U1~U5 有),
今后有人新写一个 A-4,校验 3 不会响,只能靠人,建议下批补 scope。
固件不变证据:115 个 .c/.h 剥注释并归一字符串后与 HEAD 逐字节全等,残留代码差异 0;
App / Src / Drivers 的字符串字面量零改动。@build 0 错误 0 警告;40/40 主机套件、2,889
断言全通过;覆盖率 line 89.2% / func 92.6%;pre-commit 48 钩子 --all-files 全绿;
check_doc_links --all 通过(176 文档,章节引用无法判定 0);逐字节卫生核过:14 个带
BOM 文件与 HEAD 一致、0 个 CR、0 个 U+FFFD,字符串字面量纯 ASCII。
.cubemx_survival_baseline.json 的 watchdog-module 哈希 56bf27 变 2bb051 属合法:
Src/freertos.c 的 USER CODE 区内只有注释文字随编号改写,代码未变。
同批带上体积同码凭证与 RAM 台账行(@build 之后盖戳):RW_IRAM1 79,008 B / 60.3%,
RW_CCM 57,376 B / 87.9%,阈值 92%。
|
2026-10-26 12:28:14 +08:00 |
|
wandering1
|
1a624b1fae
|
chore(ledger+stubs): uibound(F3)合入回填台账;ui_sink stub 随格式钩子修净
merge 9d90e00(F3 sink 往返喂位)后 @build 0/0 重编:Code=224,860 /
ER_IROM1 249,488 / RW=1,332 / ZI=135,100,lane-f 申报(+92B、RAM 79,008)
一致;凭证重盖、内存两账回填、覆盖率基线含新 ui_sink 套(39→40 套,
AGENTS 单测计数 22→23 同步)。stub 五头的空白/末行改动为格式钩子
(trailing-whitespace / end-of-file-fixer)在合并现场落笔,非语义变化。
|
2026-10-25 18:48:37 +08:00 |
|
wandering1
|
741564fa28
|
chore(ledger): wdacc(F2 按位分账)合入后回填台账/凭证/覆盖率
task/wdacc-bits 合入(merge 66f862e):stall/停喂判据改任一必需位自身连击
≥8 窗;复合串窗误升级(大窗 16:24/16:28 型)结构性消失,MISS start 降级为
诊断行;真停摆最坏到复位 +0.7s,V2 判据不变。@build 0/0:Code=224,768 /
ER_IROM1 249,408 / RW=1,328 / ZI=135,096,lane-f 申报(Code +80B、ZI +8、
BSS s_miss_bits[9] +9B)一致,--no-verify 欠账清。覆盖率基线复算;凭证重盖。
|
2026-10-25 18:04:34 +08:00 |
|
wandering1
|
7099c56c34
|
chore(ledger): pages 批 1~4 合入后回填凭证/覆盖率并同步黄金参考计数
task/pages-ui 合入(merge dea7591 + 修复 498cc60):三页回炉 + SOE 页 +
四查看页 + 遥信 33 行页 + ui_data 三通道 + soe_store 只读 API + 字库与
门禁配套共 12 笔。凭证重盖(Code=224,688 / RW_IRAM1 78,992 B=60.3% /
CCM 87.9%);覆盖率基线 39/39 套件复算。ui-golden 黄金参考 11→18 页
随批 4 扩容,AGENTS 门禁行/索引行与门禁说明两处、覆盖率口径一处同步;
两篇新详解(bom-guard/setview-check)已由道E 交付、索引去"待补"。
memset 隐式声明一条教训:分支树增量构建"0 警"不覆盖未重编文件,
done 主树全量重编才是终判。
|
2026-10-25 15:49:42 +08:00 |
|
wandering1
|
42b47aa5ac
|
chore(ledger): runpar 合入后回填台账/凭证/覆盖率并同步计数
task/runpar-par 合入(merge 7bbcc9c):卡10 运行参数段 [run_par] 9 键 +
104 映射 0x8030~0x804F + 死区真源收编 + SYS_EVT_RUN_PAR_SAVE 落盘链。
@build 0/0:Code=219,620 / RO=22,036 / RW=1,280 / ZI=132,864;
RW_IRAM1 76,720 B(58.6%)、CCM 87.9%。Flash +1,912 B、RAM +8 B 与
lane-d 申报一致,--no-verify 欠账清。meas.c 静态更名越界照准(同 TU
撞名 C2369 的最小修)。run_par.c 入覆盖率基线(39/39 套件);钩子
45→46、单测钩子 21→22、总闸 38→39(AGENTS + 门禁 README)。
|
2026-10-25 13:21:39 +08:00 |
|
wandering1
|
0cbae7dab2
|
chore(ledger): pts 合入后回填台账/凭证/覆盖率
task/pts-snap 合入(merge 8c47005):卡9 104 读快照 + COV 2 点确认 +
死区运行化 + 卡11 频率点绑源。@build 0/0:Code=218,128 / RO=21,624 /
RW=1,272 / ZI=132,864;RW_IRAM1 76,688 B(58.5%)、CCM 57,376 B 不变;
lane-d 侧 --no-verify 欠账清(Flash +348B/RAM +48B 与其申报一致)。
iec104.c 覆盖率行增量入基线(38/38 套件)。凭证重盖。
|
2026-10-25 12:09:23 +08:00 |
|
wandering1
|
adeef7d21b
|
chore(ledger): meas 与 n17 两笔合入后回填台账/凭证/覆盖率并同步计数
task/meas-snap 合入(merge 9c2653c,meas 快照层,分支树冲突由 lead 并集
手工解:id_registry 三族 UIDATA/VOLSYNC/MEAS 共存,JSON 校验过;该合并
提交按 mem 域例外 --no-verify,理由=合并树 .map 滞后,回填本笔兑现)。
task/n17-probe 合入(merge 969fc5c,drop 路径异步化 Flash +16 B/RAM 0)。
合并后 @build 0/0:Code=217,828 / RO=21,600 / RW=1,264 / ZI=132,840;
RW_IRAM1 76,664 B(58.5%)、CCM 87.9% 不变。覆盖率 38/38 套件基线登记
(meas.c 入账);凭证按最终 .map 重盖。计数:钩子 44→45、单测钩子
20→21、总闸 37→38 套(AGENTS + 门禁 README)。
|
2026-10-25 10:37:05 +08:00 |
|
wandering1
|
b746a1ff00
|
chore(ledger): ui-data 合入后回填台账/凭证/覆盖率并同步门禁计数
task/ui-data-feed 合入(merge 98664a1):ui_data 三通道快照 +
ui_data_feed 装配 + ui_w_soe 显示名 + 字库 +4 字(采/样/恢/效,
179→183)。合并后 @build 0/0:Code=217,204 / RO=21,504 /
RW=1,256 / ZI=132,680;RW_IRAM1 76,512 B(58.4%)、CCM 87.9%。
lane-e 分支侧 --no-verify 欠账清;覆盖率基线登记 ui_data.c
(37/37 套件、tested 41);凭证重盖(L0c 恢复序列)。
AGENTS/门禁 README 计数 42→44 钩、18→20 单测钩子(n22+ui-data 两笔带进来)。
|
2026-10-25 10:07:15 +08:00 |
|
wandering1
|
042e85820c
|
chore(ledger): n22 合入后回填台账/凭证/覆盖率基线
task/n22-flush 合入(merge 6f99dea):vol_idle_sync 空闲 flush 兜底。
Code 215,744→215,932(+188 B)、RW 1,224→1,232(+8 B)、ZI 不变;
RW_IRAM1 75,792 B(57.8%)、CCM 57,376 B(87.9%)不变——lane-f 分支侧
--no-verify 欠账清。覆盖率基线登记 vol_idle_sync.c(36/36 套件)。
凭证重盖(L0c 恢复序列)。
|
2026-10-25 09:29:55 +08:00 |
|
wandering1
|
bd7f15fc3e
|
chore(size): P1-10 合入后重盖体积凭证(v2 索引指纹)
task/P1-10-test-fw 合入(merge 73f9e10,含 A5 指纹跨树稳定修复 /
WD 掩码死分支复活 / %TEMP 分家 / 四 Fault 显式判据 / P1-10 四档实测)。
产品态体积与 383b450 逐项相同:Code=215,744 / RO=21,396 /
RW=1,224 / ZI=131,984(零增量——掩码修复在产品构建走原分支)。
台架 f3 轮 VERDICT PASS(boot log 20261025_055725,bench PASS 已入台账)。
|
2026-10-25 06:08:25 +08:00 |
|
wandering1
|
54dd019950
|
chore(size): sync 追平后重盖体积同码凭证(v2 索引指纹,1396 文件)
sync 合并(a281231)之后按 lead 的六步做重盖。合并带进来的主干凭证是 v1 格式
(383b450 用主干那版脚本盖的,schema=1),而本分支的 check_size_gate.py 已是
schema=2(7c4628b:身份取 git 索引 blob,跨 checkout / 跨工作树稳定)→ 不重盖则
L0c 与 CI 的体积门禁都会按设计报"schema 不符"。
盖戳前置(脚本自己会验,这里是实跑结果):
- 产品态 @build 0 错误 0 警告:Code=215744 RO=21396 RW=1224 ZI=131984,与 lead 信号
里的主干数字逐项相同;.map 晚于指纹范围内全部源码 mtime;
- 受管区:RW_IRAM1 75,784 B / 57.82%、RW_CCM 57,376 B / 87.89%,都在线内(阈值 92%);
- 指纹范围内无未 staged 改动/未跟踪文件(第四道前置)→ 允许盖章。
凭证:索引指纹 abfd54b71de9…,1396 个文件(比追平前多 8 个:新增 adc_cal /
prot_dim 等受管源码),测量时刻 2026-10-25T05:51:46+08:00,git_head=a281231 侧。
复核:--local rc=0、--ci rc=0(CI 侧按凭证数字复核红线,无需 Keil)。
为什么用 --stamp 而不是 --update:--update 会顺手往 scripts/ram_baseline.tsv 追加一行
当日趋势数据,而台账行归 lead 在 done 时统一回填(今天 383b450 刚回填过一笔,
再追加就是同日重复行)。这里只需要凭证,所以单独盖戳,tsv 一个字节没动。
RAM 增量:0 B(凭证是 JSON,不进固件;本次产品构建数字与主干逐项相同)。
gate:见本笔提交输出;未用 --no-verify。
|
2026-10-25 05:53:05 +08:00 |
|
wandering1
|
383b4500d0
|
chore(ledger): UI-rec 与 cal-lockout 两笔合入后回填台账与凭证
task/UI-rec-reader(merge 891ca81):reader 注入 Code +104/RO +8/
RW +4/ZI +4;task/cal-lockout-dim(merge 59da40b):卡5 闭锁 +
卡6 三常数 + 卡7 prot_dim 套件,Code +200/RO +80(vs 含 UI-rec 的
前一构建)。合并后 @build 0/0:Code=215,744 / RO=21,396 /
RW=1,224 / ZI=131,984;RW_IRAM1 75,784 B (57.8%)、CCM 57,376 B
(87.9%)——两笔合计 RAM +152 B,远低于 92% 红线。
覆盖率 35/35 套件基线同步;凭证按 .map 重盖(L0c 恢复序列)。
道A M4 代码面与道B 批 1 三卡至此全部落地。
|
2026-10-25 05:32:46 +08:00 |
|
wandering1
|
317e04219d
|
chore(ledger): UI-widgets 合入后重盖凭证并登记覆盖率分母
task/UI-widgets 合入(merge c1b425d,3 对组件文件 + 双端注册)。
组件暂无引用方 → 链接器剥离整 TU,Code/RW/ZI 与上一步相同
(215,440 / 1,220 / 131,980,RAM 零增量);覆盖率分母 +7 文件
(untested 109→115,接线后转实测)。凭证按 @build 0/0 后 .map 重盖。
|
2026-10-25 04:42:33 +08:00 |
|
wandering1
|
d89c07c40c
|
chore(ledger): UI-widgets 合入后重盖凭证并登记覆盖率分母
task/UI-widgets 合入(merge c1b425d,3 对组件文件 + 双端注册)。
组件暂无引用方 → 链接器剥离整 TU,Code/RW/ZI 与上一步相同
(215,440 / 1,220 / 131,980,RAM 零增量);覆盖率分母 +7 文件
(untested 109→115,接线后转实测)。凭证按 @build 0/0 后 .map 重盖。
|
2026-10-25 04:40:53 +08:00 |
|
wandering1
|
a5f7385cad
|
chore(ledger): cal-adc 合入后回填 Flash/RAM/覆盖率台账并重盖凭证
task/cal-adc-cal 合入(merge d39e5c9):adc_cal 折算模块 + 系数落盘
+ L5-2 rail_watch。Code 214,104→215,440(+1,336 B)、RO 20,388→21,308
(+920 B)、RW 1,204→1,220(+16 B)、ZI 131,852→131,980(+128 B)。
RAM 增量 +144 B(IRAM1 57.8%、CCM 87.9%,远低于红线);adcTask 栈
worst 1344 B / margin 47%。清 lane-a 分支侧 --no-verify 欠账。
覆盖率基线登记 adc_cal.c(118/119 行 99.2%);体积凭证按 @build
0/0 后的 .map 重盖(L0c 恢复序列)。
|
2026-10-25 04:28:52 +08:00 |
|
wandering1
|
e1967cf2ea
|
chore(size): A5 合入后重盖体积同码凭证
合并 task/A5-size-gate 后主干指纹前进(凭证停留在分支基线),
按门禁指引 @build 0/0 后 ram_baseline.py --update 重盖:
Code=214,104 / RO=20,388 / RW=1,204 / ZI=131,852(A5 零体积增量,
数字与 d9ab955 台账行一致)。
|
2026-10-25 03:59:00 +08:00 |
|
wandering1
|
e25e51c378
|
ci(A-5): 体积门禁补强制路径——同码凭证 + CI 无需 Keil 复核 92% 红线
背景:A-5 残余(docs/任务规划/测试与架构专项.md)说得很直白——mem-numbers 在
CI 被跳过(runner 无 Keil/无 .map),上一轮只把"跳过"声明成一条 ::warning::,
"盲区本身未消除":看到 CI 全绿仍会以为体积也守住了。
复核时本地侧同样漏:ram_baseline.py --gate 在无 .map 时自适应 SKIP 且返回 0;
mem-budget 甚至没进 CI 的 SKIP 名单——它在 runner 上以"Passed"的面貌出现,实际
什么都没检查。两处共同点是**"没跑 = 通过"**。
做法:给体积数字配一条可提交、CI 可复核的**同码凭证**,而不是要求 runner 装 Keil。
- 新增 scripts/check_size_gate.py(口径与边界的唯一正文在其模块 docstring)
· --stamp:只在三条都成立时才盖章——① .map 存在且解析得出执行区与 Grand
Totals;② .map 不早于指纹范围内任何源码的 mtime;③ 受管区占比不超过
mem-budget 用的同一常数。凭证因此不是随手可写的。
· --local:工作树指纹必须等于凭证指纹,否则 FAIL(="改了代码但体积从没测过")
· --ci:不需要 Keil 也能判的两条——同码性 + 按凭证记录的数字复核 92% 红线
· --show:排障用。指纹 = git ls-files 范围内逐文件 sha256(路径+内容) 再聚合,
覆盖 App/ Drivers/ Src/ Inc/ Lib/ Middlewares/ test/board/ 与 MDK-ARM 的 .sct/.s
- 新增 scripts/size_attestation.json:本树的凭证(由本树一次真实 @build 盖戳)
- scripts/ram_baseline.py:--update 顺手盖戳——"每次 @build 后跑 --update"是既有
纪律,不新增人工步骤;在函数内 import 防成环;盖戳失败只告警、不改 --update
返回值(新鲜度由门禁自己 fail-closed 兜)。_util/_read_tsv 提为公开名
region_pct / read_tsv_rows 供其复用(体积口径禁第二处定义);--gate 的无 .map
文案改成明说"SKIP 不等于 PASS"并指向兜底路径。
- scripts/ci_local.py:新增 L0c 体积门禁步(fail-closed、无条件照跑、约 0.3 s)
与 --size-only 开关;docstring 里把"无 .map 时跳过两根钩子"的语义补全。
- .gitea/workflows/ci.yml:L0 作业末尾加「体积门禁」步(if: always(),无需 Keil);
主干 push 拦红、其余事件 --warn-only(分支上代码尚未定型,拦红只造噪音,还会
诱发多条道同时抢写 scripts/ 台账);SKIP 名单补 mem-budget,让它诚实显示
Skipped 而不是假 Passed;文件头的"门禁盲区声明"改写为"已关闭为强制路径 +
仍守不住的三项"。run: 块全部纯 ASCII(PS 5.1 无 BOM 按 GBK 解码的实测坑)。
- scripts/README.md:登记新脚本与凭证文件,补用法行。
验证(工作树 _wt/A5-size-gate,分支 task/A5-size-gate)
- @build 0 错 0 警:Code=213780 RO=18860 RW=1204 ZI=131852——与 ram_baseline.tsv
的 2026-10-24 行逐项相同(本改动不碰固件源码,指纹不变,零体积增量)。
- 门禁实跑全 0:check-yaml / trailing-whitespace / end-of-file-fixer /
check-added-large-files / no-mojibake / id-check / doc-links / mem-budget。
- 负向 8 例全过:改凭证指纹 → --local 与 --ci 都 rc=1;凭证占比改成 95% →
--ci rc=1,加 --warn-only 则 rc=0;凭证写成非法 JSON → rc=1;用 mtime 回拨的
.map 去 --stamp → 拒绝且不动凭证;把区 max 改小到必然超线再 --stamp → 同样拒绝。
- 正向:--stamp 之后 --local / --ci 均 rc=0,并与 tsv 末行互证同源。
- --update 的盖戳联动单独验(把 TSV_PATH 与凭证指到仓库内已 gitignore 的
ci-artifacts/ 探针文件,跑完清理,本树台账未被测试污染)。
- ci_local 全量:L0.5 33 runner / 2227 断言全绿、gitlint 10/10、L0c rc=0。L0 里
test-cppcheck 与 test-coverage 各报过一次"files were modified"——单独重跑两条
均 rc=0 且工作树无改动,判定为三条道并行跑主机单测时 %TEMP% 里按套件名派生
的 obj/exe 互相踩踏(harness 产物名全机共用一个 TEMP 目录),非本改动引入。
RAM 增量:0 B(未动固件源码,凭证数字与本树一次真实链接一致)。
gate:全部通过,未使用 --no-verify。
遗留 / 需要 lead 裁定
1. 合入后主干 push 会要求"同码测量":done 流程在 @build 0/0 之后要多跑一条
python scripts/ram_baseline.py --update,并把 scripts/size_attestation.json
(数字变了则连 scripts/ram_baseline.tsv)一并提交。这就是"强制"的含义,但
确实新增半步——若你想先只在本地强制(L0c),我把 CI 那步改成 --warn-only。
2. 文档口径同步我没做(docs/任务规划/**、docs/门禁说明/**、docs/CI/README.md
归主树):A-5 销项时建议把"CI 不守体积"改为"CI 守同码性 + 红线,绝对数字仍
由本地真实构建产生",正文引用 check_size_gate.py 的模块 docstring。
3. 编译器选项(uvprojx)刻意不进指纹:UV4 每次构建改写它且不入库,进指纹会让
门禁在"刚刚构建完"的那一刻自己变红;代价是改优化等级/宏不触发本门禁,需人工
重测——已写进边界正文。
|
2026-10-25 03:51:19 +08:00 |
|