Initial commit

This commit is contained in:
tkachenko committed 2026-10-09 01:45:17 +00:00
commit 41d230d524
163 files changed
+11500

No files matched your search

@@ -0,0 +1,39 @@
# ADR-0007: Минимальный корень и три режима одного документа
**Дата**: 2026-08-31
**Статус**: Устарело — заменено [ADR-0009](0009-single-main-and-public-docs.md)
## Контекст
> Этот ADR сохраняется как история промежуточного решения. Три entrypoint-файла были удалены после проверки на реальных отчётах: пользователю удобнее выбирать режим в одном `main.typ`.
В текущем корне служебные каталоги конкурируют с `chapters/` и `assets/`, а `main.typ` смешивает демонстрационные данные, настройку и сборку. Автору после форка нужен короткий маршрут без изучения DDD-слоёв, тестов и примеров.
Одновременно должны поддерживаться три выпуска одного содержания и четыре вида документов. Обратная совместимость со старыми путями не требуется.
## Рассматриваемые варианты
1. **Оставить служебные каталоги в корне** — удобно разработчику, но перегружает основной сценарий автора.
2. **Удалить тесты и документацию** — очищает корень, но делает шаблон хрупким и плохо сопровождаемым.
3. **Перенести внутреннее устройство в `.template/`** — сохраняет разработку и визуально отделяет её от пользовательских файлов.
4. **Создать отдельный entrypoint для каждого типа и режима** — явно, но приводит минимум к двенадцати корневым файлам и дублированию конфигурации.
## Решение
Выбрали **один скрытый каталог `.template/`**, общий `document.typ` и три корневые точки входа:
- `main.typ` передаёт `mode: "final"`;
- `draft.typ` передаёт `mode: "draft"`;
- `clean-copy.typ` передаёт `mode: "clean-copy"`.
Все entrypoints импортируют `render(mode:)` из `document.typ`. Report, letter, commercial-offer и contract starters реализуют одинаковый контракт, поэтому выбор типа документа не меняет entrypoints.
В starter явно записываются все семантически важные параметры, включая осознанные `none`, `false` и `()`. Низкоуровневые параметры layout остаются внутри библиотеки.
## Последствия
**Становится проще**: первый fork, переключение режима, выбор starter и обновление внутренней реализации.
**Становится сложнее**: `document.typ` является обязательным стабильным контрактом, а каждый starter должен проходить contract-tests.
**Закрывает дверь на**: compatibility-файлы в корне и отдельные копии полной конфигурации для каждого режима.