بنقرة واحدة
plan-state-machines
State enums, transition validators per WP
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
القائمة
State enums, transition validators per WP
التثبيت باستخدام Codex أو Claude انسخ هذا Prompt والصقه في Codex أو Claude أو مساعد آخر ليراجع صفحة Skill ويثبّتها لك.
استنادا إلى تصنيف SOC المهني
Test failure diagnosis, source code fixes, and regression detection
Environment verification, dependency installation, baseline test verification
Contract-first single-task implementation dispatched by Coder Coordinator
Integration test writing for component boundaries and external dependencies
Unit test writing and execution with coverage threshold enforcement
API reference documentation skill. Produces and updates API endpoint documentation from contract files in .sdd/docs/api-reference.md.
| name | plan-state-machines |
| description | State enums, transition validators per WP |
| argument-hint | Invoked by Planner Coordinator - do not call directly |
Phase: 2 (Contract Generation) Common contract:
.github/skills/PLAN-SKILL-CONTRACT.mdSpec refs: FR-046, FR-047, FR-039
This skill is dispatched by the Planner Coordinator during Phase 2. It reads the plan accumulator and generates language-specific state machine contract files for WPs with stateful entities.
| # | Input | Description |
|---|---|---|
| 1 | skill_path | Path to this SKILL.md file |
| 2 | plan_dir | Path to .sdd/plans/ directory |
| 3 | contracts_dir | Path to .sdd/plans/contracts/ directory |
| 4 | spec_path | Path to the source spec file |
| 5 | spec_artifacts_dir | Path to spec companion artifacts |
| 6 | research_summary | Key findings from the research phase |
| 7 | target_language | Programming language for contract generation |
| 8 | patterns | Active plan-domain patterns to avoid |
| 9 | phase | Phase indicator (always 2 for this skill) |
state-machines.<ext> from spec_artifacts_dir. Read spec and artifact files in parallel.state-machines.<ext> to contracts_dir/<WP-slug>/ per applicable WPRead the plan accumulator and spec data model. Identify entities with:
status: 'draft' | 'pending' | 'approved' | 'rejected')Skip WPs that:
Build the entity-state mapping:
Order -> [draft, pending, approved, shipped, delivered, cancelled]
Review -> [open, in_progress, changes_requested, approved, rejected]
Check if spec_artifacts_dir contains a state-machines.<ext> file. If it exists:
If the spec artifact does NOT exist:
For each applicable WP, generate <contracts_dir>/<WP-slug>/state-machines.<ext>:
// Generated by: plan-state-machines skill
// Source spec: <spec_path>
// Work package: WP<NN>-<slug>
// Target language: <target_language>
// DO NOT EDIT MANUALLY -- regenerated on plan revision
Define all valid states for each stateful entity:
// TypeScript example
export enum OrderStatus {
DRAFT = 'draft',
PENDING = 'pending',
APPROVED = 'approved',
SHIPPED = 'shipped',
DELIVERED = 'delivered',
CANCELLED = 'cancelled',
}
# Python example
from enum import Enum
class OrderStatus(str, Enum):
DRAFT = 'draft'
PENDING = 'pending'
APPROVED = 'approved'
SHIPPED = 'shipped'
DELIVERED = 'delivered'
CANCELLED = 'cancelled'
Define which transitions are valid with guard conditions:
export interface StateTransition<S> {
from: S;
to: S;
guard?: () => boolean;
description: string;
}
export const ORDER_TRANSITIONS: StateTransition<OrderStatus>[] = [
{ from: OrderStatus.DRAFT, to: OrderStatus.PENDING, description: 'Submit order for review' },
{ from: OrderStatus.PENDING, to: OrderStatus.APPROVED, description: 'Approve order' },
{ from: OrderStatus.PENDING, to: OrderStatus.CANCELLED, description: 'Cancel pending order' },
{ from: OrderStatus.APPROVED, to: OrderStatus.SHIPPED, description: 'Mark as shipped' },
{ from: OrderStatus.SHIPPED, to: OrderStatus.DELIVERED, description: 'Mark as delivered' },
// Invalid: DELIVERED -> DRAFT (no backward transitions)
];
export function isValidTransition(current: OrderStatus, next: OrderStatus): boolean {
return ORDER_TRANSITIONS.some(t => t.from === current && t.to === next);
}
# Python example
ORDER_TRANSITIONS: list[tuple[OrderStatus, OrderStatus, str]] = [
(OrderStatus.DRAFT, OrderStatus.PENDING, 'Submit order for review'),
(OrderStatus.PENDING, OrderStatus.APPROVED, 'Approve order'),
(OrderStatus.PENDING, OrderStatus.CANCELLED, 'Cancel pending order'),
(OrderStatus.APPROVED, OrderStatus.SHIPPED, 'Mark as shipped'),
(OrderStatus.SHIPPED, OrderStatus.DELIVERED, 'Mark as delivered'),
]
def is_valid_transition(current: OrderStatus, next_state: OrderStatus) -> bool:
return any(f == current and t == next_state for f, t, _ in ORDER_TRANSITIONS)
Guard conditions:
Document side effects triggered by each transition:
export interface TransitionSideEffect<S> {
transition: { from: S; to: S };
effects: string[];
}
export const ORDER_SIDE_EFFECTS: TransitionSideEffect<OrderStatus>[] = [
{
transition: { from: OrderStatus.PENDING, to: OrderStatus.APPROVED },
effects: ['Send approval notification email', 'Create shipment record'],
},
{
transition: { from: OrderStatus.APPROVED, to: OrderStatus.SHIPPED },
effects: ['Send shipping notification email', 'Update inventory'],
},
];
Side effects are declarative descriptions, not implementations:
If a WP's state machine file exceeds 800 lines, split generation across multiple writes.
<contracts_dir>/<WP-slug>/state-machines.<ext>