---
"@ux-team/tvu-design-system": minor
---

闸的两处判据补漏（两个文件都在 `files[]` 白名单内，consumer 跑得到）：

- `scripts/lib/gate-output-contract.mjs` — `crossCheckExitVsTotals()` 的真值表补上缺的那一格：
  `checkedUnits === 0` 现在**一律**判 `empty-denominator`，不再只在 `exit 0 ∧ findings 0` 那一格看分母。
  此前一条闸只要报出了 findings，它的分母就完全不受校验 —— 包括 `findings=9 ∧ checkedUnits=0`
  这种自相矛盾的读数。另外 `checkedUnits` 缺失 / 非非负整数现在**抛**（fail closed），
  与「真的是 0」区分开。⚠️ **可能让此前被判 `blocked` / `reported-not-blocked` 的读数新报成异常** ——
  那是本次要暴露的存量假绿，不是回归。取值集合 `CROSS_CHECK_VERDICTS` 未增未减。

- `scripts/audit-stale-anchors.mjs` — 新增第 4b 类锚点 `code-span-path`：反引号里的**显式相对**
  文件路径（`../x/y.md`）现在会被校验。此前反引号路径刻意不校验，而它依赖的前提
  「导航式文件锚点都写成 markdown 链接」在扫描面内已不成立。
  ⚠️ **可能新报红**：被这三份规则文档用相对路径引用、而目标已删的文件。
  纯 basename / 外部仓路径 / glob 模式 / 命令行 span 均**不进候选**（各有 must-not-hit 单测）。

- `scripts/audit-stale-anchors.mjs`（第二批改动）— 扫描面从 3 份规则文档扩到**现行层 221 份**
  （`docs/**/*.md` 减 `_archive/**` 与 `STATUS-CHANGELOG.md`），但**只对 `path` + `code-span-path`
  两类判据生效**（其余四类各绑着一条为规则文档立的约定，铺过去实测会带 58 条存量）。
  同时修一处假阳：**整个落在反引号 code span 内的 markdown 链接不再算导航锚点**
  （那是被当字面量引用的字符串，实测现行层 1,632 个链接里 4 处属此类）。
  ⚠️ consumer 若把本闸指向自己的 docs 树，**可能新报红**：现行层里指向已删文件的相对路径链接。
  落地当天在本仓修掉 14 条真死链（**7 条路径深度写错**改路径 + **7 条目标已删**改为裸文本历史提及），另 2 条判据词法上分不开的假阳进具名 shrink-only 豁免表。

- `docs/MIGRATION_TO_V1.md`（在 `files[]` 白名单里随包发）— 修一处死链：
  `../GETTING_STARTED.md` → `./GETTING_STARTED.md`。
