40 lines
3.5 KiB
Markdown
40 lines
3.5 KiB
Markdown
# 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-файлы в корне и отдельные копии полной конфигурации для каждого режима.
|