Skip to content

Issue #399 / #411 — production-parity replay readiness

Current outcome: blocked

No replay metrics are produced or interpreted as a canonical skill result until both the #397 corpus gate and #398 eligible, mature production-policy evidence gate pass. The current #397 audit documents 0/32,136 target hours and 0/4,320 warm-up hours, with source provenance unavailable. The prospective #398 shadow ledger has not yet accumulated eligible forecasts with matured outcomes. Policy identity alone does not attest that the live execution wiring was production parity.

The checked-in machine-readable report, ISSUE_399_PRODUCTION_PARITY_BLOCKED.json, contains actionable blockers, evidence paths and hashes, metrics: null, and explicitly denies canonical interpretation. It is a readiness audit, not a forecast evaluation. Regenerate it from the repository root with:

PYTHONPATH=src python -m btc_timesfm.research.production_parity_replay \
  --corpus-audit docs/research/ISSUE_397_CANONICAL_BENCHMARK_AUDIT.json \
  --output docs/research/ISSUE_399_PRODUCTION_PARITY_BLOCKED.json

When an actual #398 build_shadow_status report is available, pass its JSON with --ledger PATH. The accepted shape is the report's schema_version: 1, a nonempty policy_id, named champion.configuration_id, and evidence with schema_version: 6, forecast_schema_version: 1, confirmatory_forecasts, expected_pairs, matured_pairs, maturity_fraction, missing_pairs_by_horizon (2h, 4h, 8h, 16h), failures, failed_attempt_pairs, and forecast_versions. Counts must be exact and reconcile (expected_pairs = confirmatory_forecasts * 4 + failed_attempt_pairs, missing pairs equal expected minus matured, and version counts sum to confirmatory forecasts). Replay readiness conservatively requires at least one confirmatory forecast, all expected pairs mature, and no failed attempts. A parity attestation is additionally required as top-level policy_parity_attested: true, or policy_parity_attestation: {"attested": true, "policy_id": "..."} scoped to the report's policy ID. An arbitrary status string cannot qualify the ledger.

The corpus gate requires status: ready_for_replay, exact 32,136 target and 4,320 warm-up observations with no missing hours, zero gaps/duplicates/errors, a named venue and USD pair, source file/SHA-256, and vintage/revision provenance. It deliberately ignores eligible_for_skill_comparison, which the

397 audit keeps false until this replay and validation have occurred. Neither

gate creates metrics or permits a canonical skill claim. Do not modify production state to obtain evidence.

Replay contract after gates pass

Freeze an immutable replay manifest with corpus and ledger SHA-256, code revision, exact production policy/configuration identity, command, and fixed evaluation cutoff. Compare the exact production policy against persistence, seasonal-naive, and the strongest simple baseline on the intersection of exact (origin_at, target_at, horizon) keys. Publish MAE, signed bias, direction accuracy, sample count, and failures by horizon and regime; report unavailable strata and failed forecasts explicitly rather than dropping them. Use paired moving-block uncertainty to preserve temporal dependence and a predeclared family-wise multiplicity adjustment spanning all comparisons and strata.

Do not infer missing values, stitch venues, substitute BTCUSDT for BTC/USD, reuse immature outcomes, or call a blocked result a canonical skill estimate. Once evidence is available, rerun the readiness command, validate each gate, then execute and separately archive the frozen replay and its complete manifest.

Issue #411 capture/readiness path

The #411 report uses the same audit implementation, validates the frozen #410 protocol schema and digest before readiness, and keeps canonical historical corpus evidence separate from the frozen #419 prospective cohort. Generate it with --output docs/research/ISSUE_411_PARITY_BASELINES_BLOCKED.json; provide the immutable #419 report with --frozen-cohort PATH when available. A missing, invalid, or blocked cohort is an explicit blocker. Passing readiness computes no metrics and does not itself execute any models.

At the 2026-09-27 #419 snapshot, the prospective cohort had 48 timestamp-eligible pre-cutoff forecasts, all 48 legacy/unversioned, zero confirmatory origins and zero eligible pairs. The provenance-complete 11:00 UTC origin was not mature at the frozen as-of time. It is excluded under #419; older mixed-version forecasts must not be scored. The historical canonical source gate also remains blocked. Keep metrics null until exact registered production captures and point-in-time inputs satisfy the frozen protocol; prospective results never become canonical historical results.