{
  "version": "1.0.0",
  "reviewedAt": "2026-08-01",
  "fields": {
    "from": "Authoritative current state",
    "trigger": "Event or command that requests a transition",
    "actor": "Role allowed to request the transition",
    "guard": "Server-side condition that must pass",
    "to": "Authoritative next state",
    "effect": "Durable record or outbox intent created after the transition",
    "retry": "Behavior for the same technical attempt",
    "verification": "Observable check that proves the transition result"
  },
  "examples": [
    {
      "id": "lead-intake",
      "name": "Lead intake and qualification",
      "job": "Move an inbound inquiry from durable capture to a bounded human follow-up decision.",
      "owner": "Revenue operations",
      "initialState": "received",
      "terminalStates": ["closed"],
      "recoveryTransitionIds": ["lead-05"],
      "states": [
        "received",
        "needs-review",
        "qualified",
        "follow-up-due",
        "closed",
        "delivery-failed"
      ],
      "transitions": [
        {
          "id": "lead-01",
          "from": "received",
          "trigger": "validate",
          "actor": "system",
          "guard": "required contact route and consent purpose are present",
          "to": "needs-review",
          "effect": "append validation event",
          "retry": "same attempt returns the existing validation event",
          "verification": "one review item exists for the lead id"
        },
        {
          "id": "lead-02",
          "from": "needs-review",
          "trigger": "qualify",
          "actor": "assigned operator",
          "guard": "current version and qualification reason are present",
          "to": "qualified",
          "effect": "append qualification decision",
          "retry": "exact retry returns the existing decision",
          "verification": "decision actor and record version match"
        },
        {
          "id": "lead-03",
          "from": "qualified",
          "trigger": "schedule-follow-up",
          "actor": "assigned operator",
          "guard": "contact route and preferred window are valid",
          "to": "follow-up-due",
          "effect": "create one notification outbox intent",
          "retry": "duplicate key preserves one outbox row",
          "verification": "follow-up task and outbox intent share the lead id"
        },
        {
          "id": "lead-04",
          "from": "follow-up-due",
          "trigger": "delivery-error",
          "actor": "notification worker",
          "guard": "provider attempt failed",
          "to": "delivery-failed",
          "effect": "record bounded error and next retry time",
          "retry": "worker lease prevents concurrent send",
          "verification": "lead decision remains unchanged while delivery is retryable"
        },
        {
          "id": "lead-05",
          "from": "delivery-failed",
          "trigger": "retry-delivery",
          "actor": "notification worker",
          "guard": "retry window is open and the original outbox intent is current",
          "to": "follow-up-due",
          "effect": "record the next bounded delivery attempt",
          "retry": "worker lease prevents duplicate delivery attempts",
          "verification": "the original outbox identity and lead decision remain unchanged"
        },
        {
          "id": "lead-06",
          "from": "follow-up-due",
          "trigger": "record-follow-up",
          "actor": "assigned operator",
          "guard": "follow-up outcome and current version are present",
          "to": "closed",
          "effect": "append follow-up outcome and close event",
          "retry": "exact retry returns the same close event",
          "verification": "closed lead retains the qualification and follow-up history"
        }
      ],
      "tests": [
        "valid inquiry creates one review item",
        "missing contact route stays received",
        "duplicate submit preserves one lead id",
        "published form smoke saves before notification"
      ],
      "failurePath": "A delivery outage moves only the notification attempt to delivery-failed; it does not erase or duplicate the lead."
    },
    {
      "id": "content-publishing",
      "name": "Content publishing",
      "job": "Move a versioned draft through editorial review, scheduling, publication, and correction.",
      "owner": "Content operations",
      "initialState": "draft",
      "terminalStates": ["retired"],
      "recoveryTransitionIds": ["content-07"],
      "states": [
        "draft",
        "in-review",
        "changes-requested",
        "scheduled",
        "published",
        "correction-needed",
        "retired"
      ],
      "transitions": [
        {
          "id": "content-01",
          "from": "draft",
          "trigger": "submit",
          "actor": "author",
          "guard": "title, body, owner, and content version exist",
          "to": "in-review",
          "effect": "freeze review version",
          "retry": "same submission key returns the review id",
          "verification": "review version equals submitted content version"
        },
        {
          "id": "content-02",
          "from": "in-review",
          "trigger": "request-changes",
          "actor": "editor",
          "guard": "reason and current review version are present",
          "to": "changes-requested",
          "effect": "append editorial note",
          "retry": "exact retry returns the same note",
          "verification": "author sees the note on the reviewed version"
        },
        {
          "id": "content-03",
          "from": "in-review",
          "trigger": "schedule",
          "actor": "editor",
          "guard": "reviewed version and publication time are valid",
          "to": "scheduled",
          "effect": "create publish job",
          "retry": "duplicate key preserves one job",
          "verification": "job names the reviewed version and UTC time"
        },
        {
          "id": "content-04",
          "from": "scheduled",
          "trigger": "publish",
          "actor": "publish worker",
          "guard": "job lease and reviewed version still match",
          "to": "published",
          "effect": "record public revision and URL",
          "retry": "same job returns the existing revision",
          "verification": "public URL renders the intended revision"
        },
        {
          "id": "content-05",
          "from": "published",
          "trigger": "report-error",
          "actor": "editor",
          "guard": "correction reason names the affected revision",
          "to": "correction-needed",
          "effect": "open bounded correction task",
          "retry": "exact retry returns the same task",
          "verification": "published revision remains traceable while correction is pending"
        },
        {
          "id": "content-06",
          "from": "correction-needed",
          "trigger": "retire",
          "actor": "content owner",
          "guard": "replacement or retirement behavior is recorded",
          "to": "retired",
          "effect": "record retirement decision",
          "retry": "exact retry preserves one decision",
          "verification": "retired URL behavior matches the recorded decision"
        },
        {
          "id": "content-07",
          "from": "changes-requested",
          "trigger": "revise-draft",
          "actor": "author",
          "guard": "a new content version addresses the editorial note",
          "to": "draft",
          "effect": "record the new draft version",
          "retry": "same version key returns the existing draft version",
          "verification": "the prior reviewed version and editorial note remain traceable"
        }
      ],
      "tests": [
        "reviewed version publishes",
        "stale draft cannot schedule",
        "duplicate publish job preserves one revision",
        "public URL shows the expected revision"
      ],
      "failurePath": "A stale review cannot schedule a changed draft; the content returns to a new review version."
    },
    {
      "id": "work-order",
      "name": "Work order dispatch",
      "job": "Turn a request into assigned work, completion evidence, and a reviewable close decision.",
      "owner": "Service operations",
      "initialState": "requested",
      "terminalStates": ["closed", "canceled"],
      "recoveryTransitionIds": ["work-08"],
      "states": [
        "requested",
        "triaged",
        "assigned",
        "in-progress",
        "blocked",
        "completed",
        "closed",
        "canceled"
      ],
      "transitions": [
        {
          "id": "work-01",
          "from": "requested",
          "trigger": "triage",
          "actor": "dispatcher",
          "guard": "location, task, urgency, and request version are valid",
          "to": "triaged",
          "effect": "append triage decision",
          "retry": "exact retry returns the same decision",
          "verification": "priority is attached to the work order id"
        },
        {
          "id": "work-02",
          "from": "triaged",
          "trigger": "assign",
          "actor": "dispatcher",
          "guard": "assignee is eligible and expected version matches",
          "to": "assigned",
          "effect": "create assignment record",
          "retry": "same key preserves one assignment",
          "verification": "assignment and work order versions agree"
        },
        {
          "id": "work-03",
          "from": "assigned",
          "trigger": "start",
          "actor": "assignee",
          "guard": "assignment is active",
          "to": "in-progress",
          "effect": "record start event",
          "retry": "exact retry returns the start event",
          "verification": "active assignee and start time are visible"
        },
        {
          "id": "work-04",
          "from": "in-progress",
          "trigger": "report-blocker",
          "actor": "assignee",
          "guard": "blocker type and note are bounded",
          "to": "blocked",
          "effect": "create blocker record",
          "retry": "same attempt preserves one blocker",
          "verification": "work remains assigned while blocker is open"
        },
        {
          "id": "work-05",
          "from": "in-progress",
          "trigger": "complete",
          "actor": "assignee",
          "guard": "completion note and required evidence are present",
          "to": "completed",
          "effect": "append completion event",
          "retry": "exact retry returns the same event",
          "verification": "completion evidence references the order id"
        },
        {
          "id": "work-06",
          "from": "completed",
          "trigger": "close",
          "actor": "dispatcher",
          "guard": "completion review passed",
          "to": "closed",
          "effect": "append close decision",
          "retry": "exact retry preserves one close event",
          "verification": "closed record retains assignment and completion history"
        },
        {
          "id": "work-07",
          "from": "requested",
          "trigger": "cancel",
          "actor": "request owner",
          "guard": "work has not started and reason is present",
          "to": "canceled",
          "effect": "append cancellation event",
          "retry": "exact retry returns the same cancellation",
          "verification": "canceled order cannot be assigned"
        },
        {
          "id": "work-08",
          "from": "blocked",
          "trigger": "resume",
          "actor": "assignee",
          "guard": "the blocker is resolved and the assignment is still active",
          "to": "in-progress",
          "effect": "close the blocker and append a resume event",
          "retry": "exact retry returns the same resume event",
          "verification": "the work order retains its assignment and blocker history"
        }
      ],
      "tests": [
        "eligible assignment reaches completion",
        "wrong assignee cannot start",
        "duplicate complete preserves one event",
        "published operator view shows blocker and close history"
      ],
      "failurePath": "A blocker pauses progress without erasing the assignment or pretending that work completed."
    },
    {
      "id": "client-onboarding",
      "name": "Client onboarding",
      "job": "Coordinate intake, document collection, setup, handoff, and an explicit paused path.",
      "owner": "Client success",
      "initialState": "invited",
      "terminalStates": ["active", "closed"],
      "recoveryTransitionIds": ["client-05"],
      "states": [
        "invited",
        "intake-incomplete",
        "ready-for-setup",
        "setup-in-progress",
        "waiting-on-client",
        "active",
        "closed"
      ],
      "transitions": [
        {
          "id": "client-01",
          "from": "invited",
          "trigger": "accept",
          "actor": "invited client",
          "guard": "single-use invitation is valid and unexpired",
          "to": "intake-incomplete",
          "effect": "create membership and intake record",
          "retry": "same token returns the existing membership",
          "verification": "invitation is consumed once"
        },
        {
          "id": "client-02",
          "from": "intake-incomplete",
          "trigger": "submit-intake",
          "actor": "client member",
          "guard": "required fields and current form version are valid",
          "to": "ready-for-setup",
          "effect": "append intake submission",
          "retry": "same attempt preserves one submission",
          "verification": "submission records form and record version"
        },
        {
          "id": "client-03",
          "from": "ready-for-setup",
          "trigger": "start-setup",
          "actor": "assigned operator",
          "guard": "checklist owner is assigned",
          "to": "setup-in-progress",
          "effect": "create setup checklist",
          "retry": "duplicate key preserves one checklist",
          "verification": "every checklist item has an owner"
        },
        {
          "id": "client-04",
          "from": "setup-in-progress",
          "trigger": "request-client-input",
          "actor": "assigned operator",
          "guard": "request names a necessary field or document",
          "to": "waiting-on-client",
          "effect": "create request and delivery intent",
          "retry": "same attempt preserves one request",
          "verification": "request remains durable if delivery fails"
        },
        {
          "id": "client-05",
          "from": "waiting-on-client",
          "trigger": "receive-input",
          "actor": "client member",
          "guard": "member can access the client record",
          "to": "setup-in-progress",
          "effect": "attach response to request",
          "retry": "exact retry returns the same response",
          "verification": "request closes only after durable response"
        },
        {
          "id": "client-06",
          "from": "setup-in-progress",
          "trigger": "activate",
          "actor": "assigned operator",
          "guard": "required checklist items pass",
          "to": "active",
          "effect": "record handoff event",
          "retry": "exact retry preserves one activation",
          "verification": "active client retains checklist and request history"
        },
        {
          "id": "client-07",
          "from": "intake-incomplete",
          "trigger": "close",
          "actor": "client success owner",
          "guard": "reason and retention action are recorded",
          "to": "closed",
          "effect": "append close event",
          "retry": "exact retry returns the same close event",
          "verification": "closed intake follows the retention decision"
        }
      ],
      "tests": [
        "valid invitation produces one membership",
        "expired invitation is rejected",
        "duplicate intake preserves one record",
        "published client view cannot open another client id"
      ],
      "failurePath": "Waiting on client is an explicit state with a durable request, not an invisible note or a fabricated completion."
    },
    {
      "id": "inventory-restock",
      "name": "Inventory replenishment",
      "job": "Move a stock signal through review, ordering, receipt, and discrepancy handling.",
      "owner": "Inventory operations",
      "initialState": "signal-created",
      "terminalStates": ["stock-updated", "canceled"],
      "recoveryTransitionIds": ["stock-08"],
      "states": [
        "signal-created",
        "review-needed",
        "order-ready",
        "ordered",
        "partially-received",
        "received",
        "discrepancy",
        "stock-updated",
        "canceled"
      ],
      "transitions": [
        {
          "id": "stock-01",
          "from": "signal-created",
          "trigger": "review",
          "actor": "inventory operator",
          "guard": "item, location, available quantity, and definition version exist",
          "to": "review-needed",
          "effect": "freeze observed stock snapshot",
          "retry": "same attempt returns the review id",
          "verification": "review references item and location ids"
        },
        {
          "id": "stock-02",
          "from": "review-needed",
          "trigger": "prepare-order",
          "actor": "inventory operator",
          "guard": "target quantity and supplier choice are recorded",
          "to": "order-ready",
          "effect": "create order draft",
          "retry": "duplicate key preserves one draft",
          "verification": "draft quantity reconciles with target and available stock"
        },
        {
          "id": "stock-03",
          "from": "order-ready",
          "trigger": "mark-ordered",
          "actor": "purchasing operator",
          "guard": "external order reference is unique",
          "to": "ordered",
          "effect": "record order evidence",
          "retry": "exact retry preserves one order reference",
          "verification": "record does not imply payment or delivery"
        },
        {
          "id": "stock-04",
          "from": "ordered",
          "trigger": "receive-part",
          "actor": "receiving operator",
          "guard": "received quantity is positive and within remaining quantity",
          "to": "partially-received",
          "effect": "append receipt lot",
          "retry": "same receipt key preserves one lot",
          "verification": "sum of lots equals recorded received quantity"
        },
        {
          "id": "stock-05",
          "from": "partially-received",
          "trigger": "receive-final",
          "actor": "receiving operator",
          "guard": "remaining quantity and condition are recorded",
          "to": "received",
          "effect": "append final receipt lot",
          "retry": "same receipt key preserves one lot",
          "verification": "ordered and received quantities reconcile"
        },
        {
          "id": "stock-06",
          "from": "received",
          "trigger": "report-mismatch",
          "actor": "receiving operator",
          "guard": "count or condition mismatch is present",
          "to": "discrepancy",
          "effect": "create discrepancy record",
          "retry": "exact retry preserves one discrepancy",
          "verification": "stock is not updated while discrepancy is open"
        },
        {
          "id": "stock-07",
          "from": "received",
          "trigger": "post-stock",
          "actor": "inventory operator",
          "guard": "receipt reconciliation passed",
          "to": "stock-updated",
          "effect": "append inventory movement",
          "retry": "same key preserves one movement",
          "verification": "movement quantity equals reconciled receipt"
        },
        {
          "id": "stock-08",
          "from": "discrepancy",
          "trigger": "reconcile-receipt",
          "actor": "inventory operator",
          "guard": "count, condition, and disposition are reconciled",
          "to": "received",
          "effect": "close the discrepancy with reconciled quantities",
          "retry": "exact retry returns the same reconciliation",
          "verification": "received quantities match the closed discrepancy record"
        },
        {
          "id": "stock-09",
          "from": "review-needed",
          "trigger": "cancel",
          "actor": "inventory operator",
          "guard": "no order was placed and a cancellation reason is present",
          "to": "canceled",
          "effect": "append cancellation decision",
          "retry": "exact retry returns the same cancellation",
          "verification": "canceled signal has no order or inventory movement"
        }
      ],
      "tests": [
        "complete receipt posts one movement",
        "negative quantity is rejected",
        "duplicate receipt preserves one lot",
        "published inventory view exposes discrepancy without changing stock"
      ],
      "failurePath": "A quantity or condition mismatch opens a discrepancy and blocks stock posting until the record reconciles."
    },
    {
      "id": "incident-response",
      "name": "Operational incident response",
      "job": "Coordinate detection, triage, mitigation, recovery, and follow-up without losing the timeline.",
      "owner": "Service owner",
      "initialState": "detected",
      "terminalStates": ["closed"],
      "recoveryTransitionIds": ["incident-08"],
      "states": [
        "detected",
        "triaged",
        "investigating",
        "mitigating",
        "monitoring",
        "resolved",
        "reopened",
        "closed"
      ],
      "transitions": [
        {
          "id": "incident-01",
          "from": "detected",
          "trigger": "triage",
          "actor": "on-call operator",
          "guard": "service, symptom, impact, and start time exist",
          "to": "triaged",
          "effect": "append severity decision",
          "retry": "exact retry returns the same decision",
          "verification": "severity has an owner and rationale"
        },
        {
          "id": "incident-02",
          "from": "triaged",
          "trigger": "investigate",
          "actor": "incident commander",
          "guard": "commander and responder are assigned",
          "to": "investigating",
          "effect": "open investigation timeline",
          "retry": "same key preserves one timeline",
          "verification": "timeline events have stable ids and timestamps"
        },
        {
          "id": "incident-03",
          "from": "investigating",
          "trigger": "start-mitigation",
          "actor": "incident commander",
          "guard": "mitigation action and rollback condition are recorded",
          "to": "mitigating",
          "effect": "append mitigation decision",
          "retry": "exact retry returns the same decision",
          "verification": "decision names expected signal and stop condition"
        },
        {
          "id": "incident-04",
          "from": "mitigating",
          "trigger": "observe-recovery",
          "actor": "service owner",
          "guard": "selected service indicators returned within bounds",
          "to": "monitoring",
          "effect": "record observation window",
          "retry": "same window key preserves one observation",
          "verification": "monitoring window uses actual signal timestamps"
        },
        {
          "id": "incident-05",
          "from": "monitoring",
          "trigger": "resolve",
          "actor": "incident commander",
          "guard": "resolution evidence and follow-up owner exist",
          "to": "resolved",
          "effect": "append resolution event",
          "retry": "exact retry preserves one event",
          "verification": "resolution does not erase the incident timeline"
        },
        {
          "id": "incident-06",
          "from": "resolved",
          "trigger": "regression",
          "actor": "on-call operator",
          "guard": "same impact recurs within the review window",
          "to": "reopened",
          "effect": "append reopen event",
          "retry": "exact retry returns the same reopen event",
          "verification": "reopened incident keeps the original id"
        },
        {
          "id": "incident-07",
          "from": "resolved",
          "trigger": "close",
          "actor": "service owner",
          "guard": "follow-up tasks have owners",
          "to": "closed",
          "effect": "record close decision",
          "retry": "exact retry preserves one close event",
          "verification": "closed incident retains unresolved follow-up tasks"
        },
        {
          "id": "incident-08",
          "from": "reopened",
          "trigger": "resume-investigation",
          "actor": "incident commander",
          "guard": "a responder and investigation owner are assigned",
          "to": "investigating",
          "effect": "append a new investigation phase to the existing timeline",
          "retry": "exact retry returns the same investigation phase",
          "verification": "the reopened incident keeps its original id and ordered timeline"
        }
      ],
      "tests": [
        "triaged incident reaches monitoring",
        "missing impact cannot triage",
        "duplicate mitigation preserves one decision",
        "published status view reflects current state without exposing private notes"
      ],
      "failurePath": "A regression reopens the same incident identity so the timeline remains intact instead of creating misleading duplicate incidents."
    },
    {
      "id": "support-escalation",
      "name": "Support request escalation",
      "job": "Move a durable customer request through assignment, response, escalation, and closure.",
      "owner": "Support operations",
      "initialState": "new",
      "terminalStates": ["closed"],
      "recoveryTransitionIds": ["support-08", "support-09", "support-10"],
      "states": [
        "new",
        "assigned",
        "waiting-on-customer",
        "waiting-on-team",
        "escalated",
        "resolved",
        "reopened",
        "closed"
      ],
      "transitions": [
        {
          "id": "support-01",
          "from": "new",
          "trigger": "assign",
          "actor": "support dispatcher",
          "guard": "queue and eligible assignee exist",
          "to": "assigned",
          "effect": "create assignment event",
          "retry": "same key preserves one assignment",
          "verification": "one current assignee is visible"
        },
        {
          "id": "support-02",
          "from": "assigned",
          "trigger": "request-information",
          "actor": "assigned agent",
          "guard": "question and delivery route are present",
          "to": "waiting-on-customer",
          "effect": "store response and delivery intent",
          "retry": "exact retry preserves one response",
          "verification": "response remains durable if delivery fails"
        },
        {
          "id": "support-03",
          "from": "assigned",
          "trigger": "request-team-help",
          "actor": "assigned agent",
          "guard": "internal owner and bounded context are present",
          "to": "waiting-on-team",
          "effect": "create internal task",
          "retry": "same key preserves one task",
          "verification": "customer-private content is excluded from routine task logs"
        },
        {
          "id": "support-04",
          "from": "waiting-on-team",
          "trigger": "escalate",
          "actor": "support lead",
          "guard": "escalation reason and destination are present",
          "to": "escalated",
          "effect": "append escalation event",
          "retry": "exact retry returns the same event",
          "verification": "escalation changes routing, not the customer record"
        },
        {
          "id": "support-05",
          "from": "assigned",
          "trigger": "resolve",
          "actor": "assigned agent",
          "guard": "resolution note and current version are present",
          "to": "resolved",
          "effect": "append resolution event",
          "retry": "exact retry preserves one event",
          "verification": "resolution can be audited by request id"
        },
        {
          "id": "support-06",
          "from": "resolved",
          "trigger": "customer-replies",
          "actor": "request owner",
          "guard": "reply arrives inside reopen policy",
          "to": "reopened",
          "effect": "append reply and reopen event",
          "retry": "same delivery id preserves one reply",
          "verification": "reopened request retains the original history"
        },
        {
          "id": "support-07",
          "from": "resolved",
          "trigger": "close",
          "actor": "support system",
          "guard": "reopen window elapsed",
          "to": "closed",
          "effect": "append close event",
          "retry": "same job key preserves one close event",
          "verification": "closed request follows retention policy"
        },
        {
          "id": "support-08",
          "from": "waiting-on-customer",
          "trigger": "customer-replies",
          "actor": "request owner",
          "guard": "reply belongs to the request and passes access checks",
          "to": "assigned",
          "effect": "append the reply and resume the assignment",
          "retry": "same delivery id preserves one reply",
          "verification": "the assigned request retains the waiting history"
        },
        {
          "id": "support-09",
          "from": "escalated",
          "trigger": "accept-escalation",
          "actor": "escalation owner",
          "guard": "the destination team accepted ownership",
          "to": "assigned",
          "effect": "record the new assignment owner",
          "retry": "same acceptance key preserves one assignment",
          "verification": "the request has one current assignee and retains the escalation event"
        },
        {
          "id": "support-10",
          "from": "reopened",
          "trigger": "reassign",
          "actor": "support dispatcher",
          "guard": "an eligible agent and queue are selected",
          "to": "assigned",
          "effect": "append a reopened assignment event",
          "retry": "same key preserves one reopened assignment",
          "verification": "the original request history and current assignee are visible"
        }
      ],
      "tests": [
        "assigned request resolves",
        "unassigned agent cannot resolve",
        "duplicate customer delivery preserves one reply",
        "published support portal prevents cross-account request access"
      ],
      "failurePath": "A delivery failure does not remove a saved response, and escalation changes routing without silently deciding the request."
    },
    {
      "id": "subscription-renewal",
      "name": "Subscription renewal review",
      "job": "Coordinate a local access decision around provider evidence without treating a browser return as payment proof.",
      "owner": "Billing operations",
      "initialState": "renewal-due",
      "terminalStates": ["renewed", "expired", "canceled"],
      "recoveryTransitionIds": ["renewal-07"],
      "states": [
        "renewal-due",
        "payment-pending",
        "provider-evidence-received",
        "reconciliation-needed",
        "renewed",
        "expired",
        "canceled"
      ],
      "transitions": [
        {
          "id": "renewal-01",
          "from": "renewal-due",
          "trigger": "start-checkout",
          "actor": "account owner",
          "guard": "plan and account are current",
          "to": "payment-pending",
          "effect": "create provider attempt reference",
          "retry": "same attempt key returns the existing reference",
          "verification": "local record does not say paid"
        },
        {
          "id": "renewal-02",
          "from": "payment-pending",
          "trigger": "receive-provider-event",
          "actor": "verified provider boundary",
          "guard": "signature and stable event identity pass",
          "to": "provider-evidence-received",
          "effect": "store provider evidence once",
          "retry": "exact provider event returns the prior result",
          "verification": "one provider event id maps to one evidence record"
        },
        {
          "id": "renewal-03",
          "from": "provider-evidence-received",
          "trigger": "apply-access",
          "actor": "billing worker",
          "guard": "provider state maps to current local policy",
          "to": "renewed",
          "effect": "append local access transition",
          "retry": "same transition key preserves one access event",
          "verification": "paid-through time follows the local policy"
        },
        {
          "id": "renewal-04",
          "from": "provider-evidence-received",
          "trigger": "local-write-fails",
          "actor": "billing worker",
          "guard": "provider evidence is durable",
          "to": "reconciliation-needed",
          "effect": "create reconciliation item",
          "retry": "worker lease prevents duplicate repairs",
          "verification": "provider evidence remains intact while access is unchanged"
        },
        {
          "id": "renewal-05",
          "from": "renewal-due",
          "trigger": "expire",
          "actor": "billing system",
          "guard": "paid-through and grace policy elapsed",
          "to": "expired",
          "effect": "append expiry event",
          "retry": "same job key preserves one expiry",
          "verification": "expiry and renewal race uses expected version"
        },
        {
          "id": "renewal-06",
          "from": "renewal-due",
          "trigger": "cancel",
          "actor": "account owner",
          "guard": "cancellation policy permits current action",
          "to": "canceled",
          "effect": "record cancellation choice",
          "retry": "exact retry returns the same choice",
          "verification": "effective access end remains explicit"
        },
        {
          "id": "renewal-07",
          "from": "reconciliation-needed",
          "trigger": "reconcile-access",
          "actor": "billing operator",
          "guard": "provider evidence and current local policy were rechecked",
          "to": "renewed",
          "effect": "append the reconciled local access transition",
          "retry": "same repair key preserves one access event",
          "verification": "provider evidence, repair record, and paid-through time reconcile"
        }
      ],
      "tests": [
        "verified evidence renews local access",
        "browser return cannot mark paid",
        "duplicate provider event preserves one evidence row",
        "published account path reconciles provider success and local failure"
      ],
      "failurePath": "Provider success plus a failed local access write opens reconciliation; it never discards provider evidence or repeats a charge."
    },
    {
      "id": "data-import",
      "name": "Data import batch",
      "job": "Preview, validate, commit, and reconcile an uploaded batch with row-level results.",
      "owner": "Data operations",
      "initialState": "uploaded",
      "terminalStates": ["committed", "canceled"],
      "recoveryTransitionIds": ["import-08", "import-09"],
      "states": [
        "uploaded",
        "mapped",
        "validated",
        "changes-required",
        "ready",
        "committing",
        "committed",
        "partial-failure",
        "canceled"
      ],
      "transitions": [
        {
          "id": "import-01",
          "from": "uploaded",
          "trigger": "map-fields",
          "actor": "import owner",
          "guard": "source headers and destination fields are known",
          "to": "mapped",
          "effect": "store mapping version",
          "retry": "exact retry returns the mapping version",
          "verification": "mapping names every required destination field"
        },
        {
          "id": "import-02",
          "from": "mapped",
          "trigger": "validate",
          "actor": "validation worker",
          "guard": "mapping version still matches",
          "to": "validated",
          "effect": "write row-level preview results",
          "retry": "same batch and mapping reuse results",
          "verification": "accepted, rejected, and ambiguous counts reconcile"
        },
        {
          "id": "import-03",
          "from": "validated",
          "trigger": "reject-preview",
          "actor": "import owner",
          "guard": "one or more blocking rows exist",
          "to": "changes-required",
          "effect": "record review decision",
          "retry": "exact retry preserves one decision",
          "verification": "no destination records are written"
        },
        {
          "id": "import-04",
          "from": "validated",
          "trigger": "accept-preview",
          "actor": "import owner",
          "guard": "blocking rows are resolved or excluded",
          "to": "ready",
          "effect": "freeze accepted row ids",
          "retry": "same key preserves one accepted set",
          "verification": "accepted rows match the preview version"
        },
        {
          "id": "import-05",
          "from": "ready",
          "trigger": "commit",
          "actor": "import worker",
          "guard": "batch lease and accepted set are current",
          "to": "committing",
          "effect": "begin idempotent row writes",
          "retry": "stable source-row keys return existing results",
          "verification": "each source row has one result identity"
        },
        {
          "id": "import-06",
          "from": "committing",
          "trigger": "finish",
          "actor": "import worker",
          "guard": "all accepted rows have terminal results",
          "to": "committed",
          "effect": "write batch summary",
          "retry": "same batch returns the summary",
          "verification": "summary equals row-level results"
        },
        {
          "id": "import-07",
          "from": "committing",
          "trigger": "worker-error",
          "actor": "import worker",
          "guard": "some rows lack terminal results",
          "to": "partial-failure",
          "effect": "record resumable cursor",
          "retry": "resume skips completed source-row keys",
          "verification": "retry does not duplicate completed rows"
        },
        {
          "id": "import-08",
          "from": "changes-required",
          "trigger": "revise-mapping",
          "actor": "import owner",
          "guard": "a new mapping version addresses the blocking rows",
          "to": "mapped",
          "effect": "store the revised mapping version",
          "retry": "same version key returns the existing mapping",
          "verification": "the prior preview and review decision remain traceable"
        },
        {
          "id": "import-09",
          "from": "partial-failure",
          "trigger": "resume",
          "actor": "import worker",
          "guard": "the batch lease is available and the cursor is valid",
          "to": "committing",
          "effect": "record a resumed worker attempt",
          "retry": "resume skips completed source-row keys",
          "verification": "completed rows retain one result while remaining rows continue"
        },
        {
          "id": "import-10",
          "from": "uploaded",
          "trigger": "cancel",
          "actor": "import owner",
          "guard": "no destination writes began and a reason is present",
          "to": "canceled",
          "effect": "append cancellation decision",
          "retry": "exact retry returns the same cancellation",
          "verification": "the canceled batch has no destination row results"
        }
      ],
      "tests": [
        "valid preview commits accepted rows",
        "unknown required field blocks readiness",
        "retry after worker error skips completed rows",
        "published import view reconciles batch and row counts"
      ],
      "failurePath": "A partial worker failure records a cursor and row identities so a resume cannot duplicate completed writes."
    },
    {
      "id": "release-checklist",
      "name": "Release checklist",
      "job": "Move one immutable release candidate through checks, publication, observation, and rollback decision.",
      "owner": "Release owner",
      "initialState": "candidate",
      "terminalStates": ["released", "rolled-back", "canceled"],
      "recoveryTransitionIds": ["release-07", "release-08"],
      "states": [
        "candidate",
        "checking",
        "blocked",
        "ready",
        "publishing",
        "observing",
        "released",
        "rollback-needed",
        "rolled-back",
        "canceled"
      ],
      "transitions": [
        {
          "id": "release-01",
          "from": "candidate",
          "trigger": "start-checks",
          "actor": "release owner",
          "guard": "version, immutable build id, scope, and rollback target exist",
          "to": "checking",
          "effect": "create check run",
          "retry": "same candidate returns the active run",
          "verification": "check run names the exact build id"
        },
        {
          "id": "release-02",
          "from": "checking",
          "trigger": "check-fails",
          "actor": "check runner",
          "guard": "one required check has evidence",
          "to": "blocked",
          "effect": "record failed check",
          "retry": "same check attempt preserves one result",
          "verification": "candidate remains unpublished"
        },
        {
          "id": "release-03",
          "from": "checking",
          "trigger": "checks-pass",
          "actor": "check runner",
          "guard": "every required check passed for the build id",
          "to": "ready",
          "effect": "freeze release evidence",
          "retry": "same evidence hash preserves readiness",
          "verification": "readiness references the immutable candidate"
        },
        {
          "id": "release-04",
          "from": "ready",
          "trigger": "publish",
          "actor": "release owner",
          "guard": "authorization and current ready version match",
          "to": "publishing",
          "effect": "create deployment attempt",
          "retry": "same attempt returns the existing deployment id",
          "verification": "deployment names target and build id"
        },
        {
          "id": "release-05",
          "from": "publishing",
          "trigger": "smoke-passes",
          "actor": "release verifier",
          "guard": "target checks observe the new build",
          "to": "observing",
          "effect": "record observation window",
          "retry": "exact retry preserves one window",
          "verification": "target reports the intended version"
        },
        {
          "id": "release-06",
          "from": "observing",
          "trigger": "kill-gate",
          "actor": "release owner",
          "guard": "predeclared rollback threshold is met",
          "to": "rollback-needed",
          "effect": "record rollback decision",
          "retry": "exact retry preserves one decision",
          "verification": "decision cites the threshold and evidence"
        },
        {
          "id": "release-07",
          "from": "rollback-needed",
          "trigger": "rollback",
          "actor": "release owner",
          "guard": "tested rollback target is available",
          "to": "rolled-back",
          "effect": "create rollback deployment attempt",
          "retry": "same attempt returns the existing id",
          "verification": "target reports the rollback version"
        },
        {
          "id": "release-08",
          "from": "blocked",
          "trigger": "rerun-checks",
          "actor": "release owner",
          "guard": "the failed check was addressed without changing the build id",
          "to": "checking",
          "effect": "create a new check run for the same candidate",
          "retry": "same retry key returns the active check run",
          "verification": "the new run and prior failure name the same immutable build id"
        },
        {
          "id": "release-09",
          "from": "candidate",
          "trigger": "cancel",
          "actor": "release owner",
          "guard": "publication has not started and a reason is present",
          "to": "canceled",
          "effect": "append cancellation decision",
          "retry": "exact retry returns the same cancellation",
          "verification": "the canceled candidate has no deployment attempt"
        },
        {
          "id": "release-10",
          "from": "observing",
          "trigger": "complete-observation",
          "actor": "release owner",
          "guard": "the observation window ended without crossing a kill gate",
          "to": "released",
          "effect": "record the completed release observation",
          "retry": "exact retry preserves one release completion",
          "verification": "the released record names the target, build id, and observation evidence"
        }
      ],
      "tests": [
        "passing candidate enters observation",
        "missing rollback target blocks checks",
        "duplicate publish preserves one deployment attempt",
        "published target reports version before observation begins"
      ],
      "failurePath": "A failed check blocks publication, while a post-publication kill gate records a separate rollback decision against the exact candidate."
    }
  ]
}
