From f99a513058b9fcba3ca2c64af428cce45b730c96 Mon Sep 17 00:00:00 2001 From: Anton Vakhrushev Date: Sun, 26 Jul 2026 13:56:43 +0300 Subject: [PATCH] =?UTF-8?q?guide:=20=D0=B7=D0=B0=D0=B2=D0=B5=D0=B4=D1=91?= =?UTF-8?q?=D0=BD=20META-24=20=E2=80=94=20=D1=81=D1=81=D1=8B=D0=BB=D0=BA?= =?UTF-8?q?=D0=B0=20=D1=81=D0=BB=D0=BE=D1=8F=20=D0=BD=D0=B0=20=D0=B8=D0=B4?= =?UTF-8?q?=D0=B5=D0=BD=D1=82=D0=B8=D1=84=D0=B8=D0=BA=D0=B0=D1=82=D0=BE?= =?UTF-8?q?=D1=80=D1=8B=20=D1=81=D0=B2=D0=BE=D0=B5=D0=B9=20=D0=B1=D0=B0?= =?UTF-8?q?=D0=B7=D1=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - языковой и стековый слои называют идентификатор правила арх-слоя своей темы прямо в норме: подписываются темой, а не слоем, поэтому базовый слой в собранной копии присутствует всегда и ссылка не ведёт в пустоту - разрешение узкое по построению — на слои других языков и стеков не распространяется, их состав в копии зависит от манифеста - из META-21 убрано предписание ссылаться на свой слой словами «базовый слой»: слова не проверяются и не ведут к утверждению, а идентификатор ведёт --- CLAUDE.md | 9 ++++++--- GUIDE.md | 23 +++++++++++++++++++---- LANGUAGE.md | 4 ++-- TODO.md | 22 ++++------------------ 4 files changed, 31 insertions(+), 27 deletions(-) diff --git a/CLAUDE.md b/CLAUDE.md index 3b47634..88ff7f3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -69,9 +69,12 @@ code in this repository. действия — но не в самой норме. Нужен концепт соседней темы — коротко повторить его здесь, соседа назвать в «Почему». - META-21: на соседнюю конвенцию ссылаются именем темы (конвенция - `logging`), на правило — идентификатором (`SLOG-27`), на другой слой своей - темы — словами «базовый слой». Пути файлов канона в тексте конвенции нет - (в обвязке — можно). + `logging`), на правило — идентификатором (`SLOG-27`). Пути файлов канона в + тексте конвенции нет (в обвязке — можно). +- META-24: слой `lang/` или `stack/` называет идентификатор правила арх-слоя + **своей** темы прямо в норме — базовый слой в собранной копии всегда рядом. + На слои других языков и стеков это не распространяется: их состав зависит + от манифеста. ## Что в каноне писать нельзя diff --git a/GUIDE.md b/GUIDE.md index c2f9b17..61e8a8b 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -121,15 +121,30 @@ prefix: META ### META-21. Ссылка ведёт на тему или на правило, но не на путь в каноне **ДОЛЖЕН.** На соседнюю конвенцию ссылаются именем темы (конвенция -`logging`), на конкретное правило — идентификатором (`SLOG-27`), на другой -слой своей же темы — словами «базовый слой». Путь файла канона в тексте -конвенции не употребляется. +`logging`), на конкретное правило — идентификатором (`SLOG-27`); путь файла +канона в тексте конвенции не употребляется. **Почему.** В репозитории конвенция лежит собранной: слои одной темы — это секции одного файла, и пути `lang/go/logging.md` там не существует. Ссылка на путь канона умирает при сборке, причём молча — текст остаётся связным. Имя темы и идентификатор правила переживают и сборку, и переезд файла между -осями. +осями. Слой своей темы поэтому называют идентификатором его правила, а не +словами «базовый слой»: слова не проверяются и не ведут к утверждению. + +### META-24. Слой ссылается на идентификаторы своего базового слоя + +**ДОПУСКАЕТСЯ.** Правило языкового или стекового слоя называет идентификатор +правила арх-слоя своей темы прямо в норме. + +**Почему.** Подписываются темой, а не слоем: собранный файл начинается с +арх-слоя независимо от того, какие язык и стек выбраны, — базовое правило в +копии всегда рядом, и ссылка на него никуда не ведёт. Повтор его концепта +здесь заводил бы второй источник правды внутри одного документа: META-20 +требует повторять концепт там, где соседнего файла может не быть, а базовый +слой отсутствовать не может. Остальные слои темы попадают в копию по +манифесту, и такой гарантии у них нет — отсюда узость разрешения. Записано +оно явно, потому что META-20 читают строже, чем он есть, и без этой строки +базу дублируют без нужды. ### META-5. Расхождение кода с правилом — отступление, а не повод переписать правило diff --git a/LANGUAGE.md b/LANGUAGE.md index f2cb389..ad4e33d 100644 --- a/LANGUAGE.md +++ b/LANGUAGE.md @@ -356,8 +356,8 @@ MIGR-6 не соблюдается в легаси-таблицах `show_histor - заглавные модальные слова не встречаются вне правил — кроме строки о версии языка, которая их перечисляет по назначению; - префикс **чужой темы** не встречается в абзаце с модальностью (META-20); - префикс своего же базового слоя там допустим — в собранной копии это - соседняя секция того же файла; + префикс арх-слоя своей темы там допустим (META-24), префикс другого языка + или стека — нет; - путь файла канона не встречается в тексте конвенции (META-21). Чтением, потому что машине не даётся: diff --git a/TODO.md b/TODO.md index 791725d..bb4a897 100644 --- a/TODO.md +++ b/TODO.md @@ -107,21 +107,7 @@ Go-бинарь со своим релизным циклом, ставить ч нечего обслуживать. Сначала 4, потом 5. Разделение из вопроса 1 при этом дешевле заложить сразу, чем отпиливать потом. -## 6. META-20 и родительский слой своей темы - -Из `lang/` и `stack/` ссылаться на идентификаторы своего же арх-слоя -безопасно: при сборке они оказываются секциями одного файла, и ссылка -никуда не ведёт — правило рядом. Ограничение META-20 писалось про **чужую -тему**, так что формально это уже разрешено, и формулировка проверки в -`LANGUAGE.md` под это исправлена. - -Осталось решить одно: добавлять ли в META-20 явную строку **ДОПУСКАЕТСЯ** -про родительский слой. За — правило, которое читают строже, чем оно есть, -заставляет авторов дублировать текст без нужды. Против — норма META-20 уже -говорит «чужой темы», и второе правило про то же место придётся держать -согласованным с первым. - -## 7. `WHEN`/`AND` в блоке стыка правил +## 6. `WHEN`/`AND` в блоке стыка правил Блок для стыка двух правил записан английскими словами: @@ -147,7 +133,7 @@ OpenSpec. `WHEN` и `AND` — из того же набора и по той ж подпадают ли `WHEN`/`AND` под проверку «заглавные модальные слова не встречаются вне правил»: сейчас формально нет, потому что в словаре их нет. -## 8. Критерий «названного вреда» никого не обязывает +## 7. Критерий «названного вреда» никого не обязывает `LANGUAGE.md` говорит, что ДОЛЖЕН требует двух условий сразу: нарушение причиняет названный вред (критерий BCP 14) и норма проверяема машиной @@ -161,7 +147,7 @@ OpenSpec. `WHEN` и `AND` — из того же набора и по той ж META-6 её защищает. Против: критерий «вред назван» проверяется чтением, а не машиной, — то есть по META-6 сам он может быть только СЛЕДУЕТ. -## 9. Одиннадцать таблиц не прочитаны на взаимоисключительность +## 8. Одиннадцать таблиц не прочитаны на взаимоисключительность `LANGUAGE.md` объявил, что строки таблицы решений взаимоисключающи по умолчанию, а иной порядок объявляется явно. Объявление не делает таблицы @@ -176,7 +162,7 @@ META-6 её защищает. Против: критерий «вред назв Работа читательская, машине не даётся; в список проверок она уже записана в разделе «Чтением, потому что машине не даётся». -## 10. Возможность, записанная модальным словом +## 9. Возможность, записанная модальным словом Четвёртая категория ISO — возможность и осуществимость — ключевого слова не имеет: такие утверждения пишутся обычной прозой. Значит канон надо просмотреть