AGENT SKILL

sdd:test

Generate and run check artifacts for a spec. Self-sufficient: MCP preflight, 2-agent generation, автоматически по всем Requirements, auto state transition.

License 许可
MIT
最近更新
2026-05-12
Stars
★ 22
Forks
5

01 前言 Front Matter

name
sdd:test
description
Generate and run check artifacts for a spec. Self-sufficient: MCP preflight, 2-agent generation, автоматически по всем Requirements, auto state transition.
workflow_step
5

02 资源文件 2

03 SKILL.md 正文

Шаг 0: MCP preflight

Попытайся вызвать sdd_db_init (MCP tool).

Если инструмент недоступен:

  1. Прочитай .mcp.json. Если sdd-scripts отсутствует → остановись:

    ✗ sdd-scripts не зарегистрирован в .mcp.json. Добавьте запись вручную и перезапустите.
    
  2. Если sdd-scripts присутствует → запусти через Bash tool:

    python3 "${CLAUDE_SKILL_DIR}/../scripts/enable_mcp.py"
    
    • Вывод added → остановись:
      Конфигурация обновлена: sdd-scripts добавлен в enabledMcpjsonServers.
      Перезапустите сессию Claude Code и повторите /sdd:test.
      
    • Вывод already-enabled → остановись:
      MCP-сервер настроен, но не загружен. Перезапустите сессию Claude Code.
      
    • Вывод error: → остановись с текстом ошибки.

Если инструмент доступен → перейди к шагу 0.5.

Шаг 0.5: выбор режима и start run

Спроси через AskUserQuestion:

Режим прогона:

  1. full — заново генерировать check-скрипты и запустить всё
  2. rerun — запустить существующие скрипты без регенерации
  3. show — показать текущее состояние БД без запуска

Определи <spec> из $ARGUMENTS или из контекста разговора.

Вызови sdd_db_run_start → получи run_id. Все дальнейшие sdd_db_step_* используют этот run_id.

Шаг 1: загрузка спеки

sdd_db_step_start run_id 1

Прочитай <spec>/spec.md. Извлеки все Requirements и Scenarios. Если spec.md содержит test_type: в Purpose-секции → sdd_db_set_spec_meta <spec> test_type <value>.

Зарегистрируй каждый Requirement через sdd_db_add <spec> <req_id> <run_id> → получи check_id. Если у Requirement есть явный scope: → sdd_db_set_req_meta <spec> <req_id> scope <value>.

sdd_db_step_done run_id 1

Шаг 2: чтение метаданных

sdd_db_step_start run_id 2

Для каждого Requirement прочитай check_id через sdd_db_read. Собери:

  • test_type спеки (из spec_meta)
  • scope каждого Requirement (из checks)

sdd_db_step_done run_id 2

Шаг 3: wipe (только в режиме full)

sdd_db_step_start run_id 3

Если mode=full: спроси подтверждение через AskUserQuestion:

Удалить существующие check-скрипты и данные БД для <spec>?

При согласии: sdd_db_delete_spec <spec>, удали файлы <spec>/scripts/check_*.py.

sdd_db_step_done run_id 3

Шаг 4: загрузка критериев

sdd_db_step_start run_id 4

Вызови sdd_db_list_criteria → получи JSON список критериев. Они передаются Агенту 1 на шаге 6.

sdd_db_step_done run_id 4

Шаг 5: прогон существующих скриптов (rerun / full после wipe)

sdd_db_step_start run_id 5

Для каждого check: если script_path задан и файл существует → запусти через Bash tool. Запиши результат через sdd_db_write_manual <check_id> passed|failed.

sdd_db_step_done run_id 5

Шаг 6: генерация (только mode=full)

sdd_db_step_start run_id 6

Для каждого Requirement параллельно:

scope=workflow

Создай тест-кейс <spec>/cases/<req_slug>.md по шаблону из cases/test.md. Запиши путь: sdd_db_write_script_path <check_id> <path>.

scope=component — два агента последовательно

Агент 1 (анализ):

Входы:

  • Полный текст spec.md
  • Текст данного Requirement + его Scenarios
  • Список критериев из шага 4 (test_type, scope)

Задача: системный анализ (процесс → контекст → цель → failure mode), MVP без деталей.

Если test_type=imperative — включить precondition/operation/postcondition. Если test_type=declarative — включить assertions по каждому полю/правилу.

Формат вывода — жёсткий YAML:

goal: <что этот requirement охраняет>
failure_mode: <что сломается если нарушен>
scenarios:
  - id: <scenario-id>
    description: <дословно из spec.md>
checks:
  - what: <что проверить>
    justification: <цитата из текста Requirement>
    boundary: <граничный случай с обоснованием, если применимо>

После завершения: sdd_db_write_analysis_notes <check_id> <yaml> (ставит analysis_status=done).

Агент 2 (генерация):

Входы:

  • analysis_notes из БД (основной источник — sdd_db_read <check_id>)
  • spec.md только для разрешения неоднозначностей

