механизация больше не разрешает удалять норму

- META-9 снят: удаление оставляло подписчика, пришедшего после, без нормы и
  без проверки, а «механизировано у всех» канону не проверить — списка
  подписчиков у него нет по построению
- META-8 переписан в запрет: норма остаётся в правиле, чем бы её ни
  проверяли; линтер сообщает, что нарушено, но не что требуется (META-6)
- МЕХАНИЗИРОВАНО объявлена свойством репозитория: в тексте конвенции отметки
  нет, её место — запись о механизации ниже маркера (META-7)
This commit is contained in:
av
2026-07-26 15:41:52 +03:00
parent fe61ecd6c5
commit 67d51db212
5 changed files with 76 additions and 96 deletions
+34 -30
View File
@@ -69,8 +69,8 @@ version: 1
- **Отступления.** «У нас не так» бесполезно, пока не сказано, что именно
«не так». Со ссылкой на правило отступления становятся счётными: видно,
сколько правил конвенции репозиторий реально не соблюдает.
- **Промоут находки.** Путь «находка → конвенция → правило линтера
удаление прозы» требует ручки, за которую берут конкретное правило.
- **Промоут находки.** Путь «находка → конвенция → правило линтера» требует
ручки, за которую берут конкретное правило.
Общий знаменатель — **идентификатор**. Модальные слова и таблицы полезны,
но вторичны.
@@ -238,9 +238,10 @@ Directives, Part 2, по одной форме записи на ступень,
| рекомендация против | НЕ СЛЕДУЕТ | SHOULD NOT |
| разрешение | ДОПУСКАЕТСЯ | MAY |
**Метки правила.** Обязательности не задают, а размечают его части.
Стандартом не даются ни в одном языке: в BCP 14 таких понятий нет, слова
подбираются под язык так же, как остальные.
**Метки.** Обязательности не задают, а размечают: ПОЧЕМУ — часть правила,
МЕХАНИЗИРОВАНО — запись о проверке в копии. Стандартом не даются ни в одном
языке: в BCP 14 таких понятий нет, слова подбираются под язык так же, как
остальные.
| Метка | Русский | Английский |
|---|---|---|
@@ -304,33 +305,35 @@ Directives, Part 2, по одной форме записи на ступень,
инструментов. Линтер сильнее чтения — он не забывает, ничего не стоит на
каждом прогоне и краснеет до ревью, — поэтому механизация желательна везде,
где проверка пишется (META-27), и остаётся концом пути «находка → конвенция →
проверка → удаление прозы». Но обязательным условием высшей ступени она не
является: иначе весь канон стоял бы в СЛЕДУЕТ до появления скриптов, которых
пока нет ни одного.
проверка». Но обязательным условием высшей ступени она не является: иначе весь
канон стоял бы в СЛЕДУЕТ до появления скриптов, которых пока нет ни одного.
Когда правило механизировано у всех потребителей, его норма из канона
удаляется, а модальность и обоснование остаются:
**Механизация нормы не заменяет и не сокращает.** Норма остаётся в правиле
навсегда — как и обоснование (META-8, META-10), — сколько бы проверок её ни
подпирало. Причин три:
- **линтер сообщает, что нарушено, но не сообщает, что требуется.** Без нормы
правило нечем исполнить и не с чем сверить вердикт проверки, а проверяющий
по умолчанию читает именно норму;
- **подписчики появляются позже.** Репозиторий, подключившийся через год,
получил бы правило без нормы и без линтера — ни текста, ни проверки;
- **«механизировано у всех» набору не проверить:** списка подписчиков у него
нет по построению.
**Отметка — свойство репозитория, а не набора.** Механизирована норма или нет,
зависит от того, чей это репозиторий, поэтому в тексте конвенции отметки нет:
её место — запись о механизации в локальной части копии, со ссылкой на
идентификатор правила (META-7).
```markdown
### XMIG-6. Дефолтов времени в схеме БД нет
<!-- conv:local -->
**ДОЛЖЕН. МЕХАНИЗИРОВАНО.** Проверяется общим правилом линтера;
формулировка удалена, потому что дублировала работающую проверку.
**ПОЧЕМУ.** Дефолт превращает забытую вставку в тихо работающий код…
XMIG-2, XMIG-4 — МЕХАНИЗИРОВАНО: `internal/archrules`, в новых миграциях.
```
- Идентификатор и заголовок сохраняются: ссылки из репозиториев продолжают
указывать на то же утверждение.
- Модальность сохраняется, поэтому «все ли ДОЛЖЕН механизированы»
остаётся вычислимым вопросом, а не предметом чтения всего канона.
- Обоснование остаётся навсегда — линтер сообщает, что нарушено, но не
сообщает, зачем правило существует, и без обоснования нельзя понять,
когда проверку пора отменять.
Факт «механизировано у всех» устанавливается вручную: канон по построению
не знает списка подписчиков, и обойти репозитории перед удалением нормы —
часть работы, а не то, что можно проверить автоматически.
Так у правила остаются оба атрибута сразу: обязательность — в норме, которая
приезжает из набора и одинакова у всех, способ проверки — в записи, которая
принадлежит репозиторию и у каждого своя.
## Таблицы решений
@@ -459,8 +462,7 @@ Directives, Part 2, по одной форме записи на ступень,
```markdown
<!-- conv:local -->
XMIG-2, XMIG-4 механизированы — `internal/archrules` (проверяются в новых
миграциях).
XMIG-2, XMIG-4 — МЕХАНИЗИРОВАНО: `internal/archrules`, в новых миграциях.
XMIG-6 не соблюдается в легаси-таблицах `show_history`, `queue`: составные
ключи там появились до конвенции, переписывание требует миграции данных.
@@ -489,8 +491,8 @@ XMIG-6 не соблюдается в легаси-таблицах `show_histor
- заголовки правил файла используют только его собственный префикс;
- номера уникальны внутри файла и не имеют пропусков вниз (новое правило
берёт следующий свободный, а не первый освободившийся);
- у каждого `### <ПРЕФИКС>-<n>` есть модальное слово и блок ПОЧЕМУ;
отметка МЕХАНИЗИРОВАНО стоит рядом с модальностью, а не вместо неё;
- у каждого `### <ПРЕФИКС>-<n>` есть модальное слово, норма и блок ПОЧЕМУ:
ни норма, ни обоснование не удаляются никогда (META-8, META-10);
- вводная проза содержит строку о версии языка;
- ссылки вида `<ПРЕФИКС>-<n>` — хоть в тексте канона, хоть в локальной части
копии — указывают на правила, которые ещё существуют;
@@ -509,6 +511,8 @@ XMIG-6 не соблюдается в легаси-таблицах `show_histor
- имя темы, названное в ссылке или в подписке потребителя, тоже разрешается по
манифесту: ссылка на снятую тему не проходит молча;
- префиксы локальных правил копии начинаются на `X`;
- отметки МЕХАНИЗИРОВАНО в тексте конвенции нет: её место — запись о
механизации в локальной части копии (META-7);
- префикс **чужой темы** не встречается в абзаце с модальностью (META-20);
префикс арх-слоя своей темы там допустим (META-24), префикс другого языка
или стека — нет;