|
| 1 | +# BTC Fib Selection-Learning — artifact-probe MECHANICS investigation PLAN (2026-06-24) |
| 2 | + |
| 3 | +**Lean Fib Research. Research-only. DESCRIPTIVE-ONLY — produces NO verdict, NO claim, no |
| 4 | +edge/behaviour/PnL/backtest/Genesis/auto-fib. Docs-only plan (no code/run authorised here).** This is |
| 5 | +the small, low-risk **investigate** plan named as door (i) in the |
| 6 | +[campaign checkpoint](btc-fib-selection-learning-checkpoint-20260624.md), to explain the *mechanics* |
| 7 | +behind the [artifact-probe result](btc-fib-selection-learning-artifact-results-20260624.md) |
| 8 | +(`1573b56`). It does **not** test the crux, change any lock, or add any positive claim. Execution |
| 9 | +needs a **separate explicit GO**. |
| 10 | + |
| 11 | +## P0. Question (mechanical, descriptive — three observations to explain) |
| 12 | + |
| 13 | +On the artifact-probe's existing frozen data (no refresh): |
| 14 | + |
| 15 | +1. **4H — reached legs are *less* clean than unreached** (0.743 vs 0.799; gap −0.0557). |
| 16 | +2. **4H — snapping anchors to detector pivots *lowers* cleanliness** (snapped − exact = −0.0219). |
| 17 | +3. **1D — snapping *flips* to inflation** (+0.0222), opposite sign to 4H. |
| 18 | + |
| 19 | +These are already locked as **"investigate, not a finding"** (artifact LOCK A7). This plan asks only |
| 20 | +**WHY, mechanically** — it issues **no verdict** and the artifact-probe's reading is unchanged. |
| 21 | + |
| 22 | +## P1. Can it be tested cleanly on existing data? (feasibility — YES, with one caveat) |
| 23 | + |
| 24 | +- **YES, methodically clean.** Every quantity needed is a **deterministic function of the already-frozen |
| 25 | + data + the locked detection** (`anchor_b + k=3`, frozen config) — no new candidate universe, no |
| 26 | + matched-null, no arbitrary frame, no new model feature. It is a **descriptive decomposition** of |
| 27 | + per-leg quantities the artifact-probe already computes internally. |
| 28 | +- **Caveat:** it **cannot** be answered from the *existing artifacts* (summary.json holds only |
| 29 | + aggregates — `clean_reached`, `clean_unreached`, the snap gaps). The per-leg quantities (span length, |
| 30 | + magnitude, snapped-vs-exact span) are not persisted. So execution needs a **small descriptive pass** |
| 31 | + that records them — a build+run on the **same frozen data**, low-risk, no new arbitrary choice. |
| 32 | + |
| 33 | +## P2. Mechanical hypotheses (pre-stated — to keep the decomposition honest) |
| 34 | + |
| 35 | +- **M1 (reached less clean = a size/length confound):** the detector reconstructs **larger / longer** |
| 36 | + swings (it needs fractal structure + `min_prominence_atr=0.5`); longer swings carry more intermediate |
| 37 | + retracement → lower `cleanliness`. Unreached legs (detector misses) are shorter/smaller → straighter → |
| 38 | + higher `cleanliness`. Prediction: reached legs have **longer span / larger magnitude**, and the |
| 39 | + (**marginal** — surfacing CI upper was −0.00095) cleanliness gap **attenuates** when conditioning on |
| 40 | + span. *M1 explains a marginal gap; the note must not retroactively harden the surfacing result.* |
| 41 | +- **M2 (4H snapping lowers cleanliness):** detector pivots sit at the **fuller** swing extremes; the |
| 42 | + human anchors **inside** them, so snapping **extends** the bar-index span and `cleanliness = net/path` |
| 43 | + drops. **Important — the bare correlation `snap_span_delta ~ (snapped − exact)` is partly arithmetic |
| 44 | + by construction (changing the span changes net/path mechanically), so it is NOT the descriptive |
| 45 | + object.** The genuinely informative, non-trivial fact is **M3's cross-TF asymmetry** below. |
| 46 | +- **M3 (the real descriptive object — cross-TF asymmetry in `snap_span_delta`):** on **4H** detector |
| 47 | + pivots systematically sit **outside** the human anchors (`snap_span_delta > 0`, extension lands in |
| 48 | + retracement → cleanliness down); on **1D** they do **not** (`snap_span_delta ≤ 0` → cleanliness up). |
| 49 | + That asymmetry — **detector granularity vs human-anchoring precision differing by TF** — is the real |
| 50 | + content explaining the sign flip, reported as the headline, **not** "span extension lowers |
| 51 | + cleanliness" dressed as a discovery. |
| 52 | + |
| 53 | +## P3. Pre-locked statistics (anti-forking-paths — fixed BEFORE any number) |
| 54 | + |
| 55 | +- **Per-leg quantities (descriptive):** `span_bars = |pos_b − pos_a|`, `magnitude_atr` (net move ÷ |
| 56 | + causal ATR at `anchor_b`), `snap_span_delta` (bars), all on the frozen data / locked detection. |
| 57 | +- **Reported as:** distributions (median + IQR) for reached vs unreached (M1); a **single Spearman |
| 58 | + correlation** `cleanliness ~ span_bars` and a **single median split** on `span_bars` (M1 attenuation); |
| 59 | + and — the headline — the **per-TF sign + distribution of `snap_span_delta`** to expose the 4H↔1D |
| 60 | + **asymmetry** (M3). The bare `snap_span_delta ~ (snapped − exact)` correlation may be shown for |
| 61 | + completeness but is flagged **partly arithmetic, not the finding**. **Fixed confound set = |
| 62 | + {span_bars, magnitude_atr}** — no tuned bins, no cherry-picked controls. |
| 63 | +- **NO bootstrap verdict, NO CI-based decision, NO new locked verdict** — purely descriptive. The output |
| 64 | + is a **mechanics note**, not a result with a verdict. |
| 65 | + |
| 66 | +## P4. Discipline / non-claims (binding) |
| 67 | + |
| 68 | +- **Descriptive-only.** Issues **no verdict**, adds **no positive claim**, and does **not** change the |
| 69 | + artifact-probe reading (still "investigate, not a finding") or any lock. |
| 70 | +- Does **not** resolve the cleanliness crux (stays OPEN); a clean mechanical explanation of the gap is |
| 71 | + **not** evidence either for or against "genuine human signal." |
| 72 | +- **Population guard (binding):** M1's reached-vs-unreached contrast is detector-**reached** vs |
| 73 | + detector-**missed** human legs — a **different population** from the Stage-2 cleanliness lead |
| 74 | + (human-matched vs non-human candidates, both *inside* the detector universe). "Span explains the |
| 75 | + reached/unreached gap" must **NOT** bleed into "span explains/dissolves the Stage-2 lead" — different |
| 76 | + populations, different (un-made) claim. |
| 77 | +- **No matched-null, no new candidate universe, no new model feature, no Genesis, no auto-fib-as-truth, |
| 78 | + no 1H, no ETH, no label/corpus mutation, no `data.fetch --refresh`** (frozen-data parity). |
| 79 | + |
| 80 | +## P5. Execution sketch (Commit 2 — NOT executed here; needs a separate GO) |
| 81 | + |
| 82 | +- A small **descriptive pass** recording per-leg `{span_bars, magnitude_atr, snap_span_delta}` + |
| 83 | + the P3 summaries — either a `--artifact-mechanics` descriptive mode on |
| 84 | + `selection_learning_artifact.py` or a tiny sibling; **no code into byte-capped |
| 85 | + `selection_learning.py`**. Reuses the existing rows / detection / ε / frozen data. |
| 86 | +- Tests for the new descriptive quantities; a **mechanics note** |
| 87 | + (`btc-fib-selection-learning-artifact-mechanics-20260624.md`, descriptive, no verdict). Artifacts |
| 88 | + under `experiments/review/fib_selection_learning/artifact/` (**gitignored**). |
| 89 | + |
| 90 | +## P6. What this plan does NOT do |
| 91 | + |
| 92 | +No code, no run, no build, no verdict, no claim, no lock change, no matched-null, no new universe, no |
| 93 | +push beyond this plan doc. Execution requires a **separate explicit GO**; **halt and report** if, at |
| 94 | +build time, any pre-locked statistic (P3) or the descriptive-only discipline (P4) is found unclear. |
0 commit comments