146 lines
9.2 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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-пунктов (P0P3) от 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
**Открыто и перенесено в canonical architecture backlog:**
| # | Приоритет | Debt item | Риск |
|---|-----------|-----------|------|
| 1 | P0/P1 | T-Bank data isolation by user | multi-tenant data leak |
| 2 | P1 | Local T-Bank history read-path | история читается напрямую из T-Bank |
| 3 | P1/P2 | Session model for multiple surfaces | single-token, нет device-level сессий |
| 4 | P2 | Reduce type unsafety (`as any`, `no-explicit-any`) | остаточная type unsafety в contract/runtime boundaries |
| 5 | P2 | Expand testing strategy (coverage thresholds, E2E) | нет coverage gates, нет Playwright smoke |
| 6 | P3 | Route-level lazy loading + performance budgets | eager delivery без явных budgets |
Эти направления больше не должны жить как независимый frontend-only backlog. Их canonical форма и
порядок ведутся в `docs/features/architecture-quality-backlog/spec.md` и `docs/roadmap.md`.
**Устарело и подлежит пересмотру:**
- P1 `API envelope double-wrapping`**resolved**: закрыто фичей `api-envelope-contract`
- P1 `Production config & auth security hardening` — первичный scope закрыт в
`backend-architecture-refactor`; оставшийся policy/runtime backlog перенесён в
`architecture-quality-backlog`
- 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