Review of the v4 evidence path. The shipped sensors, bands, methodology bump and
categorical allowlist were found sound; these are gaps in the harness that
produced the evidence for them.
The recommendation gates were optional, so they were not gates. The calendar
anchor lived behind --expected-first-session, which defaulted to None -- so the
committed artifact had no first-date check at all, leaving only a session COUNT
that is tautological (the harness slices the tail of the price series to whatever
was asked for). And the state_v4 <= state_v3 invariant was appended only when
both variants were present, so `--methodology v3` alone could still emit a v4
recommendation having never evaluated v4. The anchor is now a published constant
asserted unconditionally, required explicitly whenever --end/--sessions are
overridden, and v3+v4 are mandatory. Both refusals exit 2.
The P1_SCORE_CAP decision was taken on the wrong population. The agreed rule was
"sole price argmax on >80% of sessions with State >= 40"; the harness reported
only all-session counts and the doc concluded from 17/408 = 4.2%. Measured on the
actual population: 47 qualifying sessions, P1 sole argmax on 17 = **36.2%** (P2
16, P3 14). Still well under 80, so the conclusion holds -- but it was reached
from a denominator that did not test the rule, and 36.2% is a materially
different number to have on the page.
Provenance did not identify the code that produced the artifact. It recorded
git_rev c3ae5ad while the live v4 variant depended on app changes that were still
uncommitted, so checking out that revision would not reproduce it. Now records
git_dirty plus sha256 of regime_monitor_service, breadth_service and the script
itself, and this artifact is regenerated from a clean tree.
The 400- vs 700-day OAS question was described as settled but was not
reproducible: the artifact carried only oas_fetch_days 4748, and
v2_reconstruction patches the per-session window to 3653 regardless, so
--oas-window-days 400 could not simulate it. Patching a window cannot stand in
for data that was simply absent, so v2_reconstruction_oas400 truncates the OAS
SOURCE series instead: avg 26.54, p80 42.52, max 100.00 against published
22.6 / 35.1 / 91.2. Full coverage reproduces all three, so the published figures
predate the truncation. Now recorded in the doc.
v4-vix-only and v4-p1-only had become no-ops: after the cutover the shipped
sensors ARE v4, so patching one candidate in left the other shipped and both
variants evaluated full v4. Each now restores the other sensor to its v3 formula,
and they separate properly (v3 18.13, v4-vix-only 16.64, v4-p1-only 16.28,
v4 14.78 -- each fix contributing about half the move).
Docs: the copy-paste invocation was mangled by a backslash-escaping bug and is
now a fenced, forward-slash command; "Unlike P3 and V1 ... P3's do not" corrected
to "Unlike P1 and V1"; the point-in-time section updated from 400 sessions to the
672-calendar-day / ~464-session window production actually replays; the exercised
52.33 VIX print recorded so the top anchors are not merely asserted.
Tests: band_for now pinned at 64.9/65 from both sides so a silent revert to 80
cannot pass, and the categorical carry-forward test stores locked=True and
asserts it survives -- losing it is half the failure mode, since
update_regime_monitor only auto-refreshes when locked is false.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Backtest report index
Reports dated 2026-07-11 or earlier are the historical production research record and remain untouched.
The completed 2026-07-12/13 S/R and Gate Target Ladder research is preserved as compact decision evidence instead of full per-arm replay output:
sr-v2-validation-comparison.jsonandsr-v2-validation-cohorts.csvrecord the held-out detector comparison.sr-full-production-vs-candidate-comparison.jsonand its cohort CSV record the full-period clean-structure replacement decision.sr-explicit-target-ladder-comparison.jsonand its cohort CSV record exact GTL parity: 202,765 candidates, 1,086 qualified setups, 321 book trades, Sharpe 2.03, CAGR 50.0%, and max drawdown 21.4% in both arms.- The three
backtest-20260713-gtl-*.json/.mdpairs record the tuning, confirmation, and strength-sensitivity decisions. No stable improvement was found, so the production GTL stayed frozen.
The large backtest-sr-*.json replay files were removed after consolidation.
They duplicated hundreds of thousands of candidate rows while adding no
decision information beyond the compact comparisons and the narrative in
docs/research/sr-levels-and-exits.md. The original raw files remain available
in Git history if a forensic reconstruction is ever necessary.
The initial untracked backtest-20260712-sr-detector-rewrite.json is local-only
and is intentionally not part of the repository.
The 2026-07-17 post-stop re-entry decision is preserved in
daily_reentry_matrix.json. It is the canonical source for the nine-policy
daily replay, production-like full-universe ranking, the disjoint 2025+ book,
and the cost/capacity sensitivity matrix. The interpretation and production
decision live in
docs/research/post-stop-reentry.md.
The earlier post-stop-reentry-20260717.json,
post-stop-cooldown-sweep-20260717.json, and
gate-protected-stop-20260717.json reports were removed as superseded
intermediate experiments. They used weekly/hybrid entry cadence or tested the
rejected stop-adjustment path, and add no decision evidence beyond the final
daily matrix and narrative. Their matching one-off runners were removed too.
All remain recoverable from Git history. Rebuildable candidate pickle caches
are intentionally ignored and must not be committed.
Phase B fip breadth IC (2026-07-18/19) — compact evidence
Canonical artifacts:
fip-reconcile-20260719-000520.json— single-sourced authoritative ICs (unconditional liquid fip, tiers, prod-subset, mom-conditional, context signals). Membership symbol dumps stripped after the decision; narrative indocs/research/fip-breadth-ic.md.fip-breadth-20260718-211440-fingerprint.json— prod-snapshot fingerprint pass (fip IC −0.045 / t −2.91).
Removed as superseded / dangerous intermediate noise (recoverable from Git):
fip-breadth-20260718-211440-breadth.json(+ wrapper) — orphaned +0.0575 / t +5.12 from racing a partialresearch.sqlite. Kept out of the tree so it cannot be re-mythologized.fip-breadth-20260718-194828*.json— fingerprint-only partial run.fip-breadth-diagnostics-20260718-213705.jsonand…-213908.json— dual-path diagnostics superseded by the single-sourced reconcile.