Intent
Define the rules governing how a system's state changes over time. This capability captures state machine semantics: what triggers transitions, what preconditions must hold, and what effects occur.
Success criteria:
- Transition rules clearly specified
- Preconditions and effects documented
- Triggers identified with evidence
- State machine is deterministic (or non-determinism noted)
Compatible schemas:
schemas/output_schema.yaml
Inputs
| Parameter | Required | Type | Description |
|---|---|---|---|
from_state |
Yes | object | Initial state or state pattern |
to_state |
No | object | Target state (optional for discovery mode) |
triggers |
No | array | Events or conditions that cause transition |
scope |
No | string | Domain to analyze for transitions |
Procedure
Identify state variables: Determine what can change
- Extract mutable properties from state model
- Identify discrete vs continuous variables
- Note invariants (what cannot change)
Discover triggers: Find what causes state changes
- Identify events (user actions, system events)
- Find conditions (thresholds, timeouts)
- Note external inputs that affect state
Define preconditions: Specify when transitions can occur
- Document required state for transition
- Identify guards and conditions
- Note blocking conditions
Specify effects: Document what changes during transition
- List state variable changes
- Note side effects (events emitted, actions taken)
- Capture ordering constraints
Validate completeness: Check for missing transitions
- Identify unreachable states
- Find states with no outgoing transitions
- Note non-deterministic cases
Ground rules: Document evidence for each transition rule
- Reference code, configuration, or documentation
- Note confidence in each rule
Output Contract
Return a structured object:
rules:
- id: string # Unique rule identifier
name: string # Human-readable name
from: object # Source state pattern
to: object # Target state pattern
trigger:
type: string # event, condition, timeout
specification: any # Trigger details
preconditions: array[string] # Required conditions
effects: array[string] # State changes
priority: number # Resolution priority for conflicts
analysis:
reachability: object # Which states are reachable
completeness: number # Coverage estimate
non_determinism: array # Ambiguous transitions
confidence: 0..1
evidence_anchors: ["file:line", "doc:section"]
assumptions: []
Field Definitions
| Field | Type | Description |
|---|---|---|
rules |
array | Transition rules |
rules[].from |
object | Source state pattern |
rules[].to |
object | Target state pattern |
rules[].trigger |
object | What causes the transition |
rules[].preconditions |
array | Conditions that must hold |
rules[].effects |
array | Changes caused by transition |
analysis |
object | State machine analysis results |
Examples
Example 1: Order State Transitions
Input:
from_state:
entity: "order"
status: "*"
scope: "order lifecycle"
Output:
rules:
- id: "order-create"
name: "Create Order"
from: { status: null }
to: { status: "pending" }
trigger:
type: "event"
specification: "OrderCreated"
preconditions:
- "cart is not empty"
- "user is authenticated"
effects:
- "order.status = 'pending'"
- "order.created_at = now()"
- "emit OrderCreatedEvent"
priority: 1
- id: "order-confirm"
name: "Confirm Order"
from: { status: "pending" }
to: { status: "confirmed" }
trigger:
type: "event"
specification: "PaymentReceived"
preconditions:
- "payment.amount >= order.total"
- "inventory available"
effects:
- "order.status = 'confirmed'"
- "order.confirmed_at = now()"
- "reserve inventory"
- "emit OrderConfirmedEvent"
priority: 1
- id: "order-cancel"
name: "Cancel Order"
from: { status: ["pending", "confirmed"] }
to: { status: "cancelled" }
trigger:
type: "event"
specification: "CancelRequested"
preconditions:
- "order.status != 'shipped'"
effects:
- "order.status = 'cancelled'"
- "release inventory"
- "emit OrderCancelledEvent"
priority: 2
analysis:
reachability:
pending: ["confirmed", "cancelled"]
confirmed: ["shipped", "cancelled"]
shipped: ["delivered"]
delivered: []
cancelled: []
completeness: 0.9
non_determinism: []
confidence: 0.85
evidence_anchors:
- "app/models/order.rb:45-120"
- "app/services/order_service.rb:15-80"
assumptions:
- "State machine defined in Order model"
- "All transitions go through OrderService"
Example 2: Authentication State Transitions
Input:
from_state:
entity: "user_session"
status: "unauthenticated"
scope: "authentication flow"
Output:
rules:
- id: "login-success"
name: "Successful Login"
from: { authenticated: false }
to: { authenticated: true }
trigger:
type: "event"
specification: "CredentialsValidated"
preconditions:
- "credentials.valid == true"
- "user.locked == false"
- "failed_attempts < max_attempts"
effects:
- "session.authenticated = true"
- "session.user_id = user.id"
- "session.expires_at = now() + 24h"
- "reset failed_attempts"
priority: 1
- id: "login-failure"
name: "Failed Login Attempt"
from: { authenticated: false }
to: { authenticated: false, failed_attempts: "+1" }
trigger:
type: "event"
specification: "CredentialsRejected"
preconditions: []
effects:
- "increment failed_attempts"
- "if failed_attempts >= max_attempts: lock user"
priority: 1
- id: "logout"
name: "Logout"
from: { authenticated: true }
to: { authenticated: false }
trigger:
type: "event"
specification: "LogoutRequested"
preconditions: []
effects:
- "session.authenticated = false"
- "session.destroy()"
priority: 1
analysis:
reachability:
unauthenticated: ["authenticated", "locked"]
authenticated: ["unauthenticated"]
locked: ["unauthenticated"]
completeness: 0.95
non_determinism: []
confidence: 0.9
evidence_anchors:
- "app/controllers/sessions_controller.rb:10-50"
- "app/models/user.rb:80-95"
assumptions:
- "Session timeout handled by middleware"
- "Lock mechanism implemented in User model"
Verification
- Each rule has from and to state patterns
- Triggers are specified for each rule
- Preconditions are testable
- Effects are specific and verifiable
- Reachability analysis covers all known states
Verification tools: Read (to verify code references)
Safety Constraints
mutation: falserequires_checkpoint: falserequires_approval: falserisk: low
Capability-specific rules:
- Document non-determinism explicitly
- Flag missing transitions for terminal states
- Note when transitions have side effects
- Do not execute transitions while modeling
Composition Patterns
Commonly follows:
state- State model provides basis for transitionsobserve- Observations reveal transition patternsdiscover- Discovery finds unknown transitions
Commonly precedes:
simulate- Transitions drive simulationplan- Transitions inform action planningverify- Transitions specify expected behavior
Anti-patterns:
- Never use transition to execute changes (use
mutate) - Avoid modeling transitions without state model first
Workflow references:
- See
reference/workflow_catalog.yaml#world_model_buildfor transitions in world modeling - See
reference/workflow_catalog.yaml#digital_twin_sync_loopfor transition application