目标
新增"抑制标记预算"门:# noqa、eslint-disable、type: ignore、.gitleaksignore、coverage exclude、arch-lint allowlist 等抑制标记按净增量设硬阈值(单 PR ≤ 3,且累计总量不得上升)。把"逐条人审"换成"配额 + 越界才叫人"。
背景(源自 #81 §4.1)
抑制标记是 agent 让门禁变绿的第二条捷径:lint 红就加 noqa,类型错就加 ignore,泄密扫描红就加 gitleaksignore。无人值守下,每个抑制标记都是一次未被审判的门禁豁免。预算制让"零星合理豁免"自动通过,"批量规避"被拦下。
涉及文件
CI-Workflows/scripts/suppression-budget.sh(新增,检测逻辑)
CI-Workflows/.github/workflows/check.yml(接入)
governance/policy/testing.yaml 或新 policy/suppressions.yaml(标记清单、单 PR 阈值、总量基线声明)
- 各业务仓 gate needs 链
执行步骤
- 声明抑制标记全集(按语言/工具枚举正则:
noqa、eslint-disable、type: ignore、gitleaks:allow、nosec、coverage: ignore、.gitleaksignore 行、arch-lint allowlist 条目等),落盘到 policy 文件,机器可解析。
- 实现计数脚本:
- 单 PR 维度:diff 中抑制标记净增量 > 3 → 红;
- 总量维度:main 上标记总数为基线(落盘或 API 取),PR 合入后总量上升 → 红(下降/持平 → 绿);
- 豁免:引用 scope 覆盖的 ADR(与 P2-1 同款逃生门,入账)。
- 接入 gate needs 链(aggregator 严格断言模式)。
- 对现有仓做一次基线盘点:当前各标记总量写进 policy 作为初始基线。
验收标准
- 净增 ≤3 的 PR 绿;净增 >3 的 PR 红;净减的 PR 绿。
- 累计总量上升的 PR 红(即使单 PR ≤3)。
- 基线盘点完成,各仓初始总量落盘。
测试方法(预先指定)
T1 阈值边界(核心,参数化):在测试仓开三个 PR:
- P-A:新增 3 个
noqa → 断言绿;
- P-B:新增 4 个
noqa → 断言红,错误信息指明超阈值 4>3;
- P-C:删除 2 个现有抑制标记 → 断言绿。
T2 总量维度(核心):
- P-D:新增 2 个标记(单 PR 达标)但导致该仓总量超过基线 → 断言红;
- 断言错误信息区分"单 PR 超阈值"与"总量上升"两种红因。
T3 标记全集覆盖(单元级):构造含每种已声明标记的 fixture diff(每种至少 1 例 + 1 个相似但不应命中的干扰文本,如注释里写 "noqa" 字样),断言计数器输出与预标注完全一致,无漏报无误报。
T4 逃生门(正向):复刻 P-B 并引用 scope 覆盖的 ADR → 断言绿且入账。
T5 基线机制:修改 policy 中基线值(±1)后重跑同一 PR,断言判定结果随之翻转——证明判定确实消费基线而非硬编码。
依赖
- P1-3(aggregator 模式)
- P2-1(同款接入与逃生门机制,建议同一 PR 系列落地,减少各仓 caller 改动次数)
目标
新增"抑制标记预算"门:
# noqa、eslint-disable、type: ignore、.gitleaksignore、coverage exclude、arch-lint allowlist 等抑制标记按净增量设硬阈值(单 PR ≤ 3,且累计总量不得上升)。把"逐条人审"换成"配额 + 越界才叫人"。背景(源自 #81 §4.1)
抑制标记是 agent 让门禁变绿的第二条捷径:lint 红就加 noqa,类型错就加 ignore,泄密扫描红就加 gitleaksignore。无人值守下,每个抑制标记都是一次未被审判的门禁豁免。预算制让"零星合理豁免"自动通过,"批量规避"被拦下。
涉及文件
CI-Workflows/scripts/suppression-budget.sh(新增,检测逻辑)CI-Workflows/.github/workflows/check.yml(接入)governance/policy/testing.yaml或新policy/suppressions.yaml(标记清单、单 PR 阈值、总量基线声明)执行步骤
noqa、eslint-disable、type: ignore、gitleaks:allow、nosec、coverage: ignore、.gitleaksignore行、arch-lint allowlist 条目等),落盘到 policy 文件,机器可解析。验收标准
测试方法(预先指定)
T1 阈值边界(核心,参数化):在测试仓开三个 PR:
noqa→ 断言绿;noqa→ 断言红,错误信息指明超阈值 4>3;T2 总量维度(核心):
T3 标记全集覆盖(单元级):构造含每种已声明标记的 fixture diff(每种至少 1 例 + 1 个相似但不应命中的干扰文本,如注释里写 "noqa" 字样),断言计数器输出与预标注完全一致,无漏报无误报。
T4 逃生门(正向):复刻 P-B 并引用 scope 覆盖的 ADR → 断言绿且入账。
T5 基线机制:修改 policy 中基线值(±1)后重跑同一 PR,断言判定结果随之翻转——证明判定确实消费基线而非硬编码。
依赖