common: язык дополнен состоянием МЕХАНИЗИРОВАНО

- правило, чья норма уехала в линтер, сохраняет номер и «Почему», а место
  нормы занимает отметка — иначе получался объект без модальности
- записано, что факт «механизировано у всех» устанавливается вручную:
  канон списка подписчиков не знает по построению
This commit is contained in:
av
2026-07-25 19:17:33 +03:00
parent 31d0620f55
commit 62c5645dd4
+34 -10
View File
@@ -78,9 +78,8 @@
Модальность живёт на **правиле**, а не на файле. Прежний файловый статус
(`status: рекомендуемая` / `обязательная` в шапке) отменён: он неизбежно
врал, потому что один файл смешивает жёсткие требования с советами. В ещё
не переведённых конвенциях ключ остаётся как метка «этот файл — проза», без
нормативного значения, и исчезает при переводе.
врал, потому что один файл смешивает жёсткие требования с советами. В шапке
остаются только `extends` и служебные ключи копии.
Мы **не используем SHALL и прочие английские ключевые слова**. Они заняты
спецификациями (OpenSpec), и общий словарь стирал бы границу «конвенция —
@@ -99,6 +98,34 @@
Порядок правил в файле выбирается по читаемости, не по номерам: номер — это
идентификатор, а не позиция.
## Правило, чья норма уехала в линтер
Когда правило механизировано у всех потребителей, его норма из канона
удаляется, а обоснование — нет. Остаётся **правило без модальности**, и
чтобы оно не выглядело недописанным, место нормы занимает отметка:
```markdown
### R6. Дефолтов времени в схеме БД нет
**МЕХАНИЗИРОВАНО.** Проверяется общим правилом линтера; формулировка
удалена, потому что дублировала работающую проверку.
**Почему.** Дефолт превращает забытую вставку в тихо работающий код…
```
- Номер и заголовок сохраняются: ссылки из репозиториев продолжают
указывать на то же утверждение.
- «Почему» остаётся навсегда — линтер сообщает, что нарушено, но не
сообщает, зачем правило существует, и без обоснования нельзя понять,
когда проверку пора отменять.
- **МЕХАНИЗИРОВАНО** — не шестое модальное слово: оно не задаёт
обязательность, а сообщает, что обязательность теперь обеспечена машиной.
В остальном такое правило равно ДОЛЖЕН.
Факт «механизировано у всех» устанавливается вручную: канон по построению
не знает списка подписчиков, и обойти репозитории перед удалением нормы —
часть работы, а не то, что можно проверить автоматически.
## Таблицы вместо сценариев
Часть правил **классифицирует ситуации**: какой уровень лога, какая
@@ -166,16 +193,13 @@ R6 — не соблюдается в легаси-таблицах `show_histor
- номера уникальны внутри файла и не имеют пропусков вниз (новое правило
берёт следующий свободный, а не первый освободившийся);
- у каждого `### R<n>` есть модальное слово и блок «Почему»;
- у каждого `### R<n>` есть модальное слово (или отметка МЕХАНИЗИРОВАНО) и
блок «Почему»;
- ссылки вида `R<n>` в локальных регионах копии указывают на правила,
которые в каноне ещё существуют;
- модальные слова не встречаются вне правил.
## Порядок перевода
Конвенции переводятся на этот язык по мере касания, а не кампанией.
Смешение форм в каноне допустимо: пока файл не тронут, он остаётся прозой
со статусом в шапке.
Сейчас на формальном языке записаны `arch/db-identifiers.md` и
`stack/ansible/app-directories.md`.
Все конвенции канона записаны на этом языке. Новая конвенция пишется на нём
сразу; смешение форм в каноне больше не предполагается.