# Systematic Trading Validation Experiment Ledger

Contract freeze time: `2026-07-29T10:39:32Z`

Research repository SHA: `6661ed375d976bcf35ad73568cf89131b1cb7232`

This ledger is append-only after the contract freeze. Corrections must be added as
dated amendments; do not rewrite a formula, threshold, window, or eligibility rule
after inspecting its result. A changed formula is a new hypothesis ID.

## Runtime inventory boundary

Production runs only on the remote host. The local repository, local example config,
and local data are not runtime truth.

| Runtime field | Frozen value |
|---|---|
| Declared production strategy | `VolatilityBreakoutRiskCap` |
| Declared strategy version | `5.4-d48-riskcap-forward` |
| Remote strategy source SHA-256 | `PENDING_REMOTE_INVENTORY` |
| Remote effective config SHA-256 | `PENDING_REMOTE_INVENTORY` |
| Remote container image ID/digest | `PENDING_REMOTE_INVENTORY` |
| Remote candle/data inventory and hashes | `PENDING_REMOTE_INVENTORY` |
| Remote backtest engine version | `PENDING_REMOTE_INVENTORY` |
| Remote baseline result artifacts | `PENDING_REMOTE_INVENTORY` |

No experiment may move beyond data-feasibility work until the remote inventory is
filled in and confirms the declared baseline. A mismatch is `INCONCLUSIVE`, not
permission to silently substitute local files or a different runtime.

## Frozen common protocol

| Field | Frozen value |
|---|---|
| Baseline | Remote runtime-verified RiskCap 5.4 |
| Timeframe | `5m` |
| Fee | `0.00035` per side |
| Starting wallet | `1000 USDT` |
| Leverage/margin | `2x isolated` |
| Maximum open trades | `4` |
| Protections | Identical to runtime-verified RiskCap 5.4 |
| Cache | None |
| Training/development window | `[2026-01-01T00:00:00Z, 2026-05-01T00:00:00Z)` |
| Historical retrospective window | `[2026-05-01T00:00:00Z, 2026-07-10T00:00:00Z)` |
| Historical-window interpretation | Development and retrospective evidence only; neither is a fresh held-out confirmation |
| Pair universe | The 12 frozen pairs listed below |

Frozen pair universe:

1. `BTC/USDT:USDT`
2. `ETH/USDT:USDT`
3. `SOL/USDT:USDT`
4. `BNB/USDT:USDT`
5. `XRP/USDT:USDT`
6. `DOGE/USDT:USDT`
7. `ADA/USDT:USDT`
8. `ZEC/USDT:USDT`
9. `EDGE/USDT:USDT`
10. `POWER/USDT:USDT`
11. `VANRY/USDT:USDT`
12. `UNI/USDT:USDT`

The remote inventory must confirm that this is the effective production/research
universe. If it does not, stop and append an amendment before any result is read.

## Fresh-forward definition

The fresh-forward clock does not start merely because this file exists. Its start is:

```text
fresh_forward_start =
  max(
    2026-07-29T10:39:32Z,
    remote_inventory_completed_at,
    paired_baseline_candidate_consistent_state_at
  )
```

`fresh_forward_start` must be written to this ledger before inspecting any subsequent
trade outcome. At that instant:

- baseline and candidate must have the same starting wallet and exposure snapshot;
- active positions and orders must either be identical or both sides must be flat;
- strategy/config/image/data identifiers must already be recorded;
- no pre-start signal, order, fill, carried-in position, or PnL may count as fresh
  forward evidence.

Current value: `PENDING_REMOTE_INVENTORY_AND_PAIRED_ACTIVATION`.

## Registered work

| ID | Kind | Frozen role | Formula status | Result status |
|---|---|---|---|---|
| `SESSION21-23-DIAGNOSTIC-V1` | Read-only diagnostic | Describe whether raw D48 signals eligible in `[21:00,23:00)` UTC differ from other UTC hours | Frozen | `NOT_RUN` |
| `D48-XSMOM-28D-V1` | Confirmatory one-factor candidate | Add one cross-sectional momentum entry gate to RiskCap 5.4 | Frozen | `NOT_RUN` |
| `D48-FUNDING-COVERAGE-V1` | Coverage-only audit | Determine whether three finalized 8h funding observations are causally and sufficiently available at raw signal time | Frozen; no trading rule registered | `NOT_RUN` |

### SESSION21-23-DIAGNOSTIC-V1

