41670a1cc6
第 41 套 boot_stats 由 728d6067(2026-10-27 11:29)入库,全仓写的 「40 套 / 18 套无专属钩子」从那天起过期;本轮按实测复点同步。 真值双源互证:test/host/*/run_unit_test.py 实数 41(43 个目录,除 common 与 __pycache__)= scripts/check_test_coverage.py 自报 suites=41/41。专属钩子 22 根(YAML 解析 id 以 -unit-test 结尾, 22 条全对得上有 runner 的目录)⇒ 无专属钩子 19 套 = 41 − 22。 改当前态共 18 处:AGENTS.md 提交门禁节三处、.pre-commit-config.yaml test-coverage 注释、docs/门禁说明/host-unit-tests.md §6 第 4 条六处 (无钩子名单首位补 boot_stats、目录数 42→43、裁定句改「裁定当时 18 套,2026-10-28 现值 19 套」)、docs/门禁说明/README.md、 docs/代码规范/pre-commit使用说明.md 两处、docs/编号规范.md、 scripts/README.md、docs/任务规划/分工说明-20261028 一条、 docs/测试说明/主机单测覆盖率口径.md 追加 2026-10-28 = 41 套 ~105 s 新实测点、test/host/sys_log_mcu/sys_log_mcu_test.c 注释行。 刻意不动:带日期戳的历史耗时与套数行(只追加新的实测点,不覆写)、 host-unit-tests.md 里「22 根 / 40 套 / 18 套无专属钩子」这句复核原文 (只在后面追加更正)、scripts/archive/id_gate/ 留档两处、 同数不同义的五处(40KB 级 / −20~40% / 不到 40 行 / 18 断言点 / 板端 RTC 套件)。钩子数 51、专属 22 根、提交期实跑 48 根本轮实测 未变,相关句一字未动。 门禁:doc-links --all --sections-strict / id-check-new --worktree / no-mojibake / bom-drift / validate-config 全 rc=0, test/host/sys_log_mcu 单测 rc=0;改后复扫「40 套」仅剩 3 处 (1 处刻意保留 + 2 处留档)、「42 个目录」0 处、「18 套」仅剩 2 处 (都带「当时」口径)。
4.7 KiB
4.7 KiB
分工说明:RS-485 解锁与门禁口径对账(2026-10-28)
目标:A 线补齐 Drivers/BSP/RS485/ 两条未修契约缺陷,为 rs485_task 解除 RS-485 接线门禁 的技术前提;B 线把 AGENTS.md 与 docs/门禁说明/README.md 的 钩子口径 对账到实跑。
口径:本文件只分工、不改行为;两条线 不交叉编辑 对方文件,跨线接口 先在本文件登记 再动手。
A 线 · RS-485 驱动契约(负责人 A)
- 涉及文件:
Drivers/BSP/RS485/rs485.c、Drivers/BSP/RS485/rs485.h、App/task/rs485_task.c(新建)、test/host/rs485/(新建) - 交付物:
- 修 单缓冲包撕裂:RX 改 双缓冲 + 帧序号,消费者一次取整帧,对齐
tpafe5160_snapshot()的 临界区原子快照 语义(旧的两步取数在两步之间被抢占会混帧); - 修 TX 超时拉 DE:超时路径 先等 TC 再拉 DE,避免尾字节被截;错误码走
Drivers/BSP/bsp_err.h通道,返回值 不得裸丢弃(bsp-err的 consume-result); [计划] test/host/rs485/run_unit_test.py覆盖 撕裂、TX 超时、DE 时序 三例;新增.c须 双端注册(MDK-ARM/STM32F407-Demo.uvprojx+simulator/CMakeLists.txt,见new-source-fileskill);- 结论回填
[计划] docs/问题记录/RS485_Trap_Records.md,并在docs/任务规划/暂缓-RS485.md写清 解锁条件是否满足(接线节奏仍受门禁约束,不由本线决定)。
- 修 单缓冲包撕裂:RX 改 双缓冲 + 帧序号,消费者一次取整帧,对齐
- 禁止:
malloc/calloc/realloc/strdup/free(coding-standardCODE-RULE-20);osKernelStart之前调任何创建类 API;注释里写 星号形态的路径(nested-comment9-D)。 - 预算:建任务 前后各跑一次
scripts/stack_report.py与scripts/ram_report.py;建任务/抬栈属 Ask first。
B 线 · 门禁与文档口径(负责人 B)
- 涉及文件:
AGENTS.md、docs/门禁说明/README.md、docs/代码规范/pre-commit使用说明.md§2;.pre-commit-config.yaml只读核对、不改。 - 交付物:
- 口径 = YAML 解析后的 hook 条目数:用
& ".venv\Scripts\python.exe"解析.pre-commit-config.yaml取实数,与AGENTS.md的 51 做 声明 / 文档 / 实跑 三数同源核对(注释掉的候选钩子不计,直接 grep 声明行会多算 1); docs/门禁说明/README.md的 篇数 ↔ 钩子数 差集清单,核对 27 篇 + 1 指针 是否仍成立;- 有差异 只改文档、不加钩子(Lead 裁定:
test/host/41 套里只有 22 根专属钩子,没有专属钩子 ≠ 没被跑,余量由test-coverage总闸兜);新条目标识用 语义短语,不再发字母+数字编号 →docs/编号规范.md§1。
- 口径 = YAML 解析后的 hook 条目数:用
- 禁止:手工全局替换改名/挪目录(走
scripts/rename_ref.py,先 dry-run);章节引用写成非紧邻形态(doc-links带--sections-strict拦提交);在配置注释里复述那个 grep 字面量(文本计数再虚高 1)。
共用约束(A/B 都要守)
- 改代码/改文档 只用 Edit 精确替换;绝不用
Get-Content/Set-Content/cmd重写含中文的文件(U+FFFD不可逆);带 BOM 的Drivers/BSP/UI/、App/cfg/cfg_file.c、Lib/lv_conf.h改完核对EF BB BF(bom-guard)。 - 字符串字面量纯 ASCII,中文只进注释;行尾 LF(
.gitattributes已写死* text=auto eol=lf);怀疑乱码先数EF BF BD字节,不要git checkout。 - 门禁 只在提交时 统一跑:
@build+& ".venv\Scripts\python.exe" scripts/ci_local.py+scripts/check_doc_links.py --all,不要中途反复跑。 git commit/git push/ 烧录 / CubeMX 重生成 / 登记簿删行销项 / 开ENABLE_DESTRUCTIVE_TESTS—— Ask first。
验收(合并前)
| 线 | 判据 | 证据 |
|---|---|---|
| A | RS485 两条 ❌ 清零,rs485_task 的技术门禁解除(是否接线仍由用户裁定) |
test/host/rs485 全绿 + MDK-ARM/build_log.txt 0 错误 0 警告 |
| B | 声明 / 文档 / 实跑 三数一致 | 解析计数输出 + docs/门禁说明/README.md 差集为空 |
| A+B | registration-check、bsp-err、nested-comment、id-check 基线 只减不增 |
scripts/ci_local.py 输出 + scripts/archive/id_gate/id_known_backlog.json 台账 |
交接
- 两条线各自 只回报:改了哪些文件、跑了哪些自检、剩余风险;跨线接口(
rs485_frame_take()签名)变更 先在本文件登记。 docs/任务规划/README.md的 完成即销项 由协调者在用户确认后统一做,A/B 都不得自行删行。