docs: reorganize system knowledge by domain

This commit is contained in:
2026-09-12 14:45:42 +03:00
parent 3a99af1a6e
commit f20c3f47bc
83 changed files with 2229 additions and 7335 deletions
+6 -7
View File
@@ -1,15 +1,15 @@
# Сопровождение системы
Здесь описаны локальное окружение, согласованность компонентов, проверка
качества и поддержание проектных знаний. Материалы самостоятельны и не
требуют открытия внутренних файлов приложений.
Здесь описаны локальное окружение, согласованность компонентов, границы
проверки и поддержание проектных знаний. Команды разработки и coding conventions
принадлежат [frontend](../../frontend/AGENTS.md) и [backend](../../backend/AGENTS.md).
- [Локальное окружение](local-workspace.md) — предпосылки работы, первый пользовательский сценарий и диагностика.
- [Frontend](frontend-workflow.md) / [backend](backend-workflow.md) — ответственность приложений и границы проверки.
- [Проверки системы](verification.md) — что доказывают проверки интерфейса, API и хранения данных, известные ограничения.
- [HTTP contract](runtime-openapi-verification.md) — направление генерации OpenAPI и проверка совместимости.
- [Дизайн-система](design-system.md) / [UI-каталог](ui-catalog.md) — визуальные роли, реальные состояния и ограничения примеров.
- [Принципы изменений](engineering-governance.md) — связность системы, риск и доказательства результата.
- [Ведение документации](documentation.md) — самостоятельные объяснения и их обновление вместе с системой.
- [Ведение документации](../CONTRIBUTING.md) — самостоятельные объяснения и их обновление вместе с системой.
- [Контекст знаний](agent-token-efficiency.md) / [проверочные вопросы](agent-context-evals.md) — поиск ответа и обнаружение пробелов документации.
- [OpenSpec](openspec-authority-and-lifecycle.md) — роль сохранённых требований и статус прежнего процесса.
@@ -17,6 +17,5 @@
[Remediation registry](audit-remediation.md) и [Completion Evidence](completion-evidence.md)
сохраняют статусы, исходные адреса и результаты прежних проверок.
[Аудиты](../audits/README.md) — неизменяемые снимки своего времени. Эти материалы
не входят в самостоятельное описание текущей системы; их внутренние ссылки
Эти материалы не входят в самостоятельное описание текущей системы; их внутренние ссылки
могут требовать архивного окружения и не являются условием чтения документации.
+10 -10
View File
@@ -8,18 +8,18 @@
| Вопрос | Объяснение | Существенная граница |
| --- | --- | --- |
| Кто подтверждает доступ к брокерскому счёту? | [Обзор](../architecture/system-overview.md#предметная-модель) | Сессия подтверждает пользователя, но идентификатор счёта не доказывает доступ |
| Как меняются финансовые данные при замене token? | [Подключение](../features/tbank-connection.md#граница-финансового-кэша) | Данные прежнего поколения не становятся сохранённым снимком нового подключения |
| Что происходит при конкурентном refresh? | [Authentication](../features/authentication.md), [ADR 009](../adr/009-concurrent-refresh-rotation-policy.md) | Один победитель; заменённый token не отзывает его сессию сам по себе |
| Как восстанавливается интерфейс после ошибки обновления? | [UI resilience](../features/frontend-ui-resilience.md) | Фоновая ошибка отличается от первой загрузки и смены пользователя |
| Чем будущая выплата отличается от дохода? | [События](../features/brokerage-account-upcoming-events.md), [доходы](../features/brokerage-account-income-analytics.md) | Прогноз не подтверждает личное зачисление |
| Можно ли складывать разные валюты или заменить неизвестное нулём? | [Money](../architecture/domain-glossary.md#money) | Точность, валюта и отсутствие значения сохраняются отдельно |
| Откуда рейтинг и доходность облигации? | [Bond detail](../features/bond-detail.md) | Рейтинг эмитента не заменяет рейтинг выпуска; рыночная доходность не равна личному результату |
| Кто подтверждает доступ к брокерскому счёту? | [Обзор](../overview.md#как-связаны-представления) | Сессия подтверждает пользователя, но идентификатор счёта не доказывает доступ |
| Как меняются финансовые данные при замене token? | [Подключение](../integrations/tbank.md#граница-финансового-кэша) | Данные прежнего поколения не становятся сохранённым снимком нового подключения |
| Что происходит при конкурентном refresh? | [Authentication](../domains/authentication/overview.md), [ADR 009](../adr/009-concurrent-refresh-rotation-policy.md) | Один победитель; заменённый token не отзывает его сессию сам по себе |
| Как восстанавливается интерфейс после ошибки обновления? | [UI resilience](../architecture/cross-cutting/ui-resilience.md) | Фоновая ошибка отличается от первой загрузки и смены пользователя |
| Чем будущая выплата отличается от дохода? | [События](../domains/income/upcoming-events.md), [доходы](../domains/income/overview.md) | Прогноз не подтверждает личное зачисление |
| Можно ли складывать разные валюты или заменить неизвестное нулём? | [Money](../glossary.md#money) | Точность, валюта и отсутствие значения сохраняются отдельно |
| Откуда рейтинг и доходность облигации? | [Bond detail](../domains/instruments/bonds.md) | Рейтинг эмитента не заменяет рейтинг выпуска; рыночная доходность не равна личному результату |
| Доказывает ли OpenAPI правильность ошибки запроса? | [HTTP API](../architecture/http-api.md#error-contract) | Равенство схем не доказывает полный HTTP-поток |
| Что гарантирует проверка хранения данных? | [Backend](backend-workflow.md#локальная-проверка) | Проверка с подставными ответами не доказывает атомарность реальной базы |
| Как ограничиваются обращения к внешнему сервису? | [T-Bank](../features/tbank-connection.md#конфигурация-и-ограничения) | Повторы, очередь и лимит ограничены; TLS остаётся включённым |
| Что гарантирует проверка хранения данных? | [Backend](verification.md#api-и-хранение-данных) | Проверка с подставными ответами не доказывает атомарность реальной базы |
| Как ограничиваются обращения к внешнему сервису? | [T-Bank](../integrations/tbank.md#конфигурация-и-ограничения) | Повторы, очередь и лимит ограничены; TLS остаётся включённым |
| Защищает ли фильтрация логов любое сообщение? | [ADR 008](../adr/008-pino-backend-logging.md) | Секрет в свободном тексте требует отдельной проверки |
| Есть ли восстановление пароля по письму? | [Ограничения auth](../features/authentication.md#limitations) | Пример будущего сценария не является поставленной возможностью |
| Есть ли восстановление пароля по письму? | [Ограничения auth](../domains/authentication/overview.md#ограничения) | Пример будущего сценария не является поставленной возможностью |
## Что измерять
+2 -2
View File
@@ -6,7 +6,7 @@
## Routing context
[Тематический индекс](../AI_INDEX.md) направляет к нужному предмету:
[Тематическая карта](../README.md#предметные-области) направляет к нужному предмету:
аутентификация связана с безопасностью и сессиями, денежный показатель —
с его происхождением и валютой, ошибка интерфейса — с восстановлением данных.
Вопрос о внешнем виде не требует автоматически изучать хранение данных.
@@ -22,7 +22,7 @@
При расхождении возможны устаревшее объяснение, дефект реализации или
незавершённое изменение. Неустановленный смысл, особенно в безопасности,
данных и публичном контракте, явно отмечается для ручного решения.
Карта ответственности за знания — [ведение документации](documentation.md).
Карта ответственности за знания — [ведение документации](../CONTRIBUTING.md).
## Recovery и handoff
-31
View File
@@ -1,31 +0,0 @@
# Backend: ответственность и проверка
## Предварительные условия
Backend обслуживает публичный HTTP API, локальные сессии, хранение данных
и интеграции с внешними источниками. Локальная поставка использует Node 22
и SQLite. Окружению нужны адрес frontend, адрес базы, секрет подписи сессий
и отдельный ключ шифрования подключения. T-Bank token вводится пользователем
через настройки и не является общим секретом окружения.
Назначение параметров, согласование адресов и сохранение данных описаны в
[локальном окружении](local-workspace.md).
## Локальная проверка
Проверка backend объединяет статический анализ, проверку типов приложения
и тестов, автоматические сценарии и сборку. Она не изменяет исходные материалы;
автоматическое исправление форматирования не считается доказательством проверки.
Диагностика покрытия доступна отдельно, общего числового порога для backend нет.
[Сравнение OpenAPI](runtime-openapi-verification.md) проверяет соответствие
публичного контракта ожиданиям frontend. Валидация запросов, cookie, доступ
и ошибки требуют полного HTTP-потока; целостность и конкурентные изменения
данных — проверки с изолированной реальной базой.
**Известное ограничение:** движок Prisma 7.9.1 при применении миграций к новой
SQLite-базе возвращает `Schema engine error` до запуска сквозных тестов.
Это воспроизведено и при проверке локального окружения 12 сентября 2026 года.
Успех остальных проверок не подтверждает прохождение этой границы. Условие
пересмотра — стабильная версия с тремя последовательными успешными применениями
миграций на новых базах под Node 22.
+5 -1
View File
@@ -38,6 +38,10 @@ dark, red, green, yellow, grape и orange; базовые white/black, отте
Отдельные градиенты, тени и размеры экранов остаются локальными визуальными
решениями; переход всех существующих значений в общую шкалу не завершён.
Точные значения определены в [токенах приложения](../../frontend/src/shared/theme/tokens.json),
согласованное поведение — в [спецификации дизайн-системы](../../specs/openspec/specs/frontend-design-system/spec.md).
Эта страница объясняет их смысл, не вводя отдельную систему значений.
## Переносимый JSON
Опубликованные токены представлены в собственном формате WealthLedger,
@@ -70,7 +74,7 @@ dark, red, green, yellow, grape и orange; базовые white/black, отте
аутентификацией. Состояние выполнения действия отличается от загрузки всей
страницы. При фоновом обновлении доступные данные сохраняются с локальным
индикатором; правила восстановления описаны в
[UI resilience](../features/frontend-ui-resilience.md).
[UI resilience](../architecture/cross-cutting/ui-resilience.md).
Каркас с продуктовой навигацией не входит в заявленный общий набор.
Предметные карточки и композиции представлены в [UI-каталоге](ui-catalog.md).
-88
View File
@@ -1,88 +0,0 @@
# Ведение документации
Документация объясняет систему независимо от размещения исходного кода.
За актуальность затронутого объяснения отвечает автор изменения предметной
области; проверка сопоставляет изложение с фактическим поведением и принятыми
решениями. Ответственность подсистем описана в [карте возможностей](../features/README.md).
## Владельцы фактов
| Тип знания | Где объясняется | Граница достоверности |
| --- | --- | --- |
| Устройство и взаимодействие системы | [Обзор](../architecture/system-overview.md) | Описывает существующие подсистемы, данные и потоки |
| Наблюдаемое поведение | [Возможности](../features/README.md) | Сценарий, инвариант, ошибка и ограничение объясняются здесь полностью |
| Значение терминов | [Глоссарий](../architecture/domain-glossary.md) | Одно определение, ссылки из связанных сценариев |
| HTTP-контракт | [HTTP API](../architecture/http-api.md), публичный OpenAPI backend | Объяснение семантики не создаёт второй независимо редактируемый wire contract |
| Причины значимого решения | [ADR](../adr/README.md) | Контекст, решение и последствия относятся к указанному статусу решения |
| Окружение и восстановление | [Локальное окружение](local-workspace.md) | Предпосылки и ограничения описаны без знания устройства репозиториев |
| Принципы сопровождения | [Engineering governance](engineering-governance.md) | Объясняют согласованность и доказательства результата |
| Гипотезы и внешние наблюдения | [Исследования](../research/README.md) | Рекомендация не означает реализованную возможность |
| Результаты прежних проверок | [Исторические свидетельства](README.md#исторические-свидетельства) | Действительны для состояния и условий своего времени |
Поведенческие требования и предложения изменений могут отдельно согласовываться
в OpenSpec. Их роль описана [здесь](openspec-authority-and-lifecycle.md);
понимание текущего сценария не требует доступа к хранилищу спецификаций.
При конфликте возможны устаревший текст, нарушение договорённости реализацией
или незавершённое изменение. Текущее поведение не отменяет согласованное
требование автоматически. Неустановленный смысл явно отмечается для ручного
решения; особенно это важно для безопасности, данных и публичного контракта.
## Куда поместить знание
Объяснение принадлежит существующему документу о соответствующей области.
Понятие определяется в глоссарии; сценарий связывает его с поведением и
ограничениями; ADR сохраняет причину выбора; исследование — ещё не принятый
вариант и его источники. Новый документ нужен для самостоятельного вопроса,
которому нет подходящего места. Навигация делает его доступным из индекса.
Один факт имеет одно полное объяснение, на которое ссылаются остальные страницы.
Ссылка внутри документации уточняет контекст, а не скрывает необходимое условие
понимания за внутренним файлом другого репозитория.
## Содержание страницы
Связное объяснение содержит назначение, ответственность компонентов,
предпосылки и инварианты, основной поток, ошибки, восстановление и ограничения.
Диаграмма нужна, когда помогает понять взаимодействие. Это ориентир, а не
обязательный набор пустых разделов.
Вместо имён классов, внутренних вспомогательных функций и настроек разработки
излагается их архитектурный или функциональный смысл. Публичные API, единицы
показателей, внешние системы и принятые технологические решения остаются
частью объяснения, если нужны читателю. Детали разработки и инструкции
инструментам не входят в описание системы.
Статус понятен из вступления или индекса: текущее поведение, объяснение решения,
исследование или история. Дата наблюдения не гарантирует актуальность спустя
время. Для замены принятого решения сохраняются его прежний контекст и ссылка
на последующее решение.
## Обновление вместе с кодом
| Что изменилось в системе | Какое знание затронуто |
| --- | --- |
| Сценарий, инвариант, ошибка или восстановление | Объяснение возможности и её ограничений |
| Ответственность, внешний источник или поток данных | Обзор, схема и причина значимого решения |
| Значение понятия | Глоссарий и связанные сценарии |
| Окружение, диагностика или граница проверки | Материалы сопровождения |
| Новая возможность | Карта возможностей и тематический индекс |
| Только внутреннее устройство без изменения описанных знаний | Изменение документации может не требоваться |
Изменения нескольких компонентов относятся к общей задаче; объяснение
поставленного результата не должно обещать ещё отсутствующую часть.
Смысловая согласованность важнее совпадения названий задач и формальных отметок.
## Проверка
Проверка охватывает Markdown, внутренние ссылки и якоря, доступность страниц
через навигацию и чтение основной документации без соседних репозиториев.
Внешние URL и HTML-ссылки не проверяются правилом относительных ссылок.
Исторические аудиты, журнал устранения замечаний и свидетельства завершения
сохраняют исходные адреса отдельно от основной книги.
Смысловая проверка подтверждает, что читатель понимает ответственность,
инвариант и ограничение; будущая возможность не выдана за существующую;
API и архитектура не изменены редакторским пересказом. Непонятный смысл
внешней ссылки отмечается для ручной проверки, а не восполняется догадкой.
Успешная синтаксическая проверка не доказывает актуальность знания.
+1 -1
View File
@@ -50,7 +50,7 @@ OpenSpec остаётся [необязательным средством со
новый результат. Автоматическое исправление материалов и проверка без их
изменения — разные действия.
[Влияние на документацию](documentation.md#обновление-вместе-с-кодом) входит
[Влияние на документацию](../CONTRIBUTING.md#обновление-вместе-с-кодом) входит
в оценку результата: описанные понятия, сценарии, решения и ограничения
обновляются вместе с системой. Отсутствие влияния может быть обоснованным
результатом. Отчёт о поставке различает выполненное, проверенное и остающиеся
-34
View File
@@ -1,34 +0,0 @@
# Frontend: ответственность и проверка
Frontend предоставляет пользовательские экраны, навигацию и представление
финансовых данных. Он получает данные только через публичный API backend;
credentials T-Bank остаются на сервере. Состав приложения и потоки показаны
в [обзоре системы](../architecture/system-overview.md).
## Совместимость с backend
Типизированный клиент frontend производится из опубликованного backend
OpenAPI. Согласованность клиента с сохранённым описанием API и согласованность
этого описания с работающим backend проверяются отдельно.
Изменение публичного контракта требует обновления производного клиента;
подробности — [согласованность OpenAPI](runtime-openapi-verification.md).
## Проверка интерфейса
Локальная проверка frontend охватывает корректность типов, статический анализ,
автоматические сценарии, зависимости и сборку приложения и UI-каталога.
Она может выполняться без запущенного backend. Покрытие тестами ограничивает
регрессии; само по себе число покрытых строк не доказывает правильность
финансового расчёта, доступность или прохождение пользовательского сценария.
[Каталог](ui-catalog.md) показывает существующие визуальные решения.
Соответствие задаче, широкий и узкий экран, клавиатурная навигация и восстановление
после ошибок проверяются в интерфейсе отдельно от успешной сборки.
## Состояние тестового клиента
Независимые проверки получают изолированное состояние клиента. Обновление
представления внутри одного сценария сохраняет его кэш; следующий сценарий
не наследует сессию и ответы предыдущего. Повторные попытки в тестовой среде
могут быть отключены для предсказуемого результата. Это не меняет
[политику обновления данных приложения](../adr/007-react-query-fetch-policy.md).
+11 -10
View File
@@ -3,7 +3,8 @@
WealthLedger поставляется как локальное приложение: frontend работает
в браузере, backend обслуживает API и обращается к SQLite и внешним источникам.
Это описание предпосылок и ограничений работы, без привязки к устройству
исходного кода. Production-развёртывание в текущую поставку не входит.
исходного кода. Описано локальное окружение; production-топология по нему
не подтверждается.
## Подготовка backend
@@ -16,7 +17,7 @@ WealthLedger поставляется как локальное приложен
| Порт API | По умолчанию 3000 |
| Секрет подписи сессий | Секрет не короче 32 символов; отличается от ключа шифрования подключения |
| Ключ шифрования подключения | 32 байта в base64; требуется для чтения сохранённого T-Bank token |
| Параметры интеграции | Адрес T-Bank, лимит запросов и при необходимости доверенный CA; [ограничения](../features/tbank-connection.md#конфигурация-и-ограничения) |
| Параметры интеграции | Адрес T-Bank, лимит запросов и при необходимости доверенный CA; [ограничения](../integrations/tbank.md#конфигурация-и-ограничения) |
T-Bank token вводится пользователем через интерфейс после входа и не является
общим параметром окружения. Существующая база и её ключ шифрования сохраняются
@@ -24,11 +25,11 @@ T-Bank token вводится пользователем через интерф
на отдельной копии. Потеря или замена ключа не является безвредным сбросом:
прежнее подключение нельзя расшифровать новым ключом.
**Известное ограничение:** проверка новой временной SQLite-базы 12 сентября
2026 года под Node 22 воспроизвела `Schema engine error` до создания схемы.
Полный первый запуск на чистой базе пока не подтверждён; пользовательская база
в этой проверке не использовалась. Условия пересмотра —
[проверка backend](backend-workflow.md#локальная-проверка).
**Известное ограничение:** ранее была зафиксирована ошибка `Schema engine error`
на новой временной SQLite-базе до создания схемы. Условия проверки и пересмотра —
в [ограничении сквозной проверки](verification.md#известное-ограничение-сквозной-проверки).
Пользовательская база для такого воспроизведения не нужна; полный первый запуск
на чистой базе этим свидетельством не подтверждён.
В development доступна [локальная Swagger UI](http://localhost:3000/api/docs)
при стандартном порте API. Она показывает контракт, но не доказывает доступность
@@ -43,7 +44,7 @@ backend — с origin браузера. Смена порта требует с
Локальный HTTP предполагает development-режим backend: в других режимах
refresh-cookie получает Secure flag и требует защищённого соединения.
Поведение сессии описано в [Authentication](../features/authentication.md).
Поведение сессии описано в [Authentication](../domains/authentication/overview.md).
## Первый сценарий
@@ -79,6 +80,6 @@ HTTP-запросы связываются с безопасными журна
## Проверка первого изменения
Успешная сборка, запуск и прохождение сценария — разные доказательства.
Границы проверки описаны для [frontend](frontend-workflow.md),
[backend](backend-workflow.md) и [HTTP-контракта](runtime-openapi-verification.md).
Границы [проверок системы](verification.md) и
[HTTP-контракта](runtime-openapi-verification.md) рассматриваются отдельно.
Завершённость результата учитывает фактические проверки и остающиеся ограничения.
@@ -7,10 +7,16 @@ artifacts и архивирование не являются условием
## Существующие материалы
OpenSpec сохраняет поведенческие требования, предложенные изменения и историю
согласования. Существующее описание изменения относится только к своему объёму
и не доказывает готовность другой возможности. Текущее поведение системы
объясняется в [карте возможностей](../features/README.md).
Основные спецификации сохраняют согласованное проверяемое поведение, включая
текущее. OpenSpec changes содержат предложения, их дизайн и задачи, архив —
историю согласования. Store `wealth-ledger-specs` находится в `specs/openspec/`:
основные спецификации — `specs/`, изменения — `changes/` внутри Store.
[Предметный индекс](../../specs/AI_INDEX.md) ведёт к конкретным requirements/scenarios.
Существующее описание изменения относится только к своему объёму и не доказывает
готовность возможности. Docs объясняет систему и последствия правил;
при расхождении со спецификацией нужно установить причину, а не объявлять
реализацию или текст автоматически верным.
## Если OpenSpec запрошен явно
+1 -1
View File
@@ -38,4 +38,4 @@ HTTP-потока. Согласованность описаний и функц
Сравнение OpenAPI не запускает сквозные проверки с миграциями базы.
Известная ошибка движка миграций и условие пересмотра описаны в
[проверке backend](backend-workflow.md#локальная-проверка).
[сквозной проверке](verification.md#известное-ограничение-сквозной-проверки).
+7 -6
View File
@@ -12,7 +12,7 @@ Storybook 10.6.0 показывает реальные представлени
## Компоненты и работа с примерами
Два блока каталога включают 9 групп и 30 примеров:
Каталог включает 10 групп и 41 пример:
| Группа | Что показывает |
| --- | --- |
@@ -20,11 +20,12 @@ Storybook 10.6.0 показывает реальные представлени
| Пустой результат и ошибки | Четыре варианта с действием и без |
| Загрузка | Доступную область занятости с нейтральными фигурами |
| Кнопки | Основное, вторичное и вспомогательное действие, выполнение и недоступность, работу с клавиатурой |
| Список счетов | Несколько валют, недоступную и пустую сводку, длинное название |
| Список счетов | Несколько счетов и валют, недоступную и пустую сводку, неоценённые бумаги, длинные названия и суммы |
| Карточка позиции | Акцию с положительным результатом, облигацию с отрицательным, прочий инструмент и отсутствие оценки |
| Последние события | Успешный, загружаемый, ошибочный и пустой результат; неизвестную сумму |
| Ближайшие события | Успешный, загружаемый, ошибочный и пустой результат; неизвестную сумму и длинное название |
| Обновление портфеля | Сохранённые суммы при обновлении и ошибке, локальную повторную попытку |
| Загрузка страницы счёта | Контур ожидаемых заголовка, сводки и строк |
| Структура портфеля | Валюты и типы активов, только деньги, пустую и неполную оценку, неизвестные и отрицательные значения |
Каталог не перечисляет все элементы библиотеки или приложения. Отсутствие
представления в витрине не означает его отсутствия в продукте. Основы показывают
@@ -33,8 +34,8 @@ Storybook 10.6.0 показывает реальные представлени
Canvas показывает выбранный пример. Docs поясняет назначение и ограничения,
Controls меняет доступные свойства, Actions показывает локальные действия.
Вымышленные исходные данные не редактируются через Controls: другой набор
данных выбирается отдельным примером. Свойства можно сбросить, пример —
Наборы вымышленных данных и доступные Controls определяются конкретным
примером; подготовленные варианты перечислены в историях. Свойства можно сбросить, пример —
смонтировать заново; изменение размера просмотра не сбрасывает выбранные значения.
Витрина и приложение используют одну тему. Примеры показываются по-русски
@@ -57,7 +58,7 @@ cookies, секреты и реальные пользовательские д
здесь не исполняется. В приложении первичная загрузка показывает контур
ожидаемого содержимого, фоновое обновление сохраняет данные, а выполняемое
действие имеет контекстный индикатор. Подробности —
[состояния интерфейса](../features/frontend-ui-resilience.md).
[состояния интерфейса](../architecture/cross-cutting/ui-resilience.md).
Автоматические проверки frontend охватывают каталог и его изоляцию от
продуктовых запросов. Примеры и их пояснения обновляются вместе с включёнными
+53
View File
@@ -0,0 +1,53 @@
# Что подтверждают проверки системы
Успешная сборка, запуск, равенство схем и прохождение пользовательского
сценария — разные доказательства. Выбор проверки зависит от наблюдаемого
риска: денежных вычислений, доступа, целостности данных или состояния интерфейса.
Общие основания описаны в [принципах сопровождения](engineering-governance.md#risk-based-testing).
## Интерфейс
Локальный gate frontend охватывает типы, статический анализ, автоматические
сценарии, зависимости и сборки приложения и UI-каталога. Он выполняется
без запущенного backend. Покрытие ограничивает регрессии, но не доказывает
правильность финансового расчёта, доступность и полный пользовательский сценарий.
[Каталог](ui-catalog.md) показывает существующие визуальные решения на
вымышленных данных. Широкий и узкий экран, клавиатурная навигация,
восстановление после ошибок и соответствие задаче проверяются в интерфейсе
отдельно от сборки. Изолированная тестовая среда не воспроизводит все свойства
браузера и живой интеграции.
## API и хранение данных
Локальный gate backend объединяет статический анализ, типы приложения и тестов,
автоматические сценарии и сборку. Он не исправляет исходные файлы;
автоматическое форматирование выполняется отдельно и не является доказательством.
Диагностика покрытия доступна без общего числового порога.
Равенство OpenAPI подтверждает согласованность публичного описания с клиентом.
Валидация, cookie, авторизация счёта, статусы и ошибки требуют полного HTTP-потока;
целостность и конкурентные изменения данных — проверки с изолированной реальной
базой. Подставной ответ базы не доказывает её транзакционные свойства.
Направление генерации и границы сравнения — в [проверке OpenAPI](runtime-openapi-verification.md).
### Известное ограничение сквозной проверки
В сохранённой проверке Prisma 7.9.1 под Node 22 применение миграций к новой
SQLite-базе завершалось `Schema engine error` до запуска сквозных тестов.
Это ограничение зафиксировано в [WL-P2-05](audit-remediation.md#p2).
Предыдущее описание локальной проверки от 12 сентября 2026 года также отмечало
ошибку на временной базе без обращения к пользовательской базе.
Успех unit-проверок и OpenAPI не закрывает эту границу. Принятое условие пересмотра —
стабильная версия Prisma с тремя последовательными успешными применениями
миграций на новых базах под Node 22. Условия безопасного локального запуска и
сохранения данных — в [локальном окружении](local-workspace.md).
## Где выполнять проверки
Команды и конкретные тестовые правила поддерживаются в локальных инструкциях
[frontend](../../frontend/AGENTS.md) и [backend](../../backend/AGENTS.md).
Проверки этой документации — в [CONTRIBUTING](../CONTRIBUTING.md#проверки).
Отчёт различает пройденную границу, оставшееся ограничение и проверяемое состояние;
успех одного gate не распространяется автоматически на весь workspace.