On it. Let me actually trace the OVER bias to its ...

Created on: April 20, 2026

Answered using GPT-5.4 Thinking by Chat01

Question

Tennislocks2.0.txt

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):

  • ʜɪѕᴛ. ѕᴜʀꜰᴀᴄᴇ (ʀᴇᴅ ᴄʟᴀʏ): ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ (~57.2% (ᴇѕᴛ.)) | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ (~56.1% (ᴇѕᴛ.)) [ᴛᴀ_ʟɪᴠᴇ_ѕᴘᴡ]
  • ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ: ʜᴏʟᴅ 71.2% (ʀᴀᴡ: 66.5%, ᴀᴅᴊ: ᴛɪᴇʀ ʙᴏᴏѕᴛ) [ᴇꜰʀᴏɴ-ᴍᴏʀʀɪѕ]
  • ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ: ʜᴏʟᴅ 69.1% (ʀᴀᴡ: 58.2%, ᴀᴅᴊ: ᴛɪᴇʀ ʙᴏᴏѕᴛ) [ᴇꜰʀᴏɴ-ᴍᴏʀʀɪѕ]
  • ѕᴛʏʟᴇ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ [ʙᴀѕᴇʟɪɴᴇ/ᴛᴀᴄᴛɪᴄɪᴀɴ] | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ [ᴠᴜʟɴᴇʀᴀʙʟᴇ]
  • ᴍᴀᴛᴄʜ ᴍᴏᴍᴇɴᴛᴜᴍ (ᴡᴀɴɢ): ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ ᴡᴀɴɢ ѕᴄᴏʀᴇ: 37.0% (ɴᴇɢᴀᴛɪᴠᴇ ᴍᴏᴍᴇɴᴛᴜᴍ), ᴡ-ʟ 3-4, ѕѕ 3-3, ѕᴇᴛѕ 7-8 ; ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ ᴡᴀɴɢ ѕᴄᴏʀᴇ: 37.0% (ɴᴇɢᴀᴛɪᴠᴇ ᴍᴏᴍᴇɴᴛᴜᴍ), ᴡ-ʟ 2-5, ѕѕ 1-2, ѕᴇᴛѕ 7-11
  • 1ѕᴛ ѕʀᴠ ᴡɪɴ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 63.5% | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 59.1%
  • 2ɴᴅ ѕʀᴠ ᴡɪɴ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 45.2% | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 47.3%
  • 1ѕᴛ ѕʀᴠ ɪɴ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 62.0% | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 67.0%
  • ѕᴘᴡ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 56.5% | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 55.2% [ʙᴀʀɴᴇᴛᴛ-ᴄʟᴀʀᴋᴇ ᴀᴅᴊ.]
  • ʙʀᴇᴀᴋ ʀᴀᴛᴇ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 30.9% | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 28.8%
  • ᴅᴏᴍɪɴᴀɴᴄᴇ ʀᴀᴛɪᴏ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 0.88 | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 0.57 [ᴍɪѕᴍᴀᴛᴄʜ]
  • ᴠᴏʟᴀᴛɪʟɪᴛʏ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 0.5% | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 3.5% | ᴍᴀᴛᴄʜ: 2.0%
  • ᴇʟᴏ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ ꜰᴀᴠᴏʀᴇᴅ (60.7%) [ᴋᴍ-ᴇʟᴏ ʙʀɪᴅɢᴇ]
    ѕᴏᴜʀᴄᴇ: ᴇʟᴏ_ʟᴏᴏᴋᴜᴘ ѕʜᴇᴇᴛ (ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ=1454, ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ=1393)
  • ʙʟᴇɴᴅ (ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ): ᴍᴄ 58.7% | ѕᴛᴀᴛѕ 66.8% | ᴇʟᴏ 60.7%
  • ᴀɴᴀʟʏᴛɪᴄᴀʟ ʜᴏʟᴅ: ᴍɪᴋᴀ ʙʀᴜɴᴏʟᴅ 70.5% | ᴍɪɢᴜᴇʟ ᴅᴀᴍᴀѕ 68.6% (ɴᴇᴡᴛᴏɴ-ᴋᴇʟʟᴇʀ)

ᴛᴏᴛᴀʟѕ ꜰᴀɪʀ ʟɪɴᴇ: 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ɢ)

