docs(audit): spec for portal full audit #2 (2026-05-13)
Design для нового 14-phase audit pass на main 21262ef post-merge plan5→main.
Scope: full 13-phase audit (replica 12.05 структуры — pre-flight, static analysis ×4 subagents, test suites, schema integrity, security, UI smoke 24 views, cross-doc, categorize, fix loop, regression verify, Pa11y live + axe-core, TODO sweep, bundle analyzer, Vitest coverage) + новая Phase 14 pre-production readiness (Sentry, DB roles, mock-data prod-gate revisit, CI workflows audit, env validation, queue/cron, backup/log rotation, deployment runbook).
Fix-strategy: hybrid — P0+P1 → atomic commits на main по ходу; P2/P3 → только запись в findings.md (без commits).
Guardrails applied (lessons из 12.05 audit + Pravila v1.12):
- Phase 4 SAST: ls .github/workflows/ FIRST (audit methodology gap closure)
- Phase 5/10 UI-refactor visual smoke + axe-core с setTimeout 500ms + hard reload (Q.DEFER.004 lesson)
- Pest --parallel --recreate-databases для long sessions (квирки 62/73)
- Plans/specs relative paths ../../../ для app/ refs (Pravila v1.12 §4.7 п.4)
- npm install с --legacy-peer-deps (квирк 74)
Baseline для regression gate Phase 9: Pest 742/739/0/3, Vitest 88f/683/3sk, Vite ~3.5s/0err, Histoire 35/63.
Next step: invoke superpowers:writing-plans для implementation plan в docs/superpowers/plans/2026-05-13-portal-full-audit-2.md.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -0,0 +1,322 @@
|
||||
# Portal Full Audit #2 — Design (2026-05-13)
|
||||
|
||||
> **Версия:** 1.0 от 2026-05-13
|
||||
> **Триггер:** заказчик «продолжим аудит экономия 0%» (continuation после CTO-19 closure + plan5→main merge `21262ef`)
|
||||
> **Режим:** экономия 0% — максимальное всеобъемлющее качество, без любых скипов
|
||||
> **HEAD на старте:** `main` `21262ef` (Merge plan5-frontend-projects → main, 120 commits ahead `615db99`)
|
||||
> **Предыдущий аудит:** [../audits/2026-05-12-portal-full-audit-report.md](../audits/2026-05-12-portal-full-audit-report.md) (10/10 Q-items closed)
|
||||
|
||||
---
|
||||
|
||||
## 1. Цель
|
||||
|
||||
Полный 14-phase портальный аудит на main `21262ef` post-merge plan5→main. Сравнение с baseline 12.05.2026, обнаружение drift'а от 120 закоммиченных изменений (Plan 5 frontend Tasks 7-11, Quiet Luxury portal redesign, CTO-19 Lucide migration, Q.DEFER.003/004 closures, audit-fix tail). Закрытие residuals + новая Phase 14 pre-production readiness.
|
||||
|
||||
## 2. Scope-decisions (согласованы с заказчиком)
|
||||
|
||||
| Dimension | Выбрано | Альтернативы рассмотрены |
|
||||
|---|---|---|
|
||||
| Тип audit'а | Новый audit pass от main `21262ef` | (B) доразбор deferred / (C) Pa11y residual / (D) квирк 62 hygiene — отложены |
|
||||
| Глубина | Full 13-phase + Phase 14 pre-prod readiness | (A) full 13 / (B) core 6 / (C) delta-mode — отвергнуты |
|
||||
| Fix-стратегия | Hybrid: P0+P1 → atomic commits на main; P2/P3 → только findings.md | (A) fix-during-audit all / (B) audit-only / (C) per-phase gate — отвергнуты |
|
||||
| Branch policy | main directly, atomic commits, push в конце через `Bash(git push origin main:*)` | feature branch + PR — отвергнут (continuation pattern) |
|
||||
|
||||
## 3. Artifacts (выходные)
|
||||
|
||||
Все в `docs/superpowers/audits/`:
|
||||
|
||||
- **`2026-05-13-portal-full-audit.md`** — план (адаптация 12.05 плана к 2026-05-13 HEAD)
|
||||
- **`2026-05-13-portal-full-audit-findings.md`** — детальные findings per phase, P0/P1/P2/P3 + FIX-NOW/FIX-DEFER/BLOCKED tags, ≥3 гипотезы per non-trivial finding (per economy 0% + Pravila §4.5 systematic-debugging)
|
||||
- **`2026-05-13-portal-full-audit-blocked.md`** — Q-items (Q.HARD/Q.PRODUCT/Q.DEFER/Q.INFO) с «что нужно от заказчика» + «план Б»
|
||||
- **`2026-05-13-portal-full-audit-report.md`** — summary verdict 🟢/🟡/🔴 + метрики до/после + commits list + lessons captured
|
||||
|
||||
**Доп. артефакты:**
|
||||
|
||||
- Screenshots в `audit-screens/2026-05-13/` (24 views Phase 5).
|
||||
- Memory updates: новые квирки в `feedback_environment.md`, baseline updates в `project_state.md` после Phase 9.
|
||||
|
||||
## 4. Phases (14 шт.)
|
||||
|
||||
### Phase 0 — Pre-flight (~5 мин)
|
||||
|
||||
- `git status --short` + `git log --oneline -10` → подтвердить HEAD = `21262ef`, working tree clean.
|
||||
- `git diff HEAD~5 --stat` — что менялось в последних 5 коммитах.
|
||||
- Skeleton 4 audit-файлов в `docs/superpowers/audits/2026-05-13-portal-full-audit-{plan,findings,blocked,report}.md`.
|
||||
- Inventory untracked workdir после CTO-19 (Lucide migration screenshots, mapping changes).
|
||||
- Verify deps installed: `composer install --quiet` + `npm ci --legacy-peer-deps` (per квирк 74).
|
||||
|
||||
### Phase 1 — Static analysis (parallel ×4 subagents, ~20 мин)
|
||||
|
||||
Single message с 4 параллельными `Agent` tool calls (per `superpowers:dispatching-parallel-agents`):
|
||||
|
||||
- **Subagent A (Backend) — `subagent_type: general-purpose`:** `composer pint:test` + `composer stan` + `composer audit --locked`. Return raw exit codes + полный stderr/stdout, не summary.
|
||||
- **Subagent B (Frontend) — `subagent_type: general-purpose`:** `npm run lint:vue` + `npx vue-tsc --noEmit` + `npx prettier --check .` + `npx knip --production`. Raw output.
|
||||
- **Subagent C (Docs) — `subagent_type: general-purpose`:** `npm run lint:md` + `npm run spell` + `npm run links`. Raw output.
|
||||
- **Subagent D (SQL) — `subagent_type: general-purpose`:** `npx squawk lint app/database/migrations/` + `pg_format db/schema.sql > /tmp/schema-fmt.sql && diff db/schema.sql /tmp/schema-fmt.sql | wc -l`. Raw output.
|
||||
|
||||
**Я принимаю все решения по findings**, subagent'ы только собирают данные.
|
||||
|
||||
### Phase 2 — Test suites (sequential, ~10 мин)
|
||||
|
||||
В main session:
|
||||
|
||||
1. `composer test` без `--parallel` (квирк 62 — ожидаемые sequential failures из cumulative state). Полный output.
|
||||
2. `composer test -- --parallel --recreate-databases` (per квирк 73 — для long sessions).
|
||||
3. `cd app && npx vitest run --reporter=verbose` (без coverage — Phase 13 отдельно).
|
||||
4. `cd app && npm run story:build` (Histoire full, не watch).
|
||||
5. `cd app && npm run build` (Vite production).
|
||||
|
||||
### Phase 3 — Schema integrity (Boost MCP, ~5 мин)
|
||||
|
||||
Через `mcp__laravel-boost__database-query` к dev `liderra`:
|
||||
|
||||
```sql
|
||||
SELECT count(*) FROM pg_tables WHERE schemaname='public';
|
||||
SELECT count(*) FROM pg_indexes WHERE schemaname='public';
|
||||
SELECT count(*) FROM pg_policies WHERE schemaname='public';
|
||||
SELECT count(*) FROM pg_proc p JOIN pg_namespace n ON p.pronamespace=n.oid WHERE n.nspname='public';
|
||||
SELECT count(*) FROM pg_trigger WHERE tgisinternal=false;
|
||||
SELECT count(*) FROM pg_inherits; -- partition relationships
|
||||
```
|
||||
|
||||
Diff с CLAUDE.md §0/§2 dev-actual baseline (75/102/289/39/5/19/0). Orphan FK check через `mcp__laravel-boost__database-schema`.
|
||||
|
||||
### Phase 4 — Security (~10 мин)
|
||||
|
||||
**Methodology gap closure (Pravila v1.12 §4.6):**
|
||||
|
||||
1. **ПЕРВЫМ** `ls .github/workflows/` (enumerate CI infra ДО semgrep verdict) — закрывает audit gap от 12.05.
|
||||
2. `./bin/gitleaks.exe detect --no-banner --redact` (full history).
|
||||
3. `composer audit --locked`.
|
||||
4. Production secrets grep:
|
||||
- `grep -rE "AKIA[0-9A-Z]{16}|SK[a-z0-9]{32}" app/ --include="*.php"`
|
||||
- проверка `.env.example` ↔ `app/config/*.php` references на полноту (нет ли missing env keys).
|
||||
|
||||
### Phase 5 — UI smoke (Playwright MCP, ~30 мин)
|
||||
|
||||
Main session (не subagent — MCP context inheritance не работает).
|
||||
|
||||
- DemoSeeder seed: `cd app && php artisan db:seed --class=DemoSeeder`.
|
||||
- Laravel server: `cd app && php artisan serve` (background).
|
||||
- Vite dev server: `cd app && npm run dev` (background).
|
||||
- 24 views per 12.05 table (auth ×7, main ×8, admin ×8, error ×1).
|
||||
- **CTO-19 verification:** Lucide icons rendering correctly на всех 24 views (custom Vuetify `IconSet` в `app/resources/js/plugins/vuetify.ts`, 103-entry mapping).
|
||||
- Login flow: admin@demo.local / password → POST /api/auth/login → /dashboard.
|
||||
- Logout flow: avatar dropdown → POST /api/auth/logout → /login.
|
||||
- Screenshots → `audit-screens/2026-05-13/01-login.png` … `24-error-404.png`.
|
||||
|
||||
### Phase 6 — Cross-doc integrity (~10 мин)
|
||||
|
||||
Версии 7 нормативных файлов (factual vs memory claims):
|
||||
|
||||
| Документ | Path | Expected (memory) |
|
||||
|---|---|---|
|
||||
| CLAUDE.md | `CLAUDE.md` | v1.91 |
|
||||
| Pravila | `docs/Pravila_raboty_Claude_v1_1.md` | v1.12 |
|
||||
| PSR_v1 | `docs/Plugin_stack_rules_v1.md` | v2.0 |
|
||||
| Tooling | `docs/Tooling_v8_3.md` | v1.16 |
|
||||
| Реестр | `docs/Открытые_вопросы_v8_3.md` | v1.83 |
|
||||
| Схема | `db/schema.sql` | v8.20 (per memory project_state) |
|
||||
| README | `docs/README_АРХИВ_v8_5.md` | v8.5 |
|
||||
|
||||
Плюс:
|
||||
|
||||
- `routes/web.php` explicit `Route::view` list completeness check (12.05 finding — `/reset`, `/projects`, `/admin/*` были missing; fixed `b9038bc`).
|
||||
- Vue Router routes inventory (`resources/js/router/index.ts`) vs views inventory (`resources/js/views/**`).
|
||||
- Memory description ↔ файлы факт (forward-stale check как Q.DEFER.001).
|
||||
|
||||
### Phase 7 — Categorize (~5 мин)
|
||||
|
||||
Taxonomy:
|
||||
|
||||
- **Severity:** P0 (блокирует prod / data corruption / security) → P1 (failing test / type error / a11y) → P2 (warning / style / stale doc) → P3 (cosmetic).
|
||||
- **Fix-eligibility:** FIX-NOW (≤30 мин) → FIX-DEFER (>1 час) → BLOCKED (hard-stop из decision-tree).
|
||||
|
||||
Severity rollup таблица per phase + total. Fix-queue ordered list для Phase 8.
|
||||
|
||||
### Phase 8 — Fix loop (hybrid policy)
|
||||
|
||||
- **Только P0+P1** атомарными коммитами на main.
|
||||
- **P2+P3** → только запись в findings.md (без commits).
|
||||
- Self-review §8 после каждых 3 коммитов: `git diff HEAD~3..HEAD --stat`.
|
||||
- После каждого Edit/Write на code → relevant тесты (Pest/Vitest).
|
||||
- Перед каждым commit → `lefthook run pre-commit --all-files`.
|
||||
- Никаких `--no-verify`, `--amend`, `--no-gpg-sign`.
|
||||
|
||||
### Phase 9 — Final regression verification
|
||||
|
||||
Re-run baseline (per economy 0% — full output, не summary):
|
||||
|
||||
- `composer test -- --parallel --recreate-databases` — ожидаемо ≥742 / ≥739 passed / 0 failed / ≤3 skipped.
|
||||
- `cd app && npx vitest run --reporter=verbose` — ожидаемо ≥88 files / ≥683 passed / 0 failed.
|
||||
- `cd app && npm run build` — exit 0, без warnings.
|
||||
- `cd app && npm run story:build` — ожидаемо ≥35 stories / ≥63 variants.
|
||||
- Если регрессия → systematic-debugging (≥3 гипотезы) → fix или rollback.
|
||||
|
||||
### Phase 10 — Live Pa11y / axe-core (~20 мин)
|
||||
|
||||
**Guest URLs (4) через Pa11y CLI:**
|
||||
|
||||
- `npx pa11y --standard WCAG2AA --timeout 30000 --wait 1500 http://127.0.0.1:8000/login`
|
||||
- `…/register`
|
||||
- `…/forgot`
|
||||
- `…/no-such-path-anywhere` (ErrorView 404)
|
||||
|
||||
**Auth-required views (16) через Playwright MCP + axe-core 4.10 CDN inject:**
|
||||
|
||||
Per Q.DEFER.004 false-alarm lesson + Pravila v1.12 §4.6 UI-refactor visual smoke:
|
||||
|
||||
1. `mcp__playwright__browser_navigate` → URL.
|
||||
2. **`await new Promise((r) => setTimeout(r, 500))`** через `browser_evaluate` (HMR race quirk).
|
||||
3. Hard reload (`browser_navigate` again).
|
||||
4. `browser_evaluate` inject axe-core 4.10 CDN script.
|
||||
5. `browser_evaluate` `axe.run()` + parse violations.
|
||||
|
||||
URLs: /dashboard, /deals, /kanban, /projects, /reports, /billing, /settings, /reminders + 8 admin (/admin/tenants, /admin/tenants/1, /admin/billing, /admin/incidents, /admin/system, /admin/pricing-tiers, /admin/supplier-prices, /admin/impersonation).
|
||||
|
||||
**Закрытие Q.DEFER.002 residual** — auth-required coverage gap.
|
||||
|
||||
### Phase 11 — TODO/FIXME sweep (~5 мин)
|
||||
|
||||
```bash
|
||||
# В Grep tool (НЕ Bash):
|
||||
pattern: '\b(TODO|FIXME|XXX|HACK)\b'
|
||||
path: app/
|
||||
output_mode: content
|
||||
-n: true
|
||||
head_limit: 0 # unlimited per economy 0%
|
||||
```
|
||||
|
||||
Категоризация: MVP-defer ⏸ Б-1 / Feature-defer (Plan 6+) / Production-readiness / Test infra / False-positive.
|
||||
|
||||
### Phase 12 — Bundle analyzer (~10 мин)
|
||||
|
||||
1 subagent: `cd app && BUILD_ANALYZE=1 npm run build:analyze` → парсит `storage/bundle-analyze.html` (rollup-plugin-visualizer). Raw top-15 chunks list. Сравнение с 12.05 baseline (VBtn 184 kB / KanbanView 182 kB / app 131 kB).
|
||||
|
||||
### Phase 13 — Vitest coverage (~5 мин)
|
||||
|
||||
1 subagent: `cd app && npx vitest run --coverage --coverage.reporter=text-summary --coverage.reporter=text` через `@vitest/coverage-v8`. Raw coverage tables. Сравнение с 12.05 baseline (Stmts 75% / Branch 75% / Funcs 67% / Lines 77%) + Q.DEFER.003 post-closure (Stmts 78.67% / Branch 76.21% / Funcs 70.56% / Lines 80.89%).
|
||||
|
||||
### Phase 14 — Pre-production readiness (новое, ~20 мин)
|
||||
|
||||
Main session:
|
||||
|
||||
- **14.1 Sentry integration:** `Grep -E "TODO\(production\)|Sentry::captureException" app/`. Status `ProcessWebhookJob.php:375` (12.05 finding) + any new TODOs.
|
||||
- **14.2 DB roles deployment:** Read `db/00_create_roles.sql` + `db/02_grants.sql`, проверка structure (5 ролей `crm_*` + grants matrix), prod parity expectations.
|
||||
- **14.3 Mock-data prod-gate (Q.PRODUCT.002 revisit):** проверка что решение (B) prod-fallback всё ещё актуально; считаем gzip overhead `mockDeals.ts` + `mockAdmin.ts` в production bundle (Phase 12 cross-link).
|
||||
- **14.4 CI workflows audit:** `ls .github/workflows/` + Read каждого workflow. Coverage: SAST (Semgrep `sast.yml` per Q.INFO.001), tests, build, deploy.
|
||||
- **14.5 Environment validation:** diff `app/.env.example` keys vs `Grep "env\(.*['\"](\w+)['\"]" app/config/`. Missing keys → P1.
|
||||
- **14.6 Queue/cron:** `php artisan schedule:list` + `php artisan queue:work --once --tries=1` smoke + verify `partitions:create-months` schedule entry.
|
||||
- **14.7 Backup/log rotation:** Grep `BACKUP|log-rotation|logrotate` в `docs/`, `app/config/logging.php` channels review.
|
||||
- **14.8 Deployment runbook:** `Glob deploy*.md DEPLOY*.md RUNBOOK*.md` — присутствие/отсутствие documented.
|
||||
|
||||
Финал: push на `origin/main`.
|
||||
|
||||
## 5. Subagent dispatch policy (raw output mandate per economy 0%)
|
||||
|
||||
| Phase | Subagent? | Single-message parallel? |
|
||||
|---|---|---|
|
||||
| 1 (Backend/Frontend/Docs/SQL) | ×4 parallel | YES — single message с 4 `Agent` calls |
|
||||
| 5 (UI smoke) | NO — MCP context inheritance broken | n/a |
|
||||
| 10 (Pa11y) | NO — MCP context | n/a |
|
||||
| 11 (TODO sweep) | NO — direct Grep | n/a |
|
||||
| 12 (Bundle analyzer) | YES — 1 | n/a |
|
||||
| 13 (Vitest coverage) | YES — 1 | n/a |
|
||||
| 14 (Pre-prod) | NO — main session | n/a |
|
||||
|
||||
Prompts всем subagent'ам: «верни **raw** exit codes + полный output stderr+stdout, **не summary**. Решения принимаю я».
|
||||
|
||||
## 6. Verification gates
|
||||
|
||||
**После Edit/Write:**
|
||||
|
||||
| Файл-тип | Тест |
|
||||
|---|---|
|
||||
| PHP code | `composer test -- --filter=<closest>` или full Pest `--parallel` |
|
||||
| Vue/TS frontend | `npx vitest run <closest-spec>` или full Vitest |
|
||||
| schema/migration | Pest RLS + model smoke + `mcp__laravel-boost__database-schema` re-check |
|
||||
| routes/web.php | `php artisan route:list` + Pest feature tests |
|
||||
| CLAUDE.md/Pravila/PSR_v1/Tooling | `claude-md-management:claude-md-improver` skill (не direct Edit) + markdownlint + lychee |
|
||||
|
||||
**Перед commit:** `lefthook run pre-commit --all-files`.
|
||||
|
||||
**Pre-push (один раз в конце):** `lefthook run pre-push` (gitleaks-full-history + lychee strict).
|
||||
|
||||
## 7. Error handling и lessons-applied
|
||||
|
||||
Guardrails из 12.05 audit + post-audit (Pravila v1.12 + memory квирки 74-76):
|
||||
|
||||
- **Pravila v1.12 §4.6 audit methodology gap:** Phase 4 SAST → `ls .github/workflows/` FIRST.
|
||||
- **Pravila v1.12 §4.6 UI-refactor visual smoke:** если фикс задеёт UI → Playwright visual smoke + axe-core re-check (CTO-19 lesson — unit tests jsdom insufficient для Vuetify-internal defaults).
|
||||
- **Q.DEFER.004 axe-core HMR race:** `setTimeout 500ms` + hard reload перед `axe.run()`.
|
||||
- **Квирк 62/73 Pest cumulative state:** для full-suite после long session — `--recreate-databases` flag обязателен.
|
||||
- **Pravila v1.12 §4.7 п.4 plans relative paths:** в audit-plan/spec ссылки на `app/` через `../../../app/...` (lychee semantics; прецедент CTO-19 fixup `f6e1e64`).
|
||||
- **Квирк 74:** `npm install` требует `--legacy-peer-deps` (Histoire 1.0.0-beta.1 peerDep).
|
||||
- **Квирк 75:** Vuetify-internal default mdi-* names — grep также по `node_modules/vuetify/lib/iconsets/mdi*`.
|
||||
|
||||
## 8. Decision-tree hard-stops (per Pravila §13 + PSR_v1 R0.6)
|
||||
|
||||
Эти findings автоматически → BLOCKED, не FIX:
|
||||
|
||||
- Schema.sql semantic changes (не cosmetic).
|
||||
- New packages (composer require / npm install кроме devDependencies update — даже это требует согласования).
|
||||
- ТЗ-правки (`docs/CRM_bp-gr_Инструкция_v8_5.md`).
|
||||
- Реестр-вопросы closing (`Б-/CTO-/DO-/Ю-/Диз-/OPEN-`) без явного «закрываем».
|
||||
- Force-push на main / `--no-verify` / hook bypass / `--no-gpg-sign`.
|
||||
- Production DB connection.
|
||||
- ПДн / токены / API-ключи в commits (gitleaks gate).
|
||||
|
||||
## 9. Testing/verification план
|
||||
|
||||
**Baseline (фиксируем в Phase 2 как точку отсчёта):**
|
||||
|
||||
| Метрика | Expected (post-merge `21262ef`) |
|
||||
|---|---|
|
||||
| Pest `--parallel --recreate-databases` | 742 / 739 passed / 0 failed / 3 skipped |
|
||||
| Pest sequential | 742 / 736 passed / 3 failed (квирк 62) / 3 skipped |
|
||||
| Vitest | 88 files / 683 passed / 3 skipped |
|
||||
| Vite build | ~3.5s, 0 warnings |
|
||||
| Histoire build | 35 stories / 63 variants |
|
||||
| ESLint | 0 errors |
|
||||
| vue-tsc | 0 errors |
|
||||
| Prettier --check | 0 issues |
|
||||
| markdownlint | 1 (untracked design.md из прошлой сессии) |
|
||||
| cspell | ≤18 (mixed-script artifacts) |
|
||||
| lychee | 0 broken |
|
||||
| gitleaks (full history) | 0 leaks |
|
||||
| RLS policies | 39 |
|
||||
|
||||
**Regression gate (Phase 9):** все метрики ≥ baseline. Регрессия → rollback или fix перед push.
|
||||
|
||||
## 10. Out of scope
|
||||
|
||||
Явно НЕ делаем в этой сессии:
|
||||
|
||||
- pgFormatter swap schema.sql (Q.HARD.002 — закрыт «не трогать»).
|
||||
- Q.DEFER.003 sub-A api/* — уже closed `95f5f94`.
|
||||
- Pest квирк 62 corrective hygiene (test-DB DROP+CREATE+ICU+migrate) — отдельная задача.
|
||||
- CSS code-splitting KanbanView vuedraggable / NewDealDialog / DealDetailDrawer — Phase 12 P2 defer.
|
||||
- Sentry actual integration (только аудит TODO statuses, не fix).
|
||||
- Б-1 saas-admin SSO middleware (BLOCKED).
|
||||
|
||||
## 11. Success criteria
|
||||
|
||||
- 14 phases completed.
|
||||
- All P0 + P1 findings либо fixed (atomic commit) либо BLOCKED (явно в blocked.md с reason).
|
||||
- Phase 9 regression gate passed: 0 регрессий vs baseline.
|
||||
- Pre-push lefthook clean (gitleaks-full-history + lychee).
|
||||
- 4 audit-docs committed.
|
||||
- Memory updates если найдены новые квирки.
|
||||
- Push на `origin/main` через `Bash(git push origin main:*)`.
|
||||
- Verdict 🟢 / 🟡 / 🔴 в report.md с обоснованием.
|
||||
|
||||
## 12. Известные ограничения этой сессии
|
||||
|
||||
- **Не верифицировал** до старта: production environment parity (Phase 14.4-14.7) — будет в Phase 14.
|
||||
- **Не верифицировал** до старта: actual coverage delta после Q.DEFER.003 closure beyond memory claim — будет в Phase 13.
|
||||
- **Зависит от MCP availability:** Playwright + Boost MCP должны быть запущены (default).
|
||||
- **Зависит от dev servers:** Laravel + Vite background processes для Phase 5/10.
|
||||
|
||||
---
|
||||
|
||||
*Конец design'а. После approval — invoke writing-plans skill для конкретного implementation plan.*
|
||||
Reference in New Issue
Block a user