- Interval is exactly `[21:00:00, 23:00:00)` UTC: UTC hours 21 and 22.
- Cohort is all authentic raw D48 entry signals, not only trades, orders, or fills.
- Report all 24 UTC hours; do not show only the registered interval.
- Split raw signals from gate-passed, ordered, and filled cohorts.
- Report counts and denominators by pair, side, BTC regime, and UTC hour.
- This diagnostic cannot receive `PASS` and cannot authorize a strategy change.
- Any session rule suggested by the diagnostic requires a new ID and new unseen
  forward data. Moving the interval after looking at the table is prohibited.

### D48-XSMOM-28D-V1

The sole registered formula, tie rule, missing-data rule, eligibility rule, and gates
are in `hypothesis-contract.md`. No alternative lookback, bucket size, normalization,
or residualization belongs to this ID.

### D48-FUNDING-COVERAGE-V1

- This is not a funding alpha test and must not compare candidate PnL.
- At each authentic raw D48 entry-signal eligible timestamp, audit whether the pair has
  three consecutive finalized 8h funding observations whose settlement timestamps are
  less than or equal to the signal eligible timestamp.
- Report signal-weighted coverage overall and by pair, side, month, and regime.
- Coverage is adequate only if overall coverage is at least `98%`, every pair has at
  least `95%` coverage, and no missing record is silently forward-filled from a future
  settlement.
- Adequate coverage permits a separately registered funding hypothesis; it is not
  evidence that funding predicts returns.
- Failure of a coverage threshold is `INCONCLUSIVE` for funding alpha, not
  `REJECTED`.

## Status vocabulary

- `PASS`: every applicable evidence-adequacy, return, risk, robustness, and fresh
  forward gate in the frozen contract is satisfied.
- `REJECTED`: evidence is adequate and at least one frozen hard reject condition is
  met. Do not retune this ID.
- `INCONCLUSIVE`: runtime/data identity is unresolved, causal inputs are unavailable,
  the effective sample is below a frozen minimum, paths cannot be reconstructed, or
  evidence otherwise cannot adjudicate the hypothesis.

`NOT_RUN` and `RUNNING` are operational states, not conclusions. A missing or small
sample must never be coerced into `PASS` or `REJECTED`.

## Result append log

No results had been inspected or recorded at contract freeze.

## Amendment 1 — Stage 0–1 runtime evidence and contract closure

Amended at: `2026-07-29T10:47:49.309310Z`

This amendment was written after runtime/data feasibility inspection and baseline
reproduction, but before implementing or running an XSMOM candidate. No XSMOM
candidate PnL, rank cohort, or path result had been generated or inspected.

### Runtime inventory completed

The earlier `PENDING_REMOTE_INVENTORY` placeholders are resolved by this append-only
record:

| Runtime field | Verified value |
|---|---|
| Remote host | `VM-0-6-ubuntu` / `43.164.75.52` |
| Active strategy command | `--strategy VolatilityBreakoutRiskCap` |
| Effective config SHA-256 | `02e85f8393d3658812f9fbfcc12ec0320b568f8311c8e63457a8b0f9d94c2878` |
| `v5_d48.py` SHA-256 | `db884cc34cb2502676088b4c519397bcc06a37f24ea74ac0960e27d32bec9691` |
| `v5_d48_riskcap.py` SHA-256 | `0f1e7df8952cbfdd1d282ea50e1f4a6cb109a035d2503920c1a2d590e8a6d155` |
| `risk_cap_math.py` SHA-256 | `cd2a3c196818a89cd96055531220ecf078faf9658fc7736bf32c7da51b7c1dd9` |
| Compose SHA-256 | `5fb59ad4d254d7ffd508d566ea92df6142b6dc893f38a0280452daccb7442508` |
| Container image ID | `sha256:87aa5c6d65359b34e9d99a0bb260a38c0efe0315253811e6f48c2afe8f278a6a` |
| Engine | Freqtrade `2026.6`, Python `3.14.6`, CCXT `4.5.61` |
| Runtime inventory artifact SHA-256 | `7975359aa89a237302c7a4ea3c22675d725d05af71bfe5174edb3b643b5fbe47` |
| Production data manifest SHA-256 | `b68690e8db9e0dc9330df742a95115dd5412e72645cc6d62474e33b6ab652ecd` |
| Data-audit script SHA-256 | `169ba08a37c0df956c24a56a01d6f9aa00b2a5313c8d3d793ab32a51d9e5e2bd` |

