wandering1
|
c1e7e8c42c
|
fix(104): 拆掉四处恒假的上界判断——合法带只改判下界,口径不变
CI / L0 静态门禁 (pre-commit) (push) Failing after 3s
CI / L0.5 主机侧单测 (MSVC) (push) Failing after 2s
L0 的 cppcheck 在 --all-files 下恒红四处,全在同一文件:
App/protocol/iec104/iec104_comm.c 的 80 / 94 / 107 / 121 行,诊断为
compareValueOutOfTypeRangeError —— 拿 unsigned short 与 65535 比较,
Condition is always false。根因是 IEC104_COMM_CA_MAX 与 PORT_MAX 都等于
65535u,而被比较的量是 uint16_t:那个上界判断在类型上就不可能成立。
这四处随上游 iec104_comm 落地进来,本地提交只跑暂存文件所以没人看见,
CI 跑 --all-files 就每轮都红(同族盲区:暂存面与全量面不等价)。
处置走「语义不动」那一支(用户裁定 2026-10-27:A):只删恒假的半边、
改判 if (v < MIN),合法带口径一字未改(仍照 iec104_comm.h 的常量注释:
ca 1..65535、port 1024..65535),只在第一处写清为何不再写上界、其余三处
短引用。没有把 MAX 改成 65534(按 60870-5-104 的 65535 = 未编址),因为
test/host/iec104/iec104_test.c:1521 明确断言 ca 设成 IEC104_COMM_CA_MAX
必须被接受——那会同时打断这条断言并改变现场设备行为(配 65535 的站会
突然回退工厂默认),属协议决定,不在本次范围;要改请单独裁。
验证:单文件 cppcheck 原样复刻钩子参数 → RC=0;cppcheck --all-files 由
红转绿;iec104-unit-test Passed(即 65535 那条合同照过);@build 0 错误
0 警告(Code 231732→231720,减 12 B,RO/RW/ZI 不变);凭证与两份台账
随之重盖(ER_IROM1 257,292→257,280、Flash 合计 258,812→258,800);
本次触发的 13 根钩子全 Passed,含 test-coverage(删掉 4 行已覆盖代码
未被判成回退)。
|
2026-10-27 10:34:39 +08:00 |
|
wandering1
|
5869c0307b
|
fix(104): 消掉 cppcheck 两根常驻红——回显不再传未初始化缓冲、blen 收作用域
L0 静态门禁(pre-commit)历史 36 次启动里 28 红 / 7 绿 / 1 取消,最后一次绿是
10-12 19:17 的 run 23;此后连续全红。恒定的一根就是 cppcheck:本机(与 runner
同机、同一 Machine 级 Cppcheck 2.21.0)以钩子原样参数复现,诊断与 runner 日志
task-54/58/60/62/64、以及 master 上那条「Failing after 6m49s」的归档 run 26
逐字一致——不是版本漂移,也不是抑制文件缺失。
两条诊断与处置:
- s_cmd_con:body 仅在 n>0 时写入,n==0(回显超长退化为空信息体)时把未初始
化缓冲连同长度 0 一起传给 s_send_asdu。现实现内 len>0 才 memcpy,故无运行时
缺陷,但契约脆弱、门禁照拦。改为把 body 声明收进真要回显的分支,空信息体
分支显式传 NULL。
- s_spont_step:blen 只在 pend_yx 分支使用,声明移入该分支。
验证(基线 b24b2b5):cppcheck 原样复刻钩子 args → RC=0 零输出;@build 0 错误
0 警告(Code 231712→231732,+20 B);ram_baseline.py --update 重盖体积同码凭证、
--write 同步受管区台账,check_mem_numbers.py --write 同步 RAM 快照表。本次触发的
14 根钩子全 Passed(含 test-coverage)。
环境与遗留(非本笔引入):这台 runner 原本只有 VS2019/MSVC 14.29,没有
Microsoft.CodeCoverage.Console.exe,test-coverage 恒 [ENV] exit 2;今日已装
VS2026 BuildTools 18.11.12324.101(E 盘,含 mscoverage 18.11 与 MSVC
14.44/14.51/14.52),本笔按 14.51.36231 跑通覆盖率总闸 40/40 套、相对基线零
回退——与量基线那台同版本,故分母可比。CI 侧仍差两步:① 机器级 DTU_MSVC_CL
还指 C 盘 14.29,需改指 E 盘这套并重启 runner 守护进程(SYSTEM 只在进程启动
时读机器变量);② ci_runner_bootstrap.ps1 的 Find-MsvcCl 只扫 %ProgramFiles%
派生的 C 盘根且取首个命中(2019 在前),重跑 -SetEnv 会把对齐抹掉,应改用
vswhere + 版本降序。
|
2026-10-27 04:27:11 +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 |
|