with one click
paw-transition
// Workflow transition gate for PAW. Handles stage boundaries, session policy, preflight checks, and next activity determination.
// Workflow transition gate for PAW. Handles stage boundaries, session policy, preflight checks, and next activity determination.
[HINT] Download the complete skill directory including SKILL.md and all related files
| name | paw-transition |
| description | Workflow transition gate for PAW. Handles stage boundaries, session policy, preflight checks, and next activity determination. |
Execution Context: This skill runs in a subagent session, delegated by the PAW orchestrator when processing a
paw-transitionTODO. Return structured output—do not make orchestration decisions beyond the transition.
Gate between workflow activities. Ensures:
Execute these steps in order. Do not skip steps.
Read WorkflowContext.md to determine:
per-stage | continuous)prs | local)every-stage | milestones | planning-only | final-pr-only)
Handoff Mode: field and map: manual→every-stage, semi-auto→milestones, auto→final-pr-onlyalways→every-stage, never→final-pr-onlymilestonesenabled | disabled)
enabledIdentify last completed activity from TODOs or artifacts.
Use the Mandatory Transitions table:
| After Activity | Required Next | Skippable? |
|---|---|---|
| paw-init | paw-spec or paw-work-shaping | Per user intent |
| paw-implement (any phase) | paw-impl-review | NO |
| paw-spec | paw-spec-review | NO |
| paw-planning | paw-plan-review | NO |
| paw-impl-review (passes, more phases) | paw-implement (next phase) | NO |
| paw-impl-review (passes, last phase, review enabled) | paw-final-review | NO |
| paw-impl-review (passes, last phase, review disabled) | paw-pr | Per Review Policy |
| paw-final-review | paw-pr | NO |
Skippable = NO: Add activity TODO and execute immediately after transition completes.
When all planned phases are complete (next activity would be paw-final-review or paw-pr), check for phase candidates:
## Phase Candidates section- [ ] items WITHOUT terminal tags ([skipped], [deferred], [not feasible])promotion_pending = true and extract candidate descriptionspromotion_pending = falseIf promotion_pending = true, return candidates in structured output. PAW orchestrator handles user interaction. Promoted candidates go through the standard flow (implement → impl-review) before final review runs, ensuring final review covers the complete implementation.
Stage boundaries occur when moving between these stages:
Stage-to-milestone mapping (determines which milestone is reached at each boundary):
| Stage Boundary | Milestone Reached |
|---|---|
| spec-review passes | Spec.md complete |
| plan-review passes | ImplementationPlan.md complete |
| paw-planning-docs-review complete | Planning Documents Review complete |
| phase N complete (not last) | Phase completion |
| all phases complete | Phase completion (last phase) |
| paw-final-review complete | Final Review complete |
| paw-pr complete | Final PR |
Determine pause_at_milestone:
every-stage: pause at ALL milestonesmilestones:
pause_at_milestone = truepause_at_milestone = false (auto-proceed to paw-pr)planning-only:
pause_at_milestone = truepause_at_milestone = falsefinal-pr-only:
pause_at_milestone = truepause_at_milestone = falseDetermine session_action:
per-stage: set session_action = new_sessionsession_action = continueIf session_action = new_session, set inline_instruction to: next activity and phase (e.g., "Phase 2: Tool Enhancement")
Continue to Step 4 (preflight still needed for inline_instruction context).
Before the next activity can start, verify:
For paw-implement:
prs: phase branch (e.g., <target>_phase1)local: target branchFor paw-code-research:
For paw-planning-docs-review:
For paw-final-review:
For paw-pr:
- [ ] items in ## Phase Candidates)Artifact Lifecycle Check (for all activities):
Artifact Lifecycle: field → use valueartifact_tracking: enabled or track_artifacts: true → commit-and-clean; disabled/false → never-commit.paw/work/<work-id>/.gitignore — if exists with * pattern: never-commitcommit-and-cleanArtifact Lifecycle Action (for orchestrator handoff):
next_activity = paw-pr and detected lifecycle is commit-and-clean: artifact_lifecycle_action = stop-tracking (run \git rm --cached -r .paw/work//` before PR creation)`artifact_lifecycle_action = noneIf any check fails, report blocker and stop.
Add TODO for next activity:
[ ] <activity-name> (<context>)[ ] paw-transitionAfter completing all steps, return structured output:
TRANSITION RESULT:
- session_action: [continue | new_session]
- pause_at_milestone: [true | false]
- next_activity: [activity name and context]
- artifact_lifecycle: [commit-and-clean | commit-and-persist | never-commit]
- artifact_lifecycle_action: [stop-tracking (run `git rm --cached -r .paw/work/<work-id>/` before PR creation) | none]
- preflight: [passed | blocked: <reason>]
- work_id: [current work ID]
- inline_instruction: [for new_session only: resume hint]
- promotion_pending: [true | false] (only when all planned phases complete)
- candidates: [list of unresolved candidate descriptions] (only if promotion_pending)
If pause_at_milestone = true: The PAW agent must PAUSE and wait for user confirmation before proceeding.
If session_action = new_session: The PAW agent must call paw_new_session with the provided work_id and inline_instruction.
If artifact_lifecycle_action = stop-tracking: The PAW agent must load paw-pr and let it perform the stop-tracking operation before opening the final PR.
If preflight = blocked: The PAW agent must report the blocker to the user.
Mark the paw-transition TODO complete after returning this output.
Terminal markers used in Step 2.5 to identify resolved candidates:
- [x] [promoted] <desc> — Elaborated into a full phase- [x] [skipped] <desc> — User chose not to pursue- [x] [deferred] <desc> — Future work outside current workflow- [x] [not feasible] <desc> — Code research revealed infeasibilityUnresolved: - [ ] items without terminal tags. Empty section or all-resolved → promotion_pending = false.
artifact_lifecycle_action from the structured outputnext_activity = paw-pr with artifact_lifecycle = commit-and-clean and artifact_lifecycle_action = none