The production-mounted data audit read all `12 × 4 = 48` expected Feather files:
48 readable, zero missing, zero duplicate timestamps, zero NaN cells, and zero
fixed-grid internal gaps within each file's observed boundaries. Boundary coverage is
not equivalent to signal-weighted XSMOM or funding coverage.

### Baseline reproduction

The exact command protocol is preserved in `baseline-protocol.md`. The original
Freqtrade archives remain on the remote research host. Local copies are sanitized:
the embedded effective config was removed because it contains credentials.

| Window | Trades | Net | PF | Max DD | Sanitized result SHA-256 |
|---|---:|---:|---:|---:|---|
| Training | 335 | `+16.69%` | `1.14` | `11.37%` | `dd7d93a01e0422b179d862459022bab4846b7113e0852ac1ae44aea76c339dcd` |
| Historical retrospective | 175 | `+11.68%` | `1.22` | `7.44%` | `49510feb85ac515ba3dd504662ee335af12de0c311a18c0fb531dec019ae7716` |

Both runs exactly reproduce the documented RiskCap numerical anchors. Both contain
zero long trades, so they provide historical evidence for the short gate only.

The training run actually starts at `2026-01-01T17:30:00Z`, because the available 5m
file begins at `2026-01-01T00:00:00Z` and Freqtrade consumes 210 startup candles.
It is a numerical anchor, not yet the formal paired baseline for the frozen
midnight-start window.

### Pre-candidate data remediation is frozen

Remediation A is selected. Before any XSMOM candidate PnL is run or inspected:

1. supplement authentic exchange 5m data sufficiently before
   `2026-01-01T00:00:00Z` to satisfy the 210-candle startup;
2. supplement authentic 1d data for exchange-tradable pairs through at least
   `2025-12-03T00:00:00Z`, so a January 1 signal can use completed endpoints
   `2025-12-31` and `2025-12-03`;
3. supplement funding/mark history far enough before the first possible raw signal
   to evaluate the last three finalized settlement events;
4. obtain and freeze authoritative exchange-tradability timestamps, especially for
   EDGE; never fabricate pre-listing candles;
5. regenerate the production-runtime manifest and hashes after supplementation;
6. run a raw-signal coverage audit before any candidate portfolio result.

The alternative of silently shortening the training window is rejected. If authentic
history cannot be obtained, this hypothesis is `INCONCLUSIVE`.

### Disposition rules close the frozen gray areas

For every stage:

- `stage_disposition` is `PASS`, `REJECTED`, or `INCONCLUSIVE`;
- once evidence is adequate, failure of any applicable hard pass condition is
  `REJECTED`, including an improvement smaller than the registered minimum effect;
- `INCONCLUSIVE` is reserved for unresolved identity, causal data, sample, path, or
  evidence-adequacy failures;
- `final_disposition` remains
  `INCONCLUSIVE_PENDING_FRESH_FORWARD` until fresh forward passes every applicable
  gate.

The `2026-05-01` to `2026-07-10` result must be called a
`historical retrospective consistency check`. It must not be described as held-out,
OOS-confirmed, or promotion-validating.

### Side evidence

Historical stages may only claim `short-side historical evidence`. A final symmetric
gate requires, in fresh forward, at least 10 changed raw signals and five completed
`PATH_DIVERGENCE` episodes for each of long and short. If only one side becomes
adequate, the symmetric hypothesis remains `INCONCLUSIVE`; a side-only rule requires
a new hypothesis ID.

### Mechanism, censoring, and concentration definitions

- Primary shadow horizon: 24h. Secondary diagnostic horizon: 6h.
- Direction-adjusted return is `close(t+h)/close(t)-1` for long and
  `1-close(t+h)/close(t)` for short.
- Mechanism support requires pass-cohort 24h mean direction-adjusted return to exceed
  blocked-cohort mean, pass median to be no lower than blocked median, and mean
  episode-level candidate-minus-baseline PnL to be positive. Results are also split
  by side. The 6h horizon cannot select or replace the primary horizon.
- An episode closed only by end-of-window `force_exit` is right-censored and does not
  count toward the completed-episode minimum. Both paths use the same boundary mark.
- The concentration pair is
  `argmax_pair(candidate_pair_pnl - baseline_pair_pnl)`, with canonical pair-string
  tie-breaking. Remove its arithmetic PnL contribution from both frozen paths; do not
  rerun a new universe.
