diff --git a/CLAUDE.md b/CLAUDE.md index c0a7838..1ac7ac8 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -39,10 +39,9 @@ code in this repository. Исключение — строка о версии языка, которая их перечисляет. - «Почему» отвечает на «что сломается, если сделать иначе», а не пересказывает норму. «Потому что так принято» — не обоснование. -- META-26: «Почему» не повторяет норму словами обязательства — на неё - ссылаются идентификатором. Утверждения о невозможности (`нельзя`) — факт, а - не запрет, и допустимы. Модальность рекомендательная: греп по `должен`, - `обязан`, `следует` даёт кандидатов, но слова омонимичны. +- Форма «Почему» не ограничена: рамки смысловые. Длина, рассуждение, примеры, + ссылки на внешние практики и чужие проекты — всё допустимо; запрещённых слов + нет. Обязательность несёт норма, и путаницу исключает правило о заглавных. - Служебные слова сценарного блока — тоже словарь набора: **КОГДА**, **ТОГДА**, **И**, **ИЛИ** (по-английски `WHEN`/`THEN`/`AND`/`OR`). Одна форма на роль, заглавными. Модальностью не являются, в строку о версии diff --git a/GUIDE.md b/GUIDE.md index 9081c28..69afa98 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -36,8 +36,7 @@ prefix: META записано, и это случай META-25: регуляркой имя проверяется тривиально, но обоснование сводится к «чтобы имя файла в реестре префиксов писалось одним способом» — вреда от нарушения нет, значит и высшей модальности нет, а на -СЛЕДУЕТ такое правило не окупает строчку. Номер META-16, под которым оно -существовало, оставлен свободным и не переиспользуется. +СЛЕДУЕТ такое правило не окупает строчку. ## Канон и копии @@ -232,25 +231,6 @@ prefix: META существует. Без обоснования не видно, когда причина отпала, — проверка продолжает работать по инерции, и возразить ей нечем, кроме как отключив. -### META-26. Обоснование объясняет, а не требует - -**НЕ СЛЕДУЕТ.** Абзац «Почему» не повторяет норму словами обязательства — на -ту норму, на которую он опирается, ссылаются идентификатором. - -**Почему.** Обоснование, сформулированное как требование, заводит вторую -копию нормы: у оригинала есть идентификатор, у копии нет, и расходятся они -при первой же правке оригинала. Читатель не отличает объяснение от -досказанной нормы, а отступление от копии не адресуемо — ссылаться на абзац -нечем. - -Утверждения о невозможности («нельзя», «не выйдет») сюда не относятся: они -описывают, чего не бывает, а не то, что запрещено, и проза — их законное -место. Модальность здесь рекомендательная не по слабости, а по META-6: -машинная проверка даёт кандидатов, а не вердикт, потому что слова -омонимичны — «за попыткой следует повтор» и «присвоение становится -обязанностью каждого вызывающего» описывают ход событий. Вердикт остаётся за -чтением, грепу достаётся роль подсказки. - ### META-11. У трудноизменяемого слоя область действия пишется явно **ДОЛЖЕН.** Конвенция о схеме БД, формате хранения или раскладке директорий @@ -357,3 +337,14 @@ prefix: META идентификатором служит и напоминанием, и адресом, по которому за подробностями идут; перенос деталей туда же вернул бы задачу поддержки двух текстов. + +## Освободившиеся номера + +Номер удалённого правила не переиспользуется, поэтому дыры в нумерации — +норма. Здесь перечислено, что́ под ними было: без этого упоминание номера в +прозе не отличить от ссылки на исчезнувшее правило. + +| Номер | Что было | Почему снято | +|---|---|---| +| META-16 | имя файла — kebab-case | вреда от нарушения нет (META-25); осталось прозой в «Оформлении» | +| META-26 | запрет слов обязательства в «Почему» | правило о заглавных уже делает строчное слово ненормативным, а форму обоснования рамками не ограничивают | diff --git a/LANGUAGE.md b/LANGUAGE.md index 295cbe3..2bfb07c 100644 --- a/LANGUAGE.md +++ b/LANGUAGE.md @@ -107,6 +107,15 @@ version: 1 «Почему» отвечает на «что сломается, если сделать иначе», а не пересказывает норму другими словами. «Потому что так принято» — не обоснование. +Форма обоснования при этом ничем не ограничена: рамки здесь только +смысловые. Абзац может быть длинным, вести рассуждение, приводить пример, +ссылаться на внешние практики, стандарты и чужие проекты — канон это уже +делает («адаптация OpenTelemetry», «как по умолчанию в zap и zerolog», +двенадцатишаговая процедура SQLite). Запрещённых слов и обязательной +структуры у обоснования нет, и заводить их не нужно: обязательность несёт +норма, а обоснование её объясняет — путаницу между этими двумя ролями +исключает правило о заглавных. + ## Модальные слова Инвариант языка — **шкала**: пять ступеней в четырёх категориях ISO/IEC @@ -395,8 +404,4 @@ MIGR-6 не соблюдается в легаси-таблицах `show_histor - строки таблицы взаимоисключающи либо политика совпадения объявлена; - перечисленные в таблице случаи покрывают область действия; - норма исполнима без обращения к другим файлам; -- обоснование отвечает на «что сломается», а не пересказывает норму; -- обоснование не повторяет норму словами обязательства (META-26). Кандидатов - находит греп по `должен`, `обязан`, `следует`, `необходимо` в абзацах - «Почему», но вердикт остаётся за чтением: слова омонимичны — «за попыткой - следует повтор» требованием не является. +- обоснование отвечает на «что сломается», а не пересказывает норму. diff --git a/TODO.md b/TODO.md index dc49733..ab08a39 100644 --- a/TODO.md +++ b/TODO.md @@ -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` должен уметь отличать ссылку на удалённое правило от - упоминания дыры: сейчас `META-16` в прозе «Оформления» даёт ложное - срабатывание. +- `conv check` и отличие ссылки на удалённое правило от упоминания дыры: + теперь освободившиеся номера перечислены в `GUIDE.md`, раздел + «Освободившиеся номера», — проверке остаётся читать этот список, а не + угадывать. Реализации по-прежнему нет.