Partial supersession (2026-04-06): The core decision of this ADR — adding an explicit
approvedlane and separating reviewer approval from integration-complete — remains in force. However, thein_reviewlane promotion section is superseded by2026-04-06-1-wp-state-pattern-for-lane-behavior.md, which promotesin_reviewfrom an alias forfor_reviewto a first-class 9th lane with its own concreteWPStateclass and conflict-detection guard. The transition model in the Decision Outcome section below reflects the pre-in_review-promotion design; see2026-04-06-1for the current canonical transition set.
Context and Problem Statement
Spec Kitty's current 2.x lifecycle model still encodes for_review -> done as
"reviewer approves". That makes done mean "review passed". But the newer
command/runtime direction and the actual product requirement are stricter:
done must mean "integrated and acceptance-complete", not merely "a reviewer
liked the branch diff".
This semantic gap produced contradictory behavior:
- prompts and reviewers could treat approval as completion,
- merge/integration logic needed
doneto mean the work was actually integrated, - feature acceptance could be declared complete while forbidden fallback paths still existed in the integrated product.
Feature 028-saas-active-projects-shell exposed the consequence: work package
review was treated as effectively terminal even though the integrated feature
still violated the user journey.
Decision Drivers
- Semantic clarity —
donemust have one meaning everywhere. - Review/integration separation — reviewer approval and integrated feature completion are different events.
- Merge safety — the state model must not imply that branch-level review is equivalent to product-level completion.
- Evidence alignment — review evidence and integration evidence should not be conflated into one transition.
- Command parity — prompts,
next, review flows, and merge guards must use the same lifecycle semantics.
Considered Options
- Option 1: Keep
donemeaning "review approved" and encode integration elsewhere - Option 2: Keep the 7-lane model but add extra completion metadata flags
- Option 3: Add an explicit
approvedlane beforedone
Decision Outcome
Chosen option: Option 3, because the lifecycle needs an explicit state for "review approved but not yet integration-complete".
Core Decision
The canonical WP lanes become:
planned -> claimed -> in_progress -> for_review -> approved -> done
plus blocked and canceled.
State Semantics
for_reviewmeans implementation is ready for reviewer inspection.approvedmeans reviewer approval has been granted for the current implementation.donemeans the work is integrated into the mission integration branch and the required acceptance evidence has been recorded.
Transition Model
At minimum, the following transitions are canonical:
in_progress -> for_review— implementation complete, evidence readyfor_review -> approved— reviewer approvalfor_review -> in_progress— changes requestedapproved -> done— integration-complete and acceptedapproved -> in_progress— integration or acceptance uncovered required rework
Evidence Split
Evidence requirements are split by transition:
in_progress -> for_reviewrequires implementation evidence (artifacts/tests/verification needed for review).for_review -> approvedrequires review evidence (reviewer identity, verdict, and reference).approved -> donerequires integration and acceptance evidence (mission-branch integration proof and acceptance proof).
No single event is allowed to claim both review approval and integration-complete status unless the system can prove both happened in the same operation.
Consequences
Positive
donenow means one thing everywhere: integrated and accepted.- Review approval becomes visible and auditable as its own state.
- Feature-level acceptance can fail after branch review without violating the lifecycle model.
- Evidence becomes easier to reason about because review evidence and acceptance evidence are attached to different transitions.
Negative
- State-machine complexity increases from seven lanes to eight.
- Existing docs, prompts, guards, and tests that assume
for_review -> donemust be migrated. - Historical tooling that equates "approved" with "done" needs explicit repair.
Neutral
- The append-only event log remains the canonical state authority.
- Existing blocked/canceled semantics remain unchanged.
Confirmation
This decision is validated when:
- no prompt or command instructs
for_review -> doneas mere approval, - reviewer approval is represented as
approved, donetransitions require integration/acceptance evidence,- integrated feature acceptance failures can reopen work from
approvedwithout breaking lifecycle semantics.
Pros and Cons of the Options
Option 1: Keep done meaning review-approved
Treat reviewer approval as completion and keep integration as a separate informal concept.
Pros:
- No lane migration required.
- Existing tooling keeps working in the short term.
Cons:
donecontinues to mean different things in different parts of the system.- Review approval and integrated completion remain conflated.
- The Feature 028 acceptance failure class remains structurally possible.
Option 2: Keep seven lanes, add metadata flags
Use side metadata to distinguish "approved" from "integrated".
Pros:
- Avoids introducing another visible lane.
- Smaller migration surface for UIs that render lane chips.
Cons:
- Hidden state is harder to reason about than explicit lanes.
- Merge and review semantics become harder to validate deterministically.
- Encourages drift between lane rendering and actual completion meaning.
Option 3: Add explicit approved lane
Use a distinct lane for reviewer approval before final integrated completion.
Pros:
- Makes the lifecycle honest and explicit.
- Aligns prompts, guards, and acceptance behavior.
- Allows reviewer approval to be preserved even if integration acceptance fails.
Cons:
- Requires lane/state migration work.
- UIs and reports must learn one more visible state.
More Information
Supersedes:
2026-02-09-2-wp-lifecycle-state-machine.md2026-02-09-4-cross-repo-evidence-completion.md
Partially superseded by:
2026-04-06-1-wp-state-pattern-for-lane-behavior.md— supersedes thein_review-as-alias approach;in_reviewis now a first-class lane
Interprets alongside:
2026-02-09-3-event-log-merge-semantics.md— rollback-aware merge semantics remain in force, but reviewer-forward progress is nowfor_review -> approvedrather thanfor_review -> done.architecture/adrs/2026-03-09-1-prompts-do-not-discover-context-commands-do.md
Related ADRs:
2026-04-03-1-execution-lanes-own-worktrees-and-mission-branches.md2026-04-03-3-feature-acceptance-runs-on-the-integrated-mission-branch.md