Objective
Regenerate substitute levered path returns and the catalog-leverage, catalog-leverage-meta, catalog-leverage-weighted-meta plus meta-strategies <em>-lev-</em>.json HTML shells and QuantStats tearsheets on an extended history, verifying docs/site-data/coverage.json path_start reflects the synthetic synthetic_levered source. Levered Meta windows must approach unlevered where underlying permits and remain fail-closed only for still-missing history.
Approach
- Extended-history merge lives in
research/levered_path_returns.pywithmodeled_history=synthetic_levered(off by default). Merge order: synthetic__SYNTHETIC_LEVERED_<BASE>_<L>X__first, then Testfol SIM, then live LETF so live wins every overlap month. Ambiguous bases (e.g., DRN) require an explicit base/leverage rather than silent proxy. Origin methoddaily_reset_linear/v1and funding[DFF]are copied from the series origin and carried intomodeled_history. - Producers
research/reports/catalog_leverage.py,catalog_leverage_meta.py,catalog_leverage_weighted_meta.pyall passmodeled_history=synthetic_leveredand writemodeled_history.policy=synthetic_leveredplus window-rule disclosure.research/reports/coverage.py:render_coverageanddocs/site-data/coverage.jsonexpose syntheticpath_startper instrument. One-bar execution lag and sparse rebalance / forward-fill semantics are preserved via the levered path layer and backtest engine. - Canonical rebuild sequence was re-executed on the extended snapshot:
write_catalog_leverage,write_catalog_leverage_meta,write_catalog_leverage_weighted_meta,render_meta_pagesformeta-<em>lev-</em>JSON/HTML, andrender_coverageforcoverage.json/coverage.html. Shared canaries were rebuilt viaresearch.artifacts build --mode full --offline.
Files changed
research/levered_path_returns.py— synthetic_levered merge policy, live-over-synthetic priority, funding/method disclosureresearch/reports/catalog_leverage.py— catalog-leverage cohort windows with synthetic path returnsresearch/reports/catalog_leverage_meta.py— Meta walk-forward 52 variants with levered cohortsresearch/reports/catalog_leverage_weighted_meta.py— continuous-weight weighted-Meta 8 variantsresearch/reports/coverage.py— coveragepath_startsynthetic disclosuredocs/site-data/catalog-leverage.json—generated_at=2026-08-22T14:15:06Zmethod_id=substitute-path-returns/v1modeled_history.policy=synthetic_levered; levered windows recomputeddocs/site-data/catalog-leverage-meta.json— 52 variants; 1.5xmeta-target-cagr-*603 months1974-01,meta-max-sharpe385 months1991-01docs/site-data/catalog-leverage-weighted-meta.json— 8 variants; continuous-weight cohorts recomputeddocs/site-data/meta-strategies/meta-<em>-lev-</em>.json(60 payloads) anddocs/meta-strategies/meta-<em>-lev-</em>.html— Meta levered detail payloads/shells viarender_meta_pagesdocs/site-data/coverage.json/docs/coverage.html/docs/data.html— coveragepath_startsynthetic source shell over regenerated JSONdocs/site-data/meta-strategies/index.json,docs/.shared-artifact-manifest.json,docs/research/catalog-canary/**— deterministic shared artifacts viaresearch.artifactsresearch/results/1043.md— this durable task note
Validation
python3 -m pytest -q tests/test_catalog_leverage.py tests/test_levered_path_returns.py— controller receipts check-2 / check-5 passed (behavioral proof for levered cohorts and path returns)python3 -m pytest -q tests/test_levered_path_returns.py— controller receipts check-3 / check-6 passed (live-over-synthetic overlap, causality, fail-closed)python3 -m pytest -q tests/test_catalog_leverage.py::test_js_strategy_detail_href_appends_leverage tests/test_catalog_leverage.py::test_js_leverage_disable_hint— controller receipts check-4 / check-7 passed (catalog JS leverage href / disable hint)python3 -m research.artifacts check --mode full --offline— shared artifacts are deterministic and current (11 artifacts)python3 -m research.reports.results/python3 research/scripts/check_static_reports.py docs— changelogresults/v1rebuilt and static bundle verifiedpython3 -c "import json; d=json.load(open('docs/site-data/catalog-leverage.json')); print(d['strategies']['haa-balanced']['levels']['1.5'])"— 224 months2006-02→2026-07withmodeled_history=synthetic_levered,modeled_method=daily_reset_linear/v1,modeled_funding=[DFF](EDCpath_start=2003-05via__SYNTHETIC_LEVERED_EEM_3X__)
Results
- Feasible 1.5x windows approach unlevered: 78/81 cohorts match unlevered
valid_start; examplehaa-balanced1.5x is 224 months from2006-02(unlevered 246 months, gap is only the trailingTNAconstraint), EDC path exposes synthetic prefix2003-05while TNA keeps live+sim+synthetic layering with live priority. 1.5xmeta-target-cagr-*reaches 603 months from1974-01; 1.5xmeta-max-sharpe385 months from1991-01. Higher leverage stays fail-closed where history still missing (e.g.,haa-balancedL>=2feasible=false). - Infeasible higher-leverage levels remain null without invented months; coverage
instruments[].path_startandmodeled_historyfields disclose thesynthetic_leveredprefix, method, and DFF funding rather than implying tradable pre-IPO LETF history. - 205 generated
docs/files updated through canonical producers only; no hand-editeddocs/research/catalog-canary/**,docs/strategies/index.html, ordocs/.shared-artifact-manifest.json, and nodata/market.sqlitemutation from report/read paths.
Risks / Limitations
Synthetic prefixes are modeled estimates and can deviate from live LETF returns due to tracking error, fees, swaps, taxes, and provider revisions. Missing or ambiguous synthetic series remain fail-closed rather than substituting an alternative proxy. Pre-existing JS helper assertions in test_catalog_leverage_meta.py / test_catalog_leverage_weighted_meta.py (td count/badge class) are unrelated to this rebuild and remain to be addressed separately.