Adaptive post-implementation phase verification through fresh subagents with S/M/L sizing (bug-fix → feature → architecture). Multi-agent pipeline with strict role zoning: Spec + Architecture (параллель) → Quality + Security + Forward-Look (параллель) → Adversarial Skeptic → fix → Regression Sweep → final report. Auto-scales 2 → 7 агентов в зависимости от размера фазы, чтобы не жечь токены на тривиальных правках. USE WHEN: an implementation phase is done and needs validation before moving to ...
Installs into .claude/skills of the current project.
Are you the author of Phase Review?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/aibot88-phase-review)
---
name: phase-review
description: >
Adaptive post-implementation phase verification through fresh subagents with
S/M/L sizing (bug-fix → feature → architecture). Multi-agent pipeline with
strict role zoning: Spec + Architecture (параллель) → Quality + Security +
Forward-Look (параллель) → Adversarial Skeptic → fix → Regression Sweep →
final report. Auto-scales 2 → 7 агентов в зависимости от размера фазы, чтобы
не жечь токены на тривиальных правках. USE WHEN: an implementation phase is
done and needs validation before moving to the next phase. Trigger phrases
(RU/EN): «ревью фазы», «проверь фазу», «валидация фазы», «проверь что
написал», «фаза готова», «phase review», «review phase», «verify phase»,
«validate phase». NOT for: PR/diff review (use differential-review), generic
code review (use code-review-skill). Includes built-in security audit,
architecture invariants check, forward-look stress test, adversarial paranoia
filter, and post-fix regression sweep — отдельный security-review запускать
не нужно. Integrates as Шаг 7 (Review) внутри Bulletproof. Specifically for:
post-phase verification in multi-phase implementation plans (MASTER-PLAN.md,
bulletproof workflow, SPARC phases). Based on Superpowers methodology
(obra/superpowers) + multi-agent zoning + adaptive sizing.
---
# Phase Review — Адаптивная многоэтапная верификация через свежих субагентов
## Почему именно так (не менять без причины)
Один агент с историей сессии психологически некритичен к своему коду. Свежий
субагент видит код так же, как его увидит следующий разработчик — без
предположений «что я имел в виду».
**Правило 1 — fresh subagents:** все Reviewer'ы — это всегда свежие субагенты.
Текущая сессия играет только роль оркестратора + исполнителя фиксов на Шаге 3.
**Правило 2 — зонирование агентов:** разные роли = разные агенты, чтобы глубина
анализа была максимальной. Ни один агент не делает двух ролей сразу.
**Правило 3 — adaptive sizing:** S/M/L по размеру фазы. Bug-fix не должен
прогонять полный 7-агентный pipeline — это перерасход. Архитектурное изменение
должно — иначе пропустим инвариант. Размер определяется автоматически на
Шаге 0.5; пользователь может override.
**Порядок (полный, для L-размера):**
1. Шаг 0 — Context preparation (текущая сессия)
2. Шаг 0.5 — Size detection (S/M/L)
3. Шаг 1 — Declarations Gate (параллель: 1A Spec + 1B Architecture)
4. Шаг 2 — Risk Profiles (параллель: 2A Quality + 2B Security + 2C Forward-Look)
5. Шаг 2.5 — Adversarial Skeptic (sequential)
6. Шаг 3 — Fix application (текущая сессия, только REAL findings)
7. Шаг 3.5 — Regression Sweep (sequential, fresh взгляд на diff фиксов)
8. Шаг 4 — Итоговый отчёт
**Какие шаги пропускаются на S/M — см. Шаг 0.5 ниже.**
---
## Шаг 0 — Подготовка контекста (текущая сессия, всегда)
```
Перед запуском ревью собери контекст:
1. ТЗ ФАЗЫ
Прочитай исходное ТЗ (CLAUDE.md, MASTER-PLAN.md или указанный файл).
Выведи одной строкой: что должна была сделать фаза.
2. ИЗМЕНЁННЫЕ ФАЙЛЫ
git diff --name-only HEAD~1 (или указанный диапазон).
git diff --shortstat — для оценки объёма.
3. КОМАНДА ТЕСТОВ
Если есть — зафиксируй.
4. PROJECT CONTEXT
- Приоритет фазы: ЗАПУСТИТЬ / ПРОДАТЬ / МАСШТАБИРОВАТЬ
- Объём в первый месяц: десятки / сотни / тысячи
- Стадия продукта: pre-MVP / MVP / production / scale
- Чувствительные участки в diff: auth, PII, платежи, ЭЦП,
файл-аплоад, raw SQL, внешние API, фоновые задачи
5. ФАЙЛ АРХИТЕКТУРНЫХ ИНВАРИАНТОВ
architecture/.../правила-нерушимые.md, ADR/, INVARIANTS.md.
Зафиксируй путь или отметь «нет».
6. ASSUMPTION LOG (заимствовано из Superpowers)
Запиши ключевые допущения, которые делал при реализации фазы:
«я предполагал, что X», «я считал, что Y не нужно».
Они передаются Skeptic'у для проверки.
```
---
## Шаг 0.5 — Size Detection (текущая сессия, новый)
Определяет S / M / L. От размера зависит, какие агенты запускаются и сколько
токенов потратится.
### Авто-детекция
```
S — SMALL (bug-fix, копипаста, правка текста):
условие: < 4 файлов И < 100 строк diff И нет sensitive-участков
триггер-слова: «фикс», «баг», «опечатка», «правка», «hotfix»
стоимость: 2-3 агента (~25-30% от L)
M — MEDIUM (фича, новый эндпоинт, рефакторинг):
условие: 4-15 файлов ИЛИ есть sensitive-участки ИЛИ
новый компонент/слой/таблица
триггер-слова: «фича», «новый функционал», «эндпоинт», «компонент»
стоимость: 4-6 агентов (~60-70% от L)
L — LARGE (архитектура, миграция, новый домен):
условие: > 15 файлов ИЛИ затронуты ≥3 модуля/слоя ИЛИ
миграция БД ИЛИ новый bounded context
триггер-слова: «архитектура», «миграция», «новый домен»,
«переписывание», «refactor across»
стоимость: 7 агентов (100%, при > 15 файлов — батчинг по 5-8)
```
### Override
Пользователь может задать явно:
- `/phase-review --size S` (или `M` / `L`)
- В тексте задачи: «прогони S-ревью», «полное L-ревью»
### Sensitive-bump
Если в diff затронуты sensitive-участки (auth/PII/платежи/ЭЦП/файл-аплоад/
raw SQL без ORM), **минимальный размер = M**. S автоматически апгрейдится
до M, чтобы security и forward-look не пропустить.
### Матрица: какой агент на каком размере
| Шаг | Роль | Агент | S | M | L |
|-----|---------------------|--------------------|---|---|---|
| 1A | Spec Compliance | `reviewer` | ✓ | ✓ | ✓ |
| 1B | Architecture Invar. | `system-architect` | — | ✓¹| ✓ |
| 2A | Code Quality | `code-analyzer` | ✓ | ✓ | ✓ |
| 2B | Security | `security-auditor` | ✓²| ✓ | ✓ |
| 2C | Forward Look | `perf-analyzer` | — | ✓ | ✓ |
| 2.5 | Adversarial Skeptic | `analyst` | — | ✓³| ✓ |
| 3 | Fix application | session | ✓ | ✓ | ✓ |
| 3.5 | Regression Sweep | `reviewer` (fresh) | ✓⁴| ✓⁵| ✓ |
| 4 | Final report | session | ✓ | ✓ | ✓ |
¹ — только если файл инвариантов существует, иначе ARCH_SKIP без агента.
² — на S запускается только при sensitive-bump (см. выше). Иначе пропуск.
³ — на M пропускается, если суммарно < 5 находок (нечего фильтровать).
⁴ — на S запускается только если применено ≥ 3 фиксов или хотя бы один
security-фикс.
⁵ — на M запускается, если применён хотя бы один фикс.
**Если ничего не поправили — Шаг 3.5 пропускается на любом размере.**
---
## Шаг 1 — DECLARATIONS GATE
Запусти **одним сообщением** субагентов согласно матрице. На S — только 1A;
на M/L — 1A + 1B параллельно.
### 1A — SPEC COMPLIANCE (агент `reviewer`)
```
Ты — скептичный Spec Reviewer. Проверяешь, что реализация соответствует ТЗ.
Не доверяешь отчётам исполнителя — читаешь реальный код.
КОНТЕКСТ ФАЗЫ: [текст ТЗ]
ИЗМЕНЁННЫЕ ФАЙЛЫ: [список]
ASSUMPTION LOG ИСПОЛНИТЕЛЯ: [допущения из Шага 0.6]
Прочитай каждый файл. Проверь:
1. ПОКРЫТИЕ ТЗ — что не реализовано или реализовано частично?
2. OVER-BUILDING — что реализовано, чего в ТЗ не было?
3. ПРОТИВОРЕЧИЯ — где реализация делает не то, что в ТЗ?
4. ASSUMPTION CHECK — допущения исполнителя соответствуют ТЗ или
противоречат ему?
Формат:
[ФАЙЛ: путь, строка]
Тип: [НЕ РЕАЛИЗОВАНО / ЛИШНЕЕ / ПРОТИВОРЕЧИЕ / ОШИБОЧНОЕ ДОПУЩЕНИЕ]
Критичность: [БЛОКЕР / СРЕДНЕ / МЕЛКО]
Статус: SPEC_PASS / SPEC_WARN / SPEC_FAIL
```
### 1B — ARCHITECTURE INVARIANTS (агент `system-architect`, M/L only)
```
Ты — Architecture Invariants Reviewer. Сверяешь только с инвариантами.
Это НЕ code review.
ФАЙЛ ИНВАРИАНТОВ: [путь]
ИЗМЕНЁННЫЕ ФАЙЛЫ: [список]
Извлеки правила (A-01, A-02, …). Для каждого изменённого файла —
проверь соблюдение каждого правила.
Формат:
[ПРАВИЛО: A-XX]
[ФАЙЛ: путь, строка]
Нарушение: [что]
Критичность: [БЛОКЕР / СРЕДНЕ / МЕЛКО]
Фикс: [как привести в соответствие]
Статус: ARCH_PASS / ARCH_FAIL / ARCH_WARN / ARCH_SKIP
```
**Если SPEC_FAIL или ARCH_FAIL → фикс → повторить Шаг 1 целиком.**
---
## Шаг 2 — RISK PROFILES
После прохождения Шага 1 — **одним сообщением** все профили согласно матрице.
S: только 2A (+ 2B если sensitive-bump). M/L: 2A + 2B + 2C параллельно.
### 2A — CODE QUALITY (агент `code-analyzer`)
```
Spec и Architecture проверены. Безопасность и forward-look — другие
агенты параллельно, не дублируй.
ИЗМЕНЁННЫЕ ФАЙЛЫ: [список]
СТЕК / СОГЛАШЕНИЯ: [из CLAUDE.md]
A — ЛОГИКА И БАГИ:
- Off-by-one, неверные операторы
- null / undefined / 0 / NaN / пустые коллекции
- async/await без обработки ошибок
- Неосмысленные ?? и || дефолты
- Возврат не того типа, что ожидает caller
B — СОВМЕСТИМОСТЬ С ПРОЕКТОМ:
- Конфликты имён, нарушения паттернов проекта
- Циклические зависимости, импорты несуществующего
- Несоответствия типов с другими частями
C — КРАЕВЫЕ СЛУЧАИ ЗДЕСЬ-И-СЕЙЧАС:
- Race conditions в одном запросе
- Внешний сервис вернул 500 — что сейчас?
- Memory leak в одной операции
Формат:
[ФАЙЛ: путь, строка][Категория: A/B/C]
Проблема, сценарий поломки, критичность, фикс.
Статус: QUALITY_PASS / QUALITY_FAIL
```
### 2B — SECURITY (агент `security-auditor`, S при sensitive-bump, M/L всегда)
```
ИЗМЕНЁННЫЕ ФАЙЛЫ: [список]
ЧУВСТВИТЕЛЬНЫЕ КОНТЕКСТЫ: [auth, PII, платежи, ЭЦП, …]
S1 — INJECTION / UNTRUSTED INPUT (SQL/XSS/cmd/path/SSRF/proto/deserialization)
S2 — AUTH / AUTHZ (отсутствие проверок, IDOR, JWT, привилегированные операции)
S3 — СЕКРЕТЫ И КРИПТО (hardcoded, MD5, IV, секреты в логах/bundle/responses)
S4 — DATA EXPOSURE / PII (поля в ответах, PII в логах, stack traces в prod)
S5 — DOS (rate limit, ReDoS, размер парсинга, циклы по user input)
S6 — DEPENDENCIES / SUPPLY CHAIN (CVE, абандонированные, URL-imports)
S7 — КОНТЕКСТНО-СПЕЦИФИЧНОЕ (webhook signature, ЭЦП цепочка, file upload AV/тип/размер,
webhook secret header, user-controlled в job payload)
Формат:
[ФАЙЛ: путь, строка][Раздел: S1..S7]
Класс уязвимости (CWE/OWASP), сценарий эксплуатации, критичность, фикс.
Статус: SECURITY_PASS / SECURITY_WARN / SECURITY_FAIL
```
### 2C — FORWARD LOOK (агент `perf-analyzer`, M/L only)
```
Spec, Quality, Security смотрят «работает ли сейчас». Ты — что сломается
под ростом и со временем.
ИЗМЕНЁННЫЕ ФАЙЛЫ: [список]
ТЕКУЩИЙ ОБЪЁМ: [десятки/сотни/тысячи]
ПРОФИЛЬ НАГРУЗКИ: [hot path / cold]
ОСЬ A — МАСШТАБ (×10 / ×100):
- N+1, отсутствие индексов, full scan
- O(n²) на user-controlled размере
- Нет пагинации/лимитов
- Синхронные внешние API в hot path
- Кеши без TTL / unbounded growth
ОСЬ B — ВРЕМЯ (через месяц):
- Логи/temp/кеши без ротации (диск)
- Connection / file handle leaks
- Stale data, протухающие кеши/токены
- Хардкоднутые даты, истекающие лимиты
- Сертификаты с истечением
- Schema drift после миграции
ОБЯЗАТЕЛЬНО ≥3 точки даже если блокеров нет.
Формат:
[ОСЬ: A/B][ФАЙЛ: путь, строка]
Точка слома, триггер, горизонт, критичность, митигация.
Статус: FORWARD_PASS / FORWARD_WARN / FORWARD_FAIL
```
**Если QUALITY_FAIL / SECURITY_FAIL / FORWARD_FAIL → фикс → повторить Шаг 2.**
---
## Шаг 2.5 — ADVERSARIAL SKEPTIC (агент `analyst`)
Запускается на L всегда; на M — если суммарно ≥5 находок; на S — пропускается.
```
Ты — Adversarial Skeptic. Не пишешь новых находок. Фильтруешь
существующие через project context. Цель — отделить РЕАЛЬНЫЕ риски
от теоретических.
PROJECT CONTEXT:
- Приоритет: [ЗАПУСТИТЬ / ПРОДАТЬ / МАСШТАБИРОВАТЬ]
- Объём в первый месяц: [N]
- Стадия: [pre-MVP / MVP / production / scale]
- Чувствительные контексты: [список]
ASSUMPTION LOG ИСПОЛНИТЕЛЯ: [из Шага 0]
СПИСОК НАХОДОК: [мерж Quality/Security/Forward]
Для каждой находки:
1. РЕАЛЬНО — конкретный сценарий с привязкой к нашим объёмам и стадии.
2. ПАРАНОЯ — теоретически возможно, но при наших объёмах не критично.
Правила:
- «Теоретически может» без сценария на наших объёмах = ПАРАНОЯ.
- «Сломается в первый месяц при заявленной аудитории» = РЕАЛЬНО.
- Security CRITICAL/HIGH не может быть параноей — даже на 10 пользователях.
- Завышенная критичность — снижай. Заниженная — повышай.
Формат:
[№][источник][оригинальная критичность]
Вердикт: РЕАЛЬНО / ПАРАНОЯ
Сценарий или причина пропуска.
Финальная критичность.
Статус: SKEPTIC_DONE
```
**ПАРАНОЯ-финдинги уходят в WARN-секцию отчёта, не в фиксы.**
---
## Шаг 3 — VERIFICATION & FIX (текущая сессия, всегда)
```
Применяй фиксы только по REAL финдингам.
Параноя — в отчёт, не в код.
Порядок:
SECURITY CRITICAL/HIGH (REAL) →
ARCH БЛОКЕР →
QUALITY КРИТИЧНО (REAL) →
FORWARD КРИТИЧНО (REAL) →
SECURITY MEDIUM →
QUALITY СРЕДНЕ →
FORWARD СРЕДНЕ
Правила:
- Одно изменение = одна проблема
- Запрещён рефакторинг и «пока уже здесь»
- Для security-фиксов — добавь негативный тест если есть тест-инфра
- Если при фиксе появилась новая проблема — она пройдёт через Шаг 3.5
- Если fixes = 0 — переходи сразу к Шагу 4 (Шаг 3.5 пропустится)
```
---
## Шаг 3.5 — REGRESSION SWEEP (свежий `reviewer`)
Запускается:
- L: всегда
- M: если применён хотя бы один фикс
- S: если ≥3 фикса или хотя бы один security-фикс
- На любом размере, если 0 фиксов — пропуск.
```
Не делаешь полного ревью. Смотришь ТОЛЬКО diff фиксов.
DIFF ФИКСОВ: [git diff между «до» и «после»]
ИСХОДНЫЙ СПИСОК REAL: [для проверки, что закрыто]
Ищи:
1. ЧТО НОВОГО — оцени с нуля, под видом фикса могли затащить баг.
2. РЕГРЕССИИ В СОСЕДНЕМ КОДЕ — изменения задели вызывающих? Проверь
импорты и вызывающих функций.
3. ФИКТИВНЫЕ ФИКСЫ — закрыта ли исходная проблема, или косметика?
Формат:
[ФАЙЛ: путь, строка]
Тип: [НОВЫЙ БАГ / РЕГРЕССИЯ В СОСЕДНЕМ / ФИКТИВНЫЙ ФИКС]
Критичность: [КРИТИЧНО / СРЕДНЕ]
Статус: REGRESSION_PASS / REGRESSION_FAIL
```
**REGRESSION_FAIL → фикс новых проблем → повторить Шаг 3.5.**
---
## Шаг 4 — ИТОГОВЫЙ ОТЧЁТ (текущая сессия, всегда)
```
Финальный отчёт фазы [НАЗВАНИЕ]:
РАЗМЕР: S / M / L (с обоснованием авто-детекции или пометкой override)
ГЕЙТЫ (только запущенные):
- Spec: [статус]
- Architecture: [статус или SKIPPED-по-размеру / ARCH_SKIP-нет-инвариантов]
- Quality: [статус]
- Security: [статус или SKIPPED-по-размеру]
- Forward: [статус или SKIPPED-по-размеру]
- Skeptic: [статус или SKIPPED-по-размеру]
- Regression: [статус или SKIPPED-нет-фиксов]
ИСПРАВЛЕНО (REAL):
- [категория] [проблема] — [что сделано] — [файл:строка]
ПАРАНОЯ (Шаг 2.5, если был):
- [проблема] — [почему теоретическая]
НЕ ИСПРАВЛЕНО (намеренно):
- [проблема] — [причина] — [когда вернуться]
WATCH-ТОЧКИ ИЗ FORWARD (если был):
- [точка] — [горизонт] — [когда мониторить]
ЗАТРОНУТЫЕ ФАЙЛЫ ВНЕ ИСХОДНОЙ ФАЗЫ:
- [файл] — [почему]
ГОТОВНОСТЬ К СЛЕДУЮЩЕЙ ФАЗЕ: ДА / НЕТ
```
---
## ПРАВИЛА СВЕРХУ
**Нельзя:**
- Запускать Шаг 2 до прохождения Шага 1
- Запускать Шаг 2.5 до завершения всех ревью Шага 2
- Запускать Шаг 3 до SKEPTIC_DONE (или до завершения Шага 2 если Skeptic пропущен)
- Запускать Шаг 3.5 до применения всех фиксов
- Использовать текущую сессию как любого Reviewer
- Объединять две роли Reviewer'ов в один промпт одному агенту
- Запускать параллельные шаги последовательно
- Фиксить ПАРАНОЯ-финдинги
- Игнорировать sensitive-bump (auth/PII/платежи без security = NO)
- Понижать размер ниже авто-детекции без явного override от пользователя
- Говорить «готово» без Шага 4 со всеми статусами
**Зонирование агентов (фиксированное):**
| Шаг | Роль | Агент | Запускается на |
|-----|---------------------|--------------------|----------------|
| 1A | Spec | `reviewer` | S, M, L |
| 1B | Architecture | `system-architect` | M, L |
| 2A | Quality | `code-analyzer` | S, M, L |
| 2B | Security | `security-auditor` | S(если sens), M, L |
| 2C | Forward Look | `perf-analyzer` | M, L |
| 2.5 | Skeptic | `analyst` | M(если ≥5), L |
| 3 | Fix | session | S, M, L |
| 3.5 | Regression | `reviewer` (fresh) | условно (см. матрицу) |
| 4 | Final report | session | S, M, L |
**Выбор модели:**
- Все Reviewer'ы — Opus
- Skeptic — Opus обязательно
- Regression Sweep — Sonnet достаточно (узкий scope)
- На S-размере допустимо Sonnet для Spec/Quality чтобы экономить
**Если фаза очень большая (> 15 файлов):**
Раздели на блоки по 5-8 связанных файлов. Прогони Шаги 1–3.5 для каждого
блока отдельно. Шаг 4 — единый отчёт по всей фазе.
---
## ИНТЕГРАЦИЯ С BULLETPROOF
Phase-review предназначен встать **внутри** Bulletproof как Шаг 7 (Review),
не заменять Bulletproof. Сопоставление размеров:
| Размер задачи | Bulletproof | phase-review | Что запускается |
|---------------|-------------|--------------|-----------------|
| Bug-fix | S (6 этапов) | S | 2-3 агента, ~30% токенов от L |
| Feature | M (10 этапов)| M | 4-6 агентов, ~70% токенов от L |
| Architecture | L (12 этапов)| L | 7 агентов, 100% (с батчингом если > 15 файлов) |
Размер phase-review **наследуется** от размера Bulletproof по умолчанию.
Override возможен в обе стороны — например, на критичную M-фичу с PII можно
поставить L-ревью.
**Когда phase-review может работать БЕЗ Bulletproof:**
- Ad-hoc задача без полного workflow
- Внешний код / pull request на ревью
- После SPARC-фазы
**Когда Bulletproof нужен ВМЕСТО phase-review:**
- Задача начинается с нуля (нет реализации, которую можно проверить)
- Нужна спецификация / тест-план / документация — это вне scope phase-review
---
## ЧТО ЗАИМСТВОВАНО ИЗ SUPERPOWERS (obra/superpowers)
- **Fresh subagent reviewer pattern** — основа всего скилла.
- **Subagent-driven development signals** (DONE / DONE_WITH_CONCERNS / NEEDS_CONTEXT / BLOCKED) — для интеграции с агентом-исполнителем фазы.
- **Verification before claiming done** — Шаг 4 со статусами всех гейтов.
- **Assumption Log** — допущения исполнителя как явный артефакт (Шаг 0 → Шаг 1A → Шаг 2.5).
Намеренно НЕ заимствовано:
- Brainstorm phase (вне scope верификации).
- Pair programming live (наш скилл асинхронный, fresh subagent).
- Universal slash-commands от superpowers — у нас своя slash-команда `/phase-review`.
---
## СИГНАЛЫ СУБАГЕНТА-ИСПОЛНИТЕЛЯ
Если фаза делалась через Agent tool, исполнитель возвращает один из сигналов:
- DONE → запускать Шаг 0 → Шаг 0.5 → дальше по pipeline
- DONE_WITH_CONCERNS → прочитать замечания, оценить, потом Шаг 0
- NEEDS_CONTEXT → предоставить контекст и переотправить (ревью не запускать)
- BLOCKED → эскалировать в текущую сессию (ревью не запускать)
---
## АВТОМАТИЗАЦИЯ ЧЕРЕЗ STOPHOOK
Скилл можно вызывать из StopHook — автозапуск при завершении фазы и передаче
управления пользователю. На S-размере overhead минимален (~2-3 агента),
поэтому автозапуск экономически оправдан даже для bug-fix'ов.