# Antigravity Handoff: Sacboyz NFL Picks

Last updated: 2026-06-26

This handoff is written for an external coding agent (Antigravity), not for end users.
It describes exactly what Codex has finished, what remains, where the blockers are, and what
Antigravity is allowed to do next. Read every section before touching any code.

---

## Summary

You are continuing the standalone **Sacboyz Signals NFL Picks** build (`sacboyz/nfl-picks`) based on branch `codex/provider-samples-backlog` (PR #24).

The correct canonical working folder is:

```text
C:\Users\eball\Documents\Codex\nfl-picks
```

*(Note: For the Antigravity agent, the active scratch/sandbox workspace is configured at `C:\Users\eball\.gemini\antigravity\scratch\nfl-picks` under branch `antigravity/report-docs-polish`. All work must remain offline/fixture-safe. Verify release readiness with `python run_quality_gate.py`. Live provider calls must remain disabled until provider/API decisions are approved.)*

Do **not** open the parent `C:\Users\eball\Documents\Codex` workspace. That workspace contains
unrelated MLB worktrees. Opening the wrong root will mix those projects in and may produce
incorrect Git operations.

The mission is to build a standalone NFL betting decision framework that reuses mature
Sacboyz MLB operating patterns where they are sport-agnostic, while adapting hard for
NFL-specific realities:

- weekly slate cadence instead of daily MLB cadence
- official inactive reports ~90 minutes before kickoff
- injury-driven opportunity and defensive injury matchup boosts
- sparse samples and slower threshold recalibration
- publish-time line movement
- correlation and same-game contradiction guards
- no live-provider calls until explicit provider, quota, sample, and season gates pass

The product principle is **education-first**: explain why a play qualifies, why it does not
qualify, and when the correct answer is `ABSTAIN / NO_PLAY`.

---

## Verified Current State

All numbers are sourced from `docs/mock/handoff_summary.json`, `docs/mock/live_enablement_checklist.json`,
and `docs/BUILD_STATUS.md` as of the last Codex run.

| Metric | Value |
|---|---|
| Test result | **609 passed** |
| Completed build items | 192 |
| Handoff artifact count | 77 |
| Release bundle paths | 132 |
| Release bundle missing | **0** |
| Online prep ready | **true** |
| Live enablement ready | **false** (intentional) |
| Runtime default mode | `live_no_call` |
| Provider calls enabled | `false` |
| Provider samples ready | **0 / 7** |
| Network guard findings | 0 |
| Redaction audit findings | 0 |
| Live enablement gates blocked | 6 of 14 |
| Season phase | OFFSEASON |
| Docs static payload | ready for publish review |
| Standalone Git repo | false (nested under parent) |

---

## What Is Finished

### Infrastructure & Contracts

- Python package skeleton and test suite
- MLB-style core contracts: `SlateContext`, `MarketBlend`, `ModelProjection`, `EngineSignal`,
  `EngineCandidate`, `CandidateBet`
- Config-driven V1 markets, baby-line thresholds, edge thresholds, states, confidence tiers,
  and market lifecycle
- Fixture runner, mock slate, tracker, audit, candidate rankings, report summary, report HTML,
  and `docs/` landing page

### Checks & Gates

- Six visible checks: Baby Line, Projection Edge, Books Agree, Defensive Matchup,
  Role / Injury / Opportunity, Game Script
- Hidden gates for data completeness, inactive state, projection latency, publish-time line
  movement, confidence, line shopping, weather, matchup sample caveats, correlation,
  contradiction, and team-market restrictions

### Engine Helpers

- Conservative baseline projection helpers and fixture fallback behavior
- Team-market V1 Lean / Review / No Play logic
- Anytime TD high-variance handling
- Role / Injury / Opportunity and defensive injury boost helpers
- Best-line selection, book-lean logic, American-odds math, and multi-book normalizers

### Provider Boundary

- Provider adapter boundaries and normalizers for all 7 source families:
  schedule, odds, usage, injuries / inactives, team context, matchup, weather
- Runtime mode matrix, live readiness, provider dry run, network guard audit,
  and live enablement checklist
- Provider schema templates, provider sample request / intake / validation / redaction / review
  artifacts, and sample collection packet

### Artifacts & Publishing

- Settlement helpers, push/no-action settlement, correlated backtest weighting,
  backtest summary, calibration, and market-health artifacts
- GitHub Actions workflows for local quality-gate style validation
- Cloudflare Pages-compatible static `docs/` output
- Release bundle, release readiness, review packet, handoff summary, artifact summary,
  artifact index, repo inventory, repo setup status, and docs publish readiness artifacts
- `docs/NFL_FRAMEWORK_PLAN.md` and `docs/NFL_BUILD_BACKLOG.md`

---

## Outstanding Work

### 1 - Offline / Fixture QA (safe to start immediately)

- Improve report UI clarity and static docs navigation.
- Add more fixture scenarios as new gates or markets are introduced. Current no-live-data
  scenario coverage is 17/17.
- Add tests for hidden gates and artifact validation edge cases.
- Expand calibration / backtest review surfaces without claiming profitability.
- Keep generated docs and handoff artifacts in sync after every new artifact addition.

### 2 - Standalone Repo / Publish Setup (safe to start; blocks publishing)

- Confirm Antigravity is working in `C:\Users\eball\Documents\Codex\nfl-picks`.
- Verify Git state does not include unrelated sibling worktrees from the parent workspace.
- Make or repair standalone Git repo status for `sacboyz/nfl-picks`.
- Run the full quality gate, then push only the NFL project.
- Wire GitHub Actions and Cloudflare Pages to publish from `docs/`.

### 3 - Provider Decision Flow (decision needed from Ryan before any live work)

- Review provider selection artifacts in `docs/mock/`.
- For each of the 7 source families (schedule, odds, usage, injuries, team context, matchup,
  weather), Ryan must approve or decline each provider candidate before samples are collected.
- **4 sources are still not selected** (`not_selected_count = 4`).
- Do not collect samples until provider choices are approved.

### 4 - Sanitized Provider Schema Samples (blocked until #3 is approved)

- After Ryan approves provider choices, collect only sanitized schema samples.
- Do not commit raw paid payloads, credentials, tokens, account data, or user-specific data.
- Run `run_provider_sample_validation.py` and `run_provider_sample_redaction_audit.py`
  before committing any sample file.

### 5 - Live Adapter Implementation (blocked until all gates clear)

- Fixture and `live_no_call` modes must make zero provider calls.
- Sample mode reads sanitized local samples only.
- Live mode requires explicit provider config, quota availability, and live enablement gates.
- Quota-exhausted mode must not call providers.
- No A/B actionable plays should be generated from market-relative-only signals without an
  independent projection.

### 6 - Post-Quota Live Dress Rehearsal (last step; blocked by everything above)

- Run provider dry run first.
- Run a tiny live fetch only if mode and all gates allow it.
- Regenerate artifacts.
- Run quality gate and verify no product copy claims guaranteed wins or uses lock language.
- Keep team markets at Lean / Review / No Play until backtesting validates them.

---

## Current Blockers

Live mode must remain closed until every item below is resolved:

1. **Season is OFFSEASON** - `season_phase = OFFSEASON`; `live_picks_available = false`.
2. **Providers not fully approved** - 4 of 7 source families still not selected.
3. **Provider schema samples missing** - `0 / 7` ready; `missing_sample_count = 7`.
4. **Provider sample validation blocked** - ready families: 0.
5. **Odds API quota state** - reported as `unknown`.
6. **Live enablement checklist** - 6 of 14 gates blocked
   (season, providers, samples, validation, live readiness, quota).
7. **Standalone repo not confirmed** - `standalone_git_repo: false`,
   `nested_under_parent_git: true`, `ready_for_remote_publish: false`.

None of these block fixture-mode builds, tests, docs / UI polish, provider-sample
preparation, or offline adapter development.

---

## Required Commands

Run all commands from:

```powershell
cd C:\Users\eball\Documents\Codex\nfl-picks
```

### Before Starting Any Work

```powershell
python -m pytest -q
python run_quality_gate.py
```

Expected baseline:
- `609 passed`
- `Provider decisions valid`
- `No obvious secrets found`
- `Artifacts valid`
- `Quality gate passed`

### Full Fixture Artifact Refresh

```powershell
python run_build_all.py --output-dir docs\mock --results-csv docs\mock\sample_results.csv
python run_validate_artifacts.py --base-dir docs\mock
```

### After Any Changes

```powershell
python -m pytest -q
python run_quality_gate.py
```

If new artifacts were added or changed:

```powershell
python run_build_all.py --output-dir docs\mock --results-csv docs\mock\sample_results.csv
python run_validate_artifacts.py --base-dir docs\mock
```

### Provider / Live Safety Review (run before any provider-adjacent work)

```powershell
python run_provider_decisions.py
python run_secret_scan.py
python run_provider_sample_review_summary.py
python run_live_enablement_checklist.py
```

### Expected Safe State Throughout

- Tests pass at `609 passed` (or higher if new tests are added).
- Provider calls remain disabled.
- Runtime remains `live_no_call` unless Ryan explicitly approves.
- Secret scan is clean.
- Provider sample redaction audit has zero findings.
- Live enablement remains blocked until provider, sample, quota, and season gates are
  intentionally cleared.
- Release bundle `missing_count = 0`.
- `docs/mock/handoff_summary.json` includes `docs/ANTIGRAVITY_HANDOFF.md` in the bundle.

---

## Caveats

### Repo Isolation Warning

> The canonical NFL project lives under `C:\Users\eball\Documents\Codex\nfl-picks`.
> *(Note: For the Antigravity agent, the active scratch workspace is `C:\Users\eball\.gemini\antigravity\scratch\nfl-picks` where the repository setup reports standalone Git state.)*
>
> Antigravity **must open the `nfl-picks` folder directly**, not the parent
> workspace, to avoid mixing in unrelated MLB worktrees.
> Before any first push, confirm standalone Git state so only the NFL project is published.

### Live Data Guardrails

- Do not enable live provider calls by accident.
- Do not treat fixture/offseason outputs as live picks.
- Do not bypass inactive, publish-time line, data-completeness, confidence, line-shopping,
  or correlation gates.
- Do not promote team markets to Top Pick in V1.
- Do not copy MLB daily cadence, per-PA sample logic, MLB weather weighting, or fast
  in-season threshold convergence.
- Do not use profitability claims, guarantees, or lock language.
- Keep parlays as entertainment only; the framework is singles-first.
- Keep thresholds config-driven.
- Keep Review-Only distinct from Abstain / No Play.

### New Artifact Mirroring Rule

If Antigravity adds or changes any generated artifact, it must mirror it through:

1. build wrapper (`run_build_all.py`)
2. artifact validation (`run_validate_artifacts.py`)
3. release bundle (`nfl_picks/release_bundle.py`)
4. `docs/index.html` or relevant static surfaces
5. tests

---

## Read First (in order)

```text
README.md
docs/ANTIGRAVITY_HANDOFF.md
docs/BUILD_STATUS.md
docs/mock/review_packet.md
docs/mock/handoff_summary.json
docs/mock/live_enablement_checklist.json
docs/mock/provider_sample_review_summary.json
docs/mock/provider_sample_collection_packet.md
```

---

## Acceptance Criteria Before Handing Back

Before returning work to Ryan or Codex:

- `python -m pytest -q` passes.
- `python run_quality_gate.py` passes.
- `python run_build_all.py --output-dir docs\mock --results-csv docs\mock\sample_results.csv` completes.
- `python run_validate_artifacts.py --base-dir docs\mock` passes.
- `docs/mock/handoff_summary.json` is updated and still reports release bundle `missing_count = 0`.
- `docs/mock/release_bundle.json` still includes `docs/ANTIGRAVITY_HANDOFF.md`.
- Any new generated artifact is mirrored into validation, release bundle, docs, and tests.
- Live enablement remains blocked unless Ryan explicitly approves provider choices,
  sanitized samples, quota use, and season / live mode.
- Antigravity reports exactly whether it stayed offline or made any live-provider call.

---

## Suggested Prompt for Antigravity

```text
Open C:\Users\eball\Documents\Codex\nfl-picks directly.

You are continuing the standalone Sacboyz NFL Picks build. First read:
  README.md
  docs/ANTIGRAVITY_HANDOFF.md
  docs/BUILD_STATUS.md
  docs/mock/review_packet.md
  docs/mock/handoff_summary.json
  docs/mock/live_enablement_checklist.json
  docs/mock/provider_sample_review_summary.json
  docs/mock/provider_sample_collection_packet.md

Verified current state:
  - 609 tests passed in the last Codex run.
  - Fixture / offline release artifacts are ready.
  - docs/ static output is publish-ready.
  - Runtime defaults to live_no_call.
  - Provider calls are disabled.
  - Live enablement is intentionally blocked:
      season = OFFSEASON
      providers not fully approved (4 of 7 not selected)
      provider schema samples missing (0 / 7 ready)
      live enablement gates blocked: 6 of 14
      odds quota state: unknown

Continue building offline / fixture-safe functionality unless Ryan explicitly approves
live-provider work. Preserve all runtime guardrails. Do not commit secrets or raw provider
payloads. Do not accidentally publish the parent Codex workspace; this project should
become (or continue as) standalone sacboyz/nfl-picks.

Before any changes run:
  python -m pytest -q
  python run_quality_gate.py

After any changes run:
  python -m pytest -q
  python run_quality_gate.py

If new or changed artifacts exist also run:
  python run_build_all.py --output-dir docs\mock --results-csv docs\mock\sample_results.csv
  python run_validate_artifacts.py --base-dir docs\mock

Report back with:
  - what changed
  - current pass count
  - live enablement status (must still be false)
  - remaining blockers
  - whether any live-provider work was avoided or attempted
  - release bundle missing_count (must still be 0)
```

---

## Reviewer Stacked PR Handoff Instructions

To inspect and validate the stacked report PRs before merge:

1. Run the local quality gate to verify all tests and validations pass:
   ```powershell
   python run_quality_gate.py
   ```
2. Verify git workspace status has no unexpected modifications:
   ```powershell
   git status --short
   ```

*Note: All live-provider adapter calls remain disabled by design. These PRs represent stacked work and will remain stacked until Chris and Claude return for a final review.*
