From e383e5fac6051722510f812b8787cd8c0317c216 Mon Sep 17 00:00:00 2001 From: Sergey Krylov Date: Wed, 12 Aug 2026 23:10:15 +0300 Subject: [PATCH] docs: add MVP change proposals --- .../changes/add-authentication/.openspec.yaml | 2 ++ .../changes/add-authentication/proposal.md | 26 +++++++++++++++++++ .../add-brokerage-accounts/.openspec.yaml | 2 ++ .../add-brokerage-accounts/proposal.md | 26 +++++++++++++++++++ .../changes/add-portfolio-view/.openspec.yaml | 2 ++ .../changes/add-portfolio-view/proposal.md | 26 +++++++++++++++++++ .../add-tbank-connection/.openspec.yaml | 2 ++ .../changes/add-tbank-connection/proposal.md | 26 +++++++++++++++++++ 8 files changed, 112 insertions(+) create mode 100644 openspec/changes/add-authentication/.openspec.yaml create mode 100644 openspec/changes/add-authentication/proposal.md create mode 100644 openspec/changes/add-brokerage-accounts/.openspec.yaml create mode 100644 openspec/changes/add-brokerage-accounts/proposal.md create mode 100644 openspec/changes/add-portfolio-view/.openspec.yaml create mode 100644 openspec/changes/add-portfolio-view/proposal.md create mode 100644 openspec/changes/add-tbank-connection/.openspec.yaml create mode 100644 openspec/changes/add-tbank-connection/proposal.md diff --git a/openspec/changes/add-authentication/.openspec.yaml b/openspec/changes/add-authentication/.openspec.yaml new file mode 100644 index 0000000..5081c98 --- /dev/null +++ b/openspec/changes/add-authentication/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-08-12 diff --git a/openspec/changes/add-authentication/proposal.md b/openspec/changes/add-authentication/proposal.md new file mode 100644 index 0000000..16bb213 --- /dev/null +++ b/openspec/changes/add-authentication/proposal.md @@ -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 токенов, счетов и портфелей. diff --git a/openspec/changes/add-brokerage-accounts/.openspec.yaml b/openspec/changes/add-brokerage-accounts/.openspec.yaml new file mode 100644 index 0000000..5081c98 --- /dev/null +++ b/openspec/changes/add-brokerage-accounts/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-08-12 diff --git a/openspec/changes/add-brokerage-accounts/proposal.md b/openspec/changes/add-brokerage-accounts/proposal.md new file mode 100644 index 0000000..a894ad1 --- /dev/null +++ b/openspec/changes/add-brokerage-accounts/proposal.md @@ -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`. +- Не включает историю, ручную синхронизацию, закрытые счета или торговые операции. diff --git a/openspec/changes/add-portfolio-view/.openspec.yaml b/openspec/changes/add-portfolio-view/.openspec.yaml new file mode 100644 index 0000000..5081c98 --- /dev/null +++ b/openspec/changes/add-portfolio-view/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-08-12 diff --git a/openspec/changes/add-portfolio-view/proposal.md b/openspec/changes/add-portfolio-view/proposal.md new file mode 100644 index 0000000..2254099 --- /dev/null +++ b/openspec/changes/add-portfolio-view/proposal.md @@ -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, операции, выплату доходов, лимиты на вывод или валютную конвертацию. diff --git a/openspec/changes/add-tbank-connection/.openspec.yaml b/openspec/changes/add-tbank-connection/.openspec.yaml new file mode 100644 index 0000000..5081c98 --- /dev/null +++ b/openspec/changes/add-tbank-connection/.openspec.yaml @@ -0,0 +1,2 @@ +schema: spec-driven +created: 2026-08-12 diff --git a/openspec/changes/add-tbank-connection/proposal.md b/openspec/changes/add-tbank-connection/proposal.md new file mode 100644 index 0000000..36e90c6 --- /dev/null +++ b/openspec/changes/add-tbank-connection/proposal.md @@ -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`.