# Drift Premium: untouched-data research, methodology

Evidence version `2026-09-24-final-r6` · stage `final` · mode `research` · built by ProEA Lab; not published at build time. `publishedAt` keeps its v2-core name: it holds 2026-09-24T03:40:18Z, the time of the lab commit `2026-09-24-final-r2` was built from, not a publication time.

Every figure here is a hypothetical backtest on historical Binance spot data. No live trading record is implied. 1R = 100 USDT of planned risk per position. Figures below are rounded for reading; `summary.json` holds every value at full precision, and every file's sha256 is in `MANIFEST.json`.

## 1. The outcome

**In one sentence:** Long-only Drift Premium failed the promotion gate we set after validation and before its final test (profit factor 1.16 on Set A's holdout months and 1.12 on Set B's ten untouched coins, against 1.20), and its +197.6R on the untouched coins is explained by long exposure in rising markets, not timing (timing −14.4R and −18.5R under the two corrected nulls): Drift Free taking only long signals made about as much (+170.7R), and holding Premium's average capital long at constant size made more (+299.1R after costs).

- **The promotion gate returned FAIL.** `gate.mjs` was committed at 2026-09-24T00:28:48Z, before FINAL started at 2026-09-24T01:31:17.448Z, and received only FINAL numbers. Its reasons, verbatim:
  - Set A: Premium profit factor 1.16 is below 1.2.
  - Set B: Premium profit factor 1.12 is below 1.2.
- **So the answer to the protocol's question is no.** The site may show these numbers as research, but may not make the comparative claim that the gate licenses only on a pass. The comparative sentence in `gate.mjs` (`LICENSED_CLAIM`) is not licensed, and `gate.licensedClaim` is null.
- Mode `research` is derived from the evidence alone: proven needs the gate to pass, every amendment to predate FINAL, the gate to be committed before FINAL started, and engine parity PASS.
- **This version corrects the analysis, not the result.** The first export, evidence version `2026-09-24-final`, is kept unchanged in the lab's history and is not published; its `MANIFEST.json` has sha256 `e63fb6ed9adae274d8ee1bc6c85380e17186ada37ed00b23a4b62472a315c5f2`, so its bytes can be verified if it is ever released. After FINAL, on 2026-09-24, 18 analysis definitions and wordings were corrected, each listed with its old and new value (§12, `disclosures.postFinalCorrections`). The FINAL runs, the gate verdict and the protocol are unchanged.

