язык записи опёрт на стандарты, словарь стал параметром

- шкала обязательности объявлена инвариантом, а набор ключевых слов —
  параметром естественного языка набора: для английского готовый словарь
  даёт BCP 14, для прочих берут перевод стандарта или делают свой; отклонены
  синонимы ступеней и `SHALL`, занятый OpenSpec
- применены шесть дельт: нормативно только заглавное написание (RFC 8174),
  ДОЛЖЕН требует названного вреда и машинной проверки сразу, ДОПУСКАЕТСЯ
  адресовано рецензенту, МЕХАНИЗИРОВАНО выведено из шкалы в отметку рядом с
  модальностью (ISO/IEC/IEEE 29148), у таблиц объявлены политика совпадения
  и полнота (DMN)
- «Форма записи — LANGUAGE.md» в двенадцати конвенциях заменена строкой о
  версии языка по образцу boilerplate BCP 14: пути канона в копии не
  существует, а словарь и правило заглавных строка несёт сама
This commit is contained in:
av
2026-07-26 13:42:10 +03:00
parent fea0285619
commit 9318087248
16 changed files with 395 additions and 205 deletions
+22 -8
View File
@@ -21,15 +21,28 @@ code in this repository.
`**МОДАЛЬНОСТЬ.** норма`, абзац `**Почему.** …`. Правило без «Почему» не
принимается.
- Норма — одна фраза; если в неё не влезает, это два правила.
- Модальные слова: **ДОЛЖЕН**, **НЕ ДОЛЖЕН**, **СЛЕДУЕТ**, **НЕ СЛЕДУЕТ**,
**ДОПУСКАЕТСЯ**, плюс не-модальная отметка **МЕХАНИЗИРОВАНО**. Английские
ключевые слова (SHALL, MUST) не используются — они заняты OpenSpec.
- Модальные слова не употребляются вне правил: ни в «Область действия», ни в
«Связано», ни в локальной части копии, ни во вводной прозе.
- Шкала инвариантна, словарь — параметр языка набора. Канон русский, значит
слова: **ДОЛЖЕН**, **НЕ ДОЛЖЕН**, **СЛЕДУЕТ**, **НЕ СЛЕДУЕТ**,
**ДОПУСКАЕТСЯ**. Словарь один на канон, синонимов на ступень нет.
- `SHALL` не используется ни в одном словаре — занято OpenSpec.
- Нормативно только заглавное написание (правило RFC 8174): строчное
«должен» в прозе нормой не является.
- ДОЛЖЕН требует двух условий сразу: нарушение причиняет названный вред
и норма проверяема машиной. Проверяемость сама по себе до ДОЛЖЕН не
повышает.
- ДОПУСКАЕТСЯ адресовано рецензенту: помеченный им выбор на ревью не
обсуждается.
- **МЕХАНИЗИРОВАНО** — не модальность, а способ проверки: отметка стоит
рядом с модальным словом (`**ДОЛЖЕН. МЕХАНИЗИРОВАНО.**`), а не вместо него.
- Заглавные модальные слова не употребляются вне правил: ни в «Область
действия», ни в «Связано», ни в локальной части копии, ни во вводной прозе.
Исключение — строка о версии языка, которая их перечисляет.
- «Почему» отвечает на «что сломается, если сделать иначе», а не
пересказывает норму. «Потому что так принято» — не обоснование.
- Правило, классифицирующее ситуации, пишется таблицей «ситуация → вердикт»;
строки нумеруются `KEYS-5.1`.
строки нумеруются `KEYS-5.1`. Строки взаимоисключающи по умолчанию; иной
порядок объявляется явно, а перечисленные случаи покрывают область
действия.
- Модальность принадлежит правилу, а не файлу: `status:` в шапке отменён.
## Идентификаторы и префиксы
@@ -88,8 +101,9 @@ code in this repository.
## Оформление файла
Шапка `prefix:` (плюс `extends:`) → `# Тема` → вводная проза со строкой
«Форма записи — `LANGUAGE.md`» → `## Область действия` (обязателен для
Шапка `prefix:` (плюс `extends:`) → `# Тема` → вводная проза → отдельным
абзацем строка о версии языка (её точный текст — в `LANGUAGE.md`, раздел
«Ссылка на язык из конвенции») → `## Область действия` (обязателен для
трудноизменяемых слоёв — META-11) → правила → `## Связано` только с
каноническими ссылками (META-17). Имя файла — kebab-case по теме. Проза
переносится по ~76 колонок; таблицы и блоки кода не переносятся.