The gate stack
Penrose uses multiple independent failure lenses because no single statistic catches every way a backtest can mislead.
Before the backtest
- Grounding and falsifiability - the claim must be traceable to the source and capable of being rejected by evidence.
- Economic feasibility - a claimed edge that cannot clear its declared fee structure should not consume an expensive reconstruction.
- Data and binding integrity - frequency, venue, point-in-time availability, survivorship, and declared roles must be compatible.
- Reconstruction fidelity - the executable test must answer the claim actually submitted.
Statistical and robustness gates
- Probabilistic and Deflated Sharpe Ratios
- explicit search-denominator accounting
- chronological fold sign stability
- stationary block bootstrap intervals
- permutation and alignment checks
- walk-forward stability
- combinatorial purged cross-validation
- regime concentration and declared-regime adherence
- parameter fragility
- tail asymmetry and widow-maker warnings
- cost sensitivity and capacity
- minimum detectable effect and power
- implausibility checks for broken reconstructions
Execution realism
Penrose resolves one venue-aware, all-in execution cost per claim from the declared execution
contract and the frozen, versioned config.EXECUTION_COST_SCHEDULE. Taker is the only survivable
default: a maker assertion is not fill evidence, and a daily bar cannot prove a passive fill or queue
position. A declared maker order therefore remains priced at taker and carries an
availability_unverified hazard.
The maker schedule is only a counterfactual. If a claim fails the 2× cost-margin gate at taker but
would clear it at the venue's maker cost, the result is a cost_contingent watch, never
research-supported, until forward fill-rate validation supports the cheaper execution assumption.
Confirmation controls
Discovery cannot read confirmation data. A distinct survivor may be evaluated against a single-use
reserve only when the declared confirmation has enough power. A failed power preflight returns
cannot_confirm without burning the reserve.
Why gates sometimes stop early
Early routing protects integrity and cost. If a claim lacks data, there is no scientific value in
generating code and computing precise-looking statistics over a fabricated substitute. A clean
needs_data is a successful outcome.
For the detailed plain-language treatment, see the repository's docs/GATES.md. Exact thresholds are
versioned with the engine.