docs: record AI governance audit
This commit is contained in:
@@ -18,4 +18,4 @@ flowchart LR
|
||||
|
||||
## Consequences
|
||||
|
||||
Контроль секретов, повторов и лимитов централизован на сервере. Реализация boundary будет добавлена будущим OpenSpec change подключения T-Bank.
|
||||
Контроль секретов, повторов и лимитов централизован на сервере. Boundary реализована и используется поставленными сценариями; текущее API, resilience и ограничения описаны в [Подключении T-Bank](../features/tbank-connection.md).
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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).
|
||||
|
||||
@@ -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.
|
||||
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user