| name | ExecutePairflowPlan |
| description | Orchestrate approved Pairflow plans through the next correct local workflow route, including post-close aftermath handoff, until a settled checkpoint or real blocker is reached. USE WHEN execute a plan, continue plan-driven task progression, or determine the next delegated plan/task/bubble workflow. |
ExecutePairflowPlan
Execute a Pairflow plan as a state-aware orchestrator over existing specialized workflows.
Canonical metadata authority for the inputs named below lives in:
references/Plan-Task-Metadata-Contract.md
Mandatory delegation and mutation gates live in:
references/Delegation-Gates.md
Read references/Delegation-Gates.md before the first route-caused mutation in
each invocation.
Artifact Responsibilities
This skill owns only the top-level orchestration contract:
- determine the next correct workflow route from plan metadata, task metadata, persisted bubble linkage, and normalized bubble-routing outputs
- delegate the selected work to the correct specialized workflow surface
- continue automatically only when the route contract allows it
- stop cleanly at a settled checkpoint, real human checkpoint, or real blocker
This skill does not own:
- plan/task workflow body text that belongs to
CreatePairflowSpec
- bubble lifecycle workflow body text that belongs to
UsePairflow
- raw bubble-detail interpretation or lifecycle-to-route classification
- task supersede/archive execution
- direct progress/archive aftermath verification details, which are delegated to repo-local
Workflows/UpdateProgress.md after close-side admin has landed in the bubble commit
- remote execution support in V1
Workflow Routing
ExecutePairflowPlan keeps the route-surface inventory stable, while some repo-local workflows exist only as backing handlers behind those route surfaces.
Route Surface Returned By ResolvePlanState | Role in This Skill | Owner / Backing Workflow |
|---|
FixPlanMetadata | bootstrap or repair missing plan metadata before normal execution | repo-local Workflows/FixPlanMetadata.md |
ResolvePlanState | assess current state and choose the next normalized route | repo-local Workflows/ResolvePlanState.md |
ReviewPlan | review or refine plan-level readiness before task progression | CreatePairflowSpec ReviewSpec in plan-mode |
CreateTask | create, review, and settle the next executable task inside a pre-kickoff ideation admin carrier | HandleTaskAdminBubble -> UsePairflow CreateBubble + CreatePairflowSpec CreateTask / ReviewSpec + PublishPreKickoffAdmin + UsePairflow InterveneBubble |
ReviewTask | review/refine an existing active task inside a pre-kickoff ideation admin carrier before document refinement | HandleTaskAdminBubble -> UsePairflow CreateBubble + CreatePairflowSpec ReviewSpec + PublishPreKickoffAdmin + UsePairflow InterveneBubble |
CreateDocumentBubble | stable route surface for document-bubble create/start, pre-kickoff admin publish, and same-bubble kickoff | HandleDocumentBubble -> UsePairflow CreateBubble + PublishPreKickoffAdmin + UsePairflow InterveneBubble |
ReviewDocumentBubble | stable route surface for document-bubble deep review at the approval gate | HandleDocumentBubble -> UsePairflow ReviewBubble |
CloseDocumentBubble | stable route surface for document-bubble approve/merge/cleanup after approval is already satisfied | HandleDocumentBubble -> UsePairflow CloseBubble |
CreateImplementationBubble | stable route surface for implementation-bubble create/start, pre-kickoff admin publish, and same-bubble kickoff | HandleImplementationBubble -> UsePairflow CreateBubble + PublishPreKickoffAdmin + UsePairflow InterveneBubble |
ReviewImplementationBubble | stable route surface for implementation-bubble deep review at the approval gate | HandleImplementationBubble -> UsePairflow ReviewBubble |
CloseImplementationBubble | stable route surface for implementation-bubble approve/merge/cleanup after approval is already satisfied | HandleImplementationBubble -> UsePairflow CloseBubble |
HandleNormalizedReplan | consume a normalized replanning signal without reclassifying raw bubble detail | repo-local Workflows/HandleNormalizedReplan.md |
TroubleshootBubble | stable route surface for explicit bubble-runtime or lifecycle troubleshooting | active bubble handler -> UsePairflow troubleshooting surface |
HumanCheckpoint | stop for ambiguity, contract refinement, or real operator judgment | explicit stop boundary, not an auto-run workflow |
PlanComplete | stop after the plan reaches a complete settled boundary | explicit stop boundary, not a downstream workflow |
| Repo-local Backing Workflow | Role in This Skill | Returned As target_workflow_surface? |
|---|
HandleTaskAdminBubble | repo-local owner for task creation/review admin inside a document ideation carrier, including same-carrier document kickoff after publish | no; it backs CreateTask and ReviewTask route surfaces |
HandleDocumentBubble | repo-local owner for document-bubble lifecycle interpretation, UsePairflow delegation, and normalized bubble outputs | no; it backs document-bubble route surfaces |
HandleImplementationBubble | repo-local owner for implementation-bubble lifecycle interpretation, UsePairflow delegation, and normalized bubble outputs | no; it backs implementation-bubble route surfaces |
PublishPreKickoffAdmin | repo-local manual operator workflow for publishing bounded ideation bubble admin changes to clean main and returning structured no-kickoff publish proof | no; the document-bubble and implementation-bubble create routes consume it before kickoff |
UpdateProgress | repo-local owner for normal post-implementation progress/archive verification and local pilot proof after successful CloseImplementationBubble return; required implementation task/progress/archive mutations are owned by CloseBubble before lifecycle commit | no; it is entered only after the existing close route returns settled success |
Route-surface rule:
- the names above are stable routing labels and workflow targets only
- they do not authorize this top-level skill to inline downstream workflow bodies
- successor tasks may implement their internals, but they must not silently rename or reinterpret the route surfaces
HandleDocumentBubble, HandleImplementationBubble, and
PublishPreKickoffAdmin are backing workflows, not
target_workflow_surface values returned by ResolvePlanState
- raw Pairflow lifecycle truth is never classified directly by this top-level skill; repo-local bubble handlers own that read-path and then delegate into
UsePairflow
- naming convention is deliberate:
target_workflow_surface names stay in PascalCase
route_class values returned by ResolvePlanState stay in snake_case
- example:
route_class=troubleshoot_bubble targets TroubleshootBubble
Pre-Kickoff Admin Route Contract
ExecutePairflowPlan owns route selection for workflow slices that use an
ideation-created bubble as a bounded pre-kickoff admin container. This is a
route contract only. In the current slice, both CreateDocumentBubble and
CreateImplementationBubble have adopted the pattern.
Baseline dependency:
UsePairflow remains the owner of the existing create --ideation,
start/round-0 hold, ideation.task_pending=true, and kickoff primitives.
- This skill may rely on those primitives, but it must not redefine ideation,
rename mode flags, or move lifecycle ownership into
ExecutePairflowPlan.
- The adopted create-route sequence for both document and implementation
bubbles, and task-admin document carriers is:
create --ideation -> start/round-0 hold -> bounded admin in bubble worktree -> commit -> publish to main -> verify -> kickoff.
Task-admin adoption:
CreateTask and ReviewTask are adopted pre-kickoff admin routes. They must
create or safely reuse the canonical document ideation carrier
<task_id>-doc before modifying task, plan, progress, or directly related
docs/admin artifacts.
- Task creation, task refinement, task splitting, task metadata updates, plan
tracker updates, and
ReviewSpec task-mode approval all occur in the
carrier worktree, not directly on main.
- The carrier must remain a round-0 ideation hold while task admin is being
prepared and reviewed.
- Before task-admin files are created or edited, the handler must prove the
exact carrier worktree path from refreshed Pairflow status, prove clean
main, and write a PublishPreKickoffAdmin pre-side-effect authorization
record naming selected admin paths, expected postconditions, ideation hold
proof, and changed-path coverage.
CreateTask drafting may be performed directly by the handler after the
carrier guard succeeds, or by CreatePairflowSpec CreateTask as a distinct
helper step. A helper step is not required merely to draft the initial task.
Any delegated task-admin step that can write files must execute in the
proven carrier worktree. If that execution root cannot be guaranteed, it may
return only proposed content or a review decision for the handler to apply
inside the carrier.
- After every task-admin edit, the handler must prove
main is still clean and
all changed/untracked carrier paths are selected-scope admin paths. A dirty
main is a hard stop, not a cleanup opportunity.
- After the latest task artifact is approved, the bounded admin commit must be
fast-forward-published to clean
main through
PublishPreKickoffAdmin.
- Only after refreshed
main proves the selected plan/task/admin
postconditions and refreshed Pairflow status proves the same round-0 hold may
the workflow kickoff the same <task_id>-doc carrier for document
refinement.
- A task-admin route that produces route-back-to-plan, split-task, or
block-not-ready output publishes only the bounded settled admin state that is
explicitly authorized, then stops at the appropriate checkpoint instead of
kicking off document refinement.
Admin scope:
- allowed admin edits are bounded to plan/task/progress metadata and directly
related docs or admin notes needed for the selected route
- repo-local
ExecutePairflowPlan skill/workflow documentation is allowed
only when the selected admin task itself changes that orchestration contract
- product/source implementation, runtime behavior changes, new Pairflow
commands, and
UsePairflow edits are forbidden during pre-kickoff admin
- every successor task that adopts or extends this route must leave the skill
operational after it lands; it must not make current routes depend on
unimplemented future workflows
Publish proof:
- the repo-local
Workflows/PublishPreKickoffAdmin.md workflow is the manual
operator path for proving a bounded admin commit was published to clean
main, refreshed metadata or selected artifact-content postconditions were
re-read, and refreshed ideation hold evidence still allows later kickoff
- the integrated
CreateTask and ReviewTask routes must consume that
structured proof before document kickoff
- the integrated
CreateDocumentBubble route must consume that structured
proof before kickoff
- the integrated
CreateImplementationBubble route must consume that
structured proof before kickoff
- an unmerged bubble-worktree commit, transcript prose, operator memory, or
stale pre-publish metadata is never proof that lifecycle-relevant admin state
reached
main
- if proof of admin scope, commit identity, publish result, or refreshed
postcondition is absent or ambiguous, the workflow must stop before kickoff
- failed admin publish, partial publish, or unknown publish state must not be
converted into kickoff by fallback reasoning
Delegation Enforcement Contract
ExecutePairflowPlan is an orchestrator, not a substitute implementation of the
workflow surfaces it routes to.
Hard rules:
- every route whose
target_workflow_surface is owned by another workflow must be executed as a distinct delegated workflow step before the orchestrator may advance
- reading a downstream workflow file and applying its rules locally does not count as executing that workflow
- the orchestrator must not approve, refine, create, close, or troubleshoot artifacts by approximating the downstream workflow in its own context
- each delegated workflow step must return a concrete result that can be recorded in the route ledger before
ResolvePlanState is run again
- if a delegated workflow cannot be executed in the required surface, stop at
HumanCheckpoint or a real blocker instead of silently downgrading to inline reasoning
- before any route-caused mutation or lifecycle command, apply
references/Delegation-Gates.md
Mandatory route-to-delegation mapping:
| Route Surface | Required Delegated Execution | Minimum Result Needed Before Continuing |
|---|
FixPlanMetadata | repo-local Workflows/FixPlanMetadata.md | repaired metadata or fail-closed checkpoint |
ReviewPlan | CreatePairflowSpec ReviewSpec in plan-mode | approve_plan, refine_plan, split_plan, or block_not_ready; if refine_plan changes the plan, rerun ReviewSpec in fresh plan-mode context before any downstream route may advance |
CreateTask | repo-local HandleTaskAdminBubble delegating create/start to UsePairflow CreateBubble; drafting the initial task directly in the handler or through CreatePairflowSpec CreateTask; delegating approval/review to CreatePairflowSpec ReviewSpec; admin publish to PublishPreKickoffAdmin; and same-carrier document kickoff to UsePairflow InterveneBubble only after approval and refreshed proof | created or safely reused <task_id>-doc ideation carrier, created/refined task artifact, ReviewSpec task-mode decision=approve_task for the latest artifact when kickoff runs, persisted doc_bubble_id=<task_id>-doc and approved task/plan tracker metadata on refreshed main, structured publish success, audited same-bubble kickoff result, or a truthful checkpoint for split/route-back/block output |
ReviewTask | repo-local HandleTaskAdminBubble delegating task review/refinement to CreatePairflowSpec, admin publish to PublishPreKickoffAdmin, and same-carrier document kickoff to UsePairflow InterveneBubble only after approval and refreshed proof | approve_task, refine_task, route_back_to_plan, split_task, or block_not_ready result handled inside the carrier worktree; if approved, refreshed main proves approved task metadata, plan tracker state, doc_bubble_id=<task_id>-doc, structured publish success, and audited same-bubble kickoff |
CreateDocumentBubble | repo-local HandleDocumentBubble delegating create/start to UsePairflow CreateBubble, consuming PublishPreKickoffAdmin proof, and delegating same-bubble ideation kickoff to UsePairflow InterveneBubble after refreshed postconditions | created/started ideation document bubble id, persisted doc_bubble_id linkage on main, structured publish success with refreshed postconditions, audited same-bubble kickoff result, and boundary status |
ReviewDocumentBubble | repo-local HandleDocumentBubble delegating to UsePairflow ReviewBubble | review result and human approval/rework checkpoint; skipped when the handler emits a close route from trusted multi-clean-meta-review auto-approval proof |
CloseDocumentBubble | repo-local HandleDocumentBubble delegating to UsePairflow CloseBubble | close/merge result, including merge_conflict_recovered when CloseBubble safely resolved and retried a bounded merge conflict; status=implementable metadata applied in the bubble worktree before lifecycle commit and verified on refreshed main; and bubble artifact deletion or explicit retained-bubble reason |
CreateImplementationBubble | repo-local HandleImplementationBubble for fresh create/start, safe same-id carrier reuse, pre-kickoff resume/kickoff, or linked active-hold classification; it delegates create/start to UsePairflow CreateBubble only when a new carrier is needed, consumes PublishPreKickoffAdmin proof before kickoff, and delegates same-bubble ideation kickoff to UsePairflow InterveneBubble only after refreshed postconditions | created or safely reused ideation implementation bubble id when kickoff runs, persisted impl_bubble_id linkage on main, status=in_progress on main, structured publish success with refreshed postconditions, audited same-bubble kickoff result when applicable, or a truthful active-bubble/human-checkpoint boundary when no create/kickoff delegation applies |
ReviewImplementationBubble | repo-local HandleImplementationBubble delegating to UsePairflow ReviewBubble | review result and human approval/rework checkpoint; skipped when the handler emits a close route from trusted multi-clean-meta-review auto-approval proof |
CloseImplementationBubble | repo-local HandleImplementationBubble delegating to UsePairflow CloseBubble | close/merge result, including merge_conflict_recovered when CloseBubble safely resolved and retried a bounded merge conflict; implementation task/progress/archive admin applied in the bubble worktree before lifecycle commit and verified on refreshed main; plus bubble artifact deletion or explicit retained-bubble reason before UpdateProgress verification |
HandleNormalizedReplan | repo-local Workflows/HandleNormalizedReplan.md | normalized replanning follow-through result |
TroubleshootBubble | active bubble handler delegating to UsePairflow troubleshooting surface | troubleshooting result and explicit stop boundary |
Plan/task review gates:
plan_review is not satisfied by the orchestrator reading the plan and deciding it looks ready
task_review is not satisfied by the orchestrator creating a task with status=approved
CreateTask and ReviewTask may not mutate task or plan artifacts
directly on main; their route-caused admin edits are made in the
<task_id>-doc ideation carrier worktree and then published through
PublishPreKickoffAdmin
CreateTask output may leave a task in draft, under_review, or another workflow-defined state; any transition to bubble-ready status must come from the delegated task review result or an explicitly delegated task-creation contract that says the task is already approved
- no bubble route may be executed unless every upstream plan/task route in the current execution chain has a route-ledger entry with a delegated result
- if a delegated
ReviewSpec returns refine_plan or refine_task and the artifact is modified, the same review mode must be delegated again from a fresh context using the refreshed artifact before the route can be considered approved
- a refinement loop is settled only by
approve_plan, approve_task, split_plan, route_back_to_plan, block_not_ready, or a real blocker; the orchestrator must not treat its own post-edit inspection as a replacement for the repeated ReviewSpec result
- invoking
ExecutePairflowPlan explicitly authorizes mandatory downstream
delegation required by this skill; this includes fresh sub-agent
CreatePairflowSpec ReviewSpec passes for ReviewPlan, CreateTask
approval, and ReviewTask whenever the runtime supports sub-agents
- for
ReviewPlan, CreateTask approval, and ReviewTask, sub-agent
delegation is mandatory whenever the runtime supports it; if unavailable,
the substitute must be an explicitly separate compact workflow step, not
blended local reasoning. Initial CreateTask drafting itself may be
handler-local after the carrier guard succeeds.
CreateTask may draft or propose the initial task artifact, but any
transition to status=approved requires a fresh sub-agent ReviewSpec task-mode result for the exact refreshed task artifact and parent plan
- if a
ReviewSpec pass returns refine_plan or refine_task and any
artifact changes, rerun the same mode in a new fresh sub-agent over the
refreshed artifact; repeat until the result is approve_plan,
approve_task, route_back_to_plan, split_plan, split_task,
block_not_ready, or a real blocker
- if sub-agents are available and no sub-agent id/result is recorded for a
required ReviewSpec pass, stop with
REVIEW_SPEC_DELEGATION_MISSING
status=approved may be written or committed only after the route ledger contains ReviewSpec task-mode decision=approve_task for the latest task artifact
Fresh-context requirement:
- downstream specialized workflows must run in fresh context whenever feasible
- if the execution environment cannot spawn a fresh context, the orchestrator must still create a distinct workflow step with a compact input packet and a compact returned result
- the returned result, not the orchestrator's private reasoning, is the authority for the next routing decision
- every repeated
ReviewSpec pass after a refinement must use a fresh
sub-agent context whenever the runtime supports it; if a fresh sub-agent is
unavailable, create a distinct compact workflow step that rereads the
refreshed artifact and returns a new explicit ReviewSpec decision
- route-ledger evidence for sub-agent ReviewSpec passes must record the
sub-agent id or explicit unavailability reason, the reviewed artifact path or
refreshed content version, the decision, and any required refinement loop
continuation
Route Ledger
Maintain a route ledger during every invocation.
Before delegating a route, append:
route_step: <number>
resolved_route:
route_class: <route_class>
target_workflow_surface: <target_workflow_surface>
continuation_mode: <continuation_mode>
reason_code: <reason_code>
delegation:
required_workflow: <workflow name>
input_artifacts:
- <path or id>
delegated_execution_method: <subagent|separate_local_step|not_applicable>
delegated_result: null
mutation_allowed: false
After the delegated workflow returns, update the same entry:
delegation_result:
status: <completed|checkpoint|blocked>
decision: <workflow-specific decision>
changed_artifacts:
- <path or id>
evidence_summary: <short factual summary>
next_resolution_allowed: <true|false>
mutation_allowed: <true|false>
Ledger rules:
- a route with
continuation_mode=auto_continue may continue only when next_resolution_allowed=true
- if the same route repeats with no material new state recorded in the ledger, stop at
HumanCheckpoint or troubleshooting
- final reports must include the route ledger summary when any route was delegated
- if a bubble lifecycle action is attempted without ledger proof of prior plan/task review gates, treat that as a workflow violation and stop
- for
ReviewPlan, next_resolution_allowed=true after refine_plan
only authorizes rerunning the same ReviewSpec route from refreshed
artifacts; it does not authorize task creation, bubble creation, or
lifecycle actions
- for
ReviewTask, repeated refine_task review loops must remain inside the
active HandleTaskAdminBubble carrier workflow; they do not authorize
direct main edits or top-level lifecycle shortcuts outside that carrier
- after a repeated ReviewSpec pass returns
approve_plan or approve_task, the ledger entry must mention the latest reviewed artifact version or commit/evidence summary so downstream routing is tied to the approved content, not an older pre-refinement version
- route-caused plan/task/progress metadata edits may not be committed while
mutation_allowed=false
- before committing route-caused metadata changes, cite the delegated workflow decision that authorized each staged mutation; if no decision exists, unstage or stop at
HumanCheckpoint
Orchestrator Execution Style
1. Resolve before acting
Before every meaningful action:
- read sequencing truth from plan metadata
- read detailed local execution truth from task metadata
- use persisted bubble linkage only to identify which repo-local bubble handler owns the next bubble-side read/decision
- consume only normalized bubble outputs at the top level; raw Pairflow lifecycle truth is read inside
HandleDocumentBubble or HandleImplementationBubble, not here
- apply deterministic precedence only inside the declared metadata authority split
- route to
FixPlanMetadata or HumanCheckpoint instead of guessing when the contract does not close the ambiguity
2. Drive until a real boundary
Default mode is drive-until-blocked.
One invocation should continue through obvious next steps until it reaches one of these boundaries:
- a plan-settled boundary such as
PlanComplete
- a settled bubble boundary such as "bubble started with task linkage persisted" or "bubble handed to approval review"
HumanCheckpoint
- a real blocker that requires explicit troubleshooting
Loop-bound rule:
auto_continue is allowed only while each delegated step returns materially new authoritative state for the next routing decision
- if the same normalized route would repeat without a trustworthy state advance, the orchestrator must fail closed to a checkpoint or troubleshooting path instead of spinning
drive-until-blocked applies only after every upstream delegated gate in the current route chain has a concrete route-ledger result; delegated gates outrank continuation momentum
2a. Terminal vs settled completion
ExecutePairflowPlan distinguishes task-local terminal state from plan-level settled completion.
Definitions:
done means task execution is complete, but archive aftermath may still be pending.
archived means task execution is complete and the task artifact has moved to its canonical archive path.
superseded means executable identity was replaced; it is terminal for execution, but its archive/lineage aftermath must still be settled before plan completion.
PlanComplete is a settled plan boundary, not merely a task-execution boundary.
- A completed plan is settled only after both its task artifacts and the plan artifact itself are at their canonical archive paths.
Plan-completion rule:
- a normal completed task must be
archived before PlanComplete
- a task left as
done at a live task path is not settled enough for PlanComplete
- the plan artifact must be archived to
plans/archive/plans/<created_on>-<live-plan-filename-stem>.md before PlanComplete
- the date used for task archive groups and archived plan filenames is the plan creation date, not the archive execution date
- an existing
archive_group date prefix may verify a known created_on, but it must not be used as the source for a missing created_on
- when
created_on is missing, derive it from explicit creation metadata or unambiguous committed first-added history before any archive move; if the only candidate is today's date, the archive execution date, body prose, or archive_group, fail closed
- if archive settlement is deterministic, the next owner is the normal aftermath path, not direct completion
- if archive settlement is not deterministic, stop at
HumanCheckpoint with an explicit archive blocker
- the only acceptable reason to report
done after completion is as fail-closed evidence that task work finished but archive settlement did not
3. Fresh-context downstream execution
Downstream specialized workflows must run in fresh context whenever feasible.
Reasons:
- orchestration state should not overload plan/task/bubble review contexts
- repeated review/refinement loops should stay as unbiased as practical
ExecutePairflowPlan should remain a router, not an all-in-one execution transcript
Practical rule:
- keep only orchestration state in the top-level context
- pass the minimum correct artifact context to the delegated workflow
- treat invocation of
ExecutePairflowPlan as authorization for mandatory
downstream delegation required by this skill, including fresh sub-agent
ReviewSpec passes
- use a fresh sub-agent execution whenever the runtime supports it
- when fresh sub-agent execution is unavailable, create a distinct local
workflow step with a compact input packet and a compact returned result
instead of blending the downstream workflow into orchestration reasoning
- do not advance from
ReviewPlan, CreateTask, ReviewTask, bubble handler,
or aftermath routes without a route-ledger result from that distinct workflow
step
4. Continuation-mode policy
Continuation-mode classification is intentional across the full V1 route taxonomy:
auto_continue: metadata_bootstrap, plan_review, document_bubble_close only with approval_gate_state=already_satisfied, implementation_bubble_close only with approval_gate_state=already_satisfied, normalized_replanning
stop_at_settled_checkpoint: task_create, task_review, document_bubble_create, implementation_bubble_create, plan_complete
stop_at_human_checkpoint: document_bubble_review, implementation_bubble_review, troubleshoot_bubble, human_checkpoint
Policy notes:
ReviewPlan remains an auto_continue route because its outputs can often
be consumed mechanically inside the same artifact-refinement loop without
crossing a human approval gate.
CreateTask and ReviewTask stop at a settled checkpoint because their
adopted route now creates or reuses the document ideation carrier, performs
task admin in that carrier, publishes bounded admin to main, and kicks off
the same carrier for document refinement only after refreshed proof. If task
review returns split, route-back, or block output, the route stops at that
checkpoint instead of falling through to direct main edits.
CreateDocumentBubble stops at a settled checkpoint only after the document
route has created or reused the ideation carrier, published required admin
linkage to main, verified refreshed postconditions, and kicked off the same
bubble. CreateImplementationBubble stops at a settled checkpoint only after
the implementation route has created or reused the ideation carrier,
published impl_bubble_id and status=in_progress admin to main, verified
refreshed postconditions, and kicked off the same bubble. Later review/close
routing depends on successor-owned normalized bubble outputs rather than
immediate top-level continuation.
ReviewDocumentBubble and ReviewImplementationBubble stop at a human checkpoint when the bubble handler emits a review route; however, if the handler proves the bubble reached READY_FOR_HUMAN_APPROVAL with reviewPolicy.meta_review_consecutive_clean_runs_required > 1 and metaReview.consecutiveCleanRuns meeting that threshold, it should emit the corresponding close route instead of a review route
document_bubble_close and implementation_bubble_close may auto-continue only when ResolvePlanState returns them with approval_gate_state=already_satisfied; the top-level skill must never infer approval from raw Pairflow state, but it may consume a bubble handler's normalized auto-approval proof as part of the close route
- a close route is not settled merely because merge succeeded; the delegated close result must also prove bubble artifact deletion/cleanup or provide an explicit retained-bubble reason that is safe to carry forward
- after successful
implementation_bubble_close, the next same-run owner is repo-local UpdateProgress; CloseBubble must already have carried required implementation task/progress/archive admin inside the bubble commit, and only the refreshed verification result may then rerun ResolvePlanState, stop at PlanComplete, or fail closed to HumanCheckpoint
normalized_replanning remains auto_continue because it hands control to repo-local HandleNormalizedReplan follow-through while preserving the normalized source scope rather than dropping back to heuristic routing
See Workflows/ResolvePlanState.md for the canonical per-route output fields, including route_scope, source_scope, approval_gate_state, and the full Auto-Continue vs Checkpoint Rules.
5. Fail closed across authority boundaries
Allowed same-authority resolution:
- plan sequencing fields remain plan authority
- task-local status remains task authority
- bubble lifecycle remains Pairflow authority, but raw lifecycle interpretation is consumed only inside the repo-local bubble handlers
Fail-closed cases:
- missing required plan metadata
- cross-authority disagreement with no declared precedence rule
- blocked-state semantics that would widen the approved V1 contract
- raw bubble detail that has not yet been normalized into a route class
- route ownership ambiguity between this shell and successor tasks
V1 Routing Boundaries
This skill preserves the following V1 boundaries:
- local-only execution scope
- incremental next-task creation rather than generating the full task tree upfront
- mandatory plan/task review gates before execution
- separate document-refinement and implementation bubbles
- normalized replanning as an explicit route surface, not a generic failure bucket
Out-of-scope route ownership remains explicit:
- Task 3 owns raw bubble lifecycle interpretation inside
HandleDocumentBubble and HandleImplementationBubble, then maps it into the normalized route taxonomy
- Task 4 ownership is encoded in repo-local
HandleNormalizedReplan, which owns plan/task follow-through after review loops or normalized replanning signals
- Task 5 ownership is encoded in repo-local
UpdateProgress, which owns normal progress/archive verification and local pilot evidence after successful implementation close; mutation of implementation task/progress/archive closeout belongs to UsePairflow CloseBubble before lifecycle commit