Refactor high-complexity React components in Dify frontend. Use when `pnpm analyze-component...
npx skills add synaptiai/agent-capability-standard --skill "transition"
Install specific skill from multi-skill repository
# Description
Define how state changes over time through rules, triggers, and effects. Use when modeling state machines, defining workflows, specifying event handlers, or documenting system dynamics.
# SKILL.md
name: transition
description: Define how state changes over time through rules, triggers, and effects. Use when modeling state machines, defining workflows, specifying event handlers, or documenting system dynamics.
argument-hint: "[from_state] [to_state] [triggers]"
disable-model-invocation: false
user-invocable: true
allowed-tools: Read, Grep
context: fork
agent: explore
layer: MODEL
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/transition_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
1) Identify state variables: Determine what can change
- Extract mutable properties from state model
- Identify discrete vs continuous variables
- Note invariants (what cannot change)
2) Discover triggers: Find what causes state changes
- Identify events (user actions, system events)
- Find conditions (thresholds, timeouts)
- Note external inputs that affect state
3) Define preconditions: Specify when transitions can occur
- Document required state for transition
- Identify guards and conditions
- Note blocking conditions
4) Specify effects: Document what changes during transition
- List state variable changes
- Note side effects (events emitted, actions taken)
- Capture ordering constraints
5) Validate completeness: Check for missing transitions
- Identify unreachable states
- Find states with no outgoing transitions
- Note non-deterministic cases
6) 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 transitions
- observe - Observations reveal transition patterns
- discover - Discovery finds unknown transitions
Commonly precedes:
- simulate - Transitions drive simulation
- plan - Transitions inform action planning
- verify - Transitions specify expected behavior
Anti-patterns:
- Never use transition to execute changes (use mutate)
- Avoid modeling transitions without state model first
Workflow references:
- See workflow_catalog.yaml#world_model_build for transitions in world modeling
- See workflow_catalog.yaml#digital_twin_sync_loop for transition application
# Supported AI Coding Agents
This skill is compatible with the SKILL.md standard and works with all major AI coding agents:
Learn more about the SKILL.md standard and how to use these skills with your preferred AI coding agent.