A catalogue of 64 published "complexity" measurements that could become new columns of Bitcoin bar data — each tied to a specific paper and a specific open-source implementation, and each checked against what the project already ships — followed by four measurement runs on real exchange data that kept three of them (Petrosian, Katz, dispersion entropy), shelved several on a house rule against tunable knobs, and left 41 of 65 candidates untested.
Lifecycle, not result. This says where the audit sits in its process — never whether what it found was good.
**Status:** **Phase 1 evidence complete with G9 adversarial audit applied.** 9 covered / 55 not-covered (incl. 1 source-blocked) = 64 candidates. Methodology completeness items (firecrawl, exa, crucible plugin, HTML+SVG presentation) deferred to subsequent shifts per operator direction.
2026-08-17. Derived from folder evidence; the adversarial challenge pass CORRECTED the first reading. Quote verified verbatim at verdict.md:4. But it proves only that PHASE 1 evidence closed, not that the audit is terminal — and the quote's own tail ('Methodology completeness items ... deferred to subsequent shifts') concedes carry-over. The status contradicts the folder's own CLAUDE.md header (line 4): 'PHASE 1 EVIDENCE COMPLETE (post-G9 + post-call) — FRAMEWORK.md AWAITING TERRY'S ACCURACY REVIE
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.
Date: 2026-05-09 Status: Phase 1 evidence complete with G9 adversarial audit applied. 9 covered / 55 not-covered (incl. 1 source-blocked) = 64 candidates. Methodology completeness items (firecrawl, exa, crucible plugin, HTML+SVG presentation) deferred to subsequent shifts per operator direction.
The deliverable's exit-criterion content requirements are met:
Reproducible from this folder:
RESEARCH-DIGEST.md — canonical 64-row tableVERIFICATION-VERDICT.md — citation + FOSS verification with both Layer-1 (14 modern papers) and Layer-2 (21 foundational papers) explicitBASELINE-RULED-OUT.md — Phase-1 baseline (existing schema + ruled-out audits + settled positives + doctrine)DUPLICATE-ELIMINATION.md — parallel-session reconciliation (4 papers transferred to other sessions, 0 candidates dropped)verdict.md — G9 audit resultsTwo Explore agents were dispatched: one Defender (confirm deliverable claims), one Attacker (find flaws). Five attacker findings + one defender NOT-CONFIRMED claim were surfaced. All findings were independently re-verified by direct file reads before any deliverable change was applied. One attacker finding was rejected on verification.
Attacker claim: The cited evidence — shannon_entropy_signs_bar in 2026-04-27-cost-realistic-cadence-harness/CH_COLUMN_SAFETY_MANIFEST.md:134 — is from a forex audit (fxview_cache.forex_bars), not the crypto schema. Per Terry's id=209 ("opendev-py = crypto only"), forex is out-of-scope.
Independent verification:
CH_COLUMN_SAFETY_MANIFEST.md line 1 verbatim: # ClickHouse Column Safety Manifest — fxview_cache.forex_bars (explicit forex schema)2026-04-27-cost-realistic-cadence-harness/CLAUDE.md confirms forex iter-21b harness auditgrep "shannon" opendeviationbar-py/python/opendeviationbar/clickhouse/schema.sql → NO MATCH (no shannon column in crypto schema)grep "shannon" crates/opendeviationbar-core/src/types.rs → NO MATCHDisposition: ACCEPTED. Row #1 reclassified from covered to not-covered.
Why this matters: The previous adversarial pair on Audit Verdicts (run earlier in this session) had classified #1 as covered. That pair's output was wrong on this candidate. G9 caught the cross-asset scope error.
Attacker claim: Status line "10 covered / 54 not-covered / 1 source-blocked" sums to 65, but only 64 candidates exist.
Independent verification: The math is ambiguous, not strictly wrong. #64 is BOTH not-covered AND source-blocked (the source-blocked is a sub-flag of not-covered, not a separate bucket). However, the wording reads as three buckets summing to 65.
Disposition: ACCEPTED — wording clarified. Status line now reads "9 covered + 55 not-covered = 64 total, where 1 of the not-covered is source-blocked (#64)."
Attacker claim: RESEARCH-DIGEST claims "21 of 21 foundational papers got verified DOIs" but VERIFICATION-VERDICT only shows 14 entries.
Independent verification: The 14 entries in VERIFICATION-VERDICT.md were Layer-1 (deep-research bibliography), not Layer-2 (foundational anchors). The 21 foundational paper resolutions WERE performed (OpenAlex batch run on 2026-05-09) but the resolution table was not committed to the audit folder.
Disposition: ACCEPTED — gap closed. Added a new subsection to VERIFICATION-VERDICT.md: "Layer-2 foundational paper resolution (OpenAlex API, 2026-05-09)" with the full 21-row resolution table, year-validation, and OA-URL status per row.
Attacker claim: RESEARCH-DIGEST claims "1 year-mismatch caught + corrected" but VERIFICATION-VERDICT defects table shows 3 year corrections.
Independent verification: The "1 year-mismatch" claim refers to the Layer-2 OpenAlex foundational batch (Di Matteo 2003 → 2004 correction). The 3 year corrections in VERIFICATION-VERDICT defects (Gemini #2, #9, #10) are Layer-1 deep-research-paper defects — a separate batch of work.
The attacker conflated Layer-1 and Layer-2.
Disposition: REJECTED on independent verification. The "1 year-mismatch" claim is technically correct for the Layer-2 batch. No change applied.
Disposition: Resolved by Challenge A2's wording fix.
Defender concern: Methodology Step 6 of RESEARCH-DIGEST claims an adversarial pair on Audit Verdicts produced 1 confirmed hit + 10 over-attributions, but verdict.md was a placeholder, so the per-claim findings weren't documented.
Disposition: ACCEPTED — partially. This verdict.md (which you are now reading) documents both the prior adversarial pair's outcome AND the current G9 audit. The 10 over-attributions from the prior pair are summarized below:
The prior adversarial pair on Audit Verdicts (earlier in this session) caught 11 attacker claims, of which 1 was real (originally classified as #1 Shannon Entropy covered — now overturned by G9) and 10 were over-attributions:
These 10 over-attributions were rejected via direct file reads at the time and remain rejected after G9 review.
| Metric | Pre-G9 | Post-G9 |
|---|---|---|
| Candidates classified covered | 10 | 9 |
| Candidates classified not-covered | 54 | 55 (1 of which is source-blocked: #64) |
| Total candidates | 64 | 64 |
| Methodology evidence completeness | Strong (4-source novelty + adversarial pair) | Stronger (+ G9 + 21-paper foundational table + this verdict) |
| Identified flaws (after applied fixes) | 5 unaddressed | 0 unaddressed (1 attacker over-claim rejected on independent verification) |
The reclassification of #1 Shannon Entropy adds 1 candidate to the orthogonal pool — a net positive for the deliverable's substantive content.
git ls-remote (spot-checks confirmed antropy@dfbe688, OPyN@0c1de30, mfbm@f7b683c)CH_COLUMN_SAFETY_MANIFEST.md provenance for #1; G9 caught it on direct re-reading. Future audits should explicitly check schema scope per coverage attribution.These items strengthen the deliverable per Terry's broader mandates but are NOT blocking the exit criterion:
| Item | Mandate | Status |
|---|---|---|
| Firecrawl pass on 34 papers | id=429 SOTA tool list | Paused — bigblack cannot reach littleblack via Tailscale; deferred to laptop run if needed |
| exa completeness check | id=429 SOTA tool list | Deferred per operator direction |
crucible plugin invocation (literal, not just functional equivalent) | id=429 | Deferred |
HTML+SVG presentation in style of site-map.html | msg 2026-05-06 08:08 | Deferred |
| License audit on GPL-3.0 / NO-license / NOASSERTION FOSS dependencies | Practical for Phase 2 implementation | Deferred |
Plugin-added column check in python/opendeviationbar/plugins/ | Coverage hole flagged earlier | Deferred |
| Cao 2013 (#29-31) / Vignat-Bercher 2003 (#12) / Puoti 2025 (#17) supplementary citation resolution | Per-candidate citation tightening | Deferred per operator direction |
| Phase 2 — empirical orthogonality validation (Spearman ρ probe + h_norm + MI + predictive-power tests on bigblack BTCUSD data) | Terry's KB&L "spike them empirically" mandate | Separate scope of work — NOT Phase 1 |
Commit the G9 audit results (this verdict.md + the 3 already-applied edits in RESEARCH-DIGEST.md and VERIFICATION-VERDICT.md) as a single follow-up commit on the findings/orthogonal-features-btcusd branch.
After that, the deliverable is at a defensible stopping point for Phase 1. Operator decides next: continue with Path B items above, push branch + open PR for Terry's review, or pause.
After this verdict was first written, Terry's call (2026-05-12) clarified that the orthogonality test he applies is a 3-axis framework (ORTHOGONAL × PARAMETERLESS × AGNOSTIC) per his msg 428 rubric — not just the binary coverage-novelty check used in Phase 1. The original Phase 1 deliverable (PR #493) procedurally met the exit criterion's text requirements but did not engage with the deeper statistical orthogonality structure Terry expects.
In response, FRAMEWORK.md was authored as an 8-level per-candidate analysis structure addressing all 24 of Terry's standing instructions. The framework is AI-drafted and AWAITING Terry's accuracy review per his call directive ("You will send me a list of questions. I will tell you if those questions are accurate or not"). It must not be applied to candidates until Terry confirms.
Once approved, per-candidate FRAMEWORK.md application outputs will land in candidates/ and replace this verdict's "Held" + "Outstanding work" sections with concrete per-candidate KEPT/DROPPED/DEFERRED verdicts. That output is the input to Phase 2.
Status: Spike folder spike_2026-05-27/ — 5 of 5 candidates COMPLETE + cross-candidate matrix run COMPLETE + strict-manifest verification COMPLETE. Final slate after cluster resolution + parameterless audit: 2 PROMOTE (Petrosian #43, Katz #44), 1 DEFERRED (SVD Entropy #10), 2 DROP (Hjorth Mobility #14, Hjorth Complexity #15). The 5×5 cross-candidate matrix run revealed a previously-undetected 3-way Hjorth-Katz sibling cluster (Mobility ↔ Complexity ρ −0.991 median; Mobility ↔ Katz +0.821 median, +0.927 max; Complexity ↔ Katz −0.819 median, −0.921 max). Under operator-direction-2026-05-27 empirical-evidence-first tiebreaker applied across the 3-way cluster, Katz wins on all three measurements (lowest max \|ρ\| 0.63, lowest max R² 0.20, lowest LOO R² 0.70 of the three). Authored under operator-authorized gate relaxation (same precedent as candidate #65 persistence-landscape pilot); the AI-drafted FRAMEWORK.md remains AWAITING Terry's accuracy review, but the Phase 2 work proceeds per operator direction in the meantime, with explicit attribution of which checks are Terry-mandated vs operator-extended.
Two preliminary verdicts from 2026-05-27 were REVISED before column promotion:
spike_2026-05-27/CROSS_CANDIDATE_FINDINGS.md for the matrix evidence.order=3, delay=1, normalize=False) that are real per-feature knobs — PE's m=3 itself is empirically a hardcoded magic number, not a project-wide constant by any reasonable reading of Terry's _q1000 precedent (which has typed units, naming-convention suffix on dozens of features, test enforcement, and migration infrastructure). Renaming the magic numbers to a constants file would be cosmetic without applying them as a genuine family-wide convention, and we have only evaluated TWO Bandt-Pompe-family features so far (PE + SVD) — too small a sample to justify the family-wide commitment. DEFERRED keeps the candidate alive in the pipeline; revisit once ≥ 4-5 more entropy-family candidates have been evaluated so the family-convention decision can be made well-informed. The candidate's empirical orthogonality (208/208 PASS, LOO R² 0.45 independent of cluster) is documented but not acted on yet. See candidates/10-bar-svd-entropy.md for the full deferral rationale + trigger conditions for revisit.Pre-column-promotion verification (2026-05-29) — operator's "what else to verify before promoting columns?" question triggered Check A (strict-manifest verification). Result: 53/53 manifest features were present in the spike's 100-column comparison set (no membership gap); the verdict max-|ρ| numbers hold under strict Terry-mandate re-interpretation; per-bar-set effective coverage corrected from misleading "20–55" framing to "median 20, max 55." See spike_2026-05-27/CHECK_A_RESULTS.md for the full check.
Full attribution in spike_2026-05-27/PROVENANCE.md. Summary:
| Check | Source | Verified? |
|---|---|---|
| 3-axis structure (orthogonal × parameterless × agnostic) | Terry's evolution.jsonl:28 headline (entry PATTERNS-3AXIS-COLUMN-AUDIT-V1-2026-04-30, [id=428] origin) | ✅ Terry-mandated |
| Axis 1 thresholds (BAN > 0.95, WATCH 0.85–0.95, h_norm < 0.05) | Terry's CH_FEATURE_BANLIST.md:5,80 @ d74f75e1 | ✅ Terry-mandated |
Axis 1 fast-Spearman (df.rank().corr(method='pearson')) | Terry's CH_FEATURE_BANLIST.md:127-131 | ✅ Terry-mandated |
| Axis 2 method = inspection (uniform constant vs per-feature tuning) | Terry's evolution.jsonl:28 | ✅ Terry-mandated |
| Axis 3 method = provenance (CH-published via upstream) | Terry's evolution.jsonl:28 | ✅ Terry-mandated — but inapplicable to pre-ship candidates |
| Empirical agnostic substitute (per-symbol PASS-rate consistency) | Operator-authored, this spike | ⚠ Operator extension — used because Terry's provenance check requires the feature to be CH-published already |
| Combinatorial R² check (multiple linear regression of candidate ~ comparison features) | Operator-authored, this spike | ⚠ Operator extension — added because univariate Spearman misses linear-combination redundancy |
Lookback window LOOKBACK_COUNT = 200 | python/opendeviationbar/constants.py:16 (project-wide) | ✅ Attributed by operator to Terry's precedent |
| # | Candidate | Status | Verdict | File | ||
|---|---|---|---|---|---|---|
| 14 | bar_hjorth_mobility | ✅ DONE | DROPPED — passes standalone (208/208 PASS) but is part of the 3-way Hjorth-Katz cluster. Highest LOO R² of all 5 candidates (0.86); max \ | ρ\ | 0.69, max R² 0.35 vs existing CH features (large-N). Parameterless by direct inspection. | candidates/14-bar-hjorth-mobility.md |
| 15 | bar_hjorth_complexity | ✅ DONE | DROPPED (REVERSED from preliminary PROMOTE) — passes standalone (208/208 PASS) but also part of the 3-way Hjorth-Katz cluster. LOO R² 0.81; max \ | ρ\ | 0.67, max R² 0.31. Parameterless by direct inspection. | candidates/15-bar-hjorth-complexity.md |
| 43 | bar_petrosian_fd | ✅ DONE | PROMOTE — 208/208 PASS standalone. Independent of the Hjorth-Katz cluster (LOO R² 0.45 = 55% unique). Max \ | ρ\ | 0.70, max R² 0.43. Parameterless — zero formula knobs. | candidates/43-bar-petrosian-fd.md |
| 44 | bar_katz_fd | ✅ DONE | PROMOTE — 3-way cluster winner — 208/208 PASS standalone. Lowest max \ | ρ\ | 0.63, max R² 0.20, LOO R² 0.70 of the cluster. Parameterless — zero formula knobs. | candidates/44-bar-katz-fd.md |
| 10 | bar_svd_entropy | ⏸ DEFERRED 2026-05-29 (REVISED from preliminary PROMOTE) | Empirically strong: 208/208 PASS standalone, independent of cluster (LOO R² 0.45), max \ | ρ\ | 0.74. Held in pipeline pending entropy-family convention review — the candidate has 3 formula parameters (order=3, delay=1, normalize=False) whose prior "Axis-2 PASS by analogy to PE" justification does not survive the codebase audit (PE's m=3 is a hardcoded magic number, not a project-wide constant; 2 features is too small a sample to commit to a family-wide convention). NOT dropped — revisit once ≥ 4-5 more entropy-family candidates have been evaluated. | candidates/10-bar-svd-entropy.md |
Final slate (revised 2026-05-29): 2 PROMOTE (#43 Petrosian, #44 Katz), 1 DEFERRED (#10 SVD Entropy), 2 DROP (#14 Mobility, #15 Complexity).
feature_manifest.toml landing in the column-promotion PRopendeviationbar_cache.open_deviation_bars on bigblack, read-only SELECT only, no FINAL modifier (crypto convention)(symbol, threshold) pairs after dropping LTC@100 (broken in CH — only 31 bars)(name, fn, kwargs) tuples — so future audits register a new candidate with a single-line entry rather than a code edit.findings/evolution/shared_data/probes/ for team-wide reuse — orthogonality testing across the team starts from this scaffold instead of re-deriving Terry's pattern from the patterns-repo audit folder.FRAMEWORK.md Level 4) — deferred to a separate downstream phaseTwo Explore agents were dispatched before the Phase-2 PR was opened, mirroring the Phase-1 G9 audit pattern (id=758/759 policy). One Attacker (find flaws), one Defender (independently confirm claims). Both ran read-only against the same deliverable scope: verdict.md Phase-2 section + the 5 candidate verdict files in candidates/ + the entire spike_2026-05-27/ folder.
| Claim | Verification | ||
|---|---|---|---|
| Terry provenance citations at commit d74f75e1 (CH_FEATURE_BANLIST.md:5,80,127-131) | ✅ Verbatim text matches at the cited lines and commit | ||
| 3-axis structure attribution to terry@eonlabs.com via evolution.jsonl:28 | ✅ Confirmed traceable through the evolution ledger | ||
| Empirical values internal consistency across files (Mobility 0.69, Katz 0.63, LOO R² 0.86/0.81/0.70/0.45/0.45) | ✅ All values identical across verdict.md, CROSS_CANDIDATE_FINDINGS.md, and each of the 5 candidate files | ||
Spike code matches verdict claims (antropy.katz_fd(x), svd_entropy(x, order=3, delay=1, normalize=False), LOOKBACK_COUNT=200) | ✅ Verified in run_candidate_slice.py and orthogonality_probe_full_ch.py | ||
| Scope arithmetic — 10 slices × 21 (symbol, threshold) combos = 210 minus 2 known-empty = 208 | ✅ Confirmed against findings/evolution/shared_data/pre-spec.md | ||
| Chatterjee gap honest disclosure | ✅ Smoke code implements basic ξn per the 2021 paper; gap section accurately describes the tie-correction limitation | ||
| Cluster-resolution arithmetic (Katz wins on all 3: max \ | ρ\ | 0.63, max R² 0.20, LOO R² 0.70) | ✅ Internally consistent; Katz unambiguous winner |
| Axis-3 substitute caveat in every PROMOTE file | ✅ All 3 PROMOTE files label Axis-3 method as "operator empirical substitute" | ||
| Axis-1 combinatorial R² labeled as operator extension | ✅ All 5 candidate files contain the operator-extension caveat | ||
| Read-only constraint (no DDL/DML in probe code) | ✅ All SQL is SELECT only | ||
| No AI attribution in any verdict file | ✅ Zero matches across the 5 verdict files for the per-user-global-policy keyword set |
Defender summary: "All 11 claims CONFIRMED. No logical gaps identified. The deliverable's empirical claims are well-supported by cited evidence, numerical values are internally consistent across all documents, code implements the stated methodology exactly, and all operator extensions are explicitly labeled as such. The spike is defensible on both methodological and empirical grounds."
Total: 0 CRITICAL, 1 HIGH, 4 MEDIUM, 2 LOW. Attacker's own bottom-line: "All findings are correctable via edit without changing any empirical verdict."
Each finding was independently re-verified against the cited source before disposition was decided.
| # | Severity | Finding | Disposition | Fix applied |
|---|---|---|---|---|
| 1 | MEDIUM (originally MIS-LABELED CRITICAL in attacker's header) | Katz LOO R² is exactly 0.696 in CROSS_CANDIDATE_FINDINGS.md but rounded to 0.70 in candidate/44 and verdict.md; the 0.11 margin claim vs Complexity rests on 0.696→0.70 rounding | ACCEPTED — precision disclosure | CROSS_CANDIDATE_FINDINGS.md now explicitly notes the rounded "0.70" cite vs measured 0.696. Tiebreaker conclusion unchanged. |
| 2 | HIGH (placement, not factual) | SVD Entropy Axis-2 by-analogy caveat is in Level-3 body text but NOT in the top-line PROMOTE banner; if Terry rejects the analogy, the slate silently drops from 3 PROMOTE to 2 PROMOTE + 1 CONDITIONAL | ACCEPTED — top-line caveat surfacing | candidate/10-bar-svd-entropy.md now has the AXIS-2 CONDITIONAL CAVEAT banner at the top, immediately under the ✅ STATUS line, naming the conditional-revert path explicitly. |
| 3 | MEDIUM | "8 distinct market regimes" claim in verdict.md scope section is correct against pre-spec.md annotations but unsourced inline | HELD as-is | Pre-spec.md is the source; the 8-regime count derives from the slice IDs themselves (slice03/12/17 = calm; slice20/21 = bull; slice14 = stress; etc.). This is documentary precision rather than empirical risk. |
| 4 | MEDIUM | Results JSONL files referenced by relative path in verdict files do not exist on the laptop (the PR origin) — they live on bigblack only | ACCEPTED — explicit disclosure added | CROSS_CANDIDATE_FINDINGS.md now has a "Note on results-file location" section explaining the JSONL files are bigblack-only and reproducibility requires re-running the probe. |
| 5 | LOW | FRAMEWORK.md (operator-authored, AWAITING Terry's review) may contain claims that future readers conflate with Terry mandates | HELD as-is | Already disclosed in verdict.md L165 ("AI-drafted ... AWAITING Terry's accuracy review") and in PROVENANCE.md "Non-claims" section (lines 132–142). Navigation burden, not a factual error. |
| 6 | LOW | Chatterjee non-monotonic gap is documented in CROSS_CANDIDATE_FINDINGS.md but not cross-referenced from each candidate verdict file's Axis-1 PASS verdict | ACCEPTED — cross-reference added | CROSS_CANDIDATE_FINDINGS.md now has a "Methodology gap cross-reference" section explaining why the gap is contained for this audit's specific candidates. |
| 7 | N/A | (No 7th finding; total was 7 with two "categories with no flaws found.") | — | — |
| Metric | Pre-G9 | Post-G9 |
|---|---|---|
| PROMOTE candidates | 3 | 3 (#43 Petrosian, #44 Katz, #10 SVD Entropy with explicit Axis-2 CONDITIONAL caveat surfaced) |
| DROP candidates | 2 | 2 (#14 Mobility, #15 Complexity) |
| Citation errors found | — | 0 (Defender 11/11 CONFIRMED) |
| Empirical errors found | — | 0 (Attacker confirmed verdicts; all findings are documentation precision) |
| Documentation precision gaps fixed | — | 3 (Katz LOO R² precision; SVD Axis-2 caveat surfacing; results-on-disk disclosure) |
| Documentation gaps held as-is | — | 2 (8-regime claim sourced via pre-spec; FRAMEWORK.md conflation already disclosed) |
| Empirical verdict changes | — | 0 |
Operator's pre-column-promotion questions surfaced three additional fixes after the Phase-2 PR (#503) merged. These are documented here for the audit trail:
Question: do we cover all the manifest features Terry's BANLIST rule should be applied against?
Method: read-only intersection of feature_manifest.toml (53 entries) against the spike's 100-column comparison set (live CH minus 17-col EXCLUDE list), plus per-bar-set effective-coverage analysis and strict-manifest max-\|ρ\| re-computation from the existing top-5 data.
Result:
intra_* family). Not blocking; flagged as forward work (focused re-run with relaxed NaN filter on max-coverage cells).Full evidence: spike_2026-05-27/CHECK_A_RESULTS.md.
Trigger: operator-direction-3 pushback (2026-05-29) on the prior "Axis-2 PASS by analogy to PE" claim.
Codebase audit findings (empirical, read-only):
m=3 is encoded as a hardcoded magic number (literal 3 at every call site, e.g., crates/opendeviationbar-core/src/intrabar/features.rs:307); the optimized variants bake m=3 into function NAMES without a named constant linking themτ=1 is not even an exposed parameter — the embedding implicitly uses consecutive pricesEMBEDDING|PE_ORDER|SVD_ORDER|BANDT_POMPE|ORDINAL_ORDER_q1000 precedent for a true project-wide constant has typed units (FeatureValueQ1000), naming-convention suffix on dozens of features, pre-commit test enforcement, migration infrastructure (PHASE-23-A-MIGRATION), and documented policy — none of which exist for Bandt-Pompe m=3, τ=1m ∈ {3, 4, 5, 6, 7}; m=3 is the minimum-useful choice, not a canonical privileged valueDisposition: REVISED preliminary PROMOTE to DEFERRED. The candidate has 3 real per-feature knobs filled in by borrowing PE's hardcoded magic numbers — this does not satisfy Terry's "uniform _q1000 = project constant" criterion under any defensible reading. Renaming the magic numbers to a constants file would be cosmetic without applying them as a genuine family-wide convention, and a sample of only TWO Bandt-Pompe-family features (PE + SVD) is too small to commit to the family-wide convention well.
Net effect: final slate 2 PROMOTE + 1 DEFERRED + 2 DROP (was 3 PROMOTE + 2 DROP).
Independent re-check confirmed Petrosian (#43) and Katz (#44) have zero per-feature parameters by direct formula inspection:
log10(n) / (log10(n) + log10(n / (n + 0.4 * N_sign_changes))) — the 0.4 is part of the canonical Petrosian (1995) formula, same status as π in a Fourier transform. Window = LOOKBACK_COUNT project-wide constant.log10(n) / (log10(n) + log10(d/L)) — n, L, d are derived from input, not chosen. Window = LOOKBACK_COUNT project-wide constant.Both pass Axis-2 by direct inspection with zero ambiguity. The DEFERRED status of SVD does NOT affect these two; their PROMOTE verdicts stand and they proceed to the manifest in the upcoming column-promotion PR.
Autonomous /loop (hybrid: laptop drives, bigblack computes) swept the 8 remaining Entropy-family candidates (210 cells each × 8 regime slices), then ran the cross-candidate matrix including the deferred SVD (#10) and the landed Petrosian/Katz (#43/#44) — the redundancy-vs-landed check. Full detail: spike_2026-06-02-entropy/ (CROSS_CANDIDATE_FINDINGS.md, CROSS_CANDIDATE_VS_LANDED.md, AGNOSTIC_AXIS3.md, PROMOTION_PLAN.md); per-candidate verdicts in candidates/ (01,02,03,04,05,09,11,12).
Result — 3 PROMOTE / 2 CONDITIONAL / 3 DROP:
bar_dispersion_entropy (#11, max |ρ| 0.66, independent), bar_svd_entropy (#10 — deferral re-opened: independent of everything incl. landed Petrosian at ρ 0.30), bar_sample_entropy (#3, template-cluster rep over ApEn).bar_spectral_entropy (#9 — Axis-2 sf ruling), bar_shannon_entropy (#1 — Axis-1 marginal + binning).bar_approximate_entropy (#2, SampEn sibling ρ 0.965), bar_weighted_permutation_entropy (#5, PE sibling ρ 0.897), bar_fisher_shannon (#12, PE sibling ρ 0.948).Axis status: all 3 promotes are Axis-1 ✅ (orthogonal vs existing + landed) and Axis-3 ✅ (100% per-symbol PASS, see AGNOSTIC_AXIS3.md); they clear Axis-2 only via project-wide constants (the _q1000 route) — implementation gated behind the constants PR per PROMOTION_PLAN.md. ClickHouse untouched (read-only); promotion follows PR → review → merge → deploy → schema.
The overnight /loop fractal/chaos orthogonality spike (spike_2026-06-05-fractal-chaos/, driver + compute on bigblack odb-fractal-chaos-loop; live pages hosted-only at ~/sites/2026-06-06-crypto-fractal-multifractal-chaos-10-candidate-orthogonality-evaluation/) swept 10 fractal / multifractal / chaos / complexity candidates on Axis-1 only (orthogonality, 21 (symbol,threshold) cells × 10 regime slices). That loop explicitly scoped Axis-2 and Axis-3 out. This entry records the operator Axis-2 (parameterless) ruling for the whole slate, plus a full evaluated-vs-pending census of the candidate corpus.
> Provenance note: the fractal/chaos slate lives on branch spike/fractal-chaos-followup + bigblack (odb-fractal-chaos-loop) + the hosted dashboard; it is not yet merged to main. It is cited here as external evidence pending its integration PR. Line refs below are to spike_2026-06-05-fractal-chaos/orthogonal_candidates_v2.py (registry SSoT).
Rule (gating; SSoT docs/audits/3-AXIS-DISCIPLINE-TEMPLATE.md:47-56, restated FRAMEWORK.md:446-457): a feature passes Axis-2 only if every numeric literal either derives from first principles or is a locked/canonical/project-wide constant (Petrosian's 0.4, Katz n/L/d, dispersion c=6/m=2/d=1, Terry's _q1000). Free per-feature tunable knobs FAIL. FRAMEWORK.md already pre-lists DFA/MF-DFA scale ranges and Lyapunov embedding among the Axis-2 fails (:450-457).
Finding: every one of the 10 slate candidates carries ≥1 free per-feature knob → all 10 FAIL Axis-2 — including the 6 that cleared Axis-1. So the slate's promotion is HELD (hard gate: fail any axis → env-flag-off / deprecate, never quietly retained — :30-31, :136). The precedent kill for the same ruling is lookback_permutation_entropy + lookback_hurst (PR #448, column_comments.py:271-293, active=False).
| # | Candidate | Axis-1 | Per-feature tunable knobs (Axis-2 fail evidence) |
|---|---|---|---|
| #45 | bar_higuchi_fd | PASS | kmax=10 (:58) |
| #25 | bar_mfdfa_width | PASS | q-grid {±1..±5} (:127); 12 log-scales, min 8, s_max=n//4 (:120-124); detrend order=1 (:135-144) |
| #35 | bar_dh_abs_returns | PASS | q {±1..±4} (:219); lag=linspace(8,n//4,12) (:216); order=1 (:222) |
| #34 | bar_dh_returns | PASS | q {±1..±4} (:184); lag=linspace(8,32,12) (:183); order=1 (:186) |
| #36 | bar_dh_vol_increments | PASS | q {±1..±4} (:261); lag=linspace(8,n//4,12) (:258); order=1 (:263) |
| #47 | bar_lyapunov_rosenstein | PASS | emb_dim=4, lag=1, min_tsep=10, trajectory_len=20, min_neighbors=10, fit=poly (:310-311) |
| #24 | bar_generalized_hurst | WATCH | qvals=[2] (:79) |
| #46 | bar_correlation_dimension | WATCH | emb_dim=5, lag=1, fit=poly (:291-295) |
| #21 | bar_ordinal_partition_network | WATCH | ordinal embedding dx=3, taux=1 (:66) |
| #17 | bar_perm_js_distance_pinknoise | WATCH | ordinal dx=3, taux=1, tie_precision, _PINK_REF m=3 ref dist (:91, :46-50) |
The shared input window LOOKBACK_COUNT=200 (:34) is not a per-feature knob — it is the project-wide rolling window every bar feature already uses — so it does not count against Axis-2.
Registry-metadata caveat: #21 and #17 are tagged parameterless in the _REGISTRY w200 metadata (:400, :408). That tag refers to amplitude-scale invariance (ordinal methods are rank-based), not absence of embedding knobs — both still pass explicit dx=3, taux=1, so both FAIL Axis-2 in the magic-number sense.
Consequence (HELD — remediation path). None of the 10 enters the implementation loop as-is. To clear Axis-2 a knob must be either (a) derived from first principles, (b) locked as a justified feature-local convention constant (the bar_dispersion_entropy c/m/d precedent + the #513 integer-only SSoT pattern), or (c) ratified as a project-wide constant (the _q1000 route) — then Axis-2 is re-verdicted. This supersedes the earlier working assumption that the 6 Axis-1 survivors (or the redundancy-reduced 5, after the dh_abs_returns ↔ dh_vol_increments ρ≈0.96 cross-candidate duplication) were promotion-ready: they are Axis-1-clear but Axis-2-blocked.
Reconciled against the canonical RESEARCH-DIGEST.md (64 rows) + the #65 persistence-landscape pilot = 65 total. 24 evaluated · 41 pending · 0 unmatched (arithmetic verified: union covers #1–#65, zero overlap).
Evaluated (24) — Axis-1 orthogonality run on real ClickHouse data:
Pending (41) — input set for the next evaluation loop:
| Family | Candidates |
|---|---|
| Entropy / information-theory | #6, #7, #8, #64 |
| Complexity | #13 |
| Statistical-complexity / CECP | #16, #18, #19, #20 |
| Fractal / Hurst-scaling | #22, #23 |
| Multifractal (MF-DFA / A-MF-DFA / S-MF-DFA / MFCCA / mv-fBm) | #26, #27, #28, #29, #30, #31, #32, #33, #37, #38, #39, #40, #41, #42 |
| Chaos diagnostics | #48, #49 |
| Transfer-entropy | #50, #51, #52, #53, #54, #55, #56, #57 |
| Copula-entropy | #58, #59, #60, #61, #62 |
| Information-decomposition | #63 |
Flag (#25 / #28): the slate labels its width metric bar_mfdfa_width as id #25, but digest #25 = "MF-DFA spectrum h(q)" while the spectrum width Δα is digest #28. It is bound to #25 per the explicit eval id (leaving #28 in pending). If the spike in fact measured Δα width, swap #25↔#28 when the slate merges — this does not change the 24/41 split.
Follow-up to the Phase 2c HOLD: where multiple family members use the same knob at the same value, that value is a family convention (not a magic number) and can be ratified as a project-wide constant — the route that clears Axis-2 without per-feature tuning. A family-by-family scan (with an adversarial literal-same-value check) was run across the 10 failed + 41 pending candidates. Full analysis, promotable-constant list, family-usage counts, candidate loop list, and the two-stage loop plan: AXIS2-REMEDIATION-AND-LOOP-PLAN.md.
Verdict (operator decision pending):
ORDINAL_M=3/ORDINAL_TAU=1 — 9 ordinal/CECP members (#21,#17,#16,#18,#19,#20,#8,#4,#5); fully clears #21/#17.MFDFA_DETREND_ORDER=1 (17 members) and TAKENS_EMBEDDING_TAU=1 (4 members).kmax, gen-hurst qvals, chaos emb_dim/fit, SampEn m. Unpromotable: the TE/copula/PID slate (#50–#64) — dual-series regime, not a tunable literal.Scoping the next orthogonality loop from the ordinal/CECP family — the candidates fully covered by the existing PR #513 ordinal-embedding constant. Three go into the loop; one is dropped by definition.
Verified each loop candidate's full knob set. Correction to the working assumption: these do NOT fail Axis-2 — they PASS. Their only structural knob is the Bandt–Pompe ordinal embedding (m=3, τ=1), which is the already-ratified project-wide constant from PR #513. Post-#513, a feature whose sole knob is that embedding clears Axis-2 by reuse (no new promotion) — this is precisely the deferral that blocked SVD-entropy #10 (candidates/10-bar-svd-entropy.md), now resolved for the ordinal family.
| # | Candidate | Only knob(s) | Axis-2 |
|---|---|---|---|
| #16 | Statistical Complexity (MPR) | ordinal m=3/τ=1 (#513); MPR normalization + uniform reference are first-principles | PASS (reuse #513) |
| #19 | CECP velocity / trajectory | ordinal m=3/τ=1 (#513); velocity granularity = the project-wide rolling window (parameter-free) | PASS (reuse #513 + parameter-free) |
| #20 | Binary CECP (H_bin, C_bin) | ordinal word-length =m=3 (#513); binarization = sign / up-down (parameter-free) | PASS (reuse #513 + parameter-free) — pending faithful Pinto-2025 build |
Caveat (#20): Pinto-2025 (arXiv:2504.01974) could not be fetched at write time; the standard binary-CECP binarization is sign-of-increment (up/down), which is parameter-free. If the faithful build instead uses a tunable threshold, #20 would FAIL Axis-2 and be held — to be confirmed at authoring.
#18 "CECP coordinates (PE, C)" is excluded from the loop: it is the pair (permutation entropy #4 + statistical complexity #16) — both already in the corpus — so it introduces no new computation. This is definitional redundancy (known a priori from the formula), distinct from empirical sibling-redundancy (e.g. dh_abs ↔ dh_vol ρ≈0.96), which is only found via cross-candidate testing. Full per-candidate record: candidates/18-cecp-coordinates.md.
Loop = #16, #19, #20 — Axis-1 orthogonality sweep on the existing probe (21 (symbol,threshold) cells × 10 slices). The Finish step runs cross-candidate testing across all 10 slices to catch empirical siblings among them and against the landed panel — and the prior fractal/chaos Finish (which covered only 5 of 10 slices) should be completed to the same standard.
The 3-candidate CECP orthogonality loop ran on bigblack (spike_2026-06-10-cecp-statistical-complexity, 2-core / 2 GB / spare-only / read-only ClickHouse, 210 cells = 21 (symbol,threshold) × 10 slices, all parameterless via PR#513 reuse). Per-candidate records: candidates/16-statistical-complexity.md, candidates/19-cecp-velocity.md, candidates/20-binary-cecp.md.
| # | Candidate | Axis-1 | max‖ρ‖ vs | Disposition |
|---|---|---|---|---|
| #19 | bar_cecp_velocity | PASS (210/210) | 0.666 / Petrosian | GO — 3/3 axes, queued for implementation |
| #16 | bar_statistical_complexity | BAN (5 BAN/65 WATCH/140 PASS) | 0.969 / Petrosian | DROP — near-rename of landed Petrosian FD |
| #20 | bar_binary_cecp | WATCH (9 WATCH/201 PASS) | 0.937 / Katz | HELD — borderline-redundant with Katz |
stat_complexity ↔ Petrosian (0.969) and binary ↔ Katz (0.937) are real monotone ties (both reparametrise path-irregularity / sign-run structure); they survive the de-overlap control. This validates that the probe catches real redundancy.| Axis | Verdict | Basis |
|---|---|---|
| 1 Orthogonal | PASS | max‖ρ‖ 0.666, 210/210; machinery clean + bit-exact; genuinely orthogonal incl. nonlinear |
| 2 Parameterless | PASS-with-caveat | numeric literals are only ORDINAL_M=3/ORDINAL_TAU=1 (#513) + LOOKBACK_COUNT=200; the 50/50 within-window split is a locked feature-local convention (free degree of freedom in split-ratio / #segments / within-vs-cross-window), defensible like dispersion c/m/d |
| 3 Agnostic | PASS | 100% per-symbol (6/6) + per-regime (10/10), ‖ρ‖ ≤ 0.67 |
Axis-2 caveat (honest): the 50/50 split is knob-like — a locked feature-local convention, not a first-principles or project-wide constant. Same Axis-2 category as bar_dispersion_entropy's c/m/d (PASS-with-caveat, promoted pending ratification), so it does not block GO — but ratify it, or switch the construction to Suriano 2025's canonical cross-window trajectory velocity (which removes the split → unconditional Axis-2).
bar_cecp_velocity is approved for implementation by the established 3-axis standard (Axis-2 PASS-with-caveat, as for dispersion).
h_norm liveness gate is inert for continuous features (pd.qcut → ≈1.0 always) and has a fail-open bug (compute_h_norm returns None on <1000 non-NaN values → silently skips the gate on the ~19 smallest cells). Harmless this run (ρ-driven); make it fail-closed and stop citing h_norm as corroboration.R² gate is in-sample linear and never fired (max 0.29 vs 0.85) and is blind to monotone-nonlinear redundancy — Spearman is the sole workhorse. Document as a coverage gap or replace with a rank/nonlinear measure on de-overlapped strides.FRAMEWORK.md — Per-candidate analysis framework — read this BEFORE doing any per-candidate workcandidates/ — per-candidate analysis outputs (populated after Terry approves the framework)RESEARCH-DIGEST.md — canonical candidate table (post-G9 reclassification)VERIFICATION-VERDICT.md — citation + FOSS verification (Layer-1 + Layer-2)LICENSE-AUDIT.md — FOSS dependency licensing auditBASELINE-RULED-OUT.md — Phase-1 baseline liftDUPLICATE-ELIMINATION.md — cross-session reconciliationCLAUDE.md — audit hubEvery 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.
| Claim | Evidence |
|---|---|
| The catalogue holds 64 candidate features; after an adversarial re-audit, 9 are already covered by existing code and 55 are not, one of which cannot be sourced at all. CONFIRMED 64 candidates; 9 covered, 55 not-covered, 1 source-blocked (n=64) | **Status:** **PHASE 1 EVIDENCE COMPLETE (post-G9)** — Coverage column populated: **9 covered + 55 not-covered = 64 total**, where 1 of the not-covered is source-blocked (#64). findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/RESEARCH-DIGEST.md |
| The adversarial (G9) pass overturned one coverage call: Shannon entropy had been marked "already covered" on the strength of a column that lives in the forex schema, not the crypto one. CONFIRMED 1 candidate reclassified (covered 10 → 9; not-covered 54 → 55) | **Disposition**: **ACCEPTED**. Row #1 reclassified from covered to not-covered. findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| Not every attacker finding was accepted — one was rejected after the audit re-read the sources itself. CONFIRMED 5 attacker findings + 1 defender concern; 1 rejected | **Disposition**: **REJECTED on independent verification**. The "1 year-mismatch" claim is technically correct for the Layer-2 batch. No change applied. findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| Every foundational paper behind the catalogue resolved to a real DOI, and one publication year in the source bibliography was wrong and was corrected. CONFIRMED 21/21 foundational DOIs; 14 modern papers with 7 defects corrected; 35 papers total across both layers | **Net Layer-2 resolution: 21 of 21 foundational papers got verified DOIs. 1 year-mismatch caught + corrected (Di Matteo 2003 → 2004). 4 of 21 have direct OA URLs (Pincus, Wu 2013, Schreiber, Faes).** findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/VERIFICATION-VERDICT.md |
| Most candidates have an existing open-source implementation, but the two files that report the count disagree with each other. OPEN VERIFICATION-VERDICT.md: 51 FOSS / 13 reimplement (n=64). RESEARCH-DIGEST.md: 53 FOSS / 10 reimplement / 1 source-blocked (n=64). Unreconciled. | **51/64 features have FOSS implementations; 13 require reimplementation** (see `RESEARCH-DIGEST.md` Bucket column). findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/VERIFICATION-VERDICT.md |
| Two of the implementation repositories cited by the source research no longer exist. CONFIRMED 2 dead repos of 15 checked | - **Dead repos**: `lcphy/Information-Flow` and `jakeyeung/PyIF` both return 404. KSG-TE alternatives (IDTxl, copent) used instead. findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/VERIFICATION-VERDICT.md |
| One candidate is unusable because the paper it was supposed to come from does not exist at the cited identifier. CONFIRMED 1 of 64 source-blocked | - **Feature #64 (Adaptive entropy coefficient) is blocked**: Gemini's `arXiv:2601.10143` resolves to the wrong paper. Candidate cannot be implemented until the correct source is found. findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/VERIFICATION-VERDICT.md |
| Thirteen candidates depend on copyleft-licensed code, which is fine for research but would constrain any closed-source distribution; one dependency has no licence at all. CONFIRMED 15 repos audited: 11 permissive, 3 GPL-3.0 (touching 13 of 64 candidates), 2 NOASSERTION, 1 with no LICENSE file | ### GPL-3.0-touching candidates (13 of 64) findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/LICENSE-AUDIT.md |
| The first measurement run on real exchange data tested five candidates over 208 symbol/threshold/period cells each and ended with two promoted, one shelved and two dropped. MEASURED 208/208 cells PASS per candidate (10 regime slices × 21 symbol-threshold pairs − 2 empty); max |ρ| Katz 0.63, Petrosian 0.70, SVD 0.74; leave-one-out R² 0.86 / 0.81 / 0.70 / 0.45 / 0.45 | **Final slate (revised 2026-05-29): 2 PROMOTE (#43 Petrosian, #44 Katz), 1 DEFERRED (#10 SVD Entropy), 2 DROP (#14 Mobility, #15 Complexity).** findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| Two of the five candidates were dropped not because they failed but because a cross-candidate matrix revealed they were near-duplicates of a third — a result that reversed an earlier preliminary verdict. MEASURED Mobility↔Complexity ρ −0.991 median; Mobility↔Katz +0.821 median / +0.927 max; Complexity↔Katz −0.819 median / −0.921 max | The 5×5 cross-candidate matrix run revealed a previously-undetected 3-way Hjorth-Katz sibling cluster (Mobility ↔ Complexity ρ −0.991 median; Mobility ↔ Katz +0.821 median, +0.927 max; Complexity ↔ Katz −0.819 median, −0.921 max). findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| SVD entropy was held back after a code audit showed the justification for its three settings rested on another feature's hard-coded number rather than an established project-wide convention. CONFIRMED 3 formula parameters (order=3, delay=1, normalize=False); 0 matches in production code for EMBEDDING|PE_ORDER|SVD_ORDER|BANDT_POMPE|ORDINAL_ORDER | - PE's `m=3` is encoded as a hardcoded magic number (literal `3` at every call site, e.g., `crates/opendeviationbar-core/src/intrabar/features.rs:307`); the optimized variants bake `m=3` into function NAMES without a named constant linking them findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| A pre-promotion check confirmed the comparison set covered every feature it was supposed to, and corrected a misleading coverage figure in the earlier write-ups. CONFIRMED 53/53 manifest features present; per-bar-set effective coverage median 20 columns, max 55 (corrected from "20–55"); strict max |ρ| Petrosian 0.701, Katz 0.635, SVD 0.743 | - **Membership**: 53/53 manifest features in the comparison set ✅ (no gap) findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| The entropy-family run's headline slate was overturned by its own hardening re-run: only dispersion entropy survived as a clean promotion. CONFIRMED 207 cells per candidate; dispersion combinatorial R² median 0.437 / max 0.767 / 0 cells ≥0.85; permutation↔Petrosian max ρ 0.972 with 4 BAN cells and 14 cells reconstructable from the shipped schema | **Survivors to promote (HARDENED, 2026-06-03):** **dispersion (#11) — sole clean promote.** spectral / shannon / SVD — **CONDITIONAL** (Axis-1-clean-or-marginal, Axis-2 convention-gated / thin tail). **permutation (#2) + SampEn (#3) — DROPPED** findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/spike_2026-06-02-entropy/PROMOTION_PLAN.md |
| The audit hub's own summary of the entropy run still lists the pre-hardening slate, contradicting the hardened verdict filed in the same folder three weeks earlier. REFUTED verdict.md Phase 2b: 3 PROMOTE / 2 CONDITIONAL / 3 DROP. CHALLENGED_AND_HELD_v2.md (2026-06-03): 1 PROMOTE / 3 CONDITIONAL / 2 DROP. | - 🟢 **PROMOTE:** `bar_dispersion_entropy` (#11, max |ρ| 0.66, independent), `bar_svd_entropy` (#10 — **deferral re-opened**: independent of everything incl. landed Petrosian at ρ 0.30), `bar_sample_entropy` (#3, template-cluster rep over ApEn). findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| The whole fractal/multifractal/chaos batch was blocked on the project's no-tunable-knobs rule, including the six that had already passed the redundancy test. CONFIRMED 10 of 10 candidates fail; 6 of them had passed the redundancy axis | **Finding:** every one of the 10 slate candidates carries ≥1 free per-feature knob → **all 10 FAIL Axis-2** — including the 6 that cleared Axis-1. findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| Roughly a third of the catalogue has actually been measured; the rest is queued. CONFIRMED 24 evaluated, 41 pending, 0 unmatched (n=65) | Reconciled against the canonical [`RESEARCH-DIGEST.md`](./RESEARCH-DIGEST.md) (64 rows) + the #65 persistence-landscape pilot = **65 total**. **24 evaluated · 41 pending · 0 unmatched** (arithmetic verified: union covers #1–#65, zero overlap). findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| Three of the catalogued features actually reached production code. CONFIRMED 3 of 65 candidates shipped | - **Landed in production:** #43 Petrosian + #44 Katz (PR #509), #11 Dispersion (PR #515). findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| A remediation plan exists for the knob problem — reuse one existing constant and ratify two new ones — but it needs an operator ruling that has not been given. ASSERTED Existing ORDINAL_M/ORDINAL_TAU covers 9 family members; proposed MFDFA_DETREND_ORDER covers 17; TAKENS_EMBEDDING_TAU covers 4; 23 of 41 pending candidates are single-series testable | **Status:** **ANALYSIS COMPLETE — operator decision pending** on 2 new project-wide constants + 2 harmonization conventions. findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/AXIS2-REMEDIATION-AND-LOOP-PLAN.md |
| A later three-candidate run approved one new feature and rejected two as near-renames of features already shipped. MEASURED 210 cells; velocity max ‖ρ‖ 0.666 (210/210 PASS) → GO; statistical complexity 0.969 vs Petrosian → DROP; binary CECP 0.937 vs Katz → HELD | | #16 | `bar_statistical_complexity` | **BAN** (5 BAN/65 WATCH/140 PASS) | 0.969 / Petrosian | **DROP** — near-rename of landed Petrosian FD | findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| The measurement harness itself has known defects: one of its gates never fires for continuous features and silently skips small cells, and another gate never fired at all. CONFIRMED ~19 smallest cells skip the gate; R² gate max 0.29 against a 0.85 threshold (never fired); peak RSS 1912–1915 MB against a 2 GB cap (~93%) | - The `h_norm` liveness gate is **inert** for continuous features (`pd.qcut` → ≈1.0 always) and has a **fail-open** bug (`compute_h_norm` returns `None` on <1000 non-NaN values → silently skips the gate on the ~19 smallest cells). findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/verdict.md |
| The per-candidate analysis framework that governs this work has never been reviewed by the person it was written for, and the rule says it must be before it is applied. ASSERTED 10 of 64 candidates already have framework files, written under operator-authorised gate relaxation | Per Terry's 2026-05-12 call directive, [`FRAMEWORK.md`](./FRAMEWORK.md) (the per-candidate analysis structure) **MUST be reviewed by Terry for accuracy BEFORE being applied to any candidate**. findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/CLAUDE.md |
Source of record: findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/ — not published, so these are listed rather than linked.
| File | Role |
|---|---|
AXIS2-REMEDIATION-AND-LOOP-PLAN.md | Shared-knob analysis and the promote-constants-then-test loop plan; operator decision pending. |
BASELINE-RULED-OUT.md | Phase-1 baseline: existing ClickHouse schema columns, the patterns-repo graveyard of killed families, settled positives and doctrine. |
CLAUDE.md | Audit hub — scope, filtering method, file index, status line naming the Terry review gate. |
DUPLICATE-ELIMINATION.md | Reconciliation against two parallel research sessions: 4 papers transferred, 0 candidates dropped. |
FRAMEWORK-AMENDMENTS.md | Gap register from the pilot application of the framework, each gap re-statused under the 2026-05-22 policy. |
FRAMEWORK.md | The 8-level per-candidate analysis framework; adopts the upstream ban-list thresholds; still awaiting accuracy review. |
LICENSE-AUDIT.md | Licence audit of 15 FOSS repos with per-candidate copyleft impact and mitigation routes. |
RESEARCH-DIGEST.md | Canonical 64-row candidate table with paper anchor, FOSS commit SHA, bucket and coverage attestation. |
VERIFICATION-VERDICT.md | Citation verification (14 modern + 21 foundational papers) plus SHA-pinned FOSS repo checks and defect list. |
candidates/01-bar-shannon-entropy.md | Candidate #1 record — Shannon entropy; conditional after the entropy run. |
candidates/02-bar-approximate-entropy.md | Candidate #2 record — approximate entropy; dropped as a sample-entropy sibling. |
candidates/03-bar-sample-entropy.md | Candidate #3 record — sample entropy; dropped in the hardened re-run. |
candidates/04-bar-permutation-entropy.md | Candidate #4 record — permutation entropy; demoted as redundant with shipped Petrosian FD. |
candidates/05-bar-weighted-permutation-entropy.md | Candidate #5 record — weighted permutation entropy; dropped as a permutation-entropy sibling. |
candidates/09-bar-spectral-entropy.md | Candidate #9 record — spectral entropy; conditional pending a ruling on its sampling-frequency parameter. |
candidates/10-bar-svd-entropy.md | Candidate #10 record — SVD entropy; the deferral rationale and the conditions for revisiting it. |
candidates/11-bar-dispersion-entropy.md | Candidate #11 record — dispersion entropy; the entropy family's sole clean promotion, shipped in PR #515. |
candidates/12-bar-fisher-shannon.md | Candidate #12 record — Fisher-Shannon; dropped as a permutation-entropy sibling. |
candidates/14-bar-hjorth-mobility.md | Candidate #14 record — Hjorth mobility; full framework write-up, dropped as a cluster member. |
candidates/15-bar-hjorth-complexity.md | Candidate #15 record — Hjorth complexity; preliminary promotion reversed by the cross-candidate matrix. |
candidates/16-statistical-complexity.md | Candidate #16 record — MPR statistical complexity; banned as a near-rename of Petrosian FD. |
candidates/18-cecp-coordinates.md | Candidate #18 record — CECP coordinates; dropped as redundant by definition, not by measurement. |
candidates/19-cecp-velocity.md | Candidate #19 record — CECP velocity; passed all three axes and was queued for implementation. |
candidates/20-binary-cecp.md | Candidate #20 record — binary CECP; held as borderline-redundant with Katz FD. |
candidates/43-bar-petrosian-fd.md | Candidate #43 record — Petrosian fractal dimension; promoted and shipped in PR #509. |
candidates/44-bar-katz-fd.md | Candidate #44 record — Katz fractal dimension; cluster winner, shipped in PR #509. |
candidates/65-persistence-landscape-l2-norm-explained-en.md | Plain-English companion to the #65 pilot record. |
candidates/65-persistence-landscape-l2-norm.md | Candidate #65 record — persistence-landscape L²-norm; the pilot application of the framework. |
candidates/CLAUDE.md | Per-candidate folder hub: file count, evaluation census, verdict taxonomy, how to add a file. |
candidates/_template.md | Canonical per-candidate file template derived from the framework's output section. |
spike_2026-05-27/CHECK_A_RESULTS.md | Strict manifest-coverage verification run before column promotion; corrects the effective-coverage figure. |
spike_2026-05-27/CLAUDE.md | Hub for the first empirical run (5 candidates): method, adopted-vs-extended checks, reproduction steps, results table. |
spike_2026-05-27/CROSS_CANDIDATE_FINDINGS.md | The cross-candidate matrix evidence behind the 3-way Hjorth-Katz cluster discovery. |
spike_2026-05-27/PROVENANCE.md | Single source of truth for which checks are mandated upstream and which are operator extensions. |
spike_2026-06-02-entropy/AGNOSTIC_AXIS3.md | Per-symbol pass-rate evidence used as the substitute agnostic-axis test. |
spike_2026-06-02-entropy/CHALLENGED_AND_HELD.md | First adversarial audit of the entropy promotion; raised the six gates the hardening run closed. |
spike_2026-06-02-entropy/CHALLENGED_AND_HELD_v2.md | Re-audit of the hardened verdict; records the omitted-instrument blocker and the final per-candidate dispositions. |
spike_2026-06-02-entropy/CLAUDE.md | Hub for the entropy-family loop: 8-candidate work list, frozen test constants, file map. |
spike_2026-06-02-entropy/CONSTANTS_LOOP_CONTRACT.md | Contract for ratifying the shared ordinal embedding as a real project-wide constant. |
spike_2026-06-02-entropy/CROSS_CANDIDATE_FINDINGS.md | Entropy-family cross-candidate matrix: leave-one-out R² and pairwise sibling clusters. |
spike_2026-06-02-entropy/CROSS_CANDIDATE_VS_LANDED.md | Redundancy check of the entropy keepers against the already-shipped features; superseded by the hardened run. |
spike_2026-06-02-entropy/FEATURE_IMPL_LOOP_CONTRACT.md | Contract for porting dispersion entropy into the Rust core following the PR #509 playbook. |
spike_2026-06-02-entropy/HARDENED_VERDICT.md | The hardened numeric verdict: per-candidate tables G1, G2, G2b, G5b, G6 and G7 over 207 cells. |
spike_2026-06-02-entropy/HARDENING_LOOP_CONTRACT.md | Contract for the loop that closed those six gates, one unit per firing. |
spike_2026-06-02-entropy/LOOP_CONTRACT.md | The loop's operating contract: per-iteration procedure, pre-answered forks, stop conditions. |
spike_2026-06-02-entropy/PROMOTION_PLAN.md | Two-deliverable promotion plan (constants first, then feature ports); carries the superseded-slate banner. |
spike_2026-06-02-entropy/SETUP.md | Environment and launch instructions for running the entropy loop on the remote host. |
spike_2026-06-02-entropy/SMOKE_TEST_FINDINGS.md | Read-only smoke findings taken before the hardening loop, and their consequences for it. |
spike_2026-06-05-fractal-chaos/CLAUDE.md | Hub for the fractal/multifractal/chaos batch: scope, hard rules, file map. |
spike_2026-06-05-fractal-chaos/SMOKE_TEST_FINDINGS.md | One-cell smoke test that finalised the 10-candidate slate, with cost table and the two within-slate clusters. |
verdict.md | Root verdict + rolling ledger: G9 audit → Phase 2 spike → Phase 2b entropy → Phase 2c Axis-2 HOLD → 2d remediation → 2e/2f CECP. |
findings/dashboard/campaigns/2026-05-08-crypto-orthogonal-feature-families/
findings/dashboard/build_audits.py from findings/evolution/audits/2026-05-08-orthogonal-features-btcusd/AUDIT_LEDGER.json — never hand-edited. Each quote was verified to occur in the file named beside it when the ledger was written.