woostack-execute
Execute approved work through one strict sequential controller. The controller is the source of
allocation, admission, ancestry, worktree, persistence, and delivery boundaries. Git, Graphite,
and canonical GitHub reads prove repository delivery; Linear, Plane, GitHub, or the local run manifest records the
approved contract and resume evidence but never proves source-control state.
Commands
/woostack-execute --project <exact Linear or GitHub Project URL-or-UUID>
/woostack-execute <approved plan> --issue <exact canonical Linear/GitHub issue or Plane work-item reference>
/woostack-execute --run <exact-run-id> [--recheck]
--project, --issue, and --run are mutually exclusive; exactly one is required. --recheck is
valid only with --run. Execute accepts either exact provider resources (--project/--issue) or an
exact local run manifest (--run), with no implicit or fuzzy discovery. When artifacts.provider: "local" or
omitted, direct provider execution via --project or --issue fails closed before any provider access.
When artifacts.provider: "linear", --project accepts an exact Linear project and --issue accepts an
exact direct Linear issue. When artifacts.provider: "plane", --project is not an executable scope and
is rejected before any mutation; --issue accepts an exact Plane work-item URL or readable ID (such as
ENG-42), resolving and independently reading back its native UUID in the exact configured Plane
project. When artifacts.provider: "github", --project accepts an exact canonical GitHub Project URL and
--issue accepts an exact canonical parentless repository issue URL (https://github.com/owner/repo/issues/<N>).
Every cycle admits one task or direct issue/work item, one isolated worktree, and one PR. Execute does not perform
The --project form is the resumable handoff from Linear or GitHub Build/Fix when mirroring
is enabled; --issue is the handoff for an exact Linear issue, Plane work item, or GitHub issue (top-level specification item or
individual child/increment); --run is the resumable handoff from a local run manifest. All forms are sufficient without chat
memory or fuzzy plan discovery.
Admission
Provider admission: one exact resource
In project mode (--project), require artifacts.provider to be "linear" or "github". For Linear, require one
exact Linear project supplied by URL or UUID. For GitHub, require one exact canonical Project URL
(https://github.com/orgs/<owner>/projects/<N> or /users/<owner>/projects/<N>). Reconstruct authority from
fresh official provider reads of that project's complete specification (managed README section for GitHub), current
direct parentless repository issue graph (parent = null), direct Project item membership, native dependency
relations ($N-1$ strict predecessor blocks successor edges), and canonical repository association. Plane does
not accept --project as an executable scope; the configured project may contain multiple specification items
and cannot be executed as a whole.
In issue mode (--issue):
- Linear issue mode: require one exact direct issue (
parent = null) and the same complete reads for
its owning project. Issue mode executes only that exact issue and never advances siblings.
- Plane work-item mode: require one exact work-item reference (
--issue), resolving to its native
UUID within artifacts.plane.project under the configured instance baseUrl and workspace.
Plane admission admits either:
- Top-level specification work item (
parent = null): titled [Build] <goal>, [Fix] <goal>, or
[Plan] <goal>, with its full specification in its description. Execute discovers and admits its
complete, exact single-parent child graph (parent = <spec-item-UUID>) and strict sequential sibling
blocking relations (blocks: ordinal 1 blocks ordinal 2 ... ordinal N). Execution progresses
strictly through the unfinished children of this specification item in ordinal order.
- Exact child increment work item (
parent = <spec-item-UUID>): an exact child of a valid specification
work item. Issue mode executes only this exact child work item and never advances siblings.
- GitHub issue mode: require one exact canonical repository issue URL (
https://github.com/owner/repo/issues/<N>,
parent = null) and the same complete reads for its owning Project. Issue mode executes only that exact issue
and never advances siblings.
Never infer either resource or its records from chat memory, local files, titles, branch names, recent
activity, or prior transcript. Reject repository projects (--project), cross-parent relations (relations
between children of different specification parents or foreign items), missing, duplicate, ambiguous,
unparented children, foreign-scope, and malformed graphs before repository or provider mutation. Statuses,
labels, assignments, and comments do not authorize execution.
Local run admission: exact manifest and plain artifacts
In local run mode (--run), require one exact run identifier corresponding only to
<repo-root>/.woostack/tmp/runs/<exact-run-id>/. Exact path only; fuzzy discovery, search, pattern
matching, directory traversal, or chat memory is rejected.
Use the shared owner-only local run store
helper for every read and CAS update; its permission, no-follow, locking, containment, and
independent-readback checks are required before using run data.
- Validate
manifestVersion: 1, manifestRevision, workflow, runId matching <exact-run-id>,
repoRoot matching the current canonical repository root, status, planningParentBranch,
planningParentTip, empty draft.unresolvedQuestions, the complete stable-task/dependency graph,
and taskExecutions. Reject status: "abandoned"; status: "completed" is an independently
verified no-work result.
- Pre-change runs whose manifests depend on removed approval receipts or fingerprints fail closed on
admission, directing the user to regenerate plain artifacts under the owning Build/Fix workflow.
Base-change detection and user choice
Before any worktree or source mutation in local run mode:
- Read
planningParentBranch and planningParentTip from the run manifest, and observe the current
integration parent tip from fresh Git/Graphite/GitHub evidence.
- If the observed parent tip equals
planningParentTip, proceed directly to task execution.
- If the observed parent tip differs from
planningParentTip, report the old and current parent
evidence plus any concrete conflict or plan risk, then ask the user before source mutation:
Continue: executes against the current admitted parent under existing branch/worktree safeguards.
Revise spec/plan: returns to the owning Build/Fix workflow under the shared
revision and retention contract.
Stop: makes no repository mutation.
When --recheck is provided with --run, invoke bounded woostack-harden
against the current trunk / integration parent tip before execution. If discrepancies are found, report
them and offer Continue, Revise spec/plan, or Stop. When --recheck encounters an already-delivered
task whose verified existing open PR lacks the exact mapped GitHub issue association, recovery reuses the
recorded delivery checkpoint and verified open PR: verify that the PR is open and matches the recorded
checkpoint identity (prUrl, prHead/branch, prBase, commitSha), repair and read back exactly one
matching Resolves <canonical issue URL> line, and stop before creating any worktree, branch, commit, or PR,
without mutating issue lifecycle. If the PR is closed or merged, or if checkpoint identity mismatches,
recovery rejects mutation with zero changes.
Repository ancestry admission
Before any worktree or source mutation in all modes, read the approved stable parent-branch intent and
last admitted tip, then apply the shared
repository ancestry contract
to fresh Git/Graphite/GitHub evidence. Execute carries the resulting current admitted tip and any
retained start/head into worktree discovery; it does not duplicate the shared decision matrix.
--project is Linear or GitHub project mode (repeatedly running cycles for the lowest unfinished direct issue).
--issue with a top-level Plane specification work item is Plane specification mode (repeatedly cycling
its admitted unfinished children in strict ordinal order until all children complete or a stop marker is read).
--issue with an exact Linear direct issue, exact Plane child work item, or exact GitHub repository issue is
exact issue mode (performing one cycle for the selected item only and never advancing siblings). --run is
local run mode (repeatedly running cycles for each unfinished task in the approved manifest). All modes share the same repository ancestry
admission and worker delivery loop.
Selected-provider lifecycle gate
Before provider access, load the shared
active Execute synchronization contract
and only the selected Linear,
Plane, or
GitHub profile.
Before any worktree or source mutation in project or issue mode, resolve and independently read back
the profile-defined lifecycle mappings and allowable native categories/groups in exact provider scope.
Apply only transitions supported by that profile. Keep project-lifecycle, specification parent lifecycle,
direct-resource lifecycle, delivery-checkpoint, and resume receipts distinct.
For Plane, resolve configured artifacts.plane.issueStates (executing, inReview, done, blocked) by exact native
UUID or exact case-sensitive name within canonical baseUrl/workspace/project scope; reject missing, ambiguous,
duplicate, foreign-scope, or group-mismatched states before mutation. Parent lifecycle aggregates its children:
parent executing while active work is underway, parent blocked when any child blocks, and parent done only
when all children complete. The configured Plane project status is never mutated, synthesized, or gated.
For GitHub, resolve configured artifacts.github.statusField (default "Status") and five options (planned,
executing, inReview, done, blocked) by exact case-sensitive name in exact owner/Project scope; reject missing,
ambiguous, duplicate, foreign-scope, parented issues (parent != null), or closed issues in nonterminal states before
issue only at done. Finished predicate requires item status done, issue state CLOSED, and complete delivery
checkpoint read-back. Recorded blockers set blocked without closing. If an increment is observed with item status
done and a complete delivery checkpoint but the issue remains OPEN, execute close-only recovery: perform and independently read back issue closure
without rerunning repository work or rewinding lifecycle state (if inReview with complete delivery checkpoint, transition and read back item done before close). Completing all increments leaves the Project open;
only explicit provider-backed closure closes the admitted Project after fresh read-back.
An exact current mapping is an idempotent no-op. A terminal conflict, missing/ambiguous/foreign
mapping, drift, timeout, partial output, unsupported transition, or failed/unknown read-back blocks
without reopening or continuing. Never synthesize a project transition from a direct-resource state.
Local run mode bypasses provider lifecycle synchronization.
Execution controller
- Read the complete approved task or direct-resource graph and classify every entry by immutable
positive ordinal. In provider mode, resolve every lifecycle mapping required by the selected
profile in exact scope and independently read back its native identity, name, and category/group.
- Select the lowest-ordinal unfinished entry:
- In provider mode, apply the selected profile's finished predicate to independently read lifecycle
state plus the complete delivery checkpoint. Never select by activity, assignment, title, or
unverified status alone.
- In local run mode, a task is unfinished unless its
taskExecutions[stableTaskKey].status is
delivered and its complete delivery checkpoint is independently read back.
- For a non-root task/issue, read its immediate predecessor's complete delivery checkpoint, canonical
parent branch, and current head (reading available checks for observation only); for the first task/issue,
read the canonical integration parent branch and last admitted tip. Apply the shared repository
advancement contract and carry its admitted result into worktree discovery. No other task or issue is
admitted in the same cycle.
- In provider mode, apply the selected profile's supported pre-execution lifecycle transition and
independently read it back before repository work (for Linear, project start synchronization and issue
transition to executing; for Plane, transitioning the selected work item and its parent specification
work item to
artifacts.plane.issueStates.executing without project status mutation; for GitHub,
transitioning the selected Project item to executing status option and independently reading back item
status without project mutation). Apply any supported project synchronization separately and preserve
distinct project, direct-resource, and checkpoint receipts. Unsupported project lifecycle is a required
no-op. Local run mode bypasses this provider gate.
- In local run mode, before worktree or source mutation, CAS-update
taskExecutions[stableTaskKey] from pending/blocked to active with the exact intended task,
worktree, branch, parent, and start tip through the shared run-store helper; require its
independent read-back. A resumed active task must match that evidence
exactly. In every mode, create or resume exactly one deterministic isolated worktree owned by
this run. Sequential within each run; distinct run IDs may execute concurrently in isolated
worktrees only when paths and responsibility surfaces do not collide. Implement inline by
default or delegate useful isolated work under the canonical
implementation driver.
- Run one focused verification and real changed-path smoke scenario, then obtain an independent
bounded spec-compliance result under the driver's validation gate. When validation produces
screenshots in Linear provider mode, apply Controller-owned screenshot evidence
before commit. For Plane and GitHub provider modes, screenshot attachment and comment evidence are Linear-only and
explicitly skipped; continue repository delivery.
- Commit and PR submission:
- In Linear provider mode, invoke
woostack-commit with --issue and the
exact selected Linear issue to commit and submit exactly one Graphite PR. Independently read back branch,
commit, PR URL/head/base, the exact Resolves <issue identifier> body line, verification receipt,
and Graphite parent.
- In Plane provider mode, invoke
woostack-commit without --issue
(Commit does not support Plane in this increment; no Resolves line). Independently read back branch,
commit, PR URL/head/base, verification receipt, and Graphite parent, and persist/read back the PR delivery
checkpoint through Execute's Plane work-item path.
- In GitHub provider mode, invoke
woostack-commit with --issue and the
exact selected canonical issue URL to commit and submit exactly one Graphite PR. Independently read back branch,
commit, PR URL/head/base, the exact Resolves <issue URL> body line, verification receipt,
and Graphite parent.
- In local run mode:
- If
mirror.provider is "github" and stableTaskMappings[stableTaskKey] contains an exact bound
canonical repository issue URL (https://github.com/<owner>/<repo>/issues/<N>), verify the canonical
issue live against the admitted repository. If verified, invoke woostack-commit
with --issue <canonical issue URL> regardless of aggregate mirror status. Independently read back
branch, commit, PR URL/head/base, verification receipt, Graphite parent, and exactly one matching
Resolves <canonical issue URL> body line when association succeeds. If pre-Commit live issue verification
fails (for example, missing, foreign-scope, or parented issue), warn, record the mirror failure, and continue
repository delivery by invoking woostack-commit without --issue and without
blocking local checkpoint persistence. If post-submission association or read-back fails after PR creation,
warn, record the mirror failure, rediscover and reuse the verified branch, commit, PR, and Graphite parent,
and persist the local delivery checkpoint without replaying Commit or creating duplicate objects; --recheck
remains available to repair the missing association on the existing open PR later.
- For local runs with provider
local, an omitted or unmapped task mapping, or a non-GitHub provider
(Linear or Plane), invoke woostack-commit without --issue and
without a Resolves line. Independently read back branch, commit, PR URL/head/base, verification
receipt, and Graphite parent.
- Persist the complete delivery checkpoint:
- In Linear provider mode, persist the delivery checkpoint to Linear and independently read back every field.
Only after that full read-back succeeds, resolve and independently read back the configured inReview mapping
(
artifacts.linear.issueStates.inReview) and transition the issue from the resolved executing mapping to it,
or read back an idempotent no-op when executing and inReview share one native status.
- In Plane provider mode, persist the delivery checkpoint to Plane and independently read back every field.
Only after that full read-back succeeds, resolve and independently read back the configured inReview mapping
(
artifacts.plane.issueStates.inReview) by exact native UUID or exact case-sensitive name with group started,
and transition the work item from the resolved executing mapping to it, reading back its native state ID, name,
and group, or read back an idempotent no-op when executing and inReview share one native status. If all child
work items of the parent specification work item are now finished, transition the parent specification work
item to artifacts.plane.issueStates.done and independently read back native ID, name, and group.
- In GitHub provider mode, persist the delivery checkpoint to GitHub and independently read back every field.
Only after that full read-back succeeds, transition the Project item to the configured
inReview status option
(or read back an idempotent no-op) and independently read back item status. On verified completion of an increment,
transition the Project item to done, close the repository issue (issueClose), and independently read back both.
Completing all increments leaves the Project open; only explicit provider closure closes the Project.
- In local run mode, CAS-update
taskExecutions[stableTaskKey] from active to delivered only
with the complete delivery checkpoint ({ stableTaskKey, ordinal, branch, commitSha, prUrl, prHead, prBase, graphiteParent, verificationReceipt, deliveredAt }). Use the shared run-store
helper and verify every field in its independent read-back before worktree teardown or
advancing to the next sibling.
- If Linear, Plane, or GitHub mirror writes are configured in local run mode, they are best effort only: failure
emits a warning and never invalidates, blocks, or overwrites the authoritative local checkpoint.
Neither transition result can authorize teardown, resume, or sibling progression without the completed
checkpoint read-back. The checkpoint must distinguish active from delivered work. Remove the worktree
only after all required evidence is present and the exact worktree is clean.
- Re-read the project/manifest, then continue with the next lowest unfinished ordinal unless a
verified stop marker is encountered. A stop marker pauses before the next task and leaves the
project/run open with exact resume evidence.
A successful cycle has no orphan worktree. At a failed, blocked, interrupted, colliding, or unknown
boundary, retain the worktree and record the first unknown boundary, branch, commit/PR if any, dirty state,
Graphite parent, verification receipt, delivery read-back, and exact safe resume action.
In Plane provider mode, transition and independently read back the selected work item and its parent
specification work item to the configured artifacts.plane.issueStates.blocked mapping (resolved by
exact native UUID or exact case-sensitive name with group started, reading back its native state ID,
name, and group) with recovery evidence before a failed Plane cycle can resume.
In GitHub provider mode, transition and independently read back the selected Project item to the configured
artifacts.github.projectStatuses.blocked mapping without closing the issue, retaining recovery evidence.
In local run mode, use the shared run-store helper to CAS-update the active task to blocked with
that recovery evidence and verify its independent read-back. Retain the worktree. Resume only after fresh independent evidence proves the
same run and state and the shared repository ancestry contract admits that evidence. Rediscover existing commits
or PRs before retrying and never create a duplicate.
Linear provider-mode failures retain the same recovery evidence at their canonical project/issue boundary.
In exact issue mode (Linear direct issue, Plane exact child work item, or GitHub repository issue), Execute performs exactly the selected
issue or work item's cycle once: admit its matching project context, prove its predecessor's canonical parent
branch and compatible current head (or the integration parent branch for a root) under the repository ancestry
contract, apply the active project status gate for Linear (including the selected issue's transition to the
resolved artifacts.linear.issueStates.executing mapping when all direct issues are Backlog/Todo) or transition
the selected Plane child work item and its parent specification work item to artifacts.plane.issueStates.executing
(resolving configured issueStates by exact native UUID or case-sensitive name in exact scope, validating allowable
group semantics, and reading back native state ID, name, and group) and read back without project mutation, then
implement the selected increment in its isolated worktree under the implementation driver.
In Plane specification mode, Execute repeatedly runs cycles for the lowest unfinished child work item in strict
ordinal order, advancing to the next unfinished child after each verified delivery checkpoint, and transitions the
parent specification work item to artifacts.plane.issueStates.done only when all admitted children complete.
For Linear, the gate's project-status receipt stays separate from issue lifecycle and resume-checkpoint
evidence. Verify and validate the active issue/work item, submit and read back one PR (with --issue for Linear and GitHub;
without --issue for Plane), then persist and independently read back every field of the complete delivery checkpoint.
Only after that full read-back succeeds, move and read back the configured inReview mapping
(artifacts.linear.issueStates.inReview for Linear; artifacts.plane.issueStates.inReview for Plane). If executing and
inReview resolve to one native status, independently read the idempotent no-op instead of issuing a second mutation.
The lifecycle result authorizes removal of the clean worktree only with the completed checkpoint read-back and all
other required evidence. Exact issue mode never advances siblings, even when the selected issue succeeds. Failures
retain exact recovery evidence (transitioning both child work item and parent specification work item to
artifacts.plane.issueStates.blocked in Plane provider mode).
The implementation driver owns inline/delegated selection, host
routing, exclusive writable ownership, complete worker packets, handback, and independent
spec-validation mechanics. Both implementation paths return to the same controller delivery gates.
The controller alone owns screenshot inspection, safe selection, attachment upload, inline comment,
and fresh comment/image read-back.
Lifecycle and repository delivery
For each admitted task or issue, lifecycle progression moves only through unstarted/Backlog/Todo →
executing → complete/inReview, with an independent read-back after each transition or an independently
read idempotent no-op when mappings share one native status. Persist observed branch, commit, PR,
verification, and the full delivery checkpoint, then independently read back every persisted checkpoint
field before the completion transition or idempotent no-op can authorize teardown, resume, or sibling
progression. Canonical state alone never proves delivery. Do not change the specification, task graph,
assignment, or ownership.
Successful PR submission requires all of: exact branch and commit, Graphite parent/read-back, one
canonical PR read-back with matching head/base, verification receipt, delivery checkpoint read-back,
and a clean exact worktree. Only then may the worktree be removed. Execute never reviews, merges,
marks product acceptance, or claims merged state.
Delivered, complete, finish, and execute stop at that verified open-PR boundary. They never
mean ready-for-review transition, auto-merge, merge-queue admission, retargeting for merge, or merge.
No user wording overrides this capability boundary: an explicit merge request is a conflict to
report before stopping, not authority to mutate the PR. Never run gh pr ready, gh pr merge, a
merge-queue mutation, or an equivalent Graphite/GitHub operation. A claim that the user requested
one of those operations must identify the exact current user message; absent provenance fails
closed, and proven wording still cannot override this no-merge boundary.
Stop, interruption, and handback
A stop marker is an independently read control record that pauses selection; it is not an execution
failure. Interruptions, blocked decisions, collisions, and unknown provider or source-control
outcomes preserve the current project/run and worktree. Handback reports the exact project/run/issue
state, selected ordinal, predecessor/Graphite parent, worktree/branch, changed paths,
verification/validator results, delivery and Git evidence, known PR, first uncertain boundary, and
the next safe action. A later run resumes from independent evidence, not chat memory, local plan
files, branch names, activity, or duplicate submissions.
1---2name: woostack-execute3description: Execute one approved Linear, Plane, or GitHub project increment, one exact Linear/GitHub issue or Plane work item, or an approved local run manifest as a resumable sequential Graphite PR workflow. Never reviews or merges.4---56# woostack-execute78Execute approved work through one strict sequential controller. The controller is the source of9allocation, admission, ancestry, worktree, persistence, and delivery boundaries. Git, Graphite,10and canonical GitHub reads prove repository delivery; Linear, Plane, GitHub, or the local run manifest records the11approved contract and resume evidence but never proves source-control state.1213## Commands1415```text16/woostack-execute --project <exact Linear or GitHub Project URL-or-UUID>17/woostack-execute <approved plan> --issue <exact canonical Linear/GitHub issue or Plane work-item reference>18/woostack-execute --run <exact-run-id> [--recheck]19```2021`--project`, `--issue`, and `--run` are mutually exclusive; exactly one is required. `--recheck` is22valid only with `--run`. Execute accepts either exact provider resources (`--project`/`--issue`) or an23exact local run manifest (`--run`), with no implicit or fuzzy discovery. When `artifacts.provider: "local"` or24omitted, direct provider execution via `--project` or `--issue` fails closed before any provider access.25When `artifacts.provider: "linear"`, `--project` accepts an exact Linear project and `--issue` accepts an26exact direct Linear issue. When `artifacts.provider: "plane"`, `--project` is not an executable scope and27is rejected before any mutation; `--issue` accepts an exact Plane work-item URL or readable ID (such as28`ENG-42`), resolving and independently reading back its native UUID in the exact configured Plane29project. When `artifacts.provider: "github"`, `--project` accepts an exact canonical GitHub Project URL and30`--issue` accepts an exact canonical parentless repository issue URL (`https://github.com/owner/repo/issues/<N>`).31Every cycle admits one task or direct issue/work item, one isolated worktree, and one PR. Execute does not perform32The `--project` form is the resumable handoff from Linear or GitHub Build/Fix when mirroring33is enabled; `--issue` is the handoff for an exact Linear issue, Plane work item, or GitHub issue (top-level specification item or34individual child/increment); `--run` is the resumable handoff from a local run manifest. All forms are sufficient without chat35memory or fuzzy plan discovery.36## Admission3738### Provider admission: one exact resource3940In project mode (`--project`), require `artifacts.provider` to be `"linear"` or `"github"`. For Linear, require one41exact Linear project supplied by URL or UUID. For GitHub, require one exact canonical Project URL42(`https://github.com/orgs/<owner>/projects/<N>` or `/users/<owner>/projects/<N>`). Reconstruct authority from43fresh official provider reads of that project's complete specification (managed README section for GitHub), current44direct parentless repository issue graph (`parent = null`), direct Project item membership, native dependency45relations ($N-1$ strict predecessor blocks successor edges), and canonical repository association. Plane does46not accept `--project` as an executable scope; the configured project may contain multiple specification items47and cannot be executed as a whole.4849In issue mode (`--issue`):50511. **Linear issue mode:** require one exact direct issue (`parent = null`) and the same complete reads for52 its owning project. Issue mode executes only that exact issue and never advances siblings.532. **Plane work-item mode:** require one exact work-item reference (`--issue`), resolving to its native54 UUID within `artifacts.plane.project` under the configured instance `baseUrl` and `workspace`.55 Plane admission admits either:56 - **Top-level specification work item (`parent = null`):** titled `[Build] <goal>`, `[Fix] <goal>`, or57 `[Plan] <goal>`, with its full specification in its description. Execute discovers and admits its58 complete, exact single-parent child graph (`parent = <spec-item-UUID>`) and strict sequential sibling59 blocking relations (`blocks`: `ordinal 1` blocks `ordinal 2` ... `ordinal N`). Execution progresses60 strictly through the unfinished children of this specification item in ordinal order.61 - **Exact child increment work item (`parent = <spec-item-UUID>`):** an exact child of a valid specification62 work item. Issue mode executes only this exact child work item and never advances siblings.633. **GitHub issue mode:** require one exact canonical repository issue URL (`https://github.com/owner/repo/issues/<N>`,64 `parent = null`) and the same complete reads for its owning Project. Issue mode executes only that exact issue65 and never advances siblings.6667Never infer either resource or its records from chat memory, local files, titles, branch names, recent68activity, or prior transcript. Reject repository projects (`--project`), cross-parent relations (relations69between children of different specification parents or foreign items), missing, duplicate, ambiguous,70unparented children, foreign-scope, and malformed graphs before repository or provider mutation. Statuses,71labels, assignments, and comments do not authorize execution.72### Local run admission: exact manifest and plain artifacts7374In local run mode (`--run`), require one exact run identifier corresponding only to75`<repo-root>/.woostack/tmp/runs/<exact-run-id>/`. Exact path only; fuzzy discovery, search, pattern76matching, directory traversal, or chat memory is rejected.7778Use the shared [owner-only local run store](../woostack-init/references/artifact-backends.md#owner-only-local-run-store)79helper for every read and CAS update; its permission, no-follow, locking, containment, and80independent-readback checks are required before using run data.81821. Validate `manifestVersion: 1`, `manifestRevision`, `workflow`, `runId` matching `<exact-run-id>`,83 `repoRoot` matching the current canonical repository root, `status`, `planningParentBranch`,84 `planningParentTip`, empty `draft.unresolvedQuestions`, the complete stable-task/dependency graph,85 and `taskExecutions`. Reject `status: "abandoned"`; `status: "completed"` is an independently86 verified no-work result.872. Pre-change runs whose manifests depend on removed approval receipts or fingerprints fail closed on88 admission, directing the user to regenerate plain artifacts under the owning Build/Fix workflow.8990### Base-change detection and user choice9192Before any worktree or source mutation in local run mode:93941. Read `planningParentBranch` and `planningParentTip` from the run manifest, and observe the current95 integration parent tip from fresh Git/Graphite/GitHub evidence.962. If the observed parent tip equals `planningParentTip`, proceed directly to task execution.973. If the observed parent tip differs from `planningParentTip`, report the old and current parent98 evidence plus any concrete conflict or plan risk, then ask the user before source mutation:99 - **`Continue`**: executes against the current admitted parent under existing branch/worktree safeguards.100 - **`Revise spec/plan`**: returns to the owning Build/Fix workflow under the shared101 [revision and retention contract](../woostack-init/references/artifact-backends.md#repository-ancestry-and-base-change-detection).102 - **`Stop`**: makes no repository mutation.103104When `--recheck` is provided with `--run`, invoke bounded [`woostack-harden`](../woostack-harden/SKILL.md)105against the current trunk / integration parent tip before execution. If discrepancies are found, report106them and offer `Continue`, `Revise spec/plan`, or `Stop`. When `--recheck` encounters an already-delivered107task whose verified existing open PR lacks the exact mapped GitHub issue association, recovery reuses the108recorded delivery checkpoint and verified open PR: verify that the PR is open and matches the recorded109checkpoint identity (`prUrl`, `prHead`/`branch`, `prBase`, `commitSha`), repair and read back exactly one110matching `Resolves <canonical issue URL>` line, and stop before creating any worktree, branch, commit, or PR,111without mutating issue lifecycle. If the PR is closed or merged, or if checkpoint identity mismatches,112recovery rejects mutation with zero changes.113114### Repository ancestry admission115116Before any worktree or source mutation in all modes, read the approved stable parent-branch intent and117last admitted tip, then apply the shared118[repository ancestry contract](../woostack-init/references/artifact-backends.md#repository-ancestry-and-base-change-detection)119to fresh Git/Graphite/GitHub evidence. Execute carries the resulting current admitted tip and any120retained start/head into worktree discovery; it does not duplicate the shared decision matrix.121122`--project` is **Linear or GitHub project mode** (repeatedly running cycles for the lowest unfinished direct issue).123`--issue` with a top-level Plane specification work item is **Plane specification mode** (repeatedly cycling124its admitted unfinished children in strict ordinal order until all children complete or a stop marker is read).125`--issue` with an exact Linear direct issue, exact Plane child work item, or exact GitHub repository issue is126**exact issue mode** (performing one cycle for the selected item only and never advancing siblings). `--run` is127**local run mode** (repeatedly running cycles for each unfinished task in the approved manifest). All modes share the same repository ancestry128admission and worker delivery loop.129130### Selected-provider lifecycle gate131132Before provider access, load the shared133[active Execute synchronization contract](../woostack-init/references/artifact-backends.md#active-execute-project-start-synchronization)134and only the selected [Linear](../woostack-init/references/artifact-providers/linear.md),135[Plane](../woostack-init/references/artifact-providers/plane.md), or136[GitHub](../woostack-init/references/artifact-providers/github.md) profile.137138Before any worktree or source mutation in project or issue mode, resolve and independently read back139the profile-defined lifecycle mappings and allowable native categories/groups in exact provider scope.140Apply only transitions supported by that profile. Keep project-lifecycle, specification parent lifecycle,141direct-resource lifecycle, delivery-checkpoint, and resume receipts distinct.142143For Plane, resolve configured `artifacts.plane.issueStates` (executing, inReview, done, blocked) by exact native144UUID or exact case-sensitive name within canonical baseUrl/workspace/project scope; reject missing, ambiguous,145duplicate, foreign-scope, or group-mismatched states before mutation. Parent lifecycle aggregates its children:146parent `executing` while active work is underway, parent `blocked` when any child blocks, and parent `done` only147when all children complete. The configured Plane project status is never mutated, synthesized, or gated.148149For GitHub, resolve configured `artifacts.github.statusField` (default `"Status"`) and five options (`planned`,150`executing`, `inReview`, `done`, `blocked`) by exact case-sensitive name in exact owner/Project scope; reject missing,151ambiguous, duplicate, foreign-scope, parented issues (`parent != null`), or closed issues in nonterminal states before152issue only at `done`. Finished predicate requires item status `done`, issue state `CLOSED`, and complete delivery153checkpoint read-back. Recorded blockers set `blocked` without closing. If an increment is observed with item status154`done` and a complete delivery checkpoint but the issue remains `OPEN`, execute close-only recovery: perform and independently read back issue closure155without rerunning repository work or rewinding lifecycle state (if inReview with complete delivery checkpoint, transition and read back item `done` before close). Completing all increments leaves the Project open;156only explicit provider-backed closure closes the admitted Project after fresh read-back.157158An exact current mapping is an idempotent no-op. A terminal conflict, missing/ambiguous/foreign159mapping, drift, timeout, partial output, unsupported transition, or failed/unknown read-back blocks160without reopening or continuing. Never synthesize a project transition from a direct-resource state.161Local run mode bypasses provider lifecycle synchronization.162## Execution controller1631641. Read the complete approved task or direct-resource graph and classify every entry by immutable165 positive ordinal. In provider mode, resolve every lifecycle mapping required by the selected166 profile in exact scope and independently read back its native identity, name, and category/group.1672. Select the lowest-ordinal unfinished entry:168 - In provider mode, apply the selected profile's finished predicate to independently read lifecycle169 state plus the complete delivery checkpoint. Never select by activity, assignment, title, or170 unverified status alone.171 - In local run mode, a task is unfinished unless its `taskExecutions[stableTaskKey].status` is172 `delivered` and its complete delivery checkpoint is independently read back.1733. For a non-root task/issue, read its immediate predecessor's complete delivery checkpoint, canonical174 parent branch, and current head (reading available checks for observation only); for the first task/issue,175 read the canonical integration parent branch and last admitted tip. Apply the shared repository176 advancement contract and carry its admitted result into worktree discovery. No other task or issue is177 admitted in the same cycle.1784. In provider mode, apply the selected profile's supported pre-execution lifecycle transition and179 independently read it back before repository work (for Linear, project start synchronization and issue180 transition to executing; for Plane, transitioning the selected work item and its parent specification181 work item to `artifacts.plane.issueStates.executing` without project status mutation; for GitHub,182 transitioning the selected Project item to `executing` status option and independently reading back item183 status without project mutation). Apply any supported project synchronization separately and preserve184 distinct project, direct-resource, and checkpoint receipts. Unsupported project lifecycle is a required185 no-op. Local run mode bypasses this provider gate.1865. In local run mode, before worktree or source mutation, CAS-update187 `taskExecutions[stableTaskKey]` from `pending`/`blocked` to `active` with the exact intended task,188 worktree, branch, parent, and start tip through the shared run-store helper; require its189 independent read-back. A resumed `active` task must match that evidence190 exactly. In every mode, create or resume exactly one deterministic isolated worktree owned by191 this run. Sequential within each run; distinct run IDs may execute concurrently in isolated192 worktrees only when paths and responsibility surfaces do not collide. Implement inline by193 default or delegate useful isolated work under the canonical194 [implementation driver](references/subagent-driver.md).1956. Run one focused verification and real changed-path smoke scenario, then obtain an independent196 bounded spec-compliance result under the driver's [validation gate](references/subagent-driver.md#independent-spec-validation). When validation produces197 screenshots in Linear provider mode, apply [Controller-owned screenshot evidence](references/controller.md#controller-owned-screenshot-evidence)198 before commit. For Plane and GitHub provider modes, screenshot attachment and comment evidence are Linear-only and199 explicitly skipped; continue repository delivery.2007. Commit and PR submission:201 - In Linear provider mode, invoke [`woostack-commit`](../woostack-commit/SKILL.md) with `--issue` and the202 exact selected Linear issue to commit and submit exactly one Graphite PR. Independently read back branch,203 commit, PR URL/head/base, the exact `Resolves <issue identifier>` body line, verification receipt,204 and Graphite parent.205 - In Plane provider mode, invoke [`woostack-commit`](../woostack-commit/SKILL.md) without `--issue`206 (Commit does not support Plane in this increment; no `Resolves` line). Independently read back branch,207 commit, PR URL/head/base, verification receipt, and Graphite parent, and persist/read back the PR delivery208 checkpoint through Execute's Plane work-item path.209 - In GitHub provider mode, invoke [`woostack-commit`](../woostack-commit/SKILL.md) with `--issue` and the210 exact selected canonical issue URL to commit and submit exactly one Graphite PR. Independently read back branch,211 commit, PR URL/head/base, the exact `Resolves <issue URL>` body line, verification receipt,212 and Graphite parent.213 - In local run mode:214 - If `mirror.provider` is `"github"` and `stableTaskMappings[stableTaskKey]` contains an exact bound215 canonical repository issue URL (`https://github.com/<owner>/<repo>/issues/<N>`), verify the canonical216 issue live against the admitted repository. If verified, invoke [`woostack-commit`](../woostack-commit/SKILL.md)217 with `--issue <canonical issue URL>` regardless of aggregate mirror status. Independently read back218 branch, commit, PR URL/head/base, verification receipt, Graphite parent, and exactly one matching219 `Resolves <canonical issue URL>` body line when association succeeds. If pre-Commit live issue verification220 fails (for example, missing, foreign-scope, or parented issue), warn, record the mirror failure, and continue221 repository delivery by invoking [`woostack-commit`](../woostack-commit/SKILL.md) without `--issue` and without222 blocking local checkpoint persistence. If post-submission association or read-back fails after PR creation,223 warn, record the mirror failure, rediscover and reuse the verified branch, commit, PR, and Graphite parent,224 and persist the local delivery checkpoint without replaying Commit or creating duplicate objects; `--recheck`225 remains available to repair the missing association on the existing open PR later.226 - For local runs with provider `local`, an omitted or unmapped task mapping, or a non-GitHub provider227 (Linear or Plane), invoke [`woostack-commit`](../woostack-commit/SKILL.md) without `--issue` and228 without a `Resolves` line. Independently read back branch, commit, PR URL/head/base, verification229 receipt, and Graphite parent.2308. Persist the complete delivery checkpoint:231 - In Linear provider mode, persist the delivery checkpoint to Linear and independently read back every field.232 Only after that full read-back succeeds, resolve and independently read back the configured inReview mapping233 (`artifacts.linear.issueStates.inReview`) and transition the issue from the resolved executing mapping to it,234 or read back an idempotent no-op when executing and inReview share one native status.235 - In Plane provider mode, persist the delivery checkpoint to Plane and independently read back every field.236 Only after that full read-back succeeds, resolve and independently read back the configured inReview mapping237 (`artifacts.plane.issueStates.inReview`) by exact native UUID or exact case-sensitive name with group `started`,238 and transition the work item from the resolved executing mapping to it, reading back its native state ID, name,239 and group, or read back an idempotent no-op when executing and inReview share one native status. If all child240 work items of the parent specification work item are now finished, transition the parent specification work241 item to `artifacts.plane.issueStates.done` and independently read back native ID, name, and group.242 - In GitHub provider mode, persist the delivery checkpoint to GitHub and independently read back every field.243 Only after that full read-back succeeds, transition the Project item to the configured `inReview` status option244 (or read back an idempotent no-op) and independently read back item status. On verified completion of an increment,245 transition the Project item to `done`, close the repository issue (`issueClose`), and independently read back both.246 Completing all increments leaves the Project open; only explicit provider closure closes the Project.247 - In local run mode, CAS-update `taskExecutions[stableTaskKey]` from `active` to `delivered` only248 with the complete delivery checkpoint (`{ stableTaskKey, ordinal, branch, commitSha, prUrl,249 prHead, prBase, graphiteParent, verificationReceipt, deliveredAt }`). Use the shared run-store250 helper and verify every field in its independent read-back before worktree teardown or251 advancing to the next sibling.252 - If Linear, Plane, or GitHub mirror writes are configured in local run mode, they are best effort only: failure253 emits a warning and never invalidates, blocks, or overwrites the authoritative local checkpoint.254 Neither transition result can authorize teardown, resume, or sibling progression without the completed255 checkpoint read-back. The checkpoint must distinguish active from delivered work. Remove the worktree256 only after all required evidence is present and the exact worktree is clean.2579. Re-read the project/manifest, then continue with the next lowest unfinished ordinal unless a258 verified stop marker is encountered. A stop marker pauses before the next task and leaves the259 project/run open with exact resume evidence.260261A successful cycle has no orphan worktree. At a failed, blocked, interrupted, colliding, or unknown262boundary, retain the worktree and record the first unknown boundary, branch, commit/PR if any, dirty state,263Graphite parent, verification receipt, delivery read-back, and exact safe resume action.264In Plane provider mode, transition and independently read back the selected work item and its parent265specification work item to the configured `artifacts.plane.issueStates.blocked` mapping (resolved by266exact native UUID or exact case-sensitive name with group `started`, reading back its native state ID,267name, and group) with recovery evidence before a failed Plane cycle can resume.268In GitHub provider mode, transition and independently read back the selected Project item to the configured269`artifacts.github.projectStatuses.blocked` mapping without closing the issue, retaining recovery evidence.270In local run mode, use the shared run-store helper to CAS-update the active task to `blocked` with271that recovery evidence and verify its independent read-back. Retain the worktree. Resume only after fresh independent evidence proves the272same run and state and the shared repository ancestry contract admits that evidence. Rediscover existing commits273or PRs before retrying and never create a duplicate.274Linear provider-mode failures retain the same recovery evidence at their canonical project/issue boundary.275276In exact issue mode (Linear direct issue, Plane exact child work item, or GitHub repository issue), Execute performs exactly the selected277issue or work item's cycle once: admit its matching project context, prove its predecessor's canonical parent278branch and compatible current head (or the integration parent branch for a root) under the repository ancestry279contract, apply the active project status gate for Linear (including the selected issue's transition to the280resolved `artifacts.linear.issueStates.executing` mapping when all direct issues are `Backlog`/`Todo`) or transition281the selected Plane child work item and its parent specification work item to `artifacts.plane.issueStates.executing`282(resolving configured issueStates by exact native UUID or case-sensitive name in exact scope, validating allowable283group semantics, and reading back native state ID, name, and group) and read back without project mutation, then284implement the selected increment in its isolated worktree under the implementation driver.285286In Plane specification mode, Execute repeatedly runs cycles for the lowest unfinished child work item in strict287ordinal order, advancing to the next unfinished child after each verified delivery checkpoint, and transitions the288parent specification work item to `artifacts.plane.issueStates.done` only when all admitted children complete.289290For Linear, the gate's project-status receipt stays separate from issue lifecycle and resume-checkpoint291evidence. Verify and validate the active issue/work item, submit and read back one PR (with `--issue` for Linear and GitHub;292without `--issue` for Plane), then persist and independently read back every field of the complete delivery checkpoint.293Only after that full read-back succeeds, move and read back the configured inReview mapping294(`artifacts.linear.issueStates.inReview` for Linear; `artifacts.plane.issueStates.inReview` for Plane). If executing and295inReview resolve to one native status, independently read the idempotent no-op instead of issuing a second mutation.296The lifecycle result authorizes removal of the clean worktree only with the completed checkpoint read-back and all297other required evidence. Exact issue mode never advances siblings, even when the selected issue succeeds. Failures298retain exact recovery evidence (transitioning both child work item and parent specification work item to299`artifacts.plane.issueStates.blocked` in Plane provider mode).300301The [implementation driver](references/subagent-driver.md) owns inline/delegated selection, host302routing, exclusive writable ownership, complete worker packets, handback, and independent303spec-validation mechanics. Both implementation paths return to the same controller delivery gates.304The controller alone owns screenshot inspection, safe selection, attachment upload, inline comment,305and fresh comment/image read-back.306307## Lifecycle and repository delivery308309For each admitted task or issue, lifecycle progression moves only through unstarted/Backlog/Todo →310executing → complete/inReview, with an independent read-back after each transition or an independently311read idempotent no-op when mappings share one native status. Persist observed branch, commit, PR,312verification, and the full delivery checkpoint, then independently read back every persisted checkpoint313field before the completion transition or idempotent no-op can authorize teardown, resume, or sibling314progression. Canonical state alone never proves delivery. Do not change the specification, task graph,315assignment, or ownership.316317Successful PR submission requires all of: exact branch and commit, Graphite parent/read-back, one318canonical PR read-back with matching head/base, verification receipt, delivery checkpoint read-back,319and a clean exact worktree. Only then may the worktree be removed. Execute never reviews, merges,320marks product acceptance, or claims merged state.321322`Delivered`, `complete`, `finish`, and `execute` stop at that verified open-PR boundary. They never323mean ready-for-review transition, auto-merge, merge-queue admission, retargeting for merge, or merge.324No user wording overrides this capability boundary: an explicit merge request is a conflict to325report before stopping, not authority to mutate the PR. Never run `gh pr ready`, `gh pr merge`, a326merge-queue mutation, or an equivalent Graphite/GitHub operation. A claim that the user requested327one of those operations must identify the exact current user message; absent provenance fails328closed, and proven wording still cannot override this no-merge boundary.329330## Stop, interruption, and handback331332A stop marker is an independently read control record that pauses selection; it is not an execution333failure. Interruptions, blocked decisions, collisions, and unknown provider or source-control334outcomes preserve the current project/run and worktree. Handback reports the exact project/run/issue335state, selected ordinal, predecessor/Graphite parent, worktree/branch, changed paths,336verification/validator results, delivery and Git evidence, known PR, first uncertain boundary, and337the next safe action. A later run resumes from independent evidence, not chat memory, local plan338files, branch names, activity, or duplicate submissions.