0001. TypeScript strict и модульные границы
Статус: accepted. Дата: 2026-09-22.
Контекст
Для автономного хранилища выбран TypeScript strict. Нужны независимые выпуски, совместимость с внешним протоколом и надёжная передача больших файлов.
Решение
Продуктовый код — TypeScript strict. Node.js 24 LTS, ESM, npm workspaces. Контрольные слои: domain, application, contracts, infrastructure, адаптер внешнего протокола (удалён ADR 0045), sdk; серверные apps собирают зависимости. Fastify — выбранное направление HTTP backend, добавляется с первым рабочим сценарием.
strict, noUncheckedIndexedAccess, exactOptionalPropertyTypes и дополнительные проверки задаются общей конфигурацией. Runtime-валидация внешних данных обязательна. Границы проверяет dependency-cruiser, качество исходников — type-aware ESLint.
Инструменты зафиксированы lock-файлом. TypeScript 5.9.3 — совместимая исходная линия для выбранного lint tooling; major обновляется отдельным изменением. Скрипты средств разработки могут быть ESM .mjs/.cjs, чтобы запускаться без предварительной сборки; код продукта остаётся .ts.
Альтернативы и последствия
Продолжение Python не соответствует выбранному направлению. Разделение на много микросервисов сейчас усложнило бы эксплуатацию без измеренной пользы. Общие wire-контракты не означают общую БД или обязательный синхронный выпуск внешнего приложения и ProAnima Arkvory.
Каркас не содержит runtime API. Сборка deployable JS, schemas и adapter contracts появляются в первой вертикальной реализации. CI проверяет границы уже сейчас.