# Independent correctness review — 2026-09-21

Disposition: no unresolved blocking correctness findings in the reviewed comparison migration. This review was performed by a separate reviewer without implementing the production changes. The pre-migration reference was `initial_sweep.py`, preserving unrelated changes already present when this task began.

## Reviewed revisions

SHA-256 identifies the reviewed working-tree revisions:

| File | SHA-256 |
|---|---|
| `strategies/mlp_comparison.py` | `4dbdf54d21467d992cdad3101370bbf0a15d926c1ddc9488466e0b18da3c6019` |
| `tools/run_mlp_deep_sweep.py` | `c44e5c4caa95f881d657510a6dc382a50f4956219518bc88ee1027d89597ccd2` |
| `tools/run_mlp_adaptive.py` | `5571b9801644900b9ba6d5bd104888339eb8537fa2175625c63899ac861fb006` |
| `tools/verify_mlp_comparison_migration.py` | `8e6e41953d7ad2267fa834cb4bc293db27d4707d8b2ccdab6c1e50bc56ea8ffd` |
| `tests/test_mlp_comparison.py` | `ba2a8832c091c9ad950d161ef9663807aacecb092f3baf2cec8b986b55d7992d` |
| `tests/test_mlp_adaptive_comparison.py` | `c93ae4ab2fb0c83ddc9891d407e32036b6c8a81319ab6d08ffa077a07a702db2` |

## Findings closed during review

The initial shared tuning proposals retained an incumbent-first neighborhood bias despite equal counts. The final generator uses an artifact-neutral seeded global stream and canonicalizes path aliases. Every distinct artifact receives the same additional vectors and declared count; its frozen configuration remains separately visible.

Direct sweeps now independently repeat incumbent evaluation, as adaptive replay already did. Malformed/nonfinite parameters, nonfinite tensors or scores, empty/incompatible model layers, missing execution-gate inputs, incomplete coverage, and existing empty winner CSVs fail closed. Before writing an authorized future promotion, the sweep rechecks live data, artifact bytes, winner state and source hashes against the evaluated evidence.

## Substantive hurdle comparison

No hurdle was weakened merely to admit an archived candidate. Relative to `initial_sweep.py`, the following remain unchanged:

- Positive candidate P&L/DD; its existing eligibility rule retains the trade floor and drawdown band of 0.1% through 40%.
- Zero `Fragile_0.05`, positive Calmar in both subperiods, and zero negative qualifying WFO folds under the existing minimum-trades/minimum-valid-fold rules.
- Candidate Calmar and P&L/DD must each match or exceed the comparable incumbent. Equality was already permitted.
- OOS Sortino degradation tolerance remains 1.0; the gate still requires at least one OOS entry on each side and skips when the candidate's common OOS window is at least 85% bear regime.

The deliberate correction removes independent maxima between saved and replayed incumbent Calmar, P&L/DD, OOS Sortino and OOS trade count. Using replayed OOS trade count can change gate applicability when the saved history was active but the current replay is inactive. This removes incompatible evidence from the exemption decision; it does not lower the configured trade threshold or Sortino tolerance. Historical metrics remain provenance, and their unexplained discrepancies are not claimed resolved.

Coverage is stronger and explicit: complete IS bounds, at least two retained OOS bars, required finite inputs, common schema, and symmetric exclusion of the unconfirmed final row. Internal gaps remain disclosed limitations. Calendar recency itself does not invalidate a common historical comparison.

## Verification and evidence

The reviewer independently ran the comparison, adaptive-comparison, sweep-accounting and sweep-sharding tests: **23 passed**. The subsequently added empty-winner regression also passed independently. Carry-in accounting retains prior signal history; raw period measurements keep inactive/low-trade windows visible separately from eligibility sentinels. Context fingerprints and artifact/configuration identity prevent incompatible cache or adaptive-baseline reuse.

The reviewer inspected `verified/comparison.json`, its runner and source snapshots, and independently checked all recorded current source hashes and all **924 protected artifact hashes**: no mismatches. Canonical evidence fingerprint is `a9d9968abafa3b4f9c3c0895c69ef8a5f66b14d48dffece34f44e418f5960a0f`.

The archived comparison contains ten models, zero additional threshold trials per model and zero promotions. No old-versus-corrected ranking or promotion decisions change in this sample. The same adaptive evaluator reproduces incumbent Calmar `1.0044889721329684` and unchanged-incumbent delta zero. The runner contains no training, candidate-generation, promotion or preset/deployment entry point. Preliminary `replay_final` evidence predates the last empty-winner fix; only `verified` matches the reviewed source revision.

## Residual limitations

Historical search budgets remain unequal and incompletely known. The old evaluator snapshot imports current accounting, so this is a comparison-policy migration receipt, not a reconstruction of the original historical engine. Existing qualifying-fold exclusions and OOS selection reuse remain; retaining raw measurements makes those limitations visible without asserting an untouched holdout. The older BTC6H return discrepancy, feature publication vintages, data gaps and live TradingView execution parity remain unresolved. This review supports coherent historical comparisons, not a production-performance or deployability claim.
