fix(dsh): /approve и гейты резолвят change/план в worktree (#76) #82

Merged
aep merged 1 commits from feat/76-approve-resolve into main 2026-10-25 13:40:56 +03:00
Owner

Что

/approve и гейты A/B резолвили openspec/changes/<id>/ и docs/superpowers/plans/ только от cwd сессии. Из основного checkout change/план в связанном worktree не были видны — /approve design отвечал «missing: proposal.md, design.md …» при существующих файлах.

Как

Артефакты резолвятся по списку корней-кандидатов: корень репозитория сессии → worktree .claude/worktrees/*/ и .wt/*/ (только каталоги с .git), фолбэк на cwd. Порядок детерминированный.

  • gates.js: findRepoRoot, candidateRoots, findChangeRoot, isDir; checkPlanWrite/checkDispatch/checkSddWrite/resolvePlanFromSdd учитывают worktree.
  • approval.js: runApproval нормализует корень; approveDesign/approvePlan пишут approval.md в корень change.
  • spec.md: замена абзаца T3.8 на worktree-резолюцию + 3 scenario.

Верификация

  • bash dsh/tests/run.sh — 216/216
  • bash tests/run.sh — 640/0
  • openspec validate approval-gates --strict — valid

Rulings I made

  • Change в нескольких корнях → первый по порядку [корень сессии, .claude/worktrees/*, .wt/*].
  • План в нескольких корнях → отказ с перечислением (контракт «ровно один план» сохранён).
  • arguments.cwd диспатча игнорируется; план в worktree гейтится по approval его change.

Close: #76

## Что `/approve` и гейты A/B резолвили `openspec/changes/<id>/` и `docs/superpowers/plans/` только от cwd сессии. Из основного checkout change/план в связанном worktree не были видны — `/approve design` отвечал «missing: proposal.md, design.md …» при существующих файлах. ## Как Артефакты резолвятся по списку корней-кандидатов: корень репозитория сессии → worktree `.claude/worktrees/*/` и `.wt/*/` (только каталоги с `.git`), фолбэк на cwd. Порядок детерминированный. - `gates.js`: `findRepoRoot`, `candidateRoots`, `findChangeRoot`, `isDir`; `checkPlanWrite`/`checkDispatch`/`checkSddWrite`/`resolvePlanFromSdd` учитывают worktree. - `approval.js`: `runApproval` нормализует корень; `approveDesign`/`approvePlan` пишут `approval.md` в корень change. - `spec.md`: замена абзаца T3.8 на worktree-резолюцию + 3 scenario. ## Верификация - `bash dsh/tests/run.sh` — 216/216 - `bash tests/run.sh` — 640/0 - `openspec validate approval-gates --strict` — valid ## Rulings I made - Change в нескольких корнях → первый по порядку [корень сессии, `.claude/worktrees/*`, `.wt/*`]. - План в нескольких корнях → отказ с перечислением (контракт «ровно один план» сохранён). - `arguments.cwd` диспатча игнорируется; план в worktree гейтится по approval его change. Close: #76
aep added 1 commit 2026-10-25 13:18:20 +03:00
aep merged commit 148ca131a7 into main 2026-10-25 13:40:56 +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#82
No description provided.