13001f2ae4
task-32 裁定落成可执行件(道F 交付)。不是二选一而是**分权**:静态最坏链 margin 仍是唯一拦提交项(由 `stack_report.py` 守,它本就把运行时峰值取进 max);新增 `stack_gate.py` 管台架侧——趋势只出 WARN, **绝对底线**(free_min < 25% cfg)是运行时唯一有 FAIL 权限的一档,**采集健康门不过 = VOID / exit 2**, 不红不绿、不进台账。把「daemon 死了 status 仍报正常、rx_lines=0」那类事故机械化:门不过与设备故障 exit 1 分开记,按码聚合的人不会把端口没开当成又崩了一次栈。 容差是推导的:tol = 上取整到 16 B 的 max(128 B, 2×实测摆动),实测 80 B ⇒ 统一 160 B,登记进 `scripts/stack_tolerance.tsv` 带来源列;**改数权限写死**——只有台架重测后才允许回填,禁止为让某轮变绿 而调大容差(被这把尺考核的人不得当场决定尺子的松紧),且这句话**紧贴数值写**。 `--selftest` 14 条能红,开发中抓到作者三个真错(身份戳正则把 __DATE__ 月份写成三位数字、一度把跨轮戳 不同当 VOID 会让判据永不可用、文档 §4.0.2 被 doc-links 抓跨文档串号)。**不接 pre-commit**:它的输入 是台架串口采集,提交时既无设备也无当轮日志,挂上去要么永远 SKIP、要么拿上一轮日志判这一轮的码(与 体积门禁那条假凭证同族)。
1.2 KiB
1.2 KiB
| 1 | # scripts/stack_tolerance.tsv -- 栈水位跨轮容差(字节)。判据裁定见 | ||
|---|---|---|---|
| 2 | # docs/内存管理/RAM使用分析与优化方案.md §4.0.6 第③条;用法:scripts/stack_gate.py。 | ||
| 3 | # | ||
| 4 | # 容差是**推导值不是拍的**:tol(task) = 向上取整到 16 B 格的 max(128 B, 2 x 同镜像实测最大摆动)。 | ||
| 5 | # 实测来源(台架原始日志在 docs/测试说明/boot_log_data/): | ||
| 6 | # 2026-10-26 task-30(同一份 1d4b6a17 像、4 圈仅复位):uiTask 4116~4188 = 72 B、adcTask 80 B | ||
| 7 | # 2026-10-27 task-42(HEAD 像、4 圈仅复位):全部任务零摆动 | ||
| 8 | # -> 最大同镜像摆动 80 B => tol = max(128, 160) = **160 B**,全任务统一。 | ||
| 9 | # 谁改这个数:**只允许台架**在「改栈配置 / 抬栈 / 新增 DBG 日志调用点」后重测同镜像摆动并回填, | ||
| 10 | # 并在下面那列写上来源;**禁止为了让某一轮变绿而调大容差**(与 Forbidden 令牌那条同源: | ||
| 11 | # 判据的松紧不能由被它考核的人当场决定)。 | ||
| 12 | # 格式:task<TAB>bytes<TAB>来源 | ||
| 13 | default | 160 | task-30/42 实测同镜像最大摆动 80 B x2(2026-10-27) |
| 14 | net | 160 | 同上 |
| 15 | ftp | 160 | 同上 |
| 16 | ui | 160 | 同上 |
| 17 | timesync | 160 | 同上 |
| 18 | adc | 160 | 同上 |
| 19 | iec104 | 160 | 同上 |
| 20 | protect | 160 | 同上 |
| 21 | test | 160 | 同上(仅测试构建创建) |