# Comparable MLP measurements Intraday bars were treated as daily periods for annualization, window slicing could discard a carry-in return or entry fee, and reporting omitted open-position profit or loss. Shared calendar accounting now preserves the full signal history before measuring each window, includes initial capital in drawdown, and marks terminal positions to market. Date-only end bounds include the complete day. Reports label close-equity drawdown explicitly and calculate win rate from completed trades. The existing additive 0.5% entry and exit fees and execution rules are retained. Eligibility floors and promotion gates remain in effect. Metrics in historical winner CSVs are provenance, not comparable numerical baselines: the sweep replays incumbent and candidates from captured data/artifact bytes under one source-and-contract fingerprint. Invalid or incomplete incumbent evidence stops promotion and adaptive convergence measurement. An incumbent changed during an adaptive run also stops the run. No winner artifacts are changed by this patch. `--samples S` is a total additional trial budget for each timeframe. For N distinct model paths, each receives the same floor(S/N) threshold vectors. The remainder is unused. Candidate generation also adds one frozen configuration per model; the sweep separately inserts the incumbent replay when present. For example, S=23 and N=2 generates 22 tuning rows and two frozen rows, plus the incumbent replay. This replaces the old mixture of local and broad draws; it does not equalize unknown historical search budgets. Trial vectors can repeat. Confirmation flags cycle through all four boolean pairs, identically for every model; budgets of at least four trials per model cover every pair, with pair counts differing by at most one. Coverage is declared per asset before reading its rows. BTC/ETH must reach `SCORE_START`. SOL/LINK use a bounded available-history comparison requiring at least 180 calendar days before `SUBPERIOD_SPLIT`; this is a minimum comparison span, not a claim of complete listing history. Both policies still require the final training bar and at least two retained OOS bars. The snapshot records the actual retained first/last timestamps and row count separately from the required bounds. Later-start exports fail rather than redefining their own required start. Training uses epoch-second timestamps correctly, includes the full final training day, preserves history across scoring folds, and purges supervised labels whose forward target reaches validation. The results table resolves price data and winner parameters from the same asset. Experimental architecture, temporal features, state policies, learned exits, model artifacts, and research runners remain outside this change. The live MLP signal engine and Pine source remain unchanged. Captured comparisons discard the export's final unconfirmed row; the reporting table continues to display the export through its latest row, so their end dates can differ. ## Validation Run `python -m pytest tests/ -q` from this checkout with dependencies installed. With no local `data/mlp` exports, the full fast suite passed: **129 passed, 8 skipped** (two slow cases and six existing real-export integration cases). The new comparison tests use deterministic temporary chart, model, and winner fixtures. Existing real-export signal/parity checks run when their chart files are available and explicitly skip otherwise. One pre-existing unregistered `slow` marker warning remains. Focused coverage includes fee timing, initial-capital drawdown, calendar annualization, carry-in and terminal positions, complete end dates, purged labels, immutable input capture, equal trial allocation and balanced confirmation flags, failed incumbent evidence, asset-aware coverage bounds, adaptive context changes, asset pairing, and one accounting computation per measured period. Reusing each raw accounting result for diagnostic reporting avoids rescanning the same period. Before these review fixes, three fixed real-data BTC 6H configurations (the frozen incumbent and two predetermined parameter variants) were captured. After accounting scan deduplication, their serialized evaluation rows matched byte-for-byte excluding only the source-dependent comparison fingerprint and evaluation key. This verifies those configurations, not all possible inputs. No training, threshold search, promotion, or deployment was run as validation. Corrected metrics should not be compared directly with pre-migration stored metrics.