ᴇɴɢɪɴᴇ ʙʀᴇᴀᴋᴅᴏᴡɴ:

  1. ᴍᴄ ᴏᴠᴇʀ (ᴀɴᴛɪᴛʜᴇᴛɪᴄ): 58.3% (ɪɴᴄʟᴜᴅᴇѕ ᴘᴜѕʜᴇѕ) [ѕᴇᴛ ѕᴘʟɪᴛ: 2ѕᴇᴛ 57% | 3ѕᴇᴛ 43%]
  2. ɴᴏ-ᴘᴜѕʜ ᴍᴄ: 57.9% ᴏᴠᴇʀ
  3. ɢᴏᴠᴇʀɴᴏʀ ᴏᴠᴇʀ: 58.2% (ʙʟᴇɴᴅ ᴡᴇɪɢʜᴛ: 0%)
  4. ᴏᴡɴᴇʀ (ᴘɪᴄᴋ): 57.2% ᴏᴠᴇʀ
  5. ᴅɪѕᴘʟᴀʏ ᴏᴠᴇʀ: 58.1% (ᴄᴏѕᴍᴇᴛɪᴄ ᴏɴʟʏ, ɴᴏᴛ ᴜѕᴇᴅ ꜰᴏʀ ᴘɪᴄᴋ)
    ᴍᴀʀᴋᴏᴠ ᴄʀᴏѕѕᴄʜᴇᴄᴋ: 57.3% ᴏᴠᴇʀ
    ꜰᴀɪʀ ʟɪɴᴇѕ - ᴍᴄ: 22.5 | ᴍᴀʀᴋᴏᴠ: 22.5 | ɢᴀᴘ: 1.2ᴘᴛѕ, 0.00ɢ
    ʜᴀʟꜰ-ʟɪɴᴇ 21.5 - ᴍᴄ: ᴜɴᴅᴇʀ 41.4% | ᴏᴠᴇʀ 58.6%
    ʜᴀʟꜰ-ʟɪɴᴇ 21.5 - ᴍᴀʀᴋᴏᴠ: ᴜɴᴅᴇʀ 42.7% | ᴏᴠᴇʀ 57.3%
    ᴛᴀɪʟ - ᴘ(>=30): 21.1% | ᴘ(>=31): 16.1% | ᴘ(>=35): 3.6%
    ʙᴜᴄᴋᴇᴛѕ: ʟᴇꜰᴛᴛᴀɪʟ(ʟ-6) 2.2% | ʟᴏᴄᴀʟᴍᴀѕѕ ʟᴏᴡ 14.8% ʜɪɢʜ 7.2%
    ɴᴇᴀʀ-ʟɪɴᴇ ᴍᴀѕѕ @21.5: 12.5% (ᴘ(21)+ᴘ(22)) | ʟᴏᴄᴀʟ 20-22: 19.6% | 19-23: 32.4%
    ᴀᴅᴊᴀᴄᴇɴᴛ ᴇˣᴀᴄᴛѕ: ᴘ(21ɢ) 5.5% | ᴘ(22ɢ) 7.0%
    ᴍᴀʀᴋᴏᴠ 3-ѕᴇᴛ ᴀᴅᴊ: 43.4% (ᴘᴇɴᴀʟᴛʏ 0.0%)
    ʜᴏᴏᴋ ᴍᴀѕѕ @21.5: 2ѕᴇᴛ 21.5% | 3ѕᴇᴛ 1.0% | ʙʟᴇɴᴅᴇᴅ 12.6% [ʜᴏᴏᴋ ꜰʀᴀɢɪʟᴇ] | ꜰʟᴏᴏʀ(21ɢ) 5.5% ᴠѕ ᴄᴇɪʟ(22ɢ) 7.1% | ɢʀᴀᴠɪᴛʏ 21.56ɢ | ɴᴜᴅɢᴇ ᴏᴠᴇʀ 1.3ᴘᴘ
    ʟᴍᴘ: ѕᴋᴇᴡ=-0.175 ᴅɪʀᴄʀᴇᴅɪᴛ=+3.77ᴘᴘ ᴜɴᴄᴘᴇɴ=56.3% ɴᴇᴀʀ=12.5% ᴄᴏᴍ=21.03 ᴇɴᴛ=3.256 ᴡ3=22.3%[18-20]

ѕɪᴍᴜʟᴀᴛɪᴏɴ (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

Thought

bash -lc cp /mnt/data/Tennislocks2.0_fixed.txt /tmp/Tennislocks2.0_fixed.js && node --check /tmp/Tennislocks2.0_fixed.js

Thought for 2m 46s

Answer

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

    • Reworked split-gap directional credit so it is proximity-weighted to the line, not just (1-p3) vs p3.
    • Added contradiction damping when lane credit disagrees with local skew or local center of mass.
    • This directly addresses the case you flagged where the line is closer to the 2-set cluster but the engine was still getting pulled toward the 3-set OVER lane.
  • Hook gravity over-push

    • Tightened the hook-gravity cap and made it conditional on local geometry agreement.
    • On CH dead-zone lines, ceil/floor imbalance no longer gets to push OVER if the local mass shape is actually leaning UNDER.
  • Winner-to-totals contamination on CH/ITF

    • Disabled MOD_FAV winner-based p3 conditioning for CH/ITF.
    • Reduced FAKE_FAV / FAKE_DOG winner-based p3 shifts on CH/ITF.
    • This stops noisy Challenger winner archetypes from inflating decider probability and leaking into totals.
  • Wrong CH match-winner rescind behavior

    • Added a raw-probability authority path for post-flip governance.
    • After side changes, the engine now uses:
      • raw pick-side probability for side preservation, ladder strength, and cluster governance
      • calibrated probability only for market-scale comparisons like market edge / EV
    • That removes the late-stage CH behavior where calibrated post-flip state could effectively rescind or distort the actual winner side.

I also ran a syntax check on the finished file successfully before saving it.

Share this Q&A