Actual last-refresh per data signal vs its declared SLO (spec §9). SLOs are declared from the measured Keepa token budget (docs/PHASE0-BUDGET.md), not assumed. A violated SLO means every dependent decision is degraded — explicitly, on the surface that shows it.
| Signal | Status | SLO | Last refresh | Age | Data through | SLO basis | Dependent decisions | Degradation when violated |
|---|---|---|---|---|---|---|---|---|
| Ad spend by ASIN (Daton) | VIOLATED | 30h | 2026-05-09 05:49 UTC | 58.0d | 2026-05-07 | Daily cron (vercel.json 15:00 UTC) + 6h slack. | None shipped yet (dashboards land in W3) | No shipped decision consumes this signal yet; violation blocks W3 dashboards, nothing degrades today. |
| FBA inventory by FC — monthly storage-fee PROXY (not the Inventory Ledger) | MET | 45d | 2026-07-03 09:29 UTC | 2.9d | 2026-05-01 | Monthly upstream report (haul_raw.sp_api_us_fba_storage_fees, avg qty on hand per ASIN × FC × fee month) with ~1 month publication lag; full-refresh sync `pnpm w3:haul-sync --kind inventory`; 45d budget per W3-DECISIONS.md D2. Fee month 2026-02 is absent UPSTREAM. This proxy stands in for GET_LEDGER_SUMMARY_VIEW_DATA, which is unreachable without SP-API creds (W3-BLOCKED.md B1a); swaps to the Ledger without UI change when creds land. | Regional inventory share (W3.2 coverage + heatmap) — grade-capped B wherever used (D2) | Coverage pages always label the proxy semantics + fee-month window; on violation the label escalates to a stale-proxy banner and coverage numbers render with their as-of month, never as current truth. |
| Amazon Fulfilled Shipments (Haul → Neon, daily by FC × ship-to state) | VIOLATED | 2d | 2026-07-03 09:53 UTC | 2.8d | 2026-07-02 | Daily incremental `pnpm w3:haul-sync --kind shipments` + 24h slack. Source: BigQuery neato-haul-prod, splice of daton_archive.us_fulfilled_shipments (2022-04-05→2026-05-24) and haul_raw.sp_api_us_amazon_fulfilled_shipments (2026-05-25→, ingests daily). Same report W3.2(b) names (GET_AMAZON_FULFILLED_SHIPMENTS_DATA_GENERAL); direct SP-API pull blocked on absent LWA creds (W3-BLOCKED.md B1, D1). | Regional demand geography (W3.2 coverage + heatmap), cross-country fulfillment %, S7 ship-distance validation | Coverage pages show the §9 degradation banner with data_through when violated; demand-share windows clamp to data_through rather than silently shortening. |
| FBA inventory snapshot (Daton) | MET | 30h | 2026-07-05 10:57 UTC | 19h | 2026-07-05 | Daily cron (vercel.json 14:45 UTC) + 6h slack. Spec §9: daily. | PO recommendations (on-hand units, stockout risk) | Recommendations page stale-data banner covers on-hand inputs; urgency bands advisory-only. |
| Keepa buy-box seller history | VIOLATED | 30h | 2026-07-03 02:43 UTC | 3.1d | — | Measured 2.2 tokens/ASIN with buybox=1 (w0-token-measurement.json, production key 2026-07-03). 2,702 ASINs ≈ 5,944 tokens/refresh = 1.6% of the 367,200/day budget (255 tokens/min) → daily affordable; full sweep ≈ 23 min worst-case wall-clock. | None shipped yet (BB unit-share calibration lands in W1) | Violation caps calibration-cell trust and grades in W1; today nothing shipped consumes it. |
| Keepa monthlySold (+history) | VIOLATED | 30h | 2026-07-03 02:43 UTC | 3.1d | — | Measured 1.0 token/ASIN (docs/artifacts/w0-token-measurement.json, re-measured 2026-07-03 on the production key). Catalog 2,251 + 20% prospect headroom = 2,702 tokens/refresh = 0.7% of the 367,200/day budget (255 tokens/min, verified via /token 2026-07-03) → daily trivially affordable. 24h cadence + 6h slack. | monthlySold coverage census (W0.1); demand intervals from W1 onward | Census page shows a stale-signal warning and every monthlySold interval carries its own observation timestamp (G2), so consumers see staleness per-ASIN. |
| Keepa live offers + stock series | VIOLATED | 30h | 2026-07-03 02:43 UTC | 3.1d | — | Measured 4.0 tokens/ASIN with buybox+offers=20+stock (w0-token-measurement.json, production key 2026-07-03). 2,702 ASINs ≈ 10,808 tokens/refresh = 2.9% of the 367,200/day budget → DAILY (was weekly only under the wrong 25/min quota; corrected 2026-07-03). Catalog-scale pulls begin in W1; until then this signal reads never-refreshed (only the measurement samples exist), which is the honest state. | None shipped yet (tail stock-signal stack lands in W1/W2) | Violation widens tail uncertainty and caps grades once W1 ships; today nothing shipped consumes it. |
| Keepa price history + offer counts | VIOLATED | 30h | 2026-07-03 02:43 UTC | 3.1d | — | Same 1.0-token/ASIN pull as monthlySold (measured, production key 2026-07-03); refreshed by the same daily sweep. | None shipped yet (calibration + reconciliation land in W1) | Violation caps downstream grades once W1 ships; today nothing shipped consumes it. |
| Own sales (Daton → BigQuery → Neon) | SUPERSEDED → own_sales_haul | 30h | 2026-07-03 02:46 UTC | 3.1d | 2026-06-29 | Daily cron (vercel.json 14:30 UTC) + 6h pipeline slack. Spec §9: daily. OUTAGE: upstream Daton BigQuery project (#861821516724) was deleted — feed dead since 2026-05-05, confirmed by backfill attempt 2026-07-02; re-pointing the sales source is an AC/infra decision outside this repo. RETIRED 2026-07-02 (W1.0): superseded by own_sales_haul + own_sales_traffic (BigQuery project neato-haul-prod). Row kept for history; no longer counts as a violation. | PO recommendations, volume tiers (A/B/C/U), census GMV weighting | Recommendations page shows a visible stale-data downgrade banner (outputs advisory-only); census page labels the actual GMV window used and flags it as stale. |
| Own sales (Haul fct_orders → Neon) | VIOLATED | 30h | 2026-07-03 02:39 UTC | 3.1d | 2026-07-03 | Daily cron (vercel.json 14:30 UTC) + local runner `pnpm w1:haul-sync` + 6h slack. Spec §9: daily. Source: BigQuery neato-haul-prod dbt_prod_mart.fct_orders (order-line grain, LIVE, 2021-09→today), ADC read-only. Replaces the Daton feed that died 2026-05-05 (see superseded own_sales row). | PO recommendations, calibration ground truth (W1.2/W1.3 fit windows), reconciliation bottom-up leg (W1.4), future backtests (W2) | Recommendations page shows the §9 degradation banner (advisory-only) when violated; calibration snapshot builds refuse windows that extend past data_through. |
| Own sales & traffic by ASIN (Haul fct_daily_traffic → Neon) | VIOLATED | 30h | 2026-07-03 02:46 UTC | 3.1d | 2026-06-29 | Daily cron (vercel.json 14:45 UTC) + local runner + 6h slack, measured on sync completion (pulled_at). NOTE: the upstream SP-API SalesAndTraffic report itself lags ~3 days — data_through shows the true business-date horizon; the SLO governs whether WE synced what exists. | Census GMV weighting, volume tiers (A/B/C/U), sessions covariate, SP-API buy_box_pct cross-check | Census page labels the actual GMV window and flags staleness; tiers carry computed_at. Violation reverts census/tiers to last-synced window with visible window bounds. |
| Amazon restock recommendations (Daton) | VIOLATED | 30h | 2026-07-04 20:39 UTC | 34h | 2026-07-03 | Daily cron (vercel.json 15:15 UTC) + 6h slack. | None shipped yet (PO-review cross-check lands in W4) | No shipped decision consumes this signal yet. |
Spec §9 also lists Fulfilled Shipments and SmartScout as future signals — they are not ingested by this app yet, so no SLO is declared for them (declaring one would be fake green).