Skip to content
Apothem
Шлюз соответствия

Указатель

Ворота соответствия Apothem — механическая доля ворот предэмиссии из пятнадцати пунктов (M1-M15), которые должен пройти каждый эмитируемый артефакт.

Пятнадцать пунктов

ПунктIDМандатКласс проверкиОтказ → действие
1M1Агностицизм к проекту-хостуРассуждательнаяПереработать для соответствия конвенциям хоста
2M2Редакторская дисциплина (реестр раскрытия)МеханическаяДобавить маркеры раскрытия
3M3Десять измерений качестваРассуждательнаяПереработать по проваленным измерениям
4M4Самоприменение (подписанная запись ворот присутствует)МеханическаяЗафиксировать блок подписанной записи
5M5Принцип авторитета (без выдуманной идентичности / конечной точки / секрета)МеханическаяНаправить на запрос
6M6Внедрение экспертизы (выявленные пробелы)РассуждательнаяВыявить пробелы; процитировать уточнения
7M7Аннотация вариантов (маркер рекомендации + обоснование)МеханическаяАннотировать наборы вариантов
8M8Определённость (без уклончивостей в предписывающей прозе)МеханическаяВозвести уклончивости до условных ветвей
9M9Визуальный рычаг (структурные предметы несут диаграммы)РассуждательнаяСоздать / обновить диаграмму
10M10Двунаправленное связывание (взаимные обратные указатели замкнуты)МеханическаяЗамкнуть полурёбра
11M11Гибкие спринты (Цель / Бэклог / DoR / DoD / Ревью / Ретроспектива)РассуждательнаяРеструктурировать как спринты
12M12Отчётность по фазам и каноническая компоновкаМеханическаяСоздать сводку; переместить в каноническую компоновку
13M13Ремесло кода (линтер / форматтер / проверка типов; магическое число; bare-except)МеханическаяПереработать по правилам ремесла кода для каждого языка
14M14Системность (объявляет восходящие / нисходящие / равноправные / принуждающие)РассуждательнаяОбъявить; индексировать в реестрах
15M15Готовность к продакшену (тесты + документация + CHANGELOG + соответствующий коммит + зелёный CI + стабильность semver)МеханическаяДобавить недостающие поверхности

Лестница серьёзности

СерьёзностьЭффект на ворота
КритическаяВорота FAIL — эмиссия заблокирована безусловно
ВажнаяВорота FAIL, когда 2+ важных пункта проваливаются одновременно
СовещательнаяВорота 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Проверяет обязательные поля frontmatter в четырёх канонических директориях директив, перечисленных ниже
semver_stability_grep.pyM15Обнаруживает ломающие изменения публичного API без повышения версии MAJOR
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 ворота запускаются автоматически: settings.json Claude Code подключает их как хук PreToolUse, который вызывает материализованную копию по адресу ~/.claude/.apothem/support/conformity/gate.py перед каждым Write/Edit. Из исходного checkout модульная форма приводит в движение тот же код:

# Диспетчеризация одного файла (имитирует хук 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