# Locked-Baseline Decision Packet — BTC 6H Grouped Input

**Decision: REJECT — do not promote any `grouped_v1` artifact.**

This is a closed evaluation, not a new optimization run. No winner CSV, Pine
preset, active parameter file, or strategy code was changed. The dense BTC 6H
winner remains `mlp_weights_COINBASE_BTCUSD_6H_bb50_seed4942.json`.

## Evaluation contract

- **Frozen candidates:** `grouped_v1` seeds 9090, 9191, and 9292. Their saved
  weights and saved Phase-2 `recommended_thresholds` were used verbatim; there
  was no threshold sweep, retraining, selection, or promotion.
- **Reference:** the active 6H winner and its row in
  `results/winners/optimization_winner_strategy_mlp_scores_COINBASE_BTCUSD_6H.csv`.
  Its live thresholds were likewise held fixed.
- **Holdout:** `OOS_START=2026-03-01`; the replayed CSV covers
  2026-03-01 00:00 through 2026-08-21 12:00 UTC. All four artifacts declare a
  training end of 2026-02-28.
- **Metric procedure:** run the frozen MLP forward pass and existing
  `strategy_mlp_scores.generate_signals` on the full chronological CSV (to
  preserve entry/exit state at the holdout boundary), then score only rows on
  or after `OOS_START` via `calculate_metrics(..., min_trades=1)`. Numeric CSV
  timestamps are explicitly decoded as Unix seconds before the replay.
- **No OOS selection:** the three seeds are reported individually. The one
  positive seed was not selected, promoted, or used to revise any threshold.

## OOS result

| Artifact | OOS Calmar | OOS max DD | OOS trades | OOS P&L | Result |
|---|---:|---:|---:|---:|---|
| Dense live baseline (seed 4942) | n/a | 0.00% | 0 | 0.00% | No holdout trades; not a positive comparator |
| Grouped seed 9090 | -0.356 | -16.34% | 6 | -10.77% | Negative |
| Grouped seed 9191 | 0.753 | -8.45% | 6 | 12.45% | Positive but underpowered |
| Grouped seed 9292 | -0.228 | -31.61% | 9 | -13.28% | Negative |

Two of the three frozen grouped seeds lose money and have negative Calmar.
The sole positive result has six completed trades, so it is not enough evidence
to override the architecture's weak, unstable in-sample/WFO record. The
historical screen already showed materially worse IS Calmar and drawdown than
the dense baseline; see `mlp_grouped_input_experiment_btc_6h_2026_08_20.md`.

Therefore no grouped candidate satisfies a promote standard. This is a
**reject of promotion**, not an instruction to tune or re-run the experiment.

## Leakage and provenance controls

1. All grouped artifacts declare `train_window=[2015-01-08, 2026-02-28]`; OOS
   begins the next day. The MLP has no fitted transform in the replay: Pine
   exports already-normalized feature columns and the frozen forward pass only
   consumes each row's stored features.
2. The grouped first-layer mask was audited against the saved weights: each
   artifact is `55→16→8→1`, declares `grouped_first_layer_v1`, and has exactly
   731 blocked first-layer edges with **zero** non-zero blocked weights.
3. The replay uses the normal simulator's full pre-OOS history only for signal
   state. `calculate_metrics` excludes all pre-2026-03-01 returns from P&L,
   drawdown, trade count, and Calmar.
4. The current CSV SHA-256 is
   `63107cd6218cb61e3d54a4086f70e23991bdefb7cca482a52f7b1edbedaef1db`, which
   differs from the SHA recorded by both the historical baseline and grouped
   artifacts. Recomputed IS figures therefore are a **current-export audit**,
   not a replacement for the archived experiment table. This makes promotion
   less—not more—defensible.
5. Do not use `tools/run_mlp_deep_sweep.evaluate()` as evidence for this packet:
   it calls `pd.to_datetime()` on numeric epoch-second timestamps without
   `unit="s"`, treating the 6H CSV as 1970 and returning zero/no-data metrics.
   `validate_chart_data.py` shows the same timestamp interpretation warning.
   The packet's replay explicitly corrects that decoding but makes no source or
   strategy change.

## Verification performed

- `python tools/sync_params.py` — passed: all 20 active params files are in
  sync.
- `python tools/check_pine.py` — MLP preset architecture check passed; the
  report separately notes the existing plot budget is at its limit.
- `python -m pytest tests/test_mlp_input_structure.py -q` — **11 passed**.
- Direct frozen replay and structural audit described above; no files under
  `strategies/params/mlp/*BTCUSD_6H.json`, `results/winners/`, or
  `strategies/strategy_mlp_scores.pine` were modified.

## Follow-up boundary

Keep `grouped_v1` experimental and inactive. Any future work must begin from a
fresh, parity-validated export and a separately approved evaluation plan; it
must not use this OOS reading to tune thresholds or choose seed 9191.
