DSH: технические гейты upstream-лупа — builder-check, /approve, гейты A/B/C (#59) #74

Merged
aep merged 10 commits from feat/59-loop-gates into main 2026-10-25 01:49:55 +03:00
Owner

Issue #59. Design: openspec/changes/enforce-upstream-loop/ (решения D-1…D-13; согласования отменены владельцем 25.10 — решения зафиксированы в «Decisions made without discussion»).

Что сделано

  • lib/gates.js: чистые decision-функции — approval.md io (design/plan секции, sha256 плана), гейт A (план пишется только при утверждённом дизайне; Spec-less/legacy DENY), гейт B (диспатчи subagent/subagent_fork/workflow и записи в .superpowers/sdd/<план>/** требуют plan-секцию с актуальным sha256; все план-ссылки проверяются), гейт C (approval.md пишется только /approve), bash-обход через harness_target.py targets.
  • command-approve.js: /approve design|plan — предпосылки (builder-check.md; ровно один план со Spec), подтверждение владельца через ctx.userQuestions, per-invocation repoRoot (T3.1 — реальный cordis-контракт).
  • index.js: гейты в guard-цепочке после хуков (BLOCKED [approval-gates]), approvalGates:true, /approve регистрируется по своему флагу.
  • sdd-скилл: проверка approval-маркера до первого диспатча; roles-заметка; спека approval-gates (28 сценариев); README/PORT.

Тесты

dsh/tests/run.sh 161/0; tests/run.sh 640/0; openspec validate --strict valid. Каждая задача — свежий ревьюер v4-pro + fix-loops; финальное ревью ветки: ready for merge.

Rulings I made (из ledger)

  • R-1: задачи последовательно. R-2: модели (flash — механика/доки, v4-pro — интеграция и ревью).
  • R-3: гейты не активны в исполняющей ветке (D-13) — без retro-утверждений.
  • R-4: write-гейт .superpowers/sdd и все план-ссылки обязательны (T1.1/T1.2).
  • R-5: пины T2.1/T2.2/T2.4 — в тест-батч Task 3.
  • R-6: /approve per-invocation repoRoot, регистрация по approvalGates, checkBashTargets (T3.1/T3.2/T3.7).
  • R-7: T4.1–T4.3 — только формулировки; content-based поведение гейтов принято.

Deferred (занесены в #70)

M-1 (workflow.args не сканируется гейтом B), M-2 (str_replace_editor view — ложный deny, инструмента нет в рантайме), T3.4 (deny-текст content-less правок), T4.4 (бюджет sdd-скилла 12155/12288 B).

Осталось владельцу (D-13)

Переустановить бандл и перезапустить DSH — гейты активны только в сессиях с новым бандлом.

Issue #59. Design: openspec/changes/enforce-upstream-loop/ (решения D-1…D-13; согласования отменены владельцем 25.10 — решения зафиксированы в «Decisions made without discussion»). ## Что сделано - lib/gates.js: чистые decision-функции — approval.md io (design/plan секции, sha256 плана), гейт A (план пишется только при утверждённом дизайне; Spec-less/legacy DENY), гейт B (диспатчи subagent/subagent_fork/workflow и записи в .superpowers/sdd/<план>/** требуют plan-секцию с актуальным sha256; все план-ссылки проверяются), гейт C (approval.md пишется только /approve), bash-обход через harness_target.py targets. - command-approve.js: /approve <id> design|plan — предпосылки (builder-check.md; ровно один план со Spec), подтверждение владельца через ctx.userQuestions, per-invocation repoRoot (T3.1 — реальный cordis-контракт). - index.js: гейты в guard-цепочке после хуков (BLOCKED [approval-gates]), approvalGates:true, /approve регистрируется по своему флагу. - sdd-скилл: проверка approval-маркера до первого диспатча; roles-заметка; спека approval-gates (28 сценариев); README/PORT. ## Тесты dsh/tests/run.sh 161/0; tests/run.sh 640/0; openspec validate --strict valid. Каждая задача — свежий ревьюер v4-pro + fix-loops; финальное ревью ветки: ready for merge. ## Rulings I made (из ledger) - R-1: задачи последовательно. R-2: модели (flash — механика/доки, v4-pro — интеграция и ревью). - R-3: гейты не активны в исполняющей ветке (D-13) — без retro-утверждений. - R-4: write-гейт .superpowers/sdd и все план-ссылки обязательны (T1.1/T1.2). - R-5: пины T2.1/T2.2/T2.4 — в тест-батч Task 3. - R-6: /approve per-invocation repoRoot, регистрация по approvalGates, checkBashTargets (T3.1/T3.2/T3.7). - R-7: T4.1–T4.3 — только формулировки; content-based поведение гейтов принято. ## Deferred (занесены в #70) M-1 (workflow.args не сканируется гейтом B), M-2 (str_replace_editor view — ложный deny, инструмента нет в рантайме), T3.4 (deny-текст content-less правок), T4.4 (бюджет sdd-скилла 12155/12288 B). ## Осталось владельцу (D-13) Переустановить бандл и перезапустить DSH — гейты активны только в сессиях с новым бандлом.
aep added 10 commits 2026-10-25 01:49:48 +03:00
aep merged commit 027dd09c8f into main 2026-10-25 01:49:55 +03:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: aep/claude-harness#74
No description provided.