Docs/Core Concepts

Ticket Lifecycle

How tickets move through Forge — from draft idea to verified execution contract.

Every ticket in Forge follows a defined lifecycle. Each status represents a stage where a specific role takes action, and transitions are enforced by the domain model.

Status Flow

                    ┌──────────────────────────┐
                    │                          │
                    ▼                          │
  DRAFT ──► DEV-REFINING ──► REVIEW ──► FORGED ──► EXECUTING ──► COMPLETE
    │                           │                       │
    │                           │                       │
    └───────────────────────────┴── (send back) ◄───────┘

Forward flow: Draft → Dev-Refining → Review → Forged → Executing → Complete

Backward flow: Any later status can be sent back to an earlier one by the PM.

Drift: Forged and Executing tickets can detect drift — when the codebase changes and the spec may be stale. Drift is tracked as a property, not a separate status.

Status Reference

StatusValueWho ActsWhat Happens
DraftdraftPM (web)Ticket is created. AI generates clarification questions. PM answers them. Tech spec is generated.
Dev-Refiningdev-refiningDeveloper (CLI)Developer reviews the spec, adds code context, and submits a Q&A review session.
ReviewreviewPM (web)PM reads the developer's Q&A, optionally re-bakes the spec with new context, then approves.
ForgedforgedAEC is locked and verified. Readiness score is 75+. Ready for execution.
ExecutingexecutingDeveloper (CLI)Developer (or AI agent) implements the ticket following the AEC.
CompletecompleteImplementation is done. Ticket can be reverted to Draft if needed.

Transition Rules

Forward Transitions

FromToTriggerRequirements
DraftDev-RefiningstartDevRefine()Validation results must be provided
Dev-RefiningForgedforge()Readiness score must be 75+
AnyReviewsubmitReviewSession()Developer submits Q&A pairs
ReviewForgedapprove()PM approves the spec
ForgedExecutingexport()External issue link provided
ForgedExecutingstartImplementation()Branch name provided
Draft, ExecutingCompletemarkComplete()

Backward Transitions

FromToTriggerWhat Gets Cleared
Any later statusDraftsendBack()Validation results, readiness score, snapshots
Any later statusDev-RefiningsendBack()Code and API snapshots
Forged, ExecutingReviewsendBack()
CompleteDraftrevertToDraft()Tech spec is cleared

📘 The sendBack() method only allows moving backward in the lifecycle. You cannot send a Draft ticket to Review.

CLI Commands by Status

Which CLI commands work at each status:

CommandDraftDev-RefiningReviewForgedExecutingComplete
forge show <id>YesYesYesYesYesYes
forge review <id>Yes
forge develop <id>YesYes

Drift Detection

When a ticket is in Forged or Executing status, Forge monitors for drift — changes in the codebase that may make the spec stale.

Drift is tracked as properties on the AEC, not as a separate status:

PropertyDescription
driftDetectedAtTimestamp when drift was detected
driftReasonHuman-readable explanation of what changed

When drift is detected, the PM can choose to:

  1. Ignore it — The change doesn't affect the spec
  2. Send back — Return the ticket to Dev-Refining for re-review
  3. Re-bake — Regenerate the spec with updated context

Lifecycle Diagram (Detailed)

PM creates ticket
       │
       ▼
    ┌──────┐    AI asks questions     ┌──────────────┐
    │ DRAFT│───────────────────────►  │ PM answers   │
    └──┬───┘                          │ questions    │
       │                              └──────┬───────┘
       │    Tech spec generated              │
       │◄────────────────────────────────────┘
       │
       │    PM assigns to developer
       ▼
┌──────────────┐    Developer reviews    ┌────────────┐
│ DEV-REFINING │◄───────────────────────►│ CLI review │
└──────┬───────┘    with code context    │ session    │
       │                                 └──────┬─────┘
       │    Q&A submitted                       │
       │◄───────────────────────────────────────┘
       ▼
    ┌────────┐    PM reviews Q&A    ┌──────────┐
    │ REVIEW │◄────────────────────►│ Re-bake  │
    └───┬────┘                      │ (optional)│
        │                           └──────────┘
        │    PM approves
        ▼
    ┌────────┐
    │ FORGED │    AEC is locked
    └───┬────┘    Score ≥ 75
        │
        │    Developer runs forge develop
        ▼
  ┌──────────────┐    Forgy asks questions    ┌────────────┐
  │  Dev Prep    │◄──────────────────────────►│ Q&A session│
  └──────┬───────┘                            └──────┬─────┘
         │    Branch created automatically           │
         │◄──────────────────────────────────────────┘
         ▼
  ┌───────────┐
  │ EXECUTING │    Developer implements
  └─────┬─────┘
        │
        │    Work complete
        ▼
   ┌──────────┐
   │ COMPLETE │
   └──────────┘

Assignment

Tickets can be assigned to a developer at any status except Complete:

  • PM assigns via the web app
  • CLI commands like forge develop can auto-assign the current user
  • A completed ticket must be reverted to Draft before reassignment