- For the largest profitable candidate trade, remove its entire divergence episode
  from both paths. If it is a common non-divergent trade, remove the matched trade from
  both paths. Ties use entry time then canonical pair string.

### Funding-event wording

The coverage unit is the last three consecutive finalized exchange funding
settlement events, each with `settlement_time <= signal_eligible_time`, and with no
inter-event gap greater than 8h. Events need not be exactly 8h apart. The Feather
timestamp must first be shown to represent finalized settlement time rather than a
live predicted rate. Otherwise funding coverage is `INCONCLUSIVE`.

`remote_inventory_completed_at` is
`2026-07-29T10:47:49.309310Z`. `fresh_forward_start` remains
`PENDING_PAIRED_ACTIVATION`; inventory completion alone does not start the clock.

### Current Stage 0–1 disposition

| Item | Disposition |
|---|---|
| Runtime/config/strategy identity | `PASS` |
| Historical RiskCap numerical anchors | `PASS` |
| Data integrity within observed boundaries | `PASS` |
| Formal midnight-start paired baseline | `INCONCLUSIVE_DATA_WARMUP_REQUIRED` |
| XSMOM raw-signal coverage | `INCONCLUSIVE_NOT_RUN` |
| Funding signal-weighted coverage | `INCONCLUSIVE_NOT_RUN` |
| XSMOM candidate PnL | `NOT_RUN` |
| Historical retrospective candidate check | `NOT_RUN` |
| Fresh forward | `NOT_STARTED` |

## Amendment 2 — Warm-up remediation, formal baseline, and coverage disposition

Amended after coverage-only inspection, before any XSMOM candidate PnL:
`2026-07-29T11:08:00Z`.

### Remediation evidence

- Binance USDT-M `exchangeInfo` was captured from the official API. Source artifact
  SHA-256: `cba5e552c677de34095ddd05d5a91c90266d96eef6e228a6dc23084e6ea1cab9`.
- Frozen pair/listing mapping SHA-256:
  `0d939ba3a53d16d658640862c2dd6bf4726d634c3c60da0ce5c36037cf29e9dc`.
- Authentic history was prepended from `2025-12-01`; the original manifest remains
  preserved rather than overwritten.
- Post-prepend production manifest SHA-256:
  `774d43b4291eb1aea668016ba3738c8988bbb9bd8b00e41fea5b0755b30e375c`.
- A separate reference datadir was downloaded from Binance for the half-open frozen
  comparison window `[2025-12-01, 2026-07-10)`.
- Production versus reference comparison result: 48/48 pair/dataset comparisons are
  exact timestamp-and-value matches at zero tolerance. Comparison JSON SHA-256:
  `5f99a1cb37a4d2baab593817598d64983a51093daf7ce868b81bdb02968c40eb`.

The strict listing rule excludes a partial listing-day 1d candle. POWER's first full
UTC day is `2025-12-07`; EDGE's is `2026-03-20`. Intraday data is eligible only from
the exact official onboard timestamp.

### Formal paired baseline

With 210 pre-window 5m candles available, the formal training run begins exactly at
`2026-01-01T00:00:00Z`.

| Window | Trades | Net | PF | Max DD | Sanitized result SHA-256 |
|---|---:|---:|---:|---:|---|
| Formal training | 331 | `+13.02%` | `1.11` | `11.40%` | `1709c6f9a811bc2bc4e1347b8c04322f2ba5ab824dcc04fb6345980e9a2bc927` |
| Historical retrospective | 175 | `+11.68%` | `1.22` | `7.44%` | `a609813b20eed4d0b724f70f59ae72b9710eda8e3eba7040127ee273e6140fdc` |

The old 335-trade result remains a `LEGACY_TRUNCATED_WARMUP_ANCHOR`; it is not the
comparison baseline for XSMOM.

The formal training baseline was repeated under the same frozen data and runtime.
The two runs have identical:

- normalized trade-list SHA-256:
  `94415d4ac45c2a64155153ef35aa303e7b145015dafcfe85bae66be804baa1ed`;
- wallet-path member SHA-256:
  `af7c9318b20146b3841764604e2d3404e93ac4dfa0d3c462ac0a55fbea5aacee`;
- market-change member SHA-256:
  `b6efafbc28d2e3ff9baa1c6fb5fc9e73410005c026ee0930418fa8f5bece5da1`;
- strategy snapshot SHA-256:
  `0f1e7df8952cbfdd1d282ea50e1f4a6cb109a035d2503920c1a2d590e8a6d155`.

