141 lines
8.9 KiB
Markdown
141 lines
8.9 KiB
Markdown
# Frontend Debt Audit and Backlog
|
||
|
||
Дата: 2026-06-23
|
||
Статус: выполнено
|
||
|
||
## Контекст
|
||
|
||
Frontend уже прошёл крупные волны миграции: FSD-рефакторинг, дизайн-система, тестовая инфраструктура,
|
||
tooling и часть архитектурных cleanup-задач. После этого в репозитории осталось два типа
|
||
техдолга:
|
||
|
||
1. реальные открытые хвосты, которые ещё нужно довести до конца;
|
||
2. устаревшие или слишком широкие документы, которые описывают уже изменившееся состояние кода.
|
||
|
||
Сейчас нужна отдельная SDD-фича, которая не внедряет поведение, а проводит аудит текущего frontend
|
||
состояния и превращает его в приоритизированный backlog для следующих узких фич.
|
||
|
||
## Цель
|
||
|
||
Зафиксировать актуальное состояние frontend-техдолга, отделить завершённые и устаревшие пункты от
|
||
реально открытых, и сформировать приоритизированный backlog следующих фич с понятными границами.
|
||
|
||
Этот аудит обслуживает отдельный epic `Frontend Debt Backlog` и должен приводить к разложению открытого
|
||
долга на следующие независимые фичи:
|
||
|
||
- `frontend-docs-sync`
|
||
- `frontend-infrastructure-hardening`
|
||
- `frontend-shared-boundary-cleanup`
|
||
- `frontend-test-hygiene`
|
||
|
||
## Требования
|
||
|
||
### 1. Инвентаризация текущего состояния
|
||
|
||
Нужно проверить актуальное состояние frontend по трём источникам:
|
||
|
||
- `apps/frontend/src/` — код, экспорты, зависимости слоёв, test helpers, API surface;
|
||
- `docs/features/` — существующие спецификации, планы и задачи по frontend;
|
||
- `docs/inbox.md` и `docs/roadmap.md` — гипотезы и уже зафиксированные кандидатные работы.
|
||
|
||
Аудит должен явно разделить находки на категории:
|
||
|
||
- уже закрыто;
|
||
- ещё открыто;
|
||
- устарело и подлежит пересмотру;
|
||
- требует отдельной новой фичи.
|
||
|
||
### 2. Приоритизация открытого долга
|
||
|
||
Все открытые пункты должны быть сгруппированы в небольшие независимые фичи. Для каждой группы нужно
|
||
зафиксировать:
|
||
|
||
- цель;
|
||
- почему это долг;
|
||
- примерный риск/сложность;
|
||
- рекомендуемый порядок реализации;
|
||
- какие текущие документы это затрагивает.
|
||
|
||
### 3. Синхронизация проектной доки
|
||
|
||
Результаты аудита должны быть отражены в проектных документах:
|
||
|
||
- `docs/inbox.md` — как источник идей и низкосигнальных заметок;
|
||
- `docs/roadmap.md` — как список следующих фич и кандидатов;
|
||
- `docs/features/frontend-debt-audit/*` — как SDD-артефакты самой audit-фичи.
|
||
|
||
Плюс результаты аудита должны служить входом для эпика `Frontend Debt Backlog`.
|
||
|
||
### 4. Никаких изменений поведения
|
||
|
||
Эта фича не меняет runtime-поведение frontend, не трогает backend и не вводит продуктовые улучшения
|
||
сверх формализации найденного долга.
|
||
|
||
## Ограничения
|
||
|
||
- Только frontend-область и связанные с ней docs.
|
||
- Не выполнять миграции кода в рамках этой фичи.
|
||
- Не смешивать аудит с внедрением follow-up задач.
|
||
- Не дублировать уже закрытые FSD/infra cleanup работы как новые задачи.
|
||
|
||
## Критерии приемки
|
||
|
||
- Зафиксирован перечень проверенных областей frontend-аудита с доказательствами по каждой области.
|
||
- Для каждого открытого debt-item есть приоритет и рекомендация по разбиению на следующую фичу.
|
||
- В `docs/inbox.md` добавлена актуальная заметка о frontend debt backlog.
|
||
- В `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
|