docs: record AI governance audit

This commit is contained in:
2026-08-24 19:55:28 +03:00
parent eb69300ebe
commit 1944f2fc97
21 changed files with 1764 additions and 44 deletions
+1 -1
View File
@@ -18,4 +18,4 @@ flowchart LR
## Consequences
Контроль секретов, повторов и лимитов централизован на сервере. Реализация boundary будет добавлена будущим OpenSpec change подключения T-Bank.
Контроль секретов, повторов и лимитов централизован на сервере. Boundary реализована и используется поставленными сценариями; текущее API, resilience и ограничения описаны в [Подключении T-Bank](../features/tbank-connection.md).
+1 -1
View File
@@ -12,4 +12,4 @@
## Consequences
Ключ обязателен только в server environment и не логируется. Ротация ключей, схема хранения и реализация будут добавлены в будущем change подключения T-Bank.
Ключ обязателен только в server environment и не логируется. AES-256-GCM storage и per-user connection реализованы; current-state contract и ограничение отсутствующей ротации ключа описаны в [Подключении T-Bank](../features/tbank-connection.md).
+1 -1
View File
@@ -12,4 +12,4 @@ Access token живёт 15 минут только в памяти frontend. Rot
## Consequences
Перезагрузка страницы требует обновления access token через cookie-сессию. Полная реализация сессий, хранилища и отзыва будет добавлена change авторизации.
Перезагрузка страницы восстанавливает access token через cookie-сессию. Rotating sessions, logout и bounded revocation model реализованы; access token остаётся действительным не более 15 минут без database lookup на каждый запрос. Текущее поведение описано в [Аутентификации](../features/authentication.md).
+2 -2
View File
@@ -8,8 +8,8 @@
## Decision
React Query запрашивает серверные данные только при открытии соответствующего экрана. Refetch по возврату фокуса отключён, обновление запускается пользователем вручную; backend TTL-кэш остаётся защитой от дублирующих запросов.
React Query запрашивает серверные данные при открытии соответствующего экрана и не делает refetch при возврате фокуса. После `staleTime` повторное открытие может запустить background refetch; последний успешный cached snapshot остаётся видимым вместе с отдельным pending или error feedback. Backend cache применяется только там, где он явно описан соответствующей feature.
## Consequences
Пользователь может видеть данные до ручного обновления или следующего открытия экрана. Live-обновления и иные триггеры появятся только при подтверждённой продуктовой необходимости.
Пользователь может видеть cached snapshot до успешного background response, а ошибка обновления не превращает известные данные в пустой экран. Конкретные freshness intervals и UI-поведение описаны в [Brokerage Accounts](../features/brokerage-accounts.md) и [Portfolio](../features/portfolio-view.md). Live updates и focus-triggered refetch требуют отдельной продуктовой необходимости.
@@ -0,0 +1,19 @@
---
status: accepted
---
# Native OpenSpec SDD и минимальная local orchestration
WealthLedger использует project-local schema `wealth-ledger-sdd` OpenSpec 1.10 с последовательностью `Proposal → Delta Specs → Design → Tasks → Apply` и тонкий dispatcher существующих repository gates. Это сохраняет один lifecycle authority в `specs/openspec`, выражает проектные approval boundaries нативными extension points и не вводит второй workflow engine или monorepo control plane для четырёх независимых Git-репозиториев.
## Рассмотренные варианты
- Встроенная `spec-driven` schema отклонена: она не выражает обязательный переход Specs перед Design и не задаёт Delivery Map или проектные роли артефактов.
- Отдельный workflow engine или custom generator отклонён: он создал бы конкурирующий формат и lifecycle authority.
- Nx, Turborepo, Bazel, Make или just отклонены для текущего масштаба: workspace не имеет общего dependency graph, build cache или CI, а репозитории уже владеют canonical gates.
## Последствия
OpenSpec CLI закреплён exact version contract, а upgrade требует staged generation и проверки generated root `.opencode` projection. Dispatcher знает четыре workspace area, но не реализует build или test logic: он только валидирует Delivery Map и делегирует в repo-owned commands. Approval identity остаётся человеческим workflow constraint, потому что schema моделирует порядок артефактов, но не личность утвердившего.
Решение пересматривается, если OpenSpec перестанет поддерживать нужный artifact graph, появится обязательный общий CI/build graph или стоимость последовательной локальной orchestration станет существенной. В этих случаях новый ADR сравнивает native evolution с внешним engine либо monorepo platform.
+11
View File
@@ -1,3 +1,14 @@
# ADR
Здесь фиксируются долгоживущие технические решения. Новый ADR описывает контекст, решение и последствия; заменяемое решение получает новый ADR со ссылкой на прежний.
- [001 — Prisma и SQLite для локального MVP](001-prisma-sqlite-local-mvp.md)
- [002 — Nest-generated OpenAPI contract](002-nest-generated-openapi-contract.md)
- [003 — Server-side gRPC boundary T-Bank](003-tbank-server-side-grpc-boundary.md)
- [004 — Encrypted per-user T-Bank token](004-encrypted-per-user-tbank-token.md)
- [005 — T-Bank upstream resilience](005-tbank-upstream-resilience.md)
- [006 — Auth session policy](006-auth-session-policy.md)
- [007 — React Query fetch policy](007-react-query-fetch-policy.md)
- [008 — Pino backend logging](008-pino-backend-logging.md)
- [009 — Concurrent refresh rotation policy](009-concurrent-refresh-rotation-policy.md)
- [010 — Native OpenSpec SDD и local orchestration](010-native-openspec-sdd-and-local-orchestration.md)