Navigation

← Audits

Three-axis probe formalization — orthogonal, parameterless, agnostic

SETTLED2026-06-09

This audit turned the three house rules for accepting a new data column — it must add information nothing else captures, it must contain no hand-tuned dials, and any two correct programs computing it must agree — into three programs that check those rules automatically plus one combined yes/no, and it corrected a mistranslation of the third rule that had turned 'any correct implementation agrees' into 'works on any asset'.

Why it carries this status

Lifecycle, not result. This says where the audit sits in its process — never whether what it found was good.

**Status:** **FORMALIZED + PROBE BUILT (runnable).** Provenance-corrected definition of the agnostic axis; a runnable probe per axis; one promotion gate over the three.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/CLAUDE.md

2026-08-17. Derived from folder evidence, then adversarially challenged; the challenge pass was upheld.

The verdict

The audit's own conclusion, reproduced in full from the source below. Not a summary — this is the document, rendered. Links inside it that point at unpublished files are shown as plain text rather than as links that would 404 here.

Verdict — three-axis probe formalization

Bottom line: the three axes are now each a runnable probe, combined by one promotion gate that enforces the operator's rule in code. The agnostic axis was redefined to match Terry's verbatim source (algorithm-invariant), correcting a drift that had it meaning "asset-agnostic."


What changed

  1. Definition correction (load-bearing). Terry's Agnostic = algorithm-invariant (msg id=428), not asset-invariant. The cross-asset/multi-slice work is the orthogonal axis's substrate. Provenance: PROVENANCE.md.
  1. Three probes built / wired: - Orthogonal — orthogonality_probe.py (+ cascade), reused unchanged. - Parameterless — parameterless_probe.py (new, AST + constants_registry.toml). - Agnostic — agnostic_probe.py (new, algorithm-invariance oracle).
  1. One gatethree_axis_gate.py (new): runs all three in cost-ladder order, applies promote = parameterless AND agnostic AND orthogonal, feature-tunable knob vetoes.

Does it prevent the near-promotion? Yes — demonstrated

three_axis_gate.py --demo BLOCKS the hardcoded add_antropy impl on the parameterless axis (inline order=3/delay=1), for free, before any ClickHouse cost. The pinned bar_svd_entropy clears the free static axis and is held PENDING on the still-owed evidence (a second reference implementation for the agnostic oracle + a bigblack orthogonality run) — the gate never fakes a PASS.

Rolling ledger

DateStepResult
2026-06-09Provenance audit (Terry msg 428/429 pulled live)Agnostic = algorithm-invariant confirmed; asset-agnostic reading is operator-side drift
2026-06-09Built parameterless + agnostic probes + gate + registryAll runnable; demos PASS the self-checks
2026-06-09Gate demoFeature-tunable impl BLOCKED on parameterless (the prevented mistake); pinned impl PENDING
2026-06-13W1 distribution view shipped (report-only)worst_* (L∞, "redundant somewhere?") now paired with w1_* (L1 = mean on [0,1], "redundant everywhere?"). On real entropy-spike data, svd (worst 0.97 / W1 0.53) separates from permutation_entropy (worst 0.97 / W1 0.77) — same worst, the distribution distinguishes a regime-local spike from a broad duplicate. Verdicts + gate decisions byte-identical (proven same-env). AXIS-1-W1-DISTRIBUTION.md

Open items (honest)

  • Orthogonal axis: S4 value-add over baseline still circular (Pearson-derived labels); CODEC/O-info nulls HELD. The orthogonal axis is a strong screen, not yet a closed gate. (AXIS-1-ORTHOGONAL.md)
  • W1 as a soft signal: shipped report-only; promoting W1 to a gate input would need a calibrated threshold (none exists yet) — deliberately out of scope. (AXIS-1-W1-DISTRIBUTION.md)
  • Agnostic TEST B: needs a second independent reference implementation registered per active candidate to move from PENDING to PASS.
  • Crypto-only scope: Terry's substrate names BTC/ETH/EURUSD; the live probe dropped EURUSD. The narrowing (msg id=209) is unverified against a Terry source — confirm with Terry. (PROVENANCE §6)

