[
 {
  "experiment_id": "exp-20261022-0000",
  "night": "20261022",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 2556.6271454464163
 },
 {
  "experiment_id": "exp-20261022-0001",
  "night": "20261022",
  "kind": "feature",
  "claim": "20-day breakouts preceded by volatility contraction (5d/20d return-vol ratio below 1.0) have higher per-trade expectancy after costs than unconditional 20-day breakouts.",
  "falsification_criterion": "Cost-stressed per-trade expectancy falls to or below the baseline 88.19 EUR, or the trade count collapses without a compensating per-trade gain, proving contraction filtering adds no edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1451.7082908754041
 },
 {
  "experiment_id": "exp-20261022-0002",
  "night": "20261022",
  "kind": "feature",
  "claim": "20-bar breakouts whose bar closes in the upper half of its range have higher per-trade expectancy than all 20-bar breakouts.",
  "falsification_criterion": "Expectancy per trade or score falls below the 88.19 EUR baseline, or the filter cuts trade count heavily without raising expectancy, proving close quality does not separate good breakouts from failed ones.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2364.703687563355
 },
 {
  "experiment_id": "exp-20261022-0003",
  "night": "20261022",
  "kind": "feature",
  "claim": "20-bar breakouts occurring above the 50-bar SMA earn higher per-trade expectancy than all breakouts, because counter-trend breakouts mean-revert and cannot clear the 80 bps cost hurdle.",
  "falsification_criterion": "Score or expectancy falls below the incumbent (88.19 EUR / 2556), or the filter removes a large share of trades without raising per-trade expectancy, proving trend alignment adds no edge.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 2703.659616236367
 },
 {
  "experiment_id": "exp-20261022-0004",
  "night": "20261022",
  "kind": "feature",
  "claim": "Adding vol_ratio(20) > 1 (recent 5d volatility expanding above its 20d baseline) to the trend-confirmed breakout improves expectancy, because expansion breakouts follow through while contraction breakouts are fakeouts.",
  "falsification_criterion": "Score/expectancy below the incumbent (95.24 EUR, score 2703.66), or fewer than ~900 trades with no expectancy gain, proving volatility expansion at breakout adds no edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2583.2881563958586
 },
 {
  "experiment_id": "exp-20261022-0005",
  "night": "20261022",
  "kind": "exit",
  "claim": "Post-breakout drift in symbols above their 50-bar SMA persists beyond 10 bars, so extending the time exit to 15 bars raises expectancy without losing trades.",
  "falsification_criterion": "Score at 15 bars <= 2703.66 (incumbent), i.e. expectancy gain is offset by drawdown growth or the extra 5 bars add no drift.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4014.6151642200734
 },
 {
  "experiment_id": "exp-20261022-0006",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts with above-average volume (vol_z(10) > 0) persist longer and yield higher post-cost expectancy than unconfirmed breakouts.",
  "falsification_criterion": "Expectancy or score below the incumbent (151.76 EUR/trade, score 4014.6), or a trade-count collapse with no per-trade improvement, proves volume does not confirm breakout quality.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3828.036206309627
 },
 {
  "experiment_id": "exp-20261022-0007",
  "night": "20261022",
  "kind": "exit",
  "claim": "Extending the time exit from 15 to 20 bars improves expectancy because post-breakout momentum persists beyond 15 days.",
  "falsification_criterion": "Score or cost-stress expectancy at 20 bars falls below the incumbent (score 4014.6, expectancy 151.76 EUR), or drawdown expands past ~25% without expectancy gain.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4842.775529180414
 },
 {
  "experiment_id": "exp-20261022-0008",
  "night": "20261022",
  "kind": "exit",
  "claim": "The incumbent's breakout-trend edge persists beyond 20 bars, so extending the time exit to 30 bars raises expectancy.",
  "falsification_criterion": "Expectancy or score at 30 bars falls below the incumbent's 191.30 EUR / 4842.8, or drawdown rises materially with no expectancy gain.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 8418.469408094214
 },
 {
  "experiment_id": "exp-20261022-0009",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR on the incumbent 30-day breakout-with-uptrend entry reduces noise-driven stop-outs and lets more trades survive to capture the trend.",
  "falsification_criterion": "Score or cost_stress expectancy falls below the incumbent (346.85 EUR / score 8418), or max drawdown rises without a matching expectancy gain, proving the wider stop only adds tail risk.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10275.450329186735
 },
 {
  "experiment_id": "exp-20261022-0010",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR keeps more of the 30-day winners alive through normal crypto noise, raising expectancy above the incumbent's 445 EUR.",
  "falsification_criterion": "Expectancy below 445 EUR, or sharpe below 0.40, or max drawdown blowing past ~25% would prove the 'give winners room' mechanism has hit its limit at 3x.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9479.973187167046
 },
 {
  "experiment_id": "exp-20261022-0011",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts closing at least 1% above the prior 20-bar high carry stronger continuation than marginal breaks, raising per-trade expectancy net of costs.",
  "falsification_criterion": "Score below the incumbent's 10275 or expectancy below 445 EUR/trade; or n_trades collapsing without a proportional expectancy gain.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9922.12051746648
 },
 {
  "experiment_id": "exp-20261022-0012",
  "night": "20261022",
  "kind": "feature",
  "claim": "Replacing the SMA(50) trend filter with an EMA(50) trend filter improves expectancy because the EMA excludes stale breakouts in decaying uptrends that the lagging SMA still admits.",
  "falsification_criterion": "A score below the incumbent's 10275 (or expectancy below 445 EUR) under identical exits and sizing proves the EMA filter is worse and the hypothesis is false.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10106.862947156918
 },
 {
  "experiment_id": "exp-20261022-0013",
  "night": "20261022",
  "kind": "feature",
  "claim": "Requiring the breakout bar to close in the top 40% of its range (close_loc(1) >= 0.6) improves net expectancy by removing weak-close breakouts that fade.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score 10275, expectancy 445 EUR), or a large drop in n_trades without a proportional rise in per-trade expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10273.723794962672
 },
 {
  "experiment_id": "exp-20261022-0014",
  "night": "20261022",
  "kind": "feature",
  "claim": "20-day breakouts that occur while 5-day volatility is below 20-day volatility (contraction) produce higher risk-adjusted returns than all breakouts.",
  "falsification_criterion": "Score below the incumbent's 10275.45 (or expectancy below 445.13 EUR) on the same backtest would disprove the contraction hypothesis.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6494.5560237668615
 },
 {
  "experiment_id": "exp-20261022-0015",
  "night": "20261022",
  "kind": "feature",
  "claim": "Confirming breakouts with close above SMA20 instead of SMA50 captures fresh trends earlier, increasing trade count and total expectancy without degrading per-trade edge.",
  "falsification_criterion": "Score below incumbent 10275, or expectancy < 400 EUR with n_trades not exceeding ~900, proving early-trend entries lose more than they add after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10132.138501188656
 },
 {
  "experiment_id": "exp-20261022-0016",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts confirmed by above-average volume (vol_z(30) > 0) have higher per-trade expectancy than unconfirmed ones, improving total score despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 10275.45, or expectancy below 445 EUR/trade, or the trade count dropping so much that total PnL falls — any of these proves volume confirmation adds no net edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10161.93949980498
 },
 {
  "experiment_id": "exp-20261022-0017",
  "night": "20261022",
  "kind": "exit",
  "claim": "Capping winners at +15% raises the incumbent's risk-adjusted score because breakout gains beyond ~15% within the 30-bar hold are disproportionately given back before the time exit.",
  "falsification_criterion": "Score below the incumbent's 10275.45, or sharpe below 0.4045, proving the uncapped right tail carries the edge rather than being given back.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 719.0643377274299
 },
 {
  "experiment_id": "exp-20261022-0018",
  "night": "20261022",
  "kind": "feature",
  "claim": "With the 50-bar trend filter in place, a 10-bar breakout horizon increases trade count without hurting per-trade expectancy, because the trend filter, not the breakout horizon, carries the edge.",
  "falsification_criterion": "Score below the incumbent's 10275, or expectancy materially below 445 EUR / Sharpe below 0.40, proving the 20-bar horizon is necessary for entry quality.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 11344.415158607708
 },
 {
  "experiment_id": "exp-20261022-0019",
  "night": "20261022",
  "kind": "feature",
  "claim": "Fresh 10-bar breakouts occurring within 2% below the 50-bar SMA (early recoveries) are profitable; relaxing the trend filter from >0 to >-0.02 adds breadth without hurting expectancy.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (452.9 EUR, score 11344), or the added marginal trades show negative expectancy / lower positive-symbol share.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10128.084245201035
 },
 {
  "experiment_id": "exp-20261022-0020",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7517.4674231924755
 },
 {
  "experiment_id": "exp-20261022-0021",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises net expectancy because breakout entries are being stopped out on post-entry volatility spikes before the 30-bar trend plays out.",
  "falsification_criterion": "Score below the incumbent's 11344, expectancy below 452.9 EUR, or max drawdown above ~25% would prove the wider stop adds tail risk without recovering stopped-out winners.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10905.686124940958
 },
 {
  "experiment_id": "exp-20261022-0022",
  "night": "20261022",
  "kind": "feature",
  "claim": "Marginal breakouts (close within 1% of the prior 10-bar high) carry an edge smaller than the 160 bps round-trip cost, so requiring breakout_dist(10) > 0.01 raises per-trade expectancy.",
  "falsification_criterion": "If cost-stress expectancy or score falls below the incumbent (452.9 EUR / 11344), or trade count collapses without a compensating rise in expectancy, the cost-hurdle mechanism is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11068.95559584614
 },
 {
  "experiment_id": "exp-20261022-0023",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakout entries whose bar closes in the upper half of its range carry higher expectancy than all breakouts.",
  "falsification_criterion": "Expectancy or score below the incumbent (452.9 EUR / 11344), or a trade-count collapse with no per-trade gain, disproves the strong-close mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10402.103969887108
 },
 {
  "experiment_id": "exp-20261022-0024",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8170.193482065806
 },
 {
  "experiment_id": "exp-20261022-0025",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts accompanied by above-average volume (vol_z(30) > 0.5) are more likely to follow through, so filtering on volume raises net expectancy.",
  "falsification_criterion": "If this variant's score/expectancy falls below the incumbent (452.9 EUR, score 11344) — or trade count drops without a per-trade expectancy gain — volume confirmation adds no edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9590.7015223225
 },
 {
  "experiment_id": "exp-20261022-0026",
  "night": "20261022",
  "kind": "exit",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1721.0749508302133
 },
 {
  "experiment_id": "exp-20261022-0027",
  "night": "20261022",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11344.415158607708
 },
 {
  "experiment_id": "exp-20261022-0028",
  "night": "20261022",
  "kind": "feature",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10324.79410685022
 },
 {
  "experiment_id": "exp-20261022-0029",
  "night": "20261022",
  "kind": "feature",
  "claim": "Requiring volatility contraction before the breakout (short-window return std below its longer-window level) filters weak breakout entries and raises per-trade expectancy.",
  "falsification_criterion": "Score/expectancy below the incumbent (452.88 EUR, score 11344) or a drop in expectancy with reduced trade count would prove the contraction filter destroys value.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8290.561943787043
 },
 {
  "experiment_id": "exp-20261022-0030",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3xATR to 4xATR raises expectancy because post-breakout pullbacks within the 30-day hold trigger premature stop-outs on trades that would recover.",
  "falsification_criterion": "Score below 11344 or expectancy below 452.88 EUR versus the incumbent, or a rise in max drawdown above ~25% that outweighs any expectancy gain.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0031",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises expectancy because breakout trades are being stopped out by normal post-breakout retest noise.",
  "falsification_criterion": "Any score below the incumbent's 11344 (or expectancy below 452.88 EUR) proves the 3x stop is not causing premature stop-outs and that the extra tail-loss exposure of 4x outweighs saved whipsaws.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0032",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10071.524629139145
 },
 {
  "experiment_id": "exp-20261022-0033",
  "night": "20261022",
  "kind": "feature",
  "claim": "Replacing the 50-bar SMA trend filter with a 50-bar EMA gap filter improves expectancy because the EMA tracks recent price faster, admitting breakouts earlier in fresh uptrends and exiting trend definition sooner.",
  "falsification_criterion": "Score below incumbent 11344 (expectancy below 452.88 EUR or Sharpe below 0.41) would prove the EMA trend filter is worse than the SMA filter.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8757.191895133412
 },
 {
  "experiment_id": "exp-20261022-0034",
  "night": "20261022",
  "kind": "exit",
  "claim": "Tightening the stop from 3x to 2x ATR raises expectancy and Sharpe because failed breakouts retrace through the 10-day range quickly, and the winners lost to noise stops are fewer than the losers saved.",
  "falsification_criterion": "Expectancy or Sharpe falls below the incumbent (452.9 EUR / 0.41) without a compensating rise in n_trades, showing winners need 3xATR of room to breathe and the hypothesis is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9068.107486657475
 },
 {
  "experiment_id": "exp-20261022-0035",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts confirmed by above-average participation (vol_z(30) > 0) carry positive drift net of costs, while low-volume breakouts are noise that cannot clear the 160 bps round trip.",
  "falsification_criterion": "Score below the incumbent (11344) or expectancy per trade failing to rise above 452.88 EUR while trade count falls below ~700 would prove volume confirmation adds nothing here.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8902.213543280965
 },
 {
  "experiment_id": "exp-20261022-0036",
  "night": "20261022",
  "kind": "exit",
  "claim": "Adding a 30% take-profit to the incumbent improves risk-adjusted score because crypto breakout pops mean-revert within the 30-day hold, so capping winners at +30% harvests gains the time exit currently gives back.",
  "falsification_criterion": "Score below the incumbent's 11344 or cost-stress expectancy below 452.88 EUR, or TP-hit trades continuing to rise well past +30%, proving winners were capped.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2334.3502658974785
 },
 {
  "experiment_id": "exp-20261022-0037",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop to 4xATR raises expectancy because 3xATR stops are being hit during normal post-breakout volatility expansion, cutting winners early.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 11344, expectancy < 452.88 EUR) with the 4xATR stop, or a drawdown increase beyond ~25% without expectancy gain, proves wider stops are not the binding improvement.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0038",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR keeps more post-breakout trades alive through initial volatility expansion, raising per-trade expectancy.",
  "falsification_criterion": "Score or expectancy below the incumbent (11344 / 452.88 EUR) with similar trade count, proving wider stops only add tail risk without saving winners.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0039",
  "night": "20261022",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4006.0462922470124
 },
 {
  "experiment_id": "exp-20261022-0040",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts preceded by volatility contraction (vol_ratio(60) < 1) continue better than breakouts from expanded volatility, raising expectancy of the incumbent entry.",
  "falsification_criterion": "Score below incumbent (11344, expectancy 452.9 EUR), or n_trades under ~600 without higher expectancy, disproves the squeeze-breakout mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7543.654118659376
 },
 {
  "experiment_id": "exp-20261022-0041",
  "night": "20261022",
  "kind": "feature",
  "claim": "Requiring the breakout bar to close in the top 40% of its range (close_loc(1) > 0.6) improves net expectancy by filtering failed, wick-rejected breakouts.",
  "falsification_criterion": "Score or cost_stress_expectancy below the incumbent (score 11344, expectancy 452.88 EUR), or a sharp drop in n_trades with no expectancy gain, would prove the close-location filter adds no net-of-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0042",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakout entries (10-bar high, above 50-day SMA) whose bar closes in the upper 40% of its range have higher net expectancy than all breakouts, because strong closes predict continuation and weak closes predict fade.",
  "falsification_criterion": "Score or cost-stress expectancy falls below the incumbent (score 11344, expectancy 452.9), or the trade-count reduction from close_loc filtering costs more in lost gross edge than it saves in avoided losers.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0043",
  "night": "20261022",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 11522.696331227637
 },
 {
  "experiment_id": "exp-20261022-0044",
  "night": "20261022",
  "kind": "feature",
  "claim": "Requiring the breakout bar to close in its upper half (close_loc(1) > 0.5) filters intraday fakeouts and raises expectancy above the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (469 EUR / 11523), or fewer than ~600 trades showing the filter merely cuts sample without improving edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10606.41170871074
 },
 {
  "experiment_id": "exp-20261022-0045",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring a 20-day high instead of a 10-day high, with the same 50-day trend gate and exits, raises per-trade expectancy enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below 11523 or expectancy below 469 EUR vs incumbent e543b00aa707736f, or n_trades dropping with no improvement in expectancy per trade.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10002.463454537889
 },
 {
  "experiment_id": "exp-20261022-0046",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakout entries where the close is at least 1% above the prior 10-day high are materially more profitable after costs than marginal crossings at the high itself.",
  "falsification_criterion": "Cost-stressed expectancy or score below the incumbent (469 EUR / 11522) on the retained trade cohort would prove marginal crossings were not the loss source.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10874.468597300374
 },
 {
  "experiment_id": "exp-20261022-0047",
  "night": "20261022",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the incumbent exit raises expectancy by capturing post-breakout drift before mean reversion within the 30-bar hold.",
  "falsification_criterion": "Any result with score below the incumbent's 11522.7 or expectancy below EUR 469 proves the right tail beyond +20% outweighs post-breakout reversion, refuting the drift-decay mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1782.224254089618
 },
 {
  "experiment_id": "exp-20261022-0048",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts confirmed by above-average volume (vol_z(10) > 1) carry higher post-cost expectancy than unconfirmed breakouts.",
  "falsification_criterion": "Score below the incumbent (11522) or expectancy below 469 EUR/trade on the same universe would prove volume confirmation adds no edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9011.626669743493
 },
 {
  "experiment_id": "exp-20261022-0049",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts occurring during volatility contraction (ATR(7) below ATR(30)) produce stronger follow-through than breakouts from already-expanded volatility.",
  "falsification_criterion": "Score or expectancy below the incumbent (469.15 EUR / 11522.70) would prove the contraction filter subtracts value; a score gain with fewer trades would confirm the mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3293.188188574513
 },
 {
  "experiment_id": "exp-20261022-0050",
  "night": "20261022",
  "kind": "entry",
  "claim": "Buying closes in the top decile of the prior 10-day range (anticipating rather than confirming the breakout) captures the breakout bar itself and adds profitable trades without diluting the edge.",
  "falsification_criterion": "Score or expectancy below the incumbent (469 EUR/trade), or the added non-breakout trades mean-reverting, would prove strict new-high confirmation is necessary.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9351.095527128073
 },
 {
  "experiment_id": "exp-20261022-0051",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4x ATR raises cost-stressed expectancy because fewer pullback stop-outs let more positions survive to the 30-bar trend capture.",
  "falsification_criterion": "Expectancy or sharpe below the incumbent (469 EUR / 0.415), or max drawdown rising above ~26%, proves stops at 3.5x are not the binding constraint.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0052",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts emerging from volatility contraction (5d std below 20d std) have more sustained follow-through than breakouts from already-noisy regimes, raising per-trade expectancy.",
  "falsification_criterion": "Cost-stress expectancy at or below the incumbent's 469 EUR, or inconsistent halves, proving the squeeze subset is merely smaller rather than better.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8111.321577608523
 },
 {
  "experiment_id": "exp-20261022-0053",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakout bars that close in the upper half of their range follow through more than fading breakouts.",
  "falsification_criterion": "Score or expectancy below the incumbent, or inconsistent halves, proves close location adds no selection value.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0054",
  "night": "20261022",
  "kind": "exit",
  "claim": "Post-breakout drift is concentrated in the first three weeks; truncating the time exit from 30 to 20 bars raises risk-adjusted return by shedding decaying tail exposure.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 11522, expectancy < 469 EUR) would prove the edge accrues over the full 30-bar window and truncation destroys it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4654.112301870661
 },
 {
  "experiment_id": "exp-20261022-0055",
  "night": "20261022",
  "kind": "risk",
  "claim": "Cutting position_fraction from 0.25 to 0.15 raises the score because the drawdown penalty shrinks more than expectancy falls linearly.",
  "falsification_criterion": "A score at or below the incumbent's 11522.7, or cost-stress expectancy below ~469 EUR, would prove the sizing reduction costs more than the drawdown relief gains.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5218.790363585348
 },
 {
  "experiment_id": "exp-20261022-0056",
  "night": "20261022",
  "kind": "exit",
  "claim": "Capping winners at +20% beats holding to the 30-bar time exit because breakout follow-through decays before day 30.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 11522, expectancy 469 EUR, sharpe 0.415) would prove early profit-taking destroys more tail than it saves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0057",
  "night": "20261022",
  "kind": "feature",
  "claim": "Requiring breakout-day volume above 1 standard deviation of the prior 10 bars (vol_z(10) > 1) filters fakeout breakouts and raises per-trade expectancy enough to offset the lost trade count.",
  "falsification_criterion": "If the candidate's score falls below the incumbent (11522) — either because expectancy drops or because trade count collapses without a compensating quality gain — the volume-confirmation mechanism is wrong and should be abandoned, not re-tuned.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0058",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7667.51039818759
 },
 {
  "experiment_id": "exp-20261022-0059",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakouts accompanied by above-average 10-bar volume carry higher net expectancy than unfiltered breakouts.",
  "falsification_criterion": "Score below the incumbent's 11522 (trades cut without a per-trade expectancy gain after costs) proves volume confirmation adds no edge here.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 12114.992114876144
 },
 {
  "experiment_id": "exp-20261022-0060",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakout entries whose bar closes in its upper half (close_loc > 0.5) follow through more than weak-close breakouts, raising expectancy net of costs.",
  "falsification_criterion": "If expectancy or score falls below the incumbent (499 EUR / 12115) with n_trades dropping without per-trade improvement, the close-location filter has no edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10985.722325108149
 },
 {
  "experiment_id": "exp-20261022-0061",
  "night": "20261022",
  "kind": "feature",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9852.610634619314
 },
 {
  "experiment_id": "exp-20261022-0062",
  "night": "20261022",
  "kind": "feature",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11756.356771096449
 },
 {
  "experiment_id": "exp-20261022-0063",
  "night": "20261022",
  "kind": "exit",
  "claim": "Capping winners at +15% improves expectancy because breakout gains mean-revert before the 30-bar time exit realizes them",
  "falsification_criterion": "Score or expectancy falls below the incumbent (12115 / EUR 499), proving the edge depends on uncapped tail gains",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 910.4350476519163
 },
 {
  "experiment_id": "exp-20261022-0064",
  "night": "20261022",
  "kind": "feature",
  "claim": "Capping breakout extension at +5% above the prior 10-bar high filters mean-reverting blow-off entries and improves net expectancy versus the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 12114.99, expectancy 499.17 EUR), or a large drop in n_trades without per-trade gain, falsifies the hypothesis.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7014.843557387531
 },
 {
  "experiment_id": "exp-20261022-0065",
  "night": "20261022",
  "kind": "exit",
  "claim": "Breakout continuation alpha decays within ~3 weeks, so exiting at 20 bars instead of 30 improves expectancy and Sharpe.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 12115, expectancy 499 EUR) proves the 20-30 bar holding tail adds real edge, falsifying the decay hypothesis.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4747.206927334198
 },
 {
  "experiment_id": "exp-20261022-0066",
  "night": "20261022",
  "kind": "entry",
  "claim": "Entering within 1% below the 10-day high (anticipation) beats requiring a confirmed new high, raising expectancy above the incumbent's 499 EUR.",
  "falsification_criterion": "Expectancy_eur or score below the incumbent (499.17 / 12115), or the added near-high trades showing negative marginal expectancy, proving confirmation is required.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11272.45345658545
 },
 {
  "experiment_id": "exp-20261022-0067",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4.0x ATR reduces noise stop-outs on 10-bar breakouts and lets winners run, raising expectancy.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 12114, expectancy 499 EUR), or higher drawdown without higher expectancy, proves the wider stop only adds tail risk.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11483.242128129
 },
 {
  "experiment_id": "exp-20261022-0068",
  "night": "20261022",
  "kind": "feature",
  "claim": "10-bar breakouts occurring during volatility contraction (short-horizon return std below its 20-bar baseline) yield higher expectancy than breakouts without contraction.",
  "falsification_criterion": "Score or expectancy_eur falls below the incumbent (12115 / 499 EUR) when the vol_ratio(20) < 1 clause is added, or trade count collapses with no per-trade improvement, proving contraction adds no selection value.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6675.197451860935
 },
 {
  "experiment_id": "exp-20261022-0069",
  "night": "20261022",
  "kind": "exit",
  "claim": "Tightening the stop from 3.5x to 2.5x ATR raises cost-stressed expectancy because losing breakout entries rarely recover after a 2.5-ATR adverse move, while winning entries never reach that depth.",
  "falsification_criterion": "Expectancy or score falls below the incumbent (499 EUR / 12115), or n_trades stays similar with stopped-out losers dominating PnL, proving the 2.5-ATR depth is routinely hit by eventual winners.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10112.566936607536
 },
 {
  "experiment_id": "exp-20261022-0070",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakout bars that close in the upper half of their daily range show persistent demand and yield higher post-cost expectancy than weak-close breakouts.",
  "falsification_criterion": "Total score or cost-stress expectancy below the incumbent (score < 12115, expectancy < 499 EUR), or improvement appearing in only one half of the data.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0071",
  "night": "20261022",
  "kind": "feature",
  "claim": "Only breakouts closing more than 5% above the prior 10-bar high carry post-cost edge; marginal new highs are noise that dilutes expectancy.",
  "falsification_criterion": "Score below the incumbent's 12115 (or expectancy below 499 EUR, or halves inconsistent) would prove far breakouts are not the source of the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8885.52910468291
 },
 {
  "experiment_id": "exp-20261022-0072",
  "night": "20261022",
  "kind": "feature",
  "claim": "10-day breakouts whose bar closes in the upper half of its range carry more continuation than weak-close breakouts, so requiring close_loc(1) > 0.5 raises expectancy per trade.",
  "falsification_criterion": "Score or expectancy_eur below the incumbent (score 12114, expectancy 499), or fewer trades with no per-trade gain, proves weak-close breakouts were not the losing subset.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0073",
  "night": "20261022",
  "kind": "feature",
  "claim": "Breakout signals whose bar closes in its upper half (strong close) continue; weak closes are failed breakouts that erode expectancy.",
  "falsification_criterion": "Score below the incumbent's 12115 (or n_trades dropping >30% without an expectancy gain above 499 EUR) proves the strong-close filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0074",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6455.015944217664
 },
 {
  "experiment_id": "exp-20261022-0075",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakout signals whose bar closes in its upper half (buyers in control at the close) deliver higher per-trade expectancy than weak-close breakouts.",
  "falsification_criterion": "Expectancy_eur or score below the incumbent (499 EUR / 12115) would prove the strong-close filter removes good trades rather than bad ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0076",
  "night": "20261022",
  "kind": "entry",
  "claim": "10-day-high breakouts that are also fresh 60-day highs carry higher per-trade expectancy than range-recovery breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent (12115), or expectancy below 499 EUR, would prove the edge resides in the excluded below-60d-high breakouts, refuting the overhead-resistance mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9643.205638879164
 },
 {
  "experiment_id": "exp-20261022-0077",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in the upper half of its range (close_loc(1) > 0.5) improves cost-stressed expectancy over the incumbent by filtering fade-outs.",
  "falsification_criterion": "If the candidate's cost_stress_expectancy_eur or score falls below the incumbent (499.17 EUR / 12115), or the trade-count drop hurts Sharpe below 0.42, the close-strength filter adds no edge and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0078",
  "night": "20261022",
  "kind": "entry",
  "claim": "Volume confirmation is redundant given the breakout trigger and 50-SMA trend filter; removing it adds enough profitable trades to raise total score.",
  "falsification_criterion": "Score falls below the incumbent's 12115 (e.g., per-trade expectancy drops toward the 160bps round-trip cost or positive_symbol_share falls below 0.875), proving volume confirmation carries independent alpha.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0079",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8347.754503201704
 },
 {
  "experiment_id": "exp-20261022-0080",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakout bars closing in the top 30% of their range (close_loc(1) > 0.7) carry stronger continuation than weak-closing breakout bars.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 12114.99, expectancy EUR 499.17), or a drop in n_trades without a proportionally higher per-trade expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9174.327839295782
 },
 {
  "experiment_id": "exp-20261022-0081",
  "night": "20261022",
  "kind": "exit",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0082",
  "night": "20261022",
  "kind": "exit",
  "claim": "Capping winners at +15% on the incumbent breakout entry raises cost-stressed expectancy by realizing momentum gains before they decay over the 30-bar hold.",
  "falsification_criterion": "Score or cost-stressed expectancy below the incumbent (12115 / €499), or a sharp drop in n_trades' average realised gain showing winners were being cut short of their natural run.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0083",
  "night": "20261022",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12114.992114876144
 },
 {
  "experiment_id": "exp-20261022-0084",
  "night": "20261022",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the incumbent breakout entry raises the score by capturing momentum spikes that revert before the 30-bar time exit.",
  "falsification_criterion": "Score below the incumbent's 12115 (or sharpe below 0.4229) with the take-profit enabled, showing the edge resides in uncapped winners.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1892.3502443413258
 },
 {
  "experiment_id": "exp-20261022-0085",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring pre-breakout volatility contraction (vol_ratio(20) < 1) on top of the incumbent entry raises cost-stressed expectancy by selecting higher-quality breakouts.",
  "falsification_criterion": "Any run with score below the incumbent's 12115 or expectancy below 499 EUR (including a trade-count collapse without a per-trade gain) proves contraction does not improve breakout follow-through here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0086",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring the close to clear the prior 10-bar high by at least 2% filters out cost-churning marginal breakouts and raises per-trade expectancy above the incumbent.",
  "falsification_criterion": "Score or cost-stress expectancy falls below the incumbent (score 12114, expectancy 499 EUR), or n_trades collapses without a proportional expectancy gain.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11526.479117052297
 },
 {
  "experiment_id": "exp-20261022-0087",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(20) < 1) before a volume-confirmed breakout raises net expectancy because squeeze breakouts produce more durable trends.",
  "falsification_criterion": "Score at or below the incumbent's 12114.99, or per-trade expectancy at or below 499 EUR, or a trade-count collapse without a proportional expectancy gain, proves the squeeze filter adds no value after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0088",
  "night": "20261022",
  "kind": "entry",
  "claim": "The vol_z(10) > 0 volume filter is redundant given trend plus breakout; removing it adds enough net-profitable trades to raise the score above the incumbent.",
  "falsification_criterion": "Score below 12115 or cost-stress expectancy below the incumbent's 499 EUR (the added trades lose after 80 bps legs), proving volume confirmation is load-bearing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0089",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9910.772327804592
 },
 {
  "experiment_id": "exp-20261022-0090",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts preceded by 60-bar volatility contraction carry more follow-through than breakouts in already-expanded regimes, raising post-cost expectancy.",
  "falsification_criterion": "Score or cost-stress expectancy falls below the incumbent (499 EUR / 12115 score), or n_trades collapses with no expectancy gain, showing contraction filtering removes more winners than losers.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7003.200947397811
 },
 {
  "experiment_id": "exp-20261022-0091",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring positive 20-bar momentum (ret(20) > 0) alongside the 10-bar breakout improves expectancy by only entering breakouts aligned with medium-term uptrends.",
  "falsification_criterion": "Score or cost-stress expectancy falls below the incumbent (score 12114.99, expectancy 499.17 EUR), or n_trades drops so far that the edge no longer clears the 80 bps per-leg costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9748.28042671516
 },
 {
  "experiment_id": "exp-20261022-0092",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4.0x ATR raises expectancy because trend-and-volume-confirmed breakouts that retrace deeply typically recover, and the extra half-ATR avoids shakeout stop-outs.",
  "falsification_criterion": "Score below the incumbent's 12115 or expectancy below 499 EUR at similar trade count proves the shakeout-avoidance mechanism wrong; a rise in max drawdown above ~25% without an expectancy gain also falsifies it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0093",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring a 20-day high instead of a 10-day high, holding the other filters fixed, raises per-trade expectancy because longer-horizon breakouts carry a stronger trend signal.",
  "falsification_criterion": "Score/expectancy below the incumbent (499 EUR, score 12115), or fewer trades without a higher expectancy per trade, falsifies the stronger-breakout mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10018.783978840467
 },
 {
  "experiment_id": "exp-20261022-0094",
  "night": "20261022",
  "kind": "exit",
  "claim": "A 15% take-profit on the incumbent captures crypto breakout spikes before they mean-revert by the 30-bar time exit, raising cost-stressed expectancy without reducing trade count.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (12115 / 499 EUR) at similar trade count, or lower per-trade expectancy, proving the edge resides in uncapped right-tail winners that the cap truncates.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0095",
  "night": "20261022",
  "kind": "exit",
  "claim": "Capping winners at +15% improves net expectancy because volume-confirmed breakouts mean-revert after ~15% spikes before the 30-bar exit.",
  "falsification_criterion": "Any score/expectancy below the incumbent (12115 / 499 EUR) proves the profit target truncates more edge than it saves, killing the overshoot-revert mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0096",
  "night": "20261022",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4364.701119239875
 },
 {
  "experiment_id": "exp-20261022-0097",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4.0x ATR raises expectancy by avoiding volatility-driven stop-outs on fresh breakouts.",
  "falsification_criterion": "Score or expectancy below the incumbent (12114 / 499 EUR), or max drawdown above 22.5% without a compensating expectancy gain.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0098",
  "night": "20261022",
  "kind": "exit",
  "claim": "Tightening the stop from 3.5x to 2.5x ATR raises expectancy by cutting the left tail of losing trades while the 30-bar time exit keeps winners intact.",
  "falsification_criterion": "If cost-stress expectancy or score falls below the incumbent (499 EUR / 12115), the tighter stop is stopping out trades that would have recovered and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0099",
  "night": "20261022",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11768.069516990174
 },
 {
  "experiment_id": "exp-20261022-0100",
  "night": "20261022",
  "kind": "entry",
  "claim": "Adding close_loc(1) > 0.5 to the incumbent entry (breakout closes in the upper half of its bar) filters wick-fakeout breakouts and raises cost-stressed expectancy above the incumbent.",
  "falsification_criterion": "Any result scoring below the incumbent (score < 12115 or expectancy < EUR 499), or a trade-count collapse with no per-trade expectancy gain, falsifies it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0101",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring closes at least 1% above the prior 10-day high removes marginal breakouts whose thin edges are consumed by the 80 bps per-leg costs, raising per-trade expectancy.",
  "falsification_criterion": "Expectancy or score falls below the incumbent (499.17 EUR / 12114.99), or n_trades collapses so total expectancy drops, proving marginal breakouts were contributing net edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11306.907016257688
 },
 {
  "experiment_id": "exp-20261022-0102",
  "night": "20261022",
  "kind": "entry",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0103",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakout bars that close in the upper half of their daily range have better 30-bar follow-through than weak-close breakouts, improving net expectancy after costs.",
  "falsification_criterion": "Any score below the incumbent's 12114.99 (expectancy < 499.17 EUR) disproves that close location adds edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0104",
  "night": "20261022",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (vol_ratio(60) < 1) to the incumbent entry raises per-trade expectancy enough to beat the incumbent score despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 12115, or expectancy gains failing to offset the trade-count drop (e.g., expectancy < 499 EUR), proving contraction adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0105",
  "night": "20261022",
  "kind": "entry",
  "claim": "Adding a bar-close confirmation (close_loc(1) > 0.6) to the breakout entry raises expectancy per trade by removing breakouts that fade into the close.",
  "falsification_criterion": "Score below the incumbent's 12114 (or expectancy < 499 EUR with a large drop in n_trades) would prove close location adds no selection power over the existing volume filter.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0106",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakout bars that close in the upper half of their range carry persistent buying pressure and follow through; filtering faded breakouts raises expectancy.",
  "falsification_criterion": "Any result with cost-stress score below the incumbent (12115) or n_trades collapsing (>40% drop) without a per-trade expectancy gain proves closing strength adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0107",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts preceded by volatility contraction (5-bar std below 20-bar std) persist better after costs than breakouts from already-expanded volatility.",
  "falsification_criterion": "Cost-stressed expectancy or score below the incumbent (499.17 EUR / 12115) on the same data, or n_trades collapsing with no expectancy gain.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0108",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring pre-breakout volatility contraction (vol_ratio(20) < 1) improves the incumbent breakout entry because squeeze-then-expand setups follow through better than breakouts from already-high volatility.",
  "falsification_criterion": "Score below incumbent 12115, or n_trades under ~450 without higher expectancy, proving contraction filters out more winners than losers.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0109",
  "night": "20261022",
  "kind": "entry",
  "claim": "10-day-high breakouts whose bar closes in the top quartile of its range earn higher net expectancy than weak-close breakouts.",
  "falsification_criterion": "Cost-stress expectancy or score below the incumbent (499.17 EUR / 12115), or fewer trades with no per-trade improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9645.741289406795
 },
 {
  "experiment_id": "exp-20261022-0110",
  "night": "20261022",
  "kind": "entry",
  "claim": "Replacing volume confirmation with a volatility-contraction filter (vol_ratio(60) < 1) on 10-day breakouts above the 50-bar SMA raises cost-stressed expectancy, because breakouts from compressed volatility trend rather than chop.",
  "falsification_criterion": "Score <= 12114.99 or cost_stress_expectancy_eur <= 499.17 vs the incumbent, or n_trades < 300 (contraction rarely co-occurs with breakouts), proves the squeeze mechanism inferior to volume confirmation.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7648.3251463931765
 },
 {
  "experiment_id": "exp-20261022-0111",
  "night": "20261022",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the incumbent breakout entry raises cost-stress expectancy because breakout gains decay beyond ~20% within the 30-bar hold",
  "falsification_criterion": "Cost-stress expectancy or score below the incumbent (499 EUR / 12115), showing the edge depends on uncapped tail winners",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0112",
  "night": "20261022",
  "kind": "exit",
  "claim": "Post-breakout drift exhausts within 20 bars; bars 21-30 add drawdown without adding return, so cutting the hold to 20 bars raises Sharpe and score at equal trade count.",
  "falsification_criterion": "Score or cost-stress expectancy falls below the incumbent (12114 / 499 EUR), proving the edge still accrues in bars 21-30.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0113",
  "night": "20261022",
  "kind": "exit",
  "claim": "Capping breakout winners at +15% beats letting them run 30 bars, because post-breakout momentum fades and gains are given back.",
  "falsification_criterion": "Score or expectancy below the incumbent (499 EUR/trade, score 12114) with fewer/lower winners would prove profit-capping destroys the fat-tail edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0114",
  "night": "20261022",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4.0x ATR raises net expectancy because some stopped-out breakout trades are noise-killed winners that would survive to the 30-bar exit.",
  "falsification_criterion": "Score below the incumbent's 12115 or expectancy below EUR 499 with the wider stop, or max drawdown rising disproportionately, proves the whipsaw-survival mechanism wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0115",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring abnormal volume (vol_z(10) > 1) rather than merely above-average volume improves breakout entry quality enough to beat the incumbent after costs.",
  "falsification_criterion": "Score below the incumbent's 12114 or cost-stress expectancy below 499 EUR with materially fewer than 884 trades would prove the stricter volume threshold is not the edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0116",
  "night": "20261022",
  "kind": "entry",
  "claim": "In an uptrend with volume expansion, closing within 2% of the 20-bar high predicts continuation as well as a fresh 10-bar breakout and yields more trades.",
  "falsification_criterion": "Score below the incumbent's 12115 or cost-stress expectancy below EUR 499 with the same 30d/3.5xATR/25% envelope, or a per-trade expectancy collapse showing the added entries are noise.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7160.3462373050925
 },
 {
  "experiment_id": "exp-20261022-0117",
  "night": "20261022",
  "kind": "entry",
  "claim": "Breakouts with expanding short-term volatility (vol_ratio(60) > 1) follow through better than contraction-phase breakouts; adding this filter raises per-trade expectancy.",
  "falsification_criterion": "Expectancy or score below the incumbent (499 EUR/trade, score 12115), or fewer trades with no expectancy gain, proves expansion filtering adds no edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7396.660660990642
 },
 {
  "experiment_id": "exp-20261022-0118",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in the upper half of its range filters fakeout breakouts and increases cost-stressed expectancy versus the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (12115 / 499 EUR) on the same backtest, or a trade count so low that the edge is indistinguishable from costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261022-0119",
  "night": "20261022",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its upper half filters wick-only breakouts and raises per-trade expectancy.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (12115 / 499 EUR) rejects the close-confirmation mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0000",
  "night": "20261023",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 2556.6271454464163
 },
 {
  "experiment_id": "exp-20261023-0001",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its upper half filters fakeout spikes and raises per-trade expectancy above the incumbent after costs.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score < 2556, expectancy < 88 EUR), or n_trades dropping with no per-trade improvement.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0002",
  "night": "20261023",
  "kind": "entry",
  "claim": "Filtering 20-day breakouts to those closing in the top 30% of their bar's range raises post-cost expectancy versus the unfiltered baseline.",
  "falsification_criterion": "Score or cost-stress expectancy below the baseline (2556.6 / 88.19 EUR), or n_trades collapsing under ~800 without a per-trade gain, proves rejected-breakout removal adds nothing.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2198.6292716430894
 },
 {
  "experiment_id": "exp-20261023-0003",
  "night": "20261023",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 10 bars, so extending the time exit from 10 to 30 bars raises per-trade expectancy after costs with entry, stop, and size unchanged.",
  "falsification_criterion": "Score below 2556.6 or expectancy below 88.19 EUR at similar trade count (~1221), or max drawdown above ~25%, would prove drift does not persist and the 10-bar exit is optimal.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 7896.559100382905
 },
 {
  "experiment_id": "exp-20261023-0004",
  "night": "20261023",
  "kind": "exit",
  "claim": "Capping the 30d breakout hold with a 25% take-profit raises expectancy by locking in momentum spikes before mean reversion erodes them.",
  "falsification_criterion": "Expectancy or score falls below the incumbent (321.83 EUR / 7896.6), proving the edge is right-tail driven and truncation destroys it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1411.1962819490077
 },
 {
  "experiment_id": "exp-20261023-0005",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR raises expectancy because 30-bar breakout trades are being stopped out on normal pullbacks before the trend completes.",
  "falsification_criterion": "If expectancy or score falls below the incumbent (321.8 EUR / 7896) with the wider stop, the shakeout-survival mechanism is wrong.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10132.138501188656
 },
 {
  "experiment_id": "exp-20261023-0006",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises net expectancy because premature volatility stop-outs, not bad entries, are the main edge leak on 20-day breakouts.",
  "falsification_criterion": "Net expectancy below the incumbent's 427.67 EUR, or max drawdown rising above ~25% with no expectancy gain, proves 3x ATR is optimal and the stop-room mechanism is exhausted.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9343.86100773022
 },
 {
  "experiment_id": "exp-20261023-0007",
  "night": "20261023",
  "kind": "entry",
  "claim": "20-bar breakouts preceded by volatility contraction (5d vol < 20d vol) earn higher net-of-cost expectancy than unfiltered breakouts.",
  "falsification_criterion": "Score below the incumbent's 10132 (or expectancy below 427.67 EUR) on the same 30d/3xATR envelope, or trade count collapsing without a proportional expectancy gain.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6791.166480005865
 },
 {
  "experiment_id": "exp-20261023-0008",
  "night": "20261023",
  "kind": "entry",
  "claim": "20-bar high breakouts taken only when price is above its 50-bar SMA outperform unfiltered breakouts.",
  "falsification_criterion": "Score below the incumbent (10132) or expectancy below €427 with the filter active proves alignment filtering removes more profit than it saves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0009",
  "night": "20261023",
  "kind": "entry",
  "claim": "20-day-high breakouts taken only when price is above the 50-bar SMA (trend-aligned regime) have higher per-trade expectancy than all 20-day-high breakouts.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 10132, expectancy 427.7 EUR) or fewer trades without improved expectancy, proving regime alignment adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0010",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6046.362870329664
 },
 {
  "experiment_id": "exp-20261023-0011",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA (sma_gap(50) > 0) on top of a 20-bar breakout raises net expectancy by removing counter-trend breakout losers.",
  "falsification_criterion": "Any result below the incumbent (score < 10132 or expectancy < 427.67 EUR), or a drop in n_trades without a proportional expectancy gain, proves trend confirmation subtracts edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0012",
  "night": "20261023",
  "kind": "entry",
  "claim": "20-bar breakouts with above-average 30-bar volume deliver higher per-trade expectancy than unfiltered breakouts after costs.",
  "falsification_criterion": "Score below the incumbent's 10132 or expectancy below 427.67 EUR, proving volume confirmation adds no edge after 80 bps costs.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10281.793823340162
 },
 {
  "experiment_id": "exp-20261023-0013",
  "night": "20261023",
  "kind": "entry",
  "claim": "20-bar breakouts with above-average volume that occur while price is above its 50-bar SMA (trend-aligned continuation rather than counter-trend spike) yield higher cost-stressed expectancy than the incumbent without this filter.",
  "falsification_criterion": "Score or expectancy_eur below the incumbent (10282 / €446), or the filter cuts trade count so sharply that per-trade edge fails to compensate, proving trend alignment adds no information beyond breakout plus volume.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10161.93949980498
 },
 {
  "experiment_id": "exp-20261023-0014",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its top 30% (close_loc(1) >= 0.7) filters wick breakouts and raises expectancy versus the incumbent.",
  "falsification_criterion": "Score below 10281 or cost-stress expectancy below 446 EUR, or trade count under ~600 without higher per-trade expectancy, disproves the close-quality mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7944.992996909202
 },
 {
  "experiment_id": "exp-20261023-0015",
  "night": "20261023",
  "kind": "exit",
  "claim": "A 10% take-profit on the incumbent captures the post-breakout momentum burst before it decays by the 30-bar time exit, raising expectancy.",
  "falsification_criterion": "Score below 10281 or expectancy below EUR 446 with take_profit_pct=0.10, showing winners kept running to bar 30 and capping them destroys value.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": -159.96272156420957
 },
 {
  "experiment_id": "exp-20261023-0016",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5842.043191690621
 },
 {
  "experiment_id": "exp-20261023-0017",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR increases expectancy because volume-confirmed breakouts that survive post-breakout volatility capture larger trend moves.",
  "falsification_criterion": "Expectancy or score below the incumbent (446 EUR / 10281), or drawdown rising above ~22% without sharpe improvement, proves the 3x stop was not the binding constraint.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9706.497850360189
 },
 {
  "experiment_id": "exp-20261023-0018",
  "night": "20261023",
  "kind": "entry",
  "claim": "20-day breakouts with volume surprise that close below 70% of the bar range have materially higher 30-day follow-through than strong-close breakouts, so filtering to weak closes raises expectancy.",
  "falsification_criterion": "Expectancy or score below the incumbent (446 EUR / 10281) would prove the weak-close edge is noise and that entry strength is not penalized.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7604.6040720917335
 },
 {
  "experiment_id": "exp-20261023-0019",
  "night": "20261023",
  "kind": "feature",
  "claim": "The vol_z(30) > 0 volume confirmation is redundant once the 30-bar exit and 3xATR stop are in place; breakout alone will match or exceed the incumbent's expectancy.",
  "falsification_criterion": "If expectancy or score falls materially below the incumbent (446 EUR / 10281), the volume filter is the active ingredient and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0020",
  "night": "20261023",
  "kind": "feature",
  "claim": "A 10-day breakout confirmed by above-average volume enters momentum earlier and more often, raising total cost-stressed edge versus the 20-day version.",
  "falsification_criterion": "Score below the incumbent's 10281 (or per-trade expectancy below ~446 EUR), proving the 20-day horizon is necessary and shorter breakouts are cost-dominated noise.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7987.735726157206
 },
 {
  "experiment_id": "exp-20261023-0021",
  "night": "20261023",
  "kind": "exit",
  "claim": "The volume-confirmed breakout drift completes within 20 bars; bars 21-30 add risk without expected return, so a 20-bar time exit raises Sharpe and cuts drawdown at equal or better expectancy.",
  "falsification_criterion": "Score below the incumbent's 10281 (or per-trade expectancy below 446 EUR) at 20 bars, or a sharp drop in n_trades-adjusted expectancy, proving the edge needs the full 30-bar hold.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5803.942544717426
 },
 {
  "experiment_id": "exp-20261023-0022",
  "night": "20261023",
  "kind": "feature",
  "claim": "A 30-day breakout carries more follow-through per trade than a 20-day breakout, raising expectancy above the incumbent's 446 EUR.",
  "falsification_criterion": "Expectancy at or below 446 EUR, or score below 10282, proving longer consolidation adds no edge over 20 days.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 11477.2387698353
 },
 {
  "experiment_id": "exp-20261023-0023",
  "night": "20261023",
  "kind": "feature",
  "claim": "Requiring a 60-bar high (instead of 30) selects stronger breakout regimes, raising per-trade expectancy enough to offset fewer trades.",
  "falsification_criterion": "Score below the incumbent's 11477 (or expectancy below 550 EUR after costs), or trade count collapsing with no per-trade gain, proving 30-bar highs are the optimum.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9867.639701412465
 },
 {
  "experiment_id": "exp-20261023-0024",
  "night": "20261023",
  "kind": "entry",
  "claim": "30-bar breakouts confirmed by above-average volume persist only when price is above the 50-bar SMA, so requiring sma_gap(50) > 0 raises cost-adjusted expectancy by removing counter-trend breakouts.",
  "falsification_criterion": "Score below the incumbent's 11477 (expectancy < 550 EUR or Sharpe < 0.427), or trade count collapsing under ~300 without an expectancy gain, proves the regime filter destroys more edge than it removes.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11122.077075344147
 },
 {
  "experiment_id": "exp-20261023-0025",
  "night": "20261023",
  "kind": "feature",
  "claim": "Breakouts from volatility contraction, not volume surges, drive the edge: vol_ratio(20) < 1 replacing vol_z(30) > 0 will beat the incumbent.",
  "falsification_criterion": "Score below the incumbent's 11477 (especially with n_trades collapsing and lower expectancy) proves the volume-surge confirmation, not squeeze, is operative.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6212.85817886029
 },
 {
  "experiment_id": "exp-20261023-0026",
  "night": "20261023",
  "kind": "exit",
  "claim": "Post-breakout thrusts peak early and mean-revert within the 30-bar window, so a 10% take-profit raises net expectancy versus riding to the time exit.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 11477 or expectancy < 550 EUR) proves winners run past +10% within 30 bars and the take-profit caps the edge away.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": -26.681986945166518
 },
 {
  "experiment_id": "exp-20261023-0027",
  "night": "20261023",
  "kind": "entry",
  "claim": "30-bar breakouts whose bar closes in the top quartile of its range (no upper wick rejection) continue better than weak-close breakouts.",
  "falsification_criterion": "Score or expectancy below incumbent (score 11477, expectancy 550 EUR) or trade count so low (<300) that the filter only starves the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9240.885985326782
 },
 {
  "experiment_id": "exp-20261023-0028",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR increases expectancy by keeping volatile continuation winners alive that the current stop ejects prematurely.",
  "falsification_criterion": "Expectancy below the incumbent's 550.25 EUR, Sharpe below 0.427, or drawdown materially above 21.1% would prove the wider stop only enlarges losses without saving winners.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10772.357772389327
 },
 {
  "experiment_id": "exp-20261023-0029",
  "night": "20261023",
  "kind": "exit",
  "claim": "A 2x ATR stop raises expectancy versus the incumbent 3x ATR stop by ejecting slow-bleed losers earlier.",
  "falsification_criterion": "Score below 11477 or expectancy below EUR 550, or n_trades collapsing with most exits at the stop, proving noise stops out eventual winners.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8945.571493456357
 },
 {
  "experiment_id": "exp-20261023-0030",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5687.835907313517
 },
 {
  "experiment_id": "exp-20261023-0031",
  "night": "20261023",
  "kind": "entry",
  "claim": "30d breakouts confirmed by above-average volume continue better when the close is within 5% of the 60-day high than when it sits deep below an old spike high.",
  "falsification_criterion": "Score below the incumbent's 11477, or expectancy <= 550 EUR, or n_trades collapsing under ~450 without an expectancy gain, would prove proximity to the 60d high is not the quality driver.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8389.509147854249
 },
 {
  "experiment_id": "exp-20261023-0032",
  "night": "20261023",
  "kind": "entry",
  "claim": "Filtering out parabolic overextension (ret(3) <= 0.2) after a 30-bar breakout with volume confirmation raises expectancy by avoiding blow-off tops that mean-revert.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 11477, expectancy 550 EUR), or trade reduction without per-trade improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6955.9340672343715
 },
 {
  "experiment_id": "exp-20261023-0033",
  "night": "20261023",
  "kind": "feature",
  "claim": "Breakouts above the prior 60-day high carry higher per-trade expectancy than 30-day-high breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Any score below the incumbent's 11477 (or expectancy below ~550 EUR/trade) on the same cost-stressed backtest; a drop to under ~250 trades would also falsify the quality-over-quantity claim by making the estimate unreliable.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0034",
  "night": "20261023",
  "kind": "entry",
  "claim": "Shortening the breakout window from 30 to 20 bars while keeping volume confirmation raises net score by entering continuation events earlier, capturing more of each run.",
  "falsification_criterion": "Score or expectancy below the incumbent (11477 / 550 EUR per trade) would prove the 30-bar horizon, not earlier entry or the volume filter, carries the edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0035",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9734.331855214197
 },
 {
  "experiment_id": "exp-20261023-0036",
  "night": "20261023",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the incumbent raises cost-stressed expectancy by converting breakout runs into realized gains before mean reversion.",
  "falsification_criterion": "Any of expectancy < 550 EUR, sharpe < 0.427, or score < 11477 vs the incumbent falsifies the hypothesis.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1801.0155775212143
 },
 {
  "experiment_id": "exp-20261023-0037",
  "night": "20261023",
  "kind": "exit",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0038",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop to 4x ATR reduces premature shakeout exits on high-volume breakout entries and raises expectancy versus the incumbent 3x stop.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (11477 / 550 EUR), or sharpe below 0.43, proves the wider stop only adds tail risk without saving winners.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0039",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9313.481052439225
 },
 {
  "experiment_id": "exp-20261023-0040",
  "night": "20261023",
  "kind": "feature",
  "claim": "Breakouts confirmed by prior volatility contraction (squeeze) outperform breakouts confirmed by above-average volume, because compressed-vol breakouts expand more reliably and clear the 80 bps cost hurdle.",
  "falsification_criterion": "Any candidate whose cost-stress expectancy falls below the incumbent's 550.25 EUR (or Sharpe below 0.427) proves volume confirmation is the superior mechanism and the squeeze hypothesis is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3921.8929197631046
 },
 {
  "experiment_id": "exp-20261023-0041",
  "night": "20261023",
  "kind": "exit",
  "claim": "The breakout edge is concentrated in the first 20 bars after entry, so cutting the time exit from 30 to 20 bars raises expectancy and Sharpe by shedding decaying tail exposure.",
  "falsification_criterion": "Score below the incumbent 11477 (or expectancy below 550 EUR / Sharpe below 0.43) would prove the extra holding time was carrying real edge, falsifying the decay hypothesis.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6297.926975354246
 },
 {
  "experiment_id": "exp-20261023-0042",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR on the breakout-with-volume entry improves expectancy by letting post-breakout winners run instead of being stopped out on normal retest noise.",
  "falsification_criterion": "Any score below the incumbent's 11477 (or expectancy below ~550 EUR) proves the wider stop only adds tail risk without payoff; fewer/larger losers would confirm the shakeout theory is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0043",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises expectancy because post-breakout volatility expansion prematurely stops out otherwise-winning trades.",
  "falsification_criterion": "With n_trades roughly unchanged, score falls below 11477 or expectancy below 550 EUR, proving 3xATR stops were not the binding constraint.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0044",
  "night": "20261023",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5053.8794498052775
 },
 {
  "experiment_id": "exp-20261023-0045",
  "night": "20261023",
  "kind": "feature",
  "claim": "30-bar high breakouts taken only when price is above the 50-bar SMA have higher per-trade expectancy than breakouts regardless of long-trend alignment.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score 11477, expectancy EUR 550), or a sharp trade-count drop without a compensating expectancy gain, proving the filtered dip-recovery breakouts were not drag.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0046",
  "night": "20261023",
  "kind": "entry",
  "claim": "30-bar breakouts with above-average volume that occur above the 50-bar SMA (longer uptrend) carry higher per-trade expectancy than the same breakouts below it.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 11477 / expectancy < EUR 550), or trade count collapses below ~300 with no expectancy gain.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0047",
  "night": "20261023",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10805.452389747483
 },
 {
  "experiment_id": "exp-20261023-0048",
  "night": "20261023",
  "kind": "entry",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11461.589038114258
 },
 {
  "experiment_id": "exp-20261023-0049",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its top 40% (close_loc(1) > 0.6) raises per-trade expectancy enough to beat the incumbent's score.",
  "falsification_criterion": "Any score below 11477, or a drop in n_trades without a proportional rise in expectancy_eur, shows close location adds no post-breakout edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0050",
  "night": "20261023",
  "kind": "entry",
  "claim": "Volume-confirmed 30-bar breakouts that close in the top 30% of their bar range persist longer than wick-fade breakouts.",
  "falsification_criterion": "Score below the incumbent (score < 11477 or expectancy < 550 EUR), or n_trades collapsing with no per-trade expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9406.894322556196
 },
 {
  "experiment_id": "exp-20261023-0051",
  "night": "20261023",
  "kind": "entry",
  "claim": "Adding a volatility-contraction precondition (vol_ratio(20) < 1) to the breakout entry improves expectancy because breakouts from compressed volatility follow through better.",
  "falsification_criterion": "Score below the incumbent's 11477, or n_trades collapsing with expectancy under ~550 EUR, proving compression adds no edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6522.079601480068
 },
 {
  "experiment_id": "exp-20261023-0052",
  "night": "20261023",
  "kind": "exit",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0053",
  "night": "20261023",
  "kind": "exit",
  "claim": "Adding a 15% take-profit to the 30-bar breakout system raises cost-stress expectancy because crypto pops mean-revert, and capping at +15% retains gains the time exit would otherwise give back.",
  "falsification_criterion": "Score/expectancy below incumbent (550 EUR, score 11477) with similar n_trades, proving the edge lives in the uncapped right tail and any winner truncation hurts.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 732.1782598295001
 },
 {
  "experiment_id": "exp-20261023-0054",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring a 60-bar high (instead of 30) with the same volume confirmation selects stronger regime breaks whose larger expected moves better cover costs.",
  "falsification_criterion": "Expectancy below the incumbent's 550.25 EUR or Sharpe below 0.427 on the same universe, especially if trade count collapses without a per-trade gain.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0055",
  "night": "20261023",
  "kind": "exit",
  "claim": "Cutting the time exit from 30 to 20 bars improves the incumbent because breakout drift is front-loaded and positions decay after ~3 weeks.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score 11477, expectancy 550 EUR), or inconsistent improvement across data halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0056",
  "night": "20261023",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9978.531905843953
 },
 {
  "experiment_id": "exp-20261023-0057",
  "night": "20261023",
  "kind": "entry",
  "claim": "Adding sma_gap(20) > 0 (price above its 20-bar mean) improves expectancy by filtering breakouts that occur below the short-term trend.",
  "falsification_criterion": "Score below incumbent 11477 or expectancy below 550 EUR per trade would prove the regime filter does not help.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11477.2387698353
 },
 {
  "experiment_id": "exp-20261023-0058",
  "night": "20261023",
  "kind": "exit",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0059",
  "night": "20261023",
  "kind": "entry",
  "claim": "Fresh breakouts closing within 5% of the prior 30-bar high have higher per-trade expectancy than extended chase entries, so capping breakout extension improves net score.",
  "falsification_criterion": "Score falls below the incumbent's 11477 (or n_trades drops materially with no gain in expectancy_eur above 550), showing extended breakouts were not the marginal losers.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7505.065386119887
 },
 {
  "experiment_id": "exp-20261023-0060",
  "night": "20261023",
  "kind": "entry",
  "claim": "A 60-day breakout with above-average volume yields higher per-trade expectancy than the 30-day version, continuing the horizon-quality gradient.",
  "falsification_criterion": "Cost-stress expectancy falls below the incumbent's 550 EUR, or trade count drops without a proportional per-trade gain, showing the breakout-horizon gradient is exhausted at 30 days.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0061",
  "night": "20261023",
  "kind": "entry",
  "claim": "Adding close_loc(1) >= 0.5 to the incumbent entry improves cost-stressed expectancy by discarding breakout bars that close weak within their range.",
  "falsification_criterion": "Score or expectancy below the incumbent's (11477 / 550 EUR), or trade-count loss with no per-trade gain, proves weak-close breakouts were not a drag.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10681.920777986896
 },
 {
  "experiment_id": "exp-20261023-0062",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts of the 30-day high preceded by volatility contraction (vol_ratio(60) < 1) have more 30-day follow-through than volume-confirmed breakouts.",
  "falsification_criterion": "Score below the incumbent's 11477, or expectancy below 550 EUR with n_trades collapsing under ~350 and no per-trade gain, proves contraction confirmation is inferior to volume confirmation.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6575.31080609228
 },
 {
  "experiment_id": "exp-20261023-0063",
  "night": "20261023",
  "kind": "exit",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0064",
  "night": "20261023",
  "kind": "exit",
  "claim": "Capping winners at 20% raises expectancy versus the incumbent's uncapped 30-day exit by capturing gains before post-breakout mean reversion within the holding window.",
  "falsification_criterion": "Expectancy or score below the incumbent (550.25 EUR / 11477) with materially reduced tail contribution, proving the uncapped ride was the source of edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0065",
  "night": "20261023",
  "kind": "exit",
  "claim": "Adding a 15% take-profit to the incumbent breakout entry raises net expectancy because 30-day crypto breakouts tend to mean-revert after large impulse moves, so locking gains beats giving them back before the time exit.",
  "falsification_criterion": "Score below the incumbent's 11477 (or expectancy < 550 EUR, sharpe < 0.427) proves profit truncation destroys more trend-following upside than it saves, killing the mean-reversion-after-impulse mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0066",
  "night": "20261023",
  "kind": "exit",
  "claim": "Because vol_z(30) > 0 selects high-volatility breakout bars with large early adverse excursion, a 4xATR stop (vs 3xATR) prevents premature stop-outs and raises expectancy and Sharpe.",
  "falsification_criterion": "Cost-stressed expectancy or Sharpe at or below the incumbent (550 EUR / 0.427), or max drawdown rising above ~25%, proving the wider stop only adds tail risk.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0067",
  "night": "20261023",
  "kind": "entry",
  "claim": "30-bar breakouts occurring while price is above the 50-bar SMA persist better than those below it, so filtering them raises expectancy above the incumbent.",
  "falsification_criterion": "Any result with expectancy below 550.25 EUR/trade or score below 11477.24 (e.g., the removed below-SMA trades were net positive, or the filter cuts too many winners).",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0068",
  "night": "20261023",
  "kind": "entry",
  "claim": "30-day breakouts with volume expansion perform better when price is above its 50-bar SMA, because long-horizon trend alignment separates genuine continuation from range spikes.",
  "falsification_criterion": "Cost-stress score at or below the incumbent's 11477 (or trade count collapses with expectancy inside the 80 bps cost band), proving trend alignment adds no edge beyond volume confirmation.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0069",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring the breakout to sit within 10% of the 60-bar high (fresh-high regime) filters mean-reverting recovery breakouts and raises net score above the incumbent.",
  "falsification_criterion": "Cost-stressed score at or below the incumbent's 11477, or trade count collapsing under ~450 with lower per-trade expectancy, proves deep-drawdown breakouts carry the edge instead of fresh-high ones.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9421.29377885957
 },
 {
  "experiment_id": "exp-20261023-0070",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts whose bar closes in the upper half of its range continue more profitably than fading breakouts, so requiring close_loc(1) >= 0.5 raises expectancy per trade.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (11477 / 550 EUR), or trade count falling with no per-trade expectancy gain, proving close location carries no post-cost information.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0071",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) before a volume-confirmed 30-bar breakout raises cost-stressed expectancy because squeeze breakouts sustain follow-through while breakouts from expanded volatility mean-revert.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's 550.25 EUR (score <= 11477), or the excluded high-vol_ratio trades showing better per-trade expectancy than the retained ones.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7170.9626362023655
 },
 {
  "experiment_id": "exp-20261023-0072",
  "night": "20261023",
  "kind": "exit",
  "claim": "Breakout trades that reach +10% give back part of the gain before the 30-bar exit, so a 10% take-profit raises expectancy versus holding to time exit.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 11477 or expectancy < 550 EUR), or Sharpe < 0.427, proving capped winners lose more than give-back saved.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0073",
  "night": "20261023",
  "kind": "exit",
  "claim": "Capping winners at +10% increases risk-adjusted score because breakout gains mean-revert before the 30-bar exit",
  "falsification_criterion": "Score below 11477 or expectancy down >10% with no drawdown improvement",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0074",
  "night": "20261023",
  "kind": "exit",
  "claim": "...",
  "falsification_criterion": "...",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0075",
  "night": "20261023",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the vol-confirmed breakout entry raises expectancy per trade by capturing breakout follow-through before it mean-reverts.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score 11477, expectancy 550 EUR) would prove the uncapped right tail, not reversion, carries the edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0076",
  "night": "20261023",
  "kind": "entry",
  "claim": "Nur Ausbrueche ueber dem 20-Tage-Mittel kaufen.",
  "falsification_criterion": "Der Filter halbiert die Trades und die Erwartung bleibt gleich.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11477.2387698353
 },
 {
  "experiment_id": "exp-20261023-0077",
  "night": "20261023",
  "kind": "entry",
  "claim": "Ein Ausbruch braucht Naehe zum 20-Tage-Hoch.",
  "falsification_criterion": "Die Erwartung sinkt, weil spaete Einstiege den Grossteil der Bewegung verpassen.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11477.2387698353
 },
 {
  "experiment_id": "exp-20261023-0078",
  "night": "20261023",
  "kind": "entry",
  "claim": "After at least three consecutive up closes (streak >= 0.6) while price sits above its 50-bar SMA, the next 30 bars drift upward enough to clear the 160 bps round-trip costs.",
  "falsification_criterion": "A backtest with non-positive cost-stress expectancy, or a score below the incumbent's 11477, proves the streak-continuation mechanism carries no net edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8038.107247017496
 },
 {
  "experiment_id": "exp-20261023-0079",
  "night": "20261023",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0080",
  "night": "20261023",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0081",
  "night": "20261023",
  "kind": "entry",
  "claim": "Replacing the strict new-30-bar-high gate with 60-bar Donchian channel proximity (top 5%) while keeping the volume confirmation increases trade count and post-cost expectancy by entering breakouts earlier at better prices.",
  "falsification_criterion": "A score below the incumbent's 11477 (or fewer than 8 trades) proves channel-proximity entry is inferior to the strict new-high gate under the same envelope.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0082",
  "night": "20261023",
  "kind": "entry",
  "claim": "Entering long on short-term weakness (price in the lower 40% of its 20-bar Donchian range) inside a long-term uptrend (close above the 50-SMA) yields higher net expectancy than chasing breakouts.",
  "falsification_criterion": "Net expectancy_eur below the incumbent's 550.25 or Sharpe below 0.427 on at least 8 trades; fewer than 8 trades would also make the hypothesis unevaluable and wrong as stated.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 638.9536427783083
 },
 {
  "experiment_id": "exp-20261023-0083",
  "night": "20261023",
  "kind": "entry",
  "claim": "Adding a climax filter (range_pct(1) < 0.05) to the incumbent breakout entry raises cost-stress expectancy above 550 EUR by excluding exhaustion bars that mean-revert within the 30-bar hold.",
  "falsification_criterion": "Score below the incumbent's 11477 (or expectancy below 550.25 EUR), or fewer than 8 trades / positive_symbol_share under 0.5, proving wide-range breakouts are not the toxic subset.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0084",
  "night": "20261023",
  "kind": "risk",
  "claim": "Reducing position size from 25% to 15% cuts the incumbent's 21% max drawdown more than it costs in expectancy, improving the risk-adjusted score.",
  "falsification_criterion": "Backtest with position_fraction 0.15: score below the incumbent's 11477 (Sharpe below 0.427 or drawdown not materially reduced below ~18%) proves full sizing is optimal.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0085",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts confirmed by short-term volatility expansion (ATR(7) > ATR(30)) yield higher per-trade expectancy after costs than the incumbent's volume confirmation.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 11477, expectancy EUR 550, 638 trades), or breadth/positive-symbol-share floor failure, proves volatility expansion is an inferior confirmation.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8960.352696366732
 },
 {
  "experiment_id": "exp-20261023-0086",
  "night": "20261023",
  "kind": "entry",
  "claim": "Among volume-confirmed breakouts, entries already extended more than 15% above the 50-bar EMA are blow-off tops that mean-revert within the 30-bar hold; excluding them raises expectancy.",
  "falsification_criterion": "A score at or below the incumbent (11477), a drop below 8 trades, or worse positive_symbol_share would prove the extension cap removes good trades rather than bad ones.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0087",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR on the incumbent breakout entry raises net expectancy because fewer positions are stopped out during normal post-breakout retracements within the 30-bar hold.",
  "falsification_criterion": "A backtest of this exact configuration scoring below the incumbent (score < 11477 or expectancy < 550 EUR/trade), or showing the saved stop-outs are offset by larger per-trade losses, proves the hypothesis wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0088",
  "night": "20261023",
  "kind": "entry",
  "claim": "Entering on a volume-confirmed near-high (close in top 15% of prior 20-bar Donchian range) captures trend earlier than a strict new-30-bar-high breakout and raises net expectancy over the incumbent.",
  "falsification_criterion": "A backtest scoring below the incumbent's 11477 (or fewer than 8 trades) proves the near-high entry adds no edge over the strict breakout.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0089",
  "night": "20261023",
  "kind": "entry",
  "claim": "Filtering 30-bar high breakouts with volume confirmation to bars where the signed daily-return streak is <= 0.4 (at most two consecutive up days) raises post-cost expectancy, because breakouts entered after 3+ up-day runs are extended and mean-revert.",
  "falsification_criterion": "Any of: post-cost expectancy <= 550 EUR (incumbent), fewer than 300 trades, or positive_symbol_share < 0.6, proving late/extended breakouts were not the marginal losers.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0090",
  "night": "20261023",
  "kind": "strategy",
  "claim": "After a >=10% drawdown from the 20-bar high, a close in the top quarter of the bar's range predicts positive multi-day continuation large enough to beat round-trip costs.",
  "falsification_criterion": "Cost-adjusted expectancy per trade <= 88 EUR (immutable baseline), fewer than 8 trades, or positive_symbol_share < 0.5.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": -482.69163687275307
 },
 {
  "experiment_id": "exp-20261023-0091",
  "night": "20261023",
  "kind": "entry",
  "claim": "Range-expansion bars (range_pct > atr_pct(14)) closing in the top quartile (close_loc > 0.75) precede positive 30-bar drift net of costs.",
  "falsification_criterion": "Cost-stress expectancy <= 0, n_trades < 8, or expectancy below the incumbent's 550 EUR/trade rejects the thrust mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4828.247365036167
 },
 {
  "experiment_id": "exp-20261023-0092",
  "night": "20261023",
  "kind": "entry",
  "claim": "Cryptos with >10% 20-day returns and above-average volume continue rising over the next 30 days even without a fresh 30-bar high.",
  "falsification_criterion": "Score or cost-stressed expectancy below the incumbent (breakout_dist(30)>0 AND vol_z(30)>0), or fewer than 8 trades, proving the fresh-high requirement is the edge and momentum+volume alone is insufficient after 160 bps round-trip costs.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0093",
  "night": "20261023",
  "kind": "entry",
  "claim": "Adding a long-trend confirmation (ema_gap(50) > 0) to the incumbent breakout+volume entry raises cost-adjusted expectancy by excluding counter-trend breakout traps.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 11477, expectancy 550 EUR), or fewer than 8 trades, proves the trend filter removes more edge than the traps it eliminates.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0094",
  "night": "20261023",
  "kind": "exit",
  "claim": "Widening the incumbent's stop from 3x to 4x ATR raises net expectancy because fewer momentum winners are stopped out before the 30-bar run completes.",
  "falsification_criterion": "expectancy_eur < 550.25 or score < 11477, or max_drawdown_pct > 25 with no expectancy gain, proving the 3x stop was not truncating the right tail.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0095",
  "night": "20261023",
  "kind": "entry",
  "claim": "Fresh 30-day breakouts entered within the first two days of the up-run (streak <= 0.4) produce higher net expectancy than the incumbent volume-confirmed breakout.",
  "falsification_criterion": "Net expectancy <= 550.25 EUR, score <= 11477, or fewer than 8 trades would prove run-freshness confirmation is not better than volume confirmation.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7781.500956836368
 },
 {
  "experiment_id": "exp-20261023-0096",
  "night": "20261023",
  "kind": "entry",
  "claim": "Replacing the volume-confirmation clause with a price-momentum clause (ret(5) > 0.02) at 30-bar breakouts preserves per-trade expectancy at or above 550 EUR, showing momentum strength rather than volume is the active ingredient.",
  "falsification_criterion": "A total score below the incumbent's 11477 (or expectancy below 550 EUR, or fewer than 8 trades) proves price momentum cannot substitute for volume confirmation and the hypothesis is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10482.570386773707
 },
 {
  "experiment_id": "exp-20261023-0097",
  "night": "20261023",
  "kind": "entry",
  "claim": "Excluding exhaustion-style breakout bars (current bar range below ATR(14)) raises per-trade expectancy of the breakout_dist(30)+vol_z(30) entry, because wide-range breakout bars mark short-term tops that revert before the 30-bar exit.",
  "falsification_criterion": "Expectancy_eur at or below the incumbent's 550.25 or score below 11477 at a healthy trade count, or evidence that the filtered-out wide-range bars carried the profits; fewer than 8 trades also falsifies.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0098",
  "night": "20261023",
  "kind": "feature",
  "claim": "Replacing the incumbent's volume confirmation with momentum-regime confirmation (breakout_dist(30) > 0 AND ret(20) > 0) improves net expectancy, because breakouts backed by positive 20-bar momentum continue while breakouts from 20-bar downtrends are dead-cat traps.",
  "falsification_criterion": "A score below the incumbent's 11477 or fewer than 8 trades proves ret(20) regime confirmation is inferior to vol_z(30) confirmation and refutes the hypothesis.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10561.411177843496
 },
 {
  "experiment_id": "exp-20261023-0099",
  "night": "20261023",
  "kind": "entry",
  "claim": "Bars opening at least 0.5% above the prior close while price is in the top decile of its 60-bar range continue upward over the next 30 bars by more than the 80 bps round-trip cost.",
  "falsification_criterion": "Cost-adjusted expectancy per trade below the incumbent's 550 EUR, fewer than 8 qualifying trades, or a score below 11477 disproves the gap-continuation mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5285.0077704810665
 },
 {
  "experiment_id": "exp-20261023-0100",
  "night": "20261023",
  "kind": "feature",
  "claim": "Volume-confirmed closes in the top 5% of the 60-bar range carry the same breakout edge as strict fresh 30d highs, but with better entry prices and more trades.",
  "falsification_criterion": "Expectancy or score below the incumbent (550 EUR / 11477), or fewer than 8 trades, proving the edge exists only at the exact fresh-high bar.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0101",
  "night": "20261023",
  "kind": "exit",
  "claim": "Adding a 15% take-profit to the incumbent breakout entry increases score by locking in continuation spikes before mean reversion.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 11477, expectancy 550 EUR) proves the edge sits in the uncapped right tail and the take-profit destroys it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0102",
  "night": "20261023",
  "kind": "entry",
  "claim": "Requiring price above the 50-period EMA at a 30-bar breakout raises cost-stressed expectancy above the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 11477, expectancy 550 EUR), or fewer than 8 trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10172.709817860616
 },
 {
  "experiment_id": "exp-20261023-0103",
  "night": "20261023",
  "kind": "entry",
  "claim": "Buying shallow 5-bar pullbacks (ret(5) < 0) within 8% of the 20-bar high while above the 50-bar SMA produces higher cost-adjusted expectancy than chasing 30-bar breakouts.",
  "falsification_criterion": "Any result with cost-stress expectancy at or below the incumbent's 550.25 EUR, or fewer than 100 trades, proves pullback entries are inferior and the family is abandoned.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2541.547034000315
 },
 {
  "experiment_id": "exp-20261023-0104",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts entered after 3+ consecutive up-days are locally exhausted, so excluding them (streak < 0.6) raises expectancy and Sharpe versus the incumbent.",
  "falsification_criterion": "Any result below the incumbent's expectancy (550 EUR) or Sharpe (0.43), or fewer than 8 trades, proves the excluded chase-entries were not the drag.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0105",
  "night": "20261023",
  "kind": "entry",
  "claim": "Skipping 30-bar breakouts whose close is already more than 5% above the prior 30-bar high improves net expectancy, because overextended breakout entries mean-revert within the 30-bar hold.",
  "falsification_criterion": "The capped entry scores below the incumbent (score < 11477 or expectancy < 550 EUR), or the cap removes so many trades that n_trades falls well below ~500 with no expectancy gain, proving overextension is not harmful.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0106",
  "night": "20261023",
  "kind": "entry",
  "claim": "Breakouts whose signal bar has a range smaller than ATR(14) (grind rather than spike) carry higher net expectancy than all breakouts combined.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (11477 / 550 EUR), or fewer than 8 trades, proving quiet-bar breakouts are not the profitable subset.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0107",
  "night": "20261023",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0108",
  "night": "20261023",
  "kind": "entry",
  "claim": "Capping the incumbent entry with atr_pct(30) < 0.10 raises per-trade net expectancy by skipping 30d breakouts that fire inside already-extreme volatility regimes, where follow-through is poor.",
  "falsification_criterion": "Fewer than 8 trades, or net expectancy/score at or below the incumbent (550 EUR / 11477), proves the extreme-volatility filter removes no bad entries and the hypothesis is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0109",
  "night": "20261023",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0110",
  "night": "20261023",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261023-0111",
  "night": "20261023",
  "kind": "entry",
  "claim": "Buying 30-bar breakouts only when price sits in the top decile of the 60-bar range (donchian_pos(60) >= 0.9) yields higher per-trade expectancy than the incumbent's volume filter, because breakouts below a two-month peak fail on overhead supply.",
  "falsification_criterion": "Score, expectancy (incumbent: 550.25 EUR/trade) or Sharpe (0.427) below the incumbent, or fewer than 8 trades, proves the overhead-resistance mechanism adds nothing over volume confirmation.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9946.13594677759
 },
 {
  "experiment_id": "exp-20261023-0112",
  "night": "20261023",
  "kind": "entry",
  "claim": "Fuenf-Tage-Momentum muss positiv sein.",
  "falsification_criterion": "Das Momentum ist bereits im Ausbruch enthalten; der Filter ist doppelt gezaehlt.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0000",
  "night": "20261024",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 2629.234618225931
 },
 {
  "experiment_id": "exp-20261024-0001",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2459.8705528937267
 },
 {
  "experiment_id": "exp-20261024-0002",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2537.797360837474
 },
 {
  "experiment_id": "exp-20261024-0003",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 10 days, so extending the time exit from 10 to 30 bars raises per-trade expectancy above the incumbent's 90.68 EUR.",
  "falsification_criterion": "With the same entry and stop, a 30-bar exit yielding expectancy <= 90.68 EUR or sharpe <= 0.243 proves mean return beyond bar 10 is ~0 or negative and the hypothesis is false.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0004",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding donchian_pos(60) >= 0.9 to the incumbent breakout entry filters out range-interior breakouts and raises net per-trade expectancy above the incumbent's 90.68 EUR.",
  "falsification_criterion": "A backtest with score <= 2629.23 or cost-stress expectancy <= 90.68 EUR (or fewer than 8 trades) proves the multi-month-high requirement adds nothing after the 80 bps costs.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 2925.395851699701
 },
 {
  "experiment_id": "exp-20261024-0005",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1324.9916791634707
 },
 {
  "experiment_id": "exp-20261024-0006",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": -97.6900531541243
 },
 {
  "experiment_id": "exp-20261024-0007",
  "night": "20261024",
  "kind": "entry",
  "claim": "Among donchian-confirmed 20-bar breakouts, entries already stretched far above the EMA (close/EMA(20)-1 >= 0.10) are overextended and mean-revert within 10 bars, so excluding them raises per-trade expectancy above the incumbent's 131.61 EUR.",
  "falsification_criterion": "A backtest with >= 8 trades showing expectancy <= 131.61 EUR or score <= 2925 proves the overextension filter adds no edge; if it merely cuts trades without lifting expectancy, the hypothesis is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 862.7365987909528
 },
 {
  "experiment_id": "exp-20261024-0008",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0009",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2780.0036065000913
 },
 {
  "experiment_id": "exp-20261024-0010",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout momentum persists beyond 10 bars, so extending the time exit to 20 bars raises cost-stress expectancy above the incumbent's 131.6 EUR.",
  "falsification_criterion": "Running the identical entry with time_exit_bars=20 yields score below 2925 or expectancy below 131.6 EUR, proving the drift decays within 10 bars.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4807.462933345472
 },
 {
  "experiment_id": "exp-20261024-0011",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1793.4103961989845
 },
 {
  "experiment_id": "exp-20261024-0012",
  "night": "20261024",
  "kind": "entry",
  "claim": "Fuenf-Tage-Momentum muss positiv sein.",
  "falsification_criterion": "Das Momentum ist bereits im Ausbruch enthalten; der Filter ist doppelt gezaehlt.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2925.395851699701
 },
 {
  "experiment_id": "exp-20261024-0013",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR reduces volatility shakeouts during the 20-day breakout hold and raises net expectancy.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's 239 EUR, or a drawdown increase with no expectancy gain, proves the stop-outs were informative trend-failure signals, not shakeouts.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 5107.183550241042
 },
 {
  "experiment_id": "exp-20261024-0014",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1679.054426993799
 },
 {
  "experiment_id": "exp-20261024-0015",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4393.34949739223
 },
 {
  "experiment_id": "exp-20261024-0016",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 20 bars, so extending the time exit to 30 bars captures continuation the 20-bar exit truncates.",
  "falsification_criterion": "Score below the incumbent's 5107 (or expectancy below 264 EUR) at 30 bars with at least 8 trades proves the drift is exhausted within 20 bars.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 9889.016690659735
 },
 {
  "experiment_id": "exp-20261024-0017",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3109.6337396207673
 },
 {
  "experiment_id": "exp-20261024-0018",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5037.848086986218
 },
 {
  "experiment_id": "exp-20261024-0019",
  "night": "20261024",
  "kind": "entry",
  "claim": "Incumbent breakout entries preceded by a >30% gain over the prior 20 bars are exhaustion moves with below-cost expectancy; excluding them raises net expectancy above the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (9889 / 544.57 EUR), or fewer than 8 trades remaining, or the excluded parabolic subset proving no worse than the kept trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6903.224129055148
 },
 {
  "experiment_id": "exp-20261024-0020",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1915.2693307815646
 },
 {
  "experiment_id": "exp-20261024-0021",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0022",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4xATR reduces whipsaw stop-outs on volatile breakouts and raises per-trade expectancy.",
  "falsification_criterion": "Any result at or below the incumbent (expectancy <= 544.57 EUR or score <= 9889), or a drawdown jump above ~25% with no expectancy gain, proves the wider stop only adds tail risk.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10361.3277551019
 },
 {
  "experiment_id": "exp-20261024-0023",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9059.712834637914
 },
 {
  "experiment_id": "exp-20261024-0024",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9842.74899443997
 },
 {
  "experiment_id": "exp-20261024-0025",
  "night": "20261024",
  "kind": "exit",
  "claim": "Capping winners at +50% raises expectancy because crypto breakout pumps that reach +50% within 30 days give back gains before the time exit.",
  "falsification_criterion": "Score below the incumbent's 10361 or expectancy below EUR 582 on >=8 trades, proving the tail winners keep running past +50% and the cap truncates the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7398.3251647385105
 },
 {
  "experiment_id": "exp-20261024-0026",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9415.458450114122
 },
 {
  "experiment_id": "exp-20261024-0027",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0028",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the close to clear the prior 20-bar high by at least 1% removes cost-dominated marginal breakouts and raises per-trade expectancy above the incumbent.",
  "falsification_criterion": "Score below 10361 (or expectancy below 582 EUR / fewer than 8 trades) proves marginal sub-1% breakouts carried the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9306.745984980427
 },
 {
  "experiment_id": "exp-20261024-0029",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4064.0922523773274
 },
 {
  "experiment_id": "exp-20261024-0030",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5580.217750280612
 },
 {
  "experiment_id": "exp-20261024-0031",
  "night": "20261024",
  "kind": "exit",
  "claim": "Breakout drift decays within 15 bars, so cutting the time exit from 30 to 15 bars raises expectancy per trade while cutting noise exposure in bars 16-30.",
  "falsification_criterion": "A 15-bar exit scoring below the incumbent (score 10361, expectancy 582) or producing fewer than 8 trades proves the tail of the hold carries the edge and the decay hypothesis is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5692.004913348326
 },
 {
  "experiment_id": "exp-20261024-0032",
  "night": "20261024",
  "kind": "entry",
  "claim": "Among incumbent signals, breakout bars closing in the upper 60% of their range (close_loc(1) >= 0.6) have higher forward expectancy than those closing weak, so adding this clause raises score above the incumbent.",
  "falsification_criterion": "Score <= 10361 or fewer than 8 trades, proving close location adds no information beyond breakout_dist(20) and donchian_pos(60).",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8656.902754478526
 },
 {
  "experiment_id": "exp-20261024-0033",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA on top of the incumbent breakout entry removes lower-high bear-rally breakouts and raises cost-stressed expectancy above 582.5 EUR.",
  "falsification_criterion": "Score below the incumbent's 10361 (or cost-stress expectancy below 582.5 EUR, or fewer than 8 trades) proves the long-horizon trend-alignment filter destroys edge rather than removing bad breakouts.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10361.3277551019
 },
 {
  "experiment_id": "exp-20261024-0034",
  "night": "20261024",
  "kind": "exit",
  "claim": "Adding a 15% take-profit to the incumbent improves score because 20-day crypto breakouts tend to mean-revert after ~15% extensions within the 30-bar holding window.",
  "falsification_criterion": "Score or expectancy below the incumbent (10361 / 582.5), or fewer than 8 trades, proving the right tail beyond +15% carries more profit than the reversion it gives back.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1026.7108781874008
 },
 {
  "experiment_id": "exp-20261024-0035",
  "night": "20261024",
  "kind": "exit",
  "claim": "Tightening the stop from 4x to 3x ATR raises net expectancy because it reduces the magnitude of stopped-out losers more than it adds premature stop-outs of eventual winners.",
  "falsification_criterion": "Net expectancy at or below the incumbent's 582.53 EUR (or fewer than 8 trades) on the identical entry proves the 4x stop is not past the optimum and closes the stop-width dimension.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0036",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding a volatility-regime gate (ATR(14) > 3% of price) to the incumbent breakout entry raises expectancy and Sharpe by dropping low-volatility breakouts, which are noise.",
  "falsification_criterion": "Score below the incumbent (expectancy < €582.53 or Sharpe < 0.412), fewer than 8 trades, or any sign that removed low-ATR trades were carrying the edge proves the hypothesis wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9881.128906910399
 },
 {
  "experiment_id": "exp-20261024-0037",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5453.9079177804615
 },
 {
  "experiment_id": "exp-20261024-0038",
  "night": "20261024",
  "kind": "entry",
  "claim": "Relaxing donchian_pos(60) from >=0.9 to >=0.75 adds profitable breakout-continuation trades so that total score rises via higher trade count without collapsing per-trade expectancy.",
  "falsification_criterion": "A score below the incumbent's 10361 (roughly: per-trade expectancy under ~450 EUR, or the trade-count gain failing to offset the dilution) proves the 0.9 threshold is load-bearing rather than a trade limiter.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9587.56439902338
 },
 {
  "experiment_id": "exp-20261024-0039",
  "night": "20261024",
  "kind": "entry",
  "claim": "Excluding overheated entries — breakouts where close is more than 5% above the prior 20-day high — raises cost-stressed expectancy by avoiding parabolic, exhaustion-prone entries.",
  "falsification_criterion": "A score or cost-stress expectancy below the incumbent (10361 / €582), or fewer than 8 trades, proves the overextension-exclusion mechanism wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7313.2021055258165
 },
 {
  "experiment_id": "exp-20261024-0040",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring a 30-bar new high (instead of 20) selects stronger momentum events whose 30-bar drift raises net expectancy per trade enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score or net expectancy below the incumbent (582.5 EUR/trade, score 10361), fewer than 8 trades, or per-trade expectancy not exceeding the incumbent's — any of these proves the longer-horizon breakout adds no quality, only scarcity.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10388.133246088439
 },
 {
  "experiment_id": "exp-20261024-0041",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its top 30% (close_loc(1) >= 0.7) filters faded stop-hunt breakouts and beats the incumbent's expectancy.",
  "falsification_criterion": "Score below 10361, expectancy below 582.53 EUR, or fewer than 8 trades proves intrabar confirmation adds nothing.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7554.350879173202
 },
 {
  "experiment_id": "exp-20261024-0042",
  "night": "20261024",
  "kind": "entry",
  "claim": "Shortening the breakout lookback from 20 to 10 bars while keeping the 60-bar donchian gate unchanged adds earlier momentum entries without diluting per-trade quality, raising total expectancy via higher trade count.",
  "falsification_criterion": "Score below the incumbent's 10361 or expectancy below 582 EUR (i.e., the added 10-bar-breakout trades average near zero and dilute the cohort), or fewer than 8 trades.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 11921.064200980943
 },
 {
  "experiment_id": "exp-20261024-0043",
  "night": "20261024",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the incumbent breakout entry raises cost-stressed expectancy because post-breakout gains mean-revert before the 30-bar time exit.",
  "falsification_criterion": "Score or expectancy below the incumbent (659.68 EUR/trade, score 11921), or fewer than 8 trades, or TP-exited trades realizing lower average return than trades held to 30 bars.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2165.0570108720226
 },
 {
  "experiment_id": "exp-20261024-0044",
  "night": "20261024",
  "kind": "exit",
  "claim": "Tightening the stop from 4x to 3x ATR on the incumbent entry raises expectancy by shrinking stop-out losses while rarely binding on eventual winners.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 11921, expectancy < 659.68 EUR) with at least 8 trades, proving the tighter stop truncates recoverable trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12025.83561463301
 },
 {
  "experiment_id": "exp-20261024-0045",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring atr_pct(14) > 0.03 at entry raises per-trade expectancy by excluding low-volatility breakouts whose 30-bar drift cannot clear the 160 bps round-trip cost.",
  "falsification_criterion": "Score below 11921 or expectancy below 659.68 EUR on >= 8 trades proves low-ATR breakouts are not the cost-drag; the volatility-clearance mechanism is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9843.000711299237
 },
 {
  "experiment_id": "exp-20261024-0046",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA on top of the 60-bar-range breakout entry raises expectancy because regime-aligned breakouts continue while below-mean breakouts mean-revert.",
  "falsification_criterion": "Score below the incumbent (11921) or expectancy below 659.68 EUR, or fewer than 8 trades, proves the long-trend filter destroys rather than sharpens the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11921.064200980943
 },
 {
  "experiment_id": "exp-20261024-0047",
  "night": "20261024",
  "kind": "entry",
  "claim": "Excluding 10-day-breakout entries where close sits more than 10% above EMA(10) (overextended, exhaustion-prone) raises net expectancy over the 30-bar hold.",
  "falsification_criterion": "Any score below the incumbent's 11921 or per-trade expectancy below 659.68 EUR on the same backtest disproves it; fewer than 8 trades would also falsify the tradeable form.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9011.150273981511
 },
 {
  "experiment_id": "exp-20261024-0048",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts from volatility compression (15d vol below 60d vol) carry higher expectancy than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "Score below the incumbent's 11921 (or fewer than 8 trades) proves the squeeze filter adds no net edge after 80 bps costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6193.085376633596
 },
 {
  "experiment_id": "exp-20261024-0049",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding ret(10) < 0.20 to the incumbent entry raises cost-stressed expectancy by skipping parabolic breakouts that mean-revert within the 30-bar hold.",
  "falsification_criterion": "The candidate is wrong if expectancy_eur <= 659.68 or Sharpe <= 0.4165 versus the incumbent, or the two halves disagree in sign (HALVES_INCONSISTENT).",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8577.952592180336
 },
 {
  "experiment_id": "exp-20261024-0050",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakout signals whose bar closes in the top 30% of its range have higher post-cost expectancy than those closing weak.",
  "falsification_criterion": "Adding close_loc(1) >= 0.7 to the incumbent scores below 11921, produces inconsistent halves, or fewer than 8 trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9612.583327679475
 },
 {
  "experiment_id": "exp-20261024-0051",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts emerging from a short pause in an uptrend — RSI(14) > RSI(7), i.e. not a one-bar vertical spike — carry higher cost-stressed expectancy than spike breakouts.",
  "falsification_criterion": "Score below the incumbent (11921), HALVES_INCONSISTENT, or n_trades < 8 proves the pause-vs-spike RSI distinction adds no edge.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": 6119.914555390413
 },
 {
  "experiment_id": "exp-20261024-0052",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakout entries where close is more than 5% above the 10-bar SMA are blow-off chases that mean-revert; trimming them raises portfolio Sharpe above the incumbent's 0.4163 while keeping most of the 484 trades.",
  "falsification_criterion": "Sharpe <= 0.4163 or expectancy <= 659.68 EUR with n_trades >= 8; or the trimmed stretched entries prove to be among the best performers, destroying edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1350.0284699564638
 },
 {
  "experiment_id": "exp-20261024-0053",
  "night": "20261024",
  "kind": "exit",
  "claim": "Capping the incumbent's breakout trades with a 20% take-profit raises expectancy by locking in momentum spikes that the 30-bar time exit otherwise gives back.",
  "falsification_criterion": "Score or cost-stress expectancy at or below the incumbent (11921 / €659.68), or lower expectancy per trade, proving the edge resides entirely in the uncapped right tail and must not be truncated.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0054",
  "night": "20261024",
  "kind": "exit",
  "claim": "A 10% take-profit improves the incumbent because crypto breakout gains are front-loaded and mean-revert before the 30-bar time exit.",
  "falsification_criterion": "Score below the incumbent's 11921 (or cost-stress expectancy below 659.68 EUR) with at least 8 trades proves the edge lives in the >10% right tail and the TP truncates it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": -120.11386718134688
 },
 {
  "experiment_id": "exp-20261024-0055",
  "night": "20261024",
  "kind": "entry",
  "claim": "Entering within 2% below the prior 10-bar high (instead of strictly above it) in the same donchian_pos(60) >= 0.9 context beats the confirmed-breakout incumbent on net-of-cost score, because it avoids paying the post-breakout chase premium.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score 11921, expectancy 659.68 EUR, 484 trades), or negative marginal expectancy on the added near-miss trades, proving confirmation is required.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9835.394561679714
 },
 {
  "experiment_id": "exp-20261024-0056",
  "night": "20261024",
  "kind": "entry",
  "claim": "Restricting the incumbent's breakouts to high-volatility regimes (ATR(14)/close > 4%) raises per-trade expectancy, because only volatility-supported moves are large enough to clear the round-trip costs within 30 bars.",
  "falsification_criterion": "Score or expectancy per trade below the incumbent (score 11921, expectancy 659.68 EUR), fewer than 8 trades, or inconsistent performance across data halves proves the volatility-regime premise wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9854.491706238714
 },
 {
  "experiment_id": "exp-20261024-0057",
  "night": "20261024",
  "kind": "entry",
  "claim": "At a 10-bar breakout, filtering on trend alignment (close above the 50-bar EMA) captures the incumbent's edge with more trades and a higher total score than the channel-position filter.",
  "falsification_criterion": "Score below the incumbent's 11921 (or expectancy below 659.68 EUR, or fewer than 40 trades) would prove the donchian channel-position mechanism — not generic trend alignment — drives the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9161.445461540945
 },
 {
  "experiment_id": "exp-20261024-0058",
  "night": "20261024",
  "kind": "entry",
  "claim": "10-bar-high breakouts occurring during 60-bar volatility contraction (vol_ratio(60) < 1) carry higher per-trade expectancy than the incumbent's Donchian-position-gated breakouts.",
  "falsification_criterion": "Score below the incumbent (11921) or expectancy below 659.68 EUR, or fewer than ~40 trades, proving the squeeze gate is inferior to or unviable versus donchian_pos(60) >= 0.9.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0059",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring a decisive breakout — close at least 1% above the prior 10-bar high — filters out marginal highs that get faded, raising per-trade cost-stressed expectancy above the incumbent's 660 EUR.",
  "falsification_criterion": "A result with at least 40 trades whose cost-stressed expectancy or score fails to beat the incumbent (660 EUR / score 11921), or fewer than 8 trades, proves breakout decisiveness adds no selectable quality.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10604.555545527925
 },
 {
  "experiment_id": "exp-20261024-0060",
  "night": "20261024",
  "kind": "entry",
  "claim": "New-high breakouts that occur without a short-term volatility spike (vol_ratio(60) <= 1.0) persist better after costs than spike-driven breakouts.",
  "falsification_criterion": "Score below the incumbent (11921) or expectancy below 660 EUR on >= 40 trades; also falsified if the filter cuts trades below 40, showing the calm-breakout regime is too rare to trade.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6193.085376633596
 },
 {
  "experiment_id": "exp-20261024-0061",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts above the prior 10-bar high whose bar closes in the top 30% of its range (close_loc >= 0.7) have higher net expectancy than the incumbent donchian-position filter.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 11921, expectancy 659.68 EUR), fewer than 8 trades, or inconsistent half-sample performance proves the closing-strength mechanism is inferior.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7408.326094931753
 },
 {
  "experiment_id": "exp-20261024-0062",
  "night": "20261024",
  "kind": "entry",
  "claim": "donchian_pos(30) >= 0.9 instead of donchian_pos(60) >= 0.9 adds trades without diluting per-trade edge, because the 60-bar window's stale extremes wrongly veto fresh 10-bar breakouts.",
  "falsification_criterion": "Fewer than 484 trades, or per-trade expectancy diluting enough that total expectancy/score falls below the incumbent (659.68 EUR / 11921), or inconsistent half-splits, proving the stale-extreme veto was protective.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10581.483302903664
 },
 {
  "experiment_id": "exp-20261024-0063",
  "night": "20261024",
  "kind": "exit",
  "claim": "Adding a 25% take-profit to the incumbent entry raises the score because breakout gains beyond +25% within 30 bars partially mean-revert before the time exit.",
  "falsification_criterion": "A score below the incumbent's 11921 (or per-trade expectancy below 659 EUR, or fewer than 8 trades) proves the right tail above +25% carries net edge and the cap destroys it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2813.2621009727436
 },
 {
  "experiment_id": "exp-20261024-0064",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring a 20-bar high instead of a 10-bar high, holding the 60-bar channel filter and envelope fixed, increases net expectancy by selecting persistent advances rather than one-week pops.",
  "falsification_criterion": "Any result below the incumbent (n_trades 484, expectancy 659.68 EUR, score 11921) or fewer than 8 trades proves the 10-bar breakout is the better persistence horizon and this variant is discarded.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0065",
  "night": "20261024",
  "kind": "exit",
  "claim": "Tightening the stop from 4x to 3x ATR raises expectancy because it cuts the average loss on stopped trades without stopping out eventual winners, which rarely draw down 3xATR from a donchian_pos(60)>=0.9 breakout.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 11921 or expectancy < 659 EUR), or a spike in stop-out frequency that outweighs the smaller per-trade loss.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0066",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0067",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 12896.607087267133
 },
 {
  "experiment_id": "exp-20261024-0068",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12448.648776910786
 },
 {
  "experiment_id": "exp-20261024-0069",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12936.414167725754
 },
 {
  "experiment_id": "exp-20261024-0070",
  "night": "20261024",
  "kind": "entry",
  "claim": "Replacing the RSI(14) overbought cap with a direct extension cap, ema_gap(50) < 0.15, improves net expectancy because 30-bar breakout holds fail mainly when price is extremely extended above its slow mean, a condition RSI only proxies.",
  "falsification_criterion": "Any result below the incumbent (score < 12896, expectancy < 786 EUR, or fewer than 8 trades) proves the extension-cap mechanism is wrong and adds breakout_dist+donchian_pos+ema_gap to the dead families.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2955.310676936242
 },
 {
  "experiment_id": "exp-20261024-0071",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5191.720634155175
 },
 {
  "experiment_id": "exp-20261024-0072",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0073",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the breakout to clear the 20-bar high instead of the 10-bar high (RSI filter dropped as inexpressible under the constant bound) raises per-trade expectancy by more than the loss in trade count.",
  "falsification_criterion": "Score below the incumbent's 12896.6, expectancy below 786.5 EUR, or fewer than 8 trades proves the 10-bar trigger is the binding edge, not level significance.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0074",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5047.639721802843
 },
 {
  "experiment_id": "exp-20261024-0075",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3468.504073130246
 },
 {
  "experiment_id": "exp-20261024-0076",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12896.607087267133
 },
 {
  "experiment_id": "exp-20261024-0077",
  "night": "20261024",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12896.607087267133
 },
 {
  "experiment_id": "exp-20261024-0078",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12082.964100342791
 },
 {
  "experiment_id": "exp-20261024-0079",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4386.313479141327
 },
 {
  "experiment_id": "exp-20261024-0080",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring closes to exceed the prior 10-bar high by at least 0.5% (dropping the RSI cap, whose 0-100 scale cannot be expressed under the [-5,5] constant limit) removes cost-dominated noise breakouts and raises per-trade expectancy above the incumbent.",
  "falsification_criterion": "Expectancy_eur at or below the incumbent's 786.47 EUR, or fewer than 8 trades, proves marginal breakouts were not the source of drag.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0081",
  "night": "20261024",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12893.956848904068
 },
 {
  "experiment_id": "exp-20261024-0082",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close >= 1% above the prior 10-bar high filters cost-doomed marginal pokes and raises net expectancy versus firing on any new high.",
  "falsification_criterion": "Score below the incumbent's 12896 (or expectancy below 786 EUR) with at least 8 trades proves marginal breakouts were not the losing subset.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0083",
  "night": "20261024",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 542.3785676033531
 },
 {
  "experiment_id": "exp-20261024-0084",
  "night": "20261024",
  "kind": "feature",
  "claim": "Replacing the absolute RSI-75 overbought cap with a relative deceleration cap rsi(7) < rsi(14) improves net expectancy by excluding accelerating blowoff breakouts while retaining strong-trend entries the fixed cap wrongly rejects.",
  "falsification_criterion": "Score below the incumbent's 12896.6 (or expectancy below 786 EUR) on at least 8 trades proves the relative cap is worse than the absolute 75 cap.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": 6119.914555390413
 },
 {
  "experiment_id": "exp-20261024-0085",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding a volume-confirmation filter (vol_z(30) > 0) to the incumbent breakout entry raises per-trade expectancy after costs, because breakouts on above-average volume follow through more reliably than low-volume ones.",
  "falsification_criterion": "A backtest with >=8 trades scoring below the incumbent (score < 12896 or expectancy < 786 EUR) would prove volume confirmation adds no net edge after costs; if trades fall below 8 the reading is void either way.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0086",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the breakout close to also set a fresh 20-bar high (dd_from_high(20) >= 0), eliminating overhead resistance from the past month, raises per-trade expectancy enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 12896 (per-trade expectancy under ~786 EUR) or fewer than 8 trades proves clearing 20-bar overhead adds no net edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0087",
  "night": "20261024",
  "kind": "entry",
  "claim": "Replacing the inexpressible RSI cap with a structural filter — close at a fresh 20-bar high (dd_from_high(20) >= 0) on top of the 10-bar breakout — removes failed breakouts into overhead resistance and raises per-trade expectancy enough to beat the incumbent.",
  "falsification_criterion": "Score below the incumbent's 12897, expectancy below 786 EUR, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0088",
  "night": "20261024",
  "kind": "entry",
  "claim": "The RSI(14) < 75 cap discards profitable hot breakouts; removing it while keeping breakout_dist(10) > 0 AND donchian_pos(60) >= 0.9 adds net-positive trades after costs and raises total score above the incumbent.",
  "falsification_criterion": "Score below the incumbent's 12896.6, or expectancy diluted well below ~786 EUR, proving that entries with RSI(14) >= 75 mean-revert after costs and the cap is protective rather than binding on profit.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0089",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts that occur during volatility contraction (5-bar std < 20-bar std) have higher cost-adjusted per-trade expectancy than all 20-bar breakouts.",
  "falsification_criterion": "Score or expectancy_eur below the incumbent (2629 / €90.68), or fewer than 8 trades, proves the squeeze filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0090",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts whose bar closes in the upper half of its range (close_loc >= 0.5) deliver higher net expectancy than unfiltered 20-bar breakouts, because weak closes mark faded bull-trap breakouts.",
  "falsification_criterion": "A backtest with score below the incumbent's 2629, or expectancy below 90.68 EUR per trade, or fewer than 8 trades, proves weak-close breakouts were not the drag on the baseline.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2396.069637029702
 },
 {
  "experiment_id": "exp-20261024-0091",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts with above-average volume (vol_z(30) > 1) have higher per-trade net expectancy than unconfirmed breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 2629 or net expectancy below ~90.7 EUR/trade with at least 8 trades would prove volume confirmation adds no edge here; fewer than 8 trades makes it unreadable rather than wrong.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0092",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts that occur at least 2% above the 50-bar SMA have higher per-trade expectancy than all 20-bar breakouts, because trend-aligned breakouts follow through while sub-mean breakouts are bear-market rallies.",
  "falsification_criterion": "If expectancy_eur <= 90.68 (incumbent) or score <= 2629 with n_trades >= 8, the regime filter adds nothing and the hypothesis is wrong; if n_trades < 8, the filter is too restrictive and the hypothesis is untestable as specified.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0093",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-day-high breakouts occurring while 5-bar volatility is below 20-bar volatility (squeeze releases) have higher net expectancy than breakouts in general.",
  "falsification_criterion": "A score below the incumbent's 2629 (expectancy €90.68) or fewer than 8 trades proves the squeeze filter adds no net edge after 80 bps costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0094",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0095",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2137.475387399232
 },
 {
  "experiment_id": "exp-20261024-0096",
  "night": "20261024",
  "kind": "exit",
  "claim": "Extending the time exit from 10 to 20 bars raises net expectancy because post-breakout drift persists beyond ten days and the fixed 160 bps round-trip cost is amortized over a larger gross move.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 2629.2, expectancy EUR 90.68) on the same entry population proves the ten-day horizon already captures the drift and the cost-amortization mechanism is wrong.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4722.828967080258
 },
 {
  "experiment_id": "exp-20261024-0097",
  "night": "20261024",
  "kind": "exit",
  "claim": "Extending the time exit from 20 to 30 bars raises post-cost expectancy because 20-day breakout momentum persists beyond one month.",
  "falsification_criterion": "Score below the incumbent 4722.8 (or expectancy below 181.77 EUR), or fewer than 8 trades, proving the momentum edge decays before day 30.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0098",
  "night": "20261024",
  "kind": "strategy",
  "claim": "A 20-bar-high breakout filtered to closes above the 50-bar SMA, held 20 days with a 2xATR stop, yields higher post-cost expectancy than the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (4723 / €181.77), or fewer than 8 trades, proves trend alignment adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0099",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2601.7317241082437
 },
 {
  "experiment_id": "exp-20261024-0100",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4336.313853097455
 },
 {
  "experiment_id": "exp-20261024-0101",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3692.6347012248657
 },
 {
  "experiment_id": "exp-20261024-0102",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Breakouts with volume z-score above 1.0 versus the prior 60 bars have higher per-trade expectancy than unconfirmed breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 4722 (expectancy_eur <= 181.77 with n_trades < 1017) proves volume confirmation adds no edge here.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0103",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1079.6391713091791
 },
 {
  "experiment_id": "exp-20261024-0104",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 409.89360456832304
 },
 {
  "experiment_id": "exp-20261024-0105",
  "night": "20261024",
  "kind": "exit",
  "claim": "Breakout drift persists beyond 20 days, so a 30-bar time exit captures more of the winner tail than the incumbent's 20-bar exit.",
  "falsification_criterion": "Expectancy <= EUR 181.77 (incumbent) or max drawdown > 35% at 30 bars, with entry rules unchanged, proving the persistence effect is exhausted by 20 days.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0106",
  "night": "20261024",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 8037.964117174164
 },
 {
  "experiment_id": "exp-20261024-0107",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0108",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2499.6116028130145
 },
 {
  "experiment_id": "exp-20261024-0109",
  "night": "20261024",
  "kind": "exit",
  "claim": "A 3xATR stop raises expectancy versus the incumbent 2xATR stop because post-breakout retraces currently stop out trades before the 30-bar trend materialises.",
  "falsification_criterion": "Cost-stress expectancy at or below the incumbent's 325 EUR, Sharpe below 0.364, or max drawdown above 35% would prove the whipsaw-stop mechanism wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0110",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Restricting 20-bar-high breakout entries to bars where close is above the 50-bar EMA (trend-aligned breakouts) raises per-trade expectancy after costs versus the incumbent.",
  "falsification_criterion": "Falsified if score falls below the incumbent's 8038, expectancy drops below EUR 325/trade, max drawdown exceeds 35%, or the filter leaves fewer than 8 trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8057.462280608135
 },
 {
  "experiment_id": "exp-20261024-0111",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0112",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3569.787116945484
 },
 {
  "experiment_id": "exp-20261024-0113",
  "night": "20261024",
  "kind": "exit",
  "claim": "With a 30-bar time exit, a 2xATR stop is stopped out by normal post-breakout retrace; widening to 3xATR raises expectancy by letting winners survive to the time exit.",
  "falsification_criterion": "Expectancy or sharpe at or below the incumbent (325.04 EUR / 0.364), or max drawdown above 35%, disproves the too-tight-stop mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0114",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR keeps 20-day breakout trades alive through ordinary pullback noise and raises net expectancy over the 30-bar hold.",
  "falsification_criterion": "Score or expectancy below the incumbent (8038 / EUR 325) or drawdown above 35%, showing the extra ATR of risk costs more than the recovered stop-outs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0115",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3697.560082549375
 },
 {
  "experiment_id": "exp-20261024-0116",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6474.944461733573
 },
 {
  "experiment_id": "exp-20261024-0117",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR increases cost-stress expectancy because 2xATR stopouts on fresh 20-day breakouts are mostly noise, not trend failure.",
  "falsification_criterion": "Any of: cost-stress expectancy below the incumbent's 325 EUR, score below 8038, or max drawdown above 35% would prove the noise-stopout mechanism wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0118",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR raises net expectancy because 2xATR stops are hit during routine post-breakout retests and truncate the 30-bar continuation.",
  "falsification_criterion": "Score or expectancy at or below the incumbent (325 EUR, score 8038), sharpe below 0.363, or max drawdown above 35% would prove the stop is not the binding constraint.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0119",
  "night": "20261024",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 9419.466015661996
 },
 {
  "experiment_id": "exp-20261024-0120",
  "night": "20261024",
  "kind": "strategy",
  "claim": "20-day breakouts occurring on abnormally high volume (vol_z(30) > 1) deliver higher per-trade expectancy than unfiltered breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 9419 (especially expectancy < 387.66 EUR), fewer than 8 trades, or drawdown > 35% would prove volume confirmation adds no net edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0121",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0122",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4328.100015771022
 },
 {
  "experiment_id": "exp-20261024-0123",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) at the 20-bar breakout entry raises cost-stressed expectancy above the incumbent's €387.66 by selecting squeeze breakouts with better follow-through.",
  "falsification_criterion": "Score below the incumbent's 9419, expectancy below €387.66, drawdown above 35%, or fewer than 8 trades — any of these proves the squeeze filter adds no edge here.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5192.226293544839
 },
 {
  "experiment_id": "exp-20261024-0124",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Breakouts accompanied by short-term volatility expansion (std of 15-bar returns above the 60-bar baseline, vol_ratio(60) > 1) carry materially higher per-trade expectancy than the full breakout population.",
  "falsification_criterion": "Score or cost_stress_expectancy below the incumbent (9419 / 387.66 EUR) on the expansion-filtered subset, or fewer than 8 trades — proving expansion adds nothing over the raw breakout.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6838.3308386152485
 },
 {
  "experiment_id": "exp-20261024-0125",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 2.5x to 3.0x ATR raises per-trade expectancy because 30-bar breakouts routinely shake out tighter stops before trending.",
  "falsification_criterion": "Score or expectancy below the incumbent (9419 / 387.66 EUR), or drawdown expanding past ~25% without an expectancy gain, proves wider stops only add tail risk.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0126",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 2.5x to 3.0x ATR reduces noise stop-outs on post-breakout retests and raises per-trade expectancy on the 30-bar horizon.",
  "falsification_criterion": "With at least 8 trades, expectancy_eur <= 387.66 or sharpe <= 0.387 versus the incumbent proves the wider stop adds no edge (it only increases loss size per stop-out).",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0127",
  "night": "20261024",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10325.58167953968
 },
 {
  "experiment_id": "exp-20261024-0128",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR on the unchanged 20-bar breakout entry raises per-trade expectancy by keeping positions alive through post-breakout volatility noise until the 30-bar time exit.",
  "falsification_criterion": "With at least 8 trades, any of score < 10325, expectancy < 432 EUR, or max_drawdown rising well above 22.1% (e.g. >25%) proves the noise-stop-out mechanism wrong and the wider stop harmful.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0129",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Requiring close above the 50-bar SMA at a 20-bar-high breakout raises net expectancy versus the unfiltered incumbent by removing counter-trend false breakouts.",
  "falsification_criterion": "A backtest scoring below the incumbent (expectancy < 432 EUR or score < 10326), or a trade count collapse, proves the trend-regime filter does not isolate better breakouts.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0130",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4793.88885196708
 },
 {
  "experiment_id": "exp-20261024-0131",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0132",
  "night": "20261024",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10271.423526141658
 },
 {
  "experiment_id": "exp-20261024-0133",
  "night": "20261024",
  "kind": "strategy",
  "claim": "20-bar-high breakouts whose bar volume is more than one standard deviation above the prior 10-bar mean (vol_z(10) > 1) have higher per-trade expectancy than unfiltered breakouts.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score < 10325.58, expectancy < 432.13 EUR) or fewer than 8 trades, proving volume confirmation adds no edge after 80 bps per leg.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0134",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Breakout entries taken only when price is above the 50-bar EMA (trend-aligned) carry higher per-trade expectancy than counter-trend breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent (score < 10325.6 or expectancy < 432.1 EUR with n_trades >= 8), or evidence that breakout trades with ema_gap(50) <= 0 were not net losers after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0135",
  "night": "20261024",
  "kind": "strategy",
  "claim": "A 20-bar high breakout taken only when price is above its 50-bar SMA yields higher per-trade expectancy than the unfiltered incumbent, because counter-trend snapback breakouts below the long mean revert.",
  "falsification_criterion": "Any of: score below the incumbent's 10325 (or cost-stress expectancy below 432 EUR), fewer than 8 trades, or the filter removing trades while per-trade expectancy stays flat or falls — proving trend alignment adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0136",
  "night": "20261024",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 808.8403056332578
 },
 {
  "experiment_id": "exp-20261024-0137",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Adding a 50-bar SMA trend-alignment filter to the 20-day breakout entry raises cost-net per-trade expectancy above the incumbent's 432 EUR.",
  "falsification_criterion": "Score below 10325 or expectancy at or below 432 EUR (or fewer than 8 trades) proves trend alignment adds no post-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0138",
  "night": "20261024",
  "kind": "strategy",
  "claim": "20-bar-high breakouts taken only when price is above the 50-bar SMA (trend-aligned) have higher net expectancy than all breakouts combined.",
  "falsification_criterion": "Discard if trades fall below 8, or if score/expectancy fail to beat the incumbent (score 10326, expectancy €432) — i.e. the countertrend trades it removes were not the losing ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0139",
  "night": "20261024",
  "kind": "entry",
  "claim": "Filtering 20-bar breakouts to those with close above the 50-bar SMA raises net expectancy by removing counter-trend breakouts that mean-revert.",
  "falsification_criterion": "The candidate scores below the incumbent (score < 2629 or cost-stress expectancy < 90.68 EUR) on at least 8 trades, or trade count and expectancy are statistically indistinguishable from the incumbent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0140",
  "night": "20261024",
  "kind": "exit",
  "claim": "Breakout drift is front-loaded: exiting at 5 bars instead of 10 retains most per-trade expectancy while roughly doubling turnover, raising total expectancy net of costs.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (90.68 EUR/trade, score 2629), or n_trades stays near 1221 with lower per-trade expectancy — proving the edge is not front-loaded and not turnover-limited.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1119.4129121861142
 },
 {
  "experiment_id": "exp-20261024-0141",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts confirmed by price above the 50-bar SMA carry higher net expectancy than unfiltered breakouts, because sub-SMA50 breakouts are failing counter-trend rallies.",
  "falsification_criterion": "Cost-stress expectancy or score below the incumbent (90.68 EUR / 2629), fewer than 8 trades, or inconsistent half-split results would prove the trend-confirmation mechanism wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0142",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts filtered by a higher-timeframe regime clause (close above the 50-bar SMA) have higher net expectancy than unfiltered breakouts, because breakouts against the dominant trend are mean-reversion traps.",
  "falsification_criterion": "The hypothesis is wrong if this variant's cost-stressed expectancy or score falls below the incumbent's (90.68 EUR / 2629), or if the filter cuts the trade count so far below 1221 that the sample is uninformative while per-trade expectancy does not improve.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0143",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0144",
  "night": "20261024",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4722.828967080258
 },
 {
  "experiment_id": "exp-20261024-0145",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar-high breakouts occurring during volatility contraction (vol_ratio(20) < 1) have higher cost-adjusted expectancy than unfiltered breakouts, because squeeze breakouts follow through while expansion breakouts mean-revert after costs.",
  "falsification_criterion": "Cost-stress expectancy or score below the incumbent (EUR 181.77 / 4722), fewer than 8 trades, or a BELOW_INCUMBENT verdict showing the removed vol_ratio>=1 trades were not the losers.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0146",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close > 50-bar SMA (sma_gap(50) > 0) at the 20-bar breakout raises net expectancy by removing counter-trend breakouts.",
  "falsification_criterion": "Cost-stress expectancy below the incumbent's 181.77 EUR (or score below 4722, or < 8 trades) proves the regime filter adds no edge after 80 bps per leg.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0147",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0148",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3601.2139671437753
 },
 {
  "experiment_id": "exp-20261024-0149",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0150",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA at the 20-bar breakout raises cost-adjusted expectancy versus the incumbent.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score < 4722 or expectancy < 181.77 EUR), or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0151",
  "night": "20261024",
  "kind": "exit",
  "claim": "Extending the time exit from 20 to 30 bars raises cost-stress expectancy because breakout momentum persists beyond 20 days.",
  "falsification_criterion": "Cost-stress expectancy or score at or below the incumbent (181.77 EUR/trade, score 4723), or fewer than 8 trades, proving the horizon optimum is at or below 20 bars.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0152",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0153",
  "night": "20261024",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 5486.4019744639145
 },
 {
  "experiment_id": "exp-20261024-0154",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts that occur while close is above the 50-bar SMA have higher post-cost expectancy than breakouts below it.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 5486, expectancy < 215 EUR), or fewer than 8 trades, proving trend alignment adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0155",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts occurring above the 50-bar SMA persist longer and are more profitable after costs than breakouts below it.",
  "falsification_criterion": "Score below the incumbent's 5486 (or fewer than 8 trades) with the filter applied proves trend confirmation adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0156",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0157",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4135.68829516139
 },
 {
  "experiment_id": "exp-20261024-0158",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0159",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the 20-bar breakout to be aligned with the long trend (close above the 50-bar SMA) raises per-trade expectancy after costs versus the incumbent breakout alone.",
  "falsification_criterion": "Any backtest result with expectancy_eur <= 215.19 (incumbent), score below 5486, or n_trades < 8 proves trend alignment adds no value here and the clause is discarded.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0160",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring ATR(7)/close < ATR(30)/close (volatility contraction) at the 20-bar breakout entry raises cost-stressed expectancy above the incumbent's 215.19 EUR.",
  "falsification_criterion": "Any of: score below 5486.4, expectancy below 215.19 EUR, or fewer than 8 trades — proving volatility compression adds no edge to this breakout.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2531.8551741994143
 },
 {
  "experiment_id": "exp-20261024-0161",
  "night": "20261024",
  "kind": "exit",
  "claim": "Extending the time exit from 20 to 30 bars raises expectancy because 20-day breakouts in crypto continue trending beyond 20 bars.",
  "falsification_criterion": "Score below the incumbent's 5486 or cost-stressed expectancy below 215 EUR/trade on >=8 trades proves the edge decays after 20 bars.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 9419.466015661996
 },
 {
  "experiment_id": "exp-20261024-0162",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0163",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA at breakout entry improves net expectancy by filtering counter-trend breakouts.",
  "falsification_criterion": "Score below the incumbent's 9419, split-half inconsistency, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0164",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the incumbent entry raises cost-stressed expectancy by excluding counter-trend breakouts that occur below the 50-bar mean.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (9419 / 387.66 EUR), fewer than 8 trades, or inconsistent performance across data halves would prove the regime filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0165",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0166",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0167",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0168",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4328.100015771022
 },
 {
  "experiment_id": "exp-20261024-0169",
  "night": "20261024",
  "kind": "entry",
  "claim": "Capping extension — breakout_dist(20) > 0 AND sma_gap(50) < 0.10 — raises net expectancy versus the incumbent by excluding overextended breakouts that mean-revert.",
  "falsification_criterion": "n_trades < 8, or expectancy below the incumbent's 387.66 EUR, or split-half inconsistency (either half worse than the incumbent without the filter) proves the extension cap destroys edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0170",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring price above the 50-bar SMA at the 20-bar breakout raises cost-stressed expectancy by removing countertrend breakouts.",
  "falsification_criterion": "Cost-stressed expectancy or score below the incumbent (387.66 EUR / 9419), or trade count falls without per-trade expectancy improving.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0171",
  "night": "20261024",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 498.22953575176916
 },
 {
  "experiment_id": "exp-20261024-0172",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the 20-bar breakout to occur above the 50-bar SMA (established uptrend) raises per-trade expectancy after costs by removing bear-rally breakout traps.",
  "falsification_criterion": "Score or expectancy below the incumbent (9419 / 387.66 EUR per trade), split-half inconsistency, or under 8 trades — any of these proves the trend filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0173",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring price above the 50-bar SMA at breakout entry raises per-trade expectancy versus the incumbent by removing failed snapback breakouts that occur below the long-term mean.",
  "falsification_criterion": "If cost-stressed expectancy fails to exceed the incumbent's 387.66 EUR (or score falls below 9419) while trade count drops, the removed trades were not below-average and the regime filter has no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0174",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close above SMA(50) on top of the 20-bar breakout entry raises cost-adjusted expectancy by removing counter-trend breakouts that mean-revert.",
  "falsification_criterion": "A backtest with at least 8 trades whose cost-stressed expectancy or score fails to beat the incumbent (90.68 EUR / 2629.2), or whose halves are inconsistent, proves the trend filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0175",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar-high breakouts taken only when price is above the 50-bar SMA (uptrend regime) have higher net expectancy than all breakouts.",
  "falsification_criterion": "Score or cost_stress_expectancy_eur below the incumbent (2629 / 90.7 EUR), or HALVES_INCONSISTENT, or fewer than 8 trades — any of these proves the regime filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0176",
  "night": "20261024",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 2998.426338615555
 },
 {
  "experiment_id": "exp-20261024-0177",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0178",
  "night": "20261024",
  "kind": "entry",
  "claim": "Restricting 20-bar breakouts to bars where close is above the 50-bar EMA raises net expectancy by removing failed breakouts that occur below the long-term trend.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 2998, expectancy < EUR 104.5), inconsistent half-splits, or fewer than 8 trades proves the trend filter adds nothing.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 3067.773707754513
 },
 {
  "experiment_id": "exp-20261024-0179",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding a cap on recent run-up (ret(10) < 0.15) to the incumbent entry removes late-chase breakout entries and raises per-trade expectancy after costs.",
  "falsification_criterion": "Score below the incumbent (3068), per-trade expectancy at or below 109 EUR, fewer than 8 trades, or inconsistent halves.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1820.3282358708057
 },
 {
  "experiment_id": "exp-20261024-0180",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1510.720339565866
 },
 {
  "experiment_id": "exp-20261024-0181",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2742.2376380000624
 },
 {
  "experiment_id": "exp-20261024-0182",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 10 bars, so extending the time exit to 15 bars increases expectancy.",
  "falsification_criterion": "Score or expectancy below the incumbent (3067 / 109 EUR) with >=8 trades proves the drift decays within 10 bars.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4762.11824334632
 },
 {
  "experiment_id": "exp-20261024-0183",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 138.00385136488094
 },
 {
  "experiment_id": "exp-20261024-0184",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2971.6991323985044
 },
 {
  "experiment_id": "exp-20261024-0185",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout drift in long-term-uptrend coins persists beyond 15 bars, so extending the time exit from 15 to 20 bars increases net expectancy after costs.",
  "falsification_criterion": "Any result below the incumbent (expectancy 182.48 EUR, score 4762) or under 8 trades proves the drift decays by day 15 and the 20-bar exit only adds fee drag.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 5479.662323437766
 },
 {
  "experiment_id": "exp-20261024-0186",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 935.4967908293394
 },
 {
  "experiment_id": "exp-20261024-0187",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4608.118402356214
 },
 {
  "experiment_id": "exp-20261024-0188",
  "night": "20261024",
  "kind": "exit",
  "claim": "Crypto breakouts that extend 15% or more within the 20-bar holding window mean-revert, so a 15% take-profit raises expectancy versus the time-only exit.",
  "falsification_criterion": "Score or cost-stress expectancy falls below the incumbent (5479.7 / 219.4 EUR) at similar trade count, proving the right tail beyond +15% was the source of the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 281.4018365690953
 },
 {
  "experiment_id": "exp-20261024-0189",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5498.836099756733
 },
 {
  "experiment_id": "exp-20261024-0190",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2908.3363438805636
 },
 {
  "experiment_id": "exp-20261024-0191",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 20 bars, so extending the time exit to 30 bars raises expectancy per trade.",
  "falsification_criterion": "Score or expectancy below the incumbent (5479 / 219 EUR) or max drawdown above ~26%, showing momentum decays after day 20.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 9652.203700467853
 },
 {
  "experiment_id": "exp-20261024-0192",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1049.8198203269608
 },
 {
  "experiment_id": "exp-20261024-0193",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9677.710897748228
 },
 {
  "experiment_id": "exp-20261024-0194",
  "night": "20261024",
  "kind": "exit",
  "claim": "With the 30-bar time exit capturing the trend, widening the stop from 2.5x to 4.0x ATR raises expectancy by letting winners survive normal retracements.",
  "falsification_criterion": "Score or expectancy below the incumbent (9652 / 402.6 EUR), or drawdown rising above ~23% without an expectancy gain, proves tight stops were recycling capital better.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9478.105100871362
 },
 {
  "experiment_id": "exp-20261024-0195",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9344.801448521725
 },
 {
  "experiment_id": "exp-20261024-0196",
  "night": "20261024",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0197",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5499.158430283221
 },
 {
  "experiment_id": "exp-20261024-0198",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts above the EMA50 taken during volatility contraction (vol_ratio(20) < 1) have higher net expectancy than the same entries without the filter.",
  "falsification_criterion": "Score below 9652 or expectancy below 402.6 EUR, or fewer than 8 trades, disproves the contraction-breakout mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6519.424296648665
 },
 {
  "experiment_id": "exp-20261024-0199",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its upper 40% (close_loc(1) > 0.6) filters rejected breakouts and raises per-trade expectancy above the incumbent.",
  "falsification_criterion": "Score below the incumbent (9652) or expectancy <= 402.64 EUR with >= 8 trades proves the strong-close filter adds nothing; a trade count collapse also falsifies it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9011.380425983301
 },
 {
  "experiment_id": "exp-20261024-0200",
  "night": "20261024",
  "kind": "exit",
  "claim": "Capping winners at +20% raises net expectancy versus letting them run to the 30-bar exit, because breakout momentum decays and open profits revert.",
  "falsification_criterion": "Score or expectancy below the incumbent (9652 / 402.6 EUR) on at least 8 trades, or max drawdown worsening above ~21%.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1822.791088042489
 },
 {
  "experiment_id": "exp-20261024-0201",
  "night": "20261024",
  "kind": "exit",
  "claim": "Tightening the stop from 2.5x to 2.0x ATR prunes failed breakouts faster than it kills eventual winners, raising net expectancy after the 80 bps per-leg costs.",
  "falsification_criterion": "A score below the incumbent (9652 / €402.6 expectancy / 0.389 Sharpe), or a sharp drop in n_trades or positive_symbol_share showing the tighter stop is ejecting trades that would have recovered within the 30-bar hold.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0202",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the 20-bar breakout distance to exceed one ATR(14) of daily range improves net expectancy over the fixed > 0 threshold.",
  "falsification_criterion": "Score or net expectancy below the incumbent (9652 / 402.64 EUR) on at least 8 trades, or fewer trades with no per-trade improvement, proves breakout magnitude beyond zero carries no edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8122.865848727269
 },
 {
  "experiment_id": "exp-20261024-0203",
  "night": "20261024",
  "kind": "entry",
  "claim": "Allowing entries up to 1% below the prior 20-bar high while above the 50-EMA (anticipation instead of confirmation) adds a profitable superset of the incumbent's trades.",
  "falsification_criterion": "Score below the incumbent's 9652, or expectancy below ~403 EUR despite a higher trade count, proving near-miss breakouts are net losers after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8745.221955692328
 },
 {
  "experiment_id": "exp-20261024-0204",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout volatility expansion causes premature 2.5xATR stop-outs; widening to 3.5xATR lets more winners survive to the 30-day exit and raises expectancy.",
  "falsification_criterion": "Score below the incumbent's 9652 or cost-stress expectancy below ~403 EUR, especially if max drawdown rises above ~25% without an expectancy gain, proves stop-outs were not the binding constraint.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 9944.598024721274
 },
 {
  "experiment_id": "exp-20261024-0205",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4.0x ATR reduces premature stop-outs during post-breakout retests and raises net expectancy on the same entries.",
  "falsification_criterion": "Any of: score below the incumbent's 9944.6, expectancy below 429.05 EUR, or fewer than 8 trades proves the wider stop adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0206",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring short-term volatility expansion (atr_pct(7) > atr_pct(30)) on top of the incumbent breakout entry raises net expectancy above the incumbent's 429 EUR per trade.",
  "falsification_criterion": "A backtest scoring at or below the incumbent (expectancy <= 429 EUR or score <= 9944) or fewer than 8 trades proves volatility expansion adds no net edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9574.863218028631
 },
 {
  "experiment_id": "exp-20261024-0207",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) at breakout entry raises expectancy versus the incumbent by selecting breakouts launched from compressed rather than already-expanded ranges.",
  "falsification_criterion": "Score below the incumbent's 9944.6 or expectancy below 429 EUR on >= 8 trades proves the compression filter adds no edge; fewer than 8 trades voids the reading.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5874.386422309132
 },
 {
  "experiment_id": "exp-20261024-0208",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in the upper half of its range (close_loc(1) > 0.5) filters failed intraday spikes and raises expectancy of the incumbent breakout entry.",
  "falsification_criterion": "Score below the incumbent's 9944 (or expectancy below 429 EUR / fewer than 8 trades) with the clause enabled, proving closing location carries no information beyond the breakout itself.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9991.59960101902
 },
 {
  "experiment_id": "exp-20261024-0209",
  "night": "20261024",
  "kind": "exit",
  "claim": "Capping winners at +20% take-profit raises the incumbent's score because 30-bar crypto breakout moves mean-revert before the time exit.",
  "falsification_criterion": "Score or expectancy below the incumbent (9944.6 / 429 EUR) proves the edge lives in the uncapped tail and the take-profit destroys it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2514.8760116013627
 },
 {
  "experiment_id": "exp-20261024-0210",
  "night": "20261024",
  "kind": "entry",
  "claim": "Excluding overheated entries by adding rsi(7) < rsi(14) to the incumbent entry raises cost-stress expectancy, because breakouts whose short-horizon RSI has already accelerated above the 14-bar RSI are exhaustion moves that mean-revert over the 30-bar hold.",
  "falsification_criterion": "A backtest with at least 8 trades whose cost-stress expectancy or score falls below the incumbent (429 EUR / 9945) proves the momentum-deceleration filter removes more good entries than bad ones.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": 3332.059770273106
 },
 {
  "experiment_id": "exp-20261024-0211",
  "night": "20261024",
  "kind": "entry",
  "claim": "Close in the top decile of the prior 60-bar range during a confirmed 50-EMA uptrend (donchian_pos(60) > 0.9 AND ema_gap(50) > 0) captures trend continuation earlier and on more bars than strict 20-bar new-high breakouts, raising total score.",
  "falsification_criterion": "A score below the incumbent's 9944.6 (added trades diluting expectancy more than they add, or fewer than 8 trades) proves the strict new-high requirement is essential and the top-decile-range entry is noise.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8364.405559832829
 },
 {
  "experiment_id": "exp-20261024-0212",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring a decisive breakout (close >= 0.5% above the prior 20-bar high) filters noise pokes and raises per-trade expectancy enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "A score below 9945, or expectancy not exceeding 429 EUR while trades drop materially below 800, proves breakout decisiveness adds no edge.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10300.877675317977
 },
 {
  "experiment_id": "exp-20261024-0213",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding sma_gap(20) > 0 to the incumbent entry filters counter-trend breakouts and raises expectancy above 454 EUR.",
  "falsification_criterion": "Score below the incumbent's 10301, expectancy below 454 EUR, or fewer than 8 trades proves the intermediate-mean alignment adds nothing beyond the 50-EMA condition.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10300.877675317977
 },
 {
  "experiment_id": "exp-20261024-0214",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4.0x ATR improves expectancy because breakout entries are otherwise stopped out by ordinary volatility before the 30-day drift develops.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 10300.9, expectancy 454.3 EUR, Sharpe 0.398) at >=8 trades proves wider stops no longer help and the stop dimension reverses past 3.5x.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10031.522352097474
 },
 {
  "experiment_id": "exp-20261024-0215",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakout entries taken during extreme volatility (atr_pct(14) >= 0.08) are net losers after costs because the ATR-scaled stop makes their losses disproportionately large, so excluding them raises total profit.",
  "falsification_criterion": "Score at or below the incumbent's 10301 (or n_trades < 8) would prove hyper-vol breakouts were not net losers and the tail-risk mechanism is false.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6876.023068249706
 },
 {
  "experiment_id": "exp-20261024-0216",
  "night": "20261024",
  "kind": "exit",
  "claim": "Breakout momentum decays within 15 bars, so a 15-bar time exit matches or beats the incumbent's 30-bar hold on score.",
  "falsification_criterion": "A 15-bar exit scoring below the incumbent (score < 10301 or sharpe < 0.398) with >=8 trades proves the edge lives in the back half of the hold.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4917.4183112961855
 },
 {
  "experiment_id": "exp-20261024-0217",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in the upper half of its range (close_loc > 0.5) filters weak-close fakeouts and raises expectancy above the incumbent's 454 EUR.",
  "falsification_criterion": "Score or expectancy at or below the incumbent (score <= 10301, expectancy <= 454 EUR), or fewer than 8 trades, proves the close-location filter adds nothing after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10340.207903877312
 },
 {
  "experiment_id": "exp-20261024-0218",
  "night": "20261024",
  "kind": "exit",
  "claim": "Capping winners at +25% raises expectancy versus the incumbent because breakout gains decay before the 30-bar time exit.",
  "falsification_criterion": "Score below the incumbent's 10300 (or expectancy below 454 EUR) with at least 8 trades, which would prove the uncapped right tail beyond +25% carries the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2374.045351607512
 },
 {
  "experiment_id": "exp-20261024-0219",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) before a 20-day breakout raises net expectancy versus the incumbent entry.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (10301 / 454 EUR), or fewer than 8 trades, proving squeeze-filtered breakouts are not better after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6387.279985902787
 },
 {
  "experiment_id": "exp-20261024-0220",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding donchian_pos(60) > 0.9 to the incumbent raises per-trade expectancy by removing 20-bar breakouts that occur deep inside a collapsed 60-bar range, which fade under overhead supply.",
  "falsification_criterion": "If expectancy_eur falls below the incumbent's 454.30 (or the filter keeps fewer than 8 trades / score below 10300), proximity to the long-range high carries no information and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0221",
  "night": "20261024",
  "kind": "entry",
  "claim": "Excluding breakout entries that occur on a single-bar pump of 10% or more raises per-trade expectancy, because such bars mark short-term exhaustion rather than durable breakout.",
  "falsification_criterion": "Cost-stress score or expectancy below the incumbent (454.30 EUR, score 10300.9), or the filtered-out trades showing better average returns than the kept ones, proving the pump bars were continuation fuel, not exhaustion.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7097.417682537401
 },
 {
  "experiment_id": "exp-20261024-0222",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding a volume-spike confirmation (vol_z(30) > 1) to the incumbent breakout entry raises expectancy because breakouts on above-average volume follow through more often than thin-volume breakouts.",
  "falsification_criterion": "Score or expectancy below the incumbent (10301 / 454 EUR) on at least 8 trades, or fewer than 8 trades generated, proving volume adds no information beyond the price clauses.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0223",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3.5x to 4.0x ATR increases expectancy because fewer post-breakout winners are stopped out during normal retests of the breakout level.",
  "falsification_criterion": "Any result below the incumbent (expectancy < 454 EUR or score < 10301) with >= 8 trades proves the 3.5x stop was not the binding constraint.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0224",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0225",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8363.710080329533
 },
 {
  "experiment_id": "exp-20261024-0226",
  "night": "20261024",
  "kind": "entry",
  "claim": "A volatility-scaled breakout entry - close at least one ATR(14) above the prior 20-bar high - yields a higher score than the incumbent's fixed 0.5% threshold plus EMA trend filter.",
  "falsification_criterion": "A score below the incumbent's 10300 (including n_trades < 8, or per-trade net expectancy failing to compensate for the reduced trade count) proves the adaptive threshold adds no edge over the fixed threshold.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8278.485496785455
 },
 {
  "experiment_id": "exp-20261024-0227",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts in an uptrend that also close in the top 30% of the 60-bar Donchian range (near multi-month highs) have higher per-trade expectancy than all 20-bar breakouts.",
  "falsification_criterion": "Score below the incumbent's 10300 (or expectancy <= 454 EUR) with >= 8 trades proves overhead-resistance filtering adds nothing; fewer than 8 trades also falsifies it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0228",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding donchian_pos(60) > 0.75 to the incumbent entry filters lower-high breakouts inside larger downtrends and raises expectancy per trade enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 10300.88 (e.g. because n_trades or Sharpe drop more than expectancy gains), or expectancy_eur <= 454.30, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0229",
  "night": "20261024",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10243.58277308224
 },
 {
  "experiment_id": "exp-20261024-0230",
  "night": "20261024",
  "kind": "exit",
  "claim": "Capping winners at +20% improves risk-adjusted score because post-breakout gains beyond 20% decay or reverse before the 30-bar exit.",
  "falsification_criterion": "Score below the incumbent's 10300 or cost-stress expectancy below 454 EUR with at least 8 trades, proving uncapped tails were the source of the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2424.2018876118705
 },
 {
  "experiment_id": "exp-20261024-0231",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring the breakout to occur in the upper fifth of the 60-bar range (donchian_pos(60) >= 0.8) removes overhead-supply retracement breakouts and raises per-trade expectancy enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score below the incumbent's 10300 (or n_trades < 8), i.e. the discarded mid-range breakouts carried the edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0232",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts that also sit in the top 30% of the 60-bar range (donchian_pos(60) > 0.7) yield higher per-trade expectancy than breakouts occurring lower in the long range, because the latter are mostly bear-market bounces.",
  "falsification_criterion": "Score below the incumbent (10300.9), fewer than 8 trades, or expectancy below 454 EUR — i.e. the filter cuts trades without improving quality, proving long-range position carries no information beyond the incumbent clauses.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0233",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0234",
  "night": "20261024",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10712.972836199777
 },
 {
  "experiment_id": "exp-20261024-0235",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding vol_z(30) > 0 as a volume-confirmation clause to the incumbent breakout entry raises per-trade expectancy enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Any score below the incumbent's 10713 (or expectancy below EUR 466, or fewer than 8 trades) proves volume confirmation adds no net edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0236",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts occurring while ema_gap(20) exceeds ema_gap(50) — accelerating momentum — carry higher per-trade expectancy than the incumbent's level-only ema_gap(50) > 0 filter.",
  "falsification_criterion": "If the candidate's score or expectancy falls below the incumbent (466 EUR/trade, score 10713) on the identical envelope, or it produces fewer than 8 trades, momentum acceleration adds no edge and the hypothesis is disproved.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1868.4607377561626
 },
 {
  "experiment_id": "exp-20261024-0237",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises net expectancy because breakout entries are frequently stopped out by normal post-breakout retest volatility before the 30-bar momentum horizon completes.",
  "falsification_criterion": "A score below the incumbent's 10713 (or expectancy below EUR 466, or fewer than 8 trades) proves the wider stop merely enlarges losses on genuinely bad trades and 3xATR is retained.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0238",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0239",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8650.687640782235
 },
 {
  "experiment_id": "exp-20261024-0240",
  "night": "20261024",
  "kind": "entry",
  "claim": "Restricting entries to breakouts that also close in the top fifth of the 60-bar range (donchian_pos(60) > 0.8) removes rebound-within-range breakouts and raises expectancy per trade.",
  "falsification_criterion": "If the filtered candidate scores below the incumbent (score 10713, expectancy 466 EUR, 780 trades) or the filter removes mostly winners, the multi-timeframe range-position mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0241",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR increases expectancy because fewer 30-day breakout trades are stopped out by volatility noise before the trend completes.",
  "falsification_criterion": "Score or expectancy below the incumbent (466 EUR/trade, score 10713) with at least 8 trades proves the 3x stop is already optimally wide and wider stops only enlarge losses.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0242",
  "night": "20261024",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10616.005729914465
 },
 {
  "experiment_id": "exp-20261024-0243",
  "night": "20261024",
  "kind": "entry",
  "claim": "Adding a volume-confirmation filter (vol_z(30) > 0) to the incumbent breakout raises per-trade expectancy by screening out low-participation breakouts.",
  "falsification_criterion": "The candidate scores below the incumbent (expectancy < 466 EUR or score < 10713) or produces fewer than 8 trades, proving volume adds no incremental edge at these costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0244",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0245",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5262.223823383192
 },
 {
  "experiment_id": "exp-20261024-0246",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts above the 20-bar high in a 50-EMA uptrend that also carry volume above 1 std of the prior 30 bars (vol_z(30) > 1) are demand-driven and earn higher net expectancy per trade than the unfiltered incumbent.",
  "falsification_criterion": "A backtest scoring below the incumbent's 10713 (expectancy under 466 EUR/trade, or fewer than 8 trades) proves volume confirmation adds no edge and kills the breakout_dist+ema_gap+vol_z family.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0247",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises per-trade expectancy because 3xATR stop-outs prematurely terminate breakouts that recover within the 30-bar horizon.",
  "falsification_criterion": "Score below the incumbent's 10713 or expectancy below 466 EUR with at least 8 trades; also refuted if max drawdown rises well above 21.5% with no expectancy gain.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0248",
  "night": "20261024",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9597.087176231105
 },
 {
  "experiment_id": "exp-20261024-0249",
  "night": "20261024",
  "kind": "entry",
  "claim": "Volume-confirmed breakouts (vol_z(30) > 0.5) carry higher per-trade expectancy than the incumbent's unfiltered breakout entry.",
  "falsification_criterion": "Score below the incumbent's 10713, or expectancy below 466 EUR, or fewer than 8 trades, proves volume confirmation adds no net edge after the 80 bps costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0250",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring volume confirmation (vol_z(30) > 1.0) on the incumbent breakout setup raises net expectancy by filtering out low-participation fake breakouts.",
  "falsification_criterion": "Net expectancy below the incumbent's 466 EUR/trade, score below 10713, or fewer than 8 trades, proving volume adds no quality beyond the price filter.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0251",
  "night": "20261024",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 628.3934502379069
 },
 {
  "experiment_id": "exp-20261024-0252",
  "night": "20261024",
  "kind": "entry",
  "claim": "A volume-confirmed breakout (vol_z(30) > 1) improves cost-stressed expectancy over the incumbent entry.",
  "falsification_criterion": "Score below the incumbent's 10713, n_trades < 8, or HALVES_INCONSISTENT.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0253",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts with above-average volume (vol_z(30) > 1) persist longer than thin-volume breakouts, so adding this filter to the incumbent entry raises per-trade expectancy.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (10713 / 466 EUR), fewer than 8 trades, or a drop in positive_symbol_share would prove the volume-confirmation mechanism adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0254",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts occurring on abnormally high volume (vol_z(30) > 1.0) have higher cost-stressed per-trade expectancy than the unfiltered incumbent breakout.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's 90.68 EUR, fewer than 8 trades, or split-half inconsistency — any of these proves volume confirmation adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0255",
  "night": "20261024",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2412.8529833510283
 },
 {
  "experiment_id": "exp-20261024-0256",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-day breakouts occurring on abnormal volume (vol_z(30) > 1) have higher per-trade expectancy than unfiltered breakouts, enough to beat the incumbent score despite fewer trades.",
  "falsification_criterion": "Backtest score below the incumbent 2629.2, per-trade expectancy at or below EUR 90.68, inconsistent halves, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0257",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts confirmed by abnormal volume (vol_z(30) > 1.5) have higher per-trade expectancy than unconfirmed breakouts, enough to clear costs.",
  "falsification_criterion": "Score or expectancy per trade at or below the incumbent's (90.68 EUR, 1221 trades), or fewer than 8 trades, proves volume confirmation adds no edge.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0258",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-day breakouts entered after a >=10% run over the prior 5 bars are overextended chases with sub-cost forward returns, so excluding them raises net per-trade expectancy versus the incumbent.",
  "falsification_criterion": "The candidate scores below the incumbent, produces fewer than 8 trades, or the excluded trades' forward returns are at least as good as the kept trades' (filter removes winners).",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1662.4737185161557
 },
 {
  "experiment_id": "exp-20261024-0259",
  "night": "20261024",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR lets breakout entries survive normal retest noise and ride to the 10-bar exit, raising net expectancy.",
  "falsification_criterion": "With identical entry (breakout_dist(20) > 0), 10-bar time exit, 25% size and stop 3xATR, cost-stressed expectancy falls at or below the incumbent's €90.68 or Sharpe drops below 0.243 — proving the 2x stop is not the binding constraint.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 3388.9479291516654
 },
 {
  "experiment_id": "exp-20261024-0260",
  "night": "20261024",
  "kind": "exit",
  "claim": "Extending the time exit from 10 to 20 bars increases expectancy because breakout trends need more than 10 bars to realise the tail that the 3xATR stop is designed to survive.",
  "falsification_criterion": "Expectancy or score below the incumbent (119.09 EUR / 3388.9) on the same universe, or fewer than 8 trades; that would prove the 10-bar exit, not the tail, carries the edge.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 6278.645519653347
 },
 {
  "experiment_id": "exp-20261024-0261",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0262",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts that also close in the top decile of the prior 60-bar range deliver higher per-trade expectancy than all 20-bar breakouts, because longer-horizon confirmation filters weak bear-market rips.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (6278 / 250.4 EUR), fewer than 8 trades, or a positive-symbol share collapse below 0.70 would prove the confirmation filter adds no net edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5056.734097724472
 },
 {
  "experiment_id": "exp-20261024-0263",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 20 bars, so extending the time exit from 20 to 30 bars raises expectancy above the incumbent.",
  "falsification_criterion": "Expectancy <= 250.41 EUR or score < 6278 at >= 8 trades would prove the drift dies within 20 bars and refute the persistence hypothesis.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0264",
  "night": "20261024",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the incumbent raises per-trade expectancy because crypto breakout spikes routinely fade before the 20-bar time exit, which currently gives the spike back.",
  "falsification_criterion": "With at least 8 trades, expectancy_eur <= 250.41 or score <= 6278.6 proves winners run past +20% more often than they fade; metrics identical to the incumbent mean the TP never binds and the mechanism is dead.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1743.7089524565342
 },
 {
  "experiment_id": "exp-20261024-0265",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 20 bars, so extending the time exit from 20 to 30 bars raises per-trade expectancy above the incumbent's 250 EUR.",
  "falsification_criterion": "With at least 8 trades, a score below 6278 or expectancy below 250 EUR proves the drift decays before bar 30 and the 20-bar cap is already optimal.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0266",
  "night": "20261024",
  "kind": "entry",
  "claim": "20d breakouts whose close is within 5% of the 60d high have higher cost-stressed expectancy than all 20d breakouts, because overhead supply below old peaks causes breakout failure.",
  "falsification_criterion": "A backtest with at least 8 trades showing expectancy at or below the incumbent's 250.41 EUR, or fewer than 8 trades, proves the overhead-supply filter does not add edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0267",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0268",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0269",
  "night": "20261024",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0270",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0271",
  "night": "20261024",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 6420.008736801763
 },
 {
  "experiment_id": "exp-20261024-0272",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0273",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar high breakouts taken only when close > SMA50 have higher per-trade expectancy than all breakouts, because counter-trend breakouts mean-revert while trend-aligned ones continue.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score 6420, expectancy EUR 257), or the sma_gap(50)>0 subset showing mean return no better than the excluded trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0274",
  "night": "20261024",
  "kind": "exit",
  "claim": "Post-breakout momentum persists beyond 20 bars, so extending the time exit from 20 to 30 bars raises cost-stress expectancy above the incumbent.",
  "falsification_criterion": "Cost-stress expectancy or score below the incumbent (€257 / 6420) would prove the edge decays by day 20 and the longer hold only adds exposure.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 10271.423526141658
 },
 {
  "experiment_id": "exp-20261024-0275",
  "night": "20261024",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0276",
  "night": "20261024",
  "kind": "exit",
  "claim": "Raising the stop from 3.5x to the 4x ATR ceiling increases net expectancy because fewer 30-day breakout trades are stopped out by noise before their drift matures.",
  "falsification_criterion": "Score or expectancy below the incumbent (10271 / 433.86 EUR), i.e. the extra losers held to the 30d time exit outweigh the saved stop-outs, proving the width-returns relation peaked at 3.5xATR.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9540.40692394851
 },
 {
  "experiment_id": "exp-20261024-0277",
  "night": "20261024",
  "kind": "feature",
  "claim": "Entering on a close above the prior 60-bar high yields higher per-trade expectancy than the prior 20-bar high, because older levels are stronger information events.",
  "falsification_criterion": "A backtest with >=8 trades whose expectancy <= 433.86 EUR or score <= 10271 (incumbent) proves the level-age mechanism wrong; <8 trades also falsifies it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9585.705095537645
 },
 {
  "experiment_id": "exp-20261024-0278",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA when a 20-day high breaks removes counter-trend false breakouts and raises expectancy over the incumbent.",
  "falsification_criterion": "A backtest with at least 8 trades showing score or expectancy below the incumbent (433.86 EUR / 10271), or fewer than 8 trades, proves the trend filter destroys rather than improves the breakout edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0279",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts entered during volatility compression (vol_ratio(60) < 1.0) yield higher per-trade expectancy than unconditional 20-bar breakouts.",
  "falsification_criterion": "Score below the incumbent's 10271 (expectancy below 434 EUR) on at least 8 trades, or fewer than 8 trades, proves compression adds no edge over the raw breakout.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0280",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0281",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0282",
  "night": "20261024",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0283",
  "night": "20261024",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4616.449945848241
 },
 {
  "experiment_id": "exp-20261024-0284",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar-high breakouts accompanied by abnormal volume (vol_z(60) > 1) carry higher post-cost expectancy than unfiltered breakouts.",
  "falsification_criterion": "Post-cost expectancy at or below the incumbent's 433.86 EUR, or fewer than 8 trades, proves volume confirmation adds nothing here.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0285",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring volatility contraction before a 20-bar breakout (vol_ratio(20) < 1) raises net expectancy above the unfiltered incumbent.",
  "falsification_criterion": "Score at or below the incumbent's 10271 (expectancy <= EUR 433/trade), or fewer than 8 trades, proving contraction adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0286",
  "night": "20261024",
  "kind": "strategy",
  "claim": "Extending entries to closes in the top 5% of the 20-day range (pre-breakout retests), on top of fresh 20-day-high breakouts, raises total score because the 30-day momentum edge exists before confirmation.",
  "falsification_criterion": "Score below the incumbent, or per-trade expectancy collapsing toward the fee floor, proving the edge requires fresh-high confirmation and near-high closes are churn.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9131.748361079744
 },
 {
  "experiment_id": "exp-20261024-0287",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar-high breakouts made while price is above the 50-bar SMA carry higher expectancy than breakouts made below it, because the latter are counter-trend spikes that mean-revert.",
  "falsification_criterion": "Backtest below the incumbent (score < 10271 or cost-stress expectancy < 433.86 EUR), or fewer than 8 trades, proving trend alignment adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0288",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-day-high breakouts that occur while price is still at least 5% below the 60-day high (fresh base-breakouts, not late-trend extensions) have higher per-trade expectancy than all 20-day-high breakouts.",
  "falsification_criterion": "Score or expectancy below the incumbent (433.9 EUR / 10271), or fewer than 8 trades, proving base-age adds no edge after the 80 bps costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0289",
  "night": "20261024",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 988.6337808414925
 },
 {
  "experiment_id": "exp-20261024-0290",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar-high breakouts confirmed by price above the 50-bar SMA (trend continuation) carry higher expectancy per trade than all 20-bar-high breakouts.",
  "falsification_criterion": "Score or expectancy below the incumbent (10271 / 433.86 EUR), fewer than 8 trades, or trade count falling without a proportional rise in expectancy per trade.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0291",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts that occur while short-term volatility is contracted relative to the long window (vol_ratio(60) < 1) have more follow-through than breakouts during already-expanded volatility.",
  "falsification_criterion": "The filtered candidate scores below the incumbent (score < 10271) or expectancy drops below 433 EUR, proving squeeze-state adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0292",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar-high breakouts whose bar closes in the upper 40% of its range earn higher cost-adjusted expectancy than breakouts with weak closes.",
  "falsification_criterion": "Cost-stressed expectancy per trade at or below the incumbent's 90.68 EUR, or fewer than 8 trades, disproves the strong-close continuation mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0293",
  "night": "20261024",
  "kind": "entry",
  "claim": "Requiring abnormal volume (vol_z(30) > 1) on a 20-day breakout raises per-trade expectancy above the incumbent by selecting participation-backed moves.",
  "falsification_criterion": "A backtest with >=8 trades where cost-stressed expectancy per trade or score stays at or below the incumbent (EUR 90.68/trade, score 2629), or trades fall below 8, disproves the volume-confirmation mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0294",
  "night": "20261024",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": -79.68280463319317
 },
 {
  "experiment_id": "exp-20261024-0295",
  "night": "20261024",
  "kind": "entry",
  "claim": "20-bar breakouts that occur on above-normal volume (vol_z(30) > 1 vs prior 30 bars) have higher per-trade expectancy than unconfirmed breakouts.",
  "falsification_criterion": "The filtered variant scores below the incumbent (2629) or its per-trade expectancy falls under ~90.7 EUR, or it produces fewer than 8 trades — proving volume confirmation removes good trades rather than noise.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261024-0296",
  "night": "20261024",
  "kind": "entry",
  "claim": "Crypto breakouts on volume above 1σ of the prior 30 bars (vol_z(30) > 1) carry materially higher per-trade expectancy than low-volume breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "A backtest with ≥8 trades where score stays below the incumbent's 2629 or per-trade expectancy ≤ €90.68; if the volume-confirmed subset shows no higher expectancy than unfiltered breakouts, volume adds no information and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0000",
  "night": "20261025",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 3820.6141037246566
 },
 {
  "experiment_id": "exp-20261025-0001",
  "night": "20261025",
  "kind": "entry",
  "claim": "Entering when the close sits in the top 5% of the prior 20-bar range (donchian_pos(20) >= 0.95), rather than only after a fresh 20-bar high, improves after-cost expectancy by buying breakouts earlier at better prices.",
  "falsification_criterion": "After-cost expectancy per trade below the incumbent's 123 EUR (or <= 0) on at least 8 trades, proving the added near-high entries lose more than the 160 bps round-trip costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3820.8987143116738
 },
 {
  "experiment_id": "exp-20261025-0002",
  "night": "20261025",
  "kind": "entry",
  "claim": "20-bar breakouts that occur on volume more than one standard deviation above the 30-bar mean (vol_z(30) > 1) yield higher per-trade expectancy after costs than the unfiltered breakout entry.",
  "falsification_criterion": "Cost-stressed expectancy below the incumbent's 123.08 EUR per trade, or fewer than 8 trades, proving volume adds no filtering value here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0003",
  "night": "20261025",
  "kind": "entry",
  "claim": "20-bar breakouts that occur after volatility contraction (vol_ratio(20) < 1) have higher per-trade expectancy than unfiltered 20-bar breakouts.",
  "falsification_criterion": "With at least 8 trades, score or expectancy_eur below the incumbent (123.08 EUR / 3820.6), or fewer than 8 trades passing both clauses, proves contraction adds no edge over the raw breakout.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0004",
  "night": "20261025",
  "kind": "exit",
  "claim": "20-bar breakout momentum in these symbols persists beyond 10 bars, so extending the time exit from 10 to 20 bars captures more of the right-tail gains that (per the failed TP-15% experiment) carry the entire expectancy.",
  "falsification_criterion": "A backtest of the identical entry with time_exit_bars=20 scoring at or below the incumbent (expectancy <= 123.08 EUR or Sharpe <= 0.837, with >= 8 trades) proves the momentum does not persist past bar 10 and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0005",
  "night": "20261025",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA (sma_gap(50) > 0) on top of a 20-day-high breakout raises per-trade expectancy by removing counter-trend bear-rally breakouts.",
  "falsification_criterion": "With at least 8 trades, score stays below the incumbent's 3820.6 or expectancy per trade does not exceed 123.08 EUR, proving the trend filter cuts volume without improving trade quality.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0006",
  "night": "20261025",
  "kind": "entry",
  "claim": "20-day-high breakouts confirmed by volume above 1 standard deviation of the trailing 30-bar mean earn higher per-trade expectancy than unconfirmed breakouts.",
  "falsification_criterion": "Per-trade expectancy at or below the incumbent's 123.08 EUR, or fewer than 8 qualifying trades, disproves the volume-confirmation mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0007",
  "night": "20261025",
  "kind": "entry",
  "claim": "20-bar-high breakouts occurring on volume more than one standard deviation above the trailing 30-bar mean have higher net expectancy than all breakouts.",
  "falsification_criterion": "Net expectancy at or below the incumbent's €123.08 per trade, or fewer than 8 trades, on the volume-confirmed subset.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0008",
  "night": "20261025",
  "kind": "entry",
  "claim": "20-day breakouts confirmed by a volume surge (vol_z(10) > 1) have higher per-trade expectancy than unconfirmed breakouts.",
  "falsification_criterion": "A backtest with cost-stress expectancy at or below the incumbent's 123.08 EUR, or fewer than 8 trades, disproves volume confirmation as an edge.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 3962.164444090157
 },
 {
  "experiment_id": "exp-20261025-0009",
  "night": "20261025",
  "kind": "entry",
  "claim": "Volume-confirmed 20-bar breakouts that close in the top 30% of their bar range have higher per-trade expectancy than all volume-confirmed breakouts.",
  "falsification_criterion": "A backtest with >=8 trades whose expectancy or score falls below the incumbent's (EUR 138.98 / 3962) proves the close-location filter adds no net edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0010",
  "night": "20261025",
  "kind": "exit",
  "claim": "Adding a 10% take-profit to the incumbent entry raises cost-stress expectancy because breakout follow-through peaks early and decays before the 10-bar time exit.",
  "falsification_criterion": "With identical clauses and envelope otherwise, TP=0.10 scoring below the incumbent (score 3962, expectancy €138.98) on ≥8 trades proves winners run past +10% and the cap destroys the edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0011",
  "night": "20261025",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0012",
  "night": "20261025",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3017.8607415810375
 },
 {
  "experiment_id": "exp-20261025-0013",
  "night": "20261025",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1309.6488967791365
 },
 {
  "experiment_id": "exp-20261025-0014",
  "night": "20261025",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1976.4728214101676
 },
 {
  "experiment_id": "exp-20261025-0015",
  "night": "20261025",
  "kind": "exit",
  "claim": "Volume-confirmed 20-bar breakouts drift for more than 10 bars, so a 20-bar time exit captures momentum the 10-bar exit truncates.",
  "falsification_criterion": "Same 911 entries held 20 bars yield expectancy <= 138.98 EUR or Sharpe < 0.864, proving the drift dies within 10 bars and longer holding only adds risk.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0016",
  "night": "20261025",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR raises expectancy because volume-confirmed breakouts routinely retest ~2 ATR below entry before continuing, and the 2x stop converts those retests into losses.",
  "falsification_criterion": "Cost-stress expectancy or score below the incumbent (138.98 EUR / 3962), or max drawdown rising above ~8% with no expectancy gain, proving the stopped trades were genuine losers rather than retest noise.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0017",
  "night": "20261025",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0018",
  "night": "20261025",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0019",
  "night": "20261025",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0020",
  "night": "20261025",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0021",
  "night": "20261025",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0022",
  "night": "20261025",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0023",
  "night": "20261025",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3984.606581159718
 },
 {
  "experiment_id": "exp-20261025-0024",
  "night": "20261025",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR on volume-confirmed 20-bar breakouts raises expectancy because post-breakout retests no longer eject positions before the 10-bar momentum window completes.",
  "falsification_criterion": "Any of: expectancy_eur <= 138.98 or score <= 3962 vs incumbent, or n_trades < 8; additionally, if max_drawdown_pct rises above ~7% with no expectancy gain, the retest-shakeout mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0025",
  "night": "20261025",
  "kind": "entry",
  "claim": "Adding dd_from_high(60) > -0.10 to the incumbent entry raises per-trade expectancy by excluding downtrend-rebound breakouts far from the 60-day high.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (3962 / 138.98 EUR), or the clause cutting trades without improving expectancy, falsifies it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0026",
  "night": "20261025",
  "kind": "exit",
  "claim": "Volume-confirmed 20-bar breakouts persist beyond 10 bars, so extending the time exit to 20 bars captures return mass the incumbent truncates.",
  "falsification_criterion": "Holding 20 bars yields cost-stress expectancy or Sharpe at or below the incumbent (138.98 EUR / 0.864) on a comparable trade count, proving the momentum decays within 10 bars.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261025-0027",
  "night": "20261025",
  "kind": "exit",
  "claim": "Volume-confirmed 20-bar breakouts persist beyond 10 bars, so extending the time exit from 10 to 20 bars raises expectancy and Sharpe.",
  "falsification_criterion": "Expectancy_eur <= 138.98 or Sharpe <= 0.864 versus the incumbent on at least 8 trades, or trades held to bar 20 underperform the same trades closed at bar 10.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261026-0000",
  "night": "20261026",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 3831.4824639584253
 },
 {
  "experiment_id": "exp-20261026-0001",
  "night": "20261026",
  "kind": "exit",
  "claim": "Extending the time exit from 10 to 20 bars raises per-trade expectancy because post-breakout drift persists beyond two weeks and the 10-bar exit truncates winners.",
  "falsification_criterion": "A 20-bar exit scoring below the incumbent (score < 3831 or expectancy < 123.4 EUR) on at least 8 trades would prove the drift does not persist past 10 bars and the longer hold only adds risk.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261026-0002",
  "night": "20261026",
  "kind": "exit",
  "claim": "Post-breakout momentum from a 20-day-high entry persists beyond 10 bars, so doubling the time exit to 20 bars raises expectancy by capturing the winner tail.",
  "falsification_criterion": "With at least 8 trades, score or expectancy_eur at 20 bars below the incumbent (3831.5 / €123.38) proves the drift decays within 10 bars and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0000",
  "night": "20261027",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 3834.2534218922524
 },
 {
  "experiment_id": "exp-20261027-0001",
  "night": "20261027",
  "kind": "exit",
  "claim": "Capping winners at +12% before the 10-day time exit raises cost-stressed expectancy because breakout drift is front-loaded and decays in the back half of the holding window.",
  "falsification_criterion": "Score or expectancy below the incumbent (3834 / 123.41 EUR) on >=8 trades, meaning the uncapped time exit captures more than the cap keeps.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": -445.68278012777176
 },
 {
  "experiment_id": "exp-20261027-0002",
  "night": "20261027",
  "kind": "exit",
  "claim": "Post-breakout drift extends beyond 10 bars, so extending the time exit from 10 to 20 bars captures more of the right tail that the failed 12% take-profit proved this strategy depends on.",
  "falsification_criterion": "Expectancy_eur at 20 bars <= baseline 123.41 EUR, or Sharpe below 0.84, or n_trades < 8, would prove the drift is fully realized within 10 bars and longer holding only adds risk.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0003",
  "night": "20261027",
  "kind": "exit",
  "claim": "Post-breakout continuation persists beyond day 10, so extending the time exit from 10 to 20 bars increases per-trade expectancy.",
  "falsification_criterion": "Expectancy at 20 bars at or below the baseline's €123.4 per trade (or negative), proving the edge fully decays within the first 10 bars and longer holding only adds risk.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0004",
  "night": "20261027",
  "kind": "entry",
  "claim": "20-bar breakouts with volume z-score above 1 (vs prior 30 bars) have higher per-trade expectancy after costs than unfiltered breakouts.",
  "falsification_criterion": "Fewer than 8 trades, or cost-stressed expectancy at or below the incumbent's 123.41 EUR, proving volume confirmation adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0005",
  "night": "20261027",
  "kind": "entry",
  "claim": "Requiring 5-bar momentum (ret5 > 2%) alongside the 20-bar breakout raises cost-stressed expectancy above the incumbent's 123.41 EUR, because breakouts without recent momentum are exhaustion fades.",
  "falsification_criterion": "A backtest with at least 8 trades showing cost-stress expectancy <= 123.41 EUR or negative expectancy disproves it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3841.8310294648254
 },
 {
  "experiment_id": "exp-20261027-0006",
  "night": "20261027",
  "kind": "entry",
  "claim": "20-bar-high breakouts whose bar closes in its top quartile have higher 10-bar forward expectancy than breakouts closing off their highs.",
  "falsification_criterion": "Score or expectancy below the incumbent (3834.3 / EUR 123.4), fewer than 8 trades, or expectancy statistically indistinguishable from incumbent, proving close_loc adds no information.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0007",
  "night": "20261027",
  "kind": "exit",
  "claim": "Breakout momentum persists beyond 10 bars, so extending the time exit to 20 bars captures tail winners that the current exit truncates.",
  "falsification_criterion": "Score or expectancy below the seed (123.41 EUR/trade), or Sharpe below 0.84, with at least 8 trades — proving the edge decays before bar 20.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0008",
  "night": "20261027",
  "kind": "entry",
  "claim": "20-day breakouts whose bar closes in the top 30% of its range have higher net expectancy than all 20-day breakouts.",
  "falsification_criterion": "Backtest with identical envelope: if expectancy_eur <= 123.41 (incumbent), or n_trades < 8, the close-strength mechanism is wrong and the candidate is discarded.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0009",
  "night": "20261027",
  "kind": "entry",
  "claim": "20-day-high breakouts with volume z-score above 1 have higher per-trade expectancy than unconfirmed breakouts, because volume confirms genuine demand rather than noise probes.",
  "falsification_criterion": "If the volume-confirmed variant scores below the incumbent (cost-stress expectancy < 123.41 EUR or score < 3834) or produces fewer than 8 trades, the volume-confirmation mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261027-0010",
  "night": "20261027",
  "kind": "exit",
  "claim": "A 15% take-profit on 20-day breakout entries raises cost-stressed expectancy versus the uncapped 10-bar time exit because breakout impulse gains mean-revert within the hold.",
  "falsification_criterion": "Cost-stressed expectancy_eur falls below the incumbent's 123.41 EUR (or n_trades < 8), showing the cap only truncates continuing momentum.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0000",
  "night": "20261028",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 3834.2534218922524
 },
 {
  "experiment_id": "exp-20261028-0001",
  "night": "20261028",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 4x ATR raises net per-trade expectancy because breakout entries carry elevated ATR and normal post-breakout pullbacks exceed 2xATR, stopping out eventual winners.",
  "falsification_criterion": "Net expectancy_eur <= 123.41 (incumbent) or sharpe < 0.84 on >= 8 trades; then the 2xATR stop is not truncating winners and this exit mechanism is dead.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 5327.126127029751
 },
 {
  "experiment_id": "exp-20261028-0002",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3211.587562007187
 },
 {
  "experiment_id": "exp-20261028-0003",
  "night": "20261028",
  "kind": "exit",
  "claim": "Crypto breakout momentum persists beyond 10 bars, so extending the time exit to 20 bars lets winners run and raises per-trade expectancy above the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 5327, expectancy 173.43 EUR) on a comparable trade count, proving momentum decays within 10 bars.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 9891.60573379185
 },
 {
  "experiment_id": "exp-20261028-0004",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7145.887358588105
 },
 {
  "experiment_id": "exp-20261028-0005",
  "night": "20261028",
  "kind": "exit",
  "claim": "Adding a 15% take-profit to the incumbent 20-bar breakout hold increases expectancy because post-breakout gains mean-revert before the time exit.",
  "falsification_criterion": "Expectancy or Sharpe below the incumbent (367 EUR, 1.07), or fewer than 8 trades, proves the take-profit truncates the fat right tail rather than protecting it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 966.8366090786282
 },
 {
  "experiment_id": "exp-20261028-0006",
  "night": "20261028",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 20 bars, so extending the time exit from 20 to 30 bars increases per-trade expectancy on the identical entry set.",
  "falsification_criterion": "Expectancy at or below the incumbent's 367 EUR/trade, score below 9891, or inconsistent train/test halves on the same 895 entries proves the drift horizon is exhausted at 20 bars.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0007",
  "night": "20261028",
  "kind": "entry",
  "claim": "20-bar breakouts that occur within 5% of the 60-bar high (clearing long-horizon resistance) carry higher per-trade expectancy than breakouts deep below it.",
  "falsification_criterion": "Expectancy per trade at or below the incumbent's 367 EUR, fewer than 8 trades, or positive_symbol_share collapsing below ~0.5 proves the resistance-clearing mechanism adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0008",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0009",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0010",
  "night": "20261028",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0011",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0012",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakouts emerging from volatility contraction (vol_ratio(20) < 1) deliver higher cost-adjusted expectancy than unfiltered 20-day breakouts.",
  "falsification_criterion": "Score or expectancy below the incumbent (367 EUR, score 9891) or fewer than 8 trades proves squeeze adds nothing over raw breakout_dist(20) > 0.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0013",
  "night": "20261028",
  "kind": "entry",
  "claim": "20-bar-high breakouts confirmed by above-average volume (vol_z(30) > 1.0) deliver higher per-trade expectancy than unconfirmed breakouts.",
  "falsification_criterion": "A score below the incumbent (9891.6) or per-trade expectancy below 367 EUR on at least 8 trades proves volume confirmation adds no edge here.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9871.747378665072
 },
 {
  "experiment_id": "exp-20261028-0014",
  "night": "20261028",
  "kind": "entry",
  "claim": "Restricting 20-bar breakout entries to bars where close is above the 50-bar SMA raises per-trade expectancy after costs versus the unfiltered incumbent.",
  "falsification_criterion": "A backtest showing expectancy or score below the incumbent (BELOW_INCUMBENT), fewer than 8 trades, or positive_symbol_share collapsing below ~0.5 would prove trend alignment adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0015",
  "night": "20261028",
  "kind": "exit",
  "claim": "Post-breakout drift persists beyond 20 days, so extending the time exit from 20 to 30 bars increases per-trade expectancy.",
  "falsification_criterion": "Score below the incumbent's 9891 (expectancy < 367 EUR, or inconsistent halves) would prove the edge plateaus or reverses after day 20 and the longer hold only adds risk.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0016",
  "night": "20261028",
  "kind": "exit",
  "claim": "Capping winners at +20% with a take-profit raises the incumbent's score because post-breakout gains beyond 20% within the 20-bar hold are largely surrendered before the time exit.",
  "falsification_criterion": "Score at or below the incumbent's 9891.6 (i.e., expectancy_eur falls under 367 with n still ~895) proves the uncapped right tail, not give-back, carries the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2566.203549489028
 },
 {
  "experiment_id": "exp-20261028-0017",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakout entries whose close is more than 10% above SMA(20) are overextended and lose money on a 20-bar hold; capping extension improves cost-stressed expectancy.",
  "falsification_criterion": "Score or cost_stress_expectancy_eur below the incumbent (367 EUR / 9891), or a positive-symbol share collapse showing the filter only removed winners, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0018",
  "night": "20261028",
  "kind": "entry",
  "claim": "Relaxing the volume-confirmation clause on the breakout entry from vol_z(30)>1 to vol_z(30)>0.5 retains most of the +12% per-trade expectancy gain while recovering enough trades (~750-800) to beat the incumbent score.",
  "falsification_criterion": "Falsified if score <= 9891.6: either n_trades < 750 (relaxation recovered no volume-confirmed trades) or expectancy <= 392 EUR (quality gain washed out), proving the dose-response between z=0.5 and z=1 is flat or negative.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8890.294460142479
 },
 {
  "experiment_id": "exp-20261028-0019",
  "night": "20261028",
  "kind": "entry",
  "claim": "20-day-high breakouts taken only when close is above the 50-bar SMA have higher expectancy, because counter-trend breakouts below the intermediate mean mean-revert instead of drifting.",
  "falsification_criterion": "Score or expectancy below the incumbent (score < 9891, expectancy < 367 EUR), or trade count falling proportionally more than expectancy rises, proving trend alignment carries no information.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0020",
  "night": "20261028",
  "kind": "entry",
  "claim": "Requiring close > SMA(50) at the 20-bar-high breakout raises net expectancy by removing breakouts that occur inside downtrends.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score 9891, expectancy 367 EUR), or a collapse in trade count, proves trend alignment adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0021",
  "night": "20261028",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its upper 40% (close_loc > 0.6) filters faded intrabar breakouts and raises per-trade expectancy above the incumbent's 367 EUR.",
  "falsification_criterion": "Score <= 9891.6 or expectancy <= 367 EUR with n_trades >= 8 proves the close-location filter adds nothing; n_trades < 8 is also a refutation.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0022",
  "night": "20261028",
  "kind": "entry",
  "claim": "20-bar breakouts that occur within 5% of the 60-bar high carry higher per-trade expectancy than unfiltered 20-bar breakouts.",
  "falsification_criterion": "Cost-stressed expectancy <= 367 EUR or score <= 9892 (the incumbent), or fewer than 8 trades — proving proximity to the 60-bar high adds no post-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0023",
  "night": "20261028",
  "kind": "entry",
  "claim": "20-bar breakouts that erupt from volatility contraction (vol_ratio(20) < 1.0) persist over the 20-bar hold, while high-volatility breakouts are exhaustion moves that mean-revert.",
  "falsification_criterion": "With the filter applied, score or expectancy-per-trade at or below the incumbent (score 9891, expectancy EUR 367 over 895 trades), or fewer than 8 trades — proving contraction-filtered breakouts are no better than all breakouts.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0024",
  "night": "20261028",
  "kind": "entry",
  "claim": "Crypto drift after 20-bar highs comes from proximity-to-the-range-top, not the strict new-high event, so donchian_pos(20) > 0.9 adds profitable near-breakout trades on top of all incumbent entries.",
  "falsification_criterion": "Score or expectancy below the incumbent (9891 / 367 EUR per trade), or the added near-high trades showing negative marginal expectancy, proving the strict breakout event is the actual edge.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 15188.911353926871
 },
 {
  "experiment_id": "exp-20261028-0025",
  "night": "20261028",
  "kind": "entry",
  "claim": "Donchian-top breakouts whose bar closes in its top quartile (close_loc(1) > 0.75) carry persistent buying pressure and raise per-trade expectancy versus the unfiltered incumbent.",
  "falsification_criterion": "Same envelope as incumbent: if per-trade expectancy stays at or below 540.5 EUR after costs, or score falls below 15189, the strong-close filter adds nothing; below 8 trades it is unreadable.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10209.740037940775
 },
 {
  "experiment_id": "exp-20261028-0026",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5046.516354648774
 },
 {
  "experiment_id": "exp-20261028-0027",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5238.138652785764
 },
 {
  "experiment_id": "exp-20261028-0028",
  "night": "20261028",
  "kind": "strategy",
  "claim": "Entries where close recovers into the top decile of the 60-bar Donchian channel (without a fresh 20-bar high) carry positive expectancy after costs, so adding them to the incumbent entry raises total score.",
  "falsification_criterion": "Total score or expectancy below the incumbent (score 15188, 540.5 EUR/trade), or the donchian_pos(60)-only subset contributing ~zero net expectancy — proving the channel-high edge does not generalize to the longer horizon.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14071.680907581438
 },
 {
  "experiment_id": "exp-20261028-0029",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9218.533062609276
 },
 {
  "experiment_id": "exp-20261028-0030",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 15185.87778033815
 },
 {
  "experiment_id": "exp-20261028-0031",
  "night": "20261028",
  "kind": "exit",
  "claim": "Capping the post-breakout run at +30% harvests momentum before it mean-reverts, reducing drawdown and raising Sharpe while preserving most of the incumbent's expectancy.",
  "falsification_criterion": "Expectancy below the incumbent's 540 EUR or Sharpe/DD no better than 0.62/15.7% on >=8 trades, proving winners run past +30% and the cap destroys the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3334.5808090965465
 },
 {
  "experiment_id": "exp-20261028-0032",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7270.944286352443
 },
 {
  "experiment_id": "exp-20261028-0033",
  "night": "20261028",
  "kind": "exit",
  "claim": "Post-breakout drift after donchian_pos(20) > 0.9 entries persists beyond 20 bars, so extending the time exit to 30 bars captures additional drift and raises expectancy and score.",
  "falsification_criterion": "A 30-bar hold producing expectancy or score below the incumbent (540.5 EUR / 15188) on at least 8 trades would prove the edge decays within 20 bars and the extension adds only exposure.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 18963.385396998274
 },
 {
  "experiment_id": "exp-20261028-0034",
  "night": "20261028",
  "kind": "entry",
  "claim": "20-day range breakouts occurring during volatility contraction (5-bar return vol below 20-bar average) yield higher post-cost expectancy than all range breakouts, because squeeze-driven expansions sustain the trends the 30-bar exit harvests.",
  "falsification_criterion": "Score below the incumbent's 18963 (or expectancy below 737 EUR) on at least 8 trades disproves the squeeze-selects-better-breakouts hypothesis; fewer than 8 trades only falsifies the threshold, not the mechanism.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11616.768907469565
 },
 {
  "experiment_id": "exp-20261028-0035",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6990.831828179542
 },
 {
  "experiment_id": "exp-20261028-0036",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7357.174671309792
 },
 {
  "experiment_id": "exp-20261028-0037",
  "night": "20261028",
  "kind": "feature",
  "claim": "Closes in the top decile of a 60-bar Donchian channel (longer consolidation base) produce higher per-trade expectancy than the incumbent 20-bar channel breakouts, lifting total score despite fewer trades.",
  "falsification_criterion": "Any run with n_trades >= 8 whose score falls below the incumbent's 18963 or expectancy below 737 EUR disproves it; fewer than 8 trades renders it untestable.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 13312.917465346345
 },
 {
  "experiment_id": "exp-20261028-0038",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12640.767383366969
 },
 {
  "experiment_id": "exp-20261028-0039",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 19470.129398996713
 },
 {
  "experiment_id": "exp-20261028-0040",
  "night": "20261028",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar EMA (long-trend alignment) raises per-trade expectancy of the donchian-high entry by removing bear-rally breakouts.",
  "falsification_criterion": "Score or expectancy_eur below the incumbent (19470 / 757 EUR), or n_trades < 8, proving the filtered-out trades were not disproportionately losers.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12271.285138580082
 },
 {
  "experiment_id": "exp-20261028-0041",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12530.390585430136
 },
 {
  "experiment_id": "exp-20261028-0042",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 10452.116148585512
 },
 {
  "experiment_id": "exp-20261028-0043",
  "night": "20261028",
  "kind": "exit",
  "claim": "Adding a 20% take-profit to the incumbent raises per-trade expectancy because post-breakout momentum peaks and gives back gains before the 30-bar time exit.",
  "falsification_criterion": "With at least 8 trades, any score below the incumbent's 19470 (i.e., expectancy below 757 EUR at unchanged entries) proves profit-capping destroys more tail upside than giveback it saves.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2496.5000907559615
 },
 {
  "experiment_id": "exp-20261028-0044",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7232.989180127083
 },
 {
  "experiment_id": "exp-20261028-0045",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6995.452508961932
 },
 {
  "experiment_id": "exp-20261028-0046",
  "night": "20261028",
  "kind": "exit",
  "claim": "Capping the hold at 20 bars raises expectancy because 20-bar breakout momentum decays after three weeks and the 21st-30th bars give back gains.",
  "falsification_criterion": "If expectancy or score falls below the incumbent's 757 EUR / 19470 (with >=8 trades), the momentum horizon is genuinely ~30 bars and the give-back claim is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0047",
  "night": "20261028",
  "kind": "feature",
  "claim": "donchian_pos(10) > 0.9 strictly contains donchian_pos(20) > 0.9 and adds early trend-turn snapback entries, raising score above the incumbent.",
  "falsification_criterion": "n_trades <= 901 (no expansion) or the added 10-bar-only band dilutes per-trade expectancy below ~530 EUR (score < 19470), proving shorter channels add noise, not early turns.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8643.685046153592
 },
 {
  "experiment_id": "exp-20261028-0048",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 19470.129398996713
 },
 {
  "experiment_id": "exp-20261028-0049",
  "night": "20261028",
  "kind": "entry",
  "claim": "Requiring the 50-bar EMA gap to be positive (uptrend alignment) raises the cost-stressed expectancy of the Donchian-high entry above the incumbent's 757.40 EUR.",
  "falsification_criterion": "Expectancy_eur at or below 757.40, fewer than 8 trades, or a score below the incumbent's 19470 would prove the trend filter adds no edge after 80 bps costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0050",
  "night": "20261028",
  "kind": "entry",
  "claim": "Relaxing the Donchian position threshold from 0.9 to 0.8 adds trades whose continuation edge is comparable, raising total score via trade count.",
  "falsification_criterion": "Score below the incumbent's 19470, or per-trade expectancy collapsing so that E x sqrt(n) decreases, proving the 0.9 threshold carries the edge.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 21272.467680033227
 },
 {
  "experiment_id": "exp-20261028-0051",
  "night": "20261028",
  "kind": "entry",
  "claim": "Requiring price above the 50-bar SMA (sma_gap(50) > 0) filters out counter-trend snapback breakouts and raises the incumbent's expectancy.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (798 EUR / 21272), or trade count collapsing toward the 8-trade floor with no per-trade improvement, proving trend alignment does not select better breakouts.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14613.282702747068
 },
 {
  "experiment_id": "exp-20261028-0052",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 20394.23521905942
 },
 {
  "experiment_id": "exp-20261028-0053",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7445.718026235004
 },
 {
  "experiment_id": "exp-20261028-0054",
  "night": "20261028",
  "kind": "exit",
  "claim": "Capping winners at +25% after a 20-bar Donchian breakout reduces round-trip tail variance enough to lower max drawdown without cutting the core expectancy of the incumbent.",
  "falsification_criterion": "Score or expectancy below the incumbent (21272 / 798 EUR), or max drawdown not improved below 19.65% with at least 8 trades — proving the tail is real edge, not reversion noise.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3021.8691383637324
 },
 {
  "experiment_id": "exp-20261028-0055",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8906.928627961326
 },
 {
  "experiment_id": "exp-20261028-0056",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14246.311612251564
 },
 {
  "experiment_id": "exp-20261028-0057",
  "night": "20261028",
  "kind": "exit",
  "claim": "Tightening the stop from 4x to 2x ATR raises per-trade net expectancy because winners run to the 30d time exit regardless, while losing trades bleed half as much.",
  "falsification_criterion": "Per-trade cost-stressed expectancy below the incumbent's 798 EUR (score < 21272) or drawdown not improving, proving the 4x stop was needed for dip-then-recover trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12396.603116783295
 },
 {
  "experiment_id": "exp-20261028-0058",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 21272.467680033227
 },
 {
  "experiment_id": "exp-20261028-0059",
  "night": "20261028",
  "kind": "entry",
  "claim": "Requiring the signal bar to close in its top 30% (close_loc(1) > 0.7) removes faded breakouts and raises per-trade expectancy above the incumbent's 798 EUR.",
  "falsification_criterion": "Score or expectancy below the incumbent (21272 / 798 EUR), or fewer than 8 trades, or per-trade expectancy no higher than the incumbent despite fewer trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 19465.600559116374
 },
 {
  "experiment_id": "exp-20261028-0060",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12678.19884705554
 },
 {
  "experiment_id": "exp-20261028-0061",
  "night": "20261028",
  "kind": "entry",
  "claim": "A 50-bar EMA trend filter on the Donchian-high entry raises cost-stressed expectancy by removing bear-market rallies that revert after entry.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (798 EUR / 21272), or fewer than 8 trades, proving the filtered-out trades were net contributors.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 13249.388641467296
 },
 {
  "experiment_id": "exp-20261028-0062",
  "night": "20261028",
  "kind": "entry",
  "claim": "Entries with donchian_pos(20) in the 0.7-0.8 band retain positive post-cost expectancy, so widening the band from 0.8 to 0.7 increases total expectancy despite lower per-trade edge.",
  "falsification_criterion": "If the added 0.7-0.8 trades dilute per-trade expectancy enough that total score falls below the incumbent's 21272 (roughly per-trade expectancy < 580 EUR at ~1400 trades), or n_trades < 8, the edge is concentrated above 0.8 and this is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 20850.489517484304
 },
 {
  "experiment_id": "exp-20261028-0063",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 18653.019181083757
 },
 {
  "experiment_id": "exp-20261028-0064",
  "night": "20261028",
  "kind": "entry",
  "claim": "The incumbent's edge is long-horizon channel position, not the 20-bar window: donchian_pos(60) > 0.8 with the same gap filter raises per-trade expectancy.",
  "falsification_criterion": "Score or expectancy below the incumbent (798 EUR/trade, 21272), or n_trades < 8, proving the 20-bar window is the load-bearing element.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11823.421696941405
 },
 {
  "experiment_id": "exp-20261028-0065",
  "night": "20261028",
  "kind": "entry",
  "claim": "In an established uptrend, buying pullbacks (donchian_pos below 0.4 with a strong bar close) yields higher cost-stressed expectancy than chasing 20-bar highs.",
  "falsification_criterion": "A score at or below the incumbent's 21272 (or fewer than 8 trades) on identical costs and envelope refutes the pullback mechanism; if the pullback cohort's expectancy is below the breakout cohort's, the hypothesis is dead, not merely mistuned.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3120.7678222166955
 },
 {
  "experiment_id": "exp-20261028-0066",
  "night": "20261028",
  "kind": "exit",
  "claim": "A 20% take-profit on the incumbent entry raises cost-stressed expectancy because breakout gains peak and mean-revert before the 30-bar time exit.",
  "falsification_criterion": "Cost-stressed expectancy or Sharpe below the incumbent (798 EUR / 0.69), or score below 21272, proving that riding the full 30 bars dominates profit-harvesting.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0067",
  "night": "20261028",
  "kind": "exit",
  "claim": "A material share of the incumbent's breakout winners peak above +20% and retrace before the 30-bar exit, so a take-profit at +20% raises cost-stressed expectancy and cuts drawdown.",
  "falsification_criterion": "With n_trades unchanged (~1017), any score or cost-stress expectancy below the incumbent (21272 / 798 EUR) proves the uncapped tail above +20% carries the edge and the cap destroys it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0068",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 23357.039797969817
 },
 {
  "experiment_id": "exp-20261028-0069",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4241.05104283464
 },
 {
  "experiment_id": "exp-20261028-0070",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9768.345917985185
 },
 {
  "experiment_id": "exp-20261028-0071",
  "night": "20261028",
  "kind": "entry",
  "claim": "Breakout entries taken only while price is above the 50-bar SMA (uptrend regime) are more profitable after costs than the same entries taken in downtrends, so adding sma_gap(50) > 0 raises cost-stressed expectancy.",
  "falsification_criterion": "Score or expectancy falls below the incumbent (23357 / 878 EUR), or trades drop so far below 970 that breadth fails — proving counter-trend breakouts were not the losing segment.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 13138.928727691864
 },
 {
  "experiment_id": "exp-20261028-0072",
  "night": "20261028",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 16100.239763098487
 },
 {
  "experiment_id": "exp-20261028-0073",
  "night": "20261028",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 24661.011841808715
 },
 {
  "experiment_id": "exp-20261028-0074",
  "night": "20261028",
  "kind": "exit",
  "claim": "Adding a 25% take-profit to the incumbent raises expectancy because breakout winners spike past +25% mid-hold and fade before the 30-bar exit.",
  "falsification_criterion": "Score/expectancy below the incumbent (930.68 EUR, score 24661) with >=8 trades, proving the uncapped right tail beyond +25% contributes more than spike-and-fade gives back.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3280.8117070720873
 },
 {
  "experiment_id": "exp-20261028-0075",
  "night": "20261028",
  "kind": "exit",
  "claim": "Narrowing the stop from 4x to 3x ATR raises cost-stressed expectancy because eventual winners rarely draw down 3x ATR within 30 bars, while the trades stopped between 3x and 4x are dominated by tail losers.",
  "falsification_criterion": "Expectancy or Sharpe below the incumbent (930.7 EUR / 0.725) with n_trades >= 8, meaning the 3x stop is knocking out eventual winners and the wide stop is protective.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 23835.42035572236
 },
 {
  "experiment_id": "exp-20261028-0076",
  "night": "20261028",
  "kind": "entry",
  "claim": "Replacing the near-redundant drawdown clause with a volatility-contraction filter (5d return vol below 20d return vol) raises expectancy because calm advances near 20-bar highs persist while volatility-spike entries mean-revert.",
  "falsification_criterion": "Score below incumbent (24661) or expectancy below the 3-clause base (878 EUR) with >=8 trades proves volatility expansion at highs is not the damage source; also rejected if trades collapse below 8.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 17436.612041510623
 },
 {
  "experiment_id": "exp-20261028-0077",
  "night": "20261028",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8166.41423301125
 },
 {
  "experiment_id": "exp-20261028-0078",
  "night": "20261028",
  "kind": "entry",
  "claim": "Relaxing the drawdown gate from -0.1 to -0.15 adds profitable high-volatility continuation entries the incumbent currently excludes.",
  "falsification_criterion": "Score or expectancy below the incumbent (24661 / 930.68 EUR), or fewer than 8 trades, proves the excluded deep-pullback entries were losers and the tighter gate was load-bearing.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 23399.64836234673
 },
 {
  "experiment_id": "exp-20261028-0079",
  "night": "20261028",
  "kind": "entry",
  "claim": "Requiring proximity to the 60-bar high (within 10%) instead of the 20-bar high raises expectancy, because breakouts near multi-month highs face less overhead resistance than rebound rallies making fresh 20-bar highs.",
  "falsification_criterion": "Score or expectancy below the incumbent (24661 / 930.68 EUR) or fewer than 8 trades, showing long-horizon proximity adds nothing over the 20-bar window.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12687.676313243042
 },
 {
  "experiment_id": "exp-20261028-0080",
  "night": "20261028",
  "kind": "entry",
  "claim": "Replacing the redundant drawdown cap with a long-trend filter (close above 50-bar SMA) raises net expectancy because channel-top continuation entries only pay inside established uptrends.",
  "falsification_criterion": "Score below the incumbent's 24661 (or expectancy below 930.68 EUR, or fewer than 8 trades) proves trend alignment adds nothing over the drawdown cap.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0081",
  "night": "20261028",
  "kind": "entry",
  "claim": "Replacing the inert gap_pct filter with a prior-momentum requirement (ret(20) > 0.05) raises expectancy, because breakouts near the 20-bar high that follow a >=5% 20-bar advance continue more reliably than range-grazing tops.",
  "falsification_criterion": "A backtest with at least 8 trades showing expectancy below the incumbent's 930.7 EUR or Sharpe below 0.725 (or a trade count collapse) proves the momentum precondition adds nothing.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 17073.307378146597
 },
 {
  "experiment_id": "exp-20261028-0082",
  "night": "20261028",
  "kind": "feature",
  "claim": "Replacing the redundant 20-bar proximity filter dd_from_high(20) > -0.1 with a long-trend filter ema_gap(50) > 0 holds or improves expectancy, because the edge's true driver is agreement with the 50-bar trend, not distance from the 20-bar high.",
  "falsification_criterion": "Score below the incumbent's 24661 (expectancy below 930.68 EUR) or fewer than 8 trades proves the long-trend filter is not the driver and proximity was load-bearing.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12762.260568624843
 },
 {
  "experiment_id": "exp-20261028-0083",
  "night": "20261028",
  "kind": "entry",
  "claim": "Entries at Donchian highs after a vertical 5-bar run of more than 5% are exhausted blow-offs that mean-revert; excluding them raises cost-stressed expectancy versus the incumbent.",
  "falsification_criterion": "Cost-stressed expectancy or score below the incumbent's 930.68 EUR / 24661, or fewer than 8 trades, proves recent vertical run-ups were not the drag.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6788.236501680838
 },
 {
  "experiment_id": "exp-20261028-0084",
  "night": "20261028",
  "kind": "entry",
  "claim": "The incumbent's edge is concentrated in momentum-extended entries: replacing the gap filter with ret(5) > 0.05 raises per-trade expectancy from ~930 EUR to ~1,400+ EUR despite fewer trades, beating the incumbent score.",
  "falsification_criterion": "Score below the incumbent's 24,661 - concretely expectancy below ~1,200 EUR with drawdown not materially worse - proves the edge is not concentrated in extended-momentum entries; fewer than 8 trades also falsifies.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 21350.29156662473
 },
 {
  "experiment_id": "exp-20261028-0085",
  "night": "20261028",
  "kind": "feature",
  "claim": "Replacing the gap-down filter with a volatility-contraction filter (vol_ratio(60) < 1) improves expectancy, because Donchian breakouts from multi-week squeezes trend more reliably than breakouts from already-expanded volatility.",
  "falsification_criterion": "A backtest with at least 8 trades whose score is below the incumbent (score < 24661 or expectancy < 930.7 EUR) proves the contraction filter is not additive; fewer than ~400 trades would show it is too restrictive to matter.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 9225.972433432082
 },
 {
  "experiment_id": "exp-20261028-0086",
  "night": "20261028",
  "kind": "feature",
  "claim": "Entries sitting 5-10% below the 20d high are net losers after costs; tightening dd_from_high(20) from -0.1 to -0.05 raises net expectancy.",
  "falsification_criterion": "A BELOW_INCUMBENT result (expectancy_eur <= 930.68 with n_trades >= 8) proves the removed (-0.1,-0.05] cohort was actually profitable.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 12348.242348392023
 },
 {
  "experiment_id": "exp-20261028-0087",
  "night": "20261028",
  "kind": "feature",
  "claim": "Excluding overextended entries (close no more than 5% above the 20-bar SMA) instead of filtering gap-downs raises per-trade expectancy by avoiding climax breakouts near 20-bar highs.",
  "falsification_criterion": "With >= 8 trades, a score below the incumbent's 24661 (expectancy < 930 EUR) proves the overextension filter cuts winners, not losers; fewer than 8 trades gives no reading.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2990.0091590919856
 },
 {
  "experiment_id": "exp-20261028-0088",
  "night": "20261028",
  "kind": "feature",
  "claim": "Filtering for closeness to the 60-bar high instead of the 20-bar high removes bear-market bounces and raises expectancy per trade.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (930.68 EUR / 24661), or fewer than 8 trades, disproves the longer-horizon regime filter.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0089",
  "night": "20261028",
  "kind": "exit",
  "claim": "Capping winners at +25% improves the incumbent's risk-adjusted score because momentum bursts near 20-day highs mean-revert within the 30-day hold, and uncapped winners give back gains.",
  "falsification_criterion": "Score below 24661 or expectancy below 930 EUR with no reduction in max drawdown (17.2%) proves profit-capping hurts this entry.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0090",
  "night": "20261028",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0091",
  "night": "20261028",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261028-0092",
  "night": "20261028",
  "kind": "feature",
  "claim": "Capping entry volatility at ATR(14)/close < 6% raises per-trade expectancy above the incumbent by excluding entries whose 4xATR stop implies oversized losses.",
  "falsification_criterion": "Any reading below the incumbent (score < 24661 or cost-stress expectancy < 930.68 EUR), or fewer than 8 trades, proves the volatility-cap mechanism wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4683.225768598804
 },
 {
  "experiment_id": "exp-20261028-0093",
  "night": "20261028",
  "kind": "feature",
  "claim": "Replacing the inert gap_pct filter with a positive 20-bar drift requirement (ret(20) > 0) raises total expectancy by removing range-top entries inside 20-bar downtrends while preserving the profitable pullback band.",
  "falsification_criterion": "The hypothesis is wrong if expectancy_eur x n_trades falls below the incumbent's ~897k EUR, or if n_trades collapses below ~700 without a proportional per-trade gain.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 20798.201908687308
 },
 {
  "experiment_id": "exp-20261029-0000",
  "night": "20261029",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 3842.235970411334
 },
 {
  "experiment_id": "exp-20261029-0001",
  "night": "20261029",
  "kind": "feature",
  "claim": "20-bar breakouts that occur from a contracted-volatility regime (vol_ratio(60) < 1.0) deliver higher per-trade expectancy than unconditional 20-bar breakouts.",
  "falsification_criterion": "With at least 8 trades, a cost-applied expectancy at or below the incumbent's 123.67 EUR (or score at or below 3842) proves the contraction filter adds no edge; fewer than 8 trades is an automatic rejection.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0002",
  "night": "20261029",
  "kind": "feature",
  "claim": "New 20-day highs within 20% of the 60-day high carry higher forward expectancy than new 20-day highs deep below the 60-day high, which are downtrend rebounds.",
  "falsification_criterion": "Per-trade expectancy or score below the incumbent (123.67 EUR, score 3842) or fewer than 8 trades would prove the near-high breakout-quality filter adds nothing.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4360.777332501728
 },
 {
  "experiment_id": "exp-20261029-0003",
  "night": "20261029",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 650.0717554883138
 },
 {
  "experiment_id": "exp-20261029-0004",
  "night": "20261029",
  "kind": "entry",
  "claim": "20-bar-high breakouts confirmed by abnormally high volume (vol_z(30) > 1) carry higher per-trade expectancy than unconfirmed breakouts.",
  "falsification_criterion": "The volume-confirmed subset scores below the incumbent (expectancy 152.69 EUR, Sharpe 0.912) or shows inconsistent halves, proving volume adds no post-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0005",
  "night": "20261029",
  "kind": "entry",
  "claim": "20-bar-high breakouts whose bar closes in the top 30% of its range (no upper-wick fade) earn higher post-cost expectancy than unfiltered incumbent breakouts.",
  "falsification_criterion": "Any of: score <= 4360.78 or expectancy <= 152.69 EUR vs incumbent, n_trades < 8, or halves showing inconsistent improvement — proving fade-rejection adds no edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3536.6715368943524
 },
 {
  "experiment_id": "exp-20261029-0006",
  "night": "20261029",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2447.1021924218153
 },
 {
  "experiment_id": "exp-20261029-0007",
  "night": "20261029",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4298.407579589962
 },
 {
  "experiment_id": "exp-20261029-0008",
  "night": "20261029",
  "kind": "exit",
  "claim": "Extending the hold from 10 to 20 bars captures trend continuation past day 10 and increases per-trade expectancy after costs.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (score < 4360.8 or expectancy < 152.7 EUR), or the incremental days 11-20 contributing negative PnL.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 6940.632716366627
 },
 {
  "experiment_id": "exp-20261029-0009",
  "night": "20261029",
  "kind": "entry",
  "claim": "Keine Einstiege nach einem Gap nach unten.",
  "falsification_criterion": "Gaps nach unten werden systematisch aufgekauft, der Filter kostet die Erholung.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6940.632716366627
 },
 {
  "experiment_id": "exp-20261029-0010",
  "night": "20261029",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2063.0156694107127
 },
 {
  "experiment_id": "exp-20261029-0011",
  "night": "20261029",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR improves expectancy because 2xATR stop-outs occur inside normal 20-day breakout noise before momentum can express itself.",
  "falsification_criterion": "Any score below the incumbent's 6940 (expectancy under 270 EUR, or max drawdown above ~10% without a compensating score gain) with entry, time exit, and sizing unchanged proves stop width was not the binding constraint.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 7988.251718669932
 },
 {
  "experiment_id": "exp-20261029-0012",
  "night": "20261029",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3865.465580230646
 },
 {
  "experiment_id": "exp-20261029-0013",
  "night": "20261029",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4284.87936130573
 },
 {
  "experiment_id": "exp-20261029-0014",
  "night": "20261029",
  "kind": "exit",
  "claim": "Extending the time exit from 20 to 30 bars raises expectancy because 20-day-breakout drift persists beyond day 20.",
  "falsification_criterion": "Expectancy below the incumbent's 320.71 EUR or Sharpe below 0.981 (with >=8 trades) proves the drift is exhausted by day 20 and further room adds only drawdown.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 13611.09900987229
 },
 {
  "experiment_id": "exp-20261029-0015",
  "night": "20261029",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2226.7869650677144
 },
 {
  "experiment_id": "exp-20261029-0016",
  "night": "20261029",
  "kind": "entry",
  "claim": "Nur nach einem Aufwaertstag einsteigen.",
  "falsification_criterion": "Der Vortag ist irrelevant und der Filter kostet nur Trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0017",
  "night": "20261029",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises net expectancy because fewer 30-day breakout winners are stopped out by normal post-breakout volatility noise.",
  "falsification_criterion": "Score below the incumbent's 13611 (or expectancy below EUR 592, or n_trades < 8) at 30d hold with the 4x stop proves the noise-band mechanism wrong and that 3x is the optimum, not a gradient step.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11673.181255400383
 },
 {
  "experiment_id": "exp-20261029-0018",
  "night": "20261029",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(20) < 1) before a 20-bar breakout raises per-trade expectancy because squeeze breakouts exhibit stronger follow-through.",
  "falsification_criterion": "Score or expectancy below the incumbent (score 13611, expectancy EUR 592) on 30d/3xATR/25%, or trades fall so far that the edge is inside the 80 bps cost hurdle.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7623.903966112689
 },
 {
  "experiment_id": "exp-20261029-0019",
  "night": "20261029",
  "kind": "exit",
  "claim": "Capping winners at +15% raises risk-adjusted performance versus the incumbent's open-ended 30-day hold, because breakout drift decays before the time exit.",
  "falsification_criterion": "Score below 13611, expectancy below 592 EUR, or Sharpe below 1.09 on the same trade set proves the tail winners were the edge and the cap destroys it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1104.4638319601697
 },
 {
  "experiment_id": "exp-20261029-0020",
  "night": "20261029",
  "kind": "exit",
  "claim": "With the 30-bar hold, tightening the stop from 3x to 2x ATR raises expectancy by truncating losers earlier while rarely stopping drift-driven winners.",
  "falsification_criterion": "A score below the incumbent's 13611 (or expectancy below 592 EUR) on at least 8 trades, or a higher max drawdown, proves the tighter stop kills winners rather than losers.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 11914.820336662233
 },
 {
  "experiment_id": "exp-20261029-0021",
  "night": "20261029",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the incumbent entry improves net expectancy by filtering out breakouts that occur below the long-term mean.",
  "falsification_criterion": "Score or cost-stress expectancy at or below the incumbent (13611 / 592 EUR), or trade count collapsing so far that per-trade quality gains cannot cover the lost breadth, proving the SMA filter is redundant with dd_from_high(60).",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 13606.867948491625
 },
 {
  "experiment_id": "exp-20261029-0022",
  "night": "20261029",
  "kind": "entry",
  "claim": "Adding volume confirmation (vol_z(30) > 0) to the incumbent entry raises the score above 13611 because volume-backed 20-day breakouts have follow-through that low-volume breakouts lack.",
  "falsification_criterion": "A score below the incumbent's 13611, or n_trades collapsing well below 664 without a compensating rise in per-trade expectancy, proves volume confirmation adds no edge after the 80 bps per-leg costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0023",
  "night": "20261029",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its upper 40% (close_loc > 0.6) filters failed intraday breakouts and raises net expectancy versus the incumbent.",
  "falsification_criterion": "Any score below the incumbent's 13611 (or expectancy below 592 EUR) on at least 8 trades proves the close-location filter adds no post-cost edge.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 14373.022037323872
 },
 {
  "experiment_id": "exp-20261029-0024",
  "night": "20261029",
  "kind": "entry",
  "claim": "Keine Einstiege in Explosionskerzen.",
  "falsification_criterion": "Gerade die grossen Kerzen setzen sich fort; der Filter schneidet die beste Haelfte.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6950.7602568771445
 },
 {
  "experiment_id": "exp-20261029-0025",
  "night": "20261029",
  "kind": "entry",
  "claim": "Requiring above-average volume confirmation (vol_z(10) > 0) on the incumbent breakout setup raises expectancy, because breakouts carried by elevated participation are more likely to continue than thin, noise-driven ones.",
  "falsification_criterion": "A backtest scoring below the incumbent (score < 14373 or expectancy < 636.5 EUR) or fewer than 8 trades would prove the volume-continuation mechanism adds nothing here.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14326.035429781507
 },
 {
  "experiment_id": "exp-20261029-0026",
  "night": "20261029",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8893.321899437236
 },
 {
  "experiment_id": "exp-20261029-0027",
  "night": "20261029",
  "kind": "entry",
  "claim": "Nur bis 10 % unter dem 20-Tage-Hoch handeln.",
  "falsification_criterion": "Tiefe Ruecklaeufe liefern die besseren Einstiege, der Filter kostet Rendite.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 14863.673059745248
 },
 {
  "experiment_id": "exp-20261029-0028",
  "night": "20261029",
  "kind": "entry",
  "claim": "Replacing the near-redundant dd_from_high(20) filter with a volatility-contraction filter (vol_ratio(60) < 1.0) improves net expectancy because breakouts from low relative volatility have more follow-through.",
  "falsification_criterion": "A score below the incumbent's 14863 (or expectancy below 655.6 EUR, or fewer than 8 trades) proves the squeeze filter adds nothing over the removed dd_from_high(20) clause.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7726.078158414142
 },
 {
  "experiment_id": "exp-20261029-0029",
  "night": "20261029",
  "kind": "strategy",
  "claim": "Adding a momentum-failure exit (close_loc(1) < 0.25) to the incumbent entry raises expectancy by cutting failed breakouts before they reach the 3xATR stop or the 30-bar clock.",
  "falsification_criterion": "Score below the incumbent's 14863 or expectancy below 655 EUR with at least 8 trades, showing the weak-close exit ejects recovering winners more than it saves on losers.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 5202.830146209897
 },
 {
  "experiment_id": "exp-20261029-0030",
  "night": "20261029",
  "kind": "exit",
  "claim": "Breakout winners decay before the 30-bar exit, so a 15% take-profit raises expectancy by locking gains early.",
  "falsification_criterion": "Expectancy or score below the incumbent (655.6 EUR / 14863) with >=8 trades proves the take-profit cuts winners prematurely.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 772.6210123279865
 },
 {
  "experiment_id": "exp-20261029-0031",
  "night": "20261029",
  "kind": "exit",
  "claim": "Post-breakout shakeouts trigger the 3xATR stop before momentum resumes; widening to 4xATR converts those whipsaw stop-outs into completed winners.",
  "falsification_criterion": "Score or expectancy at or below the incumbent (14863 / 655.6 EUR), or drawdown rising disproportionately past ~14% without an expectancy gain, proving the stop rarely binds and only enlarges losses.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 13049.406348157614
 },
 {
  "experiment_id": "exp-20261029-0032",
  "night": "20261029",
  "kind": "exit",
  "claim": "The incumbent's per-trade edge is fully realized within 15 bars of entry; bars 16-30 add variance and lock capital without adding return.",
  "falsification_criterion": "Shortening time_exit_bars from 30 to 15 lowers expectancy below the incumbent's 655.61 EUR or score below 14863, proving the tail of the hold carries the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 7256.3198008207155
 },
 {
  "experiment_id": "exp-20261029-0033",
  "night": "20261029",
  "kind": "entry",
  "claim": "20-bar breakouts taken while price is above the 50-bar SMA (confirmed long-term uptrend) carry higher per-trade expectancy than breakouts taken below it.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (14863 / 655.6 EUR), or fewer than 8 trades, proving long-trend agreement adds no edge after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14362.604361977952
 },
 {
  "experiment_id": "exp-20261029-0034",
  "night": "20261029",
  "kind": "entry",
  "claim": "Buying 10-bar instead of 20-bar high breakouts, with the same trend and close-quality filters, increases trade frequency enough to raise total score above the incumbent without collapsing per-trade expectancy.",
  "falsification_criterion": "Score below the incumbent's 14864 (expectancy or sharpe falling faster than the extra trades compensate), or per-trade expectancy dropping toward the 80 bps round-trip cost level, or fewer than 8 trades.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 16181.265709782434
 },
 {
  "experiment_id": "exp-20261029-0035",
  "night": "20261029",
  "kind": "entry",
  "claim": "Replacing the 20-day-drawdown freshness clause with volume confirmation (vol_z(30) > 1) raises net expectancy, because breakouts backed by abnormal volume follow through more reliably than quiet ones.",
  "falsification_criterion": "A score below the incumbent's 16181, or expectancy below ~667 EUR, or fewer than 8 trades, proves volume confirmation adds no edge over the freshness filter it replaces.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14718.139645135992
 },
 {
  "experiment_id": "exp-20261029-0036",
  "night": "20261029",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0037",
  "night": "20261029",
  "kind": "entry",
  "claim": "Requiring volatility contraction (15d/60d return-vol ratio < 1) before a 10d breakout selects follow-through moves and beats the 20d drawdown-proximity clause",
  "falsification_criterion": "Score below the incumbent's 16181 (or expectancy below 666.74 EUR / fewer than 8 trades) proves contraction adds nothing over proximity",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8178.18303214179
 },
 {
  "experiment_id": "exp-20261029-0038",
  "night": "20261029",
  "kind": "entry",
  "claim": "Relaxing close_loc(1) from >0.6 to >0.5 admits midpoint-closing breakout bars that remain profitable after costs and raises total score via higher trade count.",
  "falsification_criterion": "Score below the incumbent's 16181 (or expectancy below 666.74 EUR) on at least 8 trades proves the added mid-close entries are net losers after costs.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 15610.862680757395
 },
 {
  "experiment_id": "exp-20261029-0039",
  "night": "20261029",
  "kind": "entry",
  "claim": "Replacing the dd_from_high(20) proximity clause with an overextension cap ema_gap(5) < 0.05 raises net expectancy by skipping parabolic breakouts that mean-revert within the 30-bar hold.",
  "falsification_criterion": "Score below the incumbent's 16181 (or fewer than 8 trades) proves the overextension cap adds no edge over proximity filtering.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4794.149090473752
 },
 {
  "experiment_id": "exp-20261029-0040",
  "night": "20261029",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises net expectancy because it stops ejecting breakout trades that pull back before continuing within the 30-bar hold.",
  "falsification_criterion": "Any score below the incumbent's 16181 (expectancy below 666.74 EUR at roughly unchanged ~741 trades) proves the wider stop only enlarges losses rather than saving eventual winners.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0041",
  "night": "20261029",
  "kind": "exit",
  "claim": "Adding a 15% take-profit to the incumbent breakout entry improves score because post-breakout momentum exhausts before the 30-bar time exit and the profit cap captures it before mean reversion gives it back.",
  "falsification_criterion": "Score or expectancy below the incumbent (16181 / 666.7 EUR per trade), or the profit cap truncates enough winners that expectancy falls below the no-target case, proving the momentum runs past 15% on average.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0042",
  "night": "20261029",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0043",
  "night": "20261029",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0044",
  "night": "20261029",
  "kind": "exit",
  "claim": "Capping winners at +15% improves the incumbent breakout system because 10-bar crypto breakouts mean-revert after double-digit pops inside the 30-bar holding window.",
  "falsification_criterion": "Score or sharpe below the incumbent (16181 / 1.18), or fewer than 8 trades, proving winners run past 15% and the cap destroys more than it saves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0045",
  "night": "20261029",
  "kind": "entry",
  "claim": "Replacing the near-inert dd_from_high(20) > -0.1 clause with a volatility-expansion filter (vol_ratio(20) > 1, i.e. 5-bar realized vol above its 20-bar baseline) raises net expectancy, because expansion-confirmed breakouts follow through while contraction breakouts mean-revert after costs.",
  "falsification_criterion": "Fewer than 8 trades, or cost-stress expectancy at/below the incumbent's 666.74 EUR (score at/below 16181), proves expansion confirmation adds no edge over the incumbent; a trade count collapse below ~100 shows the filter is mis-calibrated rather than informative.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 13687.990502098808
 },
 {
  "experiment_id": "exp-20261029-0046",
  "night": "20261029",
  "kind": "exit",
  "claim": "Adding a 15% take-profit to the incumbent breakout entry improves expectancy and Sharpe because breakout follow-through decays before the 30-bar time exit.",
  "falsification_criterion": "Score, expectancy (666.74 EUR) or Sharpe (1.18) falling below the incumbent proves the edge sits in the uncapped right tail and profit-taking destroys it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261029-0047",
  "night": "20261029",
  "kind": "entry",
  "claim": "Breakouts fired while 7-bar ATR is below 30-bar ATR (compression regimes) continue more profitably than breakouts from expanded volatility, so replacing the redundant 20-bar drawdown clause with an ATR-contraction filter raises net expectancy.",
  "falsification_criterion": "Score or expectancy below the incumbent (666.7 EUR expectancy, score 16181) or fewer than 8 trades proves compression-filtered breakouts are not the source of the edge.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 6265.813402600121
 },
 {
  "experiment_id": "exp-20261029-0048",
  "night": "20261029",
  "kind": "feature",
  "claim": "Requiring breakout_dist(10) > 0.01 — a close at least 1% above the prior 10-day high — removes marginal noise-breakouts whose follow-through is smaller than the round-trip cost, raising per-trade expectancy.",
  "falsification_criterion": "A score or expectancy below the incumbent (16181 / 666.7 EUR), or fewer than 8 trades, proves the displacement buffer destroys edge rather than improving it.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14211.035683771608
 },
 {
  "experiment_id": "exp-20261029-0049",
  "night": "20261029",
  "kind": "feature",
  "claim": "Replacing the redundant 20-bar drawdown filter with a long-horizon trend filter (close at least 2% above its 50-bar SMA) improves expectancy because 10-day breakouts occurring inside established long-term uptrends persist more reliably than breakouts in flat contexts.",
  "falsification_criterion": "A backtest of this candidate scoring below the incumbent (score < 16181 or expectancy < 666.7 EUR) or producing fewer than 8 trades proves the long-horizon trend filter is worse than the redundant drawdown clause.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 16115.675748460286
 },
 {
  "experiment_id": "exp-20261029-0050",
  "night": "20261029",
  "kind": "feature",
  "claim": "Replacing the redundant dd_from_high(20) proximity clause with an overextension cap — price no more than 15% above its 50-bar EMA at breakout — improves net score, because blow-off breakout entries mean-revert within the 30-bar holding window.",
  "falsification_criterion": "A score at or below the incumbent's 16181, or fewer than 8 trades, disproves the overextension mechanism; if the removed dd_from_high(20) trades were on average winners, the cap is cutting the edge, not the decay.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3795.9637814655125
 },
 {
  "experiment_id": "exp-20261029-0051",
  "night": "20261029",
  "kind": "exit",
  "claim": "Widening the stop from 3x to 4x ATR raises expectancy because post-breakout shake-outs breach 3x ATR before the trend resumes.",
  "falsification_criterion": "Expectancy_eur or Sharpe below the incumbent (666.7 EUR / 1.18), or max drawdown rising above 12.2% without an expectancy gain, proves the stop-outs were real losses, not noise.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0000",
  "night": "20261030",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 3857.897544527795
 },
 {
  "experiment_id": "exp-20261030-0001",
  "night": "20261030",
  "kind": "exit",
  "claim": "A material share of 20-day-breakout trades peak above +10% and give it back before the 10-bar time exit, so adding a 10% take-profit to the incumbent raises cost-stressed expectancy.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's €124.18, or max drawdown above 9.91%, on the same entry universe; also falsified if metrics are identical to the seed (TP never triggered).",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": -121.32103624654168
 },
 {
  "experiment_id": "exp-20261030-0002",
  "night": "20261030",
  "kind": "entry",
  "claim": "20-bar breakouts confirmed by abnormal volume (vol_z(60) > 1) have higher per-trade follow-through than unconfirmed breakouts, so adding this one filter to the incumbent entry raises the cost-adjusted score above 3857.",
  "falsification_criterion": "A backtest with >= 8 trades scoring below the incumbent (score < 3857, or expectancy < 124.18 EUR, or sharpe < 0.84), or showing per-trade expectancy of confirmed breakouts no higher than the unfiltered baseline, proves volume confirmation adds no edge after 80 bps per leg.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 4058.9182158079975
 },
 {
  "experiment_id": "exp-20261030-0003",
  "night": "20261030",
  "kind": "entry",
  "claim": "Volume-confirmed 20-bar breakouts preceded by volatility contraction (vol_ratio(60) < 1) have higher post-cost expectancy than expansion breakouts.",
  "falsification_criterion": "Score below the incumbent (score < 4059 or expectancy < 160.6 EUR), or fewer than 8 trades, or lower per-trade expectancy than the incumbent, proving contraction adds no selection value.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0004",
  "night": "20261030",
  "kind": "feature",
  "claim": "Volume-confirmed 20-day breakouts with price above the 50-EMA carry higher 10-bar forward expectancy than those below it, so adding ema_gap(50) > 0 improves net expectancy after costs.",
  "falsification_criterion": "Cost-stressed expectancy or score at or below the incumbent (160.55 EUR / 4058.9), or fewer than 8 trades, proves the trend filter adds nothing.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 4048.661118067984
 },
 {
  "experiment_id": "exp-20261030-0005",
  "night": "20261030",
  "kind": "entry",
  "claim": "Keine Einstiege in Volumen-Ausreisser.",
  "falsification_criterion": "Die Volumenspitze markiert den Beginn der Bewegung, der Filter entfernt die Gewinner.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1667.9160065760775
 },
 {
  "experiment_id": "exp-20261030-0006",
  "night": "20261030",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0007",
  "night": "20261030",
  "kind": "entry",
  "claim": "Breakout bars that close in the upper half of their range carry more follow-through, so requiring close_loc(1) > 0.5 on top of the incumbent raises expectancy.",
  "falsification_criterion": "If the candidate's score/expectancy falls below the incumbent (score 4058.9, expectancy 160.55 EUR) or drops below 8 trades, the intrabar-confirmation mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0008",
  "night": "20261030",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 3412.499008850429
 },
 {
  "experiment_id": "exp-20261030-0009",
  "night": "20261030",
  "kind": "exit",
  "claim": "Volume-confirmed 20-bar breakouts keep drifting past bar 10, so doubling the time exit to 20 bars raises per-trade expectancy.",
  "falsification_criterion": "A 20-bar exit scoring at or below the incumbent (score 4058.9 / expectancy 160.55 EUR) on at least 8 trades proves the drift is exhausted within 10 bars.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0010",
  "night": "20261030",
  "kind": "exit",
  "claim": "Widening the stop from 2x to 3x ATR raises net expectancy because volume-surging breakouts (vol_z(60)>1) carry elevated short-term noise that prematurely stops out winners at 2x.",
  "falsification_criterion": "Score below incumbent 4058.9 or expectancy below 160.55 EUR on >=8 trades, or max drawdown above ~7% without an expectancy gain, proving the 2x stop was not the binding constraint.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0011",
  "night": "20261030",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0012",
  "night": "20261030",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0013",
  "night": "20261030",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0014",
  "night": "20261030",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0015",
  "night": "20261030",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0016",
  "night": "20261030",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0017",
  "night": "20261030",
  "kind": "exit",
  "claim": "Adding a 5% take-profit to the incumbent breakout entry raises score because daily crypto breakout gains mean-revert before the 10-bar hold ends.",
  "falsification_criterion": "A backtest with at least 8 trades scoring below the incumbent (score < 4058.9 or expectancy < 160.55 EUR) proves the take-profit truncates more edge than the avoided reversion is worth.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0018",
  "night": "20261030",
  "kind": "entry",
  "claim": "Breakouts with a volume surge that close in the top 30% of their bar (close_loc > 0.7) follow through more reliably over 10 days than weak-closing breakouts, raising per-trade expectancy above the incumbent's €160.55.",
  "falsification_criterion": "A backtest with at least 8 trades whose score or cost-stress expectancy falls below the incumbent (score 4058.9, expectancy €160.55) proves close location adds no edge after volume confirmation.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0019",
  "night": "20261030",
  "kind": "entry",
  "claim": "Adding a long-trend filter (close above the 50-day SMA) to the volume-confirmed 20d breakout raises cost-stress expectancy, because breakouts aligned with the longer uptrend persist while breakouts below the 50-day mean are counter-trend fades.",
  "falsification_criterion": "Cost-stress expectancy at or below the incumbent's 160.55 EUR, fewer than 8 trades, or positive_symbol_share under 0.792 without an expectancy gain proves the trend filter adds no value.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0020",
  "night": "20261030",
  "kind": "entry",
  "claim": "20-bar breakouts with volume confirmation that occur above the 50-bar SMA persist longer and are more profitable than those below it.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (160.55 EUR, score 4058.9), or fewer than 8 trades, or a drop in positive_symbol_share below 0.792 would prove the trend filter adds no value.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0021",
  "night": "20261030",
  "kind": "entry",
  "claim": "20-bar breakout entries with volume surge are more profitable when price is above the 50-bar SMA, because below it breakouts are counter-trend failures",
  "falsification_criterion": "Cost-stress expectancy per trade at or below the incumbent's 160.55 EUR, or a score below 4058.92, proving the removed below-SMA trades were not losers",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0022",
  "night": "20261030",
  "kind": "entry",
  "claim": "Requiring the breakout to be aligned with the intermediate trend (sma_gap(50) > 0) raises cost-stress expectancy above the incumbent by removing counter-trend 20-day-high bounces.",
  "falsification_criterion": "With n_trades >= 8, cost-stress expectancy <= 160.55 EUR (incumbent) or a drop in positive_symbol_share below 0.79 without an expectancy gain proves the trend-alignment mechanism adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0023",
  "night": "20261030",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) before a volume-confirmed 20-bar breakout raises cost-stress expectancy, because squeeze breakouts follow through more often than expansion breakouts.",
  "falsification_criterion": "Cost-stress expectancy at or below the incumbent's 160.55 EUR, or fewer than 8 trades, proves the contraction filter adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261030-0024",
  "night": "20261030",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the volume-confirmed breakout entry raises net expectancy by excluding counter-trend breakouts that fail to continue.",
  "falsification_criterion": "Cost-stress expectancy or overall score falls below the incumbent (160.55 EUR / 4058.9), or the filter cuts trades below 8, proving trend alignment adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261031-0000",
  "night": "20261031",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 319.714507
 },
 {
  "experiment_id": "exp-20261031-0001",
  "night": "20261031",
  "kind": "entry",
  "claim": "Restricting 20-bar breakout entries to bars where close is above the 50-bar SMA (sma_gap(50) > 0) raises cost-stressed per-trade expectancy above the incumbent's 124.12 EUR.",
  "falsification_criterion": "Cost-stressed expectancy at or below 124.12 EUR per trade, or fewer than 8 trades, proving trend-aligned breakouts are no better than all breakouts.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261031-0002",
  "night": "20261031",
  "kind": "entry",
  "claim": "Filtering 20-bar breakouts to those preceded by volatility contraction (vol_ratio(20) < 0.8) raises per-trade cost-stress expectancy above the unfiltered incumbent.",
  "falsification_criterion": "Cost-stress expectancy <= 124.12 EUR, or Sharpe/positive_symbol_share below incumbent, or n_trades so reduced that total expectancy falls materially despite better per-trade edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261031-1c3a33",
  "night": "20261031",
  "kind": "strategy",
  "claim": "Does vol_ratio carry information the incumbent ignores? Entry only when vol_ratio is in its upper decile and a 20-bar breakout confirms.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261031-436c04",
  "night": "20261031",
  "kind": "strategy",
  "claim": "Does vol_ratio carry information the incumbent ignores? Entry only when vol_ratio is in its upper decile and a 20-bar breakout confirms.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261031-ab354a",
  "night": "20261031",
  "kind": "entry",
  "claim": "Compression coils resolve with cascades: on days when realized volatility is in its bottom tercile (atr_pct) and the close finishes in the top of its range (close_loc), resting stops sit just above the coil and dealer inventory is thin, so upward resolution overshoots; gating entry to those days should beat the incumbent's per-day edge.",
  "falsification_criterion": "Falsified if the gated subset's score does not exceed the incumbent score of 24661.01, or if forward returns on low-atr_pct+high-close_loc days are not significantly greater than on high-atr_pct+high-close_loc days (i.e., the compression condition adds no conditional edge over close_loc alone).",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 28.383267
 },
 {
  "experiment_id": "ro-20261031-fe1cf8",
  "night": "20261031",
  "kind": "strategy",
  "claim": "Long entries at capitulation climaxes — deep drawdown from the rolling high combined with a volume spike — capture the post-liquidation reversion: forced deleveraging cascades terminate in a volume climax that exhausts marginal leveraged supply.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261031-3b8ded",
  "night": "20261031",
  "kind": "strategy",
  "claim": "Deep drawdown combined with an ATR spike marks the fear trough: crypto volatility is asymmetric (leverage effect), so peak realized volatility coincides with price lows and mean-reverts as forced selling ends — high atr_pct after a deep drawdown is a timing signal for the bounce, not a risk signal.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261031-67b166",
  "night": "20261031",
  "kind": "entry",
  "claim": "Suppressed realized volatility with the close pinned near its period high signals quiet-tape absorption: an informed buyer is absorbing sell flow without moving price, and the stored volatility compression releases asymmetrically to the upside.",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 211.099025
 },
 {
  "experiment_id": "ro-20261031-fa39b1",
  "night": "20261031",
  "kind": "entry",
  "claim": "A deep drawdown coinciding with a volume climax marks the terminal leg of a leveraged long liquidation cascade; entering after the climax captures snap-back toward pre-cascade levels.",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": 20.598392
 },
 {
  "experiment_id": "ro-20261031-6fc49e",
  "night": "20261031",
  "kind": "entry",
  "claim": "Deep-drawdown bars with volume surges mark forced-liquidation capitulation; entering on the overshoot captures the mechanically-driven rebound as short-covering and re-entry flows reverse the cascade.",
  "falsification_criterion": "Family entry|dd_from_high+vol_ratio scores below the incumbent (24661.01) or is DISCARDed; or, conditional on deep dd_from_high, entry expectancy is flat across vol_ratio terciles (no interaction), which would show the rebound is not liquidation-driven.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 478.397214
 },
 {
  "experiment_id": "ro-20261031-577c16",
  "night": "20261031",
  "kind": "entry",
  "claim": "High-volume bars whose close sits mid-range signal absorption (large traders taking the other side), while high-volume closes pinned at the extreme signal initiative flow that persists; conditioning close_loc on vol_ratio separates exhaustion from continuation.",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 89.285474
 },
 {
  "experiment_id": "exp-20261101-0000",
  "night": "20261101",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 320.761544
 },
 {
  "experiment_id": "exp-20261101-0001",
  "night": "20261101",
  "kind": "entry",
  "claim": "20-bar breakouts taken only when price is above the 50-bar SMA have higher per-trade expectancy after costs than all breakouts.",
  "falsification_criterion": "Expectancy_eur at or below the baseline 125.08, score below 320.76, or fewer than 8 trades proves trend alignment adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0002",
  "night": "20261101",
  "kind": "entry",
  "claim": "20-bar breakouts taken only when price is above the 50-bar SMA (higher-timeframe trend alignment) have higher per-trade expectancy after 80 bps costs than all breakouts.",
  "falsification_criterion": "Cost-stress expectancy <= 125.08 EUR or Sharpe <= 0.85 or drawdown > 35% or < 8 trades proves trend alignment adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0003",
  "night": "20261101",
  "kind": "entry",
  "claim": "Adding vol_ratio(20) <= 1 to the 20-bar breakout entry raises per-trade expectancy by at least 30% without raising same-capital drawdraw above the incumbent's.",
  "falsification_criterion": "A backtest showing score <= 320.76 (e.g. trades fall so far the expectancy gain cannot compensate), same-capital drawdown > 35%, or an expectancy gain < 30% proves the filter wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0004",
  "night": "20261101",
  "kind": "entry",
  "claim": "20-day breakouts taken while realised volatility is still calm (ATR(14) <= 4% of price) carry materially higher per-trade expectancy than unfiltered breakouts, enough to raise the score above the incumbent despite fewer trades.",
  "falsification_criterion": "Score <= 319.7 or n_trades < 8; in particular, if per-trade expectancy stays at or below the baseline's EUR 125 while trade count drops, the calm-regime mechanism is proven wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0005",
  "night": "20261101",
  "kind": "feature",
  "claim": "Requiring close > SMA50 (sma_gap(50) > 0) on top of the 20-day breakout entry raises post-cost expectancy and Sharpe by removing failed breakouts that occur below the long-term mean.",
  "falsification_criterion": "At >=8 trades and <=35% same-capital drawdown, if the filtered candidate's post-cost expectancy <= 125.08 EUR or Sharpe <= 0.85 versus the incumbent, the regime hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0006",
  "night": "20261101",
  "kind": "entry",
  "claim": "Requiring the 20-day breakout to occur while price is above the 50-day SMA (sma_gap(50) > 0 added to breakout_dist(20) > 0) raises per-trade expectancy after costs and reduces drawdown versus the incumbent.",
  "falsification_criterion": "A backtest with at least 8 trades where expectancy_eur <= 125.08, or Sharpe <= 0.85, or max_drawdown_pct >= 9.9% against the incumbent proves regime alignment adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0007",
  "night": "20261101",
  "kind": "entry",
  "claim": "20-day-high breakouts taken only while price is above the 50-day EMA have higher cost-net expectancy than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "Discard if cost-stress expectancy or Sharpe falls below the incumbent (125.08 EUR / 0.85), trades drop below 8, or the filtered-out below-EMA50 subset shows equal or better per-trade expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 593.877109
 },
 {
  "experiment_id": "exp-20261101-0008",
  "night": "20261101",
  "kind": "entry",
  "claim": "Gating the incumbent 20-bar breakout entry with ATR(7) < ATR(30) raises cost-stress expectancy above the incumbent's 125.08 EUR/trade by deploying exposure only in volatility-compression regimes.",
  "falsification_criterion": "Reject if cost-stress expectancy is <= 125.08 EUR/trade, or Sharpe <= 0.85, or same-capital drawdown > 35%, or it fails to beat buy-and-hold at matched exposure (with >= 8 trades).",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0009",
  "night": "20261101",
  "kind": "strategy",
  "claim": "Exiting when close drops below the 20-EMA (30-bar cap) beats the fixed 10-bar exit on cost-stressed expectancy because winners are held until the trend breaks.",
  "falsification_criterion": "Cost-stressed expectancy or Sharpe below the incumbent's, same-capital drawdown above 35%, or fewer than 8 trades.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 51.188639
 },
 {
  "experiment_id": "exp-20261101-0010",
  "night": "20261101",
  "kind": "strategy",
  "claim": "The ema_gap(50)-filtered breakout entry (exp-0007: score 593.9, expectancy 132.9, Sharpe 0.87, maxDD 9.44%) failed only the same-capital drawdown gate (45.2%); scaling position_fraction 0.25 to 0.175 projects that gate metric to ~31.6% (<35%) while keeping score (~416 if size-linear) above the incumbent's 320.76.",
  "falsification_criterion": "Same-capital drawdown at 0.175 still exceeds 35% (sizing nonlinearity), or score falls below the incumbent's 320.76, or per-trade edge drops below the incumbent's 125.08 EUR, or n_trades < 8.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 437.620899
 },
 {
  "experiment_id": "exp-20261101-0011",
  "night": "20261101",
  "kind": "entry",
  "claim": "Breakouts that occur while short-term volatility is below long-term volatility (vol_ratio(60) < 1) produce higher cost-adjusted expectancy than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "A score below the incumbent's 437.62 or expectancy below EUR 83.52 without a drawdown reduction, or fewer than 8 trades, proves the squeeze-filter hypothesis wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0012",
  "night": "20261101",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(20) < 1) alongside the incumbent trend-breakout entry raises net score by excluding vol-explosion breakouts that hit the 2xATR stop.",
  "falsification_criterion": "Score below the incumbent's 437.6, expectancy per trade below 83.5 EUR, or fewer than 8 trades would disprove the contraction-quality hypothesis.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0013",
  "night": "20261101",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0014",
  "night": "20261101",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0015",
  "night": "20261101",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0016",
  "night": "20261101",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0017",
  "night": "20261101",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 41.90839
 },
 {
  "experiment_id": "exp-20261101-0018",
  "night": "20261101",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (vol_ratio(60) < 1) to the incumbent breakout entry raises cost-stressed expectancy above the incumbent's 83.52 EUR.",
  "falsification_criterion": "A backtest with expectancy at or below 83.52 EUR, score at or below 437.62, or fewer than 8 trades proves the contraction filter adds no post-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0019",
  "night": "20261101",
  "kind": "entry",
  "claim": "Requiring breakout-day volume above 1 std of the prior 10 bars (vol_z(10) > 1) raises per-trade expectancy by filtering out low-participation fakeout breaks.",
  "falsification_criterion": "A score below the incumbent's 437.6 (or cost_stress expectancy below 83.5 EUR) with >= 8 trades proves volume confirmation adds nothing; fewer than 8 trades also refutes practicality.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0020",
  "night": "20261101",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 149.36391
 },
 {
  "experiment_id": "exp-20261101-0021",
  "night": "20261101",
  "kind": "entry",
  "claim": "Requiring above-average volume (vol_z(30) > 0) at the breakout bar filters out fake breakouts and raises the incumbent's score after costs.",
  "falsification_criterion": "Score <= 437.62 (incumbent) or n_trades < 8 under the same envelope would prove volume confirmation adds no net edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0022",
  "night": "20261101",
  "kind": "entry",
  "claim": "20-bar breakouts in a 50-EMA uptrend that fire from volatility contraction (vol_ratio(60) < 1) have higher per-trade expectancy after costs than all such breakouts.",
  "falsification_criterion": "A backtest scoring <= 437.62 (incumbent score) or per-trade cost-stress expectancy <= 83.52 EUR, or fewer than 8 trades, proves the contraction filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0023",
  "night": "20261101",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 288.337161
 },
 {
  "experiment_id": "exp-20261101-0024",
  "night": "20261101",
  "kind": "entry",
  "claim": "Excluding low-volatility breakouts (atr_pct(14) <= 0.03) raises per-trade expectancy because their 10-day drift is smaller than the 160 bps round-trip cost.",
  "falsification_criterion": "A backtest with at least 8 trades where expectancy_eur or score stays below the incumbent (83.5 / 437.6), or same-capital drawdown exceeds 35%.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0025",
  "night": "20261101",
  "kind": "entry",
  "claim": "Requiring the close to exceed the prior 20-bar high by at least 0.5%, instead of any marginal new high, removes fee-dominated marginal breakouts and improves the risk-adjusted score over the incumbent.",
  "falsification_criterion": "Discard if score <= 437.62, or expectancy per trade falls below the incumbent's EUR 83.5, or trades drop below 8.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 473.087735
 },
 {
  "experiment_id": "exp-20261101-0026",
  "night": "20261101",
  "kind": "exit",
  "claim": "A tighter stop improves risk-adjusted return.",
  "falsification_criterion": "Stopped-out trades destroy more expectancy than they save.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 199.369309
 },
 {
  "experiment_id": "exp-20261101-0027",
  "night": "20261101",
  "kind": "entry",
  "claim": "Filtering incumbent 20-day breakouts to bars where atr_pct(7) < atr_pct(30) lowers same-capital drawdown below 35% at equal or better expectancy.",
  "falsification_criterion": "Same-capital drawdown stays above 35%, or expectancy falls below the incumbent's 83.52 EUR, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0028",
  "night": "20261101",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (vol_ratio(20) < 1) to the incumbent entry raises per-trade expectancy above 83.5 EUR by selecting breakouts that resolve compressed ranges rather than blow-off expansions.",
  "falsification_criterion": "A backtest with score <= 437.62 (incumbent), expectancy <= 83.5 EUR, fewer than 8 trades, or same-capital drawdown > 35% proves the squeeze-breakout mechanism adds nothing here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0029",
  "night": "20261101",
  "kind": "risk",
  "claim": "The edge supports a larger position.",
  "falsification_criterion": "Drawdown grows faster than CAGR.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 575.952688
 },
 {
  "experiment_id": "exp-20261101-0030",
  "night": "20261101",
  "kind": "entry",
  "claim": "Restricting the incumbent entry to volatility-contraction regimes (vol_ratio(60) < 1.0) cuts ATR-scaled stop losses enough to lower same-capital drawdown below 35% while raising score above 437.62.",
  "falsification_criterion": "Score <= 437.62 or same-capital drawdown > 35% disproves it; additionally, if the trades removed by the filter were net profitable, the contraction mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0031",
  "night": "20261101",
  "kind": "entry",
  "claim": "Breakouts entered when short-term volatility is at most 1.2x its 60-bar baseline (vol_ratio(60) < 1.2) show lower same-capital drawdown than the incumbent without losing per-trade expectancy.",
  "falsification_criterion": "Same-capital drawdown above the 35% gate or above the incumbent's scaled drawdown, or expectancy falling below ~60 EUR/trade on >=8 trades, proves the calm-regime filter does not improve the breakout entry.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0032",
  "night": "20261101",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 0.0
 },
 {
  "experiment_id": "exp-20261101-0033",
  "night": "20261101",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) before a 20-bar breakout raises net expectancy by filtering out exhaustion breakouts that occur in already-expanded volatility.",
  "falsification_criterion": "A backtest scoring <= 437.62 (incumbent score), expectancy <= 83.5 EUR, fewer than 8 trades, or a same-capital drawdown above 35% proves the squeeze mechanism adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0034",
  "night": "20261101",
  "kind": "entry",
  "claim": "Breakouts occurring on above-average volume (vol_z(30) > 0) carry higher net expectancy per trade than the incumbent's unfiltered breakouts, improving overall score despite fewer trades.",
  "falsification_criterion": "A backtest scoring <= 437.62 (incumbent), same-capital drawdown above 35%, or negative net PnL proves volume confirmation adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261101-34769d",
  "night": "20261101",
  "kind": "strategy",
  "claim": "Volatility compression plus volume expansion jointly identify regime ignition: gate entries on low atr_pct AND high vol_ratio to buy the stop-cascade launch that breakout-geometry features (all dead in memory) fail to capture.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261101-32f8a9",
  "night": "20261101",
  "kind": "strategy",
  "claim": "A close in the top of the daily range signals the winning side of the clearing auction, but only volume expansion distinguishes informed accumulation from squeeze or illiquid drift; gate entries on close_loc AND vol_ratio jointly.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0037",
  "night": "20261101",
  "kind": "entry",
  "claim": "20-bar breakouts in a 50-EMA uptrend that occur during volatility contraction (vol_ratio(20) < 1) yield higher per-trade expectancy after costs than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "If the filtered variant's per-trade expectancy is <= the incumbent's 83.5 EUR or its score falls below 437.6, the contraction-breakout mechanism is wrong; if trades drop below 8 the filter is unusable.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261101-0038",
  "night": "20261101",
  "kind": "entry",
  "claim": "Adding a volatility-contraction gate (atr_pct(7) < atr_pct(30)) to the incumbent entry raises post-cost expectancy by skipping breakouts entered after volatility has already expanded.",
  "falsification_criterion": "Cost-stress expectancy or score at or below the incumbent (83.5 EUR / 437.6), or fewer than 8 trades, proves the contraction filter removes good entries rather than bad ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0000",
  "night": "20261102",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 409.481991
 },
 {
  "experiment_id": "exp-20261102-0001",
  "night": "20261102",
  "kind": "entry",
  "claim": "20-bar breakouts occurring with close in the top decile of the prior 60-bar range have higher 10-day forward expectancy after costs than breakouts deep inside a 60-bar downtrend range.",
  "falsification_criterion": "If per-trade cost-stressed expectancy or score falls below the incumbent (125.08 EUR / 409.48), or the clause cuts n_trades by >60% while per-trade expectancy does not rise, the near-high-quality hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0002",
  "night": "20261102",
  "kind": "entry",
  "claim": "20-bar breakouts that occur during volatility contraction (vol_ratio(20) < 1) earn higher per-trade expectancy than unfiltered breakouts.",
  "falsification_criterion": "Score or cost_stress expectancy below the incumbent (409.48 / 125.08 EUR), or fewer than 8 trades, or positive_symbol_share dropping under ~0.6 would prove the contraction filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0003",
  "night": "20261102",
  "kind": "entry",
  "claim": "20-bar breakouts taken only when price is above the 50-bar SMA carry higher cost-adjusted expectancy than unfiltered breakouts, because new highs below the dominant trend are bear-market rallies that mean-revert.",
  "falsification_criterion": "The candidate scores below the incumbent (score 409.48, expectancy 125.08 EUR) or falls under 8 trades — proving sub-50SMA breakouts were not worse after 80 bps per leg.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0004",
  "night": "20261102",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(20) < 0.75) before the incumbent 20-bar breakout entry raises per-trade cost-stressed expectancy versus the unfiltered baseline.",
  "falsification_criterion": "Backtest score <= 409.48 or cost-stressed expectancy per trade <= EUR 125.08 (or fewer than 8 trades), proving squeeze-breakouts are not better than ordinary breakouts here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0005",
  "night": "20261102",
  "kind": "entry",
  "claim": "Requiring sma_gap(50) > 0 on top of the 20-bar-high breakout entry raises per-trade expectancy, because breakouts above the slow mean continue while breakouts below it mean-revert.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's 125.08 EUR/trade (score <= 409.48), fewer than 8 trades, or no expectancy gap between sma_gap(50)>0 and sma_gap(50)<=0 breakout trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0006",
  "night": "20261102",
  "kind": "entry",
  "claim": "Breakouts from volatility contraction (vol_ratio(60) < 0.8) yield higher post-cost per-trade expectancy than unconditional 20-bar breakouts.",
  "falsification_criterion": "Per-trade expectancy at or below the incumbent's 125.08 EUR after costs, or fewer than 8 trades, proving the squeeze filter adds nothing but trade reduction.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0007",
  "night": "20261102",
  "kind": "entry",
  "claim": "Requiring sma_gap(50) > 0 at the 20-day-high breakout removes counter-trend bear-rally entries and raises per-trade cost-stressed expectancy above the incumbent's 125.08 EUR.",
  "falsification_criterion": "Disproved if the filtered candidate's cost-stress expectancy per trade is <= 125.08 EUR or Sharpe falls below 0.85, or if the removed below-50-SMA breakout trades had equal or better expectancy than the kept ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0008",
  "night": "20261102",
  "kind": "entry",
  "claim": "20-bar breakouts that occur while price is above the 50-bar SMA have higher after-cost expectancy than breakouts below it, because trend-aligned breakouts continue while counter-trend ones mean-revert.",
  "falsification_criterion": "If the candidate's expectancy or Sharpe falls below the incumbent's, or it retains over ~90% of trades with no improvement (clause inert), or trades drop below 8, the trend-alignment hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0009",
  "night": "20261102",
  "kind": "strategy",
  "claim": "A 20-day-breakout trade that closes below the 10-bar EMA has lost follow-through, so exiting there instead of holding the full 10 bars raises net expectancy by cutting failed breakouts early.",
  "falsification_criterion": "Net expectancy per trade at or below the incumbent's €125 after costs (n≈1168), which would prove the EMA-failure exit adds nothing over the fixed 10-bar hold.",
  "verdict": "DISCARD",
  "stage_reached": "screen",
  "score": 0.0
 },
 {
  "experiment_id": "exp-20261102-0010",
  "night": "20261102",
  "kind": "entry",
  "claim": "20-day-high breakouts occurring under volatility contraction (vol_ratio(20) < 1.0) earn higher per-trade expectancy than breakouts during volatility expansion.",
  "falsification_criterion": "Scoring below the incumbent (score < 409.48, cost-stress expectancy < EUR 125.08) or producing fewer than 8 trades would prove the contraction filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0011",
  "night": "20261102",
  "kind": "exit",
  "claim": "Adding a 10% take-profit to the incumbent breakout entry raises score because post-breakout gains mean-revert before the 10-day time exit.",
  "falsification_criterion": "Score at or below the incumbent's 409.48, expectancy under the cost hurdle, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261102-651608",
  "night": "20261102",
  "kind": "strategy",
  "claim": "Gate entries on the conjunction of volatility expansion and participation: take signals only when atr_pct is elevated AND vol_ratio is elevated. Volatility events backed by real volume persist because informed flow is behind them; volatility expansion without participation is stop-run noise that mean-reverts.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261102-426fd1",
  "night": "20261102",
  "kind": "strategy",
  "claim": "Enter when close_loc is near the top of the range AND vol_ratio is high: closing-auction order-flow imbalance from benchmark-driven institutional execution persists into the next session.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0014",
  "night": "20261102",
  "kind": "entry",
  "claim": "20-day-high breakouts that occur while 5-day volatility is still below 20-day volatility (early-stage, squeeze-backed breakouts) have higher per-trade expectancy after costs than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "Cost-stress expectancy at or below the incumbent's 125.08 EUR/trade with at least 8 trades, or fewer than 8 trades, falsifies it; equivalently, the filtered-out subset outperforming the kept subset.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261102-0015",
  "night": "20261102",
  "kind": "entry",
  "claim": "Requiring the 20-bar breakout entry to occur above the 50-bar SMA (sma_gap(50) > 0) raises cost-stressed expectancy above the incumbent's 125.08 EUR by filtering out counter-trend chop breakouts.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's 125.08 EUR, fewer than 8 trades, or a drop in positive_symbol_share below 0.708 would prove the regime filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0000",
  "night": "20261103",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 412.693002
 },
 {
  "experiment_id": "exp-20261103-0001",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-bar breakouts that occur above the 50-bar SMA (confirmed long-term uptrend) have higher per-trade expectancy than breakouts below it, so adding sma_gap(50) > 0 improves the incumbent.",
  "falsification_criterion": "If the candidate's cost-stress expectancy is at or below the baseline's 126.55 EUR per trade (or it yields fewer than 8 trades), trend alignment adds no edge and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0002",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-bar-high breakouts occurring during volatility contraction (5-bar return std below 20-bar std) earn higher net expectancy per trade than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "Net cost-stressed expectancy per trade at or below the incumbent's 126.55 EUR, fewer than 8 trades, or a lower total score would prove the contraction premise wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0003",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-bar high breakouts filtered to uptrends (close above the 50-bar SMA) deliver higher net expectancy than the unfiltered incumbent, because post-breakout drift persists mainly when the higher timeframe trend agrees.",
  "falsification_criterion": "A backtest with at least 8 trades whose score does not exceed 412.69 (or expectancy 126.55 EUR) after costs proves the trend filter adds no edge over the raw breakout.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0004",
  "night": "20261103",
  "kind": "entry",
  "claim": "A 20-bar breakout whose close also sits in the top quartile of the 60-bar Donchian range (donchian_pos(60) > 0.75) is a genuine multi-timeframe breakout and raises per-trade expectancy above the incumbent's 126.55 EUR.",
  "falsification_criterion": "Fewer than 8 trades, per-trade expectancy <= 126.55 EUR, or score <= 412.7 would prove the multi-timeframe filter adds no value and the family should be blacklisted.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 1571.752543
 },
 {
  "experiment_id": "exp-20261103-0005",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-bar breakouts at the top of a 60-bar Donchian channel that fire after volatility contraction (vol_ratio(60) < 1) carry higher per-trade expectancy than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "Expectancy_eur at or below the incumbent's 166.21, or fewer than 8 trades, proves the contraction filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0006",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-bar breakouts entered only when 5-bar realized volatility is below its 20-bar baseline (vol_ratio(20) < 1) produce higher net expectancy than the incumbent's unfiltered breakout entry.",
  "falsification_criterion": "The candidate is wrong if it yields fewer than 8 trades, or its cost-stressed expectancy/score falls below the incumbent (166.21 EUR expectancy, score 1571.75), proving contraction adds no edge after 80 bps per leg.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0007",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0008",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2220.968392
 },
 {
  "experiment_id": "exp-20261103-0009",
  "night": "20261103",
  "kind": "exit",
  "claim": "Confirmed 20-bar breakouts frequently spike more than 15% intra-holding and mean-revert before the 10-bar time exit, so adding a 15% take-profit to the incumbent raises expectancy.",
  "falsification_criterion": "Fewer than ~20% of incumbent-winning trades touch +15% within 10 bars, or cost-stress expectancy falls at or below the incumbent's 166 EUR — then the spike-capture mechanism does not exist and the TP is pure truncation.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 0.0
 },
 {
  "experiment_id": "exp-20261103-0010",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (short-term vol below 60-bar vol) to the incumbent breakout entry raises cost-stressed expectancy by isolating squeeze breakouts with follow-through.",
  "falsification_criterion": "Cost-stressed expectancy below the incumbent's 166.21 EUR, fewer than 8 trades, or max drawdown above 35% proves contraction filtering adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0011",
  "night": "20261103",
  "kind": "entry",
  "claim": "Only take breakouts above the long-term mean.",
  "falsification_criterion": "The filter removes the profitable half of the sample.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0012",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0013",
  "night": "20261103",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 190.122189
 },
 {
  "experiment_id": "exp-20261103-0014",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the incumbent entry raises cost-stressed expectancy by removing counter-trend breakout traps.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's 166.21 EUR, or fewer than 8 trades, disproves the trend-alignment mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0015",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-day breakouts taken only when price is above the 50-bar SMA carry higher per-trade expectancy than all breakouts, because below-mean breakouts are bear-market rallies that mean-revert.",
  "falsification_criterion": "Score <= incumbent 1571.75, or net per-trade expectancy <= 166.21 EUR with >= 8 trades, or capital drawdown > 35% from concentration — any of these proves the trend filter adds no edge after 80 bps costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0016",
  "night": "20261103",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1441.805968
 },
 {
  "experiment_id": "exp-20261103-0017",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts taken only when price is above the 50-bar SMA have higher net expectancy after costs than the incumbent's unfiltered breakouts, because trend-aligned breakouts follow through while crash-bounce breakouts fail.",
  "falsification_criterion": "At identical envelope and same capital, the candidate scores at or below the incumbent's 1571.75 (or expectancy <= 166.21 EUR), or drawdown exceeds 35%, proving trend alignment adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0018",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts emerging from volatility contraction (vol_ratio(20) < 1) follow through more reliably than high-volatility blow-off breakouts, raising same-capital score over the incumbent.",
  "falsification_criterion": "Score <= 1571.75, max drawdown > 35%, or fewer than 8 trades under the same capital rule.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0019",
  "night": "20261103",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 1935.420065
 },
 {
  "experiment_id": "exp-20261103-0020",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts preceded by volatility compression (vol_ratio(60) < 1) deliver higher expectancy than uncompressed breakouts under the incumbent exit.",
  "falsification_criterion": "Same-capital backtest with identical exits scores below the incumbent (score < 1935 or expectancy < 180 EUR), or trade count collapses below a readable sample, proving compression does not improve breakout quality.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0021",
  "night": "20261103",
  "kind": "entry",
  "claim": "Filtering the incumbent breakout entry to bars where close is above the 50-bar SMA removes counter-trend breakouts and raises same-capital score above the incumbent.",
  "falsification_criterion": "A backtest with n_trades >= 8 whose same-capital score is <= the incumbent's 1935, or which breaches the 35% drawdown cap, proves the trend-alignment filter adds no value.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0022",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0023",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2222.467675
 },
 {
  "experiment_id": "exp-20261103-0024",
  "night": "20261103",
  "kind": "entry",
  "claim": "Donchian breakouts above the 50-period EMA have higher post-cost expectancy than those below it.",
  "falsification_criterion": "Score at or below the incumbent's 1935, fewer than 8 trades, or same-capital drawdown above 35% would disprove the trend-filter mechanism.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0025",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring sma_gap(50) > 0 at breakout entry filters counter-regime breakouts and raises expectancy versus the incumbent.",
  "falsification_criterion": "Score <= 1935.42 or expectancy <= 180.34 EUR or fewer than 8 trades would prove the regime filter adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0026",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0027",
  "night": "20261103",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 357.179215
 },
 {
  "experiment_id": "exp-20261103-0028",
  "night": "20261103",
  "kind": "entry",
  "claim": "Capping entry volatility with atr_pct(14) < 0.07 raises cost-stressed score above the incumbent by excluding high-volatility exhaustion breakouts that drive drawdown.",
  "falsification_criterion": "Score <= 1935.42, or capital drawdown > 35%, or fewer than 8 trades would prove the volatility-cap mechanism wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0029",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-bar breakouts in the top Donchian quartile that occur while price is above the 50-bar SMA have higher post-cost expectancy than those below it, because trend-aligned breakouts exhibit more follow-through.",
  "falsification_criterion": "Same-capital score at or below the incumbent's 1935.42 (or expectancy below 180.34 EUR, or fewer than 8 trades) proves the trend-regime filter adds no edge after 80 bps per leg.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0030",
  "night": "20261103",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 3308.948499
 },
 {
  "experiment_id": "exp-20261103-0031",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding a long-trend alignment filter (close above the 50-bar EMA) to the incumbent breakout entry removes counter-trend 20-day breakouts and raises net expectancy after costs.",
  "falsification_criterion": "Score at or below the incumbent's 3308.9 (or expectancy <= 338.78 EUR), or fewer than 8 trades, would prove the trend-alignment clause adds no value; a materially worse score with a large trade reduction proves it filters away good trades too.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0032",
  "night": "20261103",
  "kind": "exit",
  "claim": "Post-breakout momentum drift persists past bar 20, so extending the time exit from 20 to 25 bars raises expectancy by letting winners run.",
  "falsification_criterion": "Score below the incumbent's 3308.9 or expectancy below 338.78 EUR/trade on ~608 trades proves the edge decays by bar 20 and the longer hold only adds risk.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 563.706383
 },
 {
  "experiment_id": "exp-20261103-0033",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring price above its 50-bar SMA (sma_gap(50) > 0) at entry raises same-capital expectancy by removing counter-trend 20d-high bounces.",
  "falsification_criterion": "Same-capital expectancy <= 1935.42 (incumbent) or same-capital drawdown > 35%, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0034",
  "night": "20261103",
  "kind": "entry",
  "claim": "Gating the incumbent breakout entry with a volatility ceiling (atr_pct(30) < 0.06) cuts crash-clustered stop-outs and lowers max drawdown while preserving expectancy at or above the incumbent's €338.",
  "falsification_criterion": "A backtest where max_drawdown_pct stays near or above the incumbent's 7.45%, or expectancy/score drops below €338/3308, or trades fall under 8 — any of these proves the regime-gating mechanism adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0035",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0036",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2016.397044
 },
 {
  "experiment_id": "exp-20261103-0037",
  "night": "20261103",
  "kind": "exit",
  "claim": "Widening the stop from 2.5x to 3.0x ATR raises same-capital score because post-breakout retests pierce a 2.5xATR stop and forfeit the continuation drift.",
  "falsification_criterion": "A score at or below the incumbent 3308.95, same-capital drawdown above 35%, or fewer than 8 trades proves the retest-survival mechanism wrong.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 3415.143801
 },
 {
  "experiment_id": "exp-20261103-0038",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding vol_ratio(60) < 1 to the incumbent entry raises per-trade expectancy because breakouts from volatility compression persist, while breakouts during already-expanded volatility churn and mean-revert.",
  "falsification_criterion": "Per-trade expectancy below the incumbent's ~0.61 EUR/trade (358.76/592) or score < 3415 on >= 8 trades proves the compression filter adds no edge; under ~100 surviving trades with flat expectancy also falsifies it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0039",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-day breakouts that occur during volatility contraction (short-term std below 20-bar std) have higher per-trade expectancy than breakouts in already-expanded volatility.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (3415 / 358.76 EUR) at same capital, or fewer than 8 trades, proving contraction adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0040",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0041",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2632.919239
 },
 {
  "experiment_id": "exp-20261103-0042",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA (sma_gap(50) > 0) on top of the incumbent breakout entry raises net expectancy by filtering out counter-trend breakouts.",
  "falsification_criterion": "Score below 3415.14 (incumbent) or expectancy below 358.76 EUR with at least 8 trades on identical capital and envelope; or the removed trades outperform the kept ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0043",
  "night": "20261103",
  "kind": "entry",
  "claim": "20-bar breakouts occurring on above-average volume (vol_z(30) > 0) carry higher post-cost expectancy than the same breakouts on below-average volume.",
  "falsification_criterion": "Same-capital score below the incumbent's 3415.14 (or per-trade expectancy below 358.76 EUR) proves volume confirmation adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0044",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0045",
  "night": "20261103",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2433.879035
 },
 {
  "experiment_id": "exp-20261103-0046",
  "night": "20261103",
  "kind": "feature",
  "claim": "20-bar breakouts taken above the 50-bar SMA have higher per-trade expectancy than the same breakouts taken below it.",
  "falsification_criterion": "Score below the incumbent's 3415 (or fewer than 8 trades) under the identical envelope, proving the SMA regime adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0047",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the incumbent entry filters out bear-market trap breakouts and raises cost-stressed expectancy.",
  "falsification_criterion": "Score below the incumbent's 3415.14 or per-trade expectancy gain smaller than the loss from removed trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0048",
  "night": "20261103",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1404.332413
 },
 {
  "experiment_id": "exp-20261103-0049",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding a volume-confirmation clause (vol_z(10) > 1.0) to the incumbent entry raises per-trade expectancy above 358.76 EUR because volume-backed breakouts carry larger genuine follow-through.",
  "falsification_criterion": "Score below the incumbent's 3415.14, expectancy below 358.76 EUR/trade, or fewer than 8 trades, proving volume adds no quality on top of the breakout signal.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0050",
  "night": "20261103",
  "kind": "entry",
  "claim": "Restricting the incumbent breakout entry to bars where vol_ratio(20) < 0.75 (volatility compression before the breakout) raises expectancy by selecting directional resolutions over choppy ones.",
  "falsification_criterion": "A backtest scoring at or below the incumbent's 3415.14 (or showing lower per-trade expectancy than 358.76 EUR) with fewer than 592 trades proves compression adds no selection value after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0051",
  "night": "20261103",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2866.105854
 },
 {
  "experiment_id": "exp-20261103-0052",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding vol_z(60) > 1 to the incumbent entry raises per-trade expectancy because volume-confirmed 20-bar breakouts follow through more reliably than unconfirmed ones.",
  "falsification_criterion": "A backtest scoring below the incumbent (score <= 3415.14, or expectancy <= 358.76 EUR) with at least 8 trades proves volume confirmation adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0053",
  "night": "20261103",
  "kind": "entry",
  "claim": "Breakouts with close above the 50-bar EMA (trend-aligned) have higher per-trade expectancy than unfiltered breakouts, because counter-trend spikes above a 20-bar high mean-revert.",
  "falsification_criterion": "Score at or below the incumbent's 3415.14, or fewer than 8 trades, proves the trend filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0054",
  "night": "20261103",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 20.913538
 },
 {
  "experiment_id": "exp-20261103-0055",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring the breakout bar to close in its top 30% (close_loc(1) > 0.7) removes wick-fakeout breakouts and raises per-trade net expectancy enough to beat the incumbent score despite fewer trades.",
  "falsification_criterion": "Score <= 3415 (incumbent), or per-trade expectancy <= 358.76 EUR, or fewer than 8 trades, proves the close-location filter adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0056",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring breakout-bar volume above its 10-bar mean (vol_z(10) > 0) raises cost-stress expectancy above the incumbent's 358.76 EUR per trade.",
  "falsification_criterion": "Cost-stress expectancy at or below 358.76 EUR, or fewer than 8 trades, or score below 3415.14 on the same capital, proving volume adds no post-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0057",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (vol_ratio(60) < 1) to the incumbent breakout entry raises per-trade expectancy by removing whipsaw breakouts from already-expanded volatility regimes.",
  "falsification_criterion": "The candidate is wrong if its same-capital score is below the incumbent's 3415.14, or per-trade expectancy fails to exceed the incumbent's EUR 358.76 after costs, or it produces fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0058",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring close > EMA(50) on top of the incumbent breakout entry raises per-trade expectancy and Sharpe because counter-trend breakouts below the long-term mean are negative-expectancy traps.",
  "falsification_criterion": "Score <= incumbent 3415.14 (or expectancy <= 358.76 EUR / Sharpe <= 1.03) with >= 8 trades, i.e. the filtered-out below-EMA trades were not worse than the kept ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0059",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring the price to be above its 50-bar SMA (sma_gap(50) > 0) at breakout entry raises per-trade expectancy by excluding counter-trend 20-day-high bounces.",
  "falsification_criterion": "Per-trade expectancy at or below the incumbent's 358.76 EUR, or a total score at or below 3415.14, or fewer than 8 trades, proves the trend filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0060",
  "night": "20261103",
  "kind": "entry",
  "claim": "Restricting the incumbent's breakout entries to calm regimes (ATR(14) < ATR(30) at entry) raises cost-stress expectancy above the incumbent's 358.76 EUR.",
  "falsification_criterion": "Cost-stress expectancy <= 358.76 EUR, n_trades < 8, or capital drawdown > 35% would falsify it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261103-e4ba92",
  "night": "20261103",
  "kind": "entry",
  "claim": "Buy liquidation-cascade exhaustion: gate entries on deep drawdown from recent high combined with abnormal volume, harvesting the systematic post-forced-selling reversion.",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 8.395986
 },
 {
  "experiment_id": "ro-20261103-84d041",
  "night": "20261103",
  "kind": "strategy",
  "claim": "Enter on strong closes only during compressed volatility, buying the start of an expansion episode instead of its exhaustion.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0063",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the incumbent's breakout entry raises cost-stressed expectancy by discarding counter-trend breakouts that occur below the 50-bar mean.",
  "falsification_criterion": "Cost-stressed expectancy at or below the incumbent's 358.76 EUR with n_trades >= 8 proves the excluded trades were not worse and the trend-alignment filter is dead; n_trades < 8 makes it unreadable.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0064",
  "night": "20261103",
  "kind": "exit",
  "claim": "Capping winners at +15% take-profit raises score versus the incumbent's uncapped 20-day time exit, because breakout follow-through largely completes below +15%.",
  "falsification_criterion": "Score < 3415.1 or cost-stress expectancy < €358.76 proves the edge sits in the >+15% tail and TP must stay null; n_trades deviating from 592 invalidates the run.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0065",
  "night": "20261103",
  "kind": "mechanism",
  "claim": "BTC-Schritt wird von einem zurückgebliebenen Alt in zehn Tagen teilweise nachgeholt.",
  "falsification_criterion": "Netto-Alpha gegenüber der Basisrate <= 0 bei t >= 2 über getrennte Teilperioden",
  "verdict": "INCONCLUSIVE",
  "stage_reached": "portfolio_10k",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0066",
  "night": "20261103",
  "kind": "mechanism",
  "claim": "BTC-Schritt wird von einem zurückgebliebenen Alt in zehn Tagen teilweise nachgeholt.",
  "falsification_criterion": "Netto-Alpha gegenüber der Basisrate ≤ 0 bei t ≥ 2 über getrennte Teilperioden",
  "verdict": "DISCARD",
  "stage_reached": "portfolio_10k",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0067",
  "night": "20261103",
  "kind": "entry",
  "claim": "Adding the trend-alignment filter sma_gap(50) > 0 to the incumbent entry raises net expectancy per trade above the incumbent's 358.76 EUR.",
  "falsification_criterion": "Net expectancy per trade <= 358.76 EUR, Sharpe below 1.03, or fewer than 40 trades proves the filter removes edge rather than noise.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0068",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring close > EMA(50) on top of the incumbent breakout entry raises per-trade expectancy after costs by filtering out false breakouts that occur below the long-term trend.",
  "falsification_criterion": "Cost-stress expectancy per trade or Sharpe at or below the incumbent (358.76 EUR, 1.03), or fewer than 40 trades, proves the trend filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261103-0069",
  "night": "20261103",
  "kind": "entry",
  "claim": "Requiring the breakout bar's volume to be at least 0.5 standard deviations above its trailing 30-bar mean raises net per-trade expectancy versus the incumbent, because participation-confirmed breakouts follow through more often than thin-volume fakeouts.",
  "falsification_criterion": "Net per-trade expectancy at or below the incumbent's 358.76 EUR, or fewer than 8 trades, proving volume confirmation adds no post-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0000",
  "night": "20261104",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 700.828806
 },
 {
  "experiment_id": "exp-20261104-0001",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts that occur above the 50-bar SMA have higher cost-adjusted per-trade expectancy than breakouts below it, because higher-timeframe trend alignment reduces fakeout frequency.",
  "falsification_criterion": "With sma_gap(50) > 0 added and everything else identical to the incumbent, cost-adjusted expectancy per trade is <= 113.99 EUR or Sharpe <= 0.846 (with >= 8 trades); then trend alignment adds nothing and the hypothesis is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0002",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar-high breakouts taken while 14-bar ATR% is below 30-bar ATR% (declining volatility) have higher net expectancy than the unfiltered baseline.",
  "falsification_criterion": "Net expectancy per trade at or below the incumbent's 113.99 EUR with at least 8 trades, or fewer than 8 trades generated, proves the volatility-regime filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0003",
  "night": "20261104",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the 20-bar breakout entry raises per-trade expectancy by removing counter-trend breakouts that occur below the 50-bar mean.",
  "falsification_criterion": "Cost-stress expectancy per trade <= 113.99 EUR or score < 700.8 with at least 8 trades, showing trend-aligned breakouts are not better than unfiltered ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0004",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts that also close in the top quartile of the prior 60-bar Donchian range show stronger 10-bar drift persistence than breakouts occurring mid-range, because multi-timeframe confirmation filters noise highs inside quiet ranges.",
  "falsification_criterion": "Cost-stress expectancy per trade at or below the incumbent's 113.99 EUR (or n_trades < 8), showing the 60-bar context filter adds no persistence beyond the raw 20-bar breakout.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 1638.228422
 },
 {
  "experiment_id": "exp-20261104-0005",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-day breakouts in the top quartile of the 60-bar range that occur above the 50-bar EMA have higher per-trade expectancy than those below it.",
  "falsification_criterion": "If expectancy or Sharpe falls below the incumbent (166.46 EUR / 0.966), or trades drop under 8, the trend-alignment filter is proven worthless.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0006",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts whose 10-bar EMA gap exceeds their 50-bar EMA gap (fresh, accelerating thrust off a base) deliver higher net expectancy than late-stage, decelerating breakouts.",
  "falsification_criterion": "A backtest with score <= 1638 (incumbent), expectancy <= 166.46 EUR, or fewer than 8 trades proves the acceleration filter adds no post-cost edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0007",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0008",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2200.311247
 },
 {
  "experiment_id": "exp-20261104-0009",
  "night": "20261104",
  "kind": "risk",
  "claim": "Cutting position_fraction from 0.25 to 0.20 raises the score because the drawdown penalty falls proportionally while per-trade expectancy is unchanged.",
  "falsification_criterion": "Score <= incumbent's 1638, or max_drawdown stays above ~5.7% (no proportional reduction), or expectancy falls materially below 166 EUR.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1065.113594
 },
 {
  "experiment_id": "exp-20261104-0010",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts occurring above the 50-bar SMA (established uptrend) carry higher per-trade expectancy than equivalent breakouts below it (bear-rally spikes).",
  "falsification_criterion": "Same-capital score below incumbent 1638.23, or expectancy per trade <= 166.46 EUR, or positive_symbol_share below 0.75 after applying the filter.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0011",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts with prior volatility contraction (vol_ratio(60) < 1) have higher per-trade expectancy than the incumbent's unfiltered breakouts, because they mark trend initiation rather than exhaustion.",
  "falsification_criterion": "Discard if same-capital score <= 1638.2, or cost-stress expectancy per trade <= 166.46 EUR, or if the trades removed by the filter are collectively profitable (i.e., the filter cut winners, not losers); n_trades < 8 also falsifies viability.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0012",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0013",
  "night": "20261104",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 196.640859
 },
 {
  "experiment_id": "exp-20261104-0014",
  "night": "20261104",
  "kind": "entry",
  "claim": "Selecting breakouts that occur during volatility contraction (vol_ratio(60) < 1) improves the incumbent's score by filtering blow-off entries that drive drawdown.",
  "falsification_criterion": "Score <= 1638.2, same-capital drawdown > 35%, or n_trades < 8 would disprove the squeeze-breakout mechanism; if expectancy per trade does not rise while trade count falls, the filter is merely cutting exposure.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0015",
  "night": "20261104",
  "kind": "exit",
  "claim": "Extending the holding period from 10 to 20 bars raises net expectancy because post-breakout drift persists beyond 10 days and fewer round trips reduce fee drag.",
  "falsification_criterion": "A same-capital score below the incumbent's 1638, per-trade expectancy below 166 EUR, or same-capital drawdown above 35% proves the drift does not survive bars 10-20 and the extension is wrong.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1453.015568
 },
 {
  "experiment_id": "exp-20261104-0016",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-day breakouts occurring above the 50-bar SMA persist longer and yield higher cost-stressed expectancy than breakouts below it.",
  "falsification_criterion": "If the sma_gap(50)>0 filter lowers cost-stressed expectancy or score below the incumbent (166.46 / 1638), cuts trades below 8, or pushes same-capital drawdown above 35%, the trend-alignment mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0017",
  "night": "20261104",
  "kind": "entry",
  "claim": "20d breakouts in the upper Donchian quartile that also close above the 50-bar SMA (sma_gap(50) > 0) have higher cost-adjusted expectancy than the incumbent without the trend filter, because counter-trend breakouts mean-revert.",
  "falsification_criterion": "Same-capital score below the incumbent's 1638.2, or max drawdown above 35%, or fewer than 8 trades, would prove the trend filter adds no net edge after the 80 bps per-leg costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0018",
  "night": "20261104",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 1924.130529
 },
 {
  "experiment_id": "exp-20261104-0019",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts preceded by volatility contraction (15d vol below 60d vol) deliver higher per-trade expectancy than breakouts during elevated volatility.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (1924 / 180.57 EUR per trade) on the same capital, or fewer than 8 trades, proving the contraction filter adds no edge over the raw breakout entry.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0020",
  "night": "20261104",
  "kind": "entry",
  "claim": "Adding a long-trend regime filter (sma_gap(50) > 0) to the breakout entry raises per-trade expectancy by excluding breakouts that occur below the 50-bar mean, i.e. inside downtrends.",
  "falsification_criterion": "Same-capital score below the incumbent's 1924 (or expectancy below 180 EUR), fewer than 8 trades, or drawdown above 35%, would prove the trend filter adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0021",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0022",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2209.574473
 },
 {
  "experiment_id": "exp-20261104-0023",
  "night": "20261104",
  "kind": "entry",
  "claim": "Adding sma_gap(50) > 0 to the incumbent entry raises cost-stressed expectancy by removing breakouts that occur below the 50-bar mean (failed counter-trend rallies).",
  "falsification_criterion": "Same-capital terminal wealth below the 1638 baseline, drawdown above 35%, or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0024",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts in the upper Donchian zone that occur above the 50-bar SMA (uptrend regime) deliver higher cost-stressed expectancy than the same breakout taken regardless of regime.",
  "falsification_criterion": "Discard if same-capital drawdown exceeds 35%, or same-capital final value / score falls below the incumbent (fb0456be3f6af07c), or expectancy drops under the 80 bps cost hurdle; fewer than 8 trades also falsifies.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0025",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0026",
  "night": "20261104",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 366.627979
 },
 {
  "experiment_id": "exp-20261104-0027",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-day breakouts entered while short-term volatility is at or below its 60-bar baseline (vol_ratio(60) <= 1) yield higher cost-stressed expectancy than breakouts from expanded volatility.",
  "falsification_criterion": "Score below the incumbent's 1924 on same capital, fewer than 8 trades, or drawdown above 35% would prove the contraction filter adds no net edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0028",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts taken while price is above the 50-bar SMA have materially higher expectancy and lower drawdown than breakouts below it.",
  "falsification_criterion": "Same-capital score <= 1924.13 (incumbent) or n_trades < 8 or expectancy per trade below the incumbent's 180.57 EUR would prove the regime filter subtracts value.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0029",
  "night": "20261104",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 3289.8374
 },
 {
  "experiment_id": "exp-20261104-0030",
  "night": "20261104",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar EMA at breakout entry improves risk-adjusted expectancy versus the incumbent by removing counter-trend breakouts.",
  "falsification_criterion": "Any result with score below the incumbent's 3289.8, expectancy below 339.2 EUR, drawdown above 35%, or fewer than 8 trades proves the trend-alignment filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0031",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts entered while short-term volatility is contracting (ATR(7) < ATR(30)) produce higher cost-stress expectancy than the same breakouts entered unconditionally, because calm-regime entries avoid volatility-spike stop-outs.",
  "falsification_criterion": "Score or cost-stress expectancy below the incumbent (3289 / 339 EUR), fewer than 8 trades, or drawdown above 35% would prove the calm-regime filter destroys rather than improves the edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0032",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0033",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2004.6271
 },
 {
  "experiment_id": "exp-20261104-0034",
  "night": "20261104",
  "kind": "entry",
  "claim": "Filtering 20-bar breakouts to those with close above the 50-bar SMA improves expectancy by removing counter-trend breakouts.",
  "falsification_criterion": "Score at or below the incumbent's 3289.84, expectancy below 339.23 EUR, or fewer than 8 trades would prove the trend filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0035",
  "night": "20261104",
  "kind": "entry",
  "claim": "Requiring volume confirmation (vol_z(30) > 1) on 20-bar breakouts raises per-trade expectancy by filtering out low-participation moves.",
  "falsification_criterion": "A backtest scoring below the incumbent's 3289.84 on same-capital comparison (or under 8 trades) proves volume confirmation adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0036",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0037",
  "night": "20261104",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1164.110604
 },
 {
  "experiment_id": "exp-20261104-0038",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts entered when short-term volatility is below long-term volatility (vol_ratio(20) < 1) are more durable than breakouts inside expanded volatility.",
  "falsification_criterion": "Same-capital score at or below the incumbent (3289.8), or fewer trades with no expectancy improvement, proves contraction adds nothing and the filter is dead.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0039",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts taken only when close is above the 50-bar EMA have higher per-trade expectancy because the longer trend supports continuation.",
  "falsification_criterion": "Score at or below the incumbent (3289.84) at same capital, drawdown above 35%, or fewer than 8 trades — any of these proves the trend filter adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0040",
  "night": "20261104",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "KEEP",
  "stage_reached": "standard",
  "score": 3395.436174
 },
 {
  "experiment_id": "exp-20261104-0041",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts preceded by volatility contraction (vol_ratio(60) < 1.0) deliver higher per-trade expectancy than breakouts from expanded volatility.",
  "falsification_criterion": "A score below the incumbent's 3395 (or per-trade expectancy not exceeding 0.61 EUR despite fewer trades) proves contraction adds no follow-through and the clause is dead.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0042",
  "night": "20261104",
  "kind": "entry",
  "claim": "Requiring price above its 50-bar SMA at breakout filters counter-trend breakouts and raises per-trade expectancy net of costs.",
  "falsification_criterion": "Score <= 3395.4 or expectancy per trade <= 358.96 EUR or n_trades < 8",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0043",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts in contracting volatility persist longer.",
  "falsification_criterion": "Expectancy does not improve over the parent.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0044",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts are better when not already overbought.",
  "falsification_criterion": "Fewer trades with no expectancy improvement.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2617.64818
 },
 {
  "experiment_id": "exp-20261104-0045",
  "night": "20261104",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter vol_ratio(60) < 1.0 to the incumbent entry raises score above 3395 by improving breakout follow-through.",
  "falsification_criterion": "Score at or below the incumbent's 3395.4 (or fewer than 8 trades, or same-capital expectancy below 358.96 EUR) proves contraction filtering does not help this breakout entry.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0046",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts taken while price is below its 50-bar mean are counter-trend spikes; requiring close above the 50-bar SMA raises per-trade expectancy after costs.",
  "falsification_criterion": "Score below the incumbent's 3395.44 (or lower expectancy per trade) with ≥8 trades, proving below-mean breakouts carry positive edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0047",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts that close near the bar high continue.",
  "falsification_criterion": "No improvement in expectancy or halves.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0048",
  "night": "20261104",
  "kind": "exit",
  "claim": "A shorter hold captures the fast part of the move.",
  "falsification_criterion": "Expectancy falls because costs are paid more often per unit of move.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2419.753756
 },
 {
  "experiment_id": "exp-20261104-0049",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-day breakouts above the 50-bar SMA have higher post-cost expectancy than breakouts below it, so adding sma_gap(50) > 0 raises the incumbent's score.",
  "falsification_criterion": "Score below the incumbent's 3395.44 under same capital, or the excluded below-SMA breakout trades showing equal/higher per-trade expectancy than the retained ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0050",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-day-high breakouts with vol_z(30) > 1.0 carry higher per-trade expectancy than unconfirmed breakouts, net of costs.",
  "falsification_criterion": "Score below the incumbent's 3395, fewer than 8 trades, or per-trade expectancy at or below €358.96, proving volume confirmation adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0051",
  "night": "20261104",
  "kind": "exit",
  "claim": "A longer hold lets the trend develop.",
  "falsification_criterion": "Drawdown rises faster than expectancy.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1404.281991
 },
 {
  "experiment_id": "exp-20261104-0052",
  "night": "20261104",
  "kind": "exit",
  "claim": "A 20% take-profit on the incumbent truncates post-breakout mean-reversion give-back and raises risk-adjusted score without cutting entry frequency.",
  "falsification_criterion": "Same-capital score <= 3395.44 (especially if expectancy falls, proving the tail beyond +20% carries the edge), or drawdown above threshold.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 377.908567
 },
 {
  "experiment_id": "exp-20261104-0053",
  "night": "20261104",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (vol_ratio(20) < 1) to the incumbent entry raises per-trade expectancy by selecting breakouts that launch from compressed volatility and trend more cleanly.",
  "falsification_criterion": "If score falls below the incumbent's 3395.4, or expectancy below 358.96 EUR, or trades drop below 8, the compression-breakout hypothesis is proven wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0054",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-day breakouts taken above the 50-bar SMA persist longer and yield higher net expectancy than breakouts below it, because the dominant trend supports continuation.",
  "falsification_criterion": "A backtest scoring below the incumbent's 3395.4 (SAME_CAPITAL_BELOW_BASELINE), fewer than 8 trades, or a drop in per-trade expectancy below 358.96 EUR proves the regime filter prunes winners, not losers.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0055",
  "night": "20261104",
  "kind": "exit",
  "claim": "A wider stop survives noise without changing the thesis.",
  "falsification_criterion": "Expectancy falls and drawdown rises.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 2849.511957
 },
 {
  "experiment_id": "exp-20261104-0056",
  "night": "20261104",
  "kind": "entry",
  "claim": "Requiring price above the 50-bar SMA (sma_gap(50) > 0) on top of the incumbent's breakout conditions raises per-trade expectancy by removing counter-trend breakouts that mean-revert.",
  "falsification_criterion": "Score at or below the incumbent's 3395.4, or fewer than 8 trades; specifically, if per-trade expectancy does not improve enough to offset the lost trade count, the trend-alignment mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0057",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar-high breakouts launched from volatility contraction (15-bar std < 60-bar std) carry higher net expectancy than expansion breakouts, enough to beat the incumbent despite fewer trades.",
  "falsification_criterion": "Score <= 3395.4 (incumbent) or < 8 trades; i.e. the removed expansion-breakout subset was not net-negative after 80bps-per-leg costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0058",
  "night": "20261104",
  "kind": "exit",
  "claim": "Taking profit at 15% improves risk-adjusted return.",
  "falsification_criterion": "Expectancy falls because winners are cut.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 22.39602
 },
 {
  "experiment_id": "exp-20261104-0059",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts accompanied by a volume surge (vol_z(10) > 1) carry higher per-trade expectancy than unconfirmed breakouts, so adding this filter raises net score.",
  "falsification_criterion": "Score <= 3395.4 (incumbent), or per-trade expectancy <= 358.96 EUR, or fewer than 8 trades would prove volume confirmation adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0060",
  "night": "20261104",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar SMA at the breakout signal removes counter-trend failed breakouts and raises per-trade expectancy versus the incumbent.",
  "falsification_criterion": "Under the identical envelope (20d, 3xATR, 25%), score falls at or below the incumbent's 3395.4, drawdown exceeds 35%, or trades drop below 8 — proving the filtered-out trades were not the losing population.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0061",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts taken during volatility contraction (vol_ratio(60) < 1.0) yield higher post-cost expectancy than the incumbent's unfiltered breakouts.",
  "falsification_criterion": "The candidate scores below the incumbent's 3395.4, breaches the 35% same-capital drawdown cap, or produces fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0062",
  "night": "20261104",
  "kind": "entry",
  "claim": "Adding close_loc(1) >= 0.7 to the incumbent entry filters wick-rejection fakeouts and raises per-trade expectancy more than proportionally to the trade loss, beating the incumbent score.",
  "falsification_criterion": "Score <= 3395.4362 (or same-capital drawdown > 35%, or < 8 trades) proves intrabar close strength adds no net edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0063",
  "night": "20261104",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(20) < 1.0) at breakout entry raises cost-stressed expectancy because squeeze-ignited breakouts follow through more reliably than breakouts during already-expanded volatility.",
  "falsification_criterion": "Backtest with identical exits: score <= incumbent 3395.4 or cost-stressed expectancy <= EUR 359 with n_trades >= 8 proves the contraction filter adds no edge; n_trades < 8 or same-capital drawdown > 35% also discards it.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0064",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-day breakouts in the upper 60-bar Donchian range that occur above the 50-bar SMA carry higher per-trade expectancy than those below it, because intermediate-uptrend regime supports follow-through beyond costs.",
  "falsification_criterion": "Candidate expectancy <= incumbent's 358.96 EUR/trade (with >= 8 trades), or the trades excluded by sma_gap(50) > 0 show equal or better expectancy than those kept.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0065",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts emerging from a volatility contraction (vol_ratio(60) < 1) yield higher net expectancy than breakouts in already-expanded volatility.",
  "falsification_criterion": "If the squeeze filter lowers cost-stress expectancy below the incumbent's 358.96 EUR or Sharpe below 1.03 (or cuts trades below 8 without improving expectancy), the squeeze mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0066",
  "night": "20261104",
  "kind": "entry",
  "claim": "Breakouts of the 20-day high that occur while 5-day volatility is still below 20-day volatility (vol_ratio(20) < 1) have stronger follow-through, raising per-trade expectancy above the incumbent's €359.",
  "falsification_criterion": "Score below the incumbent's 3395.4, or per-trade expectancy at or below €358.96, or fewer than 8 trades — any of these proves the squeeze-breakout filter adds nothing after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261104-b5a072",
  "night": "20261104",
  "kind": "entry",
  "claim": "Inverse-volatility trade sizing: keep the incumbent's entries/exits identical, but size each position inversely to atr_pct at entry.",
  "falsification_criterion": "Falsified if (a) per-trade return variance is flat across entry-time atr_pct quintiles (no risk heterogeneity to normalize), or (b) the inverse-vol-sized run does not beat the fixed-size control on the identical trade stream beyond paired-bootstrap noise (95% CI).",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 14.286737
 },
 {
  "experiment_id": "ro-20261104-15bc12",
  "night": "20261104",
  "kind": "strategy",
  "claim": "Volume-climax exit overlay: exit incumbent longs when vol_ratio spikes into its top decile while close_loc prints weak (<0.5), i.e., a distribution bar.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0069",
  "night": "20261104",
  "kind": "entry",
  "claim": "20-bar breakouts confirmed by price above the 50-bar SMA follow through better than breakouts below it, so adding sma_gap(50) > 0 to the incumbent entry raises cost-stressed expectancy per trade.",
  "falsification_criterion": "The candidate's cost-stress expectancy falls below the incumbent's 358.97 EUR, or positive_symbol_share drops below 0.875, or trades fall under 8 — proving trend alignment adds no edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261104-0070",
  "night": "20261104",
  "kind": "entry",
  "claim": "Restricting the incumbent's breakout entries to bars where close is above the 50-bar SMA (sma_gap(50) > 0) raises per-trade expectancy by removing bear-rally breakouts that occur below the long-run mean.",
  "falsification_criterion": "Per-trade expectancy or score at or below the incumbent (359 EUR/trade, score 3395), or fewer than 8 trades — proving the filtered-out below-SMA breakouts were not the losing subset.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0000",
  "night": "20261105",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 731.170767
 },
 {
  "experiment_id": "exp-20261105-0001",
  "night": "20261105",
  "kind": "entry",
  "claim": "20-bar breakouts made with close above the 50-bar SMA carry higher per-trade expectancy than all 20-bar breakouts, because long-trend alignment filters counter-trend bull traps.",
  "falsification_criterion": "Same envelope and universe: expectancy <= EUR 114.20 or score < 731, or trade count collapses to the point of SAME_CAPITAL_DRAWDOWN > 35% / n_trades < 8, proves the regime filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0002",
  "night": "20261105",
  "kind": "entry",
  "claim": "Requiring the 20-day breakout to occur above the 50-bar SMA (trend confirmation) raises per-trade expectancy by excluding counter-trend breakouts that mean-revert.",
  "falsification_criterion": "Backtest with the added clause: if cost-stress expectancy or Sharpe falls below the incumbent (114.20 EUR / 0.848), or n_trades < 8, the hypothesis is proven wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0003",
  "night": "20261105",
  "kind": "entry",
  "claim": "20-day breakouts taken only when price is above the 50-bar EMA carry higher per-trade expectancy than all 20-day breakouts, net of 80 bps costs.",
  "falsification_criterion": "Per-trade expectancy at or below the incumbent's 114.20 EUR (score not beating 731) with at least 8 trades, or trade count collapsing to near zero, proves trend alignment adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0004",
  "night": "20261105",
  "kind": "entry",
  "claim": "Requiring close above the 50-bar EMA at a 20-bar high filters bear-market-rally traps and raises per-trade expectancy versus the unfiltered breakout entry.",
  "falsification_criterion": "Per-trade expectancy after costs at or below the baseline's 114.20 EUR (or fewer than 8 trades, or capital drawdown above 35%) proves trend alignment adds no edge here.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0005",
  "night": "20261105",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (vol_ratio(20) < 1) to the incumbent 20-bar breakout entry raises per-trade expectancy after costs, because breakouts from compressed volatility follow through more reliably than breakouts from already-expanded volatility.",
  "falsification_criterion": "Score <= 731.17 (incumbent) with n_trades >= 8, or n_trades < 8, proves the squeeze filter destroys rather than improves the breakout edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0006",
  "night": "20261105",
  "kind": "entry",
  "claim": "Restricting 20-bar breakouts to bars where close is above the 50-bar SMA raises per-trade expectancy, because trend-aligned breakouts follow through more often than counter-trend ones.",
  "falsification_criterion": "Backtest result with cost_stress expectancy <= 114.20 EUR (incumbent), or fewer than 8 trades, or a gain smaller than the 160 bps round-trip cost, proves the regime-alignment mechanism adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0007",
  "night": "20261105",
  "kind": "entry",
  "claim": "20-bar breakouts occurring during volatility contraction (5-bar return std below 20-bar std, vol_ratio(20) < 1) deliver higher net expectancy than breakouts from expanded volatility.",
  "falsification_criterion": "Cost-stressed expectancy or score below the incumbent (114.20 EUR / 731.17), or fewer than 8 trades, disproves the squeeze hypothesis on this universe.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0008",
  "night": "20261105",
  "kind": "entry",
  "claim": "Filtering 20-bar breakouts with sma_gap(50) > 0 (uptrend regime) raises net expectancy per trade above the incumbent's 114.20 EUR.",
  "falsification_criterion": "Cost-stressed expectancy per trade at or below 114.20 EUR, or fewer than 8 trades, proves the regime filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261105-9abd95",
  "night": "20261105",
  "kind": "strategy",
  "claim": "Forced-liquidation climax overshoot: entries gated to simultaneous high realized volatility (atr_pct), deep drawdown from the recent high (dd_from_high), and abnormal volume (vol_ratio) capture post-cascade reversion. This conditioning has never been measured, and it deliberately avoids breakout_dist, the one feature present in every dead family.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261105-7c5d09",
  "night": "20261105",
  "kind": "strategy",
  "claim": "Stealth-accumulation footprint: abnormal volume (vol_ratio) under compressed volatility (atr_pct) marks informed pre-positioning and precedes directional repricing. The atr_pct x vol_ratio interaction is an unmeasured family and makes a quadrant prediction opposite to the climax hypothesis.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0011",
  "night": "20261105",
  "kind": "exit",
  "claim": "20-day breakout momentum persists past bar 10, so holding to 20 bars captures a right tail the 10-bar exit truncates.",
  "falsification_criterion": "Cost-stress expectancy or Sharpe at 20 bars at or below the incumbent (114.20 EUR / 0.848), or fewer than 8 trades.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261105-0012",
  "night": "20261105",
  "kind": "feature",
  "claim": "20-bar-high breakouts that occur above the 50-bar SMA (trend-aligned continuation) carry higher per-trade expectancy than breakouts below it (bear-market rallies).",
  "falsification_criterion": "Cost-stress expectancy at or below the incumbent's 114.20 EUR, or score at or below 731, on at least 8 trades proves the alignment filter adds no edge; fewer than 8 trades also falsifies.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0000",
  "night": "20261106",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 731.170767
 },
 {
  "experiment_id": "exp-20261106-0001",
  "night": "20261106",
  "kind": "entry",
  "claim": "Requiring trend alignment (close above the 50-bar SMA) at the 20-bar breakout raises per-trade cost-adjusted expectancy by removing bear-market rally breakouts that mean-revert into the stop.",
  "falsification_criterion": "Cost-adjusted expectancy per trade at or below the incumbent's 114.20 EUR, or fewer than 8 trades — proving the alignment filter removes no bad trades or cuts good ones.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0002",
  "night": "20261106",
  "kind": "entry",
  "claim": "Requiring pre-breakout volatility contraction (vol_ratio(60) < 0.8) on top of breakout_dist(20) > 0 raises net expectancy per trade above the incumbent's €114.20.",
  "falsification_criterion": "Net expectancy per trade ≤ €114.20, or fewer than 8 trades, would prove squeeze-filtered breakouts are not better than unfiltered ones after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0003",
  "night": "20261106",
  "kind": "entry",
  "claim": "20-bar-high breakouts taken only while price is above the 50-bar SMA (trend continuation) deliver higher net-of-cost expectancy than the unfiltered breakout baseline.",
  "falsification_criterion": "The filtered variant produces at least 8 trades but a cost-stress expectancy at or below the incumbent's 114.20 EUR, or fewer than 8 trades, proving trend context adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0004",
  "night": "20261106",
  "kind": "entry",
  "claim": "Breakouts whose bar closes in its top 30% (close_loc(1) > 0.7) deliver higher net expectancy than all 20-bar breakouts, because faded spikes are excluded.",
  "falsification_criterion": "Net expectancy at or below the incumbent's EUR 114.20, or fewer than 8 qualifying trades, proves close-position confirmation adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0005",
  "night": "20261106",
  "kind": "entry",
  "claim": "Twenty-bar breakouts taken only when price is above the 50-bar EMA (trend-aligned) produce higher post-cost per-trade expectancy than the unfiltered baseline.",
  "falsification_criterion": "Score at or below the baseline's 731.17, or per-trade expectancy at or below EUR 114.20, or fewer than 8 trades — proving the trend filter removes no net-bad trades after the 80 bps legs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0006",
  "night": "20261106",
  "kind": "entry",
  "claim": "Requiring short-term volatility expansion (atr_pct(14) > atr_pct(30)) at the moment of a 20-bar breakout improves net expectancy versus the unfiltered incumbent.",
  "falsification_criterion": "With at least 8 trades, a cost-stressed expectancy at or below the incumbent's 114.20 EUR — or fewer than 8 trades — proves the volatility-confirmation filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0007",
  "night": "20261106",
  "kind": "entry",
  "claim": "20-bar breakouts that occur while price is above its 50-bar SMA persist better than breakouts below it, raising cost-stress expectancy above the 114.20 EUR baseline.",
  "falsification_criterion": "Same universe and period: if the added sma_gap(50)>0 clause produces fewer than 8 trades, or cost-stress expectancy <= 114.20 EUR baseline, the trend-confirmation mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0008",
  "night": "20261106",
  "kind": "entry",
  "claim": "20-bar breakouts occurring during volatility contraction (15d vol below 60d vol) yield higher cost-net expectancy than unconditional 20-bar breakouts.",
  "falsification_criterion": "With at least 8 filtered trades, cost-stress expectancy at or below the baseline's 114.20 EUR (or score below 731.17) proves contraction adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0009",
  "night": "20261106",
  "kind": "entry",
  "claim": "Breakouts above the prior 20-bar high that also occur above the 50-bar EMA have higher net expectancy than trend-aligned-blind breakouts, because counter-trend false breakouts are removed.",
  "falsification_criterion": "Net expectancy per trade falls below the baseline's 114.20 EUR, or the below-50-EMA trades it excludes turn out to carry positive expectancy, proving trend alignment adds no edge after 80 bps costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261106-0010",
  "night": "20261106",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) on top of the 20-bar breakout entry raises cost-net expectancy per trade above the incumbent's 114.20 EUR.",
  "falsification_criterion": "Cost-net expectancy at or below 114.20 EUR per trade, or fewer than 8 trades, proving contraction-filtered breakouts are no better than all breakouts.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261106-822ee1",
  "night": "20261106",
  "kind": "strategy",
  "claim": "Leverage-flush reversal: when realized volatility spikes (atr_pct in its top decile) and the bar closes near its low (close_loc in bottom quintile), forced liquidations have overshot fair value; buy the reversion and exit when close_loc recovers to mid-range.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 },
 {
  "experiment_id": "ro-20261106-7f1c9d",
  "night": "20261106",
  "kind": "entry",
  "claim": "Capitulation triple: a deep drawdown from the trailing high (dd_from_high extreme) on climax relative volume (vol_ratio top percentile) with elevated atr_pct marks forced-seller exhaustion; go long the snapback.",
  "falsification_criterion": "Forward returns conditional on the triple are non-positive; OR deep-dd_from_high bars with HIGH vol_ratio perform no better than deep-dd_from_high bars with LOW vol_ratio (climax volume adds no separation) — or worse, climax volume predicts continuation, inverting the exhaustion claim entirely.",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 269.187832
 },
 {
  "experiment_id": "exp-20261106-0013",
  "night": "20261106",
  "kind": "entry",
  "claim": "20-bar breakouts occurring above the 50-bar SMA (sma_gap(50) > 0) carry higher forward expectancy net of 80 bps per leg than breakouts below it.",
  "falsification_criterion": "Adding sma_gap(50) > 0 to the incumbent entry yields cost-stressed expectancy <= EUR 114.20 or score < 731.17 (with n_trades >= 8), proving long-trend alignment adds no edge to breakout entries.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0000",
  "night": "20261107",
  "kind": "strategy",
  "claim": "A new 20-day high on a liquid EUR pair continues for up to ten days.",
  "falsification_criterion": "Net expectancy after 80 bps taker fees is <= 0 on the training slice.",
  "verdict": "BASELINE",
  "stage_reached": "standard",
  "score": 709.923635
 },
 {
  "experiment_id": "exp-20261107-0001",
  "night": "20261107",
  "kind": "strategy",
  "claim": "Adding a momentum-failure exit — closing the position when the close drops below the 10-bar EMA — raises cost-adjusted expectancy per trade on the incumbent breakout entry versus the fixed 10-bar hold.",
  "falsification_criterion": "Falsified if cost-stress expectancy per trade is <= the baseline's €113.78, or max drawdown worsens, or fewer than 8 trades result; equally falsified if the clause fires on most trades yet expectancy is unchanged, meaning it merely shortens holds without cutting the left tail.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0002",
  "night": "20261107",
  "kind": "entry",
  "claim": "20-bar-high breakouts taken only when price is above its 50-bar SMA earn higher per-trade expectancy than all breakouts, because below-mean breakouts are bear-regime bull traps that mean-revert.",
  "falsification_criterion": "Backtest on the same universe: if cost-stress expectancy <= 113.78 EUR/trade, or score < incumbent, or n_trades < 8, or the excluded sma_gap(50) <= 0 cohort shows positive expectancy, the trend-alignment mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0003",
  "night": "20261107",
  "kind": "entry",
  "claim": "Restricting 20-bar breakouts to bars where close is above the 50-bar SMA (trend alignment) raises per-trade net expectancy above the incumbent's 113.78 EUR.",
  "falsification_criterion": "Per-trade expectancy at or below 113.78 EUR, or score below the incumbent's 709.92, or fewer than 8 trades — proving trend alignment does not improve breakout quality.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0004",
  "night": "20261107",
  "kind": "entry",
  "claim": "20-bar-high breakouts that occur while price is above the 50-bar SMA (trend-aligned) have higher post-cost per-trade expectancy than unfiltered breakouts.",
  "falsification_criterion": "If per-trade expectancy after costs stays at or falls below the baseline's 113.78 EUR, or the filter cuts trades below 8, trend alignment adds nothing and the counter-trend-spike mechanism is wrong.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0005",
  "night": "20261107",
  "kind": "entry",
  "claim": "Requiring volatility expansion (atr_pct(14) > atr_pct(30)) on top of the 20-bar breakout raises cost-stressed expectancy above the incumbent's 113.78 EUR.",
  "falsification_criterion": "Cost-stressed expectancy <= 113.78 EUR, n_trades < 8, or same-capital drawdown > 35% proves the filter adds no net edge after costs.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0006",
  "night": "20261107",
  "kind": "entry",
  "claim": "20-bar breakouts occurring above the 50-bar mean are trend continuations with higher cost-stressed expectancy than breakouts below it.",
  "falsification_criterion": "Cost-stress expectancy at or below the incumbent's 113.78 EUR, or score at or below 709.9, or fewer than 8 trades, proves the trend-regime filter adds nothing.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0007",
  "night": "20261107",
  "kind": "entry",
  "claim": "20-bar breakouts entered during volatility contraction (15-bar vol below 60-bar vol) have higher per-trade cost-stressed expectancy than unfiltered breakouts.",
  "falsification_criterion": "Cost-stressed expectancy per trade at or below the incumbent's 113.78 EUR, or fewer than 8 trades, proves the contraction filter adds no edge.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0008",
  "night": "20261107",
  "kind": "entry",
  "claim": "Requiring volatility contraction (vol_ratio(60) < 1) at the 20-day breakout entry raises cost-stressed expectancy above the incumbent's €113.78/trade because squeeze breakouts follow through while high-volatility blowoff breakouts mean-revert.",
  "falsification_criterion": "A cost-stressed score below the incumbent's 709.9 (or expectancy <= €113.78) on >= 8 trades proves contraction filtering adds no edge over the raw breakout.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0009",
  "night": "20261107",
  "kind": "entry",
  "claim": "Adding a volatility-contraction filter (vol_ratio(60) < 1, i.e. 15-bar return std below 60-bar std) to the 20-bar breakout entry raises per-trade expectancy after costs, because squeeze breakouts follow through while breakouts inside already-high volatility mean-revert.",
  "falsification_criterion": "The filtered variant's cost-stress expectancy per trade is at or below the incumbent's €113.78, or it produces fewer than 8 trades, or the excluded trades (breakouts with vol_ratio(60) >= 1) turn out to carry positive expectancy on their own.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "exp-20261107-0010",
  "night": "20261107",
  "kind": "entry",
  "claim": "Restricting 20-day breakout entries to bars where close is above the 50-bar SMA (sma_gap(50) > 0) raises net per-trade expectancy above the incumbent's 113.78 EUR by excluding counter-trend failed breakouts.",
  "falsification_criterion": "With at least 8 trades, net expectancy at or below 113.78 EUR (or negative after costs) proves the long-trend regime filter adds no edge; fewer than 8 trades also falsifies.",
  "verdict": "DUPLICATE",
  "stage_reached": "memory",
  "score": null
 },
 {
  "experiment_id": "ro-20261107-431cd8",
  "night": "20261107",
  "kind": "strategy",
  "claim": "Replace the incumbent's fixed exit with an exit distance scaled by current atr_pct (k in {1.5, 2.5, 4} x atr_pct), entries untouched.",
  "falsification_criterion": "...",
  "verdict": "DISCARD",
  "stage_reached": "standard",
  "score": 1049.553042
 },
 {
  "experiment_id": "ro-20261107-492534",
  "night": "20261107",
  "kind": "strategy",
  "claim": "Add a give-back trailing exit: close the position when dd_from_high measured from the trade's own extreme high exceeds k (k in {2%, 4%, 6%}), incumbent entries and initial exits untouched.",
  "falsification_criterion": "",
  "verdict": "INVALID",
  "stage_reached": "compile",
  "score": null
 }
]