{ "$schema": "https://json-schema.org/draft/2020-12/schema", "$id": "https://cosmic-clash.invalid/contracts/v1/state-transitions.json", "version": 1, "resource_states": { "queue_ticket": ["QUEUED", "PROPOSED", "ACCEPTED", "ALLOCATING", "PROCESS_READY", "ASSIGNMENT_READY", "ASSIGNED", "CONNECTING", "LIVE", "RESULT_PENDING", "COMPLETED", "CANCELLED", "EXPIRED", "FAILED"], "proposal": ["OPEN", "ACCEPTED", "DECLINED", "EXPIRED", "CANCELLED"], "match": ["ALLOCATING", "PROCESS_READY", "ASSIGNMENT_READY", "ASSIGNED", "CONNECTING", "LIVE", "RESULT_PENDING", "COMPLETED", "CANCELLED", "FAILED"] }, "transitions": { "queue_ticket": { "QUEUED": ["PROPOSED", "CANCELLED", "EXPIRED"], "PROPOSED": ["QUEUED", "ACCEPTED", "CANCELLED", "EXPIRED"], "ACCEPTED": ["QUEUED", "ALLOCATING", "CANCELLED", "FAILED"], "ALLOCATING": ["PROCESS_READY", "FAILED", "CANCELLED"], "PROCESS_READY": ["ASSIGNMENT_READY", "FAILED", "CANCELLED"], "ASSIGNMENT_READY": ["ASSIGNED", "FAILED", "CANCELLED"], "ASSIGNED": ["CONNECTING", "FAILED", "CANCELLED"], "CONNECTING": ["LIVE", "FAILED", "EXPIRED"], "LIVE": ["RESULT_PENDING", "FAILED"], "RESULT_PENDING": ["COMPLETED", "FAILED"], "COMPLETED": [], "CANCELLED": [], "EXPIRED": [], "FAILED": [] }, "proposal": { "OPEN": ["ACCEPTED", "DECLINED", "EXPIRED", "CANCELLED"], "ACCEPTED": [], "DECLINED": [], "EXPIRED": [], "CANCELLED": [] }, "match": { "ALLOCATING": ["PROCESS_READY", "FAILED", "CANCELLED"], "PROCESS_READY": ["ASSIGNMENT_READY", "FAILED", "CANCELLED"], "ASSIGNMENT_READY": ["ASSIGNED", "FAILED", "CANCELLED"], "ASSIGNED": ["CONNECTING", "FAILED", "CANCELLED"], "CONNECTING": ["LIVE", "FAILED", "CANCELLED"], "LIVE": ["RESULT_PENDING", "FAILED"], "RESULT_PENDING": ["COMPLETED", "FAILED"], "COMPLETED": [], "CANCELLED": [], "FAILED": [] } }, "mutation_rules": { "required_headers": ["Idempotency-Key", "If-Match-Revision"], "same_key_same_payload": "return_original_result_without_new_revision", "same_key_different_payload": "reject_conflict_without_state_change", "stale_revision": "reject_conflict_without_state_change", "event_revision": "strictly_increases_per_resource", "event_recovery": "REST_get_by_resource_id_then_resume_from_next_revision" } }