Skip to content

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 single INFEASIBLE state. A clean KILL/INFEASIBLE is a success (a sharp decision). There is no generic PARK and no DEFERRED-INFEASIBLE. INFEASIBLE authorises only substrate expansion, a charter revision that re-enters the S03 lock, or program stop — never feature/threshold iteration. INFEASIBLE is not evidence against the signal; KILL is 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-hocKILL tuple (Phase 4).
  • Invariant 6 — budgets. Family, ONE-ITERATION-slot, and FDR / multiple-testing budgets exist and are decremented; exhausting the family budget without a PROMOTE triggers KILL 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_minE_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 meets E_econ_min through a documented mapping) are distinct and never conflated. Phase 2 tests E_pred_min; Phase 4 tests E_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.