{
  "request_count": 7,
  "high_risk_count": 4,
  "blocked_until_provider_approved_count": 0,
  "fixture_mode_requires_credentials": false,
  "live_enablement_allowed": false,
  "redaction_rules": [
    "remove API keys, account ids, request signatures, and auth headers",
    "replace real player names only if licensing or provider terms require it",
    "preserve field names, nesting, types, timestamps, and representative nulls",
    "include one normal record and one edge-case record when possible",
    "do not include sportsbook account, user, stake, or wager history data"
  ],
  "requests": [
    {
      "source_key": "schedule",
      "label": "Game Metadata",
      "risk_level": "Medium",
      "decision_state": "approved_pending_schema",
      "provider_hint": "nflverse/nflreadpy schedules",
      "sample_file_name": "schedule_sample.json",
      "sample_count_required": 2,
      "required_fields": [
        "game_id",
        "season",
        "week",
        "kickoff_time",
        "home_team",
        "away_team",
        "game_window"
      ],
      "optional_fields": [
        "venue",
        "surface",
        "roof",
        "international_or_holiday"
      ],
      "template_record": {
        "game_id": "2026_01_DAL_PHI",
        "season": 2026,
        "week": 1,
        "kickoff_time": "2026-09-10T20:20:00-04:00",
        "home_team": "PHI",
        "away_team": "DAL",
        "game_window": "Thursday",
        "venue": "<venue>",
        "surface": "<surface>",
        "roof": "<roof>",
        "international_or_holiday": "<international_or_holiday>"
      },
      "approval_proof": [
        "sanitized schedule schema sample",
        "stable game_id and kickoff_time mapping",
        "game-window classification verified"
      ],
      "redaction_rules": [
        "remove API keys, account ids, request signatures, and auth headers",
        "replace real player names only if licensing or provider terms require it",
        "preserve field names, nesting, types, timestamps, and representative nulls",
        "include one normal record and one edge-case record when possible",
        "do not include sportsbook account, user, stake, or wager history data"
      ],
      "blocked_until_provider_approved": false,
      "approved_for_adapter_planning": true,
      "fixture_mode_requires_credentials": false
    },
    {
      "source_key": "odds",
      "label": "Market Lines",
      "risk_level": "High",
      "decision_state": "approved_pending_schema",
      "provider_hint": "odds API",
      "sample_file_name": "odds_sample.json",
      "sample_count_required": 2,
      "required_fields": [
        "game_id",
        "market",
        "side",
        "line",
        "odds",
        "sportsbook",
        "odds_updated_at"
      ],
      "optional_fields": [
        "over_odds",
        "under_odds",
        "book_count",
        "best_book",
        "best_line",
        "best_odds"
      ],
      "template_record": {
        "game_id": "2026_01_DAL_PHI",
        "market": "receiving_yards",
        "side": "Over",
        "line": 50.5,
        "odds": -110,
        "sportsbook": "ExampleBook",
        "odds_updated_at": "2026-09-10T19:55:00-04:00",
        "over_odds": "<over_odds>",
        "under_odds": "<under_odds>",
        "book_count": "<book_count>",
        "best_book": "<best_book>",
        "best_line": "<best_line>",
        "best_odds": "<best_odds>"
      },
      "approval_proof": [
        "sanitized player-prop and team-market samples",
        "book, line, odds, and update timestamp present",
        "publish-time refresh path documented",
        "best-line shopping fields preserved"
      ],
      "redaction_rules": [
        "remove API keys, account ids, request signatures, and auth headers",
        "replace real player names only if licensing or provider terms require it",
        "preserve field names, nesting, types, timestamps, and representative nulls",
        "include one normal record and one edge-case record when possible",
        "do not include sportsbook account, user, stake, or wager history data"
      ],
      "blocked_until_provider_approved": false,
      "approved_for_adapter_planning": true,
      "fixture_mode_requires_credentials": false
    },
    {
      "source_key": "usage",
      "label": "Usage and Role",
      "risk_level": "High",
      "decision_state": "approved_pending_schema",
      "provider_hint": "nflverse/nflreadpy participation where available",
      "sample_file_name": "usage_sample.json",
      "sample_count_required": 2,
      "required_fields": [
        "player_id",
        "player_name",
        "team",
        "position",
        "role_context_available"
      ],
      "optional_fields": [
        "snap_share",
        "route_share",
        "target_share",
        "rush_share",
        "red_zone_role",
        "goal_line_role"
      ],
      "template_record": {
        "player_id": "00-001",
        "player_name": "Example Player",
        "team": "DAL",
        "position": "WR",
        "role_context_available": true,
        "snap_share": "<snap_share>",
        "route_share": "<route_share>",
        "target_share": "<target_share>",
        "rush_share": "<rush_share>",
        "red_zone_role": "<red_zone_role>",
        "goal_line_role": "<goal_line_role>"
      },
      "approval_proof": [
        "sanitized usage/participation sample",
        "role fields available before grading",
        "cold-start baseline behavior documented"
      ],
      "redaction_rules": [
        "remove API keys, account ids, request signatures, and auth headers",
        "replace real player names only if licensing or provider terms require it",
        "preserve field names, nesting, types, timestamps, and representative nulls",
        "include one normal record and one edge-case record when possible",
        "do not include sportsbook account, user, stake, or wager history data"
      ],
      "blocked_until_provider_approved": false,
      "approved_for_adapter_planning": true,
      "fixture_mode_requires_credentials": false
    },
    {
      "source_key": "injuries",
      "label": "Injuries and Inactives",
      "risk_level": "High",
      "decision_state": "approved_pending_schema",
      "provider_hint": "official team reports and 90-minute inactive report",
      "sample_file_name": "injuries_sample.json",
      "sample_count_required": 2,
      "required_fields": [
        "inactive_state",
        "injury_news_timestamp",
        "projection_includes_injury_news"
      ],
      "optional_fields": [
        "player_injury_status",
        "player_injury_designation",
        "teammate_absence_boost",
        "next_man_up_role"
      ],
      "template_record": {
        "inactive_state": "POST_INACTIVES_CONFIRMED",
        "injury_news_timestamp": "2026-09-10T18:50:00-04:00",
        "projection_includes_injury_news": true,
        "player_injury_status": "<player_injury_status>",
        "player_injury_designation": "<player_injury_designation>",
        "teammate_absence_boost": "<teammate_absence_boost>",
        "next_man_up_role": "<next_man_up_role>"
      },
      "approval_proof": [
        "official inactive-report sample",
        "injury timestamp sample",
        "projection latency check documented",
        "next-man-up and defensive injury fields represented"
      ],
      "redaction_rules": [
        "remove API keys, account ids, request signatures, and auth headers",
        "replace real player names only if licensing or provider terms require it",
        "preserve field names, nesting, types, timestamps, and representative nulls",
        "include one normal record and one edge-case record when possible",
        "do not include sportsbook account, user, stake, or wager history data"
      ],
      "blocked_until_provider_approved": false,
      "approved_for_adapter_planning": true,
      "fixture_mode_requires_credentials": false
    },
    {
      "source_key": "team_context",
      "label": "Team Context",
      "risk_level": "High",
      "decision_state": "approved_pending_schema",
      "provider_hint": "derived from market, nflverse/nflreadpy, and baseline model inputs",
      "sample_file_name": "team_context_sample.json",
      "sample_count_required": 2,
      "required_fields": [
        "team_context_available",
        "team_total",
        "spread",
        "game_total",
        "implied_team_points"
      ],
      "optional_fields": [
        "pace",
        "proe",
        "efficiency",
        "rest_days",
        "travel_spot",
        "off_bye"
      ],
      "template_record": {
        "team_context_available": true,
        "team_total": 22.5,
        "spread": 3.5,
        "game_total": 48.5,
        "implied_team_points": 22.5,
        "pace": "<pace>",
        "proe": "<proe>",
        "efficiency": "<efficiency>",
        "rest_days": "<rest_days>",
        "travel_spot": "<travel_spot>",
        "off_bye": "<off_bye>"
      },
      "approval_proof": [
        "independent model inputs documented",
        "team total derivation separated from graded edge",
        "pace, efficiency, and game-script fields represented"
      ],
      "redaction_rules": [
        "remove API keys, account ids, request signatures, and auth headers",
        "replace real player names only if licensing or provider terms require it",
        "preserve field names, nesting, types, timestamps, and representative nulls",
        "include one normal record and one edge-case record when possible",
        "do not include sportsbook account, user, stake, or wager history data"
      ],
      "blocked_until_provider_approved": false,
      "approved_for_adapter_planning": true,
      "fixture_mode_requires_credentials": false
    },
    {
      "source_key": "matchup",
      "label": "Defensive Matchup",
      "risk_level": "Medium",
      "decision_state": "approved_pending_schema",
      "provider_hint": "nflverse/nflreadpy plus optional PFF/FTN enrichment",
      "sample_file_name": "matchup_sample.json",
      "sample_count_required": 2,
      "required_fields": [
        "defensive_rank",
        "matchup_sample_games"
      ],
      "optional_fields": [
        "sos_adjusted",
        "defensive_injury_matchup_delta",
        "opponent_secondary_injury_count"
      ],
      "template_record": {
        "defensive_rank": 9,
        "matchup_sample_games": 5,
        "sos_adjusted": "<sos_adjusted>",
        "defensive_injury_matchup_delta": "<defensive_injury_matchup_delta>",
        "opponent_secondary_injury_count": "<opponent_secondary_injury_count>"
      },
      "approval_proof": [
        "stat-specific defensive rank sample",
        "rank direction normalized so rank 1 is favorable",
        "recent-window sample size included",
        "sos_adjusted flag represented"
      ],
      "redaction_rules": [
        "remove API keys, account ids, request signatures, and auth headers",
        "replace real player names only if licensing or provider terms require it",
        "preserve field names, nesting, types, timestamps, and representative nulls",
        "include one normal record and one edge-case record when possible",
        "do not include sportsbook account, user, stake, or wager history data"
      ],
      "blocked_until_provider_approved": false,
      "approved_for_adapter_planning": true,
      "fixture_mode_requires_credentials": false
    },
    {
      "source_key": "weather",
      "label": "Weather",
      "risk_level": "Medium",
      "decision_state": "approved_pending_schema",
      "provider_hint": "weather API",
      "sample_file_name": "weather_sample.json",
      "sample_count_required": 2,
      "required_fields": [
        "game_id",
        "wind_speed",
        "wind_direction",
        "precipitation",
        "temperature"
      ],
      "optional_fields": [
        "roof_status",
        "field_condition"
      ],
      "template_record": {
        "game_id": "2026_01_DAL_PHI",
        "wind_speed": 8,
        "wind_direction": "NW",
        "precipitation": 0.0,
        "temperature": 68,
        "roof_status": "<roof_status>",
        "field_condition": "<field_condition>"
      },
      "approval_proof": [
        "wind speed and direction sample",
        "roof/venue handling documented",
        "same-day refresh timing documented"
      ],
      "redaction_rules": [
        "remove API keys, account ids, request signatures, and auth headers",
        "replace real player names only if licensing or provider terms require it",
        "preserve field names, nesting, types, timestamps, and representative nulls",
        "include one normal record and one edge-case record when possible",
        "do not include sportsbook account, user, stake, or wager history data"
      ],
      "blocked_until_provider_approved": false,
      "approved_for_adapter_planning": true,
      "fixture_mode_requires_credentials": false
    }
  ]
}