diff --git a/common/language.md b/common/language.md index 95ec473..b00e119 100644 --- a/common/language.md +++ b/common/language.md @@ -78,9 +78,8 @@ Модальность живёт на **правиле**, а не на файле. Прежний файловый статус (`status: рекомендуемая` / `обязательная` в шапке) отменён: он неизбежно -врал, потому что один файл смешивает жёсткие требования с советами. В ещё -не переведённых конвенциях ключ остаётся как метка «этот файл — проза», без -нормативного значения, и исчезает при переводе. +врал, потому что один файл смешивает жёсткие требования с советами. В шапке +остаются только `extends` и служебные ключи копии. Мы **не используем SHALL и прочие английские ключевые слова**. Они заняты спецификациями (OpenSpec), и общий словарь стирал бы границу «конвенция — @@ -99,6 +98,34 @@ Порядок правил в файле выбирается по читаемости, не по номерам: номер — это идентификатор, а не позиция. +## Правило, чья норма уехала в линтер + +Когда правило механизировано у всех потребителей, его норма из канона +удаляется, а обоснование — нет. Остаётся **правило без модальности**, и +чтобы оно не выглядело недописанным, место нормы занимает отметка: + +```markdown +### R6. Дефолтов времени в схеме БД нет + +**МЕХАНИЗИРОВАНО.** Проверяется общим правилом линтера; формулировка +удалена, потому что дублировала работающую проверку. + +**Почему.** Дефолт превращает забытую вставку в тихо работающий код… +``` + +- Номер и заголовок сохраняются: ссылки из репозиториев продолжают + указывать на то же утверждение. +- «Почему» остаётся навсегда — линтер сообщает, что нарушено, но не + сообщает, зачем правило существует, и без обоснования нельзя понять, + когда проверку пора отменять. +- **МЕХАНИЗИРОВАНО** — не шестое модальное слово: оно не задаёт + обязательность, а сообщает, что обязательность теперь обеспечена машиной. + В остальном такое правило равно ДОЛЖЕН. + +Факт «механизировано у всех» устанавливается вручную: канон по построению +не знает списка подписчиков, и обойти репозитории перед удалением нормы — +часть работы, а не то, что можно проверить автоматически. + ## Таблицы вместо сценариев Часть правил **классифицирует ситуации**: какой уровень лога, какая @@ -166,16 +193,13 @@ R6 — не соблюдается в легаси-таблицах `show_histor - номера уникальны внутри файла и не имеют пропусков вниз (новое правило берёт следующий свободный, а не первый освободившийся); -- у каждого `### R` есть модальное слово и блок «Почему»; +- у каждого `### R` есть модальное слово (или отметка МЕХАНИЗИРОВАНО) и + блок «Почему»; - ссылки вида `R` в локальных регионах копии указывают на правила, которые в каноне ещё существуют; - модальные слова не встречаются вне правил. ## Порядок перевода -Конвенции переводятся на этот язык по мере касания, а не кампанией. -Смешение форм в каноне допустимо: пока файл не тронут, он остаётся прозой -со статусом в шапке. - -Сейчас на формальном языке записаны `arch/db-identifiers.md` и -`stack/ansible/app-directories.md`. +Все конвенции канона записаны на этом языке. Новая конвенция пишется на нём +сразу; смешение форм в каноне больше не предполагается. \ No newline at end of file