Sergey Krylov 0c4250fa6c
Some checks failed
CI / ci (pull_request) Failing after 2m54s
CI / ci (push) Failing after 3m9s
feat(frontend): complete frontend debt audit with reconciled backlog
2026-06-24 09:09:50 +03:00

8.9 KiB
Raw Blame History

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.mdinbox.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

Открыто, не покрыто ни одной фичей (нуждается в новых задачах):

# Приоритет 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