Plan Controls
Adjust these caps to preview provider-spending work. Submitting this form only replans; it does not execute provider calls.
Provider Inventory Summary
Monitor inventory
Stored canonical inventory is present and no immediate active-board event odds batch is selected.
| Provider enabled | True |
|---|---|
| Active supported sports | 1 |
| Open pickable lines | 6 |
| Canonical health | healthy |
| Active provider lines | 6 |
| Canonical events | 1 |
| Active option sets | 14 |
| Regeneration recommended | 0 |
| Market gap candidates | 0 |
| Coverage limitation status | clear |
| Market gap live actions | 0 |
|---|---|
| Market gap actionable local | 0 |
| Market gap passive waits | 0 |
| Active-board selected targets | 0 |
| Active-board deduped targets | 0 |
| Active-board urgency | none |
| Active-board urgent targets | 0 |
| Active-board proactive targets | 0 |
| Selected estimated credits | 0 |
| Selected full-market credits | 0 |
| Latest refresh status | - |
| Latest refresh targets | - |
| Latest refresh request cost | - |
| Latest refresh provider cost | - |
| Latest refresh local rebuild | - |
| Latest refresh finished | - |
| Latest refresh approval hash | - |
| Active-board dry-run command | - |
| Partial batch selected targets | - |
| Partial batch estimated credits | - |
| Partial batch urgent targets | - |
| Partial batch proactive targets | - |
| Partial dry-run command | - |
| Next recovery partial targets | - |
| Next recovery partial credits | - |
| Next recovery partial dry run | - |
| Daily used credits | 0 |
| Daily remaining credits | 320 |
| Daily credit shortfall | - |
| Next recovery credits | - |
| Daily after next recovery | - |
| Sufficient recovery at | - |
| Sufficient recovery credits | - |
| Latest provider quota | |
| Latest request | odds |
Canonical Inventory Health
healthy
| Open eligible lines | 6 |
|---|---|
| Open eligible events | 1 |
| Sports | 1 |
| Leagues | 1 |
| Serveable open options | 84 |
| Unmaterialized lines | 0 |
| Stale source lines | 0 |
| Serveable stale lines | 0 |
| Background stale lines | 0 |
| Near-lock lines | 0 |
| Serveable near-lock lines | 0 |
| Sport | Lines | Events | Markets |
|---|---|---|---|
| basketball | 6 | 1 | h2h:2, spreads:2, totals:2 |
Canonical Recommended Actions
| Action | Label | Live Provider Calls | Reason |
|---|---|---|---|
| No canonical inventory action recommended. | |||
Next Active-Board Event Odds Targets
| Sport | Event | Credits | Markets | Reason |
|---|---|---|---|---|
| No selected active-board event odds targets. | ||||
Readiness Skipped Targets
Targets skipped by the current dry-run readiness plan. These rows explain cap-constrained breadth without spending provider quota.
| Component | Skipped | Reasons | Samples |
|---|---|---|---|
| events | 1 | max_event_sports_exceeded: 1 | basketball_nba: max_event_sports_exceeded (0 credits) |
No-Quota Actions
Rebuild local pickable inventory
Recompute PickCenter-owned pickable lines from stored provider rows using the current lookahead and odds controls.
Apply recommended lookahead rebuild
Rebuild from stored provider rows using the reviewed sport-specific lookahead recommendation shown below.
Run local maintenance
Expire started inventory, lock started picks, score from stored facts, and regenerate only recommended option sets.
Regenerate recommended option sets
Materialize only missing, stale, rules-changed, or inventory-changed active period boards from stored inventory.
These actions write inventory job-run records and do not call the odds provider.
No action run yet.
Lookahead Policy Recommendation
No live provider calls
| Recommended sports | 0 |
|---|---|
| Blocked stored lines | 0 |
| Base lookahead days | 14 |
ENV assignment
INVENTORY_PROVIDER_SPORT_LOOKAHEAD_DAYS=''
No sport-specific lookahead overrides recommended for the current stored inventory.
Refresh Yield
No live provider calls
| Window hours | 168 |
|---|---|
| Recent requests | 2 |
| Recent request cost | 0 |
| Open pickable lines | 6 |
| Pickable/credit | - |
| Null-sport requests | 1 |
This joins recent request ledger spend to current stored inventory. It is a control-plane view and does not call providers.
| Sport | Requests | Cost | Objects | Active lines | Open pickable | Pickable/credit | Status |
|---|---|---|---|---|---|---|---|
basketball_nbaNBA | 1 | 0 | 1 | 6 | 6 | - | yielding_pickable_inventory |
Provider Quota Health
warning
| Planned credits | 0 |
|---|---|
| Daily used credits | 0 |
| Daily remaining credits | 320 |
| Latest quota remaining | |
| Latest request | odds |
| Latest request cost | 0 |
| Latest objects returned | 1 |
| Latest object limit remaining | |
| Latest request limit remaining | |
| Latest response notice | |
| Latest next cursor |
Stored request ledger only. This does not probe the provider quota endpoint.
| Allowed | True |
|---|---|
| Blockers | - |
| Warnings | missing_latest_quota_signal |
| 24h requests | 2 |
| 24h failures | 0 |
| 24h unresolved failures | 0 |
Selected live targets
{'sports_refresh_due': False, 'event_sport_keys': [], 'odds_sport_keys': [], 'score_sport_keys': []}Skipped Live Targets
| Component | Skipped | Reasons | Samples |
|---|---|---|---|
| events | 1 | max_event_sports_exceeded: 1 | basketball_nba: max_event_sports_exceeded (0 credits) |
No unresolved provider request failure groups in the last 24 hours.
Provider Onboarding Readiness
ready
| Ready | True |
|---|---|
| Blockers | 0 |
| Warnings | 0 |
Stored-data checklist for provider integration, canonical mapping, source policy, serving, and cost posture.
Onboarding JSON| Check | Status | Message | Details |
|---|---|---|---|
provider_registered_enabled | ok | Provider is registered and enabled. | Metadata{'provider_key': 'the_odds_api', 'provider_enabled': True, 'supports_odds': True, 'supports_scores': True, 'supports_event_odds_refresh': True} |
provider_adapter_contract | ok | Provider adapter has the required client and normalization hooks. | Metadata{'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'adapter_contract_gaps': []} |
provider_normalization_contract | ok | Provider owns its payload normalization hooks. | Metadata{'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'uses_live_provider_calls': False} |
provider_capabilities | ok | Provider supports odds, event refresh, and scores. | Metadata{'capability_gaps': [], 'capability_status': 'ready', 'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'adapter_contract_gaps': [], 'recommended_action': {'action': 'none', 'reason': 'Provider is registered, stored, enabled, and supports odds/event refresh/scores.', 'command': None, 'api': None, 'api_request': None}} |
provider_request_contract | ok | Provider owns its odds request scope and cost model. | Metadata{'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'adapter_contract': {'status': 'ready', 'required_hooks': ['client_factory', 'sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'available_hooks': {'client_factory': True, 'sport_normalizer': True, 'event_normalizer': True, 'line_input_builder': True, 'score_normalizer': True, 'odds_request_scope_factory': True, 'odds_request_cost_estimator': True, 'score_request_scope_factory': True, 'score_request_cost_estimator': True}, 'missing_hooks': [], 'normalization_contract': 'provider_owned', 'normalization_contract_hooks': ['sport_normalizer', 'event_normalizer', 'line_input_builder', 'score_normalizer'], 'normalization_contract_gaps': [], 'request_scope_contract': 'provider_owned', 'request_cost_contract': 'provider_owned', 'request_contract_hooks': ['odds_request_scope_factory', 'odds_request_cost_estimator'], 'request_contract_gaps': [], 'score_request_scope_contract': 'provider_owned', 'score_request_cost_contract': 'provider_owned', 'score_request_contract_hooks': ['score_request_scope_factory', 'score_request_cost_estimator'], 'score_request_contract_gaps': []}, 'uses_live_provider_calls': False} |
sport_catalog | ok | 1 active supported sports are cataloged. | Metadata{'provider_sports': 1, 'active_supported_sports': 1, 'unsupported_sports': 0} |
sport_mapping_review_queue | ok | No provider sport support or canonical sport/league mapping review targets. | Metadata{'review_target_counts': {}, 'review_queue_api_request': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-review-queue', 'query': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': True, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': True, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}}, 'review_target_sample': [], 'support_batch_api_requests': {'plan': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-batch-plan', 'query': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0, 'max_daily_request_credits': 320}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'max_daily_request_credits': 320}}, 'apply': {'method': 'POST', 'path': '/inventory/operations/provider-sport-support-batch-apply', 'body_template': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0, 'max_daily_request_credits': 320}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'max_daily_request_credits': 320}, 'returns_refresh_policy_dry_run': True}}} |
provider_inventory | ok | 1 provider events and 6 active lines are stored. | Metadata{'provider_events': 1, 'active_provider_lines': 6, 'inactive_provider_lines': 0} |
pickable_inventory | ok | 6 PickCenter-owned open pickable lines are available. | Metadata{'open_pickable_lines': 6, 'pickable_line_sources': 6, 'active_pickable_line_sources': 6} |
team_identity_mapping | ok | No provider team identity mapping review targets. | Metadata{'team_count': 2, 'canonical_team_count': 2, 'missing_canonical_team_count': 0, 'native_team_id_count': 0, 'unresolved_team_mapping_candidates': 0, 'native_id_status_counts': {'name_identity_only': 1}, 'native_id_actionability_counts': {'diagnostic_only': 1}, 'review_queue_api_request': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-review-queue', 'query': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': False, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'include_outrights': False, 'include_supported_mapping_gaps': False, 'include_team_mapping_gaps': True, 'active_only': True, 'limit': 25}}, 'review_target_sample': []} |
pickable_source_dedupe | ok | Pickable source policy has no duplicate canonical source groups. | Metadata{'source_groups': 6, 'sources': 6, 'duplicate_source_groups': 0, 'suppressed_source_count': 0} |
canonical_cleanup | ok | No alias-seeded duplicate canonical teams or events need cleanup. | Metadata{'duplicate_team_candidates': 0, 'duplicate_event_candidates': 0, 'team_candidates_with_event_duplicates': 0, 'event_provider_event_mappings': 0, 'event_pickable_lines': 0, 'event_pick_options': 0, 'event_submitted_picks': 0, 'event_marquee_events': 0, 'worklist_api': 'GET /inventory/operations/canonical-cleanup-worklist', 'uses_live_provider_calls': False} |
pick_serving_readiness | ok | Provider-backed inventory is ready for current pick serving. | Metadata{'ready_for_picks': True, 'readiness_status': 'ready', 'blocker_count': 0, 'warning_count': 0, 'warning_keys': [], 'blocker_keys': [], 'refresh_policy_due': {'due': False, 'sports': 0, 'events': 0, 'odds': 0, 'scores': 0, 'skipped_odds': 0}, 'refresh_policy_skipped_target_count': 0, 'refresh_policy_skipped_reason_counts': {}, 'active_board_event_odds_refresh': {'selected_targets': 0, 'selected_estimated_request_cost': 0, 'can_execute_live': False, 'live_execution_blockers': [], 'request_contracts_by_provider': {}, 'fallback_request_contract_providers': [], 'request_contract_gaps_by_provider': {}, 'normalization_contracts_by_provider': {}, 'fallback_normalization_contract_providers': [], 'normalization_contract_gaps_by_provider': {}, 'daily_remaining_credits': None, 'daily_cap_allows_action': None, 'next_daily_credit_recovery_at': None, 'next_recovery_allows_action': None, 'sufficient_daily_credit_recovery_at': None, 'dry_run_command': None, 'next_recovery_partial_batch': {'available': False, 'selected_targets': 0, 'selected_estimated_request_cost': 0, 'available_at': None, 'daily_remaining_credits_after_next_recovery': None, 'dry_run_command': None, 'uses_live_provider_calls': False}, 'uses_live_provider_calls': False}, 'uses_live_provider_calls': False} |
provider_cost_posture | ok | 24h provider request cost is 0. | Metadata{'request_cost_24h': 0, 'request_cost_7d': 0, 'max_daily_request_credits': 320, 'provider_credit_costs': {'sports_refresh': 0, 'events_refresh': 0, 'score_refresh': 2}, 'latest_quota_remaining': None} |
Provider Capability Matrix
No live provider calls
| Providers | 1 |
|---|---|
| Ready providers | 1 |
| Partial providers | 0 |
| Drift providers | 0 |
| Disabled providers | 0 |
| Normalization fallback providers | 0 |
Compares provider registrations to stored provider state and live-refresh capabilities.
Capability Matrix JSON| Provider | Status | Live Components | Credit Costs | Default Odds | Capability Gaps | Drift | Sports | Pickable |
|---|---|---|---|---|---|---|---|---|
the_odds_apiThe Odds API | ready | sports_catalog, events, odds, scores | sports 0, events 0, scores 2 | h2h,spreads,totals; regions us; cost 3; scope provider owned; cost model provider owned | - | - | 1 | 6 |
Provider Sport Support Review
clear
| Review targets | 0 |
|---|---|
| Support reviews | 0 |
| Canonical mapping reviews | 0 |
| Team mapping reviews | 0 |
| Active unsupported sports | 0 |
| Open pickable lines | 6 |
Stored provider catalog, canonical mapping, and team identity review queue. This view does not call providers.
Sport Review JSONDurable Candidates JSONSupport Batch PlanSupport batch API
{'plan': {'method': 'GET', 'path': '/inventory/operations/provider-sport-support-batch-plan', 'query': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1}}, 'apply': {'method': 'POST', 'path': '/inventory/operations/provider-sport-support-batch-apply', 'body_template': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1, 'reviewer_user_id': '<user-id>', 'reason': '<reason>', 'refresh_priority_start': 0}, 'uses_live_provider_calls': False, 'context': {'provider_key': 'the_odds_api', 'status': 'open', 'include_outrights': False, 'limit': 1}, 'returns_refresh_policy_dry_run': True}}No provider sports need support or mapping review.
Provider Team Mapping Coverage
No live provider calls
| Provider team groups | 1 |
|---|---|
| Provider teams | 2 |
| Canonical teams | 2 |
| Missing canonical teams | 0 |
| Native team IDs | 0 |
| Team review candidates | 0 |
Shows provider participant identity coverage from stored team and mapping-candidate rows.
Team Coverage JSON| Sport / League | Canonical | Native IDs | Teams | Canonical Teams | Native Team IDs | Review Candidates |
|---|---|---|---|---|---|---|
basketball_nbaNBA | mapped | name_identity_only | 2 | 2 | 0 | 0 |
Canonical Cleanup
No cleanup debt
| Duplicate team candidates | 0 |
|---|---|
| Duplicate event candidates | 0 |
| Event mappings to review | 0 |
| Submitted picks on duplicates | 0 |
| Marquee refs on duplicates | 0 |
No duplicate canonical team candidates found.
No duplicate canonical event candidates found.
Provider Sport Market Coverage
No live provider calls
| Provider sports | 1 |
|---|---|
| Core-complete sports | 1 |
| Partial core sports | 0 |
| No pickable-line sports | 0 |
| Open pickable lines | 6 |
| Active provider lines | 6 |
Stored market coverage for moneyline, spread, and total pick inventory by provider sport.
Market Coverage JSON| Sport | Status | Moneyline | Spread | Total | Events | Provider Lines | Gaps |
|---|---|---|---|---|---|---|---|
basketball_nbabasketball_nba | core_markets_complete | 2 | 2 | 2 | 1 | 6 | - |
Market Gap Worklist
Stored-data worklist
| Candidate sports | 0 |
|---|---|
| Returned items | 0 |
| Live-action sports | 0 |
| Local-action sports | 0 |
| Actionable local sports | 0 |
| Passive wait sports | 0 |
| Missing moneyline | 0 |
| Missing spread | 0 |
| Missing total | 0 |
Turns stored market coverage gaps into local or approval-gated refresh handoffs.
Provider coverage limitation summary
{"missing_core_market_counts": {"h2h": 0, "spreads": 0, "totals": 0}, "passive_wait_sports": 0, "recommended_operator_action": "No passive provider market-coverage waits are present.", "sample_sports": [], "status": "clear"}No core market gap worklist rows found.
Pickable Source Groups
One source per pick identity
| Canonical source groups | 6 |
|---|---|
| Source rows | 6 |
| Duplicate source groups | 0 |
| Suppressed alternates | 0 |
| Policy mode | one_per_pick_identity |
| Provider priority | the_odds_api |
Groups persisted pickable line sources by canonical pick identity. This view is stored-data only and does not call providers.
Use the detailed JSON view to inspect selected and alternate sources for each canonical pick identity.
Pick Board Contracts
No live provider calls
| Competitions | 2 |
|---|---|
| Periods | 14 |
| Selectable periods | 14 |
| Unavailable periods | 0 |
| Missing option sets | 0 |
| Stale option sets | 0 |
| Missing marquees | 6 |
| Event odds refresh target periods | 0 |
| Event odds refresh targets | 0 |
| Estimated target refresh credits | 0 |
| Open options | 84 |
Shows materialized board serving state from stored inventory. Missing marquees do not block free picks.
| Competition / Period | Board | Reason | Options | Events | Refresh Targets | Free | Marquee |
|---|---|---|---|---|---|---|---|
1025770f-2f95-4602-9257-6e237f205c8dFriday | available | - | 6 | 1 | 0 | available | available |
1025770f-2f95-4602-9257-6e237f205c8dSaturday | available | - | 6 | 1 | 0 | available | available |
1025770f-2f95-4602-9257-6e237f205c8dSunday | available | - | 6 | 1 | 0 | available | available |
1025770f-2f95-4602-9257-6e237f205c8dMonday | available | - | 6 | 1 | 0 | available | available |
1025770f-2f95-4602-9257-6e237f205c8dTuesday | available | - | 6 | 1 | 0 | available | available |
1025770f-2f95-4602-9257-6e237f205c8dWednesday | available | - | 6 | 1 | 0 | available | available |
1025770f-2f95-4602-9257-6e237f205c8dThursday | available | - | 6 | 1 | 0 | available | available |
dac9df11-5b80-4c3d-aa52-4bfefdefa804Friday | available | - | 6 | 1 | 0 | available | available |
Active Board Event-Odds Worklist
No live provider calls
| Period targets | 0 |
|---|---|
| Deduped targets | 0 |
| Selected targets | 0 |
| Skipped targets | 0 |
| Retry backoff targets | 0 |
| Retry review targets | 0 |
| Selected estimated credits | 0 |
| Request contracts | - |
| Normalization contracts | - |
| Live execution blockers | - |
| Manifest dry runs | 0 |
| Manifest execute templates | 0 |
Run each dry_run_api_request first, then execute only the corresponding execute_template after reviewing the dry-run approval hash and provider event identity.
No skipped active-board event-odds targets.
No active board event-odds refresh targets selected.
Pick-Period Fill
Target one competition period and one or more provider sports. Dry runs do not call providers or write job rows.
Run a dry run and type the confirmation phrase before execution is enabled.
Approval-gated provider calls
Stored-data recommendation
| Fill provider contracts | normalization provider owned; normalization gaps -; request scope provider owned; request cost provider owned; request gaps - |
|---|---|
| Fill can execute live | False |
| Fill live blockers | - |
| Sport | Action | Period lines | Recent yield |
|---|---|---|---|
basketball_nba | use_existing_period_inventory | 6 | yielding_pickable_inventory |
No pick-period fill dry run yet.
Quota Posture
No live calls selected
| Selected sports refresh | 0 |
|---|---|
| Selected event refreshes | 0 |
| Selected odds refreshes | 0 |
| Selected score refreshes | 0 |
| Estimated credits | 0 |
| Daily used credits | 0 |
Refresh execution remains approval-gated. Review the dry run before using any execute template.
Dry-run command
uv run python -m app.jobs.inventory run-refresh-policy --provider-key the_odds_api --run-mode full --max-odds-credits 0 --max-event-sports 0 --max-score-refresh-calls 25 --max-total-request-credits 0 --max-daily-request-credits 320 --lookahead-days 14 --sports-stale-hours 24 --events-stale-hours 24 --odds-stale-hours 4 --empty-odds-stale-hours 24 --refresh-yield-lookback-hours 168
Execute command
uv run python -m app.jobs.inventory run-refresh-policy --provider-key the_odds_api --run-mode full --max-odds-credits 0 --max-event-sports 0 --max-score-refresh-calls 25 --max-total-request-credits 0 --max-daily-request-credits 320 --lookahead-days 14 --sports-stale-hours 24 --events-stale-hours 24 --odds-stale-hours 4 --empty-odds-stale-hours 24 --refresh-yield-lookback-hours 168 --execute --approved-no-sports-refresh --approved-event-sports '' --approved-odds-sports '' --approved-score-sports '' --approved-plan-hash fae3b944049fe7d7e140dd9da299040a3081473e48dac14539c453e99b5cf830
Live Refresh Approval
No live provider work selected
| Selected sports refresh | 0 |
|---|---|
| Selected event refreshes | 0 |
| Selected odds refreshes | 0 |
| Selected score refreshes | 0 |
| Estimated credits | 0 |
| Daily remaining credits | 320 |
Dry-run request body
{'provider_key': 'the_odds_api', 'markets': ['h2h', 'spreads', 'totals'], 'regions': 'us', 'bookmakers': None, 'max_odds_credits': 0, 'max_event_sports': 0, 'max_total_request_credits': 0, 'max_daily_request_credits': 320, 'max_score_refresh_calls': 25, 'sports_stale_hours': 24, 'events_stale_hours': 24, 'odds_stale_hours': 4, 'empty_odds_stale_hours': 24, 'refresh_sport_priority': [], 'refresh_yield_lookback_hours': 168, 'lookahead_days': 14, 'run_mode': 'full', 'competition_id': None, 'pick_period_id': None, 'score_provider_sport_key': None, 'execute': False, 'rebuild_local': False}Approval execute body
{'provider_key': 'the_odds_api', 'markets': ['h2h', 'spreads', 'totals'], 'regions': 'us', 'bookmakers': None, 'max_odds_credits': 0, 'max_event_sports': 0, 'max_total_request_credits': 0, 'max_daily_request_credits': 320, 'max_score_refresh_calls': 25, 'sports_stale_hours': 24, 'events_stale_hours': 24, 'odds_stale_hours': 4, 'empty_odds_stale_hours': 24, 'refresh_sport_priority': [], 'refresh_yield_lookback_hours': 168, 'lookahead_days': 14, 'run_mode': 'full', 'competition_id': None, 'pick_period_id': None, 'score_provider_sport_key': None, 'execute': True, 'rebuild_local': True, 'approved_sports_refresh_due': False, 'approved_event_sports': [], 'approved_odds_sports': [], 'approved_score_sports': [], 'approved_plan_hash': 'fae3b944049fe7d7e140dd9da299040a3081473e48dac14539c453e99b5cf830'}Execution stays disabled until this page dry-runs the displayed plan and the returned approval targets exactly match the execute payload.
The current capped plan has no live provider calls to execute.
No live refresh dry run yet.
Scheduler Gate
| Profile | Gate | Mode | Quota | Cost Gate | Request Credits | Operator Action |
|---|---|---|---|---|---|---|
inventory-local-maintenance | default_enabled | local | no provider quota | not_applicable | no provider quota | safe_to_schedule |
inventory-broad-refresh | manual_enablement_required | broad_inventory | provider quota | idleSelected live targets{"event_sport_keys": [], "odds_sport_keys": [], "score_sport_keys": [], "sports_refresh_due": false}Skipped live targets{"components": {"events": {"reason_counts": {"max_event_sports_exceeded": 1}, "sample_targets": [{"estimated_credits": 0, "last_event_refresh": null, "provider_events": 1, "provider_sport_key": "basketball_nba", "reason": "never refreshed", "refresh_priority": null, "refresh_priority_rank": 0, "skip_reason": "max_event_sports_exceeded", "sport_group": "Basketball", "sport_title": "NBA"}], "skipped_target_count": 1}, "odds": {"reason_counts": {}, "sample_targets": [], "skipped_target_count": 0}, "scores": {"reason_counts": {}, "sample_targets": [], "skipped_target_count": 0}}, "total_skipped_target_count": 1} | Estimated credits: 0 / run cap 0 Uncapped estimate: 0 Daily used: 0 · Daily remaining: 320 Provider quota remaining: - | review_provider_quota_caps_and_current_refresh_plan |
inventory-settlement | idle | settlement | provider quota | idleSelected live targets{"event_sport_keys": [], "odds_sport_keys": [], "score_sport_keys": [], "sports_refresh_due": false} | Estimated credits: 0 / run cap 0 Uncapped estimate: 0 Daily used: 0 · Daily remaining: 320 Provider quota remaining: - | enable_when_real_pending_started_picks_need_score_refresh |
inventory-breadth-expansion-plan | optional_monitor | breadth_expansion_plan | no provider quota | not_applicable | no provider quota | schedule_only_if_breadth_gap_monitoring_is_worth_task_cost |
inventory-active-board-event-odds-plan | optional_monitor | active_board_event_odds_plan | no provider quota | not_applicable | no provider quota | schedule_only_if_active_board_event_odds_queue_monitoring_is_worth_task_cost |
inventory-readiness-check | optional_monitor | readiness | no provider quota | not_applicable | no provider quota | prefer_external_monitor_unless_dedicated_task_cost_is_accepted |
Breadth Worklist
No breadth actions are currently recommended.
Sport Coverage
| Sport | Status | Events | Provider Lines | Pickable Lines | Gap Reasons |
|---|---|---|---|---|---|
basketball_nbaNBA | stocked | 1 | 6 | 6 |
Score Settlement Work Queue
idle
| Refresh sports | 0 |
|---|---|
| Selected refresh sports | 0 |
| Backoff refresh sports | 0 |
| Repeated failure sports | 0 |
| Pending refresh picks | 0 |
| Ready from stored scores | 0 |
| Needs review | 0 |
| Score normalization contract | normalization provider owned; normalization gaps -; score request scope provider owned; score request cost provider owned; score request gaps - |
| Score live execution blockers | - |
No score settlement work is currently queued.
Score Refresh Targets
No pending score refresh targets.
Pick Review Queue
No picks need manual review.