{
  "rehearsal_ready": false,
  "current_phase": "offline_prep",
  "provider_calls_allowed": false,
  "live_publish_allowed": false,
  "no_call_safe": true,
  "decision_count": 4,
  "calls_only_supported": true,
  "request_group_count": 2,
  "total_market_count": 15,
  "schedule_event_id_required": true,
  "provider_sample_bundle_complete": true,
  "provider_sample_source_health_gate": "REVIEW",
  "quota_gate_stage": "operator_review",
  "live_call_quota_blocker": true,
  "rehearsal_blocker_count": 3,
  "rehearsal_blockers": [
    "activation phase is offline_prep",
    "human provider/live decisions are still open",
    "live call quota gate is operator_review"
  ],
  "safe_to_start_calls_only": false,
  "publish_remains_disabled": true,
  "source_count": 7,
  "would_call_count": 0,
  "provider_rows": [
    {
      "source_key": "schedule",
      "source_label": "Game Metadata",
      "dry_run_status": "BLOCKED_NO_CALL",
      "would_call_provider": false,
      "blocked_reason": "provider calls disabled in mode=live_no_call",
      "provider_sample_ready": true,
      "rehearsal_action": "validate_normalized_shape_after_approval",
      "required_before_callable": [
        "human_provider_approval",
        "runtime_calls_only_mode",
        "quota_available",
        "sample_contract_valid"
      ]
    },
    {
      "source_key": "odds",
      "source_label": "Market Lines",
      "dry_run_status": "BLOCKED_NO_CALL",
      "would_call_provider": false,
      "blocked_reason": "provider calls disabled in mode=live_no_call",
      "provider_sample_ready": true,
      "rehearsal_action": "validate_normalized_shape_after_approval",
      "required_before_callable": [
        "human_provider_approval",
        "runtime_calls_only_mode",
        "quota_available",
        "sample_contract_valid"
      ]
    },
    {
      "source_key": "usage",
      "source_label": "Usage and Role",
      "dry_run_status": "BLOCKED_NO_CALL",
      "would_call_provider": false,
      "blocked_reason": "provider calls disabled in mode=live_no_call",
      "provider_sample_ready": true,
      "rehearsal_action": "validate_normalized_shape_after_approval",
      "required_before_callable": [
        "human_provider_approval",
        "runtime_calls_only_mode",
        "quota_available",
        "sample_contract_valid"
      ]
    },
    {
      "source_key": "injuries",
      "source_label": "Injuries and Inactives",
      "dry_run_status": "BLOCKED_NO_CALL",
      "would_call_provider": false,
      "blocked_reason": "provider calls disabled in mode=live_no_call",
      "provider_sample_ready": true,
      "rehearsal_action": "validate_normalized_shape_after_approval",
      "required_before_callable": [
        "human_provider_approval",
        "runtime_calls_only_mode",
        "quota_available",
        "sample_contract_valid"
      ]
    },
    {
      "source_key": "team_context",
      "source_label": "Team Context",
      "dry_run_status": "BLOCKED_NO_CALL",
      "would_call_provider": false,
      "blocked_reason": "provider calls disabled in mode=live_no_call",
      "provider_sample_ready": true,
      "rehearsal_action": "validate_normalized_shape_after_approval",
      "required_before_callable": [
        "human_provider_approval",
        "runtime_calls_only_mode",
        "quota_available",
        "sample_contract_valid"
      ]
    },
    {
      "source_key": "matchup",
      "source_label": "Defensive Matchup",
      "dry_run_status": "BLOCKED_NO_CALL",
      "would_call_provider": false,
      "blocked_reason": "provider calls disabled in mode=live_no_call",
      "provider_sample_ready": true,
      "rehearsal_action": "validate_normalized_shape_after_approval",
      "required_before_callable": [
        "human_provider_approval",
        "runtime_calls_only_mode",
        "quota_available",
        "sample_contract_valid"
      ]
    },
    {
      "source_key": "weather",
      "source_label": "Weather",
      "dry_run_status": "BLOCKED_NO_CALL",
      "would_call_provider": false,
      "blocked_reason": "provider calls disabled in mode=live_no_call",
      "provider_sample_ready": true,
      "rehearsal_action": "validate_normalized_shape_after_approval",
      "required_before_callable": [
        "human_provider_approval",
        "runtime_calls_only_mode",
        "quota_available",
        "sample_contract_valid"
      ]
    }
  ],
  "rehearsal_sequence": [
    {
      "order": 1,
      "step": "confirm_human_decisions",
      "owner": "Ryan/Sacboyz decision"
    },
    {
      "order": 2,
      "step": "switch_to_calls_only_mode",
      "owner": "Codex/provider review"
    },
    {
      "order": 3,
      "step": "fetch_and_cache_provider_payloads",
      "owner": "Codex/provider review"
    },
    {
      "order": 4,
      "step": "normalize_and_validate_contracts",
      "owner": "Codex"
    },
    {
      "order": 5,
      "step": "return_to_no_call_if_any_gate_fails",
      "owner": "Codex"
    }
  ],
  "rehearsal_steps": [
    "Confirm human decisions are cleared in the decision request artifact.",
    "Switch only to calls-only mode after explicit approval.",
    "Fetch provider data without live publishing.",
    "Normalize provider payloads into existing contracts.",
    "Run artifact validation and publish-time gates before any publish review."
  ],
  "next_action": "Stay in no-call rehearsal until decision request, quota, season/window, and go/no-go gates clear."
}