ADR-0102 — Tradability decision protocol (durable rules)¶
Status: accepted (CVN-N001-EK-S01 ; plan_review bacfae82 PASSED + architecture plan_review 717127f5 PASSED, both strong consensus)
Context-of-record: the EI cost-sensitivity pilot returned inconclusive / under-powered; combined with the program history (abandoned ML-boost tracks, weak AUC→f1_buy transfer, best_iter=1), "run one more exploratory sweep" became a garden-of-forking-paths hazard. This ADR is the durable governance layer that replaces it.
Context¶
Deciding whether an ML entry edge is tradable is vulnerable to analyst degrees of freedom: thresholds, budgets, null-gates, and stopping rules can be tuned post hoc to manufacture a favourable verdict. The defences are established practice — purged & embargoed cross-validation (López de Prado, 2018), probability of backtest overfitting / CSCV (Bailey et al., 2014), pre-specified design of experiments (NIST/SEMATECH), false-discovery-rate control (Benjamini & Hochberg, 1995), and the garden-of-forking-paths argument for pre-registration (Gelman & Loken, 2013). What was missing was a written, reviewed, binding protocol that encodes them. This ADR holds the durable, instance-independent rules; the per-program values live in a charter (drafted in S01, filled in S02, locked in S03). The operational view is the decision tree; the control architecture is CVN-N001-EK-S01/architecture.
Decision¶
Adopt a pre-registered, falsifiable, budget-bounded decision protocol for tradability. It produces a defensible verdict — PROMOTE, KILL, or INFEASIBLE — and makes downstream optimisation before upstream proof structurally impossible. The rules below are binding on every charter that instantiates this protocol. This ADR contains no instance-specific value (no asset universe, label, horizon, or model class) — those are named in the charter.
Invariants¶
- Invariant 1 — registered program thesis. Every charter MUST name one program thesis (the hypothesis under test). The ADR defines the concept; it never hard-codes an instance.
- Invariant 2 — switch boundary. A change of hypothesis family (e.g. long-only → cross-sectional / market-neutral) is a separate Epic with its own estimand and gates — never a continuation. Anti-scope-creep.
- Invariant 3 — strict gate chain. Phases proceed in fixed order 2→6 (
predictivity → gross expectancy → cost survival → filtering → sizing/execution). No downstream gate is touched before the upstream gate is cleared. Each phase has an explicit entry condition (architecture §8). - Invariant 4 — verdict taxonomy. The only terminal/transition verdicts are
PROMOTE,ONE-ITERATION(rare, pre-paid: one bounded correction, then re-test),KILL(hierarchical tuple → family → program thesis), and a singleINFEASIBLEstate. A cleanKILL/INFEASIBLEis a success (a sharp decision). There is no genericPARKand noDEFERRED-INFEASIBLE.INFEASIBLEauthorises only substrate expansion, a charter revision that re-enters the S03 lock, or program stop — never feature/threshold iteration.INFEASIBLEis not evidence against the signal;KILLis evidence against the tuple/family under the locked protocol. - Invariant 5 — anti-snooping (constitutive).
- Action-policy tuning is not a free retry. It stays inside the same registered tuple only if its search space, selection metric, and nested-validation procedure were pre-registered before any OOS evaluation; it is part of the tuple's pre-paid budget (never "free"). Any change outside the declared space creates a new tuple and consumes tuple + multiple-testing budget.
- Structural change = new tuple. Changing any coordinate on the charter's closed list of structural coordinates (label family, feature family, model class, universe, …) creates a new tuple.
- Final-holdout discipline. The final holdout is touched once per tuple, at the verdict, logged with a date. It may not choose thresholds, top-k rules, calibration, cost-survival adjustments, or execution rules. A second touch invalidates the verdict (the tuple cannot
PROMOTE; it is killed or re-registered with a fresh holdout under committee approval). - Source of the next tuple. Theory / siloed exploration only — never a confirmation result. Siloed exploration may not inspect the final holdout or Phase-2 confirmation; transferred insight is recorded as prior rationale before registration.
- Cost re-tuning is post-hoc →
KILL tuple(Phase 4).
- Invariant 6 — budgets. Family,
ONE-ITERATION-slot, and FDR / multiple-testing budgets exist and are decremented; exhausting the family budget without aPROMOTEtriggersKILL program thesis. The sizes are charter values (S02). - Invariant 7 — mandatory registries. Registered tuples (with a minimal schema, architecture §4.1) · killed-tuple register with a blocking anti-resurrection gate and a material-equivalence rule · FDR ledger · final-holdout access log · reopening conditions. A registry MUST block, not merely exist.
- Invariant 8 —
E_econ_min≠E_pred_min. The economic break-even threshold (E_econ_min, from conservative P90 cost + target capacity) and the minimum predictive effect (E_pred_min, the predictive lift that meetsE_econ_minthrough a documented mapping) are distinct and never conflated. Phase 2 testsE_pred_min; Phase 4 testsE_econ_min. - Invariant 9 — authority & gates. The charter is locked (S03) under joint sign-off (operator + methodology reviewer + risk owner), with role separation (the locker ≠ the run launcher). The risk-owner veto is blocking and cannot be overridden by methodology approval alone (scope: architecture §7). This protocol confers no trading or deployment authority; any run is non-deployment until separately approved.
Relation to other ADRs¶
- ADR-0097 — experiment reports template (exploratory-vs-confirmatory discipline) composes with this protocol's verdicts.
- ADR-0099 — existence-vs-selection boundary; this protocol's gate chain is a staged-proof instance.
- ADR-0101 — the S01 doc set (hub · plan · architecture · runbook · test strategy) carrying this ADR.
- ADR-81 — the protocol's Story transitions and gate rituals.
Rollback¶
Revert this ADR + the charter + the S01 doc set; tradability decisions fall back to ad-hoc exploratory sweeps (the status quo this ADR corrects). No runtime/code impact — the invariants are governance rules; their automated enforcement (registries, gates) is built in S03/S04 and rolls back with those stories.