docs: add MVP change proposals

This commit is contained in:
2026-08-12 23:10:15 +03:00
parent 68be4760ce
commit e383e5fac6
8 changed files with 112 additions and 0 deletions
@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-08-12
@@ -0,0 +1,26 @@
## Why
После baseline приложение не различает пользователей и не может безопасно предоставить личные данные или подключение к T-Bank. Авторизация нужна как первая пользовательская возможность и как граница владения всеми последующими данными.
## What Changes
- Добавить свободную регистрацию и вход по нормализованному email и паролю не короче 12 символов.
- Добавить access JWT в ответе API и rotating refresh JWT в `httpOnly`, `SameSite=Lax` cookie, а также refresh, logout и получение текущего профиля.
- Добавить защищенные backend-маршруты и frontend-маршрутизацию с восстановлением сессии.
- Добавить страницы входа и регистрации без восстановления или смены пароля.
- Зафиксировать фактический пользовательский поток авторизации в feature-документации.
## Capabilities
### New Capabilities
- `user-authentication`: Регистрация, вход, refresh-сессия, logout и текущий профиль пользователя.
### Modified Capabilities
Нет.
## Impact
- Затрагивает SQLite schema и Prisma migrations, NestJS auth API/OpenAPI, frontend API-клиент, маршруты и session state.
- Добавляет зависимости для JWT, bcrypt и cookie parsing.
- Создает user-scoped контекст для будущих T-Bank токенов, счетов и портфелей.
@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-08-12
@@ -0,0 +1,26 @@
## Why
После подключения T-Bank token пользователю нужен основной экран, который показывает его доступные брокерские счета и направляет в настройки при отсутствии или недействительности token. Это делает интеграцию наблюдаемой и полезной до детального портфеля.
## What Changes
- Добавить защищенный API списка активных T-Bank инвестиционных счетов пользователя через нормализованные backend DTO.
- Добавить страницу `/accounts` со списком счетов всех поддерживаемых T-Bank типов, пустым состоянием подключения и безопасным состоянием upstream-ошибок.
- Показывать фактическое время последнего успешного получения данных T-Bank и не скрывать полученные счета при частичной ошибке.
- Получать данные при открытии экрана через React Query без focus refetch и без ручной кнопки обновления.
- Документировать пользовательский поток списка счетов и ограничения актуальности данных.
## Capabilities
### New Capabilities
- `brokerage-accounts`: Просмотр активных брокерских счетов подключенного T-Bank пользователя.
### Modified Capabilities
Нет.
## Impact
- Затрагивает T-Bank client, authenticated backend API/OpenAPI, frontend accounts page и generated API client.
- Зависит от `add-authentication` и `add-tbank-connection`.
- Не включает историю, ручную синхронизацию, закрытые счета или торговые операции.
@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-08-12
@@ -0,0 +1,26 @@
## Why
Список счетов без состава активов не решает основную задачу MVP: понимать текущее состояние инвестиций. Детальный портфель должен оставаться нормализованным backend-представлением и не раскрывать protobuf-модель T-Bank frontend.
## What Changes
- Добавить защищенный API портфеля выбранного счета с агрегатами, всеми типами позиций и денежными остатками.
- Передавать денежные значения как десятичные строки с кодом валюты без конвертации и без арифметики на JavaScript float.
- Добавить страницу `/accounts/:accountId` с позициями, сортировкой по текущей стоимости по убыванию, пустым портфелем и временем последнего успешного upstream-ответа.
- Получать и кэшировать метаданные инструментов; при недоступности названия или тикера показывать `figi`, не скрывая финансовые значения.
- Документировать портфель, fallback-правила и различие штатного пустого состояния от upstream-ошибки.
## Capabilities
### New Capabilities
- `portfolio-view`: Просмотр нормализованного состава и агрегатов портфеля активного брокерского счета.
### Modified Capabilities
Нет.
## Impact
- Затрагивает T-Bank client, cache метаданных инструментов, authenticated backend API/OpenAPI, frontend detail page и generated API client.
- Зависит от `add-authentication`, `add-tbank-connection` и `add-brokerage-accounts`.
- Не включает историю snapshots, операции, выплату доходов, лимиты на вывод или валютную конвертацию.
@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-08-12
@@ -0,0 +1,26 @@
## Why
После авторизации пользователю нужен безопасный способ подключить свой read-only T-Bank Invest token, чтобы backend мог получать персональные инвестиционные данные. Токен и доступ к внешнему API должны оставаться полностью за backend boundary.
## What Changes
- Добавить настройки профиля для добавления, замены и удаления одного T-Bank token на пользователя.
- Проверять token вызовом T-Bank `GetAccounts` до сохранения и хранить только шифротекст с ключом из окружения.
- Добавить server-side gRPC T-Bank client с глобальным конфигурируемым лимитом 5 запросов в секунду, ограниченными повторами временных ошибок и безопасной классификацией upstream-ошибок.
- Добавить краткоживущий in-memory cache для данных счетов/портфеля и долгий cache метаданных инструментов.
- Документировать поток подключения, правила обработки token и устойчивость upstream-вызовов.
## Capabilities
### New Capabilities
- `tbank-connection`: Защищенное управление T-Bank token пользователя и backend boundary для read-only вызовов Invest API.
### Modified Capabilities
Нет.
## Impact
- Затрагивает authenticated backend API/OpenAPI, SQLite schema, настройки frontend и generated API client.
- Добавляет server-side gRPC/protobuf зависимости и T-Bank configuration variables.
- Использует user identity, созданную change `add-authentication`.