You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Counterfactual sub-epic phase 3. The actual runner: given a fixture set and a judge variant (prompt version + provider/model/effort), replay offline, map outputs through the scoring contract, and print the same comparison report every other backtest uses.
Requirements
⚠️ Required pattern. Pure-core/thin-IO split exactly like backtest-corpus-export: all mapping/aggregation logic in a unit-tested core; the wrapper owns provider IO. Budget + cursor discipline from the design contract (partial runs persist scores + resume). Local ollama is the smoke path; BYOK providers behind explicit flags.
tsx scripts/counterfactual-replay.ts --fixtures <file> --variant <prompt-version|model spec> [--budget N] [--baseline <scores file>] → runs the variant, scores with scoreBacktest via the contract's classifier mapping, and with --baseline prints compareBacktestScores' Pareto-floored comparison + the shared renderer's report.
Abstentions counted per the contract; per-fixture raw outputs cached to a local artifacts dir (never committed) so re-scoring is free.
Problem
Counterfactual sub-epic phase 3. The actual runner: given a fixture set and a judge variant (prompt version + provider/model/effort), replay offline, map outputs through the scoring contract, and print the same comparison report every other backtest uses.
Requirements
tsx scripts/counterfactual-replay.ts --fixtures <file> --variant <prompt-version|model spec> [--budget N] [--baseline <scores file>]→ runs the variant, scores with scoreBacktest via the contract's classifier mapping, and with --baseline prints compareBacktestScores' Pareto-floored comparison + the shared renderer's report.Deliverables
Links & Resources
The sub-epic (parent), the design + assembler issues (blocked-by), scripts/backtest-corpus-export.ts (the split to mirror)
Boundaries
Offline only; spend-capped; no GitHub writes; artifacts stay local.
maintainer-only — model spend + judgment-layer evaluation.