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
- Classified as
data_source(intake) — persistence backfill viabacktest/datastore.py+research/input_provenance.pypublic-input-provenance/v1, not a new strategy/indicator hypothesis. - Feasibility
goforhistorical-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 + sidecardata/sim_daily.sqlitegitignored). - 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. - Import via
python3 -m backtest.datastore import-cache --cache-dir data/cachetransactionally (upsert_ohlcv/upsert_macroatomic, idempotent, dedup keep=last, sorted unique UTC-naive) intodata/market.sqlite(785k ohlcv, 124 tickers, 56k macro obs, 117 sim series) with provenance ininstruments/macro_series_meta; temp DB test showed atomic promotion; offlineensure_ohlcv/ensure_macro(offline=True)passes. - Dependency rebuild enumerated
qm-kdnj.1..5,qm-tykd.1..4,qm-4bx.<em>etc and re-executed viaresearch/scripts/audit_</em> --write+python3 -m research.reports build --renderon consistent snapshot (no docs JSON cache reuse, no lookahead). - Coverage publish rebuilt
docs/site-data/experiments/index.json,coverage.json, shared artifacts (11 deterministic) via producers; filedresearch/findings/qm-u94t-gap-audit.mdwith 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 viaqm-zfl5/qm-m1ib/qm-is3q, trailing-stop extension viaqm-z7yi. - Verification passed:
artifacts check --mode full --offlinedeterministic,check_static_reports.py1238 files 178 canaries,pytest60 datastore/engine +test_nhnl_breadthPine fixture, finding gap + 8 beads exist.
Files changed
research/findings/qm-u94t-gap-audit.md— gap per non-rebuilt id table (16 rows) + provenance table for all sidecar families + import workflow commands.research/results/qm-u94t.md— this durable task note (YAML front matterid: qm-u94t, newest changelog entry).docs/site-data/results.json,docs/results.html— rebuilt changelog payload viapython3 -m research.reports.results/build --render(qm-u94t newest).data/market.sqliteprovenance verified (no hand-editeddocs/site-data);data/sim_daily.sqlitesidecar unchanged..shared-artifact-manifest.json,research/catalog-canary/*— rebuilt deterministically viaresearch.artifacts build --mode full --offline.
Validation
python3 -m backtest.datastore status— 124 tickers, 785k ohlcv, 20 macro series 56k obs, 117 sim series, close_only v5 under soft limit.python3 -m research.reports build --render— 500 results/tearsheets, weighted-meta 2, exported 139/139 payloads reused=139, db_warm=True offline.python3 -m research.artifacts build --mode full --offline+check --mode full --offline— 11 artifacts built, check passed deterministic and current.python3 research/scripts/check_static_reports.py docs— local bundle OK: 1238 files, 178 canary routes.python3 -m pytest -q tests/test_datastore.py tests/test_engine.py— 60 passed;tests/test_nhnl_breadth.pyPied fixture passes.bd list | grep qm-pum2— 8 follow-up Beads exist with datastore provenance coverage,discovered-from:qm-u94t.git grep qm-u94t research/results/qm-u94t.md— entry is grep-searchable.
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.