The formal baseline is therefore deterministic on the frozen snapshot.

### `D48-XSMOM-28D-V1` coverage result

Training coverage artifact summary SHA-256:
`9595472be5d5a64df0be61f77a47543e28f43d9bf9326626daec6d175966d831`.

| Metric | Training | Historical retrospective |
|---|---:|---:|
| Authentic raw signals | 4,075 | 2,442 |
| Long / short | 0 / 4,075 | 0 / 2,442 |
| Valid snapshot and eligible signal pair | 3,964 | 2,442 |
| Rank coverage | `97.2760736%` | `100%` |
| Funding-event coverage | `100%` | `100%` |

All training snapshots had at least 10 eligible rank pairs. The 111 uncovered raw
signals are signal-pair cold-start cases:

- EDGE: 94 of 142 raw signals occur before its own complete 28-day history;
- POWER: 17 of 250 occur before its own complete 28-day history.

The frozen V1 rule requires valid snapshot **and eligible signal pair** coverage of at
least 98%. Training achieves only 97.276%. Accordingly:

```text
D48-XSMOM-28D-V1
stage_disposition_training = INCONCLUSIVE_DATA_AVAILABILITY
final_disposition = INCONCLUSIVE
candidate_pnl = NOT_RUN
```

The threshold is not relaxed and the unavailable signals are not removed after
inspection. V1 does not proceed to portfolio PnL, historical retrospective candidate
comparison, or fresh forward.

### Funding coverage-only disposition

The settled-event proxy has 100% signal-weighted coverage in both historical windows,
including 100% for every pair/side cohort. Thus
`D48-FUNDING-COVERAGE-V1 = PASS_COVERAGE_ONLY`. This authorizes only the later
registration of a separate funding hypothesis; it is not funding-alpha evidence and
does not validate a live predicted-rate gate.

## Amendment 3 — Funding semantic correction and XSMOM V2 registration

Amended at: `2026-07-29T11:12:00Z`.

### Funding correction

Amendment 2's `PASS_COVERAGE_ONLY` wording is narrowed. The numerical event-coverage
gates pass at 100% overall and per pair, and an independent Binance redownload matches
the stored files. However, this audit has not independently proven that every
Freqtrade funding Feather timestamp/value is a finalized exchange settlement rather
than another historical funding representation.

Current formal disposition:

```text
D48-FUNDING-COVERAGE-V1 =
  INCONCLUSIVE_TIMESTAMP_SEMANTICS_PENDING
```

No funding-alpha hypothesis is authorized yet.

### V1 remains closed

`D48-XSMOM-28D-V1` remains
`INCONCLUSIVE_DATA_AVAILABILITY`. Its 98% combined coverage gate is not changed,
waived, or retrospectively reinterpreted.

### V2 is a new feasibility-informed hypothesis

`D48-XSMOM-28D-V2` is registered before any XSMOM candidate portfolio PnL was run or
inspected. The known V1 coverage result informed this design, so both historical
windows are development evidence for V2; only later fresh forward can confirm it.

V2 preserves the V1 28-day formula, top/bottom four buckets, causal timing, ranking,
fee, baseline, risk, execution, performance, episode, concentration, and fresh-forward
rules. It changes only the treatment and measurement of a raw signal whose pair does
not yet have 29 complete daily candles.

Frozen V2 decision:

```text
if eligible_universe_count < 10:
    block, reason=xsmom_snapshot_unavailable
elif signal_pair_is_not_scoreable:
    pass through unchanged from RiskCap baseline
    reason=xsmom_unscored_passthrough
else:
    long passes only top4
    short passes only bottom4
```

An unscored pass-through signal:

- must have exactly the same downstream decision as baseline before pre-existing
  RiskCap exposure/protection differences;
- is not an XSMOM changed signal;
- cannot start an XSMOM `PATH_DIVERGENCE` episode;
- is excluded from pass-versus-rank-block mechanism cohorts;
- may not contribute evidence for or against the ranking mechanism.

V2 coverage gates are separated:

1. valid rank snapshot coverage: at least 98% of all authentic raw signals;
2. signal-pair common support: at least 95% overall, disclosed as an estimand limit;
3. after each pair's deterministic maturity timestamp, unexpected scoreability
   coverage: 100% in the frozen historical files; fresh forward requires at least 98%
   overall and 95% for every pair.

