# 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).
