{
  "provider_decisions_valid": true,
  "missing_decision_lines": [],
  "provider_count": 7,
  "provider_ids": [
    "derived_nflverse_odds",
    "manual_csv_overrides",
    "nflverse_nflreadpy",
    "open_meteo",
    "the_odds_api"
  ],
  "credentialed_source_count": 1,
  "credentialed_sources": [
    "odds"
  ],
  "live_calls_default_enabled": false,
  "live_default_enabled_sources": [],
  "provider_calls_enabled": false,
  "fixture_mode_requires_credentials": false,
  "live_enablement_allowed": false,
  "adapter_planning_approved_count": 7,
  "adapter_planning_approved_sources": [
    "injuries",
    "matchup",
    "odds",
    "schedule",
    "team_context",
    "usage",
    "weather"
  ],
  "live_call_approved_count": 0,
  "live_call_approved_sources": [],
  "live_call_approval_required_count": 7,
  "provider_approval_state": "adapter_planning_only",
  "all_provider_defaults_documented": true,
  "providers": [
    {
      "source_key": "schedule",
      "provider_id": "nflverse_nflreadpy",
      "label": "nflverse/nflreadpy schedules",
      "status": "approved_for_adapter_planning",
      "credential_vars": [],
      "requires_key_for_v1": false,
      "live_calls_default_enabled": false,
      "notes": "Primary local/historical schedule source; live calls remain disabled by runtime mode."
    },
    {
      "source_key": "odds",
      "provider_id": "the_odds_api",
      "label": "The Odds API",
      "status": "approved_for_adapter_planning",
      "credential_vars": [
        "ODDS_API_KEY"
      ],
      "requires_key_for_v1": true,
      "live_calls_default_enabled": false,
      "notes": "Primary NFL odds, sportsbook consensus, market mapping, and line-shopping provider."
    },
    {
      "source_key": "usage",
      "provider_id": "nflverse_nflreadpy",
      "label": "nflverse/nflreadpy usage and weekly stats",
      "status": "approved_for_adapter_planning",
      "credential_vars": [],
      "requires_key_for_v1": false,
      "live_calls_default_enabled": false,
      "notes": "Primary baseline projection and usage source; third-party projections are optional later."
    },
    {
      "source_key": "injuries",
      "provider_id": "manual_csv_overrides",
      "label": "Manual CSV injury and inactive overrides",
      "status": "approved_for_v1_manual",
      "credential_vars": [],
      "requires_key_for_v1": false,
      "live_calls_default_enabled": false,
      "notes": "V1 fail-closed source for role/injury overrides until an official inactive provider is selected."
    },
    {
      "source_key": "team_context",
      "provider_id": "derived_nflverse_odds",
      "label": "Derived nflverse plus market context",
      "status": "approved_for_adapter_planning",
      "credential_vars": [],
      "requires_key_for_v1": false,
      "live_calls_default_enabled": false,
      "notes": "Derived from nflverse/nflreadpy, independent model inputs, and sportsbook context without circular edge claims."
    },
    {
      "source_key": "matchup",
      "provider_id": "nflverse_nflreadpy",
      "label": "nflverse/nflreadpy defensive matchup baselines",
      "status": "approved_for_adapter_planning",
      "credential_vars": [],
      "requires_key_for_v1": false,
      "live_calls_default_enabled": false,
      "notes": "Raw/SOS-flagged V1 defensive matchup source; paid enrichments are V1.5/V2 only."
    },
    {
      "source_key": "weather",
      "provider_id": "open_meteo",
      "label": "Open-Meteo",
      "status": "approved_for_adapter_planning",
      "credential_vars": [],
      "requires_key_for_v1": false,
      "live_calls_default_enabled": false,
      "notes": "Free-first weather source for wind, temperature, and precipitation. No API key required for V1 planning."
    }
  ],
  "optional_future_providers": {
    "sportsdataio": "Optional only if existing keys/config/scripts are already present; not required for V1.",
    "pff_ftn_paid": "Potential V1.5/V2 enrichment for routes, participation, injuries, and matchup context.",
    "premium_odds": "Optional V1.5/V2 market comparison source after The Odds API path is stable."
  },
  "next_action": "Provider defaults are approved for no-call adapter planning only. Require separate human approval before live provider calls or publishing."
}