diff --git a/docs/superpowers/specs/2026-05-09-sprint2-modernization-design.md b/docs/superpowers/specs/2026-05-09-sprint2-modernization-design.md new file mode 100644 index 00000000..6b54739c --- /dev/null +++ b/docs/superpowers/specs/2026-05-09-sprint2-modernization-design.md @@ -0,0 +1,80 @@ +# Spec: Спринт 2 «Modernization» — 12 O-\* находок аудита 2026-05-09 + +**Версия:** 1.0 +**Дата:** 09.05.2026 +**Заказчик:** Дмитрий +**Статус:** утверждён («а» в auto-mode после Sprint 1) + +## 1. Цель + +Закрыть 12 low/medium-risk O-\* находок аудита (после Sprint 1 «Hygiene»). Без архитектурных рефакторингов — только модернизация стека, оптимизация O-perf без breaking-changes, гигиена tooling. Wall-clock: 5-6 часов агентов. + +## 2. Scope — 12 правок + +### O-stack — модернизация (8) + +- **O-stack-01:** Pest 4 browser-tests setup. **Default:** 2 smoke E2E — login-flow (`/login → /dashboard`) и deal-create-flow (`/deals → создать → видна в списке`). Выбор — 2 ключевых сценария, не полное E2E-покрытие. +- **O-stack-02:** mutation testing setup. **Default:** установить `infection/infection`, конфиг с базовым thresholdMin=50%, прогон в CI weekly (не блокировать pre-commit). +- **O-stack-03:** Laravel 13 string-based lazy-loading контроллеров в `routes/web.php` (заменить `use App\...` на строки `[App\...::class, 'method']` где имеет смысл). +- **O-stack-04:** Vue 3.5 фичи в диалогах. **Default:** 3 диалога с `v-model` паттернами — `ImpersonationDialog`, `DealDetailDrawer`, `ConfirmDialog` (если есть). Migrate на `defineModel()` + `useTemplateRef()`. +- **O-stack-05:** Vuetify 3.12 типизированные слоты VDataTable. **Default:** 2 таблицы — `DealsView` (списке сделок) и `AdminTenantsView` (SaaS-админка). +- **O-stack-06:** Verify Frontend Design plugin в `~/.claude/settings.json`. **Manual user step** — Claude может только распечатать checklist + текущее состояние, не править файл вне git. +- **O-stack-07:** ESLint flat-config check — `app/eslint.config.js` уже flat-config (подтверждено в Phase C); просто verify + добавить comment-метку. +- **O-stack-10:** Google Fonts API v2 + @font-face fallback в `liderra_v8_handoff/docs/DEVELOPER_HANDOFF.md`. **Документация only**, не правка кода (handoff уже использует Google Fonts). + +### O-perf — оптимизация (2) + +- **O-perf-06:** lazy-imports на 3 views >300 строк — `DealsView` (852), `ReportsView` (592), `DealDetailDrawer` (580). `defineAsyncComponent()` для тяжёлых внутренних диалогов. +- **O-perf-07:** Larastan в pre-commit → перенос в pre-push ИЛИ включение result cache. **Default:** result cache в pre-commit (быстрее без жёсткого изменения flow). + +### O-refactor — гигиена (2) + +- **O-refactor-06:** dead-code detection. **Default:** запустить `npm run build -- --analyze` + `knip` smoke; найденные unused-exports — выписать в `.tmp/audit/sprint2_dead_code.md` (НЕ удалять автоматически — отдельное решение). +- **O-refactor-07:** CLAUDE.md §0 reorg. **Default:** вынести историю версий из CLAUDE.md в `docs/CHANGELOG_claude_md.md` (там уже есть такой файл!), оставить в CLAUDE.md только последние 2 версии. Через `claude-md-management:claude-md-improver`. + +## 3. Не входит в Sprint 2 (= Sprint 3) + +- O-perf-01 N+1 DealController bulk-actions — high risk, нужны новые тесты +- O-perf-04 OFFSET → keyset — breaking API change +- O-perf-05 export() streaming — новая зависимость +- O-refactor-01/02 DealController/AuthController split — архитектурное (Pravila §4.5) +- O-refactor-04 12 Vue-компонентов >300 строк — cross-cutting refactor (R0.6) + +## 4. Архитектура — 4 фазы / 4 коммита + +``` +[A. Backend modernization] → Pest 4 browser + mutation + lazy-loading + Larastan cache + ↓ +[B. Frontend modernization] → Vue 3.5 + Vuetify 3.12 + lazy-imports + ESLint check + ↓ +[C. Docs] → Google Fonts API + CLAUDE.md §0 reorg + FD plugin verify checklist + ↓ +[D. Hygiene] → dead-code detection report +``` + +Каждая фаза = 1 коммит. После A — Pest + Larastan; после B — Vitest + vue-tsc + ESLint; после C — `npm run check:docs`; после D — отчёт без правок (анализ). + +## 5. DoD + +- 4 коммита, каждый с осмысленным scope. +- `cd app && composer test` — 416/416 + новые browser tests (минимум 2). +- `cd app && composer stan` — 0 errors above baseline. +- `cd app && npm run type-check` — 0 errors. +- `cd app && npm run test:vue` — 393/393 (или больше). +- `npm run check:docs` — 0 errors на narrative. +- `.tmp/audit/sprint2_dead_code.md` создан с отчётом (анализ без удалений). +- `~/.claude/settings.json` checklist распечатан в финальном отчёте Sprint 2. + +## 6. Риски + +- **O-stack-01 Pest 4 browser-tests на Windows** — Pest 4 browser использует Playwright под капотом, может потребовать `npx playwright install chromium`. На Windows native может быть тормоза/конфликты. Митигация — установить, если падает на setup → smoke не пишем, фиксируем как «требует Linux CI» в реестре. +- **O-stack-02 infection/infection** — может быть медленным на 416 тестах (>5-10 минут). Митигация — конфиг с filter по `--filter='App\Http'` (только наш код, не vendor), CI-only. +- **O-stack-04/05 Vue 3.5 migration** — `defineModel()` ломает type signatures props/events; нужно проверить ESLint + vue-tsc после каждой миграции. +- **O-perf-06 lazy-imports** — `defineAsyncComponent()` меняет shape компонента, может ломать tests. Митигация — Vitest после каждой миграции. +- **O-refactor-07 CLAUDE.md §0 reorg** — обязательно через `claude-md-management:claude-md-improver` (CLAUDE.md §5 п.10). + +## 7. Не делаем + +- Pa11y prod-режим (пользователь delegated в Sprint 1 P1-12, требует браузер-сессии). +- Pre-prod migration P1-10/11 (уже в реестре, ждут Б-1). +- Любые из 6 Sprint 3 пунктов (high risk, отдельный spec→plan).