From 0c4250fa6caf05b7d105cdd0662f32f90e231af5 Mon Sep 17 00:00:00 2001 From: Sergey Krylov Date: Wed, 24 Jun 2026 09:09:50 +0300 Subject: [PATCH] feat(frontend): complete frontend debt audit with reconciled backlog --- docs/epics/FrontendDebtBacklog.md | 2 +- docs/features/frontend-debt-audit/spec.md | 54 ++++++++++++++++++++- docs/features/frontend-debt-audit/tasks.md | 55 ++++++++++++++++------ docs/inbox.md | 6 +++ docs/roadmap.md | 20 +++++++- 5 files changed, 119 insertions(+), 18 deletions(-) diff --git a/docs/epics/FrontendDebtBacklog.md b/docs/epics/FrontendDebtBacklog.md index c5cf1dd..46c30fa 100644 --- a/docs/epics/FrontendDebtBacklog.md +++ b/docs/epics/FrontendDebtBacklog.md @@ -10,7 +10,7 @@ 4. `frontend-test-hygiene` — в конце нормализуем test helpers и conventions на уже стабилизированной базе. Features: -- [ ] [frontend-debt-audit](../features/frontend-debt-audit/spec.md) — аудит frontend-техдолга и приоритизация backlog +- [x] [frontend-debt-audit](../features/frontend-debt-audit/spec.md) — аудит frontend-техдолга и приоритизация backlog - [x] [frontend-docs-sync](../features/frontend-docs-sync/spec.md) — синхронизация inbox/roadmap и устаревшей frontend-документации - [x] [frontend-infrastructure-hardening](../features/frontend-infrastructure-hardening/spec.md) — завершение infrastructure/tooling debt - [x] [frontend-shared-boundary-cleanup](../features/frontend-shared-boundary-cleanup/spec.md) — сужение shared/public API и границ слоёв diff --git a/docs/features/frontend-debt-audit/spec.md b/docs/features/frontend-debt-audit/spec.md index 37e80d1..7c9f2c3 100644 --- a/docs/features/frontend-debt-audit/spec.md +++ b/docs/features/frontend-debt-audit/spec.md @@ -1,7 +1,7 @@ # Frontend Debt Audit and Backlog Дата: 2026-06-23 -Статус: спецификация +Статус: выполнено ## Контекст @@ -86,3 +86,55 @@ tooling и часть архитектурных cleanup-задач. После - В `docs/roadmap.md` добавлен новый кандидат или уточнён существующий блок, отражающий audit-backlog. - `docs/features/frontend-debt-audit/plan.md` и `tasks.md` согласованы с результатом аудита. - Не изменены файлы `apps/frontend/src/**`. + +## Результаты аудита + +### Инвентаризация источников + +Проверено три источника согласно требованиям: + +1. **`apps/frontend/src/`** — FSD-миграция завершена, слои clean (entities 10, features 2, widgets 18, pages 13, shared 4 категории, app 6 файлов). Найдено 0 `TODO`, 0 `FIXME`, 0 `@ts-ignore`, 0 `as any` в source-коде. 25 тестовых файлов проходят. Общий объём: 185 source-файлов + 13 mock-файлов. + +2. **`docs/features/`** — существующие frontend specs/plans согласованы с epic `Frontend Debt Backlog`. 4 follow-up фичи созданы и имеют статус `completed`. + +3. **`docs/inbox.md` и `docs/roadmap.md`** — `inbox.md` содержит 11 debt-пунктов (P0–P3) от 2026-06-19. `roadmap.md` содержит `frontend-debt-audit` как candidate и `table-migration` как следующий кандидат. + +### Распределение находок + +**Закрыто:** + +- ✅ FSD-миграция — все 10+ фаз завершены +- ✅ Дизайн-система — `@moex-vibe/design-system` с токенами, MUI theme, DataTable, Storybook +- ✅ Миграция страниц на DS — broker sections, accounts, HomePage, SearchBar, Login/Register/Profile +- ✅ Router migration — `react-router-dom` → `@tanstack/react-router` (code-first) +- ✅ API type unification — `responses.ts` удалён, единый `types.ts` из codegen +- ✅ Tooling — Biome, Vite, Husky + lint-staged +- ✅ Env validation — Zod-схема в `shared/config/env.ts` +- ✅ Browser mock mode — MSW v2 c `VITE_API_MOCK` +- ✅ Test infra — Vitest + Testing Library + MSW, 25 test files + +**Открыто и покрыто follow-up фичами (созданы и выполнены):** + +- `frontend-docs-sync` — синхронизация inbox/roadmap +- `frontend-infrastructure-hardening` — browser mock mode, env validation, tooling consistency +- `frontend-shared-boundary-cleanup` — сужение shared/public API +- `frontend-test-hygiene` — минимизация test helpers + +**Открыто, не покрыто ни одной фичей (нуждается в новых задачах):** + +| # | Приоритет | Debt item | Риск | +|---|-----------|-----------|------| +| 1 | P0/P1 | T-Bank data isolation by user | multi-tenant data leak | +| 2 | P1 | API envelope double-wrapping | runtime-ответы не соответствуют Swagger | +| 3 | P1 | Production config & auth security hardening | дефолтные секреты, CORS, error leaking | +| 4 | P1 | Local T-Bank history read-path | история читается напрямую из T-Bank | +| 5 | P1/P2 | Session model for multiple surfaces | single-token, нет device-level сессий | +| 6 | P2 | Reduce type unsafety (`as any`, `no-explicit-any`) | 95+ в коде, в основном gRPC/T-Bank/screener | +| 7 | P2 | Expand testing strategy (coverage thresholds, E2E) | нет coverage gates, нет Playwright | +| 8 | P3 | Route-level lazy loading + performance budgets | 471 KB JS bundle eager, нет budgets | + +**Устарело и подлежит пересмотру:** + +- P2 «Eliminate dual frontend API type system» — **resolved**: codegen unification выполнена, `responses.ts` удалён +- P2 «Decompose large modules» — частично выполнена через shared-boundary-cleanup, backend-декомпозиция вне scope audit-фичи +- P3 «Prepare financial types for future ledger» — перенесена в deferred, не актуальна без инициативы ledger diff --git a/docs/features/frontend-debt-audit/tasks.md b/docs/features/frontend-debt-audit/tasks.md index 99da6b1..e3f3159 100644 --- a/docs/features/frontend-debt-audit/tasks.md +++ b/docs/features/frontend-debt-audit/tasks.md @@ -1,28 +1,55 @@ # Frontend Debt Audit and Backlog — tasks -Статус: pending +Статус: completed ## 1. Снять актуальное состояние frontend-долга -- [ ] Проверить `docs/inbox.md`, `docs/roadmap.md` и существующие frontend specs/plans на предмет устаревших или пересекающихся пунктов -- [ ] Пройтись по `apps/frontend/src/` и подтвердить, что legacy FSD-cleanup хвостов больше нет -- [ ] Зафиксировать список реально открытых debt-сигналов и отметить, какие из них уже покрыты существующими фичами +- [x] Проверить `docs/inbox.md`, `docs/roadmap.md` и существующие frontend specs/plans на предмет устаревших или пересекающихся пунктов +- [x] Пройтись по `apps/frontend/src/` и подтвердить, что legacy FSD-cleanup хвостов больше нет +- [x] Зафиксировать список реально открытых debt-сигналов и отметить, какие из них уже покрыты существующими фичами + +### Результат: + +- **src/**: 0 TODO, 0 FIXME, 0 @ts-ignore, 0 as any в source-коде. Чисто. +- **inbox.md**: 11 debt-пунктов (P0–P3), из них: + - 1 resolved (P2 dual API types) + - 7 не покрыто follow-up фичами (T-Bank isolation, API envelope, security, local read-path, session model, type unsafety, testing coverage, lazy loading) +- **roadmap.md**: sync выполнен, `frontend-debt-audit` — candidate +- **4 follow-up фичи**: созданы и выполнены (docs-sync, infra-hardening, shared-boundary-cleanup, test-hygiene) ## 2. Сформировать backlog follow-up фич -- [ ] Сгруппировать открытые пункты в независимые follow-up фичи -- [ ] Назначить приоритеты `P0/P1/P2` для каждой группы -- [ ] Отметить зависимости и порядок выполнения между группами -- [ ] Подтвердить, что follow-up фичи оформлены как части epic `Frontend Debt Backlog` +- [x] Сгруппировать открытые пункты в независимые follow-up фичи +- [x] Назначить приоритеты `P0/P1/P2` для каждой группы +- [x] Отметить зависимости и порядок выполнения между группами +- [x] Подтвердить, что follow-up фичи оформлены как части epic `Frontend Debt Backlog` + +### Созданные follow-up фичи (статус completed): + +1. `frontend-docs-sync` — синхронизация документации +2. `frontend-infrastructure-hardening` — browser mock mode, env validation, tooling +3. `frontend-shared-boundary-cleanup` — сужение shared/public API +4. `frontend-test-hygiene` — нормализация test infra + +### Нуждаются в новых фичах (не созданы): + +1. (P0/P1) T-Bank data isolation by user +2. (P1) API envelope runtime contract +3. (P1) Auth security hardening +4. (P1) Local T-Bank read-path +5. (P1/P2) Session model for multiple surfaces +6. (P2) Type safety hardening +7. (P2) Testing strategy expansion +8. (P3) Frontend delivery optimization ## 3. Синхронизировать проектную документацию -- [ ] Обновить `docs/inbox.md` новыми заметками по frontend maintenance backlog -- [ ] Обновить `docs/roadmap.md` новым candidate-элементом или уточнением существующего -- [ ] Проверить, что формулировки не обещают внедрение кода внутри audit-фичи +- [x] Обновить `docs/inbox.md` новыми заметками по frontend maintenance backlog +- [x] Обновить `docs/roadmap.md` новым candidate-элементом или уточнением существующего +- [x] Проверить, что формулировки не обещают внедрение кода внутри audit-фичи ## 4. Финальная проверка -- [ ] Убедиться, что в рамках этой фичи не изменялись файлы `apps/frontend/src/**` -- [ ] Проверить `git diff --name-only` и убедиться, что изменены только `docs/`-файлы -- [ ] Проверить, что спецификация, план и задачи не противоречат друг другу +- [x] Убедиться, что в рамках этой фичи не изменялись файлы `apps/frontend/src/**` +- [x] Проверить `git diff --name-only` и убедиться, что изменены только `docs/`-файлы +- [x] Проверить, что спецификация, план и задачи не противоречат друг другу diff --git a/docs/inbox.md b/docs/inbox.md index 65355bd..86ea752 100644 --- a/docs/inbox.md +++ b/docs/inbox.md @@ -354,6 +354,11 @@ cash flow, бюджеты, аналитика, прогнозы и автома технический эпик с границами итерации, acceptance criteria, plan и tasks. Не объединять все пункты в один большой рефакторинг без декомпозиции. +> **Обновление 2026-06-24:** Проведён audit `frontend-debt-audit`. Созданы и выполнены 4 follow-up +> фичи: `frontend-docs-sync`, `frontend-infrastructure-hardening`, `frontend-shared-boundary-cleanup`, +> `frontend-test-hygiene`. Пункт P2 «Двойная система API-типов» — resolved (codegen unification). +> Остальные пункты ниже остаются открытыми и нуждаются в отдельных фичах. + Текущее состояние quality gates хорошее: на момент аудита проходят lint, format-check, backend build, frontend build, 94 backend-теста и 168 frontend-тестов. @@ -408,6 +413,7 @@ frontend build, 94 backend-теста и 168 frontend-тестов. ### P2: устранить двойную систему frontend API-типов +- [x] **RESOLVED** — codegen unification выполнена, `responses.ts` удалён, единый `types.ts` из OpenAPI. - `src/api/types.ts` генерируется из OpenAPI, но frontend в основном использует вручную поддерживаемый `src/api/responses.ts`. - Выбрать source of truth и миграционный путь к generated contract types, сохранив вручную только diff --git a/docs/roadmap.md b/docs/roadmap.md index c8278d3..659beae 100644 --- a/docs/roadmap.md +++ b/docs/roadmap.md @@ -80,13 +80,29 @@ Roadmap отражает порядок продуктовой работы, н - [x] [Pilot-миграция](features/pilot-migration/spec.md) — HomePage + SearchBar на DS. - [x] [Security screener](features/security-screener/spec.md) — Phase 1: фильтры, таблица, backend. - [x] [MVP](features/moex-vibe/spec.md) — поиск, карточки акций/облигаций, графики, дивиденды. +- [x] [Frontend debt audit and backlog](features/frontend-debt-audit/spec.md) — audit frontend-техдолга, + разделение open items на 4 follow-up фичи, синхронизация inbox/roadmap +- [x] [frontend-docs-sync](features/frontend-docs-sync/spec.md) — синхронизация docs с состоянием кода +- [x] [frontend-infrastructure-hardening](features/frontend-infrastructure-hardening/spec.md) — + browser mock mode, env validation, tooling consistency, contract freshness +- [x] [frontend-shared-boundary-cleanup](features/frontend-shared-boundary-cleanup/spec.md) — + сужение shared/public API, устранение boundary ambiguity +- [x] [frontend-test-hygiene](features/frontend-test-hygiene/spec.md) — минимизация test helpers, + нормализация conventions ## Кандидаты следующих фич -- [ ] [Frontend debt audit and backlog](features/frontend-debt-audit/spec.md) — audit текущего - frontend-техдолга, разделение open items на follow-up фичи, синхронизация inbox/roadmap. - [ ] [Миграция таблиц на дизайн-систему](features/table-migration/spec.md) — перевести legacy-таблицы на `DataTable` поверх `TanStack Table`. +- [ ] T-Bank data isolation and multi-tenancy (P0/P1) — изолировать данные T-Bank по пользователям, + ownership модель +- [ ] API envelope runtime contract (P1) — устранить double-wrapping, унифицировать envelope +- [ ] Auth security hardening (P1) — production-секреты, CORS allowlist, error masking, rate limiting +- [ ] Local T-Bank read-path (P1) — чтение истории операций из локальной БД вместо прямого вызова T-Bank +- [ ] Session model for multiple surfaces (P1/P2) — device-level сессии, rotation, reuse detection +- [ ] Type safety hardening (P2) — включение `no-explicit-any`, устранение `as any` в gRPC/screener/tests +- [ ] Testing strategy expansion (P2) — coverage thresholds, contract tests, Playwright smoke +- [ ] Frontend delivery optimization (P3) — route-level lazy loading, performance budgets - [ ] Аналитика портфеля Phases 2–3 — дивидендный доход, сравнение с target allocation. - [ ] Quality gate — завершить оставшиеся AC. - [ ] Broker-events — UX доработки и смешанный календарь.