4.4 KiB
Proposal: enforce-upstream-loop — технические гейты цикла
Issue: #59. Источники: сессия ce9187ca 24.10.2026 (модель пропустила builder-check и рационализировала пропуск; спека и план ушли владельцу одним пакетом), решение владельца 25.10.2026 «оба гейта сразу», согласования по этой фиче владельцем отменены (решения — в design.md).
Why
Луп brainstorm→design→builder-check→approve→plan→approve→sdd существует в superpowers 7.0.0 как инструкции. В DSH-сессии 24.10.2026 модель пропустила builder-check, предложила его «вхолостую» и сняла предложение; план был написан до того, как владелец утвердил дизайн. Инструкции не являются механизмом: нужен технический гейт, который нельзя рационализировать.
What Changes
- Артефакты:
openspec/changes/<id>/builder-check.md(отчёт свежего builder-check субагента) иopenspec/changes/<id>/approval.md(маркер утверждения, yaml-секцииdesign:иplan:сby/at). - Команда
/approve <change-id> design|planв бандле — единственный писательapproval.md:design— отказ, пока нетproposal.md+design.md+builder-check.md;plan— отказ, пока нет design-утверждения и файла плана вdocs/superpowers/plans/, чей**Spec:**указывает на этот change.
- Гейт A (вход): bundle-guard отклоняет Edit/Write/MultiEdit в
docs/superpowers/plans/**, если в содержимом есть строка**Spec:**со ссылкой на change без design-утверждения — план физически не создаётся до утверждения дизайна. «Уход к владельцу» закрывается цепочкой: approve дизайна требует builder-check; план требует approve дизайна; исполнение требует approve плана. - Гейт B (исполнение): bundle-guard отклоняет диспатчи
subagent/subagent_fork, чей промпт ссылается на план вdocs/superpowers/plans/или на.superpowers/sdd/<plan>/, еслиapproval.mdchange'а не содержитplan:— sdd не стартует без утверждённого плана. Причина отказа: «plan not approved; run/approve <change-id> plan». - Тексты:
dsh/skills/sdd/SKILL.md— шаг «проверь approval-маркер до первого диспатча, при BLOCKED не обходи»;roles/dev.md(DSH-заметка--roles) — builder-check обязателен, пропуск — только явное решение владельца.
Impact
- Affected:
dsh/bundle/(новаяlib/gates.js,command-approve.js, wiring вindex.js),dsh/skills/sdd/SKILL.md,dsh/tests/,dsh/install.sh(--roles-заметка), спека-дельта (новая capabilityapproval-gates),dsh/README.md/dsh/PORT.md. - Не трогаем: CC-сторону (хуки, роли, скрипты) — гейты живут только в DSH-бандле; bounded-задачи без change/плана не задеваются.
- Breaking: нет для существующих потоков с утверждёнными change/планами;
для неутверждённых — ожидаемый BLOCKED с подсказкой
/approve.
Non-goals
Свой UI апрува; переписывание sdd-протокола; гейт на сообщения модели (презентация дизайна владельцу не перехватывается — закрыта цепочкой артефактов); CC-сторона.
Открытые вопросы
Нет: решения по enforcement-точкам приняты (design.md, «Decisions made without discussion»), владелец согласования отменил до пробуждения.