Skip to content

BCG Phase 1 — Foundation Fix

Дата: 2026-04-20 Основание: archive/2026-04-23-bcg-planning-docs/BCG_plan.md Фаза 1, archive/2026-04-23-bcg-planning-docs/bcg-phase-1-execution.md Цель: frontend architecture 4.0/10 → 7.0/10 Исполнитель: CX (Codex), по одной задаче за раз (без параллели)

Устранить технический долг фронтенда: перевести state на Zustand, разрезать App.tsx (487 стр) и ResultsPanel.tsx (1919 стр), добавить error boundaries, унифицировать CSS, закрыть type-safety пробелы.

  • App.tsx — 487 строк, ~20 useState, prop-drilling через wizardPanelProps/sidebarPanelProps
  • ResultsPanel.tsx — 1919 строк, 11+ логических секций в одном файле
  • useProjectManager.ts — 850 строк, useAnalysis.ts — 181, useDraftPersistence.ts — 170
  • Hook-тесты уже есть: useAnalysis.test.tsx (292 стр), useProjectManager.test.tsx (479), useDraftPersistence.test.tsx (194) — требуют аудита покрытия против BCG 1.1
  • stores/ директории нет, ErrorBoundary нет, CSS частично в App.css (214 стр)
  • Тесты: backend pytest + frontend vitest (~8 файлов) должны оставаться зелёными на каждом шаге

Tasks (строго последовательно)

Section titled “Tasks (строго последовательно)”
  • T1 Аудит hook-тестов против BCG 1.1 чек-листа, закрыть пробелы Verify: cd app/frontend && npx vitest run src/hooks — все зелёные, покрыты все сценарии из 1.1.1-1.1.4

  • T2 Установить Zustand, создать themeStore + wizardStore Verify: npm ls zustand без ошибок, theme toggle и wizard navigation работают, npx vitest run зелёный

  • T3 Создать analysisStore + draftStore, перенести логику из useAnalysis/useDraftPersistence Verify: старые hook-тесты адаптированы под store, npx vitest run src/stores src/hooks зелёный

  • T4 Создать projectStore, перенести 850 строк логики из useProjectManager Verify: useProjectManager.test.tsx адаптирован под store и зелёный, e2e flow (new → save → load → archive → restore) работает вручную

  • T5 Рефакторинг App.tsx на stores, удалить wizardPanelProps/sidebarPanelProps Verify: wc -l src/App.tsx < 120, rg "wizardPanelProps\|sidebarPanelProps" src/App.tsx пусто, npx vitest run зелёный

  • T6 Разрезать ResultsPanel.tsx на 11 секций в components/results/ Verify: wc -l src/components/ResultsPanel.tsx < 150, каждая секция рендерится, ResultsPanel.test.tsx зелёный

  • T7 ErrorBoundary + ChartErrorBoundary, обернуть layout и chart-компоненты Verify: тест с искусственной ошибкой в chart → fallback UI, остальной layout живой

  • T8 Разделить App.css на layout.css / components.css / utilities.css, перевести оставшиеся компоненты на CSS Modules Verify: визуальная парность (light + dark mode), npx vitest run зелёный

  • T9 Type-safety pass: enum-типы вместо string-matching, убрать as assertions Verify: npx tsc --noEmit — 0 ошибок, rg " as " src --type ts — только осознанные случаи

  • T10 Финальная верификация Phase 1 Verify: cmd /c scripts\verify_all.cmd проходит полностью, чек-листы из archive/2026-04-23-bcg-planning-docs/BCG_plan.md L186 выполнены

  • App.tsx < 120 строк, ResultsPanel.tsx < 150 строк
  • 5 Zustand stores: theme, wizard, analysis, project, draft
  • ErrorBoundary + ChartErrorBoundary обёрнуты в layout и chart-компоненты
  • npx tsc --noEmit = 0 ошибок
  • npx vitest run и pytest зелёные
  • scripts/verify_all.cmd проходит полностью
  • Без параллельных агентов — каждая T задача отдельным CX-батчем, review перед следующей
  • Тесты — контракт: все существующие 17 backend + frontend тестов должны проходить на каждом шаге
  • Research done: Zustand выбран в archive/2026-04-23-bcg-planning-docs/BCG_plan.md L50 (vs Redux/Jotai) — лёгкий API, минимум boilerplate, совместим с текущими React 19 хуками. Альтернативы не искали повторно.
  • CX-таски лежат в docs/plans/codex-tasks/bcg-p1-*.md