{
  "$schema":"https://json-schema.org/draft/2020-12/schema",
  "$id":"https://compo.kluchna24.ru/schemas/compo-creative-engine/v1/creative-job-state-machine.json",
  "schema":"compo-creative-engine/v1/creative-job-state-machine",
  "initial_state":"accepted",
  "terminal_states":["approved","rejected","failed","cancelled"],
  "transitions":[
    {"from":"accepted","to":"queued","event":"enqueue"},
    {"from":"queued","to":"analyzing","event":"start_analysis"},
    {"from":"analyzing","to":"planning","event":"analysis_complete"},
    {"from":"planning","to":"rendering","event":"plan_complete"},
    {"from":"rendering","to":"awaiting_review","event":"draft_ready","requires_review":true},
    {"from":"awaiting_review","to":"approved","event":"owner_approve","requires_review":true},
    {"from":"awaiting_review","to":"rejected","event":"owner_reject","requires_review":true},
    {"from":"queued","to":"cancelled","event":"owner_cancel"},
    {"from":"analyzing","to":"failed","event":"analysis_error"},
    {"from":"planning","to":"failed","event":"planning_error"},
    {"from":"rendering","to":"failed","event":"render_error"}
  ],
  "invariants":[
    "approved requires a human review decision",
    "rejected and failed are not auto-retried without a new job attempt",
    "terminal states have no outgoing transitions",
    "scene_ref is required when status is awaiting_review or approved"
  ]
}
