From sdd
<!-- L0: Canonical Dry Run — sweep task against L0/L1/L2 and report contradictions before any code -->
How this command is triggered — by the user, by Claude, or both
Slash command
/sdd:dry-runThe summary Claude sees in its command listing — used to decide when to auto-load this command
<!-- L0: Canonical Dry Run — sweep task against L0/L1/L2 and report contradictions before any code --> # /sdd:dry-run Обязательная сверка задачи со спецификациями. Никакой код не может быть сгенерирован до чистого прогона этой команды. ## Когда применять Всегда, когда пользователь просит код, затрагивающий домен, поведение или архитектурные границы. Пропускать можно только для тривиальных изменений, перечисленных в [`03-context-injection.md` → §10](../03-context-injection.md#10-когда-sdd-не-применять). ## Шаги 1. **Загрузить pattern-routing (до спек):** - Core: `memory/patterns.md`...
Обязательная сверка задачи со спецификациями. Никакой код не может быть сгенерирован до чистого прогона этой команды.
Всегда, когда пользователь просит код, затрагивающий домен, поведение или архитектурные границы. Пропускать можно только для тривиальных изменений, перечисленных в 03-context-injection.md → §10.
Загрузить pattern-routing (до спек):
memory/patterns.md — всегда, дословноmemory/patterns/<context>.md для каждого bounded context, упомянутого в задаче (grep имён context в задаче или путях спек-файлов). Если satellite отсутствует — не ошибка, работать только с core.06-patterns.md для полного протокола routing.Загрузить бандл спеков:
specs/constitution.md — дословно, без сжатияspecs/domain/*.mdspecs/scenarios/*.mdspecs/glossary.md или глоссарий внутри КонституцииВерсионный handshake. Запустить sdd validate specs и убедиться, что depends_on.constitution во всех L1/L2 совпадает с версией L0. Если не совпадает — СТОП.
Построить touched-set. Прочитать задачу пользователя и собрать:
ENT-NNNSCN-NNN через feature_area и tagsrelations.target упомянутых сущностей, references.articles упомянутых сценариевПроверить противоречия:
ART-NNN с precedence: critical, затронутой задачей — нарушает ли задача формулировку?INV-NNN — ломает ли задача инвариант?SCN-NNN с priority: MUST — сохраняет ли задача все его Then?Проверить полноту:
ENT-NNN.SCN-NNN.Вывести отчёт в точном формате:
## Dry Run
- **Version handshake:** constitution=<X>, domain=<Y>, scenarios=<Z> ✓|✗
- **Touched:** <список ART/ENT/INV/EVT/FEA/SCN через запятую>
- **Contradictions:**
- <none>
- ИЛИ: `<ID>` — <дословная цитата правила, которое нарушается>
- **Missing specs:**
- <none>
- ИЛИ: требуется `<ENT-NNN | SCN-NNN>` для <описание пробела>
- **Ambiguous terms:**
- <none>
- ИЛИ: `<термин>` — <почему неоднозначно>
- **Verdict:** `PROCEED` | `BLOCK`
Если Verdict = BLOCK: остановиться. Никакого кода. Ждать, пока пользователь разрешит конфликт (правка спек, эскалация, отказ от задачи).
Если Verdict = PROCEED: следующий ответ может содержать код. Секция ## Dry Run остаётся в ответе первой.
Append-only log. Независимо от Verdict, добавить запись о прогоне в specs/dry-run-log.md (создать файл, если отсутствует). Формат — один YAML-документ на запись через ----разделитель:
---
run: 2026-04-11T12:34:56Z
task_summary: "<одна строка — что делали>"
touched: [ART-002, ART-003, ENT-001, INV-001, SCN-001]
contradictions: 0
missing: 0
ambiguous: 0
verdict: PROCEED
Поля:
run — ISO 8601 timestamp UTCtask_summary — одна строка, ≤ 80 символовtouched — список затронутых IDcontradictions / missing / ambiguous — числа находокverdict — PROCEED или BLOCKЭтот лог append-only — никогда не редактируется. Его потом майнит /sdd:reflect для обнаружения повторяющихся блокеров и неоднозначных терминов.
memory/patterns.md, memory/patterns/**, specs/**specs/dry-run-log.md (append-only, после каждого прогона)Ambiguous terms.npx claudepluginhub kainsk/sdd --plugin sdd