todo: заведён разбор шести сниппетов в блоках нормы

- GCFG-7, GCFG-9, SLOG-20, GTIM-8, HTMX-7, HTMX-24 несут код внутри нормы,
  то есть требуют ровно такой код; с появлением блока ПРИМЕРЫ часть из них
  туда и переезжает
- записана цена ошибки в обе стороны: деталь кода как требование против
  нормы, потерявшей обязательность в иллюстративном блоке
This commit is contained in:
av
2026-07-26 16:14:26 +03:00
parent 59a1c23f55
commit c96566d4b4
+26 -8
View File
@@ -23,7 +23,25 @@
Работа читательская, машине не даётся; в список проверок она уже записана в Работа читательская, машине не даётся; в список проверок она уже записана в
разделе «Чтением, потому что машине не даётся». разделе «Чтением, потому что машине не даётся».
## 2. Описание языка отдельно от набора конвенций ## 2. Шесть сниппетов сидят в блоке нормы
С появлением блока ПРИМЕРЫ у кода в правиле есть своё место, но шесть правил
несут сниппет **внутри блока нормы** — там, где он по границе правила читается
как «требуется ровно такой код»: GCFG-7, GCFG-9, SLOG-20, GTIM-8, HTMX-7,
HTMX-24. Кода внутри обоснований в каноне нет ни одного, так что разбирать
нужно только эти шесть.
Разбор по одному, вердикт из двух: сниппет — часть требования или иллюстрация
к нему. У GTIM-8 (`ReplaceAttr` с приведением к UTC) это похоже на норму: там
важна конкретная точка вмешательства. У HTMX-7 и SLOG-20 — скорее иллюстрация
формы вызова, и ей место в ПРИМЕРЫ.
Цена ошибки в обе стороны понятна. Оставленный в норме пример превращает
деталь кода в требование, которое никто не имел в виду, и устаревает вместе с
API, а норму при этом нельзя поправить, не задев требование. Унесённая в
ПРИМЕРЫ норма, наоборот, перестаёт быть обязательной — блок иллюстративный.
## 3. Описание языка отдельно от набора конвенций
`LANGUAGE.md` и `GUIDE.md` описывают, **как** пишутся конвенции; `LANGUAGE.md` и `GUIDE.md` описывают, **как** пишутся конвенции;
`conventions/`**один конкретный** набор. Сейчас они склеены в одном `conventions/`**один конкретный** набор. Сейчас они склеены в одном
@@ -48,7 +66,7 @@
# Канон, тулинг, подключение # Канон, тулинг, подключение
## 3. Тулинг: две разные задачи в одном `conv` ## 4. Тулинг: две разные задачи в одном `conv`
Сейчас в `conv` смешаны две категории работы, и они расходятся по всему — Сейчас в `conv` смешаны две категории работы, и они расходятся по всему —
по частоте запуска, по тому, кто запускает, и по тому, что считается по частоте запуска, по тому, кто запускает, и по тому, что считается
@@ -89,7 +107,7 @@
манифеста и `vendir.yml` — как пример того, где проходит граница между «чего манифеста и `vendir.yml` — как пример того, где проходит граница между «чего
хочу» и «что получил». хочу» и «что получил».
## 4. Пары слоёв и темы без базы ## 5. Пары слоёв и темы без базы
Отложено сознательно, но список стоит держать перед глазами: Отложено сознательно, но список стоит держать перед глазами:
@@ -110,7 +128,7 @@
- Вынос арх-ядра из `errors` и `logging` закроет две хрупкие ссылки из - Вынос арх-ядра из `errors` и `logging` закроет две хрупкие ссылки из
`web-ui` (стек) в go-слой — единственные ссылки стек → язык в каноне. `web-ui` (стек) в go-слой — единственные ссылки стек → язык в каноне.
## 5. Подключение к репозиториям ## 6. Подключение к репозиториям
Ничего ещё не подключено. Кандидаты — jellybit и pet-project-server. Ничего ещё не подключено. Кандидаты — jellybit и pet-project-server.
Понадобится: заполнить локальную часть копий тем, что сейчас в этих Понадобится: заполнить локальную часть копий тем, что сейчас в этих
@@ -119,7 +137,7 @@
строка в `AGENTS.md` каждого потребителя про то, что файлы в строка в `AGENTS.md` каждого потребителя про то, что файлы в
`docs/conventions/` — копии. `docs/conventions/` — копии.
## 6. Тулинг на Go, живущий независимо ## 7. Тулинг на Go, живущий независимо
Сейчас `conv` — питоновский скрипт внутри канона, то есть тулинг и данные в Сейчас `conv` — питоновский скрипт внутри канона, то есть тулинг и данные в
одном репозитории и правятся одним движением. Мысль: вынести в отдельный одном репозитории и правятся одним движением. Мысль: вынести в отдельный
@@ -128,10 +146,10 @@ Go-бинарь со своим релизным циклом, ставить ч
Что за этим стоит помимо вкуса: независимый бинарь физически не даёт править Что за этим стоит помимо вкуса: независимый бинарь физически не даёт править
инструмент «заодно» с правкой конвенции, работает против **любого** канона и инструмент «заодно» с правкой конвенции, работает против **любого** канона и
любого потребителя — что прямо требуется вопросом 2, — и снимает питон из любого потребителя — что прямо требуется вопросом 3, — и снимает питон из
зависимостей репозиториев-потребителей. зависимостей репозиториев-потребителей.
Порядок обратный ожидаемому: пока вопрос 2 не сделан, инструмент всё равно Порядок обратный ожидаемому: пока вопрос 3 не сделан, инструмент всё равно
работает против одного конкретного канона, и независимый релизный цикл ему работает против одного конкретного канона, и независимый релизный цикл ему
нечего обслуживать. Сначала 2, потом 6. Разделение из вопроса 3 при этом нечего обслуживать. Сначала 3, потом 7. Разделение из вопроса 4 при этом
дешевле заложить сразу, чем отпиливать потом. дешевле заложить сразу, чем отпиливать потом.