On it. Let me actually trace the OVER bias to its ...
Created on: April 20, 2026
Answered using GPT-5.4 Thinking by Chat01
Created on: April 20, 2026
Answered using GPT-5.4 Thinking by Chat01
On it. Let me actually trace the OVER bias to its root cause instead of guessing.Syntax baselineSyntax baselineLet me re-read the actual preview output the user shared carefully:
Line: 21.5
Total Games Projection: 23.0 (mixture median) | EV 23.0
2-set median 19.0g (mean 19.6) | 3-set median 29.0g (mean 29.4)
Decider Prob: 46% | adj 40% | raw 41%
MC over: 58.7% | Markov 57.3%
OFFICIAL BET: OVER 21.5
ACTUAL: 18 games (went UNDER)
This is the smoking gun. The engine:
2-set cluster median = 19.0 games (meaning HALF of simulated 2-set outcomes are ≤ 19g)
3-set cluster median = 29.0 games
Raw P(decider) = 41%
Line = 21.5
With 2-set cluster at median 19g, and 59% of matches ending in 2 sets (p3=41%), there should be a MAJORITY OF SIMULATIONS UNDER 21.5. Let's check:
59% × P(2-set outcome < 21.5g | median 19g, σ ≈ 2.93) — with median 19 and σ 2.93, the probability that a single 2-set sim is < 21.5 is about 80% (z-score (21.5-19)/2.93 = 0.85, one-tailed).
So 59% × 0.80 = 47% of all sims should land UNDER just from 2-set outcomes alone.
Then 41% of sims are 3-set with median 29g — most of these (say 99%) are OVER 21.5.
Total pOver ≈ (59% × 20%) + (41% × 99%) = 12% + 41% = 53% OVER.
But the engine reports 58.7% OVER. That's ~5-6pp higher than a straight mixture calculation suggests. And the line at 21.5 is below the 3-set median (29) and above the 2-set median (19) — it's in the bimodal dead zone.
Let me trace: the engine is likely boosting pOver via "mode gravity" or "sweep penalty" — corrections designed to pull toward cluster centers when line is between them. But for a match like this where the line (21.5) is much closer to the 2-set cluster (19) than the 3-set cluster (29), these corrections should be pulling DOWN toward UNDER, not pushing UP toward OVER.Ran 2 commands, viewed a fileRan 2 commands, viewed a fileThe user's preview showed: nudge Over 1.5pp (from gravity). Let me decompose the user's actual numbers:
hook mass @21.5: 2set 21.2% | 3set 1.1% | blended 12.5%
floor(21g) 5.3% vs ceil(22g) 7.1%
gravity 21.57g | nudge over 1.5pp
So hookCeilMass = 7.1% and hookFloorMass = 5.3%. Sum = 12.4%. Imbalance = (7.1 - 5.3) / 12.4 = +0.145. Nudge = min(0.010, 0.145 × 0.010) = +0.0145 toward OVER.
THE BUG: the gravity nudge is capped at ±0.010 BUT the preview says "nudge Over 1.5pp" (0.015). Actually wait — the cap is 0.010 per the code at L17127, but let me re-examine: _hkImbalance * 0.010 with imbalance 0.145 → 0.00145, NOT 0.015. The 1.5pp in the preview might be from elsewhere.
Let me look more carefully at what's creating the 5-6pp OVER bias in the user's reported numbers. The engine reported:
raw pMC = 58.7% over
My mixture estimate suggested ~53% should be correct
That's 5-6pp of OVER that's coming from somewhere. Let me check LMP dirCredit:Ran a command, viewed a fileRan a command, viewed a fileFound the bias. The user's case:
line = 21.5, med2 = 19, med3 = 29
lane2Dir = P(over 21.5 | 2-set sim, median 19, σ2 ≈ 2.93) ≈ 0.20 (LOW — says UNDER)
lane3Dir = P(over 21.5 | 3-set sim, median 29, σ3 ≈ 4.10) ≈ 0.96 (HIGH — says OVER)
laneCredit2 = -0.30 (strong UNDER)
laneCredit3 = +0.46 (strong OVER)
p3 = 0.41
Blended credit = -0.30 × 0.59 + 0.46 × 0.41 = -0.177 + 0.189 = +0.012 (slight OVER)
directionalCredit = sign(+0.012) × min(0.25, 0.012 × 1.20) = +0.0144 (+1.44pp toward OVER)
That's close to the preview's reported dirCredit=+3.77pp but not quite. Wait, preview says dirCredit = +3.77pp. Let me recheck with the user's reported P3 of 40% (adjusted):
With p3 = 0.40: -0.30 × 0.60 + 0.46 × 0.40 = -0.18 + 0.184 = +0.004 → dirCredit = +0.005 (basically zero).
But the engine reported +3.77pp. Something is giving OVER 3.77pp of credit when the structural math says ~0. That's ~4pp of bias toward OVER unexplained by the mixture math.
Root cause found: the _bimodalModeScale boost path
Let me look more carefully at what creates this excess OVER credit on CH bimodal matches. Looking at the preview:
skew=-0.164 dirCredit=+3.77pp uncPen=56.3% near=12.4% com=21.05 ent=3.257 w3=22.3%[18-20]
Skew is NEGATIVE (-0.164) — meaning the distribution is skewed LEFT (toward UNDER). But dirCredit is POSITIVE (+3.77pp) toward OVER. That's a sign contradiction. Skew -0.16 says UNDER; dirCredit +3.77 says OVER.
Let me check why this happened:Check directional credit sign logicCheck directional credit sign logicThis is the recomputation that OVERWRITES directionalCredit. Let me trace again with exact values:
line = 21.5, med2 = 19, med3 = 29
CH sigma s2 = 2.93, s3 = 4.10
Computing estPOverLane2(21.5, 19, undefined, 'CH') = 1 - CDF(21.5, mean=19, σ=2.93) = 1 - Φ((21.5-19)/2.93) = 1 - Φ(0.85) ≈ 1 - 0.803 = 0.197
Computing estPOverLane3(21.5, 29, undefined, 'CH') = 1 - Φ((21.5-29)/4.10) = 1 - Φ(-1.83) ≈ 1 - 0.034 = 0.966
With p3 = 0.40:
laneCredit2 = 0.197 - 0.50 = -0.303
laneCredit3 = 0.966 - 0.50 = +0.466
Blended = (-0.303 × 0.60) + (0.466 × 0.40) = -0.182 + 0.186 = +0.004
directionalCredit = sign(+0.004) × min(0.25, 0.004 ...
4/19/2026 18:22:43
⚠️ MARKET ANCHOR APPLIED: Model vs market diverged by 2.1 pts. Pulled 2% toward market.
════════════════════════════════════════
🎾 TENNISLOCKS v1.0 🎾
[ᴠᴇʀѕɪᴏɴ] ᴠ1.0 | 2026-04-20ᴛ01:22:37.493ᴢ
ᴛᴏᴛᴀʟѕ ѕɪᴍѕ: 24,000 | ɢᴇɴᴇʀᴀᴛᴇᴅ: 8:22:40 ᴘᴍ
════════════════════════════════════════
⚠️ MARKET ANCHOR — Model diverged 2.1pt from market. Pulled 2% toward market.
🎯 ATP-CH M25 Saint-Dizier (RIGHT) (Clay (OUTDOOR)) | Best of 3 | Line: 21.5
ᴄᴘɪ: 27 | ᴛᴏᴜʀ: ᴀᴛᴘ-ᴄʜ (ʀɪɢʜᴛ) (ʜɪɢʜ)
────────────────────────────────────────
Mika brunold vs Miguel damas
────────────────────────────────────────
🎲 Total Games Projection: 23.0 (mixture median) | EV 23.0 | lands ~19g or ~29g
ᴅᴇᴄɪᴅᴇʀ ᴘʀᴏʙ: 46% | ᴀᴅᴊ 40% | ʀᴀᴡ 41%
ᴍᴀᴛᴄʜ ᴄʟᴜѕᴛᴇʀѕ: 2-ѕᴇᴛ ᴍᴇᴅɪᴀɴ 19.0ɢ (ᴍᴇᴀɴ 19.6) | 3-ѕᴇᴛ ᴍᴇᴅɪᴀɴ 29.0ɢ (ᴍᴇᴀɴ 29.4)
ʙɪᴍᴏᴅᴀʟ ꜰᴀɪʀ ʟɪɴᴇ: 23.0ɢ (ᴍɪˣᴛᴜʀᴇ ᴍᴇᴅɪᴀɴ) | 2-ѕᴇᴛ ᴍᴏᴅᴇ: 19.6ɢ | 3-ѕᴇᴛ ᴍᴏᴅᴇ: 29.4ɢ
========================================
📊 MATCH WINNER
────────────────────────────────────────
ᴘʟᴀʏᴇʀ ᴍʟ ᴍᴋᴛ% ᴍᴏᴅᴇʟ% ʀᴀᴡ% ᴇᴅɢᴇ ʙᴀʀ
▶ ʟᴇᴀɴ ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ -196 64.0% 72.2% 72.2% +8.1% ███████░░░
ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ +158 36.0% 27.8% 27.8% -8.1% ███░░░░░░░
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
ʙʟᴇɴᴅ ᴍᴄ 58.7% | ѕᴛᴀᴛѕ 66.8% | ᴇʟᴏ 60.7% | ʀᴇʟɪᴀʙɪʟɪᴛʏ: 40%
ʀᴀᴡ ᴇɴɢɪɴᴇ: 72.2% → ᴘɪᴄᴋ: 72.2% (ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ) | ᴅɪѕᴘʟᴀʏ: 63.8%
ᴀɴᴄʜᴏʀ 2% ᴀᴘᴘʟɪᴇᴅ (ᴍᴀʀᴋᴇᴛ ᴀɴᴄʜᴏʀ 2ᴘᴘ)
ᴇᴅɢᴇ -2.9% ᴏɴ ᴀ | ᴠɪɢ ᴇᴠ: +9.0% | ѕᴛᴀᴋᴇ: 0.00% | ᴄᴏɴꜰ: ɴᴏɴᴇ
ꜰᴀɪʀ ᴍʟ ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ -259 / ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ +259
ℹ️ [PRIMARY — NO BET]
ɴᴏ ʙᴇᴛ — ᴇᴅɢᴇ ʙᴇʟᴏᴡ ᴛʜʀᴇѕʜᴏʟᴅ
ℹ️ PRIMARY — Mika brunold
ᴠɪɢ ᴇᴠ: +9.0% | ʀɪѕᴋ: ʟᴏᴡ (0.10) | ᴄʟᴜѕᴛᴇʀ: ꜰʀᴀɢɪʟᴇ
ѕᴛʀᴜᴄᴛᴜʀᴇ & ʀɪѕᴋ
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
ᴄʟᴜѕᴛᴇʀ: ꜰʀᴀɢɪʟᴇ (ᴄʜᴀʟᴋ_ꜰʀᴀɢɪʟᴇ)
ᴅᴇᴄɪᴅᴇʀ: 46.0%
ᴀᴠɢ ɢᴀᴍᴇѕ: 23.9
ʀɪѕᴋ: 0.10 (ʟᴏᴡ) | ᴘᴇɴᴀʟᴛʏ: 0.003
ᴅᴀᴛᴀ: ᴡᴇᴀᴋ (ᴄᴏᴠᴇʀᴀɢᴇ 5/5, ᴛʀᴜѕᴛ 0.90)
ᴛʜʀᴇѕʜᴏʟᴅѕ: ᴍɪɴʟᴇᴀɴ=2.83% ᴍɪɴᴘʀɪᴍᴀʀʏ=4.79%
ᴅᴏɢ ᴠᴀʟᴜᴇ: 50/100
ᴘʟᴀʏᴇʀ ɪɴᴛᴇʟ
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ
ʀᴀɴᴋ 385 273
ᴇʟᴏ 1454 1393
ᴀᴠɢ ᴏᴘᴘ ʀᴀɴᴋ 302 213
ѕᴄʜᴇᴅᴜʟᴇ ѕᴏꜰᴛ (ᴛʀᴜѕᴛ 0.90, ʀᴀɴᴋѕ 6)ᴍɪᴅ (ᴛʀᴜѕᴛ 0.94, ʀᴀɴᴋѕ 7)
ѕᴇʀᴠᴇ ѕᴛʏʟᴇ ᴍɪˣᴇᴅ ᴍɪˣᴇᴅ
ᴍᴏᴍᴇɴᴛᴜᴍ ѕᴛʀᴜɢɢʟɪɴɢ ѕᴛʀᴜɢɢʟɪɴɢ
ʜᴏʟᴅ % 72.0% 67.9%
ѕᴘᴡ % 56.5% 55.2%
ᴅᴏᴍɪɴᴀɴᴄᴇ ʀᴀᴛɪᴏ 0.88 0.57
ᴠᴏʟᴀᴛɪʟɪᴛʏ 0.5% 3.5%
ᴏᴘᴘ-ᴀᴅᴊ ꜰᴏʀᴍ: ᴅᴇʟᴛᴀ=0.4ᴘᴛ | ᴡᴇɪɢʜᴛ=22.0%
ʙʀᴇᴀᴋ ʀᴀᴛᴇ 32.1% 28.0%
1ѕᴛ ѕʀᴠ ᴡɪɴ % 63.5% 59.1%
2ɴᴅ ѕʀᴠ ᴡɪɴ % 45.2% 47.3%
1ѕᴛ ѕʀᴠ ɪɴ % 62.0% 67.0%
ᴀɴᴀʟʏᴛɪᴄᴀʟ ʜᴏʟᴅ 70.5% 68.6% (ɴᴇᴡᴛᴏɴ-ᴋᴇʟʟᴇʀ)
── ꜰʀᴀɢɪʟɪᴛʏ ꜰʟᴀɢѕ ──
⚠️ ᴄᴏʟᴅ ѕᴛᴀʀᴛ ᴅᴀᴛᴀ — ᴇᴅɢᴇѕ ᴅɪѕᴄᴏᴜɴᴛᴇᴅ 30%
⚠️ ᴄʜ ᴛᴏᴜʀ — ᴛʜɪɴ ᴅᴀᴛᴀ, ʜɪɢʜᴇʀ ѕʜʀɪɴᴋᴀɢᴇ ᴀᴘᴘʟɪᴇᴅ
ѕɪɢɴᴀʟѕ: ᴠ38.2 ꜰᴀᴋᴇѕʜɪꜰᴛ: ᴍᴏᴅ_ꜰᴀᴠ ѕʜɪꜰᴛ=-0.89ᴘᴘ (ᴄᴀʟɢᴀᴘ=-3.57ᴘᴘ), ᴄʟᴜѕᴛᴇʀ ꜰʀᴀɢɪʟᴇ, ᴅᴀᴛᴀ-ǫᴜᴀʟɪᴛʏ ʀɪѕᴋ (ᴄᴀᴘᴘᴇᴅ 1.0), ꜰᴀᴠ ᴍᴋᴛ-ᴀɢʀᴇᴇᴍᴇɴᴛ ʀɪѕᴋ ᴅɪѕᴄᴏᴜɴᴛ, ʀᴀᴡ-ᴇᴅɢᴇ ʀᴇѕᴄᴜᴇ: ᴇᴅɢᴇ=-2.9 ʀᴀᴡ=11.2, ᴄᴏʟᴅ ѕᴛᴀʀᴛ (ꜰᴜʟʟ)
════════════════════════════════════════
🎲 Sets Market:
2 Sets: 61.2% | Book est -189
3 Sets: 38.8% | Book est +142
Sets Bet: PASS
Over/Under 2.5 Sets:
Under 2.5: 61.2% | Book est -194
Over 2.5: 38.8% | Book est +139
O/U Bet: PASS
Read: Neither direction has sufficient source confirmation to qualify. | Confidence: LOW
P3 sources: disp 38.8% | adj 39.3% | raw 44.0% | mkt 33.4% | hold 42.3% | spread 10.7pp | hook stable
🎲 RISK LEAN: Over 2.5 sets @ 38.8% | Slight lean | P3 +4.3pp above empirical baseline | wide source spread | ⚠ fragile [src: d=38.8 a=39.3 r=44.0 m=33.4 h=42.3 | base=34.5 med=39.3] — NOT an official pick, risk only.
📊 Player Stats (Live):
ᴛᴏᴛᴀʟѕ ꜰᴀɪʀ ʟɪɴᴇ: 22.5 (ᴄᴅꜰ 50/50) | ᴍɪˣᴛᴜʀᴇ ᴍᴇᴅɪᴀɴ: 22.9
ᴛᴏᴛᴀʟѕ ʀᴀɴɢᴇ: ᴘ10=17 | ᴘ50=23 | ᴘ90=32
ᴛᴏᴛᴀʟѕ ᴇˣᴘᴇᴄᴛᴇᴅ: 23.8 (ᴍᴇᴀɴ) | ᴍᴇᴅɪᴀɴ: 22.9
ᴍᴏѕᴛ ᴄᴏᴍᴍᴏɴ ᴇˣᴀᴄᴛ: 19ɢ | ʜɪɢʜᴇѕᴛ-ᴅᴇɴѕɪᴛʏ ᴢᴏɴᴇ: 18-20ɢ 22.3%
ᴍɪˣᴛᴜʀᴇ ᴍᴇᴅɪᴀɴ: 23.0ɢ | ᴄᴏɴᴅɪᴛɪᴏɴᴀʟ: ᴇ[ᴛ|2 ѕᴇᴛѕ] 19.6 | ᴇ[ᴛ|3 ѕᴇᴛѕ] 29.4 | ᴘ(3 ѕᴇᴛѕ) 40%
ᴛᴏᴛᴀʟѕ ᴘᴍꜰ (ᴛᴏᴘ ᴇˣᴀᴄᴛѕ): 19ɢ 7.7% | 18ɢ 7.5% | 20ɢ 7.2% | 22ɢ 7.0% | 17ɢ 6.6% | 21ɢ 5.5% | 29ɢ 5.1% | 23ɢ 5.1%
🎯 TOTAL GAMES:
ᴛᴏᴛᴀʟѕ ʀᴇɢɪᴍᴇ ѕᴛᴀʙʟᴇ (ᴍᴄ ᴄʜᴀɪɴѕ 3, ᴀᴠɢ ѕᴘʀᴇᴀᴅ 0.13 ɢ)
✅ [OFFICIAL BET]
ᴏᴠᴇʀ 21.5
── ꜰʀᴀɢɪʟɪᴛʏ ꜰʟᴀɢѕ ──
⚠️ ᴍᴏᴅᴇʀᴀᴛᴇʟʏ ʙɪᴍᴏᴅᴀʟ (ѕᴄᴏʀᴇ=0.42) — ᴇʟᴇᴠᴀᴛᴇᴅ ᴠᴀʀɪᴀɴᴄᴇ
⚠️ ʜᴇᴀᴠʏ ʀɪɢʜᴛ ᴛᴀɪʟ (ᴘ≥31=16.1%) — ʙʟᴏᴡᴏᴜᴛ ʀɪѕᴋ
⚠️ ᴄᴏʟᴅ ѕᴛᴀʀᴛ / ᴍɪѕѕɪɴɢ ᴅᴀᴛᴀ — ᴇᴅɢᴇѕ ᴅɪѕᴄᴏᴜɴᴛᴇᴅ 30%
⚠️ ᴄʜ ᴛᴏᴜʀ — ᴛʜɪɴ ᴅᴀᴛᴀ, ʜɪɢʜᴇʀ ѕʜʀɪɴᴋᴀɢᴇ
ᴡʜʏ ɪᴛ ꜰɪᴛѕ:
ᴛʜᴇ ᴇˣᴛᴇɴᴅᴇᴅ-ᴘᴀᴛʜ ѕᴛʀᴜᴄᴛᴜʀᴇ ᴋᴇᴇᴘѕ ᴘʀᴇѕѕᴜʀᴇ ᴏɴ ᴛʜᴇ ᴏᴠᴇʀ.
ѕʜᴀᴘᴇ:
2-ѕᴇᴛ ᴄʟᴜѕᴛᴇʀ 19ɢ | ±1σ ʀᴀɴɢᴇ: 17-22ɢ | ᴘ(ᴏᴠᴇʀ 21.5) ɪɴ ʟᴀɴᴇ: 18.1% | 3-ѕᴇᴛ ᴄʟᴜѕᴛᴇʀ 29ɢ | ᴘ(ᴅᴇᴄɪᴅᴇʀ) 43% (ѕᴛʀᴏɴɢ, 95% ᴏꜰ ᴍᴀˣ) | ᴡᴄᴇ 23.2ɢ
ᴘʀɪᴄɪɴɢ:
ᴍᴏᴅᴇʟ ꜰᴀɪʀ 22.5 ᴠѕ ᴍᴀʀᴋᴇᴛ 21.5 (+1.0ɢ)
ᴇɴɢɪɴᴇ ʙʀᴇᴀᴋᴅᴏᴡɴ:
ѕɪᴍᴜʟᴀᴛɪᴏɴ (24000 ʀᴜɴѕ): ᴍᴇᴅɪᴀɴ 22.9ɢ, 59% ᴏᴠᴇʀ 21.5.
ᴍᴀᴛᴄʜ ѕʜᴀᴘᴇ (ᴍᴀʀᴋᴏᴠ ꜰᴀɪʀ 22.5ɢ, 2-ѕᴇᴛ ᴄʟᴜѕᴛᴇʀ 19ɢ (60% ᴏꜰ ᴘᴀᴛʜѕ), 3-ѕᴇᴛ ᴄʟᴜѕᴛᴇʀ 29ɢ (40% ᴏꜰ ᴘᴀᴛʜѕ)) — ѕʟɪɢʜᴛ ᴏᴠᴇʀ ʟᴇᴀɴ.
ᴡɪᴛʜɪɴ 2-ѕᴇᴛ ᴄʟᴜѕᴛᴇʀ: ±1σ ʀᴀɴɢᴇ: 17-22ɢ | ᴘ(ᴏᴠᴇʀ 21.5) ɪɴ ʟᴀɴᴇ: 18.1%
ᴀᴜᴅɪᴛ: ᴅɪʀᴍᴄ=ᴏᴠᴇʀ | ᴘѕɪᴅᴇᴍᴄ=56.7% | ᴄʟᴜѕᴛᴇʀᴅɪʀ=ᴜɴᴅᴇʀ | ᴄʜᴏѕᴇɴᴅɪʀ=ᴏᴠᴇʀ | ɪɴᴠᴀʀɪᴀɴᴛ=ᴏᴋ
📊 ᴜɴᴅᴇʀᴅᴏɢ ᴀѕѕᴇѕѕᴍᴇɴᴛ:
ɴᴏ ᴇᴅɢᴇ ᴏɴ ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ (27.8% ᴍᴏᴅᴇʟ | ɪᴍᴘʟɪᴇᴅ 36%).
Do not create patches find why challenger matches for total games and match winners aren’t accurate somehow it rescinded the wrong match winner bc this guy it’s leaning to on the ch match lost in 2 sets. Despise the 102 fixes the total games logic and magic winner logic for ch matches aren’t accurate find the deep issues and fix them without making patches then send my script as a downloadable txt link
I fixed the script from your uploaded engine file (Tennislocks2.0.txt) and saved the corrected version here:
Download the fixed TennisLocks script
What I corrected:
CH totals OVER bias in bimodal dead-zones
(1-p3) vs p3.Hook gravity over-push
Winner-to-totals contamination on CH/ITF
MOD_FAV winner-based p3 conditioning for CH/ITF.FAKE_FAV / FAKE_DOG winner-based p3 shifts on CH/ITF.Wrong CH match-winner rescind behavior
I also ran a syntax check on the finished file successfully before saving it.