компоненты как адресат сборки и плоский набор

- компонент — область репозитория, где выбранные слои действуют
  одновременно; сборка идёт по разу на компонент, у каждого своя директория
  копий, подписка и локальная часть, секции [components.<имя>] в манифесте
- плоский набор описан как низкий конец модели, а не отдельный режим: тема с
  одним слоем собирается копированием, ключи оси и lang/stack не пишутся
- в TODO заведён вопрос о реестре значений осей и судьбе extends:
This commit is contained in:
av
2026-07-26 22:01:39 +03:00
parent 787d0bb5ea
commit 9c86d9f2de
5 changed files with 206 additions and 48 deletions
+30 -9
View File
@@ -28,12 +28,19 @@
| Уровень | Английский | Русский | Что там лежит |
|---|---|---|---|
| набор | `suite` | набор | `conventions/`, манифест набора, обвязка |
| проект | `project` | проект | `docs/conventions/`, манифест подключения, копии |
| проект | `project` | проект | манифест подключения, компоненты |
| компонент | `component` | компонент | директория копий: один язык, один стек, один вид приложения |
`package`, `bundle`, `library` не берём: они тащат багаж менеджеров
зависимостей — версии, разрешение, лок, — которого в модели нет. `set` не
годится в CLI: в позиции подкоманды читается глаголом.
Компонент — адресат сборки: подписка принадлежит проекту, а собранный файл
читает тот, кто правит конкретный код. Определение — область, где все
выбранные слои действуют одновременно (`sqlite` и `postgres` — да, go и
javascript — никогда). Уровнем CLI компонент не становится: это аргумент
`--for`, а не подкоманда.
«Канон» — имя этого конкретного набора, а не термин уровня; в общих
формулировках употребляется «набор». «Потребитель» — слово про роль
репозитория, а не про уровень.
@@ -55,10 +62,15 @@ convy pull пересобрать подписанное
convy list что подключено и что можно взять
convy check проверить форму того, что здесь
convy suite check целостность набора: префиксы, темы, ссылки, форма
convy suite check целостность набора: префиксы, темы, оси, ссылки, форма
convy suite new новая тема: шапка, префикс, запись в манифест
```
Проектные команды принимают `--for <компонент>`. При одном компоненте флаг не
нужен; при нескольких команда без него отказывает и перечисляет имена — тот
же принцип, что и с контекстом: наугад не делается ничего. `convy list`
группирует вывод по компонентам.
Граница проходит не по «проектное против наборного», а по «частое и
повсеместное» против «только у автора». Поэтому `check` остаётся наверху:
форма правила одна и та же, локальные правила проекта на `X`-префиксах
@@ -84,24 +96,33 @@ convy suite new новая тема: шапка, префикс, запис
Они расходятся по частоте, по адресату и по тому, что считается провалом.
**Целостность набора.** Префиксы уникальны и не переиспользованы, шапка
совпадает с манифестом, тема объявлена и зарегистрирована, у каждого правила
совпадает с манифестом, тема объявлена и зарегистрирована, ось объявлена
ключами и у темы не больше одного базового слоя, у каждого правила
модальность с нормой и обоснование либо заглушка, нумерация сплошная, ссылки
разрешаются, путей набора в тексте конвенции нет, строка о версии языка на
месте. Запускается в наборе при каждой правке; провал — ошибка.
**Установка в проект.** Манифест подключения, сборка файла темы из слоёв,
сохранение локальной части, `READING.md` рядом с копиями. Запускается в
проекте изредка; провал чаще означает «посмотри глазами», чем «ошибка».
Отчёта «набор ушёл вперёд» нет: его делает `git diff` после пересборки.
**Установка в проект.** Манифест подключения, сборка файла темы из слоёв на
каждый компонент, сохранение локальной части, `READING.md` рядом с копиями.
Запускается в проекте изредка; провал чаще означает «посмотри глазами», чем
«ошибка». Отчёта «набор ушёл вперёд» нет: его делает `git diff` после
пересборки.
## Что делает установка
Подробности — в README, раздел «Копия в репозитории». Коротко, что важно для
реализации:
- сборка идёт **по разу на компонент**, в директорию `dir` из его секции;
директории компонентов обязаны различаться — иначе копии столкнутся
именами, и это ошибка манифеста, а не повод переименовывать файлы;
- копия плоская, **один файл на тему**; слои идут секциями в порядке
`arch` → язык → стек, выбор слоёв — по `lang` и `stack` из манифеста
подключения;
база → язык → стек, выбор слоёв — по `lang` и `stack` компонента, сверяемым
с ключами оси в шапке слоя (META-38), а не с путём файла в наборе; слой без
ключей оси — базовый и попадает в копию всегда;
- набор может быть плоским: у темы один слой, ключей оси нет, `lang` и
`stack` в компоненте отсутствуют. Отдельной ветки в коде это не требует —
сборка из одного слоя есть копирование;
- шапка копии — только `origin:` с именем темы; отпечатков и дат нет;
- всё ниже маркера `<!-- conv:local -->` переживает пересборку, всё выше
перезаписывается; маркер ставит сборщик;