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,36 @@
# ADR-0004: Ранняя валидация и явные fallback-политики
**Дата**: 2026-08-26
**Статус**: Принято
## Контекст
Ошибки Typst часто проявляются во время layout далеко от места, где пользователь передал неверное значение. Для бизнес-документа особенно опасны тихие fallback: неверная компания, отсутствующая сторона, незаметно пропавшая подпись или citation, не попавшая в список источников.
При этом распространяемый шаблон должен компилироваться без реальных подписей и печатей. Они поставляются отдельным ZIP; PowerShell task проверяет и извлекает архив, после чего запускает `main.typ` с явным `sys.inputs`. Typst 0.15 не предоставляет проверки существования файла без попытки загрузки.
## Рассматриваемые варианты
1. **Полагаться только на diagnostics Typst** — мало кода, но сообщения не отражают доменный путь поля.
2. **Всегда аварийно завершаться при любом отсутствующем ресурсе** — строго, но шаблон нельзя удобно распространять без подписей.
3. **Валидировать domain до layout и явно моделировать необязательные ресурсы** — больше контрактов, зато ошибки предсказуемы.
## Решение
Выбрали **раннюю profile-specific валидацию**. Каждая ошибка называет профиль, путь поля, фактическое значение и ожидаемое ограничение.
Для подписи, печати и необязательных изображений поддерживаются политики:
- `hide` — не показывать ресурс и не резервировать место;
- `placeholder` — показать безопасную графическую заглушку: круг для печати или крест для подписи;
- `reserve-space` — оставить место для ручной подписи или печати.
Политика применяется только если поле равно `none`. Если поле содержит путь, но файл отсутствует, сборка завершается ошибкой.
## Последствия
**Становится проще**: распространение шаблона, поиск причины ошибки и тестирование негативных сценариев.
**Становится сложнее**: каждый профиль обязан определить required/optional поля и defaults.
**Закрывает дверь на**: молчаливое игнорирование неверно указанного пути к производственному ресурсу.