From 62c5645dd44a67298a7c5df7b6122bd4d77d98ba Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sat, 25 Jul 2026 19:17:33 +0300 Subject: [PATCH] =?UTF-8?q?common:=20=D1=8F=D0=B7=D1=8B=D0=BA=20=D0=B4?= =?UTF-8?q?=D0=BE=D0=BF=D0=BE=D0=BB=D0=BD=D0=B5=D0=BD=20=D1=81=D0=BE=D1=81?= =?UTF-8?q?=D1=82=D0=BE=D1=8F=D0=BD=D0=B8=D0=B5=D0=BC=20=D0=9C=D0=95=D0=A5?= =?UTF-8?q?=D0=90=D0=9D=D0=98=D0=97=D0=98=D0=A0=D0=9E=D0=92=D0=90=D0=9D?= =?UTF-8?q?=D0=9E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - правило, чья норма уехала в линтер, сохраняет номер и «Почему», а место нормы занимает отметка — иначе получался объект без модальности - записано, что факт «механизировано у всех» устанавливается вручную: канон списка подписчиков не знает по построению --- common/language.md | 44 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 10 deletions(-) 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