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 处 (都带「当时」口径)。
45 lines
4.7 KiB
Markdown
45 lines
4.7 KiB
Markdown
# 分工说明: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/`(**新建**)
|
||
- **交付物**:
|
||
1. 修 **单缓冲包撕裂**:RX 改 **双缓冲 + 帧序号**,消费者一次取整帧,对齐 `tpafe5160_snapshot()` 的 **临界区原子快照** 语义(旧的两步取数在两步之间被抢占会混帧);
|
||
2. 修 **TX 超时拉 DE**:超时路径 **先等 TC 再拉 DE**,避免尾字节被截;错误码走 `Drivers/BSP/bsp_err.h` 通道,返回值 **不得裸丢弃**(`bsp-err` 的 consume-result);
|
||
3. `[计划] test/host/rs485/run_unit_test.py` 覆盖 **撕裂**、**TX 超时**、**DE 时序** 三例;新增 `.c` 须 **双端注册**(`MDK-ARM/STM32F407-Demo.uvprojx` + `simulator/CMakeLists.txt`,见 `new-source-file` skill);
|
||
4. 结论回填 `[计划] docs/问题记录/RS485_Trap_Records.md`,并在 `docs/任务规划/暂缓-RS485.md` 写清 **解锁条件是否满足**(接线节奏仍受门禁约束,**不由本线决定**)。
|
||
- **禁止**:`malloc/calloc/realloc/strdup/free`(`coding-standard` CODE-RULE-20);`osKernelStart` 之前调任何创建类 API;注释里写 **星号形态的路径**(`nested-comment` 9-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` **只读核对、不改**。
|
||
- **交付物**:
|
||
1. **口径 = YAML 解析后的 hook 条目数**:用 `& ".venv\Scripts\python.exe"` 解析 `.pre-commit-config.yaml` 取实数,与 `AGENTS.md` 的 **51** 做 **声明 / 文档 / 实跑** 三数同源核对(**注释掉的候选钩子不计**,直接 grep 声明行会多算 1);
|
||
2. `docs/门禁说明/README.md` 的 **篇数 ↔ 钩子数** 差集清单,核对 **27 篇 + 1 指针** 是否仍成立;
|
||
3. 有差异 **只改文档、不加钩子**(Lead 裁定:`test/host/` 41 套里只有 22 根专属钩子,**没有专属钩子 ≠ 没被跑**,余量由 `test-coverage` 总闸兜);新条目标识用 **语义短语**,**不再发字母+数字编号** → `docs/编号规范.md` §1。
|
||
- **禁止**:手工全局替换改名/挪目录(走 `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 都不得自行删行**。
|