← Results index

Historical experiment persistence backfill for remaining non-rebuilt experiments

2026-08-19T01:25:00Z Experiment completed Audited all experiments not meeting parity+generic-baseline+persistence after qm-kdnj, published research/findings/qm-u94t-gap-audit.md listing 16 gaps with datastore provenance coverage (MAHX/MALX/NADC/MADC/MADP, HIGN/LOWN, S5FI, UVOL/DVOL, VIX/VIX3M, WSHOSHO/WALCL in data/market.sqlite close_only v5), filed 8 follow-up Beads (qm-pum2/qm-ms8n/qm-60x1/qm-gcbk/qm-0azu/qm-zzdt/qm-5sbr/qm-ctpa) for generic harness and parity backfill, verified sidecar imports transactionally via import-cache and offline repro, and rebuilt coverage artifacts deterministically.

Objective

For experiments not meeting parity+generic-baseline+persistence after qm-kdnj, record explicit finding gap entry per non-rebuilt id and file Beads follow-ups with datastore provenance coverage; import remaining OHLCV/macro/FRED sidecar inputs into data/market.sqlite via datastore import workflows with provenance so offline repro can be closed.

Approach

  1. Classified as data_source (intake) — persistence backfill via backtest/datastore.py + research/input_provenance.py public-input-provenance/v1, not a new strategy/indicator hypothesis.
  2. Feasibility go for historical-experiment-sidecars: TradingView breadth (MAHX/MALX/MAHN/MALN/MAHQ/MALQ/NADC/MADP/MADC/HIGN/LOWN/S5FI/UVOL/DVOL), Yahoo VIX family, FRED WSHOSHO/WALCL weekly W-WED — all licensed for offline caching, redistribution limited to close_only derived closes, no non-redistributable proxy; native spans and calendar gaps inventoried, cache under 95MB soft limit (76MB close_only + sidecar data/sim_daily.sqlite gitignored).
  3. Acquisition reused centralized clients (research/tv_scrape.client.fetch_tradingview_history, backtest/macro.download_fred_series, backtest/data.download_ticker) rate-limited/cached, credential-free for this public set.
  4. Import via python3 -m backtest.datastore import-cache --cache-dir data/cache transactionally (upsert_ohlcv/upsert_macro atomic, idempotent, dedup keep=last, sorted unique UTC-naive) into data/market.sqlite (785k ohlcv, 124 tickers, 56k macro obs, 117 sim series) with provenance in instruments/macro_series_meta; temp DB test showed atomic promotion; offline ensure_ohlcv/ensure_macro(offline=True) passes.
  5. Dependency rebuild enumerated qm-kdnj.1..5, qm-tykd.1..4, qm-4bx.<em> etc and re-executed via research/scripts/audit_</em> --write + python3 -m research.reports build --render on consistent snapshot (no docs JSON cache reuse, no lookahead).
  6. Coverage publish rebuilt docs/site-data/experiments/index.json, coverage.json, shared artifacts (11 deterministic) via producers; filed research/findings/qm-u94t-gap-audit.md with per-id parity/generic/persistence gaps and 8 follow-up Beads (qm-pum2, qm-ms8n, qm-60x1, qm-gcbk, qm-0azu, qm-zzdt, qm-5sbr, qm-ctpa) each referencing datastore provenance coverage; verified Berg proprietary boundary via qm-zfl5/qm-m1ib/qm-is3q, trailing-stop extension via qm-z7yi.
  7. Verification passed: artifacts check --mode full --offline deterministic, check_static_reports.py 1238 files 178 canaries, pytest 60 datastore/engine + test_nhnl_breadth Pine fixture, finding gap + 8 beads exist.

Files changed

Validation

Results

All remaining Pine/indicator sidecars for qm-kdnj.1..5 and Berg/legacy experiments are persisted and provenance-covered in data/market.sqlite (close_only) with offline repro closed; gaps for non-rebuilt experiments are explicitly recorded per id and filed as 8 Beads follow-ups for generic opposite-signal harness (50DMA/200DMA/cross/trailing-stop) and catalog parity backfill. Until those follow-ups land, docs/experiments.html parity columns and per-experiment delta tables remain deferred, but data persistence no longer blocks offline reruns. No private data leaked, no secret printed, no build-time network, no hand-edited generated payloads.

Source artifact: research/results/qm-u94t.md