The 95% common-support gate was selected after observing V1's 97.276% coverage and
must be disclosed wherever V2 historical results appear. No lookback, bucket,
formula, return threshold, or sample gate was changed.

Additional V2 hard requirements:

- the 111 historical cold-start raw signals must all be pass-through and must create
  zero XSMOM-triggered divergence episodes;
- mechanism statistics use only scoreable signals;
- arithmetic removal of all EDGE and POWER pair PnL must leave candidate-minus-
  baseline uplift positive;
- EDGE/POWER cold-start, EDGE/POWER mature, and all other mature-pair cohorts are
  reported separately;
- the no-op implementation must reproduce the formal 331-trade baseline exactly;
- the run order is baseline A, no-op, candidate, baseline B on unchanged data hashes;
  baseline A/B and no-op must match normalized trades and wallet path exactly;
- failure of any implementation-isolation check makes the run `INCONCLUSIVE`, not a
  candidate result.

Full V2 contract: `hypothesis-contract-v2.md`.

Registered status:

| ID | Status |
|---|---|
| `D48-XSMOM-28D-V1` | `INCONCLUSIVE_DATA_AVAILABILITY` |
| `D48-XSMOM-28D-V2` | `REGISTERED_NOT_RUN` |

## Amendment 4 — Corrected maturity audit and V2 pre-PnL acceptance

Amended at: `2026-07-29T13:09:00Z`.

The general data audit's first XSMOM maturity field was found to count the
partial intraday listing-day daily candle. Version 1.1 fixes the field without
altering any source data or the already-correct signal-level eligibility
implementation.

- POWER first feature endpoint: `2026-01-04T00:00:00Z`; first signal
  eligibility: `2026-01-05T00:00:00Z`.
- EDGE first feature endpoint: `2026-04-17T00:00:00Z`; first signal
  eligibility: `2026-04-18T00:00:00Z`.
- Corrected manifest SHA-256:
  `fff5cc00f18b67723e7cb84f5ec91ae28f3e1307394d2932662498dcc395b157`.

The v1.0 manifest remains preserved but its two maturity fields above are
superseded.

V2 coverage-only and real-strategy parity then passed every pre-PnL gate:

| Window | Raw | Snapshot | Common support | Post-maturity | Cold start |
|---|---:|---:|---:|---:|---:|
| Training | 4,075 | 100% | 97.276% | 100% | 111 |
| Historical retrospective | 2,442 | 100% | 100% | 100% | 0 |

The 111 cold-start rows are exactly EDGE 94 and POWER 17. All are raw-decision
pass-through rows and none is an XSMOM-changed signal. Remote strategy parity
found zero mismatches between the registered decision set and the actual
candidate/no-op `advise_indicators -> advise_entry` implementations.

## Amendment 5 — V2 frozen training sandwich and stop decision

Amended at: `2026-07-29T13:09:00Z`.

The contracted training sequence ran on the unchanged remote runtime:

```text
baseline A -> no-op -> candidate -> baseline B repeat
```

Baseline A, no-op, and baseline B repeat have identical 331 normalized trades,
metrics, and wallet SHA-256
`af7c9318b20146b3841764604e2d3404e93ac4dfa0d3c462ac0a55fbea5aacee`.
Implementation isolation therefore passes.

| Metric | Baseline | Candidate | Frozen result |
|---|---:|---:|---|
| Trades | 331 | 287 | PASS retention |
| Net profit | +130.200 USDT | +46.803 USDT | FAIL |
| Net return | +13.020% | +4.680% | FAIL |
| Profit factor | 1.1121 | 1.0468 | FAIL |
| Max drawdown | 11.4039% | 12.4846% | FAIL |

Candidate-minus-baseline profit is `-83.397 USDT`. It remains negative after
arithmetic removal of EDGE (`-76.469`), POWER (`-119.964`), or both
(`-113.036`).

Operational decision:

```text
D48-XSMOM-28D-V2 promotion = STOP / NO-GO
historical retrospective candidate PnL = NOT_RUN
fresh forward = NOT_STARTED
small capital = NOT_AUTHORIZED
```

The strict formal hypothesis disposition is
`INCONCLUSIVE_FORMAL_PATH_EVIDENCE`, because standard Freqtrade archives cannot
supply the complete event ledger required for formal `PATH_DIVERGENCE`
episodes. This limitation does not permit further promotion: the candidate
already fails three core training performance/risk gates.

Full report: `v2-training-result.md`.
