{
  "ready_for_remote_import": true,
  "source": "docs\\NFL_BUILD_BACKLOG.md",
  "label_count": 33,
  "milestone_count": 6,
  "issue_count": 23,
  "labels": [
    {
      "name": "audit",
      "color": "0E8A16",
      "description": "NFL picks backlog: audit"
    },
    {
      "name": "backtest",
      "color": "FBCA04",
      "description": "NFL picks backlog: backtest"
    },
    {
      "name": "blocked",
      "color": "B60205",
      "description": "NFL picks backlog: blocked"
    },
    {
      "name": "calibration",
      "color": "FBCA04",
      "description": "NFL picks backlog: calibration"
    },
    {
      "name": "config",
      "color": "FBCA04",
      "description": "NFL picks backlog: config"
    },
    {
      "name": "context",
      "color": "5319E7",
      "description": "NFL picks backlog: context"
    },
    {
      "name": "contracts",
      "color": "5319E7",
      "description": "NFL picks backlog: contracts"
    },
    {
      "name": "correlation",
      "color": "5319E7",
      "description": "NFL picks backlog: correlation"
    },
    {
      "name": "data",
      "color": "006B75",
      "description": "NFL picks backlog: data"
    },
    {
      "name": "fixtures",
      "color": "C2E0C6",
      "description": "NFL picks backlog: fixtures"
    },
    {
      "name": "foundation",
      "color": "0E8A16",
      "description": "NFL picks backlog: foundation"
    },
    {
      "name": "game-script",
      "color": "5319E7",
      "description": "NFL picks backlog: game script"
    },
    {
      "name": "gates",
      "color": "D93F0B",
      "description": "NFL picks backlog: gates"
    },
    {
      "name": "grading",
      "color": "D93F0B",
      "description": "NFL picks backlog: grading"
    },
    {
      "name": "inactives",
      "color": "B60205",
      "description": "NFL picks backlog: inactives"
    },
    {
      "name": "injuries",
      "color": "B60205",
      "description": "NFL picks backlog: injuries"
    },
    {
      "name": "market-health",
      "color": "FBCA04",
      "description": "NFL picks backlog: market health"
    },
    {
      "name": "market-line",
      "color": "BFDADC",
      "description": "NFL picks backlog: market line"
    },
    {
      "name": "markets",
      "color": "C5DEF5",
      "description": "NFL picks backlog: markets"
    },
    {
      "name": "matchup",
      "color": "5319E7",
      "description": "NFL picks backlog: matchup"
    },
    {
      "name": "nflverse",
      "color": "006B75",
      "description": "NFL picks backlog: nflverse"
    },
    {
      "name": "odds",
      "color": "BFDADC",
      "description": "NFL picks backlog: odds"
    },
    {
      "name": "opportunity",
      "color": "B60205",
      "description": "NFL picks backlog: opportunity"
    },
    {
      "name": "projection",
      "color": "006B75",
      "description": "NFL picks backlog: projection"
    },
    {
      "name": "provider",
      "color": "D4C5F9",
      "description": "NFL picks backlog: provider"
    },
    {
      "name": "providers",
      "color": "D4C5F9",
      "description": "NFL picks backlog: providers"
    },
    {
      "name": "publishing",
      "color": "1D76DB",
      "description": "NFL picks backlog: publishing"
    },
    {
      "name": "repo",
      "color": "1D76DB",
      "description": "NFL picks backlog: repo"
    },
    {
      "name": "reporting",
      "color": "0052CC",
      "description": "NFL picks backlog: reporting"
    },
    {
      "name": "runner",
      "color": "1D76DB",
      "description": "NFL picks backlog: runner"
    },
    {
      "name": "tracking",
      "color": "0E8A16",
      "description": "NFL picks backlog: tracking"
    },
    {
      "name": "ui",
      "color": "0052CC",
      "description": "NFL picks backlog: ui"
    },
    {
      "name": "workflow",
      "color": "1D76DB",
      "description": "NFL picks backlog: workflow"
    }
  ],
  "milestones": [
    {
      "title": "Milestone 1: Foundation",
      "description": "NFL picks backlog milestone with 5 issue(s).",
      "source_order": 1,
      "issue_count": 5
    },
    {
      "title": "Milestone 2: Static Runner And Report Shape",
      "description": "NFL picks backlog milestone with 3 issue(s).",
      "source_order": 2,
      "issue_count": 3
    },
    {
      "title": "Milestone 3: NFL-Specific Context",
      "description": "NFL picks backlog milestone with 3 issue(s).",
      "source_order": 3,
      "issue_count": 3
    },
    {
      "title": "Milestone 4: Data Integration",
      "description": "NFL picks backlog milestone with 3 issue(s).",
      "source_order": 4,
      "issue_count": 3
    },
    {
      "title": "Milestone 5: Tracking And Promotion",
      "description": "NFL picks backlog milestone with 3 issue(s).",
      "source_order": 5,
      "issue_count": 3
    },
    {
      "title": "Production Backlog After Fixture Build",
      "description": "NFL picks backlog milestone with 6 issue(s).",
      "source_order": 6,
      "issue_count": 6
    }
  ],
  "issues": [
    {
      "source_issue_number": 1,
      "title": "Repo Bootstrap And Project Skeleton",
      "labels": [
        "foundation",
        "repo"
      ],
      "milestone": "Milestone 1: Foundation",
      "body": "Source backlog issue: 1\n\nMilestone: Milestone 1: Foundation\n\nCreate the standalone Python project structure for `sacboyz/nfl-picks`.\n\nDeliverables:\n\n- Python package skeleton.\n- `pyproject.toml`.\n- `tests/` directory.\n- Basic README.\n- No live API calls.\n\nAcceptance criteria:\n\n- `python -m pytest` runs.\n- Package imports cleanly.\n- No production data dependencies are required."
    },
    {
      "source_issue_number": 2,
      "title": "Config Constants For V1 Markets And Thresholds",
      "labels": [
        "foundation",
        "config",
        "markets"
      ],
      "milestone": "Milestone 1: Foundation",
      "body": "Source backlog issue: 2\n\nMilestone: Milestone 1: Foundation\n\nDefine V1 market scope, deferred markets, baby-line thresholds, edge thresholds, confidence tiers, inactive states, candidate states, and market lifecycle defaults.\n\nAcceptance criteria:\n\n- Kickers and DST are clearly excluded from V1.\n- Receptions threshold is exactly `22.5%`.\n- Pass attempts and completions thresholds are exactly `15%`.\n- Every NFL market starts as `research` or `watch`, never `trusted`."
    },
    {
      "source_issue_number": 3,
      "title": "Core Contract Dataclasses",
      "labels": [
        "foundation",
        "contracts"
      ],
      "milestone": "Milestone 1: Foundation",
      "body": "Source backlog issue: 3\n\nMilestone: Milestone 1: Foundation\n\nCreate NFL equivalents of the reusable MLB contract layer.\n\nDeliverables:\n\n- `SlateContext`\n- `MarketBlend`\n- `ModelProjection`\n- `EngineSignal`\n- `EngineCandidate`\n- `CandidateBet`\n\nAcceptance criteria:\n\n- Candidate fields include inactive state, publish-time line fields, correlation group, confidence tier, data completeness, and injury/opportunity tags.\n- Contracts do not perform live fetching or business logic."
    },
    {
      "source_issue_number": 4,
      "title": "Odds And Market Math",
      "labels": [
        "foundation",
        "market-line"
      ],
      "milestone": "Milestone 1: Foundation",
      "body": "Source backlog issue: 4\n\nMilestone: Milestone 1: Foundation\n\nImplement reusable odds helpers.\n\nAcceptance criteria:\n\n- American odds convert to implied probability.\n- Projection vs line determines projected side.\n- Over/Under implied probabilities determine book lean.\n- Books-agree logic is test-covered."
    },
    {
      "source_issue_number": 5,
      "title": "Foundational Gates And Grade/State Mapping",
      "labels": [
        "foundation",
        "grading",
        "gates"
      ],
      "milestone": "Milestone 1: Foundation",
      "body": "Source backlog issue: 5\n\nMilestone: Milestone 1: Foundation\n\nImplement the first executable gate layer.\n\nAcceptance criteria:\n\n- `ABSTAIN / NO_PLAY` is distinct from Review.\n- Missing core data forces Abstain.\n- `PRE_INACTIVES` prevents A grade.\n- `POST_INACTIVES_INVALIDATED` forces Abstain.\n- Publish-time edge compression demotes to Review or Abstain.\n- Low confidence cannot produce A/B.\n- Team markets produce Lean / Review / No Play only in V1."
    },
    {
      "source_issue_number": 6,
      "title": "Mock Slate Fixture",
      "labels": [
        "fixtures",
        "runner"
      ],
      "milestone": "Milestone 2: Static Runner And Report Shape",
      "body": "Source backlog issue: 6\n\nMilestone: Milestone 2: Static Runner And Report Shape\n\nCreate static NFL slate fixtures for player props, team bets, inactives, and odds.\n\nAcceptance criteria:\n\n- Fixtures cover clean A/B candidates, Review, Fade, Abstain, stale projection, and moved-line cases.\n- No live API calls."
    },
    {
      "source_issue_number": 7,
      "title": "Static Daily/Window Runner",
      "labels": [
        "runner",
        "workflow"
      ],
      "milestone": "Milestone 2: Static Runner And Report Shape",
      "body": "Source backlog issue: 7\n\nMilestone: Milestone 2: Static Runner And Report Shape\n\nBuild a local runner that loads mock data and emits evaluated candidates.\n\nAcceptance criteria:\n\n- Supports game windows: Thursday, Sunday early, Sunday late, SNF, MNF.\n- Applies inactive state and publish-time line checks.\n- Produces machine-readable output."
    },
    {
      "source_issue_number": 8,
      "title": "Initial HTML Report Prototype",
      "labels": [
        "reporting",
        "ui"
      ],
      "milestone": "Milestone 2: Static Runner And Report Shape",
      "body": "Source backlog issue: 8\n\nMilestone: Milestone 2: Static Runner And Report Shape\n\nCreate a static report inspired by MLB's report grammar.\n\nAcceptance criteria:\n\n- Includes team context board.\n- Includes player prop board.\n- Includes Review/Fade/Abstain sections.\n- Shows check bars, confidence, best line, and risk flags.\n- Uses no lock or guarantee language."
    },
    {
      "source_issue_number": 9,
      "title": "Role / Injury / Opportunity Module",
      "labels": [
        "injuries",
        "opportunity",
        "context"
      ],
      "milestone": "Milestone 3: NFL-Specific Context",
      "body": "Source backlog issue: 9\n\nMilestone: Milestone 3: NFL-Specific Context\n\nImplement classifications for injury risk and opportunity creation.\n\nAcceptance criteria:\n\n- Detects opportunity boost, role upgrade review, usage unclear, and offense downgrade.\n- Detects opponent injury boost/caution and mismatch states.\n- Projection predating injury/inactive news review-gates the candidate."
    },
    {
      "source_issue_number": 10,
      "title": "Defensive Matchup Module",
      "labels": [
        "matchup",
        "context"
      ],
      "milestone": "Milestone 3: NFL-Specific Context",
      "body": "Source backlog issue: 10\n\nMilestone: Milestone 3: NFL-Specific Context\n\nImplement stat-specific matchup color logic.\n\nAcceptance criteria:\n\n- Rank 1 means most favorable production allowed.\n- Overs and unders invert color interpretation correctly.\n- Defensive injury override can move matchup one band.\n- `sos_adjusted` field is represented even if V1 data is raw."
    },
    {
      "source_issue_number": 11,
      "title": "Game Script And Correlation Module",
      "labels": [
        "game-script",
        "correlation"
      ],
      "milestone": "Milestone 3: NFL-Specific Context",
      "body": "Source backlog issue: 11\n\nMilestone: Milestone 3: NFL-Specific Context\n\nImplement game-script tags and same-game correlation groups.\n\nAcceptance criteria:\n\n- QB/WR, game-total/player-prop, and RB/favorite-script groups are tagged.\n- Contradictory same-game pairs hard-fade unless explicitly overridden.\n- Correlation group is available to report and tracker output."
    },
    {
      "source_issue_number": 12,
      "title": "nflverse/nflreadpy Baseline Loader",
      "labels": [
        "data",
        "projection"
      ],
      "milestone": "Milestone 4: Data Integration",
      "body": "Source backlog issue: 12\n\nMilestone: Milestone 4: Data Integration\n\nLoad historical and current NFL data for baseline projections.\n\nAcceptance criteria:\n\n- Loads schedules, player stats, and team context from nflverse/nflreadpy-compatible sources.\n- Supports cold-start priors and regression baselines.\n- No betting recommendations depend on missing core projection inputs."
    },
    {
      "source_issue_number": 13,
      "title": "Odds Provider Integration",
      "labels": [
        "odds",
        "market-line"
      ],
      "milestone": "Milestone 4: Data Integration",
      "body": "Source backlog issue: 13\n\nMilestone: Milestone 4: Data Integration\n\nIntegrate the selected sportsbook odds provider for NFL markets.\n\nAcceptance criteria:\n\n- Fetches h2h, spreads, totals, team totals, and V1 player prop markets.\n- Preserves best book, best line, best odds.\n- Stores line at grade and line at publish."
    },
    {
      "source_issue_number": 14,
      "title": "Injury/Inactives Provider Integration",
      "labels": [
        "injuries",
        "inactives"
      ],
      "milestone": "Milestone 4: Data Integration",
      "body": "Source backlog issue: 14\n\nMilestone: Milestone 4: Data Integration\n\nIntegrate authoritative injury and inactive state data.\n\nAcceptance criteria:\n\n- Supports the 90-minute inactive state machine.\n- Invalidated projections force re-grade or Abstain.\n- Pre-inactives outputs cannot publish A grades."
    },
    {
      "source_issue_number": 15,
      "title": "Tracker CSV And Audit JSON",
      "labels": [
        "tracking",
        "audit"
      ],
      "milestone": "Milestone 5: Tracking And Promotion",
      "body": "Source backlog issue: 15\n\nMilestone: Milestone 5: Tracking And Promotion\n\nCreate tracker and audit artifacts.\n\nAcceptance criteria:\n\n- Tracks sport, season, week, window, market, grade, confidence, matchup, injury tag, correlation group, line movement, and result.\n- Audit JSON includes hidden gate results."
    },
    {
      "source_issue_number": 16,
      "title": "Market Health And Promotion Rules",
      "labels": [
        "market-health",
        "calibration"
      ],
      "milestone": "Milestone 5: Tracking And Promotion",
      "body": "Source backlog issue: 16\n\nMilestone: Milestone 5: Tracking And Promotion\n\nBuild weekly market-health summaries and promotion criteria.\n\nAcceptance criteria:\n\n- No NFL market starts as trusted.\n- Promotion from research/watch to trusted requires settled evidence.\n- Correlated outcomes are de-weighted in summaries."
    },
    {
      "source_issue_number": 17,
      "title": "Historical Backtest Harness",
      "labels": [
        "backtest",
        "calibration"
      ],
      "milestone": "Milestone 5: Tracking And Promotion",
      "body": "Source backlog issue: 17\n\nMilestone: Milestone 5: Tracking And Promotion\n\nCreate a replay harness for historical NFL slates.\n\nAcceptance criteria:\n\n- Replays weeks by market and game window.\n- Reports performance by threshold band, matchup color, book agreement, injury tag, and game script.\n- Produces findings without changing thresholds automatically."
    },
    {
      "source_issue_number": 18,
      "title": "Approve Live Providers And Add Schema Fixtures",
      "labels": [
        "data",
        "providers",
        "blocked"
      ],
      "milestone": "Production Backlog After Fixture Build",
      "body": "Source backlog issue: 18\n\nMilestone: Production Backlog After Fixture Build\n\nChoose approved providers for odds, weather, injury/inactives, and usage/projection data, then add fixture payloads that represent each provider schema before enabling live calls.\n\nAcceptance criteria:\n\n- `docs/PROVIDER_DECISIONS.md` records each approved provider.\n- Provider schema fixtures exist for every enabled feed.\n- Tests cover normalization from provider fixture payloads.\n- Fixture mode remains the default and requires no secrets."
    },
    {
      "source_issue_number": 19,
      "title": "Implement Provider-Specific Odds Adapter",
      "labels": [
        "odds",
        "provider",
        "market-line"
      ],
      "milestone": "Production Backlog After Fixture Build",
      "body": "Source backlog issue: 19\n\nMilestone: Production Backlog After Fixture Build\n\nImplement the approved odds provider for V1 team markets and player props.\n\nAcceptance criteria:\n\n- Supports moneyline, spread, game total, team total, and V1 prop markets.\n- Preserves sportsbook, line, odds, last update, and best-line shopping fields.\n- Publish-time line gate stores `line_at_grade`, `line_at_publish`, and `edge_at_publish`.\n- Stale/outlier lines force Review or Abstain when required."
    },
    {
      "source_issue_number": 20,
      "title": "Implement Official Injury/Inactives Adapter",
      "labels": [
        "injuries",
        "inactives",
        "provider"
      ],
      "milestone": "Production Backlog After Fixture Build",
      "body": "Source backlog issue: 20\n\nMilestone: Production Backlog After Fixture Build\n\nImplement the approved injury/inactives provider and connect it to the inactive state machine.\n\nAcceptance criteria:\n\n- `PRE_INACTIVES`, `POST_INACTIVES_CONFIRMED`, and `POST_INACTIVES_INVALIDATED` are populated from provider data.\n- Official 90-minute inactive reports can invalidate projections.\n- Projection source latency versus official inactives is a Review gate.\n- Next-man-up and opponent defensive injury tags are visible in audit/report output."
    },
    {
      "source_issue_number": 21,
      "title": "Implement Real nflverse/nflreadpy Baseline Loader",
      "labels": [
        "data",
        "projection",
        "nflverse"
      ],
      "milestone": "Production Backlog After Fixture Build",
      "body": "Source backlog issue: 21\n\nMilestone: Production Backlog After Fixture Build\n\nReplace fixture-only baseline inputs with real nflverse/nflreadpy-compatible data loading.\n\nAcceptance criteria:\n\n- Loads schedules, player usage, team context, and historical baselines for selected seasons/weeks.\n- Supports cold-start priors and regression to team/position baselines.\n- Keeps independent projection logic separate from sportsbook confirmation.\n- Missing core projection inputs force `ABSTAIN / NO_PLAY`."
    },
    {
      "source_issue_number": 22,
      "title": "Real Historical Replay And Calibration Report",
      "labels": [
        "backtest",
        "calibration",
        "market-health"
      ],
      "milestone": "Production Backlog After Fixture Build",
      "body": "Source backlog issue: 22\n\nMilestone: Production Backlog After Fixture Build\n\nRun historical weekly replay with real data and summarize threshold/lifecycle findings without automatically changing config.\n\nAcceptance criteria:\n\n- Reports by market, grade, confidence, game window, matchup color, book agreement, injury tag, and correlation group.\n- Correlated outcomes are de-weighted.\n- Team bets remain Lean / Review / No Play until validated.\n- Market lifecycle recommendations remain research/watch until minimum settled sample is reached."
    },
    {
      "source_issue_number": 23,
      "title": "Cloudflare Pages Repository Wiring",
      "labels": [
        "publishing",
        "repo"
      ],
      "milestone": "Production Backlog After Fixture Build",
      "body": "Source backlog issue: 23\n\nMilestone: Production Backlog After Fixture Build\n\nAfter `sacboyz/nfl-picks` exists on GitHub, configure repository Actions and Cloudflare Pages publishing from `docs/`.\n\nAcceptance criteria:\n\n- GitHub Actions pass on the remote repo.\n- Cloudflare Pages publishes static `docs/` output.\n- `docs/site_map.json` and `docs/mock/release_bundle.json` validate after publish build."
    }
  ]
}