guide: META-26 снят, форма обоснования рамками не ограничивается

- запрет слов обязательства в «Почему» был лишним по построению: правило о
  заглавных уже делает строчное «обязан» ненормативным, так что второй копии
  нормы не возникает, а цена — автор воюет со списком слов вместо объяснения
- в LANGUAGE записано прямо: рамки у обоснования только смысловые, длина,
  рассуждение, примеры и ссылки на внешние практики и чужие проекты допустимы
- заведён раздел «Освободившиеся номера»: META-16 и META-26 с причинами. Без
  такого списка упоминание номера в прозе не отличить от ссылки на исчезнувшее
  правило — это же нужно будущей проверке ссылок
This commit is contained in:
av
2026-07-26 14:22:38 +03:00
parent 3e0ec46134
commit c8071dc438
4 changed files with 29 additions and 66 deletions
+3 -4
View File
@@ -39,10 +39,9 @@ code in this repository.
Исключение — строка о версии языка, которая их перечисляет. Исключение — строка о версии языка, которая их перечисляет.
- «Почему» отвечает на «что сломается, если сделать иначе», а не - «Почему» отвечает на «что сломается, если сделать иначе», а не
пересказывает норму. «Потому что так принято» — не обоснование. пересказывает норму. «Потому что так принято» — не обоснование.
- META-26: «Почему» не повторяет норму словами обязательства — на неё - Форма «Почему» не ограничена: рамки смысловые. Длина, рассуждение, примеры,
ссылаются идентификатором. Утверждения о невозможности (`нельзя`) — факт, а ссылки на внешние практики и чужие проекты — всё допустимо; запрещённых слов
не запрет, и допустимы. Модальность рекомендательная: греп по `должен`, нет. Обязательность несёт норма, и путаницу исключает правило о заглавных.
`обязан`, `следует` даёт кандидатов, но слова омонимичны.
- Служебные слова сценарного блока — тоже словарь набора: **КОГДА**, - Служебные слова сценарного блока — тоже словарь набора: **КОГДА**,
**ТОГДА**, **И**, **ИЛИ** (по-английски `WHEN`/`THEN`/`AND`/`OR`). Одна **ТОГДА**, **И**, **ИЛИ** (по-английски `WHEN`/`THEN`/`AND`/`OR`). Одна
форма на роль, заглавными. Модальностью не являются, в строку о версии форма на роль, заглавными. Модальностью не являются, в строку о версии
+12 -21
View File
@@ -36,8 +36,7 @@ prefix: META
записано, и это случай META-25: регуляркой имя проверяется тривиально, но записано, и это случай META-25: регуляркой имя проверяется тривиально, но
обоснование сводится к «чтобы имя файла в реестре префиксов писалось одним обоснование сводится к «чтобы имя файла в реестре префиксов писалось одним
способом» — вреда от нарушения нет, значит и высшей модальности нет, а на способом» — вреда от нарушения нет, значит и высшей модальности нет, а на
СЛЕДУЕТ такое правило не окупает строчку. Номер META-16, под которым оно СЛЕДУЕТ такое правило не окупает строчку.
существовало, оставлен свободным и не переиспользуется.
## Канон и копии ## Канон и копии
@@ -232,25 +231,6 @@ prefix: META
существует. Без обоснования не видно, когда причина отпала, — проверка существует. Без обоснования не видно, когда причина отпала, — проверка
продолжает работать по инерции, и возразить ей нечем, кроме как отключив. продолжает работать по инерции, и возразить ей нечем, кроме как отключив.
### META-26. Обоснование объясняет, а не требует
**НЕ СЛЕДУЕТ.** Абзац «Почему» не повторяет норму словами обязательства — на
ту норму, на которую он опирается, ссылаются идентификатором.
**Почему.** Обоснование, сформулированное как требование, заводит вторую
копию нормы: у оригинала есть идентификатор, у копии нет, и расходятся они
при первой же правке оригинала. Читатель не отличает объяснение от
досказанной нормы, а отступление от копии не адресуемо — ссылаться на абзац
нечем.
Утверждения о невозможности («нельзя», «не выйдет») сюда не относятся: они
описывают, чего не бывает, а не то, что запрещено, и проза — их законное
место. Модальность здесь рекомендательная не по слабости, а по META-6:
машинная проверка даёт кандидатов, а не вердикт, потому что слова
омонимичны — «за попыткой следует повтор» и «присвоение становится
обязанностью каждого вызывающего» описывают ход событий. Вердикт остаётся за
чтением, грепу достаётся роль подсказки.
### META-11. У трудноизменяемого слоя область действия пишется явно ### META-11. У трудноизменяемого слоя область действия пишется явно
**ДОЛЖЕН.** Конвенция о схеме БД, формате хранения или раскладке директорий **ДОЛЖЕН.** Конвенция о схеме БД, формате хранения или раскладке директорий
@@ -357,3 +337,14 @@ prefix: META
идентификатором служит и напоминанием, и адресом, по которому за идентификатором служит и напоминанием, и адресом, по которому за
подробностями идут; перенос деталей туда же вернул бы задачу поддержки двух подробностями идут; перенос деталей туда же вернул бы задачу поддержки двух
текстов. текстов.
## Освободившиеся номера
Номер удалённого правила не переиспользуется, поэтому дыры в нумерации —
норма. Здесь перечислено, что́ под ними было: без этого упоминание номера в
прозе не отличить от ссылки на исчезнувшее правило.
| Номер | Что было | Почему снято |
|---|---|---|
| META-16 | имя файла — kebab-case | вреда от нарушения нет (META-25); осталось прозой в «Оформлении» |
| META-26 | запрет слов обязательства в «Почему» | правило о заглавных уже делает строчное слово ненормативным, а форму обоснования рамками не ограничивают |
+10 -5
View File
@@ -107,6 +107,15 @@ version: 1
«Почему» отвечает на «что сломается, если сделать иначе», а не пересказывает «Почему» отвечает на «что сломается, если сделать иначе», а не пересказывает
норму другими словами. «Потому что так принято» — не обоснование. норму другими словами. «Потому что так принято» — не обоснование.
Форма обоснования при этом ничем не ограничена: рамки здесь только
смысловые. Абзац может быть длинным, вести рассуждение, приводить пример,
ссылаться на внешние практики, стандарты и чужие проекты — канон это уже
делает («адаптация OpenTelemetry», «как по умолчанию в zap и zerolog»,
двенадцатишаговая процедура SQLite). Запрещённых слов и обязательной
структуры у обоснования нет, и заводить их не нужно: обязательность несёт
норма, а обоснование её объясняет — путаницу между этими двумя ролями
исключает правило о заглавных.
## Модальные слова ## Модальные слова
Инвариант языка — **шкала**: пять ступеней в четырёх категориях ISO/IEC Инвариант языка — **шкала**: пять ступеней в четырёх категориях ISO/IEC
@@ -395,8 +404,4 @@ MIGR-6 не соблюдается в легаси-таблицах `show_histor
- строки таблицы взаимоисключающи либо политика совпадения объявлена; - строки таблицы взаимоисключающи либо политика совпадения объявлена;
- перечисленные в таблице случаи покрывают область действия; - перечисленные в таблице случаи покрывают область действия;
- норма исполнима без обращения к другим файлам; - норма исполнима без обращения к другим файлам;
- обоснование отвечает на «что сломается», а не пересказывает норму; - обоснование отвечает на «что сломается», а не пересказывает норму.
- обоснование не повторяет норму словами обязательства (META-26). Кандидатов
находит греп по `должен`, `обязан`, `следует`, `необходимо` в абзацах
«Почему», но вердикт остаётся за чтением: слова омонимичны — «за попыткой
следует повтор» требованием не является.
+4 -36
View File
@@ -122,41 +122,9 @@ Go-бинарь со своим релизным циклом, ставить ч
Работа читательская, машине не даётся; в список проверок она уже записана в Работа читательская, машине не даётся; в список проверок она уже записана в
разделе «Чтением, потому что машине не даётся». разделе «Чтением, потому что машине не даётся».
## 7. Пересказ нормы в «Почему» — вычитать под META-26
Исходный вопрос («где факт записан модальным словом») закрыт по существу:
канон просмотрен, и такой ошибки в нём практически нет. Тринадцать строчных
«нельзя» оказались корректными — это утверждения о невозможности, ISO-евская
возможность в прозе, ровно как задумано. Единственный настоящий случай,
SLOG-12, починен: факт про `slog` уехал в «Почему», норма повторяет свой
заголовок.
Зато нашёлся обратный класс, под который заведён META-26: норма пересказана
словами обязательства внутри «Почему». Греп даёт десять совпадений, из них
семь — кандидаты на правку, вердикт за чтением:
```
arch/db-identifiers.md:61 «Нормализация регистра (KEYS-4) … обязаны»
arch/time.md:43 «текстовому полю обязан давать порядок событий»
arch/time.md:91 «Формат, зона (TIME-1) и ширина (TIME-2) обязаны»
lang/go/db-schema.md:88 «именно там он обязан действительно обращать up»
lang/go/logging.md:61 «по TIME-2 так и должно быть»
lang/go/logging.md:85 «совпадать они обязаны»
lang/go/logging.md:295 «выборка … не должна»
```
Лечение в большинстве случаев — заменить пересказ ссылкой на идентификатор,
который в тех же фразах уже стоит рядом.
Остальные три совпадения отброшены как омонимы: «за попыткой следует повтор»
(`logging.md:400`), «становится обязанностью каждого вызывающего» (`db-
identifiers.md:42`), «заметить можно, только зная, что они должны были быть»
(`logging.md:186`) — все три описывают ход событий, а не требуют. Это и есть
причина, по которой META-26 — рекомендация: греп находит слово, а не
нарушение.
## Мелкое, не закрыто ## Мелкое, не закрыто
- `conv check` должен уметь отличать ссылку на удалённое правило от - `conv check` и отличие ссылки на удалённое правило от упоминания дыры:
упоминания дыры: сейчас `META-16` в прозе «Оформления» даёт ложное теперь освободившиеся номера перечислены в `GUIDE.md`, раздел
срабатывание. «Освободившиеся номера», — проверке остаётся читать этот список, а не
угадывать. Реализации по-прежнему нет.