Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
0d335ff58d
|
||
|
|
9a3a89358f
|
||
|
|
7fb60828db
|
@@ -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:` копий и в подписках манифестов.
|
||||
- Формат `<ПРЕФИКС>-<номер>`, нумерация сквозная внутри файла. Порядок правил
|
||||
|
||||
@@ -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`. Правилом это не
|
||||
|
||||
@@ -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` | в проекте | подключение: откуда копии, компоненты и их подписки |
|
||||
|
||||
Манифест набора — единственное место, где перечислены оба идентификатора
|
||||
|
||||
@@ -76,7 +76,7 @@ API, а норму при этом нельзя поправить, не зад
|
||||
одну копию. Это ровно та болезнь, от которой лечили тему (META-28): объявление
|
||||
без реестра проверяется только глазами.
|
||||
|
||||
Напрашивается секция в `suite.toml` рядом с `[topics.live]` и
|
||||
Напрашивается секция в `.conventions-suite.toml` рядом с `[topics.live]` и
|
||||
`[prefixes.live]` — перечень живых языков и стеков с однострочным описанием, и
|
||||
те же правила выбытия. Против: третий реестр в манифесте, а значений сегодня
|
||||
три (`go`, `ansible`, `htmx`). За: словарь общий у двух сторон — им же
|
||||
|
||||
@@ -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` не заводим: два
|
||||
|
||||
@@ -2,7 +2,6 @@
|
||||
topic: logging
|
||||
prefix: SLOG
|
||||
lang: go
|
||||
extends: arch/time.md
|
||||
---
|
||||
|
||||
# Логирование
|
||||
|
||||
Reference in New Issue
Block a user