Not done here (deliberately)

  • No production wiring of the gate into selection_finalize.py or a /3axis:* slash command yet (migration step 4 — kept out of this PR to keep it reviewable).
  • No change to the orthogonal probe or the Selection cascade.
  • No deployment — Deployment remains 🔒 BLOCKED on Terry per METRIC-EVALUATION-PROTOCOL.md.
source: findings/evolution/audits/2026-06-09-three-axis-probe-formalization/verdict.md

Still owed 9

What it claims, and what backs each claim 20

Every row pairs a claim with the file it came from and the verbatim text in that file. The sources sit above the deploy root, so the quote is embedded and the path is printed as text rather than linked — a link would resolve on a laptop and 404 here.

ClaimEvidence
The supervisor's 'agnostic' axis means algorithm-invariant (two correct implementations converge), not asset-invariant; this is quoted from his own message rather than inferred.
CONFIRMED
2 source messages (Telegram msg id=428 2026-04-22 and its reaffirmation id=429); 0 messages broaden it to asset level
3. **Agnostic** — **algorithm-invariant. Two correct implementations of the same feature should > converge to the same answer.** A column that silently dispatches between ApEn and PE based on > window size is two columns wearing one name.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/PROVENANCE.md
The 'agnostic = works across multiple assets' reading was drafted operator-side, not by the supervisor, and the cross-asset KS test attributed to his framework is not in that framework.
REFUTED
git authorship: MD NASIM, 2026-04-28; drift first visible ~2026-05-06 (chronicle ids 2782/3638/4415/4156)
| Agnostic = "works across multiple assets" / cross-asset KS | **operator-drafted** | `3-AXIS-DISCIPLINE-TEMPLATE.md` → `git log`: **MD NASIM**, 2026-04-28. `FRAMEWORK.md` → operator-drafted, *"AWAITING Terry's accuracy review."*
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/PROVENANCE.md
The cross-asset / multi-regime grid was not discarded — it was relabelled as the evidence substrate of the orthogonal axis, where the supervisor's BTC/ETH/EURUSD × 3-regime requirement actually belongs.
CONFIRMED
3 symbols × ≥3 regimes required; probe aggregates across 7 regime epochs
The BTC/ETH/EURUSD × ≥3-regime requirement belongs **here**, not to the agnostic axis. The probe's `min_regime_pass_rate` / `regime_breakdown` are the verdict-stability view of orthogonality across regimes
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-1-ORTHOGONAL.md
The promotion rule is now enforced in code as a conjunction in which a per-feature tunable knob vetoes promotion outright, while a project-wide constant does not block.
CONFIRMED
3 axis probes composed by 1 gate, run in cost-ladder order (static/free first, ClickHouse grid last)
promote = (parameterless.verdict == "PASS" and agnostic.verdict == "PASS" and orthogonal.verdict == "PASS")
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/PROBE-ARCHITECTURE.md
The gate demonstrably blocks the hardcoded implementation of an already-shipped feature at the free static axis, before any database cost is incurred.
CONFIRMED
1 of 6 demo candidates blocked at axis 1 with agnostic+orthogonal SKIPPED; 2 of 6 PROMOTE; 3 of 6 blocked on orthogonal (evidence/three_axis_gate_demo.json)
`three_axis_gate.py --demo` BLOCKS the hardcoded `add_antropy` impl on the **parameterless** axis (inline `order=3`/`delay=1`), **for free, before any ClickHouse cost**.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/verdict.md
The gate refuses to fake a pass: the pinned implementation is held pending on evidence that is still owed rather than promoted.
CONFIRMED
as regenerated after the 2026-06-12 hardening the same candidate reads parameterless PASS / agnostic PASS / orthogonal FAIL in evidence/three_axis_gate_demo.json
The pinned `bar_svd_entropy` clears the free static axis and is held **PENDING** on the still-owed evidence (a second reference implementation for the agnostic oracle + a bigblack orthogonality run) — the gate never fakes a PASS.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/verdict.md
The algorithm-invariance oracle was made real for all five production registry candidates by comparing a library implementation against a from-scratch one, and all five agreed to within floating-point noise.
MEASURED
5 candidates × 6 series = 30 comparisons; worst absolute difference 1.42e-14 (bar_hjorth_complexity), best 0.0 (bar_petrosian_fd); closed-form tolerance 1e-9
**TEST B is now a REAL oracle** for all 5 production registry candidates: antropy (library) vs from-scratch references (this repo), 6 series each (3 seeds × {random-walk, heavy-tail t₃}). Result: ALL PASS, worst |Δ| = 1.4e-14
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-3-AGNOSTIC.md
A distribution view (Wasserstein-1 to the zero-redundancy ideal) was added alongside the worst-cell verdict and separates a regime-local redundancy spike from broad redundancy that the worst cell alone cannot distinguish.
MEASURED
9 entropy candidates × 208 cells; bar_svd_entropy worst |ρ| 0.9745 / W1 0.527; bar_permutation_entropy worst |ρ| 0.9717 / W1 0.7695
**Same worst (~0.97), W1 separates them cleanly (0.53 vs 0.77).** This is precisely the distinction the operator asked the distribution to make — and worst-cell alone cannot see it.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-1-W1-DISTRIBUTION.md
The new distribution statistic is auditable rather than a black box: it is provably equal to the mean of the per-cell scores on a 0-to-1 scale, and this identity was machine-checked along with negative controls.
MEASURED
4 of 4 self-checks pass; identity W1 == mean at rtol 1e-12 against scipy 1.17.1; separation 2.13x against a 1.8x floor
"check": "separation_global_vs_regime_local", "pass": true, "detail": "worst identical (0.97 vs 0.97); W1 0.97 vs 0.4548 = 2.13x separation (>=1.8x required)"
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/evidence/w1_selfcheck.json
Five registry candidates that the gate had held pending were shown to be blocked by a data-format mismatch, not missing evidence; an adapter converted the existing campaign records into the gate's contract with no disagreement on re-derived labels.
MEASURED
5 candidates; 208 valid cells (2 skipped) × 7 regime epochs; worst |ρ| 0.67–0.84 against a 0.85 watch line; zero disagreements re-deriving stored cell labels
Result: hjorth ×2 / petrosian / katz / svd flip PENDING → **PASS** on 208 valid cells × 7 regime epochs each (worst ‖ρ‖ 0.67–0.84, all ≤ 0.85; evidence: `evidence/campaign_orthogonality_summary.json`).
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-1-ORTHOGONAL.md
That adapter result was itself wrong until corrected the same day: skipping the cross-candidate stage briefly reported promotion for candidates that are near-duplicates of each other.
REFUTED
sibling worst |ρ| 0.9985 (hjorth pair), 0.9745 (svd-petrosian), 0.92–0.93 (hjorth-katz); leave-one-out R² > 0.86 for every candidate; corrected verdicts petrosian/katz PROMOTE, svd BAN, hjorth pair BAN
The Finish data vindicates the deferral: `hjorth_mobility ↔ hjorth_complexity` worst ‖ρ‖ **0.9985** (mutual duplicates); `svd_entropy ↔ petrosian_fd` **0.9745** (and petrosian is now in production ⇒ current-panel redundancy); hjorth ↔ katz 0.92–0.93
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-1-ORTHOGONAL.md
A sweep across all catalogued candidate dials identified which shared settings are genuine project-wide conventions, reproducing an earlier hand-written plan mechanically.
MEASURED
40 candidates in the seed inventory; 16 members across 2 families share mfdfa_detrend_order=1; 4 members share takens_embedding_tau=1; 9 members reuse ORDINAL_M/ORDINAL_TAU; promotion needs >=4 members; plan_agreement PASS
**Two new constants recommended:** `MFDFA_DETREND_ORDER = 1` (16 members) and `TAKENS_EMBEDDING_TAU = 1` (4 members) — both clear gates (a)+(b). Plus REUSE of the existing `ORDINAL_M`/`ORDINAL_TAU` (#513).
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-2-PROMOTION-SWEEP.md
The probe's own verdict for the eight MF-DFA-family candidates was wrong and the operator's challenge to it was upheld: each carries many hand-picked dials, not one.
REFUTED
8 candidates re-verdicted; 8 to 16+ hand-picked parameters found per family across 4 research tracks (agentCount 8, ~230 source fetches, evidence/mfdfa_knob_research.json); honest rescue count drops 16 to 8 candidates
All 8 are **FAIL — multiple unfrozen, handpicked, feature-wise knobs** (q-grid, scale schedule, fit range at minimum; plus per-variant extras above). Pending breakdown after correction: **1 PASS (#18) · 0 CONDITIONAL · 8 FAIL**.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-2-MFDFA-KNOB-RESEARCH.md
The root cause of that wrong verdict was that the probe trusted hand-seeded inventory rows as complete; the fix makes an under-declared row fail closed instead of scoring well.
CONFIRMED
1 incident row reproduced returning FAIL with 3 under-declared findings; 15 MF-DFA inventory rows corrected to full knob sets
a missing required knob becomes an **UNDER-DECLARED** blocking finding → **fail-closed** (never PASS/CONDITIONAL). Teeth-proven: the exact incident row shape (mfdfa with only `detrend_order`) now returns FAIL with 3 UNDER-DECLARED findings.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-2-MFDFA-KNOB-RESEARCH.md
Every not-yet-evaluated candidate received a concrete no-dials verdict before any expensive orthogonality compute was spent on it.
MEASURED
25 pending single-series candidates: 4 PASS / 8 CONDITIONAL / 13 FAIL / 3 out-of-scope (the 8 CONDITIONAL later corrected to FAIL); inventory total 40 candidates
**No promotion compute is wasted**: 13 FAIL + 8 CONDITIONAL candidates are tested for orthogonality **for the audit record only** — the gate will veto them regardless of their ρ.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-2-INVENTORY-TRIAGE.md
A hidden library default that a call-site-only scan would have passed silently is now caught by live signature inspection.
CONFIRMED
1 hidden default (kmax=10) caught; 1 unregistered constant (SVD_NORMALIZE) caught and registered project-wide
**Opaque-callable hole closed**: `antropy.higuchi_fd` (hidden `kmax=10` default) now **FAILS** — the old call-site-only scan would have passed it silently.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-2-PARAMETERLESS.md
Of the four candidates that cleared the no-dials axis, three were measured on real market data and only one passed in every cell.
MEASURED
210 tests = 10 regime slices × 21 (symbol,threshold) cells; #19 210/210 pass at max |ρ| 0.666; #16 BAN at 0.969 with 5 cells over the line (140/65/5); #20 WATCH at 0.937 with 9 cells in band (201/9/0); #18 untested
| 19 | CECP velocity | **PASS** | **210/210 cells pass** — max‖ρ‖ 0.666, max R² 0.123, min h_norm 1.000.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-2-INVENTORY-TRIAGE.md
The orthogonal axis is honestly described as a strong screen rather than a closed gate, because its incremental value over the simple baseline is undemonstrated and two of its null distributions are withheld rather than faked.
OPEN
4 documented limits; CODEC and O-information nulls HELD (no faithful open-source null exists); only Chatterjee xi is fully gated
**No demonstrated value-add over baseline.** S4 gap-closure DEFERRED (circular: labels are Pearson/Spearman-derived). The verdict says so: *"ξ REPRODUCES the Pearson-derived labels … NO incremental value over Pearson/Spearman is demonstrated."*
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AXIS-1-ORTHOGONAL.md
The live orthogonality substrate is crypto-only, narrower than the supervisor's stated BTC/ETH/EURUSD, and the narrowing could not be traced to any message from him.
OPEN
EURUSD dropped 2026-05-30; 1 cited message (id=209) not found in either chat
The cited narrowing (msg id=209) could **not** be found in either the supergroup or the legacy chat — so the crypto-only scope is **unverified against a Terry source** and should be confirmed before being treated as his ruling.
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/PROVENANCE.md
None of this was wired into production or deployed, deliberately.
ASSERTED
migration step 4 of 4 not executed; deployment recorded as blocked on Terry per METRIC-EVALUATION-PROTOCOL.md
No production wiring of the gate into `selection_finalize.py` or a `/3axis:*` slash command yet (migration step 4 — kept out of this PR to keep it reviewable).
findings/evolution/audits/2026-06-09-three-axis-probe-formalization/verdict.md

The audit folder 11 markdown files

Source of record: findings/evolution/audits/2026-06-09-three-axis-probe-formalization/ — not published, so these are listed rather than linked.

FileRole
AXIS-1-ORTHOGONAL.mdOrthogonal axis: what the existing probe does, four honest limits, the gate's PASS contract, and the campaign-format adapter plus its same-day sibling-stage correction
AXIS-1-W1-DISTRIBUTION.mdReport-only Wasserstein-1 distribution view beside the worst-cell verdict: mean-identity proof, rejected alternatives, worked real-data result, byte-identity verification
AXIS-2-INVENTORY-TRIAGE.mdParameterless axis job 3: per-candidate verdicts for every untested candidate, the triage rule, consistency cross-checks, the CECP orthogonality update, and the correction note
AXIS-2-MFDFA-KNOB-RESEARCH.md2026-06-12 correction: formula-level research refuting the MF-DFA single-knob claim, corrected FAIL verdicts, root-cause gap analysis, and the fail-closed family-manifest fix
AXIS-2-PARAMETERLESS.mdParameterless axis job 1: the static AST gate, the constants-registry taxonomy, worked demo verdicts, false-negative holes, and the 2026-06-12 hardening list
AXIS-2-PROMOTION-SWEEP.mdParameterless axis job 2: the three-gate bar for promoting a shared dial to a project-wide constant, verdict taxonomy, per-knob results, and the rescue cohort
AXIS-3-AGNOSTIC.mdAgnostic axis: the corrected definition and three tests (no-dispatch, convergence oracle, doc-code consistency), worked demo results, and the 2026-06-12 real-oracle hardening
CLAUDE.mdHub: status FORMALIZED, the three axis definitions quoted from source, the promotion rule, file map, probe-code map, dashboard-twin pointer
PROBE-ARCHITECTURE.mdDesign rationale for one gate over three pluggable probes, rejected alternatives, cost-ladder execution order, the verbatim promotion rule, and the four-step migration path
PROVENANCE.mdVerbatim supervisor messages 428/429, git-authorship ledger of Terry-authored vs operator-drafted definitions, the agnostic drift timeline, and the unresolved crypto-only scope flag
verdict.mdPlain-English bottom line, two-entry rolling ledger (2026-06-09 build, 2026-06-13 W1), honest open items, and what was deliberately not done

Dashboard twin

findings/dashboard/campaigns/2026-06-09-three-axis-probe-formalization/

Generated by findings/dashboard/build_audits.py from findings/evolution/audits/2026-06-09-three-axis-probe-formalization/AUDIT_LEDGER.json — never hand-edited. Each quote was verified to occur in the file named beside it when the ledger was written.