Skip to main content

WO Status Transitions

Benchmarked against: Anthropic โ€” Handling stop reasons System: WO System v4.0 (Captain-approved, 2026-03-01) Enforcement: State machine with transition gates + RBAC

Every work order follows a strict state machine. Invalid transitions are rejected by the system. Some transitions require specific fields to be filled before they are allowed.


State machineโ€‹


Status definitionsโ€‹

StatusIconMeaningWho triggers
pending๐Ÿ”ดWO created, awaiting assignee acceptanceSystem (on create)
accepted๐ŸŸกAssignee acknowledged, will begin workAssignee
in_progress๐Ÿ”ตWork actively being doneAssignee
blockedโšซCannot proceed, waiting on external dependencyAssignee
review๐ŸŸฃWork completed, submitted for Captain reviewAssignee
approved๐ŸŸขCaptain verified and approvedCaptain only
rejected๐Ÿ”ดCaptain reviewed and returned for revisionCaptain only
cancelledโฌœWO abandonedCaptain only

Transition gatesโ€‹

Some transitions require specific fields. The system enforces these gates โ€” attempting a transition without required fields returns an error with missing_fields hint.

TransitionRequired fieldsWhy
in_progress โ†’ reviewcompletion_summary + actual_hours (> 0)Can't review without knowing what was done
in_progress โ†’ blockednotesMust explain what's blocking
blocked โ†’ in_progressnotesMust explain what unblocked
review โ†’ approvedreview_notesCaptain must document what was verified
review โ†’ rejectedreview_notesCaptain must explain why rejected
any โ†’ cancellednotesMust explain why cancelled

Example: submitting for reviewโ€‹

# This will FAIL โ€” missing required fields
complete_work_order(
order_id="WO-2026-0305-001",
summary="" # Empty summary
)
# Error: {"error": "missing_fields", "hint": ["completion_summary", "actual_hours"]}

# This will SUCCEED
complete_work_order(
order_id="WO-2026-0305-001",
summary="Deployed Text Subgraph. 327 entries processed, 94% accuracy.",
actual_hours=3.5
)

RBAC (Role-Based Access Control)โ€‹

Not all users can trigger all transitions:

RoleIdentitiesAllowed transitions
Captainๅคๅ“ฅ, ๅฐ่ฅฟ, system:captain-proxyAll transitions including approve/reject/cancel
AssigneeThe agent assigned to the WOaccept, start, block, unblock, submit for review
Other agentsAny non-assigned agentView only โ€” cannot change status

Captain-only actionsโ€‹

These transitions can only be performed by Captain identities:

  • review โ†’ approved (verify_work_order with approved=True)
  • review โ†’ rejected (verify_work_order with approved=False)
  • any โ†’ cancelled (requires notes)

Attempting these as a non-Captain returns a permission error.


Valid transitions tableโ€‹

From โ†“ / To โ†’pendingacceptedin_progressblockedreviewapprovedrejectedcancelled
pendingโ€”โœ…โ€”โ€”โ€”โ€”โ€”โœ… Captain
acceptedโ€”โ€”โœ…โ€”โ€”โ€”โ€”โœ… Captain
in_progressโ€”โ€”โ€”โœ… notesโœ… summary+hoursโ€”โ€”โœ… Captain
blockedโ€”โ€”โœ… notesโ€”โ€”โ€”โ€”โœ… Captain
reviewโ€”โ€”โ€”โ€”โ€”โœ… Captainโœ… Captainโœ… Captain
rejectedโ€”โ€”โœ…โ€”โ€”โ€”โ€”โœ… Captain
approvedโ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€” (terminal)
cancelledโ€”โ€”โ€”โ€”โ€”โ€”โ€”โ€” (terminal)

Transition historyโ€‹

Every WO maintains a complete transition history โ€” an audit trail of every state change:

{
"transition_history": [
{
"from_status": "pending",
"to_status": "accepted",
"changed_by": "Mac CLI ๅฐๅ…‹",
"timestamp": "2026-03-05T09:35:00Z",
"notes": null
},
{
"from_status": "accepted",
"to_status": "in_progress",
"changed_by": "Mac CLI ๅฐๅ…‹",
"timestamp": "2026-03-05T09:36:00Z",
"notes": "Starting implementation"
},
{
"from_status": "in_progress",
"to_status": "review",
"changed_by": "Mac CLI ๅฐๅ…‹",
"timestamp": "2026-03-05T13:00:00Z",
"notes": null,
"completion_summary": "Deployed successfully, 94% accuracy",
"actual_hours": 3.5
}
]
}

Access via get_work_order_detail(order_id) โ€” always returns the full history.


Common patternsโ€‹

Happy pathโ€‹

pending โ†’ accepted โ†’ in_progress โ†’ review โ†’ approved โœ…

The standard flow: Captain creates, agent accepts, works on it, submits for review, Captain approves.

Blocked and unblockedโ€‹

in_progress โ†’ blocked (notes: "Waiting for SS2 setup")
โ†’ in_progress (notes: "SS2 online, resuming")
โ†’ review โ†’ approved โœ…

Agent hits a dependency, blocks the WO with explanation, resumes when unblocked.

Rejected and revisedโ€‹

in_progress โ†’ review โ†’ rejected (review_notes: "Accuracy below 90%")
โ†’ in_progress (fix issues)
โ†’ review โ†’ approved โœ…

Captain rejects, agent fixes, resubmits. The full cycle is visible in transition history.

Cancelledโ€‹

pending โ†’ cancelled (notes: "Requirements changed, no longer needed")

Captain-only action. The WO is permanently closed.


PageRelationship
Work Order APIFull API reference for WO tools
HITL/HOTLDecision boundaries โ€” when Captain review is required
Company Constitutionยง3 โ€” WOs as the only task channel
Dispatch EngineExecute WOs with different AI engines