diff --git a/CLAUDE.md b/CLAUDE.md index c7a8dfc..7245ea3 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -43,8 +43,8 @@ code in this repository. записи о механизации в локальной части копии (META-7). - META-8: норма не удаляется из канона никогда, чем бы её ни проверяли. Механизация её не заменяет и не сокращает. -- Метки правила — **ПОЧЕМУ** и **МЕХАНИЗИРОВАНО** — тоже словарь набора и - перечислены в строке о версии языка наравне с модальными словами. +- Метки правила — **ПОЧЕМУ**, **МЕХАНИЗИРОВАНО** и **СНЯТО** — тоже словарь + набора и перечислены в строке о версии языка наравне с модальными словами. - META-30: правка словаря или состава частей правила доходит до `READING.md` — документа, который едет к потребителю. Словари двух описаний совпадают. - Заглавные модальные слова не употребляются вне правил: ни в «Область @@ -79,8 +79,13 @@ code in this repository. с причиной и датой. Оно живёт в `origin:` копий и в подписках манифестов. - Формат `<ПРЕФИКС>-<номер>`, нумерация сквозная внутри файла. Порядок правил в файле — по читаемости: номер это идентификатор, а не позиция. -- Идентификаторы не переиспользуются. Удалённое правило оставляет дыру, новое - берёт следующий свободный номер, а не первый освободившийся. +- Идентификаторы не переиспользуются: новое правило берёт номер, следующий за + наибольшим. +- META-31: нумерация в файле сплошная. Снятое правило не исчезает, а остаётся + заглушкой: заголовок с номером плюс блок `**СНЯТО <дата>.**` с причиной + вместо нормы и ПОЧЕМУ. Реестра снятых номеров нет — файл сам себе реестр. +- META-32: ссылок на несуществующие правила нет; неразрешённый идентификатор — + всегда ошибка, а не «правило, наверное, сняли». - Новый файл конвенции — новый префикс: четыре заглавные латинские буквы, уникальные по всему канону, выбираются под файл, а не выводятся по формуле. Объявляется в шапке (`prefix: KEYS`) и регистрируется в манифесте набора, diff --git a/GUIDE.md b/GUIDE.md index ce903cf..a3b2830 100644 --- a/GUIDE.md +++ b/GUIDE.md @@ -16,8 +16,8 @@ prefix: META же. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Область действия @@ -112,6 +112,33 @@ prefix: META слова вводились, и молча. Проверить расхождение дёшево: словари в двух документах либо совпадают, либо нет. +### META-31. Нумерация правил в файле сплошная + +**ДОЛЖЕН.** Номера идут от единицы до наибольшего без пропусков: снятое +правило остаётся на месте заглушкой с меткой СНЯТО, а не исчезает. + +**ПОЧЕМУ.** Дыра в нумерации неотличима от опечатки в номере и от правила, +которое забыли дописать, — проверка, увидев пропуск, не может сказать, ошибка +это или норма, поэтому либо молчит всегда, либо краснеет на живом файле. +Заглушка отвечает на тот же вопрос текстом: номер занят, правило снято +тогда-то и по такой-то причине. Переиспользовать номер по-прежнему нельзя — +ссылка из чужого репозитория обязана указывать на то же утверждение, — но и +отдельный +реестр снятых номеров не нужен: он был бы вторым источником правды рядом с +файлом, который и так всё сказал. + +### META-32. Ссылка ведёт на правило, которое существует + +**НЕ ДОЛЖЕН.** Идентификатор в тексте не указывает на правило, которого в +наборе нет. + +**ПОЧЕМУ.** Неразрешимая ссылка означает одно из двух: опечатку в номере или +след переноса правила в другой файл. Читатель — тем более в чужом +репозитории — не различит эти случаи и решит, что правила больше нет, хотя оно +могло переехать. С заглушками (META-31) проверка становится однозначной: +идентификатор либо ведёт к правилу, либо к объяснению, почему его сняли, а +третьего исхода нет — и любой неразрешённый идентификатор точно ошибка. + ### META-2. Конвенция заводится, когда решение принимается третий раз **СЛЕДУЕТ.** Поводом служит одно и то же решение, принятое третий раз и @@ -390,14 +417,26 @@ prefix: META подробностями идут; перенос деталей туда же вернул бы задачу поддержки двух текстов. -## Освободившиеся номера +## Снятые правила -Номер удалённого правила не переиспользуется, поэтому дыры в нумерации — -норма. Здесь перечислено, что́ под ними было: без этого упоминание номера в -прозе не отличить от ссылки на исчезнувшее правило. +Снятое правило остаётся здесь заглушкой: номер занят навсегда, ссылка на него +ведёт к объяснению, а нумерация в файле остаётся сплошной (META-31). -| Номер | Что было | Почему снято | -|---|---|---| -| META-16 | имя файла — kebab-case | вреда от нарушения нет (META-25); осталось прозой в «Оформлении» | -| META-26 | запрет слов обязательства в обосновании | правило о заглавных уже делает строчное слово ненормативным, а форму обоснования рамками не ограничивают | -| META-9 | общая механизация разрешала удалить норму из канона | снято 2026-07-26: удаление оставляло будущего подписчика без нормы и без проверки, а «механизировано у всех» канону не проверить (META-8) | +### META-9. Общая механизация разрешала удалить норму из канона + +**СНЯТО 2026-07-26.** Удаление нормы оставляло подписчика, пришедшего позже, +без текста и без проверки, а условие «механизировано у всех» набору не +проверить: списка подписчиков у него нет. Взамен — META-8, запрет удалять +норму вообще. + +### META-16. Имя файла — kebab-case + +**СНЯТО 2026-07-26.** Вреда от нарушения нет, а значит нет и высшей +модальности (META-25): сборка идёт по имени темы из шапки, а не по имени +файла. Осталось прозой в разделе «Оформление». + +### META-26. Запрет слов обязательства в обосновании + +**СНЯТО 2026-07-26.** Правило о заглавных уже делает строчное «обязан» +ненормативным, поэтому запрет ничего не добавлял, а форму обоснования рамками +не ограничивают. diff --git a/LANGUAGE.md b/LANGUAGE.md index 5fd5913..311455a 100644 --- a/LANGUAGE.md +++ b/LANGUAGE.md @@ -245,14 +245,15 @@ Directives, Part 2, по одной форме записи на ступень, | разрешение | ДОПУСКАЕТСЯ | MAY | **Метки.** Обязательности не задают, а размечают: ПОЧЕМУ — часть правила, -МЕХАНИЗИРОВАНО — запись о проверке в копии. Стандартом не даются ни в одном -языке: в BCP 14 таких понятий нет, слова подбираются под язык так же, как -остальные. +МЕХАНИЗИРОВАНО — запись о проверке в копии, СНЯТО — заглушку на месте +убранного правила. Стандартом не даются ни в одном языке: в BCP 14 таких +понятий нет, слова подбираются под язык так же, как остальные. | Метка | Русский | Английский | |---|---|---| | обоснование | ПОЧЕМУ | WHY | | способ проверки | МЕХАНИЗИРОВАНО | MECHANIZED | +| снятое правило | СНЯТО | RETIRED | **Служебные слова сценарного блока** — `КОГДА`, `ТОГДА`, `И`, `ИЛИ`; таблица и объяснение в разделе «Таблицы решений». @@ -279,14 +280,14 @@ Directives, Part 2, по одной форме записи на ступень, Каждая конвенция называет язык одной строкой во вводной прозе: > Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -> ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -> тогда и только тогда, когда написаны заглавными. +> ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +> версии 1 — тогда и только тогда, когда написаны заглавными. Слова в строке — из словаря того языка, на котором написан набор. Для англоязычного набора та же строка выглядит так: -> The key words MUST, MUST NOT, SHOULD, SHOULD NOT, MAY and the marks WHY -> and MECHANIZED are to be interpreted as described in the conventions +> The key words MUST, MUST NOT, SHOULD, SHOULD NOT, MAY and the marks WHY, +> MECHANIZED and RETIRED are to be interpreted as described in the conventions > language, version 1, and only when written in capitals. Форма скопирована у BCP 14, где та же задача решается тем же способом: @@ -409,10 +410,15 @@ XMIG-2, XMIG-4 — МЕХАНИЗИРОВАНО: `internal/archrules`, в нов файла, из соседней конвенции и из чужого репозитория. В собранной копии слои разных осей лежат в одном документе, так что ссылка на базовый слой из языкового вообще никуда не ведёт — правило рядом. -- **Идентификаторы стабильны и не переиспользуются.** Удалённое правило - оставляет дыру в нумерации; занимать её новым нельзя — иначе ссылка из - чужого репозитория начнёт указывать на другое утверждение. То же - относится к префиксам: выбывшие хранит манифест набора. +- **Идентификаторы стабильны и не переиспользуются.** Занять номер снятого + правила новым нельзя — иначе ссылка из чужого репозитория начнёт указывать + на другое утверждение. То же относится к префиксам: выбывшие хранит манифест + набора. +- **Снятое правило остаётся заглушкой.** Заголовок и номер сохраняются, норму + с обоснованием заменяет блок СНЯТО с датой и причиной. Поэтому нумерация в + файле сплошная, а любая ссылка разрешается — либо в правило, либо в + объяснение, почему его сняли (META-31, META-32). Отдельного реестра снятых + номеров нет: он был бы вторым источником правды рядом с файлом. - Префикс **выбирается под файл, а не выводится по формуле**: он нужен, чтобы по нему искать, а не чтобы его разбирать. Выводимый префикс вдобавок привязал бы идентификатор к таксономии, которую канон перестраивает, и @@ -495,13 +501,15 @@ XMIG-6 не соблюдается в легаси-таблицах `show_histor заглавных латинских букв, не начинается на `X` и не значится в списке выбывших; - заголовки правил файла используют только его собственный префикс; -- номера уникальны внутри файла и не имеют пропусков вниз (новое правило - берёт следующий свободный, а не первый освободившийся); -- у каждого `### <ПРЕФИКС>-` есть модальное слово, норма и блок ПОЧЕМУ: - ни норма, ни обоснование не удаляются никогда (META-8, META-10); +- нумерация внутри файла сплошная: от единицы до наибольшего номера без + пропусков, номера не повторяются, новое правило берёт следующий за + наибольшим (META-31); +- у каждого `### <ПРЕФИКС>-` есть либо модальное слово с нормой и блок + ПОЧЕМУ — ни норма, ни обоснование не удаляются никогда (META-8, META-10), — + либо блок СНЯТО с датой и причиной; - вводная проза содержит строку о версии языка; -- ссылки вида `<ПРЕФИКС>-` — хоть в тексте канона, хоть в локальной части - копии — указывают на правила, которые ещё существуют; +- ссылки вида `<ПРЕФИКС>-` — хоть в тексте набора, хоть в локальной части + копии — разрешаются: неразрешённый идентификатор всегда ошибка (META-32); - заглавные модальные слова не встречаются вне областей правил (область — от заголовка правила до следующего заголовка) — кроме строки о версии языка, которая их перечисляет по назначению; diff --git a/READING.md b/READING.md index c16eef4..9dfc28a 100644 --- a/READING.md +++ b/READING.md @@ -34,9 +34,20 @@ version: 1 между ДОЛЖЕН и СЛЕДУЕТ — в том, чем платят за отклонение, а не в том, возможно ли оно. -Ещё две метки заглавными: **ПОЧЕМУ** открывает обоснование правила, +Ещё три метки заглавными: **ПОЧЕМУ** открывает обоснование правила, **МЕХАНИЗИРОВАНО** стоит при записи о том, что правило проверяет линтер или -скрипт. +скрипт, **СНЯТО** — на месте правила, которое убрали. + +Заглушка со СНЯТО занимает место убранного правила вместе с его номером: +так нумерация остаётся сплошной, а ссылка на снятое правило приводит к +объяснению, а не в пустоту. Требований в такой заглушке нет. + +```markdown +### XLOG-4. Уровень записи выбирался по громкости отказа + +**СНЯТО 2026-05-14.** Заменено на XLOG-8: громкость каждый оценивал +по-своему, и шкала расползалась. +``` **Нормативно только заглавное написание.** Строчное «должен» в прозе — обычная речь, а не норма; спорить с ней как с правилом не нужно. diff --git a/TODO.md b/TODO.md index 6fcced5..88f5961 100644 --- a/TODO.md +++ b/TODO.md @@ -4,29 +4,12 @@ решения. Закрытый вопрос отсюда удаляется — принятое решение живёт в `README.md`, `GUIDE.md` или `LANGUAGE.md`, а не в этом файле. -Две секции: сначала язык и подход, потом канон с тулингом. Пункты 1–2 -пришли из внешнего ревью описания языка и проверены по файлам на месте. +Две секции: сначала язык и подход, потом канон с тулингом. Пункт 1 пришёл +из внешнего ревью описания языка и проверен по файлам на месте. # Язык и подход -## 1. Две «механические» проверки без источника данных - -В списке «разбором текста» стоят два пункта, которые без дополнительного -реестра нерешаемы: - -- **«номера не имеют пропусков вниз»** — дыры в нумерации нормальны по - построению, и статическая проверка не отличит дыру от удалённого правила - от опечатки в номере; -- **«ссылки указывают на правила, которые ещё существуют»** — упоминание - снятого номера в прозе выглядит как висячая ссылка. - -`GUIDE.md` завёл для себя раздел «Освободившиеся номера» — и, поскольку он -теперь проверяется как конвенция, это единственный живой пример такого -реестра. Языком он всё равно не объявлен: от конвенций такой таблицы не -требуют, а манифест набора хранит только темы и префиксы. Пока реестр снятых -номеров не объявлен частью языка, оба пункта принадлежат списку «чтением». - -## 2. Натяжки в опоре на стандарты +## 1. Натяжки в опоре на стандарты Три места, где источнику приписано чуть больше, чем в нём есть: @@ -45,7 +28,7 @@ Остальное в таблице проверку выдержало, включая вторую половину `MAY` из BCP 14 и списки эквивалентных словесных форм ISO Directives. -## 3. Одиннадцать таблиц не прочитаны на взаимоисключительность +## 2. Одиннадцать таблиц не прочитаны на взаимоисключительность `LANGUAGE.md` объявил, что строки таблицы решений взаимоисключающи по умолчанию, а иной порядок объявляется явно. Объявление не делает таблицы @@ -60,7 +43,7 @@ BCP 14 и списки эквивалентных словесных форм IS Работа читательская, машине не даётся; в список проверок она уже записана в разделе «Чтением, потому что машине не даётся». -## 4. Описание языка отдельно от набора конвенций +## 3. Описание языка отдельно от набора конвенций `LANGUAGE.md` и `GUIDE.md` описывают, **как** пишутся конвенции; `conventions/` — **один конкретный** набор. Сейчас они склеены в одном @@ -85,7 +68,7 @@ BCP 14 и списки эквивалентных словесных форм IS # Канон, тулинг, подключение -## 5. Тулинг: две разные задачи в одном `conv` +## 4. Тулинг: две разные задачи в одном `conv` Сейчас в `conv` смешаны две категории работы, и они расходятся по всему — по частоте запуска, по тому, кто запускает, и по тому, что считается @@ -117,15 +100,16 @@ BCP 14 и списки эквивалентных словесных форм IS ссылках: это установка, а не целостность, но список подписок ему нужен из манифеста. -Часть проверок из этого списка сейчас нереализуема по причине из вопроса 1, -так что порядок такой: сначала язык, потом чекер. +Список проверок теперь реализуем целиком: граница правила определена, +нумерация сплошная, снятое правило остаётся заглушкой — данных со стороны +языка проверке хватает. Перед тем как переписывать, стоит посмотреть на два готовых прототипа: дистрибуцию пакетов Vale (`.vale.ini` → `vale sync` → `styles/`) как образец манифеста и `vendir.yml` — как пример того, где проходит граница между «чего хочу» и «что получил». -## 6. Пары слоёв и темы без базы +## 5. Пары слоёв и темы без базы Отложено сознательно, но список стоит держать перед глазами: @@ -146,7 +130,7 @@ BCP 14 и списки эквивалентных словесных форм IS - Вынос арх-ядра из `errors` и `logging` закроет две хрупкие ссылки из `web-ui` (стек) в go-слой — единственные ссылки стек → язык в каноне. -## 7. Подключение к репозиториям +## 6. Подключение к репозиториям Ничего ещё не подключено. Кандидаты — jellybit и pet-project-server. Понадобится: заполнить локальную часть копий тем, что сейчас в этих @@ -155,7 +139,7 @@ BCP 14 и списки эквивалентных словесных форм IS строка в `AGENTS.md` каждого потребителя про то, что файлы в `docs/conventions/` — копии. -## 8. Тулинг на Go, живущий независимо +## 7. Тулинг на Go, живущий независимо Сейчас `conv` — питоновский скрипт внутри канона, то есть тулинг и данные в одном репозитории и правятся одним движением. Мысль: вынести в отдельный @@ -164,10 +148,10 @@ Go-бинарь со своим релизным циклом, ставить ч Что за этим стоит помимо вкуса: независимый бинарь физически не даёт править инструмент «заодно» с правкой конвенции, работает против **любого** канона и -любого потребителя — что прямо требуется вопросом 4, — и снимает питон из +любого потребителя — что прямо требуется вопросом 3, — и снимает питон из зависимостей репозиториев-потребителей. -Порядок обратный ожидаемому: пока вопрос 4 не сделан, инструмент всё равно +Порядок обратный ожидаемому: пока вопрос 3 не сделан, инструмент всё равно работает против одного конкретного канона, и независимый релизный цикл ему -нечего обслуживать. Сначала 4, потом 8. Разделение из вопроса 5 при этом +нечего обслуживать. Сначала 3, потом 7. Разделение из вопроса 4 при этом дешевле заложить сразу, чем отпиливать потом. diff --git a/conventions/arch/app-directories.md b/conventions/arch/app-directories.md index e0d71dc..d6ea3be 100644 --- a/conventions/arch/app-directories.md +++ b/conventions/arch/app-directories.md @@ -12,8 +12,8 @@ prefix: DIRS механически выводится состав бэкапа. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Область действия diff --git a/conventions/arch/config.md b/conventions/arch/config.md index edbcf04..476e070 100644 --- a/conventions/arch/config.md +++ b/conventions/arch/config.md @@ -9,8 +9,8 @@ prefix: CONF секретами и когда падает. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Область действия diff --git a/conventions/arch/db-identifiers.md b/conventions/arch/db-identifiers.md index 4b335a2..c40873e 100644 --- a/conventions/arch/db-identifiers.md +++ b/conventions/arch/db-identifiers.md @@ -8,8 +8,8 @@ prefix: KEYS Как выбираются и как выглядят первичные ключи сущностей. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Область действия diff --git a/conventions/arch/time.md b/conventions/arch/time.md index ee3fc4a..58c9c3f 100644 --- a/conventions/arch/time.md +++ b/conventions/arch/time.md @@ -9,8 +9,8 @@ prefix: TIME берётся значение и где появляется не-UTC. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Область действия diff --git a/conventions/lang/go/config.md b/conventions/lang/go/config.md index 6c7f325..62bde13 100644 --- a/conventions/lang/go/config.md +++ b/conventions/lang/go/config.md @@ -10,8 +10,8 @@ extends: arch/config.md запрета на окружение. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. Секретов Go-специфика не касается: они приходят из деплоя уже в файле, а проверка их непустоты идёт вместе с остальной валидацией — как описано в diff --git a/conventions/lang/go/db-identifiers.md b/conventions/lang/go/db-identifiers.md index 6ecd41e..e51e47b 100644 --- a/conventions/lang/go/db-identifiers.md +++ b/conventions/lang/go/db-identifiers.md @@ -9,8 +9,8 @@ extends: arch/db-identifiers.md Как базовый слой выглядит в Go-приложении. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. Единая точка из `KEYS-3` — пакет `internal/ident`: он порождает идентификаторы (`NewID`, `NewIDAt`) и он же их разбирает diff --git a/conventions/lang/go/db-schema.md b/conventions/lang/go/db-schema.md index ead8029..bb5f254 100644 --- a/conventions/lang/go/db-schema.md +++ b/conventions/lang/go/db-schema.md @@ -9,8 +9,8 @@ prefix: MIGR Go-приложении. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Область действия diff --git a/conventions/lang/go/errors.md b/conventions/lang/go/errors.md index 53c5a00..cfa3614 100644 --- a/conventions/lang/go/errors.md +++ b/conventions/lang/go/errors.md @@ -10,8 +10,8 @@ prefix: GERR границе). Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. Две границы, о которых говорят правила ниже: diff --git a/conventions/lang/go/logging.md b/conventions/lang/go/logging.md index 8fed709..857b5b5 100644 --- a/conventions/lang/go/logging.md +++ b/conventions/lang/go/logging.md @@ -11,8 +11,8 @@ extends: arch/time.md функциональности, живут в спеках. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. Лог читают инструментами, а не глазами: повседневно — `jq` (`jq 'select(.download_id=="a1b2")' app.jsonl`), тяжёлое (агрегации, JOIN) — diff --git a/conventions/lang/go/time.md b/conventions/lang/go/time.md index f17cf3d..ddab2a1 100644 --- a/conventions/lang/go/time.md +++ b/conventions/lang/go/time.md @@ -10,8 +10,8 @@ extends: arch/time.md в каком виде время попадает в базу и в логи, что делать с зонами. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Правила diff --git a/conventions/stack/ansible/app-directories.md b/conventions/stack/ansible/app-directories.md index 24825f2..b2d9ee7 100644 --- a/conventions/stack/ansible/app-directories.md +++ b/conventions/stack/ansible/app-directories.md @@ -9,8 +9,8 @@ extends: arch/app-directories.md Как категории из базового слоя раскладываются на сервере плейбуком. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. ## Область действия diff --git a/conventions/stack/htmx/web-ui.md b/conventions/stack/htmx/web-ui.md index a31214a..0dfe40b 100644 --- a/conventions/stack/htmx/web-ui.md +++ b/conventions/stack/htmx/web-ui.md @@ -10,8 +10,8 @@ prefix: HTMX какие действия поддерживает — в спеках, не здесь. Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки -ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 — -тогда и только тогда, когда написаны заглавными. +ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций +версии 1 — тогда и только тогда, когда написаны заглавными. Логирование запросов — конвенция `logging` (HTTP-поля, рутинно-частое на `DEBUG`). Трансляция доменных ошибок наружу — конвенция `errors`