снятое правило остаётся заглушкой, нумерация сплошная

- META-31 и META-32: номера идут без пропусков, ссылка обязана разрешаться;
  обе проверки стали механическими — данных со стороны языка им хватает
- заведена метка СНЯТО: заголовок и номер снятого правила сохраняются, норму
  с обоснованием заменяет блок с датой и причиной, отдельный реестр снятых
  номеров не нужен
- META-9, META-16 и META-26 переписаны из таблицы «Освободившиеся номера» в
  заглушки; три висячие ссылки, тянувшиеся с утра, закрылись
This commit is contained in:
av
2026-07-26 15:59:22 +03:00
parent 170c06c1da
commit 682fa075bb
17 changed files with 136 additions and 89 deletions
+9 -4
View File
@@ -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`) и регистрируется в манифесте набора,
+50 -11
View File
@@ -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.** Правило о заглавных уже делает строчное «обязан»
ненормативным, поэтому запрет ничего не добавлял, а форму обоснования рамками
не ограничивают.
+25 -17
View File
@@ -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` и не значится в списке
выбывших;
- заголовки правил файла используют только его собственный префикс;
- номера уникальны внутри файла и не имеют пропусков вниз (новое правило
берёт следующий свободный, а не первый освободившийся);
- у каждого `### <ПРЕФИКС>-<n>` есть модальное слово, норма и блок ПОЧЕМУ:
ни норма, ни обоснование не удаляются никогда (META-8, META-10);
- нумерация внутри файла сплошная: от единицы до наибольшего номера без
пропусков, номера не повторяются, новое правило берёт следующий за
наибольшим (META-31);
- у каждого `### <ПРЕФИКС>-<n>` есть либо модальное слово с нормой и блок
ПОЧЕМУ — ни норма, ни обоснование не удаляются никогда (META-8, META-10), —
либо блок СНЯТО с датой и причиной;
- вводная проза содержит строку о версии языка;
- ссылки вида `<ПРЕФИКС>-<n>` — хоть в тексте канона, хоть в локальной части
копии — указывают на правила, которые ещё существуют;
- ссылки вида `<ПРЕФИКС>-<n>` — хоть в тексте набора, хоть в локальной части
копии — разрешаются: неразрешённый идентификатор всегда ошибка (META-32);
- заглавные модальные слова не встречаются вне областей правил (область —
от заголовка правила до следующего заголовка) — кроме строки о версии
языка, которая их перечисляет по назначению;
+13 -2
View File
@@ -34,9 +34,20 @@ version: 1
между ДОЛЖЕН и СЛЕДУЕТ — в том, чем платят за отклонение, а не в том,
возможно ли оно.
Ещё две метки заглавными: **ПОЧЕМУ** открывает обоснование правила,
Ещё три метки заглавными: **ПОЧЕМУ** открывает обоснование правила,
**МЕХАНИЗИРОВАНО** стоит при записи о том, что правило проверяет линтер или
скрипт.
скрипт, **СНЯТО** — на месте правила, которое убрали.
Заглушка со СНЯТО занимает место убранного правила вместе с его номером:
так нумерация остаётся сплошной, а ссылка на снятое правило приводит к
объяснению, а не в пустоту. Требований в такой заглушке нет.
```markdown
### XLOG-4. Уровень записи выбирался по громкости отказа
**СНЯТО 2026-05-14.** Заменено на XLOG-8: громкость каждый оценивал
по-своему, и шкала расползалась.
```
**Нормативно только заглавное написание.** Строчное «должен» в прозе — обычная
речь, а не норма; спорить с ней как с правилом не нужно.
+15 -31
View File
@@ -4,29 +4,12 @@
решения. Закрытый вопрос отсюда удаляется — принятое решение живёт в
`README.md`, `GUIDE.md` или `LANGUAGE.md`, а не в этом файле.
Две секции: сначала язык и подход, потом канон с тулингом. Пункты 12
пришли из внешнего ревью описания языка и проверены по файлам на месте.
Две секции: сначала язык и подход, потом канон с тулингом. Пункт 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 при этом
дешевле заложить сразу, чем отпиливать потом.
+2 -2
View File
@@ -12,8 +12,8 @@ prefix: DIRS
механически выводится состав бэкапа.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
## Область действия
+2 -2
View File
@@ -9,8 +9,8 @@ prefix: CONF
секретами и когда падает.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
## Область действия
+2 -2
View File
@@ -8,8 +8,8 @@ prefix: KEYS
Как выбираются и как выглядят первичные ключи сущностей.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
## Область действия
+2 -2
View File
@@ -9,8 +9,8 @@ prefix: TIME
берётся значение и где появляется не-UTC.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
## Область действия
+2 -2
View File
@@ -10,8 +10,8 @@ extends: arch/config.md
запрета на окружение.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
Секретов Go-специфика не касается: они приходят из деплоя уже в файле, а
проверка их непустоты идёт вместе с остальной валидацией — как описано в
+2 -2
View File
@@ -9,8 +9,8 @@ extends: arch/db-identifiers.md
Как базовый слой выглядит в Go-приложении.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
Единая точка из `KEYS-3` — пакет `internal/ident`: он
порождает идентификаторы (`NewID`, `NewIDAt`) и он же их разбирает
+2 -2
View File
@@ -9,8 +9,8 @@ prefix: MIGR
Go-приложении.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
## Область действия
+2 -2
View File
@@ -10,8 +10,8 @@ prefix: GERR
границе).
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
Две границы, о которых говорят правила ниже:
+2 -2
View File
@@ -11,8 +11,8 @@ extends: arch/time.md
функциональности, живут в спеках.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
Лог читают инструментами, а не глазами: повседневно — `jq`
(`jq 'select(.download_id=="a1b2")' app.jsonl`), тяжёлое (агрегации, JOIN) —
+2 -2
View File
@@ -10,8 +10,8 @@ extends: arch/time.md
в каком виде время попадает в базу и в логи, что делать с зонами.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
## Правила
+2 -2
View File
@@ -9,8 +9,8 @@ extends: arch/app-directories.md
Как категории из базового слоя раскладываются на сервере плейбуком.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
## Область действия
+2 -2
View File
@@ -10,8 +10,8 @@ prefix: HTMX
какие действия поддерживает — в спеках, не здесь.
Ключевые слова ДОЛЖЕН, НЕ ДОЛЖЕН, СЛЕДУЕТ, НЕ СЛЕДУЕТ, ДОПУСКАЕТСЯ и метки
ПОЧЕМУ и МЕХАНИЗИРОВАНО толкуются как описано в языке конвенций версии 1 —
тогда и только тогда, когда написаны заглавными.
ПОЧЕМУ, МЕХАНИЗИРОВАНО и СНЯТО толкуются как описано в языке конвенций
версии 1 — тогда и только тогда, когда написаны заглавными.
Логирование запросов — конвенция `logging` (HTTP-поля, рутинно-частое на
`DEBUG`). Трансляция доменных ошибок наружу — конвенция `errors`