AgentSkillsCN

output-review

对任意技能的输出成果,依据其检查清单进行独立审计。在技能完成后,可用于检验输出质量。请勿用于审计SKILL.md本身——此类工作应交由/skill-audit完成。

SKILL.md
--- frontmatter
name: output-review
description: Независимый аудит результата любого скилла по его чек-листу. Используй после завершения скилла для проверки качества output. Не используй для аудита самих SKILL.md — для этого /skill-audit.
allowed-tools: "Read Write Edit Glob Grep Bash(./gradlew*) Bash(wc*)"
agent: agents/auditor.md
context: fork

/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

Цель: Определить какой скилл аудитировать.

  1. Если указан параметр /output-review {skill-name} → использовать его
  2. Иначе — искать последний SKILL COMPLETE: /{skill-name} в контексте чата
  3. Fallback — спросить пользователя: "Какой скилл аудитировать?"
  4. Валидация: Glob .claude/skills/{skill-name}/SKILL.md — файл должен существовать

Если скилл не найден → STOP:

code
❌ Скилл /{skill-name} не найден в .claude/skills/
Доступные: [список из Glob]

Фаза 2 — Checklist Extraction

Цель: Извлечь все проверки из SKILL.md целевого скилла.

  1. Прочитать .claude/skills/{skill-name}/SKILL.md
  2. Найти секции (regex по заголовкам ## / ###):
    • Self-Check / Definition of Done
    • Quality Gates
    • Post-*Check (Post-Check, Post-Compilation Check, Post-Audit Check)
    • BANNED / ЗАПРЕЩЕНО
    • Compilation Gate
  3. Если существует references/ → Glob references/*.md → читать, искать чек-листы
  4. Извлечь каждый пункт - [ ] и каждый нумерованный пункт из BANNED

Вывод перед продолжением: таблица | # | Группа | Пункт | + строка Всего: N проверок.


Фаза 3 — Artifact Discovery

Цель: Найти артефакты (файлы), созданные скиллом.

Приоритет поиска:

  1. SKILL COMPLETE блок → строка Артефакты: → парсить пути файлов
  2. SKILL.md output-секция → прочитать секции "Формат вывода", "Выходные данные", "Артефакты" → Glob по ожидаемым путям
  3. Chat-only скиллы (spec-audit, skill-audit, doc-lint, screenshot-analyze) → артефакт = контекст чата + HTML/MD отчёт если есть

Для каждого найденного файла — проверить существование через Glob.

Если артефакты не найдены:

code
⚠️ Артефакты не обнаружены. Оценка будет проведена по контексту чата.

Фаза 4 — Evaluation

Цель: Независимо проверить каждый пункт чек-листа.

Для каждого пункта из Фазы 2:

  1. Прочитать релевантный артефакт (файл или контекст чата)
  2. Оценить соответствие пункту
  3. Присвоить вердикт:
ВердиктЗначение
✅ 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.

  1. ls .claude/qa-antipatterns/ — получить список anti-patterns
  2. Grep по артефактам на ключевые сигнатуры из имён файлов (например Thread.sleep, Map<String, Any>, PII)
  3. При обнаружении — прочитать соответствующий reference файл для контекста

Если скилл отсутствует в таблице Anti-Patterns → пропустить фазу.

ВердиктЗначение
✅ CLEANСигнатура не найдена
❌ FOUNDСигнатура найдена — файл:строка

Фаза 6 — Universal Checks

Цель: Проверки, общие для всех скиллов.

  1. SKILL COMPLETE блок — присутствует в чате?
  2. Формат — содержит 5 обязательных полей:
    • Артефакты
    • Compilation
    • Upstream
    • Coverage
    • Имя скилла в заголовке
  3. Score < 70% — если Coverage указан как X/Y и X/Y < 0.7 → предупреждение

Фаза 7 — Report

Цель: Сформировать итоговый отчёт и сохранить в файл audit/output-review_{skill-name}_{YYYY-MM-DD}.md.

Если файл с таким именем уже существует — добавить суффикс _2, _3 и т.д.

Таблица результатов (по группам)

markdown
## 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

code
Score = PASS / (PASS + FAIL) × 100

Формула: {N_pass} + {N_partial}×0.5 / ({N_pass} + {N_partial}×0.5 + {N_fail}) × 100
SKIP не учитываются.

Пример:

code
Scorecard: 12 PASS + 1 PARTIAL×0.5 / (12 + 0.5 + 2) × 100 = 86%

Расхождения с Post-Check скилла

Если скилл уже выполнил Post-Check в чате — сравнить:

  • Где self-review не согласен с оценкой скилла
  • Формат: Пункт X: скилл → ✅, self-review → ❌ (причина)

Рекомендации по артефакту

Конкретные действия для устранения каждого FAIL в артефакте:

markdown
### Рекомендации по артефакту

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 — симптом недостающего или нечёткого правила в скилле.

markdown
### Рекомендации по улучшению /{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 — сгруппировать по теме, не перечислять каждый отдельно
code

---

## Ограничения

- Полный отчёт сохранять в `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).