docs(内存): 阶段子项改层级编号 4.阶段.项,消除与顶层章节同号撞面
根因:`RAM使用分析与优化方案.md` 顶层有 §1 背景 / §2 现状测量(2.1~2.6),而 §4 「方案」下"阶段 N"的子项也用裸号 0.x / 1.x / 2.x——阶段 2 的 2.1/2.2/2.3 与顶层 2.x **完全同号**,阶段 1 的 1.x 又长得像"第 1 章第 x 节"。`doc-links` 对本文自 引用按设计直接放过,于是门禁和人一起看错:AGENTS.md 把"栈余量台账"写成 §1.4, 而 §1.4 其实是阶段 1 的 lftpd 静态化项(上一笔提交的信息里我把它误判成断链, 已 amend 更正)。 改法:阶段子项一律改层级编号,阶段号不变、只加 `4.` 前缀 —— 0.x→4.0.x、 1.x→4.1.x、2.x→4.2.x。共改 14 个标题;文内自引用与实施序列表(S4~S9 那套)、 暂缓清单、§5 预期效果列里的裸号一并补成 §4.x.y。 外部引用同步 15 处:AGENTS.md、lftpd/README ×2、菜单页面设计、RAM预算台账 ×2、 项目架构总览 ×3、FTP_Test_Guide ×3、boot_log_data/README、部署环境要求、审查 报告、ram_baseline.py ×3。最有说服力的两处歧义:审查报告与 RAM预算台账都写 "缩堆见 …§2.2"——既可读成顶层 §2.2(静态大项排行)也可读成阶段 2 第 2 项, 现均为 §4.2.2(阶段 2 第 2 项"缩堆")。 另修 4 处把 §1.4 当"栈台账"的错指:采样有效性校验设计说明 :441/:593/:650 改 指 §2.3(任务栈配置与实测峰值)与 §4.0.6(静态最坏链与判定);id_aliases.json 的 note 改指 §4.0.6 并标注"原 §1.4,2026-10-22 层级编号"。 冻结与示例:其它文档**变更记录行**里的旧编号按项目纪律不改写(项目架构总览 :367、RAM预算台账 :98),改在被引文档 §4 开头留一张换算表 + 约定说明;把旧号 当语法示例写的 7 处一并换掉(文档规范 ×3、check_doc_links ×3、rename_ref ×1), 否则示例本身指向已改名的锚点。主文档版本行 bump 到 v1.3 / 2026-10-22。 门禁:check_doc_links.py --all --sections-strict → 146 个文档 0 问题(章节引用 2513 处、机器可判定 1491);check_ids.py --strict 增量拦截通过;mem-numbers、 ram_baseline --gate(SRAM1 57.4% / CCM 87.9%)、task-table 全绿;本轮未改任何 .c/.h。16 个文件字节卫生自查 BOM/CR/U+FFFD/行尾空格全清。已提交本地,未推送。
This commit is contained in:
@@ -11,7 +11,7 @@
|
||||
C. 文件名规范 目录名 / 文件名不得含空格与路径敏感字符(见 docs/文档规范.md §1)
|
||||
D. 章节引用 `docs/xxx.md` §N.M —— 目标文档里必须真有该编号的标题。
|
||||
刻意只校验**紧邻写法**(文档名与 § 之间只允许空白/反引号/括号,
|
||||
实测可把误报压到 0);昵称式引用如「内存方案 §1.4」不校验。
|
||||
实测可把误报压到 0);昵称式引用如「内存方案 §2.1」不校验。
|
||||
|
||||
豁免(不算失效,不报错):
|
||||
* 以 `[计划]` 前缀标记的路径(尚未创建的约定产物,见《项目审查与优化建议报告》D-3 建议)
|
||||
@@ -269,7 +269,7 @@ def stem_candidates(token: str, by_stem):
|
||||
def load_aliases():
|
||||
"""昵称别名表(`scripts/section_aliases.json`):「内存方案」→ 具体文档。
|
||||
|
||||
存在的意义:昵称式引用(「内存方案 §1.4」)读起来顺、机器判不了;登记一次别名,
|
||||
存在的意义:昵称式引用(「内存方案 §2.1」)读起来顺、机器判不了;登记一次别名,
|
||||
正文不用改,引用就纳入校验。表里没有的昵称不猜(宁缺毋滥)。
|
||||
"""
|
||||
global _alias_map
|
||||
@@ -337,7 +337,7 @@ def sec_parent_exists(heads, ref: str) -> bool:
|
||||
return parent in heads or any(h.startswith(parent + ".") for h in heads)
|
||||
|
||||
|
||||
# 昵称前常挂的动词/介词:「见内存方案 §1.4」「顺序按报告 §6.5」——先剥掉再查别名/文件名
|
||||
# 昵称前常挂的动词/介词:「见内存方案 §2.1」「顺序按报告 §6.5」——先剥掉再查别名/文件名
|
||||
CUE_STRIP_PREFIXES = ("参见", "详见", "并同步更新", "教训见", "用法与基线见", "反向依赖在",
|
||||
"改动前先看", "多口需求见", "写入顺序违反", "宏位与", "顺序按",
|
||||
"依据", "参照", "对照", "违反", "参考", "按", "见", "如", "该", "以",
|
||||
|
||||
@@ -16,7 +16,7 @@
|
||||
"N-33": {
|
||||
"to": null,
|
||||
"status": "void",
|
||||
"note": "栈余量收口条目已随 M1 台架闭环销项(2026-10-12),登记簿行已删,结论在 docs/内存管理/RAM使用分析与优化方案.md §1.4"
|
||||
"note": "栈余量收口条目已随 M1 台架闭环销项(2026-10-12),登记簿行已删,结论在 docs/内存管理/RAM使用分析与优化方案.md §4.0.6(原 §1.4,2026-10-22 层级编号)"
|
||||
},
|
||||
"N-30": {
|
||||
"to": null,
|
||||
|
||||
@@ -11,7 +11,7 @@ RAM 预算门禁 + 趋势台账(登记簿 N-27 前半 / 审查报告 §5.5 三
|
||||
CI 盲区登记在 `docs/任务规划/测试与架构专项.md` A-5 残余)。
|
||||
`--gate` 同时校验台账受管区与 `.map` 一致(防漂移,同 `mem-numbers` 思路)。
|
||||
2. **趋势基线** `scripts/ram_baseline.tsv`(`--update` 每次 @build 后追加一行;
|
||||
`--trend` 看趋势并高亮 RW+ZI 较上一行增长 >1 KB 的对象——方案 §0.3
|
||||
`--trend` 看趋势并高亮 RW+ZI 较上一行增长 >1 KB 的对象——方案 §4.0.3
|
||||
"ZI 增量 >1KB 必须解释"的机械化)。
|
||||
3. **台账受管区**(`--write` 同步 `docs/内存管理/RAM预算台账.md` 的
|
||||
`MEM_BUDGET:BEGIN/END` 区:区域水位 + 子系统配额对照)。
|
||||
@@ -49,7 +49,7 @@ END = "<!-- MEM_BUDGET:END -->"
|
||||
|
||||
THRESHOLD_PCT = 92.0 # 报告 §5.5 第 1 条
|
||||
GATED_REGIONS = ("RW_IRAM1", "RW_CCM") # 门禁约束区;其余区仅展示
|
||||
GROWTH_ALERT_B = 1024 # 方案 §0.3:增量 >1 KB 必须解释
|
||||
GROWTH_ALERT_B = 1024 # 方案 §4.0.3:增量 >1 KB 必须解释
|
||||
TOP_N = 10 # tsv 记录 / 失败附表的对象数
|
||||
|
||||
RTOS_HEAP = "RTOS 堆"
|
||||
@@ -352,7 +352,7 @@ def cmd_trend(args):
|
||||
grew.append((obj, prev.get(obj, 0), int(b), delta))
|
||||
if grew:
|
||||
print(f"\n⚠ 较上一行 RW+ZI 增长 >{GROWTH_ALERT_B} B 的对象"
|
||||
f"(提交说明须解释,方案 §0.3):")
|
||||
f"(提交说明须解释,方案 §4.0.3):")
|
||||
for obj, old, new, d in sorted(grew, key=lambda t: -t[3]):
|
||||
print(f" +{d:>6,} B {obj} ({old:,} → {new:,})")
|
||||
else:
|
||||
|
||||
@@ -378,7 +378,7 @@ def main(argv=None):
|
||||
if old_abs.suffix.lower() in (".c", ".h") or new_abs.suffix.lower() in (".c", ".h"):
|
||||
print("ℹ 改了 .c/.h:已同步 uvprojx 与 CMakeLists;若**新增目录**还需把目录加进 "
|
||||
"uvprojx 的 <IncludePath>(见 new-source-file skill),随后跑 @build 验证")
|
||||
print("ℹ 正文里的**裸文件名/昵称引用**(如「内存方案 §1.4」「app_main.c/h」)无法机械判定,"
|
||||
print("ℹ 正文里的**裸文件名/昵称引用**(如「内存方案 §2.1」「app_main.c/h」)无法机械判定,"
|
||||
"已尽量改写,仍建议 grep 一遍旧名:git grep -n '<旧文件名>'")
|
||||
|
||||
# 3) 复核
|
||||
|
||||
Reference in New Issue
Block a user