Net R under REAL costs (the protocol's decision costs), Premium beside its comparators (`benchmarks.headToHead`):

| | Set A: holdout months (2025-04 → 2026-09) | Set B: ten untouched coins (2020-01 → 2026-09) |
|---|---:|---:|
| Drift Premium (C1), long only | +66.77 (PF 1.165) | +197.60 (PF 1.123) |
| Drift Free long-only (RL) | +35.42 (PF 1.097) | +170.73 (PF 1.118) |
| Premium − Drift Free long-only | +31.36 (share of resamples at or below zero: 0.295) | +26.86 (share of resamples at or below zero: 0.439) |
| Constant long exposure of Premium's average capital, after costs | +24.90 | +299.09 |
| Premium − constant long exposure | +41.87 (share of resamples at or below zero: 0.256) | −101.49 (share of resamples at or below zero: 0.771) |
| Drift Free 1.3.1 (F0) | +10.46 (PF 1.026) | −152.32 (PF 0.907) |
| Buy D/P0 units and hold, Premium's D (formerly "capital-matched") | +8.42 | +724.96 |

Where the result is weak, from the same files:

- **Profit factor.** Premium's 1.165 (Set A) and 1.123 (Set B) are below the gate's 1.2, which amendment A5 set after VAL. That is the whole gate failure.
- **Timing.** The drift-only null that amendment A6 added after VAL priced positions at the geometric-mean return and understated what long exposure earns, so its timing term (+244.08 on Set B) is not evidence of timing. With the arithmetic mean or random entries of the same durations, Premium's timing term is −14.45 (share of resamples at or below zero: 0.556) or −18.46 (0.566) on Set B and +81.89 (0.145) or +83.78 (0.139) on Set A. On Set B, long exposure at random times would have earned +310.23 to +314.24 before costs; Premium earned +295.78 before costs.
- **Drift Free long-only.** Taking only Drift Free's long signals made +35.42 and +170.73. Premium's margin over it on Set B is +26.86, and the share of resamples with the margin at or below zero is 0.439 in the week-block bootstrap: not resolved.
- **Constant long exposure.** Holding Premium's own average capital at constant size made +299.09 on Set B after costs, with a mark-to-market drawdown of 93.54R against Premium's 177.77R.
- **Uncertainty.** The week-block bootstrap interval (2.5% to 97.5%) of Premium's net R includes zero in both sets: Set A −79.26 to +225.67, Set B −107.39 to +515.70.
- **One month out.** 94.5% of Premium's Set A net R came from positions exiting in 2025-07, a month in which Set A's coins rose +27.8% (equal weight); without it, Set A leaves +3.64 (PF 1.009). On Set B the lowest leave-one-month-out profit factor is 1.075 (without 2021-01: +119.09), and the three largest months (2021-01, coins +119.5%; 2024-11, coins +135.6%; 2026-08, coins +26.1%) gave +191.21 of +197.60: the other 78 months sum to +6.38.
- **Top-5 trimmed.** Without its five largest positions Premium keeps +13.88 on Set A (PF 1.034) and +71.66 on Set B (PF 1.045).
- **Market direction.** Premium is long-only. In falling quarters it made −74.85 (Set A) and −218.50 (Set B); in rising quarters +141.62 and +416.10.
- **The coins' price return.** The coins' equal-weight price return was −6.8% on Set A and +1144.8% on Set B. Buying D/P0 units with Premium's average capital and holding them made +724.96 on Set B, but that holding's average capital was 9.90 × Premium's (1.10 × on Set A), so it is not a capital-matched comparison; constant long exposure is.
- **Concentration by coin.** Without DOGEUSDT and ETCUSDT, Premium made +15.72 on Set B (PF 1.012; −73.45 under STRESS). Without BTCUSDT and ETHUSDT, +38.23 on Set A (−0.52 under STRESS).
- **Time.** On Set B, Premium's years from 2022 through 2026 sum to −15.33 under REAL and −101.42 under STRESS.

## 2. The files

| file | what it is |
|---|---|
| `summary.json` | Every published number: the v2 core (scoreboard per set, cost and edition; per symbol; per year; the gate; the search counts; parity) and five declared extensions (§9). |
| `curves-REAL.json`, `curves-STRESS.json`, `curves-TV.json` | Closed-equity curves per set, symbol and edition, plus the set aggregate (`ALL`), one file per cost model (§8). |
| `cells.csv` | One row per FINAL evaluation × symbol, plus an `ALL` row per evaluation: all 24 FINAL evaluations, every metric (§8). |
| `trades.csv` | Every position of the 24 FINAL evaluations, one row each (§8). |
| `configs-ledger.csv` | The lab's ledger: every evaluation ever recorded, DEV, VAL and FINAL, failures included, byte for byte as the lab keeps it (§8). |
| `PROTOCOL.md` | The protocol, byte for byte: v1 and amendments A1–A4, pre-registered before any Premium result, and amendments A5 and A6, written after VAL and before FINAL. |
| `gate.mjs` | The promotion gate, byte for byte; it is runnable JavaScript. |
| `methodology.md` | This file. |
| `MANIFEST.json` | `drift-public-manifest/v2`: every file above with its sha256 and size in bytes, sorted by name. It does not list itself. |

## 3. Protocol and pre-registration

- Protocol v1, frozen 2026-09-23; `PROTOCOL.md` sha256 `58175c1c87f8b81ef8375fba817b5f8ce21d80ab47a2c549b646f8006f778c41`. Amendments:
  - **A1** (2026-09-23; first committed 2026-09-23T15:15:23Z, before FINAL): Defines continuous data: the first Binance 1h bar opens on or before 2019-10-01 00:00 UTC, and no more than 2% of 1h bars are missing from then to the end of the data. A symbol that fails is replaced by the listed substitutes in order, Set A first.
  - **A2** (2026-09-23; first committed 2026-09-23T15:15:23Z, before FINAL): Discloses earlier 4h research on BTC and ETH that overlaps VAL and HOLDOUT-T, so FINAL reports Set A with and without BTC and ETH and treats Set B as the primary untouched evidence. It also records that BCHUSDT fails A1 and is replaced in substitute order, keeps extreme real prints uncleaned, adds a crash-fill stress to FINAL, and limits claims to effects FINAL's sample can resolve.
  - **A3** (2026-09-23; first committed 2026-09-23T15:16:01Z, before FINAL): Sets the publication format. FINAL is also published under the TV cost model for Strategy Tester parity; years follow trade exit time (UTC); equity curves are cumulative closed-trade net R at exit time; the export format is drift-public-research/v2; and gate.mjs exports the one comparative sentence the site may print if the gate passes.
  - **A4** (2026-09-24; first committed 2026-09-23T20:06:13Z, before FINAL): Written before any DEV result. Higher-timeframe rules use Drift Desk's own Pine idiom (the previous completed higher-timeframe candle) and block entries until their data is ready; the volatility percentile needs 90 days of data. REAL and STRESS keep the data's native price precision, while TV uses TradingView's tick and lot sizes. 1R is fixed at 100 USDT; windows are assigned by entry-bar close, years and curves by exit-bar close. Every research run names its window, and VAL, HOLDOUT-T and Set B stay locked until the freeze files unlock them. It discloses that engine parity work printed Drift Free (not Premium) results on BTC, ETH and XRP windows overlapping VAL and HOLDOUT-T.
  - **A5** (2026-09-24; first committed 2026-09-24T00:24:28Z, before FINAL, after VAL): Written after VAL had run and before FINAL. Defines the promotion gate the founder chose from two offered options: in both Set A (HOLDOUT-T) and Set B, Premium net R above 0 and above Drift Free's, profit factor at least 1.2 and at least 6 profitable symbols, plus Premium net R under STRESS costs (both sets) above 0; and the one comparative sentence the site may print if the gate passes. The founder had seen DEV results but not VAL results when choosing.
  - **A6** (2026-09-24; first committed 2026-09-24T00:28:48Z, before FINAL, after VAL): Written after VAL and before FINAL. Ratifies the neighbour-rule reading under which the long-only rule, and so the chosen candidate, survived the DEV screen, and requires every FINAL publication to disclose it. Adds a stricter gate condition after the founder saw the VAL robustness audit: on Set B, Premium net R must also exceed that of Drift Free taking only long signals. Lists what FINAL must also report (Free long-only, a benchmark of holding the same planned notional, a drift-only null, leave-one-out and trimmed profit factors, STRESS, crash-month exclusion, the margin split, falling markets, and the with/without subsets), records pre-FINAL disclosures, and defines how FINAL re-pins the code hash with the candidate's files byte-identical.
- Lab commits that recorded the protocol and the gate before FINAL: `e736347` (2026-09-23T15:15:23Z), `ed15b10` (2026-09-23T15:16:01Z), `289a14d` (2026-09-23T20:06:13Z), `cdda29a` (2026-09-24T00:24:28Z), `3544b22` (2026-09-24T00:28:48Z). This export was built from lab commit `db33957b1fdbf76895dbc1f54396979324d8e6e4`.
- An amendment's date is the date its header states, on the lab's local calendar (committer time zone UTC+07:00); commit times are given in UTC, so a date can read one day later than the UTC commit time.
- **Gate timing (disclosure).** The gate now published (`gate.mjs` sha256 `287dc7b1ae95f5c0e99783e0d2f251e735388e33047bde1568025e5984003fa7`) was committed at 2026-09-24T00:28:48Z; the VAL results were committed at 2026-09-23T23:53:06Z and the VAL choice at 2026-09-23T23:54:19Z (`gateCommittedAfterVal: true`, derived from git). The promotion gate was written and committed after VAL had run and after the VAL choice was committed, and before FINAL started. The founder chose its conditions without being shown the VAL results (A5). The Set B condition against Drift Free long-only was added after the founder saw the VAL robustness audit, in the stricter direction only (A6.2).
- **Protocol edits (disclosure).** Every version of PROTOCOL.md extends the previous one byte for byte except the edits listed, which changed text above the newest amendment in place. Commit `cdda29a` (2026-09-24T00:24:28Z) changed 1 line in place: line 159, `6. *Disclosure:* parity work printed **Free 1.3.1 (not Premium) results** on windows overlapping` became `6. *Disclosure (see A5 for the gate):* parity work printed **Free 1.3.1 (not Premium) results** on windows overlapping`.

## 4. Data, universe and windows

- Binance spot klines (data.binance.vision, api.binance.com). Data manifest sha256 `3b12bf229badb0435f8d26fe49b093aee0c913b88829eee8169df37b0e1b9288`. Missing bars are never synthesized; each symbol's share of missing 4h bars in its window is `missingBarsPct`.
- Cutoff: 2026-09-23T12:00:00Z, the close of the last complete 4h bar, the same bar for all 20 symbols. It is the exclusive end of both FINAL windows. Positions still open then were closed on that bar (exit reason `WINDOW_END`).
- Set A (development and time holdout): BTCUSDT, ETHUSDT, BNBUSDT, XRPUSDT, ADAUSDT, LINKUSDT, LTCUSDT, TRXUSDT, ATOMUSDT, XLMUSDT.
- Set B (untouched symbols): DOGEUSDT, QTUMUSDT, ETCUSDT, XTZUSDT, VETUSDT, ALGOUSDT, ZECUSDT, DASHUSDT, HBARUSDT, NEOUSDT. QTUMUSDT replaces BCHUSDT: its first Binance 1h bar opens 2019-11-28T10:00:00Z, after the 2019-10-01 limit, and 1433 of 61190 expected 1h bars (2.34%) are missing since 2019-10-01, above the 2% limit (Amendment A1).
- Survivorship: all 20 pairs were chosen among Binance spot pairs still trading in 2026, so pairs delisted earlier are not represented.
- Windows, assigned by entry-bar close time (UTC): warmup 2019-09-01T00:00:00Z → 2020-01-01T00:00:00Z; DEV 2020-01-01T00:00:00Z → 2024-01-01T00:00:00Z; VAL 2024-01-01T00:00:00Z → 2025-04-01T00:00:00Z; HOLDOUT-T (Set A in FINAL) 2025-04-01T00:00:00Z → 2026-09-23T12:00:00Z; Set B in FINAL 2020-01-01T00:00:00Z → 2026-09-23T12:00:00Z. Every series starts at its first bar, so Drift's state builds up before each window.
- Overlap: Before this protocol, earlier ProEA Lab research inspected Drift Free and variants on BTC and ETH at 15m and 1h from January to September 2026 (overlapping HOLDOUT-T), and measured BTC and ETH at 4h with entries from 2025-02-01 to 2025-12-31 (overlapping VAL and HOLDOUT-T). None of this lab's candidates were evaluated there. Engine parity work in this lab also printed Drift Free 1.3.1 (not Premium) results on BTC, ETH and XRP windows overlapping VAL and HOLDOUT-T. FINAL therefore reports Set A with and without BTC and ETH, and Set B is the primary untouched evidence.

## 5. Costs

| model | commission per fill | slippage | role |
|---|---:|---|---|
| REAL | 0.05% | 0.02% of price on market and stop fills; none on limit fills | decisions |
| STRESS | 0.1% | 0.05% | robustness |
| TV | 0.04% | 1 tick | tradingview-parity |

Funding and borrow costs are not modelled. TV uses TradingView's tick and lot size per symbol (see disclosures). A2.3's crash-fill stress repeats the REAL run with stops inside a crash bar (range above 8 × the prior bar's ATR14) filled at the bar's extreme; it is reported under `robustness`.

## 6. Accounting and metrics

- R: 1R = 100 USDT of planned risk. Every position's R is its net result after commission and slippage divided by 100 USDT, whatever its planned size. Capital 100000 USDT, one position per symbol. Pyramiding: none in any FINAL configuration (one position per symbol). Only the DEV grid's H-PYR family (P1) added to winners, each add carrying its own planned risk.
- Positions: a position is a win when its net result is above 0, a loss when below, flat at exactly 0 (the win, loss and flat counts add up to positions).
- Net R = gross win R + gross loss R (gross loss R ≤ 0). Expectancy = net R / positions. Profit factor = gross win R / |gross loss R|, blank when nothing lost. Win rate in percent. Average win / loss in R.
- Max closed drawdown: the largest fall of the closed-equity curve, positions summed by exit-bar close time, measured from 0 before the first exit.
- Longest losing streak: consecutive losing positions in exit order (exit-bar close time, then protocol symbol order, then entry-bar close time); a flat position ends a streak.
- Cost R: commission plus slippage in R, already inside net R (the cost drag, not an extra charge). Slippage is recovered per fill as the engine applied it: market and stop fills are slipped, limit (target) fills and crash-stress fills are not.
- Symbols profitable: symbols with net R above 0. Aggregates sum every position of the set; `combined` adds Set A and Set B (additive totals only).
- Years: the UTC year of the exit bar's last millisecond, so a bar closing exactly at 00:00 UTC on 1 January belongs to the year it traded in. `partial` flags a year the window does not fully cover. Yearly positions are REAL-cost counts (TV trades on TradingView's grid and can differ by a few).

## 7. The editions and the search

- **Drift Free 1.3.1** (`free`): Drift Desk 1.3.1 strategy defaults at 4h, the timeframe with the highest DEV aggregate net R among 15m, 1h and 4h (the protocol's Free comparator; the DEV rows are in `configs-ledger.csv`). Strategy source sha256 `6df184c73a0e43963ec0ed5bf867e3b8628a3cf12546bf7e0e5c20d8e598365c`.
- **Drift Premium (research edition)** (`premium`, candidate C1, configHash `daadfadfd47d9685d66bdd6e745ed85ac41b98c46f5b575efa82e5f9b294604f`, frozen 2026-09-23T23:31:35.249Z with engine code `ba568bbcd0b8b317e8b1216c9655ae46bc4421a8812b0400017fdf4f62c06592`):
  - Signals: Drift Free 1.3.1 with its default inputs (fresh Drift flips; every optional gate off).
  - Long entries only: a short flip is skipped, never queued.
  - Initial stop: Drift Free's 10-bar structure stop plus 0.25 ATR(14), sized to 100 USDT of planned risk (1R), and kept for the life of the position.
  - No profit target: the position closes at the close of the first opposite (bearish) Drift flip.
  - Timeout raised from Drift Free's 120 bars to 5000 bars; no FINAL position reached it.
  - Timeframe: 4h.
  - No Pine build of this candidate exists yet (`pine` is null).
- **Drift Free 1.3.1, long signals only** (`benchmarks.freeLongOnly`, RL 4h): Drift Free defaults taking only long signals. A6.2: the Set B gate comparator (Premium net R must exceed it); reported on both sets and every cost model.
- **Search.** configsTried = 42 configuration × stage pairs in this lab, failures included (36 distinct configurations; DEV 36, VAL 3, FINAL 3). By family: H-TF 5, H-EXIT 12, H-REGIME 8, H-VOL 4, H-COST 4, H-ENTRY 0, H-PYR 2, combined 3; outside the v2 family keys: H-ENS 2, H-PORT 2. Each configuration counts under its hypothesis: the Drift Free baseline at 15m, 1h and 4h is the timeframe family (H-TF); the combination candidate (H-REGIME + H-EXIT) is "combined". Two families of the DEV grid have no v2 key: H-ENS (three Drift speeds as sub-positions, E3) and H-PORT (a portfolio heat cap, H5). They are counted in configsTried and listed here. The DEV grid registered no configuration of the entry-timing family (H-ENTRY). Before this lab, earlier ProEA Lab research tried 31 recipes on BTC and ETH and measured three 4h candidates (`PROTOCOL.md`, "Why earlier attempts failed" and A2.1); that work shaped this lab's hypotheses and grid, and it is not in configsTried.
- **Selection path.** DEV screen: 4 survivors; 1 dropped as fragile by the neighbour rule; 2 candidates frozen (C1 and C3 = long-only alone); VAL: 1 qualified (C1: net R +83.95, PF 1.305; C3: PF 1.161 below 1.2), against Drift Free's −17.82; then one FINAL run of the choice. No selection step used Set B or any result after 2025-04-01T00:00:00Z (the overlap disclosures name the earlier research that did look at BTC and ETH then).
- **Neighbour-rule reading (A6.1, disclosure).** The DEV neighbour rule drops a survivor whose immediate numeric neighbours all fail the screen. We read it so that a rule with no numeric parameter (long-only) has no neighbour, and the Free base is the control rather than a neighbour. This reading was applied after DEV results were known and ratified after VAL. The chosen candidate's survival depended on it. Counting "both directions" (Drift Free itself) as long-only's neighbour drops long-only (RL 4h) as fragile; the chosen candidate C1 (long-only + opposite-flip exit) cannot then be built, and the freeze would have held the opposite-flip exit (XF 4h) alone.

## 8. Formats

- **Curves** (`drift-public-curves/v2`): per cost model, 44 series (2 sets × 10 symbols plus `ALL` × 2 editions), in protocol order. `points` are [exit-bar close time in ms UTC, cumulative net R], one per distinct exit time (positions closing together are summed); there is no origin point (every curve starts from 0 at its window start). Above 240 points a series is downsampled: 60 equal time buckets over the set's window, keeping each bucket's first, last, lowest and highest point. Points are rounded to 6 decimals of R except the final point, which is not rounded: it equals `finalR` bit for bit. `finalR` is the cumulative sum in exit order at full precision; it equals the scoreboard's net R to floating-point precision (the checks allow 1e-6), not necessarily bit for bit.
- **cells.csv**: columns `set, window_from, window_to_exclusive, edition, config_id, cost, crash_fill, symbol, positions, wins, losses, flat, longs, shorts, net_r, gross_win_r, gross_loss_r, expectancy_r, profit_factor, win_rate_pct, avg_win_r, avg_loss_r, max_closed_drawdown_r, longest_losing_streak, cost_r, commission_r, slippage_r, symbols_profitable, symbols_total, run_id`. `edition` is premium, free or free-long-only; `crash_fill` marks the A2.3 stress runs (cost REAL). Blank means not defined (never zero).
- **trades.csv**: columns `set, edition, config_id, cost, crash_fill, symbol, n, direction, entry_bar_close_utc, entry_price, exit_bar_close_utc, exit_price, exit_reason, qty, net_usdt, net_r, cost_r, bars_held, crash_repriced`. Times are bar close times (UTC); TradingView lists a trade at its bar's open time, 4h earlier. Exit reasons: `CLOSE_NOW` = market exit at the close of the first opposite Drift flip (Premium's exit), `STOP`, `TARGET` (2R limit), `TIMEOUT` (120 bars), `GAP_STOP` / `GAP_TARGET` (filled at a gapping open), `WINDOW_END` (closed at the data end). `crash_repriced` marks stops the crash-fill stress filled at the bar's extreme. Summing `net_r` by evaluation and symbol reproduces the scoreboard.
- **configs-ledger.csv**: one row per recorded evaluation in recording order: run id, times, status, configuration (id, family, hypothesis, timeframe, mode, hashes), set, stage, cost, crash stress, the aggregate metrics, code and data hashes, and the running `configsTried` / `evaluations` counts.

## 9. summary.json: the v2 core and the declared extensions

`summary.json` follows `drift-public-research/v2` for its core keys (`schema`, `evidenceVersion`, `publishedAt`, `stage`, `mode`, `protocol`, `gate`, `data`, `universe`, `windows`, `costs`, `risk`, `search`, `editions`, `parity`, `val`, `results`, `caveats`, `downloads`). The v2 core knows two editions, `free` and `premium`. Everything else the protocol requires FINAL to report sits in top-level extensions that `schemaExtensions` lists: `benchmarks`, `attribution`, `robustness`, `subsets`, `disclosures`. A reader that knows only the core can ignore them.

- `benchmarks`: `headToHead` (per set, Premium beside Drift Free long-only, Drift Free, constant long exposure and buy D/P0 units and hold, with bootstrap margins), `freeLongOnly` (Drift Free long-only per set and cost, per symbol and per year, with the core's Metrics fields, plus `combined`), `constantLongExposure` (capital-matched constant long exposure per set and edition, added after FINAL) and `buyAndHold` (per set: equal weight, per symbol, and `buyUnitsAndHold` per edition, the benchmark amendment A6 asked for, formerly named "capital-matched", with its average capital and drawdowns).
- `attribution`: `driftOnlyNull` (the flawed null that amendment A6 added after VAL: net R split into drift, timing and cost with the geometric-mean return), `arithmeticMeanNull` and `randomEntryNull` (the corrected nulls, added after FINAL), each with a week-block bootstrap of the timing term, and `marginSplit` (Premium − Free as shorts avoided, shared long entries, Premium-only entries and the fourth identity term; and Premium − Free long-only).
- `robustness`: per set and edition, leave-one-symbol-out, leave-one-month-out, top-5-trimmed, STRESS, the crash-fill stress and crash months excluded; the crash bars; falling-market quarters; bootstrap intervals of net R and of the margins (including Premium − constant long exposure); `monthConcentration` (net R by exit month with each month's equal-weight market return, added after FINAL).
- `subsets`: Set A without BTC/ETH and Set B without DOGE/ETC, per edition and cost.
- `disclosures`: A6.1, A6.4, the overlaps, gate timing (`gateCommittedAfterVal`), amendment commits, protocol edits, the A6.5 re-pin, the FINAL runner, readings set before FINAL, TradingView metadata, parity scope, the search mapping, the pinned-file exception, `evidenceHistory`, `summarySentence` and `postFinalCorrections` (every post-FINAL correction: date, severity, what, why, old value, new value).

Two readings of the contract: `downloads` has no `summary` entry, because a file cannot carry its own hash (its identity is in `MANIFEST.json`); and the gate is recomputed from `gate.mjs` with Drift Free long-only taken from `benchmarks.freeLongOnly`, since the gate's third input has no core edition.

Definitions of the extensions:

- head to head: Premium beside its comparators on each set (REAL costs): Drift Free long-only first, then Drift Free, constant long exposure of Premium's average capital, and buy D/P0 units and hold. Drawdowns are mark-to-market at 4h closes. Margins carry the week-block bootstrap of the weekly differences; resolved95 means the 2.5%–97.5% interval excludes zero.
- constant long exposure: Capital-matched constant long exposure (added after FINAL, postFinalCorrections PFC-2). Per symbol and edition, D = the edition's average capital deployed on the symbol over the window (Σ quantity × entry price × time held / window length). Hold D of the coin at every 4h close: buy D at the first window close, trade back to D after each close, sell at the last. P&L = Σ D × (c_k / c_(k−1) − 1). REAL costs, 0.07% of each fill's notional (0.05% commission + 0.02% slippage), on every fill that P&L needs: the entry, the rebalancing after each close but the last, and the exit (costR = fillCostR + rebalanceCostR). entryExitCostsOnlyNetR charges only the entry and exit fills; it books the rebalanced P&L without the trades that make it, so it overstates the benchmark. maxDrawdownRMarkToMarket: the largest fall of the mark-to-market curve (every cost booked when paid), summed over the set's symbols, from 0.
- holding benchmarks, perSymbol: P0 / P1 = the symbol's close on the bar closing at the window start / at the data end. returnPct = P1 / P0 − 1; maxDrawdownPct = the largest percentage fall of the 4h close from its running peak over the window.
- holding benchmarks, equalWeight: Equal money in each symbol at P0, no rebalancing, no costs; returnPct = the mean of P1 / P0 − 1; maxDrawdownPct = the largest percentage fall of the portfolio value from its running peak at 4h closes.
- holding benchmarks, buyUnitsAndHold: The benchmark amendment A6 asked for, written after VAL and before FINAL, formerly named "capital-matched" (renamed after FINAL, postFinalCorrections PFC-2; its numbers are unchanged). Per symbol and edition, D = the edition's average capital deployed on the symbol over the window (Σ quantity × entry price × time held / window length). Buy D / P0f units at P0f = P0 × 1.0002 on the first window close and hold them; sell at P1 × 0.9998 on the last; 0.05% commission on each fill (REAL). It holds a fixed number of coins, so its capital moves with the price: benchmarkAverageCapitalUsdt is the units times the mean close of the window's bars, and averageCapitalOverDeployed its ratio to D. benchmarkNetR is in R (100 USDT); benchmarkMaxDrawdownR is mark-to-market at every 4h close, summed over the set's symbols, from 0.
- holding benchmarks, editionMaxDrawdownRMarkToMarket: The edition's own drawdown on the same 4h-close basis: closed net R plus open positions marked at the close, entry commission booked. It compares like for like with benchmarkMaxDrawdownR; the closed-equity maxClosedDrawdownR of the scoreboard is smaller by construction.
- drift-only null (defined in amendment A6, after VAL and before FINAL; flawed; kept as defined. Use arithmeticMeanNull and randomEntryNull (postFinalCorrections PFC-1).): It prices each position at the geometric-mean 4h return g, the compounding rate of the whole window. For a position of fixed size, the expected gain from random long exposure follows the arithmetic mean, which exceeds g by about half the variance of the 4h return per bar. So this null understates what random long exposure earns and counts the difference as timing. Definition: g = (P1 / P0)^(4h / window length) − 1 is the symbol's average (geometric) 4h return over the window. A position of q units in direction d, entered at the signal close E and held n bars, earns drift = d × q × E × ((1 + g)^n − 1): the same size over the same bars at the symbol's average return. Its frictionless P&L is net + commission + slippage, and timing = frictionless − drift, so net R = drift R + timing R − cost R. Being long through rising stretches counts as timing here, so a positive timing term does not by itself separate skill from market direction. Bootstrap: Week blocks starting Monday 00:00 UTC, every week of the window (empty weeks included); a position belongs to the week of its exit; 20000 resamples of all blocks with replacement (seed 20260924); the 2.5% / 50% / 97.5% percentiles of the timing sum and the share of resamples whose timing sum is at or below zero.
- arithmetic-mean null: Added after FINAL (postFinalCorrections PFC-1). a = the mean of the 4h simple returns c_k / c_(k−1) − 1 over the window's closes, starting from the bar closing at the window start (a return across a missing bar counts once). A position of q units in direction d, entered at the signal close E and held n bars, earns drift = d × q × E × ((1 + a)^n − 1): for independent 4h returns with mean a, the expected gain of holding q units for n bars. timing = frictionless − drift, so net R = drift R + timing R − cost R. Bootstrap: the same.
- random-entry null: Added after FINAL (postFinalCorrections PFC-1). drift = d × q × E × m(n), where m(n) = the mean of P(t + n × 4h) / c(t) − 1 over every admissible entry close t of the symbol in the window (the window start ≤ t and t + n × 4h ≤ the data end; P(x) = the close of the last bar closing at or before x): the exact expected n-bar return of an entry drawn uniformly from the window's closes, with no distributional assumption. timing = frictionless − drift. A seeded Monte Carlo draws one admissible entry per position per draw; the mean of its draws must agree with the exact drift within 4 standard errors. Its spread treats every position as an independent entry and ignores how exposure clusters across time and coins, so it is a check, not an interval. Bootstrap: the same.
- margin split: Positions are matched by symbol and entry-bar close time (REAL costs). Premium − Free = shorts avoided (−Σ Free short R) + shared long entries (Σ Premium R − Free R over entries both took) + Premium-only entries (Σ Premium R) + Free-only long entries (−Σ Free R over long entries Premium did not take). The fourth term is needed for the identity and is reported beside the three A6.3 names. Against Drift Free long-only there is no short term; its fourth term is the long-only entries Premium did not take.
- leaveOneSymbolOut: Each symbol removed in turn (REAL); the rows and the lowest profit factor and net R.
- leaveOneMonthOut: Each calendar month of the window removed in turn, positions by exit month (REAL).
- top5Trimmed: The 5 largest positions by R removed (REAL).
- stress: Profit factor and net R under STRESS costs (0.10% commission, 0.05% slippage).
- crashFillStress: A2.3: the REAL run repeated with stops inside a crash bar filled at the bar's extreme instead of the stop level.
- crashMonthsExcluded: Positions whose exit month is a crash month of their own symbol removed (REAL).
- uncertainty: The week-block bootstrap of attribution.driftOnlyNull applied to net R and to the weekly margins (context only; the protocol decides on point values). premiumMinusConstantLongExposure (added after FINAL) pairs Premium's net R by exit week with the constant-exposure benchmark's P&L by bar-close week.
- monthConcentration: Added after FINAL (postFinalCorrections PFC-4). Net R and positions by exit month (REAL), every month of the window, with the equal-weight price return of the set's coins over the month (calendar months cut to the window); the three largest months and what remains without the largest one and three.
- crash bars: a 4h bar whose range (high − low) exceeds 8 × ATR14 of the prior bar (the A2.3 crash test the broker uses); a crash month is a (symbol, calendar month) with a crash bar closing inside the window.
- falling markets: Calendar quarters cut to the window; a quarter is falling when the equal-weight price return of the set's coins over it (mean of close(end) / close(start) − 1) is negative. Positions belong to the quarter of their exit.

## 10. What the export guarantees, and how to check it

The exporter refuses to write, and the lab's tests fail, unless all of these hold:

1. The stage is `final` exactly when `results` is set and the gate was evaluated; `mode` is what the evidence resolves to.
2. `licensedClaim` is set only in proven mode. Running the published `gate.mjs` on inputs rebuilt from `summary.json` returns exactly `gate.pass` and `gate.reasons`.
3. The gate was committed before FINAL started, and every amendment predates FINAL.
4. The universe is 10 + 10 symbols, disjoint, in protocol order everywhere; windows and costs equal the tables in `PROTOCOL.md`.
5. For every set × cost × edition: the win, loss and flat counts add up to positions; net R = gross win R + gross loss R; the aggregate positions, net R and cost R are the sums over symbols; symbols profitable counts the symbols above 0; `combined` = Set A + Set B.
6. The yearly net R sums to the aggregate; years are contiguous, and the first and last are flagged partial when the window cuts them.
7. Every curve's last point is its `finalR` bit for bit, and `finalR` equals the metrics' net R within 1e-6; times ascend inside the set's window; no series has more than 240 points.
8. configsTried ≥ the family total ≥ candidates frozen, and at most 3 candidates were frozen.
9. Every file's sha256 and size match `MANIFEST.json` and `downloads`; no file except the byte-pinned `PROTOCOL.md` holds a local path or an internal name, the pinned lines that do are all disclosed, and no file holds an email address or account id.
10. `cells.csv` matches `summary.json` value for value, and `trades.csv` re-sums to every per-symbol net R, cost R and position count.
11. The corrections: every post-FINAL correction is dated on or after the FINAL run and states what changed, why, the old value and the new one. Each drift-only null satisfies net R = drift R + timing R − cost R on the scoreboard's positions; the constant-exposure costs add up; the head-to-head numbers are the scoreboard's; no key keeps the old "capital-matched" name; and while the mode is research, the licensed sentence appears in no file but `gate.mjs`.

Check it yourself: (1) hash every file and compare with `MANIFEST.json`; (2) sum `net_r` in `trades.csv` by set, edition, cost and symbol and compare with `cells.csv` and `summary.json`; (3) import `gate.mjs`, call `passesPromotionGate(pro, free, freeLong)` with the REAL aggregates of both sets (net R, profit factor, positions, max closed drawdown, symbols profitable, symbols total; `stressNetR` = Set A STRESS + Set B STRESS net R; `freeLong` from `benchmarks.freeLongOnly`) and compare with `gate.reasons`.

## 11. Engine parity

Status PASS: 914 of 914 trades on 16 sources. Drift Free 1.3.1 in this lab's engine against TradingView Strategy Tester trade lists on the same Binance bars, under TradingView's default costs (0.04% commission, 1 tick). Sources: 6 captured for this lab (BTC, ETH and XRP at 1h; BTC and ETH at 4h; BTC at 15m) and 10 earlier ProEA Lab captures (BTC and ETH at 15m, 1h and 4h). All 914 native trades were matched on direction and entry time and were exact on every field (exit time and signal, prices, quantity, commission, profit). maxNetProfitDiffPct is the largest |engine − native| net profit of a source as a percent of its native net profit. The record was made on 2026-09-23; the lab's test suite re-runs the same comparison against the current engine before every lab commit, the export's included. Scope: parity covers Drift Free 1.3.1 only. Drift Premium has no Pine build yet, so its figures, including the TV-cost column, are engine figures without a TradingView check.

## 12. Disclosures

- A6.1: The DEV neighbour rule drops a survivor whose immediate numeric neighbours all fail the screen. We read it so that a rule with no numeric parameter (long-only) has no neighbour, and the Free base is the control rather than a neighbour. This reading was applied after DEV results were known and ratified after VAL.
- A6.4: Two neighbour configurations of the partial-exit rule (XHk2.5 and XHk4) were added after DEV results were seen, only to test that rule's fragility; neither was promoted.
- A6.4: Build-phase probes read Set B, VAL and HOLDOUT-T prices for tick geometry and crash-bar counts; they computed no profit or loss.
- A6.4: The causality test receipts of the RD, RE and RL rules are synthetic. The chosen candidate's in-run causality gate passed on real data: 10 of 10 symbols at DEV, 10 of 10 at VAL, and 80 of 80 symbol runs in the 8 FINAL runs of C1.
- Counts: before FINAL 36 distinct configurations, 39 configuration × stage pairs, 39 evaluations, 40 runs; after FINAL 36, 42, 63 and 64, with 0 failed.
- Reconciliation (`disclosures.search.reconciliation`): 33 pre-registered DEV-GRID configurations + 2 neighbour probes of XH 4h added after the DEV results (XHk2.5 4h and XHk4 4h; neither promoted) + 1 combination (C1 4h) = 36 distinct configurations; configuration × stage pairs: 39 before FINAL (DEV 36, VAL 3) and 42 after (FINAL 3); evaluations: 39 before FINAL and 63 after; runs: 40 before FINAL and 64 after, one more than the evaluations because RL 4h's DEV evaluation was run a second time (on the frozen code as candidate C3's DEV record, with the same evaluation hash and identical trades).
- Overlap (PROTOCOL v1): Before this protocol, earlier ProEA Lab research inspected Drift Free and variants on BTC and ETH (15m and 1h) during January to September 2026, which overlaps HOLDOUT-T for those two symbols. None of this lab's candidates were evaluated there.
- Overlap (A2.1): Earlier ProEA Lab research also measured BTC and ETH at 4h with entries from 2025-02-01 to 2025-12-31, overlapping VAL and HOLDOUT-T for BTC and ETH. Set A is therefore reported with and without BTC and ETH, and Set B is the primary untouched evidence.
- Overlap (A4.6): Engine parity work printed Drift Free 1.3.1 (not Premium) results on windows overlapping VAL and HOLDOUT-T: BTC, ETH and XRP at 1h (2026-03 to 2026-09), BTC and ETH at 4h (2024-09 to 2026-09) and BTC at 15m (2026-08). Apart from the protocol's own VAL step (the two frozen candidates on Set A), no Premium variant was evaluated on VAL, HOLDOUT-T or Set B data before FINAL.
- Re-pin (A6.5): FINAL ran on code whose every file frozen for the chosen candidate (35 files) and for the long-only candidate (24 files, which contain Drift Free's 23) is byte-identical to the frozen hashes. The only source change since the freeze is the promotion gate. The engine's VAL unlock was re-pinned to the new code hash; no VAL run was made after it.
- FINAL runner: FINAL ran once per evaluation that the protocol and amendments A1–A6 set before it (Drift Free long-only's by A6, after VAL): 24 evaluations (3 configurations × 2 sets × REAL, STRESS, TV and REAL with the crash-fill stress), through a runner pinned by sha256 before any FINAL result. It composes the frozen harness functions unchanged and differs from the research harness only in its stage guard, the Set B universe, the FINAL windows and a run-once rule. All 24 completed at the first attempt; none was repeated.
- Reading set before FINAL: The crash-fill stress runs under REAL costs for all three configurations on both sets, which gives 24 evaluations.
- Reading set before FINAL: The data end is the close of the last complete 4h bar, 2026-09-23T12:00:00Z, common to all 20 symbols.
- Reading set before FINAL: The margin split needs a fourth term, Free long entries Premium did not take; it is reported, and it is zero against Drift Free in both sets.
- Reading set before FINAL: The holding benchmark A6.3 asks for (the return and drawdown of holding the same planned notional) follows two definitions: the edition's average deployed capital, and equal weight. The first was implemented as buying D / P0 units and holding them, which does not hold D; after FINAL it was renamed and a constant-exposure benchmark was added (postFinalCorrections PFC-2).
- TradingView metadata: TV-cost runs use TradingView's tick and lot sizes per symbol. For the 3 symbols with Strategy Tester captures (BTC, ETH, XRP) they are confirmed by native trades; for the other 17 they come from metadata-only reads, with no Strategy Tester trades behind them.
- Parity scope: Engine-to-TradingView parity is established for Drift Free 1.3.1. Drift Premium has no Pine build yet, so none of its figures, including the TV-cost ones, has a TradingView Strategy Tester check.
- Test fix after the FINAL unlock: After the FINAL unlock was committed, one lab test that asserted "FINAL is locked" against the repository's freeze directory failed, because the engine then admitted its synthetic in-memory run (no record was written and no lab data was involved). The test now uses an empty freeze directory. No FINAL evaluation was repeated, re-selected or tuned.
- Pinned files: PROTOCOL.md and gate.mjs are published byte for byte, because their sha256 is the record of what was set before FINAL (disclosures.amendments and disclosures.gateTiming give when each part was written). The pinned PROTOCOL.md therefore still contains local folder paths (lines 14 and 139), a relative path into the earlier research's folder (line 123) and internal names (lines 43, 120, 121 and 122); every other published file is free of local paths and internal names. (PROTOCOL.md line 14: local path; PROTOCOL.md line 43: internal name; PROTOCOL.md line 120: internal name; PROTOCOL.md line 121: internal name; PROTOCOL.md line 122: internal name; PROTOCOL.md line 123: internal path; PROTOCOL.md line 139: local path).
- Evidence history: This version holds the same 24 FINAL records, gate verdict, protocol and gate as 2026-09-24-final. After FINAL, on 2026-09-24, analysis definitions and wording were corrected; postFinalCorrections lists each change. 2026-09-24-final, the first export, is kept unchanged in the lab's history and is not published; every analysis correction since then is listed in postFinalCorrections with its old and new value, and every later revision in revisions. Its MANIFEST.json has sha256 e63fb6ed9adae274d8ee1bc6c85380e17186ada37ed00b23a4b62472a315c5f2, so its bytes can be verified if it is ever released.

### Post-FINAL corrections (2026-09-24)

- **PFC-1** (critical, 2026-09-24) Drift-only null (the timing term). The drift-only null that amendment A6 added after VAL is kept and labelled as A6's definition, which is flawed. Two corrected nulls are added, each with the same week-block bootstrap: the arithmetic-mean null (the same formula with the mean 4h return) and a random-entry null with the same holding durations (the exact expected return of entries drawn uniformly from the window, with no distributional assumption).
  - Why: The drift-only null of A6 priced each position at the geometric-mean 4h return. For a position of fixed size, the expected gain from random long exposure follows the arithmetic mean, which exceeds the geometric mean by about half the variance per bar (4h volatility 2.1%–2.8% on Set B). The null therefore understated what random long exposure earns and counted the difference as timing.
  - Old: Premium timing: Set B +244.08R, P(timing ≤ 0) = 0.060; Set A +109.71R, P = 0.075 (geometric mean).
  - New: Premium timing, with the share of resamples at or below zero: Set B −14.45R (0.556) with the arithmetic mean and −18.46R (0.566) with random entries; Set A +81.89R (0.145) and +83.78R (0.139). On Set B, long exposure alone earns +310.23R to +314.24R before costs, against Premium's +295.78R before costs.
- **PFC-2** (major, 2026-09-24) The benchmark "with the same average capital". The benchmark amendment A6 asked for, written after VAL, is kept and renamed accurately: "buy D/P0 units and hold". Its time-average capital is reported. A capital-matched benchmark is added: constant long exposure of D, the edition's average deployed capital, held at every 4h close, with REAL costs on every fill that keeps it there (entry, the rebalancing after each close, exit).
  - Why: The benchmark buys D/P0 units once and lets them appreciate, so it does not hold the same average capital: on Set B its time-average capital was 9.90 × Premium's (1.10 × on Set A).
  - Old: "Capital-matched buy-and-hold": Set B +724.96R (mark-to-market drawdown 3103.47R); Set A +8.42R.
  - New: Buy D/P0 units and hold: unchanged. Constant long exposure of D: Set B +299.09R after costs (mark-to-market drawdown 93.54R), against Premium's +197.60R (177.77R); Set A +24.90R (81.14R), against +66.77R (103.60R). Counting only the entry and exit fills it would be +308.80R and +26.99R; the rebalancing at every 4h close costs 9.71R and 2.09R.
- **PFC-3** (major, 2026-09-24) The headline. The FINAL report's headline is replaced. The new one states that the gate failed and that Premium is long-only, that its profit on the untouched coins is explained by long exposure, and how it compares with Drift Free long-only and with constant long exposure.
  - Why: The old headline compared Premium with Drift Free trading both directions, its weakest comparator, and presented Set A as a win "in the falling holdout". Premium lost −74.85R in Set A's falling quarters and made 94.5% of its Set A profit in one rising month.
  - Old: Long-only Drift Premium failed its promotion gate on data it never saw: it made +66.8R on Set A's holdout months and +197.6R on Set B's ten untouched coins (Drift Free: +10.5R and −152.3R), but its profit factor (1.16 and 1.12) missed the pre-registered 1.2 bar, and it beat holding the same coins with the same average capital only in the falling holdout (+8.4R), making far less than that buy-and-hold on the untouched coins (+725.0R, with much deeper drawdowns).
  - New: Long-only Drift Premium failed the promotion gate we set after validation and before its final test (profit factor 1.16 on Set A's holdout months and 1.12 on Set B's ten untouched coins, against 1.20), and its +197.6R on the untouched coins is explained by long exposure in rising markets, not timing (timing −14.4R and −18.5R under the two corrected nulls): Drift Free taking only long signals made about as much (+170.7R), and holding Premium's average capital long at constant size made more (+299.1R after costs).
- **PFC-4** (major, 2026-09-24) Concentration by month. Stated in prose. The methodology's "where the result is weak" now includes leave-one-month-out and top-5 trimming.
  - Why: The robustness table amendment A6 asked for held these numbers, but no sentence said that one month carried Set A and three months carried Set B.
  - Old: Not stated in prose.
  - New: Set A: +63.13R of Premium's +66.77R (94.5%) exited in 2025-07; without that month, +3.64R (PF 1.009). Set B: 2021-01, 2024-11, 2026-08 gave +191.21R of +197.60R, and the other 78 months +6.38R. Without the five largest positions: +13.88R (Set A, PF 1.034) and +71.66R (Set B, PF 1.045).
- **PFC-5** (major, 2026-09-24) What the FINAL shows, and the licensed-claim wording. The list headed "Shown" is relabelled into what is resolved and what is not, by the week-block bootstrap. The sentence saying the licensed claim's literal words hold is withdrawn: an unlicensed claim is not described as true.
  - Why: Point estimates with a share of resamples at or below zero of 0.258 and 0.439 were listed as shown.
  - Old: "Shown: On untouched data, Premium (long-only C1) made more net R than Drift Free in both sets, stayed positive under STRESS costs, and beat Free long-only on Set B." and "Its literal words hold in both sets".
  - New: Resolved at 95%: none of Premium's net R, margins or timing terms. Closest: Premium − Drift Free on Set B, share of resamples at or below zero: 0.032, and 57.9% of that margin is Drift Free's shorts, which Drift Free long-only also avoids. Unresolved point estimates, with the same share: Premium − Drift Free on Set A (0.258); Premium − Drift Free long-only (A 0.295, B 0.439); Premium net R (A 0.199, B 0.108).
- **PFC-6** (minor, 2026-09-24) TV-cost figures. Drift Premium has no Pine build, so no Strategy Tester can show its figures. Its TV-cost numbers are engine figures; only Drift Free 1.3.1 has engine-to-Strategy-Tester parity.
  - Why: The FINAL report headed its TV section "what a Strategy Tester user would see", which implied a user could see Premium's TV figures.
  - Old: "TV costs (A3: what a Strategy Tester user would see)".
  - New: "TV costs: engine figures; Premium has no Pine build, so no Strategy Tester shows them".
- **PFC-7** (minor, 2026-09-24) Size of the search. The selection-bias caveat names the earlier research that shaped this lab's grid.
  - Why: "Evaluated in all" counted only this lab's evaluations.
  - Old: "42 configuration × stage pairs (36 distinct configurations) were evaluated in all".
  - New: 42 configuration × stage pairs (36 distinct configurations) in this lab. Before it, earlier ProEA Lab research tried 31 recipes on BTC and ETH and measured three 4h candidates; that work shaped this lab's hypotheses and grid.
- **PFC-8** (minor, 2026-09-24) Lines of the byte-pinned PROTOCOL.md that name internal paths or names. Lines 122 and 123 are added to the disclosure: the earlier research's internal candidate labels and a relative path into its folder.
  - Why: The detector looked for absolute paths and a list of internal names; it missed a relative path and the earlier research's labels.
  - Old: Lines 14, 43, 120, 121 and 139 ("two lab-internal folder paths").
  - New: Lines 14, 43, 120, 121, 122, 123 and 139: two absolute local paths (14, 139), one relative path into the earlier research folder (123), and internal names on 43, 120, 121 and 122.
- **PFC-9** (minor, 2026-09-24) What the "buy D/P0 units and hold" benchmark held. The FINAL report said the benchmark "held a fixed 574–662 USDT of the coin throughout". It held a fixed number of coins (D/P0 units), and their value moved with the price.
  - Why: The description contradicted the benchmark's definition.
  - Old: "held a fixed 574–662 USDT of the coin throughout".
  - New: "held a fixed number of coins, bought for 574–662 USDT at the window start".
- **PFC-10** (minor, 2026-09-24) Curve final points. The last point of a published curve is not rounded and equals finalR, the full-precision sum in exit order. finalR equals the scoreboard's net R to floating-point precision, not bit for bit.
  - Why: The methodology said every curve ends "exactly" at the metrics' net R.
  - Old: "the final point, which is exact and equals finalR"; "Every curve ends exactly at its finalR, which equals the metrics' net R".
  - New: The final point equals finalR bit for bit. finalR matches net R within 1.0e-12 R (the export's check allows 1e-6).
- **PFC-11** (minor, 2026-09-24) Size of the FINAL records. Corrected.
  - Why: The FINAL report gave the trades files' size as the size of all 48 files.
  - Old: "27 MB" for the 24 result files and 24 trades files.
  - New: 29.0 MB (27.7 MiB): trades files 27.6 MB, result files 1.4 MB.
- **PFC-12** (minor, 2026-09-24) An in-place edit of PROTOCOL.md. Disclosed in the corrected report: commit cdda29a edited line 159 of PROTOCOL.md in place. Amendment A4.6 gained the cross-reference "(see A5 for the gate)". The public export already disclosed it.
  - Why: PROTOCOL.md says amendments are appended and nothing above them is edited; the FINAL report did not mention this edit.
  - Old: Not disclosed in the FINAL report.
  - New: Disclosed.
- **PFC-13** (major, 2026-09-24) When the promotion gate was set. The one-sentence summary and several other texts overstated how early the promotion gate, and what amendments A5 and A6 added, were set. They now say when: the gate, with its 1.2 bar, after VAL had run and before FINAL (A5, with its Set B condition from A6); the drift-only null, the benchmark of buying D/P0 units, the robustness table and Drift Free long-only's FINAL evaluations in A6, also after VAL and before FINAL. Only protocol v1, amendments A1–A4 and the DEV grid were pre-registered before any Premium result, and only they are described so.
  - Why: The gate was committed after VAL had run and after the VAL choice was committed (disclosures.gateTiming: gateCommittedAfterVal is true); its Set B condition against Drift Free long-only was added after the founder saw the VAL robustness audit, in the stricter direction only (A6.2); and A6, which added the drift-only null, the benchmark and the robustness table, was written after VAL too. Describing any of them as set before the results were known overstated the protocol.
  - Old: The summary sentence: "Long-only Drift Premium failed its pre-registered promotion gate (…)". Elsewhere: "the pre-registered 1.2", "The pre-registered drift-only null", "pre-registered definition, flawed; kept as pre-registered", "The pre-registered null", "The pre-registered benchmark", "The pre-registered robustness table", "FINAL ran once per pre-registered evaluation", "their sha256 is the pre-registration record" and "The pre-registered protocol with its amendments A1–A6".
  - New: The summary sentence says Long-only Drift Premium "failed the promotion gate we set after validation and before its final test". Every other text names the amendment that set what it describes, A5 or A6, both written after VAL and before FINAL.
- **PFC-14** (minor, 2026-09-24) The luck test, as a share of resamples. Each luck-test number is now written as the share of the week-block bootstrap's resamples at or below zero, in place of the letter P, with the same value; the three bootstrap definitions name that share the same way.
  - Why: The number counts resamples: it is the share of the bootstrap's resamples that end at or below zero. Written with the letter P it reads as a statement about the strategy itself, which a count of resamples does not make; the house wording rules write it as a share of resamples.
  - Old: Premium timing: "Set B −14.45R (P = 0.556)"; "Premium − Drift Free on Set B, P(≤ 0) = 0.032"; "P(margin ≤ 0) = 0.439"; "Point estimates with P(≤ 0) of 0.258 and 0.439"; methodology.md's table: "P(≤ 0) = 0.295"; the bootstrap definitions: "P(timing sum ≤ 0)".
  - New: Premium timing, "with the share of resamples at or below zero: Set B −14.45R (0.556)"; "Premium − Drift Free on Set B, share of resamples at or below zero: 0.032"; "share of resamples with the margin at or below zero: 0.439"; "a share of resamples at or below zero of 0.258 and 0.439"; methodology.md's table: "share of resamples at or below zero: 0.295"; the bootstrap definitions: "the share of resamples whose timing sum is at or below zero".
- **PFC-15** (minor, 2026-09-24) The benchmarks, named by what they are. Current text no longer uses the label the FINAL report used for its holding benchmark: each benchmark is named by what it is. Constant long exposure is the comparison that holds the same average capital; the equal-weight price return of a set's coins gives the market's direction; "buy D/P0 units and hold" buys the coins once; and A6 asked for a benchmark of holding the same planned notional. The old values keep the label as recorded.
  - Why: The house wording rules allow that label in no spelling in the site's own text. It reads as holding the same capital as the edition, which buying D/P0 units once does not do (PFC-2); constant long exposure does.
  - Old: PFC-2's item: Buy-and-hold "with the same average capital"; PFC-9's item: What the buy-and-hold benchmark held; the month and quarter definitions: the set's equal-weight buy-and-hold return; a reading fixed before FINAL: The buy-and-hold benchmark follows two definitions; A6's summary: Free long-only, buy-and-hold, a drift-only null; methodology.md: Equal-weight buy-and-hold returned, and buy-and-hold, perSymbol.
  - New: PFC-2 is headed The benchmark "with the same average capital", and PFC-9 What the "buy D/P0 units and hold" benchmark held. The month and quarter definitions use the equal-weight price return of the set's coins; a reading set before FINAL and A6's summary name a benchmark of holding the same planned notional; methodology.md speaks of the coins' equal-weight price return and heads the definitions "holding benchmarks".
- **PFC-16** (minor, 2026-09-24) Comparative words. The remaining comparative words outside the strings gate.mjs produces now state the comparison they made. A6's summary says Premium net R must also exceed that of Drift Free taking only long signals, as A6.2 does; the by-cost definition says that leaving out the rebalancing fills puts its values above premium.netR; and methodology.md says what the site may not claim, names the win, loss and flat counts, and says the benchmark ends higher without the rebalancing fills.
  - Why: The house wording rules allow no comparative praise in the text the site renders. Each sentence keeps its numbers and its meaning.
  - Old: A6's summary: "Premium must also beat Drift Free taking only long signals"; the by-cost definition: "makes this benchmark stronger than premium.netR"; methodology.md: "may not say that Drift Premium is more profitable than Drift Free", "wins + losses + flat = positions" and "the benchmark is stronger".
  - New: A6's summary: "Premium net R must also exceed that of Drift Free taking only long signals"; the by-cost definition: "puts these values above premium.netR"; methodology.md: "may not make the comparative claim that the gate licenses only on a pass", "the win, loss and flat counts add up to positions" and "the benchmark ends higher".
- **PFC-17** (minor, 2026-09-24) Earlier versions, described as never published. Four texts described earlier versions of this export as public. The r3 entry of the evidence history said 2026-09-24-final-r2 was still available as written; the evidence history's first sentence, and the r4 entry's record of it, said this version made the FINAL records public; methodology.md's first line gave the time in publishedAt as the time of publication; and §14 said no public value of 2026-09-24-final-r2 changed. They now say that 2026-09-24-final-r2 is kept unchanged in the lab's history, was never published and is listed on the site by its MANIFEST.json sha256 only; that this version holds the same FINAL records; that publishedAt, a field name the v2 core keeps, holds the time of the lab commit 2026-09-24-final-r2 was built from, not a publication time; and that no existing value changed.
  - Why: None of these versions was ever published: 2026-09-24-final-r2, 2026-09-24-final-r3, 2026-09-24-final-r4 and 2026-09-24-final-r5 were served only on unmerged preview deployments, never in production, and the site serves only the current export and lists earlier ones by their MANIFEST.json sha256 only. publishedAt keeps the v2 core's field name, and its value is a build time.
  - Old: The r3 entry of the evidence history: "2026-09-24-final-r2 stays published exactly as written."; the evidence history and the r4 entry's record of it: "This version publishes the same 24 FINAL records"; methodology.md's first line: "published 2026-09-24T03:40:18Z by ProEA Lab"; §14: "table or published value changed".
  - New: The r3 entry says 2026-09-24-final-r2 is kept unchanged in the lab's history, was never published and is listed on the site by its MANIFEST.json sha256 only; the evidence history says this version holds the same 24 FINAL records; methodology.md's first line says this version was not published at build time and that publishedAt holds the time of the lab commit 2026-09-24-final-r2 was built from, not a publication time; §14 says no existing value changed.
- **PFC-18** (minor, 2026-09-24) The word for when the gate was written. Texts said when the promotion gate, what amendments A5 and A6 added and the readings before FINAL were written with a word that can also mean repaired: the summary sentence, the new values of PFC-3, PFC-13 and PFC-15, PFC-13's heading, what, why and record of its edits, the FINAL runner, the pinned files, the r5 entry of the evidence history, and methodology.md's Profit factor bullet, disclosures extension, readings and section 15. They now say set. The same word for a constant amount or size, and the lab test repaired after the FINAL unlock, are unchanged.
  - Why: These texts state when the gate and the amendments were written, after VAL and before FINAL (disclosures.gateTiming); none of them was repaired. Set says only when.
  - Old: The summary sentence and PFC-3: "failed the promotion gate we fixed after validation and before its final test"; PFC-13: "When the promotion gate was fixed", "were fixed", "as fixed before the results were known" and "the amendment that fixed what it describes"; the FINAL runner: "that the protocol and amendments A1–A6 fixed before it"; the pinned files: "the record of what was fixed before FINAL"; the r5 entry: "when the promotion gate was fixed" and "were fixed (after VAL, before FINAL)"; PFC-15 and methodology.md: "a reading fixed before FINAL", "readings fixed before FINAL", "Reading fixed before FINAL", "which amendment A5 fixed after VAL" and "When the gate was fixed".
  - New: The summary sentence and PFC-3 say Long-only Drift Premium "failed the promotion gate we set after validation and before its final test"; PFC-13 is headed When the promotion gate was set; the FINAL runner, the pinned files, PFC-15, the r5 entry and methodology.md say set.

## 13. Caveats

- These are post-FINAL analysis corrections dated 2026-09-24: the FINAL runs, the gate verdict and the protocol are unchanged. The first export, 2026-09-24-final, is kept unchanged in the lab's history and is not published (its MANIFEST.json has sha256 e63fb6ed9adae274d8ee1bc6c85380e17186ada37ed00b23a4b62472a315c5f2); disclosures.postFinalCorrections lists every analysis correction since then with its old and new value.
- These are hypothetical backtests on historical Binance spot data. No live trading record is implied.
- Survivorship: all 20 pairs were chosen among Binance spot pairs still trading in 2026, so pairs delisted earlier are not represented.
- BTC and ETH were examined in earlier ProEA Lab research during parts of VAL and HOLDOUT-T, so Set A is also reported without them, and Set B is the primary untouched evidence.
- Funding and borrow costs are not modelled.
- Prices are Binance spot klines. A chart on another exchange or data feed can show different bars and so different trades.
- Engine-to-TradingView parity is established for Drift Free 1.3.1 only. Drift Premium has no Pine build yet, so no Strategy Tester shows its figures; its figures, the TV-cost ones included, are engine figures.
- Selection bias: 42 configuration × stage pairs (36 distinct configurations) were evaluated in this lab, and configs-ledger.csv lists every one. Before it, earlier ProEA Lab research tried 31 recipes on BTC and ETH and measured three 4h candidates; that work shaped this lab's hypotheses and grid.
- The promotion gate and amendments A5 and A6 were written after VAL had run, before FINAL.
- The chosen candidate survived the DEV screen only under the neighbour-rule reading ratified in A6.1.
- Premium's profit on the untouched coins is explained by long exposure. The drift-only null that amendment A6 added after VAL used the geometric mean and showed a timing term of +244.08R on Set B; with the arithmetic mean or random entries of the same durations the timing term is −14.45R or −18.46R.
- Drift Free taking only long signals made +170.73R on Set B against Premium's +197.60R (share of resamples with the margin at or below zero: 0.439), and constant long exposure of Premium's average capital made +299.09R after costs.
- Concentration: 94.5% of Premium's Set A net R came from positions exiting in 2025-07; on Set B its three largest months gave +191.21R of +197.60R.
- No Premium net R interval of the week-block bootstrap excludes zero; the margins over Drift Free long-only are not statistically resolved.
- Premium is long-only: it lost money in the falling quarters of both sets and made it in the rising ones.

## 14. Curves added in `2026-09-24-final-r3`

`2026-09-24-final-r3` is `2026-09-24-final-r2` plus curves, for charts that set Premium beside Drift Free long-only and constant long exposure. No FINAL record, gate verdict, protocol, table or existing value changed (`disclosures.evidenceHistory.revisions`). Each curves file keeps the 44 series of §8 byte for byte and adds 44 after them, in protocol order: per set, its symbols and then `ALL`, each with two editions.

- `freeLongOnly`: Drift Free long-only (RL 4h), the FINAL runs of `benchmarks.freeLongOnly`, drawn exactly as `free` and `premium`: cumulative closed-trade net R at exit time, the file's `basis`. Its `finalR` matches `benchmarks.freeLongOnly.sets.<set>.aggregate.<cost>.netR` (`ALL`) or `perSymbol[].metrics.<cost>.netR` within 1e-6.
- `constantLongExposure`: constant long exposure of Premium's average capital. Its basis differs, so each of these series states it in its own `basis`: the mark-to-market net R, at every 4h close, of a constant notional D per coin (D = `benchmarks.constantLongExposure.sets.<set>.premium.perSymbol[].deployedUsdt`, Premium's average capital deployed on the coin, the same under every cost model), rebalanced to D after each close without cost, with the file's cost model charged on the first entry and the last exit only. A symbol's points are its closes after the window start, the entry cost counted from the first; `ALL` sums the symbols at every close, each carried over its missing bars. Its `finalR` matches `benchmarks.constantLongExposure.sets.<set>.byCost.<cost>.entryExitCostsOnlyNetR` (`ALL`) or `byCost.<cost>.perSymbol[]` within 1e-6; `benchmarks.constantLongExposure.byCostDefinition` states the costs of each model.
- Without the rebalancing fills the benchmark ends higher: under REAL it ends at `entryExitCostsOnlyNetR`, above the after-costs `netR` that `headToHead` compares with Premium (Set B: +308.80 against +299.09; STRESS +308.70, TV +308.74).
- On one chart the lines end at comparable values, because every position is closed by the data end. Their paths differ in basis: a closed-trade curve moves only when positions close, so its dips are shallower than a mark-to-market curve's. `headToHead` compares drawdowns on one basis (`maxDrawdownRMarkToMarket`).
- A series without a `basis` of its own has the file's. Downsampling, rounding and the checks are those of §8 and §10: at most 240 points, the last point equal to `finalR` bit for bit, times ascending inside the set's window.

## 15. Wording corrections in `2026-09-24-final-r5`

`2026-09-24-final-r5` is `2026-09-24-final-r4` with wording-only corrections, `disclosures.postFinalCorrections` PFC-13 to PFC-16. No FINAL number, record, gate verdict, gate reason, protocol or curve series changed; only wording did, and with it the hashes and sizes of the files that hold it and the count of corrections in §1. Each of these corrections lists every edit in `changes` with its old and new text, and the r5 entry of `disclosures.evidenceHistory.revisions` lists the `summary.json` paths they touched (`rewordedPaths`). Wherever this file printed one of those texts, it prints the new one.

- **When the gate was set (PFC-13).** The promotion gate was committed after VAL had run and after the VAL choice, and before FINAL (`gateCommittedAfterVal: true`); its Set B condition against Drift Free long-only was added after the founder saw the VAL robustness audit (A6.2). The drift-only null, the benchmark of buying D/P0 units, the robustness table and Drift Free long-only's FINAL evaluations come from A6, also written after VAL. Protocol v1, amendments A1–A4 and the DEV grid were pre-registered before any Premium result.
- **The luck test (PFC-14).** Each number of the week-block bootstrap is the share of resamples at or below zero, with the value it had.
- **The benchmarks' names (PFC-15).** Constant long exposure is the comparison that holds Premium's average capital; the equal-weight price return of a set's coins gives the market's direction; "buy D/P0 units and hold" buys the coins once.
- **Comparative words (PFC-16).** Each sentence states the comparison it makes, with the same numbers.
- **`2026-09-24-final-r4`** was superseded before any production publication: it was served only on unmerged preview deployments. Its `MANIFEST.json` has sha256 `4ebc2ea0ea4b17a5393f70196b2f755e29397d46bff76f2f517cd9177bce1312`, so its bytes can be verified.

## 16. Wording corrections in `2026-09-24-final-r6`

`2026-09-24-final-r6` is `2026-09-24-final-r5` with wording-only corrections, `disclosures.postFinalCorrections` PFC-17 and PFC-18. No FINAL number, record, gate verdict, gate reason, protocol or curve series changed; only wording did, and with it the hashes and sizes of the files that hold it and the count of corrections in §1. Each of these corrections lists every edit in `changes` with its old and new text, and the r6 entry of `disclosures.evidenceHistory.revisions` lists the `summary.json` paths they touched (`rewordedPaths`). Wherever this file printed one of those texts, it prints the new one.

- **Earlier versions (PFC-17).** `2026-09-24-final-r2`, `2026-09-24-final-r3` and `2026-09-24-final-r4` are kept unchanged in the lab's history, were never published and are listed on the site by their `MANIFEST.json` sha256 only: `18a6e6a79b98a90857dc2063399be4ed5688f74b793c78ebfc7336166621f4cd`, `5c9742dd2c6e8ac78986364bf527ed338a8e9099bac7bf4e90c9b1cdb744a131` and `4ebc2ea0ea4b17a5393f70196b2f755e29397d46bff76f2f517cd9177bce1312`. This version holds the FINAL records, and `publishedAt` holds the time of the lab commit `2026-09-24-final-r2` was built from, not a publication time.
- **When the gate was set (PFC-18).** The promotion gate, what amendments A5 and A6 added and the readings before FINAL are said to be set after VAL and before FINAL; the word for a constant amount or size is unchanged.
- **`2026-09-24-final-r5`** was superseded before any publication: it was served only on unmerged preview deployments. Its `MANIFEST.json` has sha256 `cb6cd7c1b3dc126e4fbc3a87c165195833aa622574a715f96e9eeada2830cd7e`, so its bytes can be verified.
