7.0 KiB
Context
Корень workspace — coordination directory, а не package-manager workspace и не
Git-репозиторий. frontend, backend, specs и docs — независимые Git
roots. specs/scripts/verify-openspec-authority.sh уже показывает правильное
место для versioned cross-repository tooling: script определяет workspace
относительно себя, а не доверяет текущей директории.
Frontend закрепляет Node 22 и имеет offline npm run verify. Для backend нет
эквивалентных runtime policy и отдельных quality gates: lint запускает ESLint
с --fix, base tsconfig включает тесты, а build tsconfig исключает их.
Существующие e2e tests создают in-memory Nest application, но их script сначала
запускает Prisma на фиксированной /tmp DB и сейчас падает до Jest. Swagger
доступен по /api/docs-json при NODE_ENV=development;
frontend/scripts/openapi:sync.mjs — единственный намеренный writer committed
snapshot и generated types.
Goals / Non-Goals
Цели:
- Восстановить исполнимые backend gates для lint и TypeScript приложения и тестов с понятной диагностикой failures.
- Доказать отдельной read-only командой, что полный runtime OpenAPI document совпадает с committed frontend snapshot.
- Сделать Node/npm bootstrap и конкретные verification commands discoverable для агентов.
- Сохранить pre-existing working-tree state пользователя; не создавать versioned writes во время проверок.
Не входит в scope:
- CI/CD, remote verification, Docker, новый task runner, package-manager workspace или общий workspace verifier.
- Изоляция backend e2e DB, обновление Prisma packages и восстановление migration gate: WL-P2-05 и зависимый WL-P2-13 отложены из-за нестабильности Prisma 7.9.1 на Node 22.
- JSON report format, cached results, plug-in architecture, arbitrary diff bases, сохранённые hashes либо fixture/unit-test harness для process scripts.
- Изменение OpenAPI sync writer, generated frontend types, пользовательских API
statuses, T-Bank integration, application features, перенос business glossary
CONTEXT.mdили удаление существующего OpenSpec authority fixture test.
Decisions
Backend check и fix — разные операции
Backend предоставляет lint:check без --fix, lint:fix с явным write intent
и сохраняет lint как совместимый alias для lint:check. Он предоставляет
отдельные команды typecheck:app и typecheck:test на основе выделенных
tsconfig files. Эти команды не создают repository artifacts; build и e2e не
объявляются частью нового общего verdict.
Runtime OpenAPI сверяется отдельной read-only командой
specs/scripts/verify-runtime-openapi.sh определяет workspace из собственного
пути, поднимает backend с детерминированным development environment, ждёт local
readiness, получает /api/docs-json и всегда завершает child process. Команда
рекурсивно упорядочивает JSON object keys, сохраняя array order, записывает
canonical runtime и snapshot documents во временную директорию, сравнивает их
SHA-256 и выводит unified diff при различии.
Она никогда не вызывает openapi:sync, не записывает frontend snapshot и не
обновляет generated types. Это узкий контрактный gate, а не orchestration
interface для всех репозиториев.
Bootstrap и документация задают один contract
Оба приложения требуют Node 22 и npm ci. Scoped AGENTS.md перечисляют
только реально существующие non-mutating verification commands и явно отделяют
писатели lint:fix и openapi:sync. Durable development documentation
показывает prerequisites и границы отдельной runtime-contract команды.
Prisma findings явно отложены, а не маскируются обходом
prisma migrate deploy 7.9.1 воспроизводимо возвращает пустой schema-engine
error как на фиксированной, так и на уникальной временной SQLite DB; включение
engine diagnostics меняет результат. На 2026-08-23 опубликованная latest
stable version также 7.9.1. Не вводится второй migration mechanism и не
обновляются зависимости без подтверждённого stable candidate. Реестр фиксирует
дату, причину и trigger review: следующая stable Prisma должна трижды применить
existing migrations к чистой DB на Node 22.
Risks / Trade-offs
- [Runtime backend не стартует или child process остаётся после ошибки] → command создаёт cleanup trap до запуска backend и сохраняет фактический exit status.
- [Canonicalization скрывает различие контрактов] → нормализуется только порядок object keys; arrays и каждое JSON field остаются частью SHA-256 input.
- [Prisma schema engine остаётся недоступным на supported runtime] → WL-P2-05
и WL-P2-13 остаются
deferredдо опубликованной stable версии, прошедшей оговорённый reproduction gate. - [Ignored artifacts путаются с versioned writes] → отдельные команды не
считают
buildили e2e своим успехом и документируют свои временные ресурсы.
Migration Plan
Не нужны migration production data или deployment sequence. Разработчики
запускают npm ci под Node 22 в каждом application repository, используют
npm run lint:fix только осознанно и запускают runtime OpenAPI check отдельно
из workspace. Rollback — обычный revert independently versioned changes; он не
меняет committed API artifacts или persistent user data.