diff --git a/docs/superpowers/specs/2026-06-20-acceptance-findings-register.md b/docs/superpowers/specs/2026-06-20-acceptance-findings-register.md index c3d12fa1..5e83ee5f 100644 --- a/docs/superpowers/specs/2026-06-20-acceptance-findings-register.md +++ b/docs/superpowers/specs/2026-06-20-acceptance-findings-register.md @@ -70,6 +70,22 @@ --- +## 🧱 Блокеры и инфраструктура (всплыли 20–21.06) + +### F-DEPTRAC — Нарушение слоёв блокирует ВСЕ php-коммиты +- **Что:** `App\Http\Middleware\ImpersonationContext` зависит от `App\Mail\ImpersonationEndedMail` — слой Middleware не должен зависеть от слоя Mail (deptrac ruleset). +- **Где:** [app/app/Http/Middleware/ImpersonationContext.php:37](../../../app/app/Http/Middleware/ImpersonationContext.php#L37). +- **Происхождение:** предсуществующее, от деплоя G7-B (impersonation, 19.06). Подтверждено: видно на чистом HEAD (не от текущих правок). +- **Эффект:** pre-commit хук (lefthook → deptrac) валит **любой** коммит, затрагивающий `.php`. Из-за этого не закоммитить даже правку комментария в `NotificationService.php`. +- **Рекомендация:** либо рефакторинг (вынести отправку `ImpersonationEndedMail` из middleware в сервис/джоб — правильно архитектурно), либо обновить `app/deptrac.yaml` ruleset + ADR-005 (если зависимость осознанная). Хук **не обходить** `--no-verify` без явного слова владельца. +- **Пункт:** инфраструктура (затрагивает №25 impersonation). + +### F-CORPUS — Корпус приёмки не закоммичен (untracked) +- **Что:** ключевые документы приёмки лежат в рабочей копии как **untracked**, ни разу не в git: R0–R5 ранбуки, хартия, `prod-logic-map.md`, эфир-хэндофф, `imitation-checks-table.md`, `stepbystep-plans.md`, папка `live-demo/`. +- **Эффект:** МАСТЕР-хэндофф (закоммичен `b7e3af4c`) **ссылается на untracked файлы** — свежая сессия в новом клоне их не найдёт; ссылки битые. +- **Рекомендация:** закоммитить корпус приёмки (docs-only — deptrac не мешает), чтобы хэндофф был самодостаточным. Решить с владельцем, что из untracked WIP включать. +- **Пункт:** инфраструктура хэндоффа. + ## Сводная таблица | ID | Важность | Пункт | Статус | Доказательство | @@ -79,6 +95,8 @@ | F-DIGEST | ❌ снята (ошибка чтения коммента) | №20 | канон-схема `email:true`, дайджест вкл | db/schema.sql:796 | | F-PDF | 🟡 не подтверждено | №22 | проверить на прогоне | GenerateReportJob.php:102 | | F-REMIND | 🧹 хвост | №21 | дочистить фронт | auth.ts:12, DealDetailBody.vue:3 | +| F-DEPTRAC | 🧱 блокер | инфра/№25 | рефактор ИЛИ deptrac.yaml+ADR | ImpersonationContext.php:37 | +| F-CORPUS | 🧱 инфра | хэндофф | закоммитить корпус приёмки | R0–R5/хартия/map/live-demo untracked | | F1–F5 | ℹ️ прежние | №3,№13 | проверить (F3 закрыта) | walk-report 17.06 | **Итог:** 1 потенциальная находка безопасности (F-CSV — экспорт/формулы), 2 расхождения свода с кодом (F-DELPROJ/F-PDF), 1 хвост уборки (F-REMIND), 1 снятая (F-DIGEST — была моей ошибкой чтения устаревшего комментария, исправлено), 5 прежних прогонных (F1–F5, одна закрыта). Тесты — **только на проде**. F-CSV и F-REMIND — кандидаты на код-фикс (спросить владельца перед правкой кода). diff --git a/docs/superpowers/specs/2026-06-21-PROMPT-1-close-findings.md b/docs/superpowers/specs/2026-06-21-PROMPT-1-close-findings.md new file mode 100644 index 00000000..39f84d9f --- /dev/null +++ b/docs/superpowers/specs/2026-06-21-PROMPT-1-close-findings.md @@ -0,0 +1,51 @@ +# ПРОМТ #1 для свежей сессии — закрыть находки/вопросы приёмки liderra.ru + +> **Как использовать:** вставь блок «СТАРТОВЫЙ ПРОМТ» ниже в новую сессию. Остальное — пояснения. + +--- + +## СТАРТОВЫЙ ПРОМТ (вставить как есть) + +> Закрываем зафиксированные находки по подготовке приёмочного теста портала Лидерра. Кодовая фраза стены: «роутер-наставник». +> +> **Прочитай сначала:** реестр находок `docs/superpowers/specs/2026-06-20-acceptance-findings-register.md` (там все находки с file:line) и мастер-хэндофф `docs/superpowers/specs/2026-06-20-acceptance-MASTER-execution-handoff.md`. +> +> **Контекст:** локалка байт-в-байт с боевым (`01a9029c`, G1–G7). Тесты функционала портала — ТОЛЬКО на проде (отдельная задача по мастер-хэндоффу). Твоя задача — **починить код/доки-находки локально** по TDD и навести порядок в git. Прод НЕ трогаешь. +> +> **Жёсткие правила:** правка `.php` → ОБЯЗАТЕЛЬНО прогон тестов после (pest/phpunit), иначе хук-стоп. Pre-commit deptrac валит любой php-коммит, пока жив F-DEPTRAC — начни с него. Хуки НЕ обходить `--no-verify` без явного слова владельца. Коммит — спрашивать у владельца перед каждым (или собрать в конце). Не выдумывать — открыл файл, проверил. +> +> **Задачи по порядку (детали и критерии — в плане ниже по файлу):** +> 1. **F-DEPTRAC** (разблокировать php-коммиты): `ImpersonationContext` (Middleware) зависит от `ImpersonationEndedMail` (Mail). Рефакторинг (вынести отправку письма из middleware в сервис/джоб) ИЛИ обновить `app/deptrac.yaml`+ADR-005 — согласовать с владельцем какой путь. После — deptrac зелёный, php-коммиты проходят. +> 2. **Хвост-комментарий** (уже в рабочей копии, ждёт коммита): правка устаревшего докблока `app/app/Services/NotificationService.php` (G2-B: new_lead.email true). Верифицировано (43 теста зелёные) — закоммитить после F-DEPTRAC. +> 3. **F-CSV** (безопасность): экспорт сделок/отчётов/списаний пишет ячейки «как есть» — нет экранирования формул (`= + - @`). Подтвердить уязвимость тестом, починить экранированием в писателе(ях) по TDD, тесты. +> 4. **F-REMIND** (хвост уборки): дочистить остатки снятой фичи «Напоминания» во фронте (`resources/js/api/auth.ts` тип `'reminder'`, устаревший коммент `DealDetailBody.vue`). Проверить, не рендерит ли мёртвый переключатель. +> 5. **F-DELPROJ** (свод): поправить формулировку в `docs/superpowers/specs/2026-06-20-acceptance-imitation-checks-table.md` пункт №15 — «удаление проекта со сделками ЗАПРЕЩЕНО (422)», не «сделки сохраняются». +> 6. **F-CORPUS** (хэндофф): корпус приёмки (R0–R5, хартия, prod-logic-map, эфир, live-demo, checks-table, stepbystep-plans) — UNTRACKED. Закоммитить (docs-only), чтобы мастер-ссылки работали в новом клоне. Согласовать с владельцем состав. +> 7. **Отложенные на прод** (НЕ закрываются локально, оставить как есть): F-PDF (PDF→failed), F1/F2/F4/F5 (осмотр 17.06) — закрываются на живом прод-прогоне. +> +> Каждую закрытую находку отметь в реестре (статус → «закрыто», как/чем). Коммит — спрашивать. + +--- + +## Пояснения (не для вставки — для тебя) + +### Откуда находки +Все выявлены при сверке свода проверок с кодом во время написания 26 пер-пунктовых планов (`docs/superpowers/plans/2026-06-20-acceptance-*`). Каждая — с доказательством file:line в реестре. + +### Приоритет и почему именно так +- **F-DEPTRAC первым** — это стена для любого php-коммита; пока не снят, ни F-CSV, ни комментарий, ни любой код не закоммитить (кроме docs). +- **F-CSV — единственная находка безопасности** (formula injection в выгрузках). TDD: сначала тест, доказывающий, что `=1+1` уходит в файл как формула, потом фикс (префикс `'` на ведущие `= + - @`), потом зелёный. +- **F-REMIND** — мелкий хвост, но владелец требует «не оставлять хвостов». +- **F-DELPROJ** — только правка свода (формулировка), код корректен. +- **F-CORPUS** — без коммита корпуса мастер-хэндофф неполон для новой сессии. + +### Файлы-ориентиры +- Реестр находок (источник истины): `docs/superpowers/specs/2026-06-20-acceptance-findings-register.md`. +- Экспорт (F-CSV): `app/app/Http/Controllers/Api/DealExportController.php`, `app/app/Services/Reports/Providers/DealsExportProvider.php`, `app/app/Http/Controllers/Api/TenantChargesController.php`. +- F-REMIND: `app/resources/js/api/auth.ts:12`, `app/resources/js/components/deals/DealDetailBody.vue:3`. +- F-DEPTRAC: `app/app/Http/Middleware/ImpersonationContext.php:37`, `app/deptrac.yaml`. + +### Чего НЕ делать +- НЕ трогать прод. НЕ гонять функциональные тесты портала (это прод-задача по мастеру). +- НЕ обходить хуки. НЕ коммитить без спроса. НЕ менять логику под видом «фикса комментария». +- Прод-verify находки (F-PDF, F1/F2/F4/F5) НЕ закрывать локально — пометить «на прод-прогоне». diff --git a/docs/superpowers/specs/2026-06-21-PROMPT-2-review-acceptance-work.md b/docs/superpowers/specs/2026-06-21-PROMPT-2-review-acceptance-work.md new file mode 100644 index 00000000..d3d76cfd --- /dev/null +++ b/docs/superpowers/specs/2026-06-21-PROMPT-2-review-acceptance-work.md @@ -0,0 +1,51 @@ +# ПРОМТ #2 для свежей сессии — критический разбор нашей работы по приёмке Лидерры + +> **Как использовать:** вставь блок «СТАРТОВЫЙ ПРОМТ» ниже в новую сессию. Цель — независимый, придирчивый аудит того, что мы подготовили (а не исполнение теста). + +--- + +## СТАРТОВЫЙ ПРОМТ (вставить как есть) + +> Проведи независимый критический разбор подготовки приёмочного теста портала Лидерра (liderra.ru). Кодовая фраза стены: «роутер-наставник». Ты — свежий взгляд, твоя задача — найти, где мы НЕДОработали или ошиблись, ДО того как другая сессия начнёт гонять тест на боевом проде. +> +> **Что разбираешь (вся подготовка 20–21.06):** +> - Мастер-хэндофф `docs/superpowers/specs/2026-06-20-acceptance-MASTER-execution-handoff.md` — точка входа исполнителя. +> - 26 пер-пунктовых планов `docs/superpowers/plans/2026-06-20-acceptance-*` (PR2, PR3, №1–№26). +> - Реестр находок `docs/superpowers/specs/2026-06-20-acceptance-findings-register.md`. +> - Свод проверок `docs/superpowers/specs/2026-06-20-acceptance-imitation-checks-table.md`. +> - Ранбуки R0–R5 + R3b, хартия, `prod-logic-map.md` (источники истины ЧТО/КАК). +> +> **Оценивай по осям (с доказательствами file:line, без «на словах»):** +> 1. **Точность код-фактов.** Возьми выборку из планов (особенно денежные №7/№8/№9/№5/№10/№12 и изоляцию №16) и **перепроверь по реальному коду** `app/` — совпадают ли file:line, цифры, поведение. Локалка = боевой (`01a9029c`), так что код-факты должны биться. Любое расхождение — находка. +> 2. **Полнота покрытия.** Сверь планы со сводом (26 типов) И с инвариантами `prod-logic-map.md` §18–§21 (заказ/каскад/жребий, распределение лида, заморозка, блокировка share-aware). Есть ли инвариант/пункт БЕЗ шага в планах? Дыра — находка. +> 3. **Честность находок.** Перепроверь реестр: F-CSV (CSV-инъекция), F-DELPROJ, F-PDF, F-REMIND, F-DEPTRAC. Подтверждаются ли кодом? Не пропущена ли находка, которую мы НЕ заметили (адверсариально: деньги, изоляция, идемпотентность, RLS, append-only)? +> 4. **Исполнимость хэндоффа.** Сможет ли свежая сессия по мастеру РЕАЛЬНО поднять прод-прогон (доступ, провижининг TEST-, инъекция, teardown до 21:00, эфир) без пробелов? Где она «провахнётся»? +> 5. **Безопасность прода.** Достаточно ли жёстко прописаны рамки (tenant 2 lkomega не трогать, уборка до 21:00, секреты, критдефект→СТОП)? Где риск задеть боевой бизнес? +> +> **Метод:** читай код реально (Read/Grep), не доверяй планам на слово; для широких проверок — раздай суб-агентам (Explore/audit) по доменам (деньги / изоляция / распределение / онбординг-UI / новые фичи G6-G7). Falsify, не подтверждай. +> +> **На выходе** — отчёт `docs/superpowers/specs/2026-06-21-acceptance-prep-review.md`: по каждой оси PASS/GAP + список найденных дыр/ошибок (с file:line) + приоритет + вердикт «готово к прод-прогону / нужны доделки». Прод НЕ трогаешь, код НЕ правишь — только разбор. Коммит отчёта — спрашивать. + +--- + +## Пояснения (не для вставки — для тебя) + +### Зачем этот разбор +Подготовку (26 планов + мастер + находки) делала одна сессия по чтению **локального** кода. Прежде чем другая сессия пойдёт на **боевой** прод, нужен независимый придирчивый аудит: точны ли код-факты, нет ли дыр в покрытии, честны ли находки, исполним ли хэндофф. Это «адверсариальная проверка перед боем». + +### Что особенно проверить (слабые места, известные нам) +- **Код-факты планов** прочитаны из локалки — выборочно перепроверить по реальному `app/` (должны биться, локалка=боевой; но human-error возможен). +- **F-DIGEST** уже оказалась ложной (читали устаревший комментарий вместо схемы) — нет ли аналогичных ошибок «коммент vs канон» в других планах. +- **Свод расходился с кодом** дважды (№15 удаление, №14 CSV-инъекция) — нет ли ещё расхождений свод↔код. +- **Покрытие инвариантов** §18–§21 карты прода — самое вероятное место дыр (share-aware блокировка, грейс-защита, объединение дней группы, авто-привязка корня домена и пр. — многие помечены ⭐/опц. в хартии). +- **№17 all-pairs / Фаза 4 нагрузка / Фаза 5 финал** — расписаны в R3-E/R4/R5, но проверь, что мастер реально на них выводит и они исполнимы на слабом железе (2 ГБ). + +### Полезные агенты/скилы +- Доменные суб-агенты для широкого чтения: `Explore`, `audit-context-building`. +- Денежная корректность — скил `billing-audit`; изоляция/ПДн — `pdn-152fz-audit`; угрозы — `threat-model`; полный аудит — `audit-portal`. +- Для адверсариальной проверки находок — раздать по осям параллельно (dispatching-parallel-agents). + +### Чего НЕ делать +- НЕ трогать прод, НЕ править код/планы (только разбор + отчёт). +- НЕ повторять нашу ошибку: канон — схема/живой код, не комментарии. +- Не «подтверждать, что всё хорошо» — цель найти дыры. Пустой отчёт «всё ок» = плохой разбор.