51 lines
8.7 KiB
Markdown
51 lines
8.7 KiB
Markdown
## 1. Точная backend-сводка и контракт списка
|
||
|
||
- [x] 1.1 [backend] Извлечь backend-owned normalizer `Money[]` из текущего Portfolio flow и применить его как для snapshot деталей, так и для компактной сводки списка: нормализовать ISO-валюты, точно сложить ненулевые стоимости позиций и Cash Balance одной валюты, не выполнять FX-конвертацию и не загружать Instrument metadata для списка.
|
||
- **Covers:** `brokerage-accounts` — `Список активных брокерских счетов`
|
||
- **Verification:** `npm test -- tbank/portfolio.service.spec.ts --runInBand` в `backend` с cases точных итогов, Cash Balance, нулевых/безвалютных значений и пустого доступного Portfolio.
|
||
- [x] 1.2 [backend] Расширить `BrokerageAccountDto` nullable `portfolioSummary` с `totalsByCurrency` и изменить list orchestration за существующей `TbankAccessService`: для каждого поддерживаемого upstream-счёта параллельно получить два Portfolio-входа, сохранить upstream-порядок, локализовать только `TBANK_UNAVAILABLE` как `portfolioSummary: null`, а ошибки connection/token и прочие ошибки списка оставить существующей boundary.
|
||
- **Covers:** `brokerage-accounts` — `Список активных брокерских счетов`
|
||
- **Verification:** `npm test -- tbank/brokerage-accounts.service.spec.ts --runInBand` в `backend` с cases порядка, успешных нескольких сводок, локальной unavailable-сводки, пустой сводки и неподавленных connection/token ошибок.
|
||
- [x] 1.3 [backend] Пройти canonical backend gate после DTO, normalizer и list orchestration.
|
||
- **Covers:** `N/A` — canonical gate проверяет реализацию уже покрытого contract и money behavior, не вводя отдельного observable requirement.
|
||
- **Verification:** `npm run verify` в `backend` под Node 22.
|
||
|
||
## 2. Generated frontend contract и доступный список
|
||
|
||
- [x] 2.1 [frontend] После доступности backend OpenAPI синхронизировать committed OpenAPI snapshot и generated schema через штатный workflow; использовать расширенный generated `BrokerageAccount` type без ручного transport DTO.
|
||
- **Covers:** `N/A` — это обязательная реализация решения D3 для already-specified public response, не новое client behavior.
|
||
- **Verification:** `npm run openapi:sync` в `frontend`, затем `npm run openapi:check` в `frontend`.
|
||
- [x] 2.2 [frontend] Расширить Accounts page VM и её focused tests: сохранить существующие key, `staleTime: 60_000`, отсутствие retry/refetch-on-focus, invalidation и top-level loading/error/empty/cached-snapshot selection; подготовить display model сводки карточки с максимум двумя исходными Money, индикатором остальных валют и раздельными состояниями unavailable/empty.
|
||
- **Covers:** `brokerage-accounts` — `Экран списка брокерских счетов`
|
||
- **Verification:** `npm run test:run -- src/pages/accounts/ui/AccountsPage.test.tsx` в `frontend` с cases fresh cache, background refresh/error snapshot, limit двух валют, remaining-currency indicator, unavailable и empty summary.
|
||
- [x] 2.3 [frontend] Переработать presentation списка в адаптивную одноколоночную последовательность широких ссылок-карточек: отобразить локализованные тип, имя, summary, вторичные метаданные даты и видимое действие открытия; сохранить native link navigation/focus, безопасный local summary state и форматирование каждого переданного Money существующим formatter без агрегации или FX-смысла.
|
||
- **Covers:** `brokerage-accounts` — `Экран списка брокерских счетов`
|
||
- **Verification:** `npm run test:run -- src/entities/brokerage-account/ui/BrokerageAccountList.test.tsx` в `frontend` с accessible link/action, доступными summary states и responsive single-column class behavior.
|
||
- [x] 2.4 [frontend] Сохранить известные list error states и recovery actions в page VM/presentation: connection и invalid-token ведут только к настройкам, temporary unavailable показывает retry и settings, unknown error — только retry; при Client Cached Snapshot warning не скрывает карточки и не запускает retry автоматически.
|
||
- **Covers:** `brokerage-accounts` — `Клиентские состояния ошибки списка счетов`
|
||
- **Verification:** `npm run test:run -- src/pages/accounts/ui/AccountsPage.test.tsx` в `frontend` с cases всех известных/unknown errors, recovery actions и cached-snapshot warning.
|
||
- [x] 2.5 [frontend] Пройти canonical frontend gate после generated contract, VM, presentation и tests.
|
||
- **Covers:** `N/A` — canonical gate подтверждает delivered frontend behavior и boundary rules, но не задаёт новый requirement.
|
||
- **Verification:** `npm run verify` в `frontend` под Node 22.
|
||
|
||
## 3. As-built documentation и canonical SDD checks
|
||
|
||
- [x] 3.1 [docs] Обновить delivered documentation брокерских счетов и system overview после verified implementation: описать additive summary contract, исходные валюты без FX-агрегации, локальную unavailable-сводку, неизменную current-connection boundary и Client Cached Snapshot; не копировать OpenSpec planning artifacts.
|
||
- **Covers:** `N/A` — docs фиксирует только поставленное as-built состояние из Design Delivery Map и не создаёт самостоятельного observable behavior.
|
||
- **Verification:** Review `docs/features/brokerage-accounts.md` и `docs/architecture/system-overview.md` against delivered backend OpenAPI and frontend behavior.
|
||
- [x] 3.2 [docs] Пройти canonical docs gate для as-built documentation.
|
||
- **Covers:** `N/A` — Markdown gate подтверждает documentation delivery и не реализует отдельный Delta Requirement.
|
||
- **Verification:** `npm run verify` в `docs` под Node 22.
|
||
- [x] 3.3 [specs] Проверить canonical change artifacts и strict Delta Specs после создания Tasks, не создавая competing planning source.
|
||
- **Covers:** `N/A` — specs area владеет SDD artifact integrity, а не отдельным runtime behavior.
|
||
- **Verification:** `bash specs/scripts/verify-openspec-planning.sh enhance-brokerage-account-list`, `openspec validate enhance-brokerage-account-list --type change --strict --store wealth-ledger-specs` и `openspec validate --specs --strict --store wealth-ledger-specs` из `specs`.
|
||
|
||
## 4. Cross-repository verification before archive
|
||
|
||
- [x] 4.1 [workspace] Выполнить canonical workspace dispatcher после всех repository-owned tasks, включая required runtime OpenAPI contract gate для backend response и committed frontend snapshot.
|
||
- **Covers:** `N/A` — workspace только оркестрирует approved Delivery Map и repository gates; он не владеет implementation behavior.
|
||
- **Verification:** `bash specs/scripts/verify-workspace-change.sh enhance-brokerage-account-list` из workspace root под Node 22.
|
||
- [x] 4.2 [workspace] Провести semantic verification и independent read-only review implementation против Proposal, всех Delta Requirements/Scenarios, Decisions D1–D4, rollback contract и completed Tasks; устранить Critical и Important findings до archive eligibility.
|
||
- **Covers:** `N/A` — terminal review доказывает соответствие уже specified behavior, не вводя нового requirement.
|
||
- **Verification:** Сохранить review scope, findings и resolution только после фактической проверки; подтвердить отсутствие Critical и Important findings.
|