Правило: реализовать ровно то, что в analysis_notes. Не добавлять проверки из spec.md. Если противоречие analysis_notes vs spec.md → флагировать в stdout, не генерировать (сигнал перезапустить Агента 1).

Контракт скрипта (D22):

  • Exit 0 = pass, exit 1 = fail, exit 2 = env-error
  • Первая строка stdout: PASS или FAIL: <reason>
  • Read-only, детерминированный
  • Данные через CLI/API, не через прямое чтение файлов

Сохрани скрипт: <spec>/scripts/check_<req_slug>.py. Запиши путь: sdd_db_write_script_path <check_id> <path>. Ставит generation_status=done.

sdd_db_step_done run_id 6

Шаг 6.5: проверка покрытия Scenarios

После каждого Агента 2: sdd_db_list_gaps <check_id>. Если непусто → вернись к Агенту 2 с запросом дописать проверки. Максимум 2 итерации.

Шаг 7: семантическая оценка (автоматически по всем Requirements)

sdd_db_step_start run_id 7

Вызови sdd_db_start_semantic_eval <run_id> agent до запуска субагентов. Без этого вызова sdd_db_step_done run_id 7 завершится ошибкой.

Для каждого Requirement запусти субагент-оценщик:

Входы субагента:

  • Текст Requirement + Scenarios из spec.md
  • Содержимое check-скрипта (если scope=component) или тест-кейса (workflow)
  • Список критериев (id, name, category, признаки нарушения)

Задача субагента (Верификация — шаг 7): Проверь что тест действительно проверяет то, что написано в требовании. Оцени каждый критерий: passed/failed. Запиши через sdd_db_add_criterion_result <check_id> <criterion_id> <passed> <notes>. История накапливается — повторный вызов добавляет строку, не перезаписывает.

sdd_db_step_done run_id 7

Шаг 7.5: автоматический transition Блока 1

sdd_db_step_start run_id 7.5

Если скилл вызван в контексте change'а (известен change_id):

Прочитай агрегат через sdd_db_report <spec>.

  • Все manual_result = passed → sdd_state_transition <change_id> verify-ok
  • Хотя бы один manual_result = failed → sdd_state_transition <change_id> verify-failed

Только Skill Flow выполняет этот transition. Generation и Evaluation — запрещено.

sdd_db_step_done run_id 7.5

Шаг 8: итоговый отчёт

sdd_db_step_start run_id 8

Вызови sdd_db_report <spec> → выведи таблицу:

| Requirement | Script | Manual | Semantic | Criteria |
|-------------|--------|--------|----------|----------|
| req-name    | ✓      | passed | passed   | 7/7      |

Итоговая строка: N/M passed.

Orphans из report → отдельная секция если непусто.

sdd_db_step_done run_id 8

04 同仓库更多 Skills

esurvanov
esurvanov/awesome-claude

skill:test-skill

Тест одного скилла: несколько кейсов, стабы, семантические проверки. Читает cases/<ns>/<skill>.md, для каждого Case поднимает стаб, запускает скилл в агенте, проверяет contains + semantic.

测试与质量Skill与智能体开发
★ 22
esurvanov
esurvanov/awesome-claude

skill:test-all

Запускает все тесты скиллов. Обнаруживает тест-спеки в .claude/skills/*/*/cases/, запускает каждый через логику test-skill, выводит сводную таблицу, проверяет TDD-coverage матрицу.

测试与质量Skill与智能体开发
★ 22
esurvanov
esurvanov/awesome-claude

skill:setup

Dev mode setup для awesome-claude репы — создаёт симлинки skills/, commands/, rules/ в .claude/ напрямую через bash. Идемпотентен: повторный вызов выводит "Already linked". Если .claude/<dir> уже существует как обычная директория — предупреждает и просит подтверждение перед заменой.

★ 22
esurvanov
esurvanov/awesome-claude

skill:release

Финальный шаг контрибьюторского workflow — релиз awesome-claude. Bump-version в manifest.yaml, commit, version tag. Останавливается если working tree не чистый.

Skill与智能体开发
★ 22
esurvanov
esurvanov/awesome-claude

skill:onboarding

Guided entry point для контрибьютора awesome-claude. Показывает полный contributor workflow и текущий следующий шаг по состоянию репы. НЕ запускает другие скиллы автоматически — только показывает, что вызвать дальше.

人力资源Skill与智能体开发
★ 22
esurvanov
esurvanov/awesome-claude

skill:deps

Установка/проверка зависимостей awesome-claude из manifest.yaml: CLI-инструменты из секции tools:, субмодули из repos: через sdd:sync. Read-only по manifest.yaml — никогда не пишет в него (для добавления записей используй ручное редактирование или sdd:repo). Валидирует схему manifest.yaml: ошибка и стоп если отсутствует один из version, tools, repos.

Skill与智能体开发
★ 22