9.2 KiB
Frontend Debt Audit and Backlog
Дата: 2026-06-23 Статус: выполнено
Контекст
Frontend уже прошёл крупные волны миграции: FSD-рефакторинг, дизайн-система, тестовая инфраструктура, tooling и часть архитектурных cleanup-задач. После этого в репозитории осталось два типа техдолга:
- реальные открытые хвосты, которые ещё нужно довести до конца;
- устаревшие или слишком широкие документы, которые описывают уже изменившееся состояние кода.
Сейчас нужна отдельная SDD-фича, которая не внедряет поведение, а проводит аудит текущего frontend состояния и превращает его в приоритизированный backlog для следующих узких фич.
Цель
Зафиксировать актуальное состояние frontend-техдолга, отделить завершённые и устаревшие пункты от реально открытых, и сформировать приоритизированный backlog следующих фич с понятными границами.
Этот аудит обслуживает отдельный epic Frontend Debt Backlog и должен приводить к разложению открытого
долга на следующие независимые фичи:
frontend-docs-syncfrontend-infrastructure-hardeningfrontend-shared-boundary-cleanupfrontend-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/**.
Результаты аудита
Инвентаризация источников
Проверено три источника согласно требованиям:
-
apps/frontend/src/— FSD-миграция завершена, слои clean (entities 10, features 2, widgets 18, pages 13, shared 4 категории, app 6 файлов). Найдено 0TODO, 0FIXME, 0@ts-ignore, 0as anyв source-коде. 25 тестовых файлов проходят. Общий объём: 185 source-файлов + 13 mock-файлов. -
docs/features/— существующие frontend specs/plans согласованы с epicFrontend Debt Backlog. 4 follow-up фичи созданы и имеют статусcompleted. -
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/roadmapfrontend-infrastructure-hardening— browser mock mode, env validation, tooling consistencyfrontend-shared-boundary-cleanup— сужение shared/public APIfrontend-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