Compare commits

...
3 Commits
Author SHA1 Message Date
av 0d335ff58d манифест набора переименован в .conventions-suite.toml
- оба манифеста теперь данные инструмента: он их читает и переписывает
  целиком, комментариев они не держат — точка в начале ставит их рядом
  со служебными файлами, а не среди содержимого репозитория
- прежнее основание из TOOL.md («в наборе файл правится при каждой новой
  теме, и прятать его незачем») отпало: правит его convy
- ссылки в README.md, CLAUDE.md, TOOL.md и TODO.md обновлены
2026-07-28 09:54:52 +03:00
av 9a3a89358f logging: убран extends на чужую тему
- шапка `lang/go/logging.md` объявляла базой `arch/time.md` — копипаста
  из соседнего `lang/go/time.md`, единственного файла с этой базой
- у темы `logging` арх-слоя нет вовсе, расширять было нечего; ключ
  вернётся сам, когда невыделенное ядро уедет в `arch/logging.md`
- `convy suite check` на наборе проходит чисто
2026-07-28 09:48:56 +03:00
av 7fb60828db guide: граница со спекой переписана на тест наблюдаемости вердикта
- «что против как» на пограничных правилах не работает: capability
  проверяется снаружи работающей системы, конвенция — только в исходном
  тексте, и отсюда расходятся направление, распространение и шкала
- добавлен признак для спорного случая: обязательство перед внешним
  потребителем — в спеку, зависимость автора следующего патча — в конвенцию
2026-07-27 08:57:35 +03:00
7 changed files with 43 additions and 18 deletions
+5 -4
View File
@@ -9,7 +9,8 @@ code in this repository.
Канон конвенций разработки для личных проектов. Сами конвенции лежат в
`conventions/{arch,lang/<язык>,stack/<стек>}/`; обвязка канона (`README.md`,
`LANGUAGE.md`, `GUIDE.md`, `READING.md`, `suite.toml`, `conv`) живёт в
`LANGUAGE.md`, `GUIDE.md`, `READING.md`, `.conventions-suite.toml`, `conv`)
живёт в
корне. К потребителю из неё едет только `READING.md` — короткое описание языка
для читателя копий.
@@ -76,9 +77,9 @@ code in this repository.
латиницей, рекомендуется нижний kebab-case, годится любой идентификатор,
пригодный для имени файла.
- META-28: тема объявлена в шапке (`topic: time`) и стоит в манифесте набора
(`suite.toml`, секция `[topics.live]`). Слои одной темы несут одно имя —
по нему собираются в один файл, как бы ни назывались их файлы; имя файла
повторяет тему из удобства.
(`.conventions-suite.toml`, секция `[topics.live]`). Слои одной темы несут
одно имя — по нему собираются в один файл, как бы ни назывались их файлы;
имя файла повторяет тему из удобства.
- META-29: имя темы не переиспользуется, снятое уходит в `[topics.retired]`
с причиной и датой. Оно живёт в `origin:` копий и в подписках манифестов.
- Формат `<ПРЕФИКС>-<номер>`, нумерация сквозная внутри файла. Порядок правил
+21 -3
View File
@@ -30,13 +30,31 @@ prefix: META
- `docs/adr/`**решение**, принятое однажды и постфактум («почему выбрали
Authelia, а не Keycloak»). Запись неизменяема.
- `docs/specs/` и OpenSpec, где они есть, — **что** система делает,
наблюдаемое поведение как контракт. Конвенция — **как** написан код;
в спеки она не переносится, это не capability.
- `docs/specs/` и OpenSpec, где они есть, — контракт наблюдаемого поведения.
Конвенция в спеки не переносится: это не capability.
- `docs/drafts/` — оперативная хроника и черновики, «что собираюсь сделать».
- `docs/conventions/`**правило на будущее**, применяемое многократно.
Живой документ: правится, когда договорённость меняется.
Со спекой конвенцию путают чаще прочего, а «что против как» на границе не
работает. Разводит их то, **где наблюдается вердикт**. У capability он виден
снаружи работающей системы: подали вход, получили выход, совпало или нет. У
конвенции — только в исходном тексте: снаружи не различить, обёрнута ошибка
или проглочена и по какому признаку выбран уровень записи.
Отсюда расходится остальное. Спека едет за системой — изменилось поведение,
меняется контракт; конвенция ведёт код, и факт «в приложении уже иначе»
аргументом не считается (META-5), а утверждений о состоянии репозитория в ней
нет вовсе (META-4). Спека принадлежит одной системе; конвенция ездит копиями
и потому знает про темы, слои и локальную часть. Capability бинарна —
реализована или нет; у конвенции есть ступени и постоянный список отступлений
(META-13). Спеку пишут до кода, конвенцию — на третий раз (META-2).
Пограничное правило разбирается признаком внешнего потребителя. Формат логов,
который собирает чужой агрегатор, — обязательство перед кем-то снаружи, и
место ему в спеке. Если от правила зависит только автор следующего патча —
это конвенция.
## Оформление
Имя файла повторяет имя темы: `app-directories.md`. Правилом это не
+3 -3
View File
@@ -13,7 +13,7 @@
| [LANGUAGE.md](LANGUAGE.md) | язык записи правил: идентификаторы, модальность, обоснование |
| [GUIDE.md](GUIDE.md) | как ведут конвенции: когда заводить, механизация, отступления |
| [READING.md](READING.md) | как читать конвенцию: то, что едет к потребителю |
| [suite.toml](suite.toml) | манифест набора: язык, темы, префиксы правил |
| `.conventions-suite.toml` | манифест набора: язык, темы, префиксы правил |
| `conv` | сборка копий |
К потребителю едет содержимое `conventions/` и один файл обвязки —
@@ -142,7 +142,7 @@ prefix: KEYS
документ, как бы ни назывались их файлы. Имя файла повторяет тему из
удобства, но истина — в шапке.
Темы перечислены в манифесте набора — [`suite.toml`](suite.toml),
Темы перечислены в манифесте набора — `.conventions-suite.toml`,
секция `[topics.live]`: имя и однострочное описание. Имя темы не
переиспользуется по той же причине, что и префикс: оно живёт в чужих
репозиториях — в шапке `origin:` каждой копии, в подписке манифеста, в тексте
@@ -311,7 +311,7 @@ MIGR-6 не соблюдается в `show_history`, `queue`: составны
| Файл | Где лежит | Что описывает |
|---|---|---|
| `suite.toml` | в наборе | сам набор: язык, темы, префиксы правил |
| `.conventions-suite.toml` | в наборе | сам набор: язык, темы, префиксы правил |
| `.conventions.toml` | в проекте | подключение: откуда копии, компоненты и их подписки |
Манифест набора — единственное место, где перечислены оба идентификатора
+1 -1
View File
@@ -76,7 +76,7 @@ API, а норму при этом нельзя поправить, не зад
одну копию. Это ровно та болезнь, от которой лечили тему (META-28): объявление
без реестра проверяется только глазами.
Напрашивается секция в `suite.toml` рядом с `[topics.live]` и
Напрашивается секция в `.conventions-suite.toml` рядом с `[topics.live]` и
`[prefixes.live]` — перечень живых языков и стеков с однострочным описанием, и
те же правила выбытия. Против: третий реестр в манифесте, а значений сегодня
три (`go`, `ansible`, `htmx`). За: словарь общий у двух сторон — им же
+13 -6
View File
@@ -46,10 +46,16 @@ javascript — никогда). Уровнем CLI компонент не ст
репозитория, а не про уровень.
Манифесты названы по тому, что описывают, а не по уровню ради симметрии:
`suite.toml` в наборе — идентичность набора, `.conventions.toml` в проекте —
подключённые конвенции. Точка в проекте отделяет служебное от содержимого
проекта; в наборе файл правится при каждой новой теме, и прятать его незачем.
Отсюда же бесплатное определение контекста: по имени рядом видно, где ты.
`.conventions-suite.toml` в наборе — идентичность набора, `.conventions.toml`
в проекте — подключённые конвенции. Оба начинаются с точки, потому что оба —
данные инструмента, а не документы репозитория: они читаются и **переписываются
целиком** командами, комментариев не держат, и объяснения к ним живут в
соседних файлах. Отсюда же бесплатное определение контекста: по имени рядом
видно, где ты.
Прежде манифест набора назывался `suite.toml` и точки не имел — на том
основании, что правится он руками при каждой новой теме. Основание отпало:
правит его инструмент.
## Раскладка команд
@@ -80,8 +86,9 @@ convy suite new новая тема: шапка, префикс, запис
Три следствия для реализации:
- **контекст определяется и отказ говорится явно.** `.conventions.toml` рядом
— проект, `suite.toml` — набор. Проектная команда, набранная в наборе, не
делает ничего наугад: она отказывает и подсказывает наборный аналог;
— проект, `.conventions-suite.toml` — набор. Проектная команда, набранная в
наборе, не делает ничего наугад: она отказывает и подсказывает наборный
аналог;
- **помощь группируется заголовками** «В проекте» и «В наборе»: в плоском
списке уровни не видны;
- **синонимов нет.** `convy project pull` рядом с `convy pull` не заводим: два
-1
View File
@@ -2,7 +2,6 @@
topic: logging
prefix: SLOG
lang: go
extends: arch/time.md
---
# Логирование