Skip to content

execute: batch mode — run the backlog through one warm worktree, commit per plan, checkpoint gates #25

Description

@erkamdemirci

execute handles exactly one plan per invocation today, and each invocation provisions its own worktree. Executing a six-plan backlog means six dispatches babysat by the operator and six toolchain warm-ups, with the full done-criteria suite re-run per plan. Yet the skill already writes plans/README.md with a dependency-ordered queue — everything needed to run the backlog end-to-end is already on disk.

Related appetite: #15 (several plans in flight at once) and the economics half of #24.

Proposed design

execute all / execute <range> (e.g. execute 001-004): one shared batch worktree instead of a worktree per plan.

  • Setup, oncegit worktree add <path> -b advisor/batch-<slug> from the user's HEAD, provision it, then run the repo's full verification gate as a baseline. Red baseline → stop and report: pre-existing failures poison every subsequent review, and "restore the baseline" is the real plan Reword security audit guidance for defensive remediation #1.
  • Dispatch, per plan — executors run serially in the batch worktree in plans/README.md order (dependencies enforced), one commit per plan, commit SHA in the report. Plans whose Scope sections are pairwise disjoint may still fan out to parallel per-plan worktrees; any overlap forces serial.
  • Layered verification — so the expensive gate doesn't run twice per plan:
    • per plan: scope compliance, the plan's scoped done criteria (cheap by construction), full-diff read, test audit — as today;
    • at checkpoints: the repo's full gate every 3–5 approved plans, after any HIGH-risk plan, and always at batch end. On failure, bisect the per-plan commits since the last green checkpoint — that's what commit-per-plan is for.
  • Rollback — a BLOCK verdict rolls the batch worktree back (git reset --hard <last-good>) and continues with the next plan that doesn't depend on the blocked one. A dead executor (stale IN PROGRESS, dirty worktree) gets the same treatment before the next dispatch.
  • plan-template — Done criteria split into a Scoped layer (run on every execution) and a Full gate layer (owned by the dispatcher at checkpoints), sized to the plan's blast radius.

What this preserves

Every existing guarantee, verbatim. The advisor never edits code; executors edit only inside a disposable worktree; the user's checkout is never touched; merging stays the user's decision. This changes worktree count, not the isolation model.

PR to follow — happy to adjust the shape either way.

🤖 Generated with Claude Code

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions