Skip to content
Apothem
一致性门禁

索引

Apothem 合规闸门——每个产出的制品都必须通过的十五项预发射闸门(M1–M15)的机械化部分。

十五项

ID强制规定检查类别失败 → 行动
1M1宿主项目无关性推理式修订以匹配宿主惯例
2M2编辑纪律(披露登记册)机械式添加披露标记
3M3十大质量维度推理式在失败维度上修订
4M4自我适用(存在已签署的闸门记录)机械式记录已签署记录块
5M5权威原则(不捏造身份/端点/密钥)机械式转入询问
6M6专业知识融入(浮现的缺口)推理式浮现缺口;引述精炼
7M7选项标注(推荐标记加理由依据)机械式标注选项集
8M8确定性(规定性散文中无含糊)机械式将含糊提升为条件分支
9M9视觉杠杆(结构性主题承载图示)推理式创作/刷新图示
10M10双向绑定(互惠反向指针闭合)机械式闭合半边
11M11敏捷冲刺(目标/待办/就绪定义/完成定义/评审/回顾)推理式重构为冲刺
12M12阶段报告与规范布局机械式创作汇总;迁移至规范布局
13M13代码工艺(检查/格式化/类型检查;魔法数字;裸 except)机械式按各语言代码工艺规则修订
14M14系统性(声明上游/下游/同级/执行者)推理式声明;在登记册中编入索引
15M15生产就绪(测试 + 文档 + CHANGELOG + 合规提交 + CI 通过 + semver 稳定性)机械式添加缺失的表面

严重性阶梯

严重性对闸门的影响
关键闸门 FAIL——无条件阻止发射
重要当 2 项及以上重要项同时失败时,闸门 FAIL
建议性闸门 WARN——记录在已签署记录中;不阻止发射

大多数机械化部分的匹配器默认为重要。M5(权威——密钥、捏造的端点)和 M12(孤儿输出)为关键

%% provenance: hand-authored %%
%% verified: 2026-07-06 %%
%% cross-reference: the Severity ladder table above; src/apothem/conformity/gate.py (severity aggregation) %%
flowchart TD
    accTitle: Conformity-gate severity-to-verdict decision flow
    accDescr: A finding's severity determines the gate verdict. A Critical finding — M5 authority or M12 orphan output — fails the gate and blocks emission unconditionally. Important findings block only when two or more fail simultaneously; a single Important finding does not block. Advisory findings are logged in the signed record and never block emission.
    F["Finding raised<br/>by a matcher"] --> S{"Severity?"}
    S -->|Critical| C["Critical<br/>M5 authority · M12 orphan output"]
    S -->|Important| I["Important<br/>most mechanical matchers"]
    S -->|Advisory| A["Advisory"]
    C --> FAIL["Gate FAIL<br/>emission blocked"]
    I --> Q{"2+ Important<br/>bars failing?"}
    Q -->|yes| FAIL
    Q -->|no| WARN["Gate WARN<br/>logged in signed record<br/>emission proceeds"]
    A --> WARN

机械化部分的匹配器

机械化部分存放于 src/apothem/conformity/*_grep.py,由 src/apothem/conformity/gate.py 编排。

匹配器功能
hedging_grep.pyM8检测规定性散文中的含糊措辞
option_annotation_grep.pyM7验证选项集上的 **Recommended** 标记加理由依据
user_confirm_grep.pyM5阻止 <USER-CONFIRM:…> 占位符发射
binding_reciprocity_grep.pyM10检测 ## Bindings (§0.j five-direction) 中的半边
orphan_output_grep.pyM12标记无消费者/无索引条目/无生产者归属的制品
bare_except_grep.pyM13检测无说明注释的 except:except Exception:
magic_number_grep.pyM13检测业务逻辑中的数字字面量
commented_out_code_grep.pyM13检测被注释掉的代码块
file_header_grep.pyM13验证单行 SPDX 许可头的存在
frontmatter_grep.pyM14验证下列四个权威指令目录上的必需前置字段
semver_stability_grep.pyM15检测无 MAJOR 版本号提升的破坏性公共 API 变更
production_ready_pr_grep.pyM15验证同一变更集纪律(测试 + 文档 + CHANGELOG)
secret_leak_grep.pyM15检测硬编码的密钥/凭据
unpinned_action_grep.pyM15验证 GitHub Actions 锁定到 commit SHA
always_on_budget_grep.py预算上限将常驻规则正文限制在 500 个实质性 token 以内

运行闸门

在已安装的harness上,闸门自动运行:Claude Code 的 settings.json 将其作为 PreToolUse 钩子接入,在每次 Write/Edit 之前调用 ~/.claude/.apothem/support/conformity/gate.py 处的 物化副本。从源码检出中,模块形式驱动同一套代码:

# 单文件分发(模仿 PreToolUse 钩子):
echo '{"tool_input": {"file_path": "path/to/file", "content": "..."}}' \
    | python -m apothem.conformity.gate --hook

# 跨仓库的组合扫描:
python -m apothem.conformity.gate --sweep src/ site/content/docs/ rules/

完整流程参见运行合规闸门

参考

On this page