wandering1
2b5eb1c0db
Merge pull request 'docs(serial-tool): 清理过时的「待 CH340」说法,A1–A8 编号改语义短语,销登记簿跟踪行' ( #71 ) from issue-52-serial-tool-doc-cleanup into master
...
Reviewed-on: http://100.123.83.113:3001/wandering1/STM32F4-Base/pulls/71
2026-11-03 06:53:03 +08:00
super_agent_bot
b45f50569b
docs(serial-tool): 清理过时的「待 CH340」说法,A1–A8 编号改语义短语,销登记簿跟踪行
...
依据 Issue #52:CH340 一直都在、/serial-boot-test 已跑通(boot_log_data 有 2026-10 大批日志),
「等 CH340 接入」是 2026-09 建档时的过时状态;字母+数字编号按 docs/编号规范.md §0 已废。
- 串口助手设计说明.md:§5 状态改 CH340 已接入(COM3)+ 正路径已具备验收条件;
§9.2 验收表 A1–A8 全部换语义短语;§10 步骤 4/5 同步。
- 登记簿.md §7:销掉「串口助手正路径补验」跟踪行(CH340 一直在、流程已跑通,无需再等)。
2026-11-02 23:58:18 +08:00
super_agent_bot
be16669564
docs(ui/nav): 台架复核落地——收列键语义、回根按 depth、限度取证结论(#69)
...
CI / 静态门禁 (pre-commit) (push) Failing after 4m56s
CI / 主机侧单测 (MSVC) (push) Successful in 47s
CI / 静态门禁 (pre-commit) (pull_request) Failing after 4m4s
CI / 主机侧单测 (MSVC) (pull_request) Failing after 42s
台架实机会话 2026-11-02(bench 档 fw 22:25:12 / 产品档
22:29:56,均经 /serial-boot-test 闭环:身份戳匹配 + 回读
no-difference):
- 复核② 收列键语义:菜单态按 s 与按 l 同走 menu_back、均收
一级且父列选中留在原地(depth 1→0、sel 不变)——旧断言
「菜单态按 s 不收列」是把待机态 s 无效(task-24 实证)误
读成菜单行为。to_root() 据此在 STATUS depth>0 时按 s 逐级
收(弹框被屏裁时像素 n_cols 漏计、固件 depth 不漏),老固
件像素路径保留 l 兜底仪式。§7.2 纪律与 board-ui-nav skill
恢复配方同步改写。
- 复核① 被裁弹框两叶:菜单步进依旧吃不到(枚举落同胞页,
落点由 STATUS 如实报出、不再谎称到达);GOTO 直开两叶到
达且完整渲染(自检记录 ink 4073 / 运行记录 ink 3559)→
KNOWN_UNREACHABLE 对 --to 保留,绕行路径 --goto。§7.4 改写。
- 产品档(未加宏)实测:STATUS 照常应答(不设闸)、GOTO 回
status=4——生产/bench 行为差异真机钉死;§7.6 增实机验证记
录段。回归:--selftest-quick 66/66+闸 7/7;--selftest 闭环
失败集与 master 基线逐项一致(6 存量像素 + 2 执行类拒绝)。
2026-11-02 22:39:48 +08:00
super_agent_bot
bbfb47ebd0
docs(ui): 新增 board-ui-nav 唯一入口技能并在 AGENTS 布防(#69)
...
CI / 静态门禁 (pre-commit) (pull_request) Failing after 6m26s
CI / 主机侧单测 (MSVC) (pull_request) Failing after 43s
板端交互看图/注键/开页一律走 scripts/board_ui_nav.py,禁止另写
一次性注键脚本:#38 调试中因临时脚本盲注 d*9 走错页复犯(#69),
盲走事故当时已立"不猜步数"铁律但入口没布防。技能写明 --where/
--to/--goto/--selftest-quick 用法、STATUS/GOTO 语义与拒绝码、
恢复配方、台架锁边界与 GOTO 权限边界。
UI_自动化测试流程.md:§7.1 记 #69 复犯案例与像素路径存量误判基线
(记录查询 6 叶在 selftest 闭环里恒红是存量,勿当 #69 回归);
§7.3 补 --where/--goto;§7.4 记 #69 收口(剪贴弹窗依赖已由
STATUS depth 顶掉,KNOWN_UNREACHABLE 销项待台架复核);
新增 §7.6 STATUS/GOTO 契约、判稳改造与门控说明。
2026-11-02 22:22:15 +08:00
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
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
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
super_agent_bot
4000bb73cf
docs: clarify frozen evidence exception
2026-11-02 03:50:27 +08:00
super_agent_bot
72b4b0943c
docs: clear task and layer shorthand IDs
...
Replace task/batch shorthand IDs and residual layer labels in
human-facing docs with semantic phrases. Add the new cleanup
policy to docs/编号规范.md and update the entry docs.
Machine keys (TC/CODE-RULE/MENU-STATE/TRAP/FR), hardware
designators/pins/MAC, protocol/version numbers and frozen
historical evidence are intentionally kept.
Docs only; no code behavior change. Verified with
check_doc_links.py --all and git diff --check.
2026-11-02 03:33:51 +08:00
wandering1
f81bb38b64
docs(测试说明): 录波远程半轮收尾回写并新增到场执行手册
...
CI / 静态门禁 (pre-commit) (push) Failing after 5m21s
CI / 主机侧单测 (MSVC) (push) Successful in 29s
- 故障录波设计说明 §10 新增「板级远程半轮记录」:真 FAT 落盘、触发
时序三样本、冷却恢复、轮转同号覆盖、PC 侧坏段拒收、104 并发
(参考主站 16/18 绿,两条 COV = 标定闭锁腿物理预期)六项 PASS;
drop 400–640 点/窗入账为纯观察项(丢样本不丢采集实测面)。
- 新缺陷「回放页段表枚举恒空(板级)」登记登记簿 §2:五面判别钉死
唯 ui_task_wave_scan() 在 uiTask 拿不到目录条目;伴生纪律缺陷
f_opendir 失败仍钉 s_wave_scanned=1(修复方向同记录)。
- 新增 docs/测试说明/专项验证/故障录波板级到场轮执行手册.md:剩余
人到场判据拆成四幕,逐步写清谁出手/做什么/会看到什么,含到场
检查清单、现场记录表、两个用户决定点、收工还原清单与分诊;
索引挂行 docs/README.md 与 测试说明/README.md(专项 5→6 篇)。
- scripts/board_ui_nav.py 文件头补三条 7003 驱动纪律(ACK 与推流
同 TCP 须 drain 静默、home 首 e 是重开最近页捷径、级联光标记忆)。
- 自我更正入档:起草台架计划时带入的「≤15 s 判据」全仓无属主,
已溯源改指 WAVE_SEAL_TIMEOUT_MS 2 s 封存窗(真锚);「§1.2 两个
待台架核数值」为错引,改指 §4.2 兜底行与 wave_ring.h 冷却时长。
bench 锁已 release、设备未改烧;证据包在 ci-artifacts/wavebench/。
gate: doc-links --all --sections-strict rc=0(218 篇 3103 处 无法判定
0);mermaid 预检新发 0;py_compile 过;七文件 BOM/CR/U+FFFD 全零。
2026-11-01 14:10:53 +08:00
wandering1
4ceb5b41e6
docs(任务规划): 故障录波卡片登记簿销项——判据并入设计说明后删除
...
用户指令(2026-10-30):确认录波任务完成度,把除实际操作之外的所有
步骤做完,然后删除规划文件,避免已完成的工作被误读为未做。
审计结论:代码面确已全部收口——wave_read.py --selftest 92/92、
三套主机单测 113/170/110 复跑全 rc=0、bench 自抓与 PC 读段脚本在仓、
数据可信/复刻明细/短板评测/UI 两处回写均已做过。**唯一未跑的是
板级台架那一轮(实际操作)**,判据不得丢,故先迁后删:
- 设计说明 §9 承接落盘道失败留痕名全清单(13+1 条,打印点现值
default_task.c:816/:831 实测核对)
- 设计说明 §10 承接原卡 2/卡 3 的板级段(触发来路一行、回放页
一行)与本波执行顺序图(mermaid,原规划 §3 逐字迁)
- §4/§11 头部定位、§11 尾注、§14 关系行改属主口径
- 全库 32 处引用改挂设计说明 §10/§9(18 文件):任务规划 README
独立行(顺带订正单测数 100→113 为实测)、登记簿、数据可信 ×2、
复刻明细、产品需求 ×2、ADC 注入 ×3、短板评测 ×2、页面补齐规划、
App/algo README、配图生成器注释、录波三套单测注释 ×6
- git rm docs 该规划文件;人类索引任务规划 6→5 个文件(沿革注照
屏板链路先例走裸句,不留反引号死引用)
验证:残留两形态(任务规划/故障录波、裸文件名)全树扫描 0;
mermaid 预检新发 0;doc-links 11 个被改文件逐文件 PASS;生成器
注释改动重跑产物逐字节不变(svg 60a0dd39e4);三套单测与
wave_read selftest 复跑全绿;18 文件 BOM/CR/U+FFFD 全零。
本笔不含固件编译单元(test/host 仅注释行与文档),构建留待合并
轮统一跑;板级轮启动判据与顺序见设计说明 §10。
2026-10-30 18:20:37 +08:00
wandering1
e18e52ef7e
docs(芯片手册/配图流程): 剥 16 处从未入库的死图引用,SVG→PNG 改成 headless 实测
...
两条存量收口(genlist 交付报告点名的那两条,用户裁定「收这两条」)。
一、docs/芯片手册/TPAFE5160.md:16 处 `` 的图
从未随文档入库——13 篇手册共 701 处引用,只有这篇缺;这些引用是
ad154b2f 把转录稿连正文一起入库时就带着的,16 个 hash 在全库 git
历史里一处都没有,与 a6cdebde 那次删 1069 张孤儿图片无关(那批里
一张都不包含)。本仓未入库厂商 PDF,无从重新提取,故剥成统一标记
并在文件头留痕:图题(`Figure N.` / 小节名)与紧邻 `<details>` 的
文字描述都保留,要看图按图题查手册对应页;补图须先装 git-lfs
(`*.jpg` 走 LFS 跟踪)。`doc-links` 对 `docs/芯片手册/` 整体豁免,
这类死链门禁永不报,自查方法是数标记行(应为 16)。
二、docs/架构设计/图形绘制流程.md:§3.1 第 4 步与 §四 原先写的
「浏览器打开 SVG」与「给 `.venv` 装 cairosvg 转 PNG」在本机走不通
(cairosvg 不在 `.venv` 也不在 `requirements.txt`,`rsvg-convert` /
`inkscape` / `magick` 都不存在),改成 headless Edge/Chrome 全路径
调用,并把两条实测坑写死:`--screenshot` 必须给绝对 Windows 路径、
`--window-size` 要跟画布一致。PNG 不入库的口径按 `.gitignore` 里
实际那三条目录规则列出,不再笼统写成「已含 `*.png`」。
`draw-diagram` skill 侧同步:撤掉「口径未与权威文档同步」那条挂账
说明,陷阱条目改指已对齐的命令,并写明改渲染命令时文档与 skill 两处
一起改(命令只在 §四 详述,skill 留判据指针)。
自查:`check_doc_links --sections-strict` 三篇 rc=0;skill-size
18841/65536 安全;`check_generated_fresh` PASS(26 生成器 / 22 一致
/ 4 存量基线);`check_mermaid --all`、`check_bom_drift --all` 均
rc=0;三篇字节卫生干净(LF / 无 BOM / 无 U+FFFD / 无行尾空格 /
末行单 LF)。本笔纯文档与 skill,未碰代码与生成器。
2026-10-30 17:26:05 +08:00
wandering1
f48208f1c5
docs(配图): 生成器与产物清单并成一张唯一真值表,挂载列改由实测反推
...
两张清单各自登记同一批生成器,2026-10-30 实测各漏各的:
`tools/arch_diagram/README.md`「脚本一览」21 行缺 5 个(adc_health 三张、
net_instability、net_pending),`docs/架构设计/图形绘制流程.md` 的三列表 18 行
缺 9 个(多出的还在 `docs/架构设计/图形绘制流程.md` §2.1 另立一张表登记例外面)。
同一条事实两处登记必然漂,现并成一张:
- 唯一真值表 = `tools/arch_diagram/README.md`「产物清单」:按图逐行,32 张入库
`docs/images/*.svg` 全量(26 个本目录生成器 + refgraph 2 张 + 无生成器的手工
级联框 2 张),列 = 图 / 生成器 / 这张图答什么 / 顶部数据区(改这里 → 重跑)/
挂在(`文档:行号`)。
- `docs/架构设计/图形绘制流程.md` §二 的逐脚本表换成指针(只留选型判据与流程),
§2.1 保留「钩子扫不到的图」的维护口径、去掉与主表重复的表。
- 级联框两张的绘制日期按 `git log --follow` 改对:原写「2026-10-26 手画」与 git 史
不符,实测 2026-09-08 `891c9ef0` 入库、2026-09-11 `2429955d` 随配图规范收拢进
`docs/images/`,此后未再改动。
- `docs/门禁说明/generated-fresh.md` §8 旧口径「加生成器 = `GENS` 加一项」对
`docs-svg` 不实:该条目声明 `dir` + `pattern = gen_*.py`,实跑 `glob.glob` 现扫
(`scripts/check_generated_fresh.py`:146-150 与 :452)→ 新增生成器自动进扫描面,
要同批改的是产物清单不是门禁。已拆成「加新类别」与「`docs-svg` 不必登记」两条。
- 「挂在」列由扫描 `![]()` 反推,并跳过 ``` 围栏与行内反引号里的示例写法——
`docs/文档规范.md`:83、`draw-diagram` SKILL.md:155、本文档 §3.1 第 5 步
那三处是教学示例、不是真挂载,先前手写表时误计进去过。
- 三张零内嵌图(`内存布局_RAM.svg`、`引用关系图.svg`、`引用关系图_模块.svg`)
在表里明写「零内嵌」并给出被文字提到的位置。
`draw-diagram` skill 的落库义务同批改指:§二第 6 步与验证清单都指向「产物清单」,
并写明「全仓只此一张逐脚本清单」,避免下一个人再另起第二张。
自查:`check_doc_links.py --sections-strict` 三篇 rc=0;`check_generated_fresh.py`
PASS(26 生成器 / 22 一致 / 4 存量基线);`check_skill_size.py` 17 个 SKILL.md ok;
`check_mermaid.py --all` 31 文件 62 围栏新发 0;`check_bom_drift.py --all` 99 文件
无漂移;产物清单核对器(一次性,不入库)重写挂载列后复跑归零、再跑幂等。
纯文档与 skill 文案,未改任何生成器与代码,未 commit。
2026-10-30 16:54:53 +08:00
wandering1
045ca7f688
docs(配图): 端到端链路鸟瞰进生成器体系,补大图碰撞审计判据
...
把 archify 出的交互架构图落回仓内可复现形态,避免 docs/ 里出现「没有生成器的
SVG」:
- 新生成器 tools/arch_diagram/gen_arch_endtoend_svg.py → docs/images/架构总览_
端到端链路.svg(42 框 / 37 边 / 5 条纵带,线型分数据·命令·屏障心跳三类);
数据全部内嵌在 .py 里(generated-fresh 只把单个 gen_*.py 拷进临时目录重跑,
外部 JSON 输入会 rc≠0 假红),SVG 内不含时间戳/commit/绝对路径
- docs/架构设计/项目架构总览.md 新增 §1.3 挂图并写清与 §1 分层图的分工
(那张答「谁在哪一层」,这张答「一条数据走到底穿过谁」;纵带只是列分组,
依赖方向仍以 §1.1 表与 layer-deps 门禁为准),版本 v1.2 → v1.3
- 两处生成器清单登记:tools/arch_diagram/README.md 脚本一览、
docs/架构设计/图形绘制流程.md 的选型表与产物对照表
- draw-diagram skill 新增 §三b(大图碰撞审计判据 + 两条几何纪律)+
reference/svg-collision-audit.py(拷进 ci-artifacts 用,刻意不进 tools/)
本窗实测(都已写进 skill):42 框 37 边的图缩略目检看着干净,解析式审计一眼
报出 23 条——边标签文字盒压到节点框会被后画的节点白底吃掉半个字(「串行执行」
渲染成「行执行」);根因是同行两框走了「同轴加一段走廊」的通用规则,产出退化
四点折线,把标签落点推到第一半中点。修法:同轴且已对齐直接返回两点线,标签
落点改按总弧长取 50%。
零余量第二遍(用生成器自己的 Box/route/label_at 真值扫,框不膨胀不内缩)又抓到
两处近失:「TRGO 触发」「帧 B 下发」与相邻框只剩 0.7px / 1.5px,缩成「TRGO」
「帧 B」后最紧余量升到 3.5px;同一遍还纠正了审计器自己的错——`hi > y0` 误写成
`hi > x0` 凭空报 3 条穿框,差点重排三条边的走线,所以判据里加了「先验审计器
本身再信 0 条」。
自查:连跑两次产物 sha1 不变;scripts/check_generated_fresh.py rc=0(25 生成器
/ 21 一致 / 4 在只减不增基线内);碰撞审计 rc=0(0 条);生成器无 OVERFLOW;
doc-links --sections-strict 逐篇 rc=0;mermaid-syntax / nested-comment /
skill-size / bom-drift 无新发;改动文件字节体检干净;/keil-build 0 错 0 警。
2026-10-30 15:59:24 +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
e4d70f9fcb
docs(真值): 勘查 13 条文档/代码不一致全部处置(10 改 3 核实)+ 补 3 处
...
证据源 = 主树 ci-artifacts/archify/architecture-dtu-overview-20261030-095132/
evidence.md §11。该目录不入库,故把每条的判据与实测源抄进正文,别让证据只活在
一台机器上。处置口径:能改的改成与代码同源,核实后确认文档没问题的明确写「不改」。
判停点与就绪屏障(条 1、条 3)
- AGENTS 原写 `protect_task.c:98` 直接停走判据:`:98` 是 `s_prev_cal_lock` 变量,
判停点是 `App/task/protect_task.c:268 if (adc_cal_prot_blocked() != 0u)`,
判定本体在标定层 `adc_cal_prot_blocked()`、protectTask 只是消费者 → 改引用,
同步 `ui_task.c:240` 页面注释与 `docs/任务规划/数据可信.md` 的同一处行号。
- `SYS_EVT_FTP_READY` 有生产者(`Src/freertos.c:490`,注释自陈预留)无消费者;
`SYS_EVT_TIMESYNC_READY` 全仓无生产者也无消费者(只有定义与测试桩)。
AGENTS、`sys_events.h` 位注释、屏障配图(生成器 + 产物)三处从「四个就绪位
并列」改成「bit0/bit1 在用 + bit2/bit3 预留」,并指向
`docs/架构设计/项目启动顺序管理.md` §3.2 的逐位对照表。ftpTask 实际等的是
`NET|STORAGE`(`Src/freertos.c:477-479`,WaitAll|NoClear,100 ms 分片喂狗)。
/log 不是「三本」(条 5)
- `App/log/sys_log_mcu.c` 的 `s_paths[]` = run / selftest / accid / alarm /
start / oper / yk 七本 64B 定长文本 + `soe.log`(64B 定长二进制)+ `wdev.log`
(变长取证行,`App/fs/vol_lock` 侧投,不走定长格式)。
→ AGENTS 两处、总览 §2.1 与 §4 的「三本」改成「七本 + SOE(+ wdev 取证行)」。
主机单测 44 套 → 47 套(条 2,两把机器尺互证)
- `scripts/check_test_coverage.py --list` 打印 47 行;`ls -d test/host/*/` = 48 个
一级目录,唯一没有 `run_unit_test.py` 的是 `common/` ⇒ 47 套。
- 差额三名 = 屏板链路套件:`sb_proto`、`sb_link`(2026-10-29 入库)、
`sb_led_map`(2026-10-30 入库)。专属钩子仍是 22 根 ⇒ 无专属钩子的从 22 套变 25 套。
- 同步面:AGENTS、`docs/门禁说明/README.md`、`host-unit-tests.md` §6 台账(名单补
三名)、`docs/代码规范/pre-commit使用说明.md`、`主机单测覆盖率口径.md`(含耗时句)、
`scripts/README.md`、总览目录树、`.pre-commit-config.yaml` 三处注释、
`test/host/sys_log_mcu/sys_log_mcu_test.c` 一处注释。
- 带日期戳的历史测量值按纪律冻结不动:28 套、41 套 ~105 s、40 套/18 套那三处。
本仓 LVGL 版本(条 6)
- vendored 版本 = `Lib/lvgl/lv_version.h:9-11` 的 9.3.0;总览两处「LVGL v9.2」与
`gen_arch_svg.py` 图内文字改 v9.3 并重跑产物(脚本与产物同一笔,`generated-fresh`
逐字节核)。
- **刻意不动**:`docs/内存管理/RAM使用分析与优化方案.md` 两处「LVGL v9.2 文档」+
GitHub `release/v9.2` 分支 URL ——那是对外游某分支文档的引用,不是本仓版本声明。
触发口径与栈值(条 4、7、9、10)
- ADC 映射 §1「ADC1 为软件触发」是旧口径:`Src/adc.c:53` 实为
`ADC_EXTERNALTRIGCONV_T3_TRGO` → 改成 TIM3 TRGO,并补一句「TIM3 与 TPAFE 的
CONVST 之间没有硬件耦合,仍不构成共同采样触发」,缺陷结论本身不变。
- 同文档 adcTask 栈 512 → 640 words(`Src/freertos.c:159 .stack_size = 640 * 4`)。
- `docs/UI设计/UI_设计架构.md` 的 uiTask 栈「16384 words」是单位错:
实为 4096 words = 16384 B(`Src/freertos.c:218`),顺手补上行号。
- `App/app/app_main.c:197` 注释「DE = PD0」陈旧:`:198` 实传 `ST_DIR4_*`
(V0.1 实板 PA15,V0.0 才是 PD0)→ 注释改指 V0.1 网表报告的引脚迁移表。
- 两处已退役编号 `N-18`(ADC 映射、V0.1 网表报告)换成登记簿条目名
「双转换器无共同采样触发」。
核实后确认「文档没问题」的三条(条 8、12、13)
- 黄金参考「菜单 8 状态 + 内容页 66 张」:`simulator/tests/ref/` 实测 66 个
`shot_*.bin`,与 `ui-golden` 钩子显示名一致 → 不改。
- `App/task/rs485_task.c` 存在但 `Src/freertos.c` 不创建它(grep 无 rs485):
AGENTS 与总览都已写明「尚未接线 / 暂缓」,图侧画成「实现待接线」→ 不改。
- 104 端口 `:2404` 是工厂默认、可经 `/config.ini` `[comm]` 改 → 总览索引表补
「默认」二字;「uiTask 10 ms 节拍」核实 = `ui_tokens.h:65 UI_TASK_TICK_MS 10` ✓。
并行勘查会话的同族发现(它扫「文档声明数 vs 真值」,逐处独立复验后采纳 3 处)
- `App/protocol/iec104/iec104_link.h` 头注释写「端口:TCP 2404(§1.5 B0 定义)」,
同文件下方已写「服务端口真源已迁 [comm] 段」= 自相矛盾 → 补「工厂默认」并指回
[comm] 与「下次重 bind 即生效」。
- `scripts/gen_task_table.py` 的 iec104Task 描述「:2404 监听」→「工厂默认 :2404
监听」,`--write` 重生成 README 任务表(AGENTS 表无描述列,实测未被改写)。
- `App/log/README.md` 五行写入点行号全漂:事故 181→188、告警 184→191、启动
176→183(`App/task/protect_task.c`);操作 `iec104_pts.c` 574/602→582/610、
`default_task.c` 242→266、`sys_log_mcu.c` 646→682;遥控 573/576/582/586/596/
598/609 → 581/584/590/594/604/606/617(宿主 `sim_syslog.c:245` 原值正确、未动)。
- **撤销一条**:我早先记的「`docs/算法/继电保护功能复现规划.md:225` 声称记录本已
有消费者」与原文不符——:225 实为规划表里「动作/SOE 记录 | 复用 `sys_log`」一行,
属能力复用口径、不是当前态断言 → 不改。教训:**改引用前逐处读现文,别照自己
上一轮的笔记盲替**(这条比改中的每一处都值钱)。
- 同一批勘查还报了约 12 处「`2404` 缺『工厂默认』限定词」(AGENTS、`App/protocol/
README.md`、`Src/freertos.c` 注释、5 篇 docs、`test/host` 工具,含一张配图生成器
要连产物同批重跑)与 `测试开发标准流程.md`「像素层 60 内容页」、
`.pre-commit-config.yaml` uinav 注释「快检档 18 张黄金参考」(后者写时为真、
描述的却是钩子现有行为):**本笔刻意不做**,另开任务空间处理——那批要同时动
AGENTS.md 与 `.pre-commit-config.yaml` 两处单写者面,与并行会话撞车的代价更高。
- 端口生效语义(用户裁定 2026-10-30):产品基线写「公共地址与端口可配…改后需重启
生效」,代码 `App/task/iec104_serv.c` 是「ca 改后要重启;port 下次重 bind 才生效」
——裁定**按代码语义要改**处理(改了端口应立刻重 bind),属固件行为变更,另开任务
且需真机验证;`.serialtest/config.json` 写死 `i104: listening on 2404` 必检锚点
是同题(现场改端口会让串口回归假失败),一并留给那条任务。
自查(任务树内)
- `check_doc_links.py --sections-strict`:12 个改动 .md 逐个 rc=0;
`check_mermaid.py` 改动 .md 全 rc=0;`check_generated_fresh.py` PASS
(25 个生成器 / 21 一致 / 4 存量基线);`check_nested_comment.py --all` PASS
(449 文件,新发 0、存量 2);`check_bom_drift.py --all` 99 个名单文件无漂移。
- 编译:`.dsh/skills/keil-build` 退出码 0(0 错误 0 警告),
Program Size Code=246720 RO=29836 RW=2052 ZI=149708 —— 与本树凭证同码,
证明这批改的确实只有注释与文档。
- 字节体检:23 个文件无 CR / U+FFFD / 行尾空格 / 缺末行换行;`ui_task.c` 被编辑后
丢的 3 字节 BOM 已补回(bom-guard 复验通过);5 处「三连空行」逐文件与
HEAD 比对确认是存量(Python 生成器的 PEP8 双空行与个别 C 文件原有空行)。
- 一次性工具 `ci-artifacts/fix_docs2.py`:断言式规则表,按文件读一次、在演化文本上
逐条替换、一次写盘。第一版写成「每条规则各自从启动时快照起算」,同一文件后一条
把前一条整体覆盖,只有每文件最后一条活下来——靠「改完再全仓复扫旧形态」当场抓到,
这条判据本身已值得写进流程。
- 待办:`git add` 后需重跑 `ram_baseline.py --update`(体积凭证按 git 索引内容生成,
未 staged 的文件不在凭证里,`check_size_gate.py --local` 现在因此报红)。
- 未 commit、未 push(AGENTS.md 边界:提交属 Ask first)。
2026-10-30 14:19:35 +08:00
wandering1
aed842e1f2
Merge branch 'v2-on-ui' into task/archsplit-sw-hw
...
# Conflicts:
# docs/架构设计/软件架构与运行时规格.md
2026-10-30 13:32:52 +08:00
wandering1
00fe66a029
docs(架构设计): 系统架构与硬件规格拆为软件与硬件两档,软硬件分治
...
用户裁定(2026-10-30):合档拆成两部分,软件与硬件不混排。
- 软件侧(新 §1~§6)= 分层 / 任务模型 / 就绪位表 / 启动时序 / 线程通信 /
工具链与工程约束 → docs/架构设计/软件架构与运行时规格.md
- 硬件侧(新 §1~§5)= 主控内存 / V0.1 引脚表 / 存储器件 / 版本兼容 /
能力边界 H1~H5 与量纲口径 → docs/架构设计/硬件规格与能力边界.md
- 旧 2.1 的 RTOS / 工具链 / CubeMX 三行迁入软件档 §6.1;旧 2.5 五条工程
约束归软件档 §6.2,SDIO 一条归硬件档 §5 H5(同事实不再两处并存)。
- 存储器件小节的 BBT / 单写者 / FatFs 三条细则不与权威档重复,改为指向
存储架构说明与软件档 §2。
- 引用重挂:AGENTS 引脚行→硬件档 §2;docs/README 3 处;需求档 7 处
(「架构硬件档」别名一分为二「软件架构档 / 硬件规格档」);复刻明细
2 处;section_aliases.json 两键改四键。
- 两档尾部各留裸号换算注(旧档号不带 §,避免与本文编号体系混淆、且
doc-links 自引用 strict 必拦);旧档名全仓零引用。
门禁:树内 check_doc_links --all --sections-strict 剩 35 处全部为
simulator/SDL2 联接「名称含空格」假红(主树同命令 rc=0 干净),本笔
文件新发 0;mermaid 预检新发 0;七文件 BOM/CR/U+FFFD 全零。
2026-10-30 13:08:44 +08:00
wandering1
4a4ad6bc5f
chore(全仓): @build/@test 旧文档别名清退为技能调用名
...
现状口径:/keil-build 与 /serial-boot-test 是 DSH 会话的技能调用名,
不是 shell 命令;「名 + 命令行参数」的命令形态改为可执行体
run_boot_test.py 的真实调用。
- AGENTS.md:别名说明重写为「技能调用名不是 shell 命令」,两条目改
「编译(/keil-build)」「串口回归(/serial-boot-test)」
- keil-build / serial-boot-test 两 skill 调用名与示例同步;task-worktree
方案文档去掉 @build/@test 惯例从句;@task 保留(不在点名范围)
- 123 文件现状陈述全改;台架捕获、变更记录/时间线、rename 映射输入
等 41 行历史证据保留旧名
- gen_memory_svg.py 6 处措辞随改,3 张 SVG 产物同批重跑
- 顺手补并行方案同行漏网计数 51→52 钩子
验证:提交期快钩子对 123 文件实跑全 Passed;check_doc_links --all
rc=0(3038 处、无法判定 0);check_mermaid --all rc=0;YAML 解析 52
钩子不变;skill-size rc=0;py_compile 全过;字节卫生零漂移。
2026-10-30 13:03:12 +08:00
wandering1
dc964090ea
docs(产品需求): 需求基线拆薄为三档(大厂标准),doc-links 增别名解析
...
产品需求设计文档.md v1.9 → v2.0(2691 → 1816 行):
- 新增 §2 背景·目标用户·典型场景·成功指标,§3.2 产品级非目标表,
§4 P0/P1/P2 需求总览(19 行);§9 收窄为缺口清单与推进顺序。
- 拆出 docs/产品需求/参考产品复刻明细.md(803 行):复刻基线 +
定值/遥测/开入开出/事件/元件/录波/记录/规约逐项差额与完成判据。
- 拆出 docs/架构设计/系统架构与硬件规格.md(215 行):运行时架构
(就绪位表/机制表/启动时序)+ V0.1 硬件规格;与项目架构总览
定分工——位表/机制表/时序图/引脚表以新档为准。
引用同步:AGENTS.md 引脚表指针改指系统架构与硬件规格 §2.2;
docs/README.md 目录树与索引四处重写;故障录波三处「录波采样率」
行指针改指复刻明细 §7;PRD §11 补两新档指针。
门禁工具:check_doc_links.py 裸名解析增别名后缀匹配(「见需求档
§5.16」形态),§ 链遇紧邻已登记别名换目标;section_aliases.json
登记 需求档 / 架构硬件档 / 复刻明细(档) / 产品需求设计文档 /
系统架构与硬件规格。
终验:doc --all rc=0(3038 处 / 可判定 80%);mermaid --all 64 围栏
0 命中;改动文件字节卫生全过;新旧逐行差集审计无丢行。
2026-10-30 12:36:31 +08:00
wandering1
6ffbb7d5b5
docs(测试说明): 交流动态验证轮次加四张导读图(两 SVG 生成器 + 两 Mermaid)
...
§8 开头插「六轮速查卡」:3x2 面板,每轮注入信号缩略图数据驱动
(正弦 / 同峰值方波三角 / UA·UN 异相 / 扫频 / 负半周钉 0 / 谐波叠
加),一卡给接法、判据一句话、主读数出口,先立轮廓再进执行卡。
§8.5 插「为什么连取 10 行取中位数」概念图:左栏机理(定宽 20 拍
窗逐窗滑动 → 读数拍频跳),右栏操作(中位数 / 平均 / 真值三线
错位对照 + 毛刺行标注)——取数口径 4e4d597e 刚定,此图补原理。
§8.3 / §8.5 各加一张 Mermaid:接线拓扑(端接高阻、万用表并接、
单点共地、STM32 五路仅削顶轮支线);单轮执行主干(采集链与偏差
两级决策、分诊虚线回环,汇于关输出填表)。
新增生成器 gen_ac_rounds_svg.py / gen_ac_median_svg.py(纯标准库、
OVERFLOW 预检归零、generated-fresh 自动在册),README 补两行台账。
验证:两产物连跑两次 sha1 不变;check_generated_fresh rc=0 无
DIFF / NEW、漂移基线不增;mermaid-syntax 2 围栏新发 0;headless
Chrome 截图回读三轮,修掉两类只有渲染才暴露的真错(正文 x 在卡
循环外算导致第 2、3 列叠进第 1 列;三角波闭式值域 −2..4 画越界
尖峰)。六文件 BOM / CR / U+FFFD 均零。
注:当前 check_doc_links --all 报 27 处,全属并发会话在改的产品
需求三份文档,与本笔无关、未触碰。
2026-10-30 12:21:02 +08:00
wandering1
4e4d597ed6
docs(测试说明): ADC 注入流程「取中枢」改为平实的中位数口径
...
「记录表(每条 10 行取中枢)」的「中枢」全文无定义、两处均易读岔,
按平实语言口径改写:
- §8.5 通用动作:「必须看一片才能定中枢」改为「必须看一片取中间水平
(中位数)才能定数」
- 幅值轮记录表引言展开为可执行填法:记录表每一行 = 连续 10 行心跳
ua_mv 排序后第 5、6 个的平均;不取单行、不取峰值(单行带拍频跳动,
毛刺行会拖偏算术平均);并点明表里「序号」是一次重测
- 机制注已在原文(meas 为瞬时基波有效值透传、200 ms 是节拍非平均窗,
数据可信 §4.5),本次只换措辞不动判据
验证:check_doc_links --all --sections-strict 通过;scripts/ci_local.py
全绿;文件无 BOM / 无 CR / 无 U+FFFD;全仓「中枢」复扫残留 0。
2026-10-30 11:45:33 +08:00
wandering1
314ebd2cfe
docs(屏板链路): 删除日志口联动的历史冲突描述行
...
- 屏板链路设计说明 §2 删「日志口联动」整行:现时态写成「共用 DR 会
互相插字节」的历史归因会误导新读者(现状两条流早已分家)
- 产品需求 §9.14 第三批行同步去掉同族机理括注,保留「第 16 条排在
10 之前:日志先腾出 USART1,屏板链路才能独占」的约束本身
- 端口归属现状另两档已有专述:产品需求 §4.2 表、控制台单写者日志
设计说明 §11;历史细节走 git log
2026-10-30 11:08:08 +08:00
wandering1
aa2b15d306
docs(测试说明): ADC 注入流程 5.1 标题改直白
...
「断电核阻」压缩过度不好读,改为「断电,用万用表电阻档核对」。
全仓 grep 旧词零残留;纯标题行改动,不动章节编号与正文。
2026-10-30 11:04:15 +08:00
wandering1
f8e62a9ba2
feat(门禁): 新增 mermaid-syntax 钩子,围栏内确定性语法提交前必拦
...
- scripts/check_mermaid.py(纯标准库):R0 围栏未闭合 / R1 图类型头缺
错 / R2 -. 后直接跟管道(确定性语法错误形态)/ R3 subgraph 与
sequence 块的 end 计数配对;--all / --selftest(5 形态)/ --prune;
排除面与 doc-links 同口径;零语料空基线
- 接线 .pre-commit-config.yaml(doc-links 后),docs/门禁说明/
mermaid-syntax.md 专篇(八段结构含限制与盲区),README 索引与
AGENTS.md 计数 51→52、提交期实跑 48→49
- 门禁说明 README 顺带修正两处历史矛盾:gitlint 实际就在本配置
(commit-msg 阶段),旧文「52−3−gitlint」与「gitlint 不在配置里」
均过时——锚定口径 52 = 47 pre-commit + 3 manual + 1 commit-msg,
加钩后 48 + 1 = 49;三处 grep 争执例句改抽象表述(例句里的数字
自己会过时)
- docs/子系统设计/屏板链路设计说明.md:38 修复触发本钩子的坏图:
-. 后直接跟管道不是合法边 operator,改为 -.->|label| 形态
实测:YAML 解析 52 / commit 阶段枚举 48 行全 Passed(含新钩子)/
check_mermaid --all 29 文件 60 块围栏 0 命中 rc=0 /
check_doc_links --all rc=0(215 文档)/ 六文件无 BOM/CR/U+FFFD。
2026-10-30 11:03:58 +08:00
wandering1
2be49dc9dd
docs(skills): 明确 @build/@test/@task 为文档别名并新增 precheck/postmerge 命令
...
CI / 静态门禁 (pre-commit) (push) Failing after 3m45s
CI / 主机侧单测 (MSVC) (push) Failing after 43s
AGENTS.md「构建与验证」新增总口径:@build / @test / @task 都是本仓库的
文档别名、不是 shell 命令(2026-10-30 实测:bash 敲 @task / @build 即
command not found,dsh task 被解析成 profile 名报错);`=` 后的命令行
才是可执行形态,DSH 会话显式调用为 /keil-build、/serial-boot-test、
/task-worktree。
- AGENTS.md / docs/README.md / 并行任务工作树方案.md:@task 三处定义位
由「短命令」统一改为「文档别名」,并写入两种实测失败形态
- keil-build / serial-boot-test SKILL.md:定义位点破别名性质;@test 在
skill 内原先没有定义句,补口径 blockquote
- task-worktree SKILL.md 与 reference/:whenToUse、标题、症状表、插件桥
去 @task 前缀改指 list / 本 skill;frontmatter 能力清单同步
- task_worktree.py 新增 precheck(树内只读自查:BOM 漂移 / CR / U+FFFD、
docs 逐档门禁、--msgfile 消息 BOM/CRLF/行长/禁词检查,自动补
ci-artifacts/)与 postmerge(主树体积凭证自动诊断:新鲜跳过、红先短链
再只读复检裁定是否升全链;check_doc_links --all;列文件不代提交)
- done 快路径打印与门禁拦截提示均指向 postmerge
实测:precheck 对坏消息文件抓到 CRLF、行长 95>80、禁词×3(rc=1);
postmerge 端到端「凭证同码新鲜→跳链→doc --all 绿(2967 章节引用 /
214 文档)→列 dirty 文件」rc=0;check_skill_size.py 与 py_compile 通过;
frontmatter 改动后 DSH 已用新值真加载过一轮。无 .c/.h 改动,不涉及体积。
2026-10-30 10:25:05 +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
7708f12c10
fix(ui/screenlink): 按键应答扣到按键后画面,反馈典型 250-450 ms 降至 70-135 ms
...
按键召唤答的是按键前的旧帧:uiTask 还没消化键答案就发走了,新画面
只能等下一次周期召唤(280 ms/轮)才带得出——真机反馈 250-450 ms 的
主构成(根因账本 docs/子系统设计/屏板链路设计说明.md §7.1)。
改动(用户批准范围 A+B+C;屏板固件未动,决策三不变):
- sb_link:按键召唤改为只入队不起发;uiTask 同拍重绘并组帧成功后交
凭据(sb_link_key_rendered),TIM3 1 kHz 的 sb_link_ms_tick 以 ≤1 ms
放行新帧。140 ms 截止(SB_KEY_RESP_MAX_MS,+59.6 ms 线上 <205 ms
屏板放弃线)保底发旧帧,"一召一答"契约不破;线忙时同旧丢单、
不留扣件。起发两中断源(USART1 IDLE/TIM3)共用 sb_tx_kick,
"判忙→占位"在 PRIMASK 临界区原子完成。
- ui_task:排空注键挪到组帧之前,注键→即派即绘→组帧同拍闭环;
组帧返回 BSP_OK 才交重绘凭据(BUSY 拍帧还没反映按键)。
- ui_port:注键单槽改 8 深环(连按不再互相覆盖,满丢最旧+计数);
新增 ui_port_service_keys:同拍 lv_indev_read + lv_refr_now,
省掉 indev ≤20 ms + 刷新 ≤20 ms 两段等待。
- ui_menu_view:菜单移动选中只失效新旧两行带(黄金参考零像素变化),
滚动/异常回退整框失效。
- simulator:窗口循环 sleep 扣除本轮已耗时(原先无条件睡满
lv_timer_handler 返回值,叠加 Windows Sleep 15.6 ms 粒度放大观感)。
- 串口 TX 上报新增 dfok/dfold(凭据放行新帧数/超时保底旧帧数):
dfold 连涨 = uiTask 被饿 ≥140 ms 的直接现场证据。
验证:test/host/sb_link 164/164(新增 18 条:不立刻起发/凭据放行/
140 ms 截止保底/忙时不留扣件/陈旧凭据不放行等边界);菜单 8 状态 +
内容页 66 张黄金像素 PASS;Keil @build 0 错误 0 警告(两次);
BOM 99 文件无漂移、代码规范、doc-links 本次文件零问题、cppcheck PASS。
文档:屏板规划文档已被主干收编进设计说明,延迟账本落
docs/子系统设计/屏板链路设计说明.md §7.1,并同步 §4 口径、§8 接口、
§9.1 单测台账 146→164、§10 坑账本补条。
RAM 台账(分支不跑 --write,并行分支提交约定):本笔盖戳行
RW_IRAM1 94,336 B (72.0%) / RW_CCM 57,376 B (87.9%),较上一台账行
+4,400 B——为距上次台账构建以来分支累计差(含批 3 状态灯等未盖戳
提交),非全部本笔引入;本次自身增量按对象计为 ui_port.o +12 B
(8 深键环+丢计数+indev 指针)与 sb_link/o 数十字节级。
gate: only mem-budget/mem-numbers pending lead ledger backfill
(合并落主干后 Lead 统一 --write 回填受管区)。
2026-10-30 09:50:31 +08:00
wandering1
36f6948544
merge: task/rrfix-rename-ref-dir-move 合入 v2-on-ui
...
任务 rrfix(1 个提交)经 task-worktree 回收:
- fix(scripts): rename_ref 搬整目录不再改脏目录内部内容,并补齐出链层级
2026-10-30 09:34:53 +08:00
wandering1
1221676272
fix(scripts): rename_ref 搬整目录不再改脏目录内部内容,并补齐出链层级
...
2026-10-30 测试说明分层那次(28 个路径、209 文件)实测踩到两条,都是
「把不该改的东西改脏」,当时的补救全靠事后从 git 里捞原始字节:
B1 整目录搬迁会改写目录内部文件的内容。「相对引用文件所在目录」这条
解析规则不检验目标是否存在,于是台架日志里不是路径的斜杠片段被当成
「旧目录下的子路径」并插上目录名:`1/1 PASSED` → `test_data/1/1 PASSED`、
`13639/32768`、日期占位 `[----/--/-- --:--:--]` 全中招,连有效的
`see ../a.md` 也被换成指向不存在的 `see td/a.md`。23 个证据文件是
用 `git show HEAD:<旧路径>` 逐字节还原才救回来的。
B2 目录内部文件指向外部的 `../` 出链不补层级。emit_dir 取的是
`new_abs.parent`,整目录搬迁时少算一层,`../images/x.svg` 搬深一层后
仍指旧层级;图片按文档目录相对(§3.2),check_doc_links 看不见 → 静默断链。
改法(尽量小面):
- resolve_token:按引用文件目录解析时要求目标真存在;根相对写法保持原宽松口径。
- rewrite_text:moved 文件的 emit_dir 改成「本文件搬完实际所在的目录」;
单文件搬迁走原分支,一字未动。
- 整目录搬迁时目录内部互为相对的引用一律不改(两侧一起搬,改了必错);
「旧路径是不是目录」必须在搬迁前记进 old_is_dir_global——--apply 是先
git mv 再改写,那时旧路径已经不存在了。
- glob 形态改成看得见:搬目录时前缀整体跟着搬(本来就该改);搬单文件时
一条 glob 可能同时盖住搬走与没搬走的两批文件,不猜,只点名列出。
分层那次有 4 处这种引用是静默漏改、事后手改的。
回归:新增 `--selftest`(在一次性临时 git 仓里跑本脚本的副本,`.gitignore`
先排除 /scripts/ 免得脚本自己进扫描面)。案例 A 守整目录搬迁(证据文件
逐字节不变、出链补层、别人文件的入链照改、glob 前缀跟着搬),案例 B 守
单文件搬迁的层级换算与 glob 提示,18 项断言全绿。反向对照也做了:同一
夹具在改前版本上 B1/B2 都复现,所以断言不是凭空写的。
文档同步:docs/文档规范.md §3.6 第 4/5 条从「现存危害」改写成「已修 +
验收判据」,新增第 6 条 glob 提示,并加「改本体必须先跑 --selftest」;
docs/测试说明/README.md 第 3/5 节口径同步;scripts/README.md 补 --selftest
与任务树 --no-verify 的用法行。顺带修掉分层那笔里我写错的日期:
2026-11-01 → 2026-10-30(文档规范 4 处、测试说明 README 2 处,真值就是今天)。
树内验证:AST OK;--selftest PASS;改动的 3 个 .md 单文件
check_doc_links --sections-strict RC=0(36 处章节引用、可判定 34、无法判定 0);
字节体检干净。未跑 @build(无 .c/.h 改动)。
2026-10-30 09:34:21 +08:00
wandering1
add61ca2af
Merge branch 'v2-on-ui' into task/screenlink-plan-to-design
...
# Conflicts:
# docs/子系统设计/控制台单写者日志设计说明.md
2026-10-30 09:25:35 +08:00
wandering1
8744c833e5
docs(屏板链路): 规划文档收编为设计说明事实源,全仓引用与端口口径同步
...
- 重写 docs/子系统设计/屏板链路设计说明.md:链路角色、串口与端口配置、
物理接线、协议实现口径、键值与状态灯映射、资源与耗时、对外接口、
已验证/未闭环、坑账本——只写现状事实,演进过程查 git 历史
- 删除 docs/任务规划/屏板链路.md(内容已全部沉淀进上述设计说明,
登记簿「完成即销项」;docs/任务规划/README.md 相应两行一并移除)
- 代码与主机侧测试的文档指针改指设计说明对应章节:
sb_link.h/.c、sb_proto.h/.c、sb_led_map.h、console_log.c、ui_task.c、
test/host 的 sb_link/sb_proto/sb_led_map 三套与两个台架脚本
- docs/README.md:设计文档索引行与设计说明描述更新,任务规划目录 7→6 文件
- docs/产品需求/产品需求设计文档.md:串口通道现状口径同步——第 11/12/13 条
已交付(4208 B 应答/状态灯掩码/键上行/双出口并发)、LOGO 下发出局不实现、
帧长实测固化、调试日志口 UART5/RS232#1(§4.2/§5.16/§6.6/§9.12/§9.13)
- docs/子系统设计/控制台单写者日志设计说明.md v1.8:全文端口口径由
USART1 同步为 UART5/RS232#1(CON_UART* 单点宏),ORE 机理标注跨端口
同因,时间线补端口迁移行;头部修订指针改为实际章节名
说明:本任务经用户显式授权在任务树内编辑 docs/任务规划/ 与产品需求基线
(铁律「单写者」豁免一次);主树合并后统一跑全量 check_doc_links --all。
2026-10-30 09:22:44 +08:00
wandering1
f754d59218
docs(测试说明): 按用途分六个子目录并同步全库引用
...
分层:流程与规范/ 单元测试/ 板级测试/ 专项验证/ 测试工具/ 测试数据/,
顶层只留新增的目录导航 README.md(归层判据 + 硬约束 + 本次处置记录)。
- 搬迁 28 个路径:测试数据三个目录 58 个文件为纯改名(R100,内容逐字节不变)
- 全库引用同步 124 个文件:AGENTS / docs 索引 / skills / 门禁注释 / scripts
- 门禁面:scripts/check_test_traceability.py 的 glob 改 rglob
(分层后不递归扫描=追溯门禁直接瞎掉)
- scripts/rename_ref.py:收尾的 ℹ 提示在 GBK 代码页抛 UnicodeEncodeError,
让进程以退出码 1 收场而改写其实已落盘(RC 与真实结果相反);改为把
stdout/stderr reconfigure 成 UTF-8,与 check_doc_links.py 等同法
- docs/文档规范.md §1.1 补「子目录文件过多时再分一层」;§3.6 补 rename_ref
搬整目录的两个实测坑:① 会改写目录内部文件的内容 ② 内部文件的 ../ 出链
不补层级(本次 23 个被误改的证据文件已按 HEAD 原始字节逐字节还原)
- docs/README.md §6 改为与六个子目录一一对应,并补登原先漏登记的
「启动日志原子性复验流程」一行
- .cubemx_survival_baseline.json:App/util/task_watchdog.c 的注释路径也随分层更新,
该文件是存活审计的 watchdog-module 漂移锚点,按脚本自己的提示跑 --write 重建基线
(实测重建后仅 watchdog-module 一条哈希变化)
- 铁律 4 例外(本次在任务树里改了单写者文件):AGENTS.md 与
.pre-commit-config.yaml 只被 rename_ref 改写路径字面量(后者全在注释行),
任务表块与钩子声明一字未动
验证:check_doc_links.py --sections-strict 覆盖全部 88 个改动 .md 全绿;
check_test_traceability.py 输出与主树逐行一致;196 个文本文件无 BOM、无新增
CR、无 U+FFFD、无行尾空白;陈旧引用面由主树 25 处降到 6 处(无新增断链)。
2026-10-30 07:16:07 +08:00
wandering1
fea4cc7502
docs(架构): 项目架构总览全局更新——同步录波/SOE/屏板并订正串口归属
...
v1.1(2026-10-14)之后主干前进 59 笔,本总览积累系统性偏差,通读全文后
全局更新(含配图生成器数据同步):
- 串口三分定态:USART1=屏板链路 700 kbaud、UART4=RS-485(B2 未接线)、
UART5=控制台日志 115200(console_log CON_UART=huart5 实证;
旧文把 USART1 标成调试口是屏板批 0 迁移前的口径)
- 采集主线补齐:adc_cal 标定折算、meas 200ms 遥测快照(adcTask 唯一
发布者,104 与 UI 共用同一份上游)、录波环三任务交接(adcTask 写入
冻结 / defaultTask 游标落 /wave / uiTask 单通道回放 / FTP 取回)
- SOE 事件记录链路入图:protectTask 动作/复归边沿投递(纯 RAM 队列)
→ defaultTask 经 syslog_drain 尾部落 /log/soe.log(64B 定长)
- 配置从 [network] 单段改五段注册制(+ftp/adc_cal/run_par/comm),
另有 /prot_set.bin(B7 原子写)
- UI 一节按注册表驱动重写:菜单树 61 行、16 个 #P 受保护叶、26 个
#page 绑定、ui_data 三帧契约(写侧唯一填充 ui_data_feed)、录波
两页、显存一份三出(屏板主出口/:7003 镜像/模拟器)
- §2.1 任务表按 freertos.c 现值逐行核对;protectTask 如实标注
「未标定闭锁」现状(产品 required_mask 0x1F7)
- 配图:gen_arch_svg.py 顶部数据(层芯片/串口/删悬空图脚注)重跑,
脚本与产物同一笔提交;check_generated_fresh.py 按「只减不增、
还清即删整条」把本次还清的 项目架构总览.svg 基线下架(留出处注)
验证:check_doc_links --all --sections-strict 通过;scripts/ci_local.py
全绿;generated-fresh 单跑 rc=0(无 DIFF/NEW);SVG 无头渲染回读目检
两轮(首轮揪出悬空图脚注);md 无 BOM/CR/U+FFFD;#P 计数剔注释行复核。
2026-10-30 06:53:07 +08:00
wandering1
613fc25651
docs(任务规划): 动态验证判据号 D1~D6 清退为语义轮名
...
用户裁定 2026-10-30:字母+数字判据号看不懂,删除;需要标识的用语义。
六轮本名取自「验什么」列(顺序图原本也写作 幅值/波形/削顶):
D1→幅值轮、D2→波形轮、D3→相位轮、D4→测频轮、D5→削顶轮、D6→谐波轮。
- docs/任务规划/数据可信.md §4.6.2(判据属主):标题与表首列、任务卡
DoD、§7 决策 8、§8 风险行、顺序图节点、§9 边界表;留一行换算注,
本族旧号作废不得再取走
- docs/测试说明/ADC前端注入验证流程.md §8(执行手册):六张执行卡、
出口分档表、耗时排程、[ERR] 判读、失败分诊、收尾还原表;归档文件名
示例同步 ac_d1/d5/d3 → ac_amp/clip/phase
- 同形异义族一字未动:二极管位号 D1~D6、FSMC/8080 数据线、网络自愈
决策 D1~D10(已迁 DR-)、链路延迟缺陷编号、配置文件设计决策表
- 本族无机器识别面(两道编号门禁 2026-10-28/29 已退役),换算表落
§4.6.2 注内,刻意不进 id_aliases.json;停发靠规范与评审
验证:族内 \bD[1-6]\b 复扫归零(仅剩换算注 2 行,有意保留);两文件
无 BOM/CR/U+FFFD,字节卫生与 HEAD 一致;84 组替换逐处断言命中数;
纯文档改动,零代码行为变更。
gate: check_doc_links --all + ci_local 通过,pre-commit 提交期实跑
2026-10-30 01:32:48 +08:00
wandering1
b4588108ed
merge: v2-on-ui into task/screenlink-bench-serial (wave + screenlink)
2026-10-30 01:08:37 +08:00
wandering1
e02f46ed6a
docs(任务规划): 删除两份遗留的 20261028 分工说明
...
- 分工说明-20261028-RS485解锁与门禁口径对账.md
- 分工说明-20261028-采集链与上送链联调.md
两份均为 2026-10-28 的一次性分工简报,任务线已收口、文件遗留未清,
用户确认为没用文件后删除。删除前核对引用面:docs/ 全量 *.md 完整扫描、
根 README/AGENTS/.gitea 均零引用;仅 ci-artifacts/(已忽略的一次性脚本
与日志)内有历史命中,不构成悬空链接。
2026-10-30 00:50:21 +08:00
wandering1
f405c8994f
docs(屏板): 批 3 改写(LOGO 出局)+ 4-1 双通道并发实测回填
...
- 规划批 3 表改两项(3-1 映射表 / 3-2 下发),3-3 LOGO 标 ❌ 出局
(用户裁定 2026-10-29:LOGO 功能无用、不实现,sb_proto 组帧函数列待删);
§0 执行序、验收清单第 8 条、另测三项(LOGO 那条连同串进去的残句一并清)
→ 两项、风险表两行同步。风险表"const 数组"防返工手段按实际实现改口
(位宏 + 单点纯函数 + 单测钉定义集——5 路输入判据形态各异,表统一不了谓词)。
- 设计说明 §3 决定 7 改写(LED 掩码独立纯逻辑模块折算)+ 新增决定 9(LOGO 出局);
新增 §5.7 双通道并发回归实测(7003 侧 2200 拉帧零错零超时 / 屏板侧隔离窗口
每召必答零丢弃 / 画面一致性由同一份活显存机制保证 / len=7 观察项如实记);
§7 清单第 8 项销项、第 10 项状态灯改为"已实现待目视"(含 ID2/ID5 在未标定
闭锁下恒灭的口径提示)、第 11 项 LOGO 划掉。
- 裸 §5.7 跨文档引用改全路径(--sections-strict 自引用判据)。
2026-10-30 00:40:45 +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
b49e226815
docs(配图): 菜单树总览改由生成器画,登记钩子扫不到的图
...
- 新增 tools/arch_diagram/gen_menu_tree_svg.py → docs/images/菜单树总览
.svg:43 节点 = 9 菜单 + 34 叶,30 已绑页 / 4 未绑 / 16 叶带密码门,
最深 4 级;读数由脚本现算,不在文档里另抄一份
- 生成器内嵌 NODE_SRC(= ui_menu_tree.txt 的 43 行节点):在仓库里跑会
与真值逐行互验、不一致 exit 1;generated-fresh 在临时目录重跑读不到
真值 → 用内嵌表,输出逐字节一致(实测临时目录产物同 sha256)
- 产品需求 §8.2 原先挂的是级联框显示几何图(画的是示例级联,从来不含
整棵树的节点),换成这张树图,并删掉「该图仍是 42 节点时代所画」的
补丁注
- 图形绘制流程新增 §2.1:登记 generated-fresh 扫不到的四张图 —— 两张
tools/refgraph 产物(引用关系图 / _模块,不在 gen_*.py 命名面里)+
两张手画稿(级联框总览、级联框几何计算)。钩子只扫
tools/arch_diagram/gen_*.py,这些图改了不会有人报警;再多一张先说清
为什么不能用生成器
- arch_diagram README 脚本一览加行
2026-10-30 00:25:03 +08:00
wandering1
98d46e626d
fix(内存台账): subsystem_of 补齐 12 个 App 对象前缀并加未归类兜底
...
按台账 §2「应用 = App/ 其余」自家口径重算归集。此前 wave_、iec104*、
soe_、meas、freq、run_par、protect_task、task_prof、boot_stats、
vol_idle_sync 都不在前缀表里,12 个对象 9,445 B 静默落进「其它」(参考
行、无配额),配额 8 KB 的「应用」行看不见录波与 SOE 支路。补齐后
应用 16,888 → 26,333 B、其它 15,849 → 6,404 B;区域水位与 92% 红线不变
(台账受管区已 --write 回填)。
兜底:App 下的 .c 编出的对象只要落进「其它」,--gate 就逐条 WARN 点名
(软提醒不拦)—— 下一个新增 App 目录不会再静默隐身。台账 §2 口径表、
应用条目、变更记录与 内存内容分配策略 §6 那条「本卡不动,已报 lead」
同步改口。
2026-10-30 00:19:15 +08:00
wandering1
058e7c061c
docs(数据可信): §8 风险表改按行名引用,修掉两处指错行
...
- IEC104上行设计说明.md 与 iec104_pts.c 的 s_q_map 注释原写「§8 风险
表末行」,末行其实是「加压烧板」;含单测要求的是「削顶通道被当成可
测」行。两处都改成行名,行名完整落在一行内
- ADC前端注入验证流程.md 同源错引用改成「削顶负向用例被当成固件 bug」行
- 数据可信.md §8 表头加一条引用规矩:写行名,别写「末行 / 第 N 行」,
本表会插行
- doc-links 只校验章节编号存在性,看不见「末行」这类行内指向,也从不扫
.c/.h —— 这两处此前没有门能拦
@build 0 errors 0 warnings(只改注释,Program Size 未变)
2026-10-30 00:18:53 +08:00
wandering1
9c6d150261
docs(屏板): 回填真屏板 10 min 连续零错实测(§5.5),未测项清单刷新状态
...
21:30~21:44 挂机窗口末轮计数:rx=4258 ok=4258 crc=0 err=0 bits=0x00
rearm=0(连错误中断都没进过);末段 5 s 18 帧 = 277.8 ms/帧;
tx=4249 done=4248 drop 窗口内零新增 kerr=0 abor=0;keys=53 kq=0
(按压期间零丢弃);fb=902 bad=0、us max=812 µs < 1 ms 改口判据;
窗口内无 OFFLINE/back online 行。验收清单第 1 条主机侧半边闭环。
§7 清单状态同步:第 2 项 ✅ ;第 1 项拆成"主机侧已测/目视半边待测";
5.5 接线教训顺延为 5.6 并同步三处跨文档引用。
2026-10-29 21:46:47 +08:00
wandering1
20617a33f7
docs(编号规范): 编号一律停发——§4.1 五族也不再发新号,只读存量
...
用户裁定(2026-10-29):「啥号都不发」= 任何族都不再新增编号,
含 §4.1 那五个原本"有脚本按字面量匹配"的存量族;既有号只读引用,
族里新增内容一律写语义行名。
规范本体:
- §1 由「先问三句」改成「默认答案:不发号」,三问表换成场景对照表;
- §4.1 由「允许用号的族」改成「存量族」,第四列改「既有号被谁读 /
新写怎么办」,逐行写明新写怎么做(TRAP 写语义行名、FR 用 §5 行名、
CODE-RULE / MENU-STATE 先问用户、P-n 只读存量页号);
- 末框四条对照 + 唯一例外入口(确需机器按字面量匹配 → 先问用户);
- 新增族 = 一律不许;批准后顺序:本文 §4.1 → 属主文档 → 才动 registry。
跨文件同步(12 份):门禁说明 id-check-new / id-check / host-unit-tests
(把"校验 5/3 拦新号"这类现状叙述历史化)、两份 TRAP 记录的编号口径、
开机账本用例号说明、AGENTS 两处、id-family 技能与其 steps-alpha 模板、
归档 README 与两份归档脚本 docstring。
AGENTS 主题表那行原写「允许用号的 7 个族」,与规范的 5 行本就对不上,
旧计数一并消掉。
未做:pre-commit 的 default_stages 一行——用户对该项未置可否。
验证:py_compile 与 check_ids_new.py --self-test 均 rc=0;逐篇
check_doc_links.py --sections-strict rc=0(编号规范 70 处引用 /
68 可判定 / 无法判定 0);13 份改动文件表列数与字节体检相对基线零新增。
2026-10-29 21:31:42 +08:00
wandering1
88601422c3
docs(文档规范): 清空壳变更记录节,例外清单改成可复跑口径
...
17 篇文档的变更记录(含修订记录、带编号与中文序号标题)节里只剩一句
「不再记流水账」的占位话,整节删掉,连带它前面的分隔线。
仍保留真台账的只有 5 篇(看门狗 / 配置文件设计 / RAM 预算台账 /
内容页架构 / 本地工具路径方案),外加 scripts/archive 归档区。
份数口径改成可复跑的普查:文档规范 §5.1 补自查命令,
stale-doc-count-sweep 的速查表与陷阱各加一条——只 grep 裸标题会漏
带编号与中文序号的两种写法,实测 5 篇只数得出 3 篇,差点据此把
全仓正确的份数改错。
门禁:逐篇与全量 check_doc_links 除 simulator/SDL2 联接假红外 0 问题;
skill-size rc=0;表格列数与字节体检相对 HEAD 零新增问题。
2026-10-29 21:21:59 +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