You’re right to be mad: there are several places w...
Créé le : 13 mars 2026
Répondu en utilisant GPT-5.4 Thinking par Chat01
Créé le : 13 mars 2026
Répondu en utilisant GPT-5.4 Thinking par Chat01
You’re right to be mad: there are several places where the policy layer is asking for tennis probabilities that almost never occur, especially for 3‑set lanes. Below is a clean list of what to change or remove, why it’s a problem, and how it behaves across all tours. I’ll focus on hard / “impossible” gates, not on the physics (sim) layer.
All line refs and values are from your ..._ALL_PATCHES.txt file.[1]
SETSMARKETCFG read thresholds (2‑set & 3‑set)Current config (global, all tours):[1]
jsvar SETS_MARKET_CFG = { DISP_W_BO3: 0.16, RAW_W_BO3: 0.30, ADJ_W_BO3: 0.20, MKT_W_BO3: 0.16, HOLD_W_BO3: 0.18, SHIFTCAP_BO3: 0.14, WARNGAP_BO3: 0.08, STRONGEDGE_BO3: 0.12, MIDEDGE_BO3: 0.07, SWEEPSOFT_BO3: 0.56, SWEEPHARD_BO3: 0.62, READSTRONG2SETBO3: 0.59, READLEAN2SETBO3: 0.525, READSTRONG3SETBO3: 0.59, READLEAN3SETBO3: 0.525, ... TOUR: { ATP: { maxP3: 0.52, ... }, WTA: { maxP3: 0.53, ... }, CH: { maxP3: 0.52, ... }, ITF: { maxP3: 0.49, ... }, DEFAULT:{ maxP3: 0.46, ... } } };
Why this is impossible / asymmetric:
maxP3 per tour encodes that.[1]READSTRONG2SETBO3 and READSTRONG3SETBO3 both 0.59), the policy expects the 3‑set lane to have the same win probability as the straight‑sets lane, which is structurally wrong: p2 + p3 = 1.[1]Patch (keep symmetry but realistic per tennis):
You want 2‑sets thresholds in the high‑50s (favorite‑ish), and 3‑sets thresholds in the high‑30s / low‑40s (decider still meaningful but not dominant).
FIND:
jsREADSTRONG2SETBO3: 0.59, READLEAN2SETBO3: 0.525, READSTRONG3SETBO3: 0.59, READLEAN3SETBO3: 0.525,
REPLACE WITH:
jsREADSTRONG2SETBO3: 0.60, // strong 2-set lane READLEAN2SETBO3: 0.54, // lean 2-set lane READSTRONG3SETBO3: 0.44, // strong 3-set lane (very live decider) READLEAN3SETBO3: 0.38, // lean 3-set lane (solid but not majority)
Impact (all tours):
maxP3 ≈ 0.52 → a 48–50% decider can now be “STRONG 3‑SET”, and 40–45% can be “LEAN 3‑SET”.Everything below is in _buildSetsMarketEngine_(ctx).[1]
supportThr3 / supportThr2 (broad‑support gate)Current (inside setsPick decision block):[1]
jsvar supportCount = 0; var supportThr3 = _tourMaxP3 * 0.80; var supportThr2 = 1 - supportThr3; ... if (leadTwo) { if (Number.isFinite(p3Raw) && (1 - p3Raw) >= supportThr2) supportCount++; if (Number.isFinite(p3ModelDisplay)&& (1 - p3ModelDisplay)>= supportThr2) supportCount++; ... } else { if (Number.isFinite(p3Raw) && p3Raw >= supportThr3) supportCount++; if (Number.isFinite(p3ModelDisplay)&& p3ModelDisplay>= supportThr3) supportCount++; ... } var broadSupport = (supportCount >= (leadGap < 0.08 ? 3 : 2));
For WTA: _tourMaxP3 = 0.53, so supportThr3 = 0.424.[1]
Why this is impossible:
broadSupport for almost all realistic mismatch matches and forces 3‑set bets into being reserved for near‑coinflips.Patch (soften but keep structure):
FIND:
jsvar supportThr3 = _tourMaxP3 * 0.80; var supportThr2 = 1 - supportThr3;
REPLACE WITH:
js// 3-set support kicks in ~15pp below tour max, not 20pp. var supportThr3 = _tourMaxP3 - 0.15; // e.g. WTA: 0.53 - 0.15 = 0.38 var supportThr2 = 1 - supportThr3; // e.g. WTA: 0.62
This makes it possible for p3 sources in the 0.37–0.40 band (typical for 62–67% favorites) to count as genuine 3‑set support across ATP/WTA/CH/ITF.[1]
_ol*Thr) and decider votes (_dv*Thr)Current:[1]
jsvar _olRawThr = _tourMaxP3 * 0.87; var _olAdjThr = _tourMaxP3 * 0.78; var _olMktThr = _tourMaxP3 * 0.84; var _olHoldThr = _tourMaxP3 * 0.83; ... var _dvRawThr = _tourMaxP3 * 0.80; var _dvAdjThr = _tourMaxP3 * 0.76; var _dvMktThr = _tourMaxP3 * 0.82; var _dvHoldThr = _tourMaxP3 * 0.81;
For WTA (maxP3=0.53) these are roughly:
Why this is too hard / unrealistic:
Patch: drop thresholds ~0.10 across the board
FIND:
jsvar _olRawThr = _tourMaxP3 * 0.87; var _olAdjThr = _tourMaxP3 * 0.78; var _olMktThr = _tourMaxP3 * 0.84; var _olHoldThr = _tourMaxP3 * 0.83; ... var _dvRawThr = _tourMaxP3 * 0.80; var _dvAdjThr = _tourMaxP3 * 0.76; var _dvMktThr = _tourMaxP3 * 0.82; var _dvHoldThr = _tourMaxP3 * 0.81;
REPLACE WITH:
js// Over-lane support: fire at more realistic 3-set levels var _olRawThr = _tourMaxP3 * 0.70; // ~0.36 WTA var _olAdjThr = _tourMaxP3 * 0.62; // ~0.33 var _olMktThr = _tourMaxP3 * 0.68; // ~0.36 var _olHoldThr = _tourMaxP3 * 0.66; // ~0.35 // Decider votes: same idea, lower bands var _dvRawThr = _tourMaxP3 * 0.66; // ~0.35 var _dvAdjThr = _tourMaxP3 * 0.58; // ~0.31 var _dvMktThr = _tourMaxP3 * 0.64; // ~0.34 var _dvHoldThr = _tourMaxP3 * 0.63; // ~0.33
This lets WTA/ATP/CH/ITF register “yes, decider is really live” once p3 is in the mid‑30s, which is the realistic band for many 60–70% favorites.[1]
dcMeanThr – decider consensus thresholdCurrent:[1]
jsvar dcMeanThr = _tourMaxP3 * 0.82; ... var deciderConsensusLive = (liveDeciderVotes >= 2 && Number.isFinite(liveDeciderMean) && liveDeciderMean >= dcMeanThr && nearEvenSweep);
For WTA: dcMeanThr ≈ 0.43.
Why this is off:
Patch: lower to ~0.35 across tours
FIND:
jsvar dcMeanThr = _tourMaxP3 * 0.82;
REPLACE WITH:
js// Consensus kicks in once blended decider is in the mid-30s var dcMeanThr = _tourMaxP3 * 0.68; // WTA ~0.36, ATP/CH similar band
_spHigh / _spMid)Current:[1]
jsvar _spHigh = (1 - _tourMaxP3) + 0.04; var _spMid = (1 - _tourMaxP3) + 0.13; // Use RAW p3 for sweep-pressure check var _p2ForSweepCheck = Number.isFinite(p3Raw) ? (1 - p3Raw) : (Number.isFinite(p3ModelDisplay) ? (1 - p3ModelDisplay) : NaN); if (Number.isFinite(_p2ForSweepCheck) && _p2ForSweepCheck > _spHigh) { _sweepPressure = 2; } else if (Number.isFinite(_p2ForSweepCheck) && _p2ForSweepCheck > _spMid) { _sweepPressure = 1; } ... if (!leadTwo && _sweepPressure >= 1) riskAdj += _sweepPressure * 0.015; ... if (!leadTwo && _sweepPressure >= 2 && leadProb > 0.65) { out.setsPick = 'PASS'; }
For WTA: _tourMaxP3=0.53 → _spHigh=0.51, _spMid=0.60. So a 64% favorite with raw p3 = 0.39 → _p2ForSweepCheck = 0.61, which always triggers sweepPressure=1 and may hit 2 for slightly higher p2.[1]
Why this is over‑aggressive:
Patch: move sweep mid/high slightly right
FIND:
jsvar _spHigh = (1 - _tourMaxP3) + 0.04; var _spMid = (1 - _tourMaxP3) + 0.13;
REPLACE WITH:
js// Only treat sweep as "strong" when p2 is really dominant var _spHigh = (1 - _tourMaxP3) + 0.08; var _spMid = (1 - _tourMaxP3) + 0.18;
That turns WTA sweep thresholds into ≈0.49 / 0.55 → ≈0.53 / 0.59. Now a 64–66% favorite doesn’t automatically get sweep pressure tags that punish 3‑set bets, but truly big favorites (70%+) still do.[1]
This block isn’t the sets pick, but it feeds p3ForTotals, which then influences totals and the “p3 authority” line you’re seeing.[1]
From totalsDeciderAuthority(ctx):[1]
jsif (Number.isFinite(lane3) && lane3 >= 0.98 && !broadSupport) { p3 = Math.min(p3, 0.44); } else if (Number.isFinite(lane3) && lane3 >= 0.95 && fragile) { p3 = Math.min(p3, 0.48); }
Why this is “impossible” behavior:
Patch options:
If you hate hard caps, best is to remove these lines entirely.
REMOVE this block completely:
jsif (Number.isFinite(lane3) && lane3 >= 0.98 && !broadSupport) { p3 = Math.min(p3, 0.44); } else if (Number.isFinite(lane3) && lane3 >= 0.95 && fragile) { p3 = Math.min(p3, 0.48); }
Or, if you want a softer version:
REPLACE WITH:
jsif (Number.isFinite(lane3) && lane3 >= 0.98 && !broadSupport) { // just shave a bit toward anchor, don't hard cap p3 = 0.85 * p3 + 0.15 * anchor; } else if (Number.isFinite(lane3) && lane3 >= 0.95 && fragile) { p3 = 0.90 * p3 + 0.10 * anchor; }
This preserves symmetry and avoids “impossible low” p3 when lane3 is screaming 3‑set.[1]
The totals pick engine (getTotalsPick and surrounding helpers) uses:
totalsDeciderAuthority above.These are not mathematically impossible; they’re just tuned to need real edges (mid‑50s or better) to show an Over/Under bet. If you want more “lean over 21.5” behavior:
msHighThr/msMidThr by ~0.02–0.03 for each tour in the getTotalsConfLabel logic, so that 52–53% over can show as MID instead of PASS.[1]But the truly “broken” symmetric behavior was in the sets engine gates we covered in sections 1–2, not the totals engine.
For a symmetric tennis script without impossible gates:
Change in SETS_MARKET_CFG (global, all tours):
READSTRONG3SETBO3 / READLEAN3SETBO3 to ≈0.44/0.38.In _buildSetsMarketEngine_:
supportThr3 from _tourMaxP3*0.80 to _tourMaxP3 - 0.15._ol*Thr and _dv*Thr multipliers by ~0.10 as proposed.dcMeanThr from _tourMaxP3*0.82 to _tourMaxP3*0.68._spHigh/_spMid right so sweep‐pressure doesn’t auto‑fire for every 60–70% favorite.[1]In totalsDeciderAuthority:
p3 ≤ 0.44/0.48 when lane3 is 0.95–0.98, or turn them into mild shaves.[1]After these changes, for any tour (ATP / WTA / CH / ITF):
Update my script every single thing listed
Update and send my script as a downloadable txt link
Done — I updated the uploaded script with all of the requested policy-layer changes, and for the decider hard-cap block I used the soft-shave replacement rather than deleting it outright. (Tennislocks_v17.10.0_line_mass_refactor_multichain_test_patched_updated_ALL_PATCHES.txt)