/output-review — Независимый аудит результата скилла
Проверяет OUTPUT скилла по чек-листам из SKILL.md целевого скилла. Независимая оценка — не тот же AI-контекст, который генерировал результат.
Перед началом
Прочитай .claude/qa_agent.md и .claude/agents/auditor.md.
Когда использовать
- •Сразу после завершения любого скилла (
SKILL COMPLETE) - •Когда Score в SKILL COMPLETE кажется завышенным
- •Для независимой валидации перед мержем/релизом
Входные данные
| Параметр | Обязательность | Описание |
|---|---|---|
| skill-name | Опционально | Имя скилла (/output-review api-tests). Если не указано — ищет SKILL COMPLETE в чате |
Алгоритм (7 фаз)
Verbosity Protocol
Structured Output Priority: Весь analysis идёт в артефакт (MD/HTML), не в чат.
Chat output (ограничения):
- •Brief Summary: max 5 строк (что нашли, сколько, итог)
- •Findings table: max 15 строк (топ по severity)
- •Полный отчёт:
📊 Полный отчёт: {path}+ открыть файл
Iterative steps: Не выводить прогресс по каждому файлу. Checkpoint только при:
- •Phase transition (Фаза N → Фаза N+1)
- •Blocker обнаружен
- •Завершение (SKILL COMPLETE)
Tools first:
- •Grep → table → report, без "Now I will grep..."
- •Read → analyze → report, без "The file shows..."
Post-Check: Inline перед SKILL COMPLETE (5-7 строк checklist), не отдельный файл.
Фазы 1-6: Silent. Фаза 7: Сохранить полный отчёт в файл + краткая сводка в чат (max 5 строк).
Фаза 1 — Target Identification
Цель: Определить какой скилл аудитировать.
- •Если указан параметр
/output-review {skill-name}→ использовать его - •Иначе — искать последний
SKILL COMPLETE: /{skill-name}в контексте чата - •Fallback — спросить пользователя: "Какой скилл аудитировать?"
- •Валидация: Glob
.claude/skills/{skill-name}/SKILL.md— файл должен существовать
Если скилл не найден → STOP:
❌ Скилл /{skill-name} не найден в .claude/skills/
Доступные: [список из Glob]
Фаза 2 — Checklist Extraction
Цель: Извлечь все проверки из SKILL.md целевого скилла.
- •Прочитать
.claude/skills/{skill-name}/SKILL.md - •Найти секции (regex по заголовкам
##/###):- •
Self-Check/Definition of Done - •
Quality Gates - •
Post-*Check(Post-Check, Post-Compilation Check, Post-Audit Check) - •
BANNED/ЗАПРЕЩЕНО - •
Compilation Gate
- •
- •Если существует
references/→ Globreferences/*.md→ читать, искать чек-листы - •Извлечь каждый пункт
- [ ]и каждый нумерованный пункт из BANNED
Вывод перед продолжением: таблица | # | Группа | Пункт | + строка Всего: N проверок.
Фаза 3 — Artifact Discovery
Цель: Найти артефакты (файлы), созданные скиллом.
Приоритет поиска:
- •SKILL COMPLETE блок → строка
Артефакты:→ парсить пути файлов - •SKILL.md output-секция → прочитать секции "Формат вывода", "Выходные данные", "Артефакты" → Glob по ожидаемым путям
- •Chat-only скиллы (spec-audit, skill-audit, doc-lint, screenshot-analyze) → артефакт = контекст чата + HTML/MD отчёт если есть
Для каждого найденного файла — проверить существование через Glob.
Если артефакты не найдены:
⚠️ Артефакты не обнаружены. Оценка будет проведена по контексту чата.
Фаза 4 — Evaluation
Цель: Независимо проверить каждый пункт чек-листа.
Для каждого пункта из Фазы 2:
- •Прочитать релевантный артефакт (файл или контекст чата)
- •Оценить соответствие пункту
- •Присвоить вердикт:
| Вердикт | Значение |
|---|---|
| ✅ PASS | Полностью соответствует |
| ❌ FAIL | Не соответствует — с доказательством |
| ⚠️ PARTIAL | Частично соответствует — описать что не так |
| ⏭️ SKIP | Неприменимо к данному контексту |
Правила:
- •Каждый ❌ FAIL — обязательно с конкретным доказательством: файл, строка, фрагмент кода
- •BANNED-пункты: Grep по артефактам на сигнатуры (например
Thread.sleep,shouldBe,Map<String, Any>) - •Compilation Gate: запуск команды из SKILL.md (1 попытка). Если уже была запущена — использовать результат из чата
Пример FAIL: ❌ FAIL: assertEquals без message — файл:строка — Найдено: X / Ожидалось: Y
Фаза 5 — Anti-Pattern Scan
Цель: Проверить артефакты на анти-паттерны из agents/sdet.md.
- •
ls .claude/qa-antipatterns/— получить список anti-patterns - •Grep по артефактам на ключевые сигнатуры из имён файлов (например
Thread.sleep,Map<String, Any>, PII) - •При обнаружении — прочитать соответствующий reference файл для контекста
Если скилл отсутствует в таблице Anti-Patterns → пропустить фазу.
| Вердикт | Значение |
|---|---|
| ✅ CLEAN | Сигнатура не найдена |
| ❌ FOUND | Сигнатура найдена — файл:строка |
Фаза 6 — Universal Checks
Цель: Проверки, общие для всех скиллов.
- •SKILL COMPLETE блок — присутствует в чате?
- •Формат — содержит 5 обязательных полей:
- •
Артефакты - •
Compilation - •
Upstream - •
Coverage - •Имя скилла в заголовке
- •
- •Score < 70% — если Coverage указан как X/Y и X/Y < 0.7 → предупреждение
Фаза 7 — Report
Цель: Сформировать итоговый отчёт и сохранить в файл audit/output-review_{skill-name}_{YYYY-MM-DD}.md.
Если файл с таким именем уже существует — добавить суффикс _2, _3 и т.д.
Таблица результатов (по группам)
## Output Review Report: /{skill-name}
### Self-Check / Definition of Done
| # | Пункт | Вердикт | Комментарий |
|---|-------|---------|-------------|
| 1 | Архитектура | ✅ PASS | config/, requests/, helpers/ (main) + tests (test) — присутствуют |
| 2 | assertions с message | ❌ FAIL | assertEquals без message в RegistrationApiTests.kt:45 |
### BANNED
| # | Правило | Вердикт | Комментарий |
|---|---------|---------|-------------|
| 1 | Thread.sleep() | ✅ PASS | Не найдено |
### Anti-Patterns (agents/sdet.md)
| # | Паттерн | Вердикт | Комментарий |
|---|---------|---------|-------------|
| 1 | PII в коде | ✅ CLEAN | @gmail.com не найден |
### Universal Checks
| # | Проверка | Вердикт | Комментарий |
|---|----------|---------|-------------|
| 1 | SKILL COMPLETE блок | ✅ PASS | Присутствует |
| 2 | 5 полей формата | ⚠️ PARTIAL | Отсутствует Coverage |
Scorecard
Score = PASS / (PASS + FAIL) × 100
Формула: {N_pass} + {N_partial}×0.5 / ({N_pass} + {N_partial}×0.5 + {N_fail}) × 100
SKIP не учитываются.
Пример:
Scorecard: 12 PASS + 1 PARTIAL×0.5 / (12 + 0.5 + 2) × 100 = 86%
Расхождения с Post-Check скилла
Если скилл уже выполнил Post-Check в чате — сравнить:
- •Где self-review не согласен с оценкой скилла
- •Формат:
Пункт X: скилл → ✅, self-review → ❌ (причина)
Рекомендации по артефакту
Конкретные действия для устранения каждого FAIL в артефакте:
### Рекомендации по артефакту 1. **[FAIL]** assertEquals без message в RegistrationApiTests.kt:45 → Добавить message: `assertEquals(200, response.code, "Registration should return 200")` 2. **[PARTIAL]** Coverage не указан в SKILL COMPLETE → Добавить строку `├─ Coverage: X/Y тестов`
Рекомендации по улучшению скилла
Цель: На основе найденных FAIL и PARTIAL — предложить конкретные правки в .claude/skills/{skill-name}/SKILL.md, чтобы следующий запуск скилла не воспроизводил те же ошибки.
Логика: каждый FAIL/PARTIAL — симптом недостающего или нечёткого правила в скилле.
### Рекомендации по улучшению /{skill-name}
| # | Проблема в артефакте | Причина (правило отсутствует) | Рекомендуемое правило в SKILL.md |
|---|---------------------|-------------------------------|----------------------------------|
| 1 | Два HTTP-кода в одном Expected Result (`201 ИЛИ 400`) | Нет явного требования атомарности | Добавить в Protocol: "Каждый сценарий содержит ровно 1 Expected Result. Запрещено `X ИЛИ Y` в одной строке." |
| 2 | L10N сценарии отсутствуют | Нет явного Coverage Matrix для L10N | Добавить в Coverage Matrix: `L10N: {EMOJI_STRING}, {SPECIAL_CHARS}` как обязательные типы, если спека не запрещает явно. |
Правила генерации рекомендаций:
- •Только для FAIL и PARTIAL (PASS и SKIP игнорировать)
- •Рекомендация должна быть конкретной: что именно добавить/изменить в SKILL.md и в какую секцию
- •Формулировать как правило/запрет, а не пожелание
- •Если найдено >5 FAIL — сгруппировать по теме, не перечислять каждый отдельно
---
## Ограничения
- Полный отчёт сохранять в `audit/output-review_{skill-name}_{YYYY-MM-DD}.md`, краткая сводка (5 строк) — в чат
- Compilation Gate: максимум 1 попытка (не исправлять код, только зафиксировать результат)
- Не исправлять артефакты — только документировать findings
- Если артефакт слишком большой (>500 строк) — проверять по ключевым паттернам, не читать целиком
---
## Post-Review Check (inline перед SKILL COMPLETE)
- [ ] Все извлечённые пункты чек-листа проверены?
- [ ] Каждый FAIL содержит конкретное доказательство (файл:строка)?
- [ ] BANNED-пункты проверены через Grep, а не визуально?
- [ ] Scorecard рассчитан с показом формулы (числитель/знаменатель)?
- [ ] Нет ложных FAIL (контекст каждого finding перепроверен)?
- [ ] Полный отчёт сохранён в `audit/output-review_{skill-name}_{YYYY-MM-DD}.md`?
**Если нашёл ошибку в аудите → исправь.**
---
### Завершение
После Post-Review Check — напечатай блок `SKILL COMPLETE` (формат в qa_agent.md § Skill Completion Protocol).