Do not give me instructions telling me how to do i...
Created on: March 1, 2026
Answered using GPT-5.2 Thinking by Chat01
Created on: March 1, 2026
Answered using GPT-5.2 Thinking by Chat01
Do not give me instructions telling me how to do it myself when I have u instructions to update my script
Update my script then check for syntax and undefined issues in the places that you edited bc they will likely appear after u updated it
Yes — based on your uploaded file, the system is corrupted by ownership bleed, not by one bad number. The fix is to restore clean boundaries between MC, Markov, cluster, and ORP. 
What that means in practice:
For a match where the under is correct but the fair line should be closer to 21.5–22.5, your fair-line function is behaving correctly; it is faithfully reporting a bad upstream distribution. So the repair target is: keep the under, but stop the upstream engine from manufacturing a fake blowout distribution.
Audit rule:
After that block runs, nothing else should be allowed to re-derive totals from a different source. That means:
• fairLineMC must come from gamesListAdj only.
• pOverMC must come from gamesListAdj only.
• median, mode, and bucket logic must all reference the same adjusted list.
If any later stage sneaks in a mean-based override, a separate Markov-adjusted median, or an old cluster expectation, you recreate the mismatch you’re trying to kill. The code already tries to avoid that; your job is to make sure no later function bypasses it.  
Then upstream, your context builds pOverEval from pOverBlendEval when available, stores that as _totCtx.pOverBlend, and computes gapP as abs(pOverEval - pOverMarkov). That means your disagreement metric is not raw MC vs Markov — it is often blend vs Markov, which artificially shrinks disagreement. 
But the cluster section itself says the intended architecture is:
1. MC creates the world.
2. Markov gives the independent cross-check.
3. Cluster is the last word on conviction. 
So the fix is conceptual:
• getTotalsPick() should receive raw MC direction as its primary input.
• ctx.pOverMarkov stays separate.
• gapP must be computed from raw MC vs raw Markov, not from a blended probability.
• Only after cluster finishes grading should you optionally compute a display blend.
Right now, you are letting the engines partially agree before the referee judges the disagreement.
That is the contamination.
Even if the exact implementation is different than older versions, the architectural symptom is the same: Markov is being asked to “live in the same regime” as the sim, so it stops being a true second opinion.
What to change conceptually:
• Markov should use baseline analytical hold inputs, not mismatch-compressed or blowout-aware holds.
• No set-path taper, no reverse taper, no underdog collapse logic inside the Markov path.
• At most, allow a tiny neutral adjustment for surface pace, and make it symmetric, not favorite-vs-underdog asymmetric.
If Markov is independent, then when the sim gets too aggressive and spits out an 18.5-type world, Markov should stay materially higher and force gapLine to widen.
The correct fix is not “remove all taper.”
The correct fix is:
• Let pre-match mismatch affect straight-set likelihood, but only modestly.
• Once the underdog actually survives into a deciding set, treat that as new evidence.
• At that point, disable the harsh third-set suppression and let the decider run near raw point/hold inputs.
• In other words: pre-match favorite strength can bias the chance of reaching set 3, but it should not keep crushing the length of set 3 after set 3 exists.
That is how you stop the model from producing fake 24–25 game “three-set” outcomes in matches that should be 29+.
Inside the same function, _orpAdj() uses:
• schedScale
• confidence
• soft-schedule reinfusion back toward raw to avoid over-deflating dogs. 
That by itself is not inherently wrong. The problem is that your file also shows a separate ORP hold adjustment in the hold path, where hold% is again altered by trust, expected-for-schedule, and ORP confidence. 
So you likely have:
1. ORP-adjusted stats upstream, then
2. ORP-adjusted hold again downstream, then
3. Form/schedule injection, then
4. Final trust compression.
That is why weak-schedule underdogs keep getting dragged back toward “favorite wins.”
Fix this by choosing one ORP layer of truth:
• Either ORP rewrites the raw stats once before model feature extraction,
or
• ORP is applied only as a light probability compressor at the end.
It should not directly rewrite stats, hold, SPW, and final probability all in one pipeline.
That means trust gap is amplifying:
• the delta size
• the delta cap
• the blend weight
• and then it gets physically injected into SPW / hold path
That is too many levers.
Best structural fix:
Pick only one of these roles:
• ORP as a stat rewrite,
• ORP as a small form-layer tiebreaker,
• ORP as a final confidence compressor.
Do not let trust gap simultaneously enlarge the form delta and enlarge its weight and alter the sim inputs.
For your model style, the cleanest choice is:
• keep ORP as a small tiebreaker in winner direction,
• keep it out of totals path generation.
That’s the right idea. The problem is placement, not just formula.
If you use this after ORP has already:
• rewritten stats,
• altered hold,
• boosted form layer,
then even a “neutral” compression still locks in an already favorite-heavy prior.
So the rule should be:
• Use applyOppTrustToProb only as the final confidence moderation step.
• Never let it participate in raw side creation.
• Lower its max shrink in practice so it cannot erase real dog paths after other penalties.
That means the correct repair order is:
1. Remove duplicate ORP injections from hold-generation / sim-input code.
2. Keep ORP in one place only.
3. Make Markov use baseline analytical holds only.
4. Make gapP and gapLine compare raw MC vs raw Markov.
5. Pass raw MC into getTotalsPick(); let cluster arbitrate before any blend.
6. Let cluster grade conviction, not create synthetic agreement.
7. Only after all that, apply small trust-based probability compression for display/risk.
That will preserve a correct under call when it is real, while pulling the fair line back up from fake dead zones like 18.5 to something structurally plausible like 21.5–22.5.
The single biggest takeaway:
Your under is not wrong because the side logic is broken. Your under is becoming “right for the wrong reason” because the model is manufacturing too many fake sweep paths. The cure is to stop the simulation and Markov from sharing the same blowout bias, and stop ORP from hitting the underdog three different times
pythonimport re, textwrap, json, os, pathlib, itertools, math, statistics path="/mnt/data/Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED.txt" data=open(path,'r',encoding='utf-8',errors='replace').read() len(data), data[:2000] (900478, '/**\n * PATCH NOTE (2026-02-19):\n * - Restored getTotalsPick() to v3.0 logic (removed MIN_BET_PROB gate that blocked many OVERS).\n * - Fixed classifyPlayer() Big Server ace threshold from 0.5 to 0.05 (label-only).\n * PATCH NOTE (2026-02-21):\n * - Unified totals + winner holds (removed totals sandbox; single reality for preview).\n * - Dampened BT-SBM tier hold shift from 3.5% -> 2.0% per tier gap (applies to ALL engines).\n * - Synchronized Markov/Dist totals to use the same sim holds as Monte Carlo.\n * - Standardized set-to-set momentum to 0.03 in BOTH MC + Markov engines.\n\n * PATCH NOTE (2026-02-22):\n * - Softened blowout tanking penalty basePenalty: WTA 10%->2.5%, ATP 8%->2.0%.\n * - Relaxed 3rd-set thin-edge PASS gate in getTotalsPick(): 58% -> 53% (both OVER and UNDER).\n * - Expanded mean vs median gap tolerance for totals picks: 2.5 -> 3.0 games.\n * - Widened "massive Elo gap" market-anchor tier trigger when using surface Elo: 100 -> 250.\n \n *\n * PATCH NOTE (2026-02-23):\n * - Added dependency-blind "String-Range" support to MATCH_PREVIEW/MATCH_PICK.\n * Pass sheet names as strings (e.g., "Match Inputs", "Summary & Prediction") to bypass Sheets circular dependency checks.\n * - solotennis6.0: Totals PASS output now uses a short "No bet" rationale (no projected-median narrative).\n * - Updated dependency-blind MATCH_PREVIEW example to a single-line iOS-safe formula.\n * - Added Coinflip / tiebreak win-prob dampener (post-process) to reduce overconfident MW% in high-hold matches.\n * - Capped tier hold-shift to 1.5% per tier gap (max 4%) to avoid inflating serve-dominant profiles.\n * - Added Underdog Sneak (post-process) win-prob compression for high-hold, decider-heavy matches.\n * - Fixed MATCH_PICK blank output caused by an undefined \'validation\' reference (ReferenceError -> empty string).\n * - FINAL_BET_SUMMARY win% now uses the same post-process display probability as MATCH_PREVIEW.\n * PATCH NOTE (2026-02-24):\n * - Script12.0: Conditional Set Dependence (3-set taper')
pythondef find_snippets(pattern, n=5, context=200): out=[] for m in re.finditer(pattern, data): start=max(0,m.start()-context); end=min(len(data), m.end()+context) out.append((m.start(), data[start:end])) if len(out)>=n: break return out snips=find_snippets(r'function\s+getTotalsPick\s*\(') len(snips), snips[0][1][:400] (1, 'stP = -1;\n for (var k in dist){\n var p = dist[k];\n if (!Number.isFinite(p)) continue;\n if (p > bestP) { bestP = p; bestKey = k; }\n }\n return (bestKey === null) ? NaN : Number(bestKey);\n}\n\nfunction getTotalsPick(pOverNoPush, ctx) {\n ctx = ctx || {};\n // Deterministic explanation key (used by MATCH_PREVIEW output)\n ctx.reason = "";\n ctx.reasonDetail = "";\n\n // NOTE: pOverNoPush is e')
python# Extract getTotalsPick function block naive by brace matching start=data.find("function getTotalsPick(") start 568150
pythondef extract_function(text, start_idx): # find first '{' after start brace_start=text.find("{", start_idx) if brace_start==-1: return None depth=0 for i in range(brace_start, len(text)): if text[i]=="{": depth+=1 elif text[i]=="}": depth-=1 if depth==0: return text[start_idx:i+1] return None func_getTotalsPick=extract_function(data,start) func_getTotalsPick[:1200] 'function getTotalsPick(pOverNoPush, ctx) {\n ctx = ctx || {};\n // Deterministic explanation key (used by MATCH_PREVIEW output)\n ctx.reason = "";\n ctx.reasonDetail = "";\n\n // NOTE: pOverNoPush is expected to be the Monte Carlo (price-discovery) no-push P(Over) at the market line.\n // Markov is an independent cross-check and may ONLY downshift conviction (never define side / fair line).\n var pO = Number(pOverNoPush);\n if (!Number.isFinite(pO)) {\n ctx.reason = "invalid probability";\n return "PASS";\n }\n pO = clamp01(pO);\n\n // Raw engines (diagnostic + disagreement)\n var pMC = (ctx && Number.isFinite(ctx.pOverMC)) ? clamp01(Number(ctx.pOverMC)) : pO;\n // Canonical probability for direction/edge is MC (do not let blends leak into pricing).\n pO = pMC;\n var pMarkov = (ctx && Number.isFinite(ctx.pOverMarkov)) ? clamp01(Number(ctx.pOverMarkov)) : NaN;\n\n // ===== Winner-engine conflict guard (Stats vs Elo) =====\n // Winner-model disagreement should only reduce confidence / enable PASS in fragile profiles.\n var _pStats_ctx = (ctx && Number.isFinite(ctx.pStats)) ? Number(ctx.pStats) : NaN;\n var _pElo_ctx = (ctx && Number.isFinite(ctx.pElo)) ? Number(ctx.pElo) : NaN;\n\n '
pythonfunc_getTotalsPick[1200:2400] ' // Normalize % inputs to [0,1] if needed (defensive).\n if (Number.isFinite(_pStats_ctx) && _pStats_ctx > 1 && _pStats_ctx <= 100) _pStats_ctx = _pStats_ctx / 100;\n if (Number.isFinite(_pElo_ctx) && _pElo_ctx > 1 && _pElo_ctx <= 100) _pElo_ctx = _pElo_ctx / 100;\n\n var _seGap = (Number.isFinite(_pStats_ctx) && Number.isFinite(_pElo_ctx)) ? Math.abs(_pStats_ctx - _pElo_ctx) : NaN;\n if (ctx && Number.isFinite(_seGap)) ctx.eloStatsGap = _seGap;\n\n // "Bimodal" here means Stats and Elo are on OPPOSITE sides with a large separation.\n var _bimodalOppDir = false;\n if (Number.isFinite(_pStats_ctx) && Number.isFinite(_pElo_ctx)) {\n var _psStrong = (Math.abs(_pStats_ctx - 0.5) >= 0.03);\n var _peStrong = (Math.abs(_pElo_ctx - 0.5) >= 0.03);\n _bimodalOppDir = _psStrong && _peStrong && ((_pStats_ctx >= 0.5) !== (_pElo_ctx >= 0.5));\n }\n if (ctx) ctx.bimodalOppDir = _bimodalOppDir;\n\n var _bimodal = (Number.isFinite(_seGap) && _seGap >= 0.20 && _bimodalOppDir);\n\n // ===== Engine disagreement policy (MC vs Markov) =====\n // gapP = abs(Pover_MC_noPush - Pover_Markov_noPush)\n // gapLine = abs(FairLine_MC - FairLine_Markov)\n var gapP = (ctx && Number.isFinite(ctx.ga'
python# find around "gapP" in this function idx=func_getTotalsPick.find("var gapP") func_getTotalsPick[idx:idx+800] "var gapP = (ctx && Number.isFinite(ctx.gapP)) ? Number(ctx.gapP) : NaN;\n var gapLine = (ctx && Number.isFinite(ctx.gapLine)) ? Number(ctx.gapLine) : NaN;\n\n // Direction agreement is assessed on MC vs Markov (not on the blended pO).\n var agreeSide = Number.isFinite(pMarkov) ? ((pMC >= 0.5) === (pMarkov >= 0.5)) : true;\n\n // Tour-aware disagreement thresholds (32k calibration: WTA/ITF engines disagree more naturally)\n var _gtpTourK = (ctx && ctx.tourLabel) ? _taperTourKey_(ctx.tourLabel) : 'ATP';\n var _gtpMdGapP = (_gtpTourK === 'WTA') ? 0.13 : (_gtpTourK === 'ITF') ? 0.15 : (_gtpTourK === 'CH') ? 0.11 : 0.10;\n var _gtpMdGapLine = (_gtpTourK === 'WTA') ? 2.5 : (_gtpTourK === 'ITF') ? 3.0 : (_gtpTourK === 'CH') ? 2.2 : 2.0;\n var _gtpSvGapP = (_gtpTourK === 'WTA') ? 0.22 : (_gtpTourK ="
python# Search for pOverBlendEval occurrences len(re.findall(r'pOverBlendEval', data)) 9
pythonsnips=find_snippets(r'pOverBlendEval', n=5, context=250) [(pos, s[:500]) for pos,s in snips[:2]] [(812902, 'id "two different MC Over values" confusion)\nvar pOverMarkov = NaN; // Markov no-push pOver\nvar fairLineMarkov = NaN; // Markov fair line (50/50)\nvar fairLineMC = (Number.isFinite(totFairLine) ? totFairLine : NaN); // MC fair line (50/50)\nvar pOverBlendEval = NaN; // Blend no-push pOver\nvar pOverBlendFull = NaN; // Blend full pOver\nvar pUnderBlendFull = NaN; // Blend full pUnder\nvar pPushBlendFull = NaN; // Blend full pPush\nvar wMarkovForDiag = 0;\n\nvar pMarkov3Set = NaN; // Mark'), (817796, ' if (_sumPU > 0 && Math.abs(_sumPU - 1) > 1e-6) {\n pOverFullB /= _sumPU;\n pUnderFullB /= _sumPU;\n pPushFullB /= _sumPU;\n }\n\n pOverBlendFull = pOverFullB;\n pUnderBlendFull = pUnderFullB;\n pPushBlendFull = pPushFullB;\n pOverBlendEval = normalizeNoPush(pOverFullB, pUnderFullB);\n } else {\n wMarkovForDiag = 0;\n pOverBlendFull = mcOU.pOver;\n pUnderBlendFull = mcOU.pUnder;\n pPushBlendFull = mcOU.pPush;\n pOverBlendEval = pOverGames;\n }\n\n // Totals conte')]
pythonblock=data[812650:818600] block[:2000] 'void "two different MC Over values" confusion)\nvar pOverMarkov = NaN; // Markov no-push pOver\nvar fairLineMarkov = NaN; // Markov fair line (50/50)\nvar fairLineMC = (Number.isFinite(totFairLine) ? totFairLine : NaN); // MC fair line (50/50)\nvar pOverBlendEval = NaN; // Blend no-push pOver\nvar pOverBlendFull = NaN; // Blend full pOver\nvar pUnderBlendFull = NaN; // Blend full pUnder\nvar pPushBlendFull = NaN; // Blend full pPush\nvar wMarkovForDiag = 0;\n\nvar pMarkov3Set = NaN; // Markov P(3 sets) after tight-match penalty (diagnostic)\nvar mkMismatch = 0;\nvar mkHoldDrop = 0;\nvar mkSet3Penalty = 0;\n\n\nvar mcDistAdj = null;\nvar mcLineData = null;\nvar mcOU = null;\n\nif (gamesListPriceAdj && gamesListPriceAdj.length > 0 && Number.isFinite(lineTot)) {\n // MC PMF + full O/U\n mcDistAdj = pmfFromTotalsArray(gamesListPriceAdj);\n\n // Hook/Push analysis (MC distribution is canonical)\n mcLineData = analyzeHook(lineTot, mcDistAdj);\n mcOU = { pOver: mcLineData.over, pUnder: mcLineData.under, pPush: mcLineData.push };\n\n totOverPct = mcOU.pOver;\n totUnderPct = mcOU.pUnder;\n totPushPct = mcOU.pPush;\n\n // MC pOver (conditional on not-push)\n pOverGames = normalizeNoPush(totOverPct, totUnderPct);\n\n // Markov/Dist totals (if available)\n var mkOU = null;\n try {\n var _startSrvTB = (serverFirst || \'AUTO\');\n _startSrvTB = String(_startSrvTB).toUpperCase();\n if (_startSrvTB !== \'A\' && _startSrvTB !== \'B\' && _startSrvTB !== \'AUTO\') _startSrvTB = \'AUTO\';\n\n var _holdA_tot = ((typeof simHA !== \'undefined\' && Number.isFinite(simHA)) ? simHA : ((typeof simHoldA !== \'undefined\' && Number.isFinite(simHoldA)) ? simHoldA : hA));\n var _holdB_tot = ((typeof simHB !== \'undefined\' && Number.isFinite(simHB)) ? simHB : ((typeof simHoldB !== \'undefined\' && Number.isFinite(simHoldB)) ? simHoldB : hB));\n var _pFinalForMk = (typeof pFinalA !== \'undefined\' && Number.isFinite(pFinalA)) ? pFinalA : 0.5;\n var _mkTour = (typeof tourLabel !== \'undefined\' && tourLabel) ? tou'
pythonblock[2000:4000] 'rLabel : tourCode();\n var _effMk = _markovEffectiveHolds_(_holdA_tot, _holdB_tot, _pFinalForMk, _mkTour);\n var mismatch = _effMk.mismatch;\n var holdDrop = _effMk.holdDrop;\n var hA_eff = _effMk.hA_eff;\n var hB_eff = _effMk.hB_eff;\n // --- Tight-match control (50/50 matches) REMOVED (v8.2.0) ---\n // The totals decision ladder now uses cluster authority scaling, so we avoid\n // artificially suppressing deciding-set frequency in true coinflips.\n var set3Penalty = 0;\n\n _totCtx.holdA = hA_eff;\n _totCtx.holdB = hB_eff;\n _totCtx.pWinA = _pFinalForMk;\n _totCtx.tourLabel = _mkTour;\n\n var _MO_TOT_BLEND = matchOutcomeProbs(hA_eff, hB_eff, _startSrvTB, bestOf, {\n tourLabel: _mkTour,\n independentMarkov: true\n });\n\n // Markov decider probability (diagnostic) — INDEPENDENT (no mismatch penalties).\n var _pDecRaw = (_MO_TOT_BLEND && _MO_TOT_BLEND.outcomes) ? Number(_MO_TOT_BLEND.outcomes.pDecider) : NaN;\n if (Number.isFinite(_pDecRaw)) _pDecRaw = Math.max(0, Math.min(1, _pDecRaw));\n pMarkov3Set = _pDecRaw;\n\n // IMPORTANT: Markov is a cross-check only. Do NOT overwrite MC decider inputs used by totals policy.\n\n mkMismatch = mismatch;\n mkHoldDrop = holdDrop;\n mkSet3Penalty = 0;\n// Keep Markov/Dist totals aligned with any integer correction applied to the MC totals list.\n var _mkGamesAdj = (Number.isFinite(_MO_TOT_BLEND.gamesAdj) ? _MO_TOT_BLEND.gamesAdj : 0) + (Number.isFinite(corrInt) ? corrInt : 0);\n\n var _mkTotObjBlend = matchTotalDistribution(_MO_TOT_BLEND.pair, bestOf, _mkGamesAdj);\n fairLineMarkov = (_mkTotObjBlend && Number.isFinite(_mkTotObjBlend.fairLine)) ? _mkTotObjBlend.fairLine : NaN;\n var _mkHook = analyzeHook(lineTot, _mkTotObjBlend.distribution);\n mkOU = { pOver: _mkHook.over, pUnder: _mkHook.under, pPush: _mkHook.push };\n pOverMarkov = normalizeNoPush(mkOU.pOver, mkOU.pUnder);\n } catch (eMk) {\n pOverMarkov = NaN;\n mkOU = null;\n }\n\n // Compute blend + shape metrics '
pythonblock[4000:6000] '(uses MC distribution shape)\n var _tourStr = (typeof tourLabel !== \'undefined\' && tourLabel) ? tourLabel : "";\n var _blendMinSg = Math.min(\n (statsA && Number.isFinite(statsA.sgPlayed)) ? statsA.sgPlayed : 25,\n (statsB && Number.isFinite(statsB.sgPlayed)) ? statsB.sgPlayed : 25);\n var blend = computeTotalsBlend(mcDistAdj, lineTot, pOverGames, pOverMarkov, _tourStr, _blendMinSg);\n\n // Compute blended full probabilities for diagnostics ONLY\n if (mkOU && blend && Number.isFinite(blend.wMarkov)) {\n wMarkovForDiag = blend.wMarkov;\n\n var pOverFullB = (1 - wMarkovForDiag) * mcOU.pOver + wMarkovForDiag * mkOU.pOver;\n var pUnderFullB = (1 - wMarkovForDiag) * mcOU.pUnder + wMarkovForDiag * mkOU.pUnder;\n var pPushFullB = (1 - wMarkovForDiag) * mcOU.pPush + wMarkovForDiag * mkOU.pPush;\n\n // Renormalize (defensive)\n var _sumPU = pOverFullB + pUnderFullB + pPushFullB;\n if (_sumPU > 0 && Math.abs(_sumPU - 1) > 1e-6) {\n pOverFullB /= _sumPU;\n pUnderFullB /= _sumPU;\n pPushFullB /= _sumPU;\n }\n\n pOverBlendFull = pOverFullB;\n pUnderBlendFull = pUnderFullB;\n pPushBlendFull = pPushFullB;\n pOverBlendEval = normalizeNoPush(pOverFullB, pUnderFullB);\n } else {\n wMarkovForDiag = 0;\n pOverBlendFull = mcOU.pOver;\n pUnderBlendFull = mcOU.pUnder;\n pPushBlendFull = mcOU.pPush;\n pOverBlendEval = pOverGames;\n }\n\n // Totals context: min edge by tour + shape metrics (confidence is shape-aware)\n var _tStr = String(_tourStr || "");\n // Tennis8.0 adjusted minEdge so we don\'t PASS on normal totals\n var _meTourK = \'ATP\';\n try { _meTourK = _taperTourKey_(_tStr); } catch(e) { _meTourK = \'ATP\'; }\n _totCtx.minEdge = (_meTourK === \'ITF\') ? 0.030\n : (_meTourK === \'CH\') ? 0.028\n : (_meTourK === \'WTA\') ? 0.025 : 0.022;\n\n // Under-trigger policy inputs (32k calibration: tour+surface-aware blowout/decider rates)\n // ATP: 8.8% blowout (hard 8.1%, clay 10.4%, grass 4.3%), 35.6%'
python# find occurrences of "pOverEval" around later pos=data.find("pOverEval", 812000) pos 822672
pythondata[822500:823300] 'RICE-DISCOVERY Monte Carlo engine.\n // Markov + blends are diagnostics only (used to grade conviction, not to move the fair line).\n var pOverMCNoPush = pOverGames;\n var pOverEval = pOverMCNoPush;\n var pOverBlendForDiag = (Number.isFinite(pOverBlendEval) ? pOverBlendEval : pOverMCNoPush);\n _totCtx.pOverMC = pOverMCNoPush;\n _totCtx.pOverBlend = pOverBlendForDiag;\n // Push risk inputs for totals pick policy\n _totCtx.pushProb = totPushPct;\n _totCtx.isWholeLine = (lineTot % 1 === 0);\n _totCtx.pMarkovDecider = pMarkov3Set;\n\n // Engine disagreement diagnostics (MC vs Markov)\n _totCtx.fairLineMC = fairLineMC;\n _totCtx.fairLineMarkov = fairLineMarkov;\n _totCtx.pOverMarkov = (Number.isFinite(pOverMarkov) ? pOverMarkov : NaN);\n _totCtx.gapP = (Number.isFinite(pOverMarkov) ? Math.abs('
pythondata[823300:824200] "pOverMCNoPush - pOverMarkov) : NaN);\n _totCtx.gapLine = (Number.isFinite(fairLineMC) && Number.isFinite(fairLineMarkov)) ? Math.abs(fairLineMC - fairLineMarkov) : NaN;\n _totCtx.marketLineDistance = (Number.isFinite(lineTot) && Number.isFinite(fairLineMC)) ? Math.abs(lineTot - fairLineMC) : NaN;\n\n // 32k calibration: empirical O/U anchor (sanity-check sim output against real market efficiency)\n // If the sim's pOver deviates far from the empirical baseline at common lines, apply a soft pull.\n // Empirical Over%: ATP 20.5→60.5%, 22.5→46.3% | WTA 20.5→48.9%, 22.5→38.5% | CH 20.5→53.7%, 22.5→41.7%\n try {\n var _empTourK = _taperTourKey_(_tStr);\n var _empLineRound = Math.round(lineTot * 2) / 2;\n var _empBaseline = NaN;\n var _empLookup = {\n 'ATP': { 19.5: 0.684, 20.5: 0.605, 21.5: 0.546, 22.5: 0.463, 23.5: 0.402 },\n 'WTA': { 19.5: 0.556, 20.5: 0.489, 21.5: 0.440, 2"
pythonuses=[m.start() for m in re.finditer(r'getTotalsPick\(', data)] len(uses), uses[:10] (9, [46, 731, 568159, 640867, 673362, 674733, 825111, 827087, 827227])
pythondata[824900:825400] '};\n }\n }\n // Expose the diagnostic display probability (blended + lightly anchored) without contaminating decision logic.\n _totCtx.pOverDisplay = pOverBlendForDiag;\n } catch(eEmp) {}\n\n totPick = getTotalsPick(pOverMCNoPush, _totCtx);\n\n // Keep downstream confidence math consistent with the MC (canonical) probabilities\n pOverGames = pOverEval;\n totOverPct = mcOU.pOver;\n totUnderPct = mcOU.pUnder;\n totPushPct = mcOU.pPush;\n}\n// Keep downstream confidence math consistent with t'
pythonlen(re.findall(r'_orpAdj', data)) 11
pythonsnips=find_snippets(r'_orpAdj', n=10, context=180) [(pos, s[:260]) for pos,s in snips[:5]] [(63627, ' if (td) {\n if (Number.isFinite(td.hold)) baseHold = td.hold;\n if (Number.isFinite(td.breakRate)) baseBrk = td.breakRate;\n }\n } catch(e) {}\n \n function _orpAdj(raw, baseline, sensitivity) {\n if (!Number.isFinite(raw)) return ra'), (65050, 'r adjusted = {};\n for (var k in stats) {\n if (stats.hasOwnProperty(k)) adjusted[k] = stats[k];\n }\n \n if (Number.isFinite(adjusted.sgWinRate)) adjusted.sgWinRate = _orpAdj(adjusted.sgWinRate, baseHold, 0.12);\n if (Number.isFinite(adjusted.ho'), (65161, ' \n if (Number.isFinite(adjusted.sgWinRate)) adjusted.sgWinRate = _orpAdj(adjusted.sgWinRate, baseHold, 0.12);\n if (Number.isFinite(adjusted.holdRate)) adjusted.holdRate = _orpAdj(adjusted.holdRate, baseHold, 0.12);\n if (Number.isFinite(adjusted.hol'), (65271, '2);\n if (Number.isFinite(adjusted.holdRate)) adjusted.holdRate = _orpAdj(adjusted.holdRate, baseHold, 0.12);\n if (Number.isFinite(adjusted.hold)) adjusted.hold = _orpAdj(adjusted.hold, baseHold, 0.12);\n if (Number.isFinite(adjusted.spw)) a'), (65365, 'e, baseHold, 0.12);\n if (Number.isFinite(adjusted.hold)) adjusted.hold = _orpAdj(adjusted.hold, baseHold, 0.12);\n if (Number.isFinite(adjusted.spw)) adjusted.spw = _orpAdj(adjusted.spw, baseSPW, 0.09);\n if (Number.isFinite(adjusted.rpWinRate')]
pythonlen(re.findall(r'expectedForSchedule', data)) 5
pythonsnips=find_snippets(r'expectedForSchedule', n=10, context=250) [(pos, s[:300]) for pos,s in snips] [(4777, 'r code)\n *\n * PATCH NOTE (2026-02-27 v17.1 → v17.2c ORP):\n * - _adjustStatsByOppQuality_ REWRITTEN with Opponent-Relative Performance (ORP) model:\n * OLD: simple shrinkage (adjusted = raw×trustBlend + baseline×(1-trustBlend))\n * NEW: expectedForSchedule = baseline + (1-trust)×sensiti'), (61148, 'ats.\n * A player holding 70% against Top 50 stays at ~70%.\n * A player holding 82% against rank 400+ drops to ~73%. Still favored. Wrong.\n *\n * NEW approach (v17.2c ORP): measure performance relative to schedule difficulty\n * Step 1: expectedForSchedule = baseline + (1 - trust) × sen'), (61404, 'edForSchedule = baseline + (1 - trust) × sensitivity\n * Easy schedule (trust < 1) → expected goes UP (even average players score well)\n * Hard schedule (trust > 1) → expected goes DOWN (harder to score)\n * Step 2: surplus = rawStat - expectedForSchedule\n * How much better this '), (63892, 'seline, sensitivity) {\n if (!Number.isFinite(raw)) return raw;\n if (raw > 1 && raw <= 100) raw = raw / 100;\n var schedScale = (trust < 1.0) ? 0.55 : 0.65; // soften soft-schedule deflation; avoid over-boosting hard schedules\n var expectedForSchedule = baseline + (1 - trust) * sen'), (63991, ") raw = raw / 100;\n var schedScale = (trust < 1.0) ? 0.55 : 0.65; // soften soft-schedule deflation; avoid over-boosting hard schedules\n var expectedForSchedule = baseline + (1 - trust) * sensitivity * schedScale;\n var surplus = raw - expectedForSchedule;\n var _scTourK = 'ATP';\n ")]
python'pOverBlend' in func_getTotalsPick, [m.start() for m in re.finditer('pOverBlend', func_getTotalsPick)][:10] (False, [])
pythonsnips=find_snippets(r'function\s+runMatchSimulation_Exact\s*\(', n=1, context=200) snips[0][0], snips[0][1][:400] (680005, "B') {\n // A lost set 1\n hA2 = Math.max(holdFloor, _clamp01_(hA2 - penalty));\n }\n\n return { hA2: hA2, hB2: hB2, meta: { mismatch: m, mult: mult, penalty: penalty, maxPenEff: maxPenEff } };\n}\n\n\nfunction runMatchSimulation_Exact(hA, hB, bestOf, iterations, marketLine, tourLabel, opts) {\n opts = opts || {};\n var _totalsOnly = (opts.totalsOnly === true);\n // Price-discovery mode disables lat")
pythonstart_rm=data.find("function runMatchSimulation_Exact(", 670000) start_rm 680005
pythonfunc_runMatch=extract_function(data,start_rm) func_runMatch[:1200] 'function runMatchSimulation_Exact(hA, hB, bestOf, iterations, marketLine, tourLabel, opts) {\n opts = opts || {};\n var _totalsOnly = (opts.totalsOnly === true);\n // Price-discovery mode disables late-path tail governors from the simulation distribution.\n // This keeps fair-line (50/50) discovery independent from conviction/tail controls.\n var _disableTailGovernors = (opts && (opts.priceDiscovery === true || opts.disableTailGovernors === true || opts.disableSetTaper === true));\n var _disableTanking = (opts && (opts.priceDiscovery === true || opts.disableTailGovernors === true || opts.disableTanking === true));\n var _useSetTaperSim = (USE_CONDITIONAL_SET_TAPER && !_disableTailGovernors);\n var _applySet3Sim = (APPLY_TAPER_TO_SET3 && !_disableTailGovernors);\n\n // Default iterations if caller passes null/NaN/<=0.\n if (!Number.isFinite(iterations) || iterations <= 0) {\n var _msTourK = _taperTourKey_(tourLabel);\n var _msScale = (THRESHOLDS && THRESHOLDS.MC_TOUR_SCALE && THRESHOLDS.MC_TOUR_SCALE[_msTourK]) ? THRESHOLDS.MC_TOUR_SCALE[_msTourK] : 1.0;\n iterations = _totalsOnly\n ? Math.round(((THRESHOLDS && Number.isFinite(THRESHOLDS.TOTALS_MONTE_CARLO_SIMS)) ? THRESHOL'
python# find occurrences of "_applySet3Sim" or "set3" in function for key in ["_applySet3Sim","APPLY_TAPER_TO_SET3","set3","SET3_TAPER_FRACTION","_useSetTaperSim"]: print(key, func_runMatch.find(key))
pythonfunc_runMatch[20500:23000] " : 'A';\n if (_dogSideMP === 'A') dynHA_mp = Math.max(_holdFloor2rMP, _clamp01_(dynHA_mp - _pen2rMP));\n else dynHB_mp = Math.max(_holdFloor2rMP, _clamp01_(dynHB_mp - _pen2rMP));\n }\n }\n\n // Optional: Set 3 taper (Bo3 only) to control the 29+ tail in mismatches.\n // Apply when match reaches 1-1 AND either:\n // - favorite won Set 1 (original behavior), OR\n // - mismatch gap is large (>= 0.30), even if the underdog stole Set 1.\n if (_applySet3Sim && bestOf !== 5 && (setsA === 1 && setsB === 1) && firstSetWinner) {\n var _apply3 = (firstSetWinner === _taperPreFav) || (_taperGap >= 0.30);\n if (_apply3) {\n var _tp3 = _taperParamsForTour_(_taperTour || (_taperIsWta ? 'WTA' : 'ATP'));\n var _lambda3 = _tp3.lambda;\n var _minMult3 = _tp3.minMult;\n var _maxPen3 = _tp3.maxPen;\n var _set3Frac = _tp3.set3Frac;\n var _maxPenBoost3 = Number(_tp3.maxPenBoost);\n if (!Number.isFinite(_maxPenBoost3)) _maxPenBoost3 = 0;\n var _holdFloor3 = Number(_tp3.holdFloor);\n if (!Number.isFinite(_holdFloor3)) _holdFloor3 = 0.40;\n\n var _mult3 = _threeSetTaperMult_(_taperGap, _lambda3, _minMult3);\n var _maxPen3Eff = _maxPen3 * (1 + _maxPenBoost3 * _taperGap);\n var _pen3 = _maxPen3Eff * (1 - _mult3) * SET3_TAPER_FRACTION * _set3Frac;\n // Safety: cap extreme penalties so holds don't go pathological.\n if (_pen3 > 0.30) _pen3 = 0.30;\n\n // shave the pre-match underdog in the decider\n var _dog = (_taperPreFav === 'A') ? 'B' : 'A';\n if (_dog === 'A') dynHA_mp = Math.max(_holdFloor3, _clamp01_(dynHA_mp - _pen3));\n else dynHB_mp = Math.max(_holdFloor3, _clamp01_(dynHB_mp - _pen3));}\n }\n }\n\n // Correct next-set first server:\n // - Non-TB set: next game would be served by the receiver => flip last server.\n // - TB set: next set starts with the player who served last in the set (ITF TB-to-next-set rule).\n server = endedInTB ? setServer : (setServer === 'A' ? 'B' : 'A');\n if (MMC_LITE_ON) { mA *= MMC_DECAY_SET; mB *= MMC_DECAY_SET; }\n }\n if (setsA > setsB) stats.winsA++;\n var scoreKey = sets"
python# locate dynHA_mp positions=[m.start() for m in re.finditer(r'\bdynHA_mp\b', func_runMatch)] positions[:10], len(positions) ([10756, 11115, 15457, 18152, 18397, 18598, 19159, 19248, 20550, 20596], 12)
pythonfunc_runMatch[10450:11850] "eStartingServer ? (((i & 1) === 0) ? 'A' : 'B') : ((_rng() < 0.5) ? 'A' : 'B');\n var setsToWin = (bestOf === 5) ? 3 : 2;\n var fsRecorded = false;\n var firstSetWinner = null;\n var _prevSetLoser = null;\n var loop = 0;\n // v7.2.5: Dynamic hold probabilities that evolve between sets\n var dynHA_mp = hA, dynHB_mp = hB;\n var mA = 0, mB = 0; // MMC-lite momentum accumulators\n \n while (setsA < setsToWin && setsB < setsToWin && loop < 15) {\n loop++;\n var sgA = 0, sgB = 0;\n var setServer = server;\n var endedInTB = false; // track whether set ended via tie-break\n while (true) {\n var p = (setServer === 'A' ? dynHA_mp : dynHB_mp);\n // Cold Start Penalty (Set 1, Games 1-4): penalize slow starters early\n if (setsA === 0 && setsB === 0 && (sgA + sgB) < 4) {\n var _fsPct = (setServer === 'A') ? _sgWinRateA : _sgWinRateB;\n if (_fsPct < 0.50) { p *= 0.98; }\n }\n\n // Decider Restart Penalty (deciding set, first 3 games): previous set loser often comes out flat\n var _isDeciderSet = (setsA === setsB) && (setsA === (setsToWin - 1));\n if (_prevSetLoser && _isDeciderSet && (sgA + sgB) < 3) {\n if (setServer === _prevSetLoser) {\n var _decRestartPen = (_tourK === 'WTA' || _tourK === 'ITF') ? 0.97 : 0.975;\n p *= _decRestartPen;\n }\n }\n \n"
pythonfunc_runMatch[14500:19650] ' _pMin = 0.32;\n }\n p = Math.max(_pMin, Math.min(0.95, p));\n\n var _hold = (_rng() < p);\n if (_hold) (setServer===\'A\' ? sgA++ : sgB++);\n else (setServer===\'A\' ? sgB++ : sgA++);\n\n if (MMC_LITE_ON) {\n // Break swings matter more than routine holds.\n if (setServer === \'A\') {\n mA += _hold ? MMC_HOLD : -MMC_BREAK;\n mB += _hold ? (-MMC_HOLD * 0.5) : MMC_BREAK;\n } else {\n mB += _hold ? MMC_HOLD : -MMC_BREAK;\n mA += _hold ? (-MMC_HOLD * 0.5) : MMC_BREAK;\n }\n // Soft bound to avoid extreme distortion.\n mA = Math.max(-1.5, Math.min(1.5, mA));\n mB = Math.max(-1.5, Math.min(1.5, mB));\n }\n if ((sgA === 6 && sgB <= 4) || (sgB === 6 && sgA <= 4)) break;\n if ((sgA === 7 && sgB === 5) || (sgB === 7 && sgA === 5)) break;\n if (sgA === 6 && sgB === 6) {\n var _tbSpwA = dynHA_mp * 0.85 + 0.10;\n var _tbSpwB = dynHB_mp * 0.85 + 0.10;\n var isWomensTB = (tourLabel === "WTA" || _simIsWtaStyle);\n if (isWomensTB) { _tbSpwA = 0.5 + (_tbSpwA - 0.5) * 0.85; _tbSpwB = 0.5 + (_tbSpwB - 0.5) * 0.85; }\n _tbSpwA = Math.max(0.30, Math.min(0.80, _tbSpwA));\n _tbSpwB = Math.max(0.30, Math.min(0.80, _tbSpwB));\n var _tbPtsA = 0, _tbPtsB = 0, _tbPtCount = 0;\n var _tbServ = setServer;\n while ((_tbPtsA < 7 && _tbPtsB < 7) || Math.abs(_tbPtsA - _tbPtsB) < 2) {\n _tbPtCount++;\n if (_tbPtCount > 50) break;\n var _tbCurSpw = (_tbServ === \'A\') ? _tbSpwA : _tbSpwB;\n if (_rng() < _tbCurSpw) { if (_tbServ === \'A\') _tbPtsA++; else _tbPtsB++; }\n else { if (_tbServ === \'A\') _tbPtsB++; else _tbPtsA++; }\n if (_tbPtCount === 1 || (_tbPtCount > 1 && (_tbPtCount - 1) % 2 === 0)) {\n _tbServ = (_tbServ === \'A\') ? \'B\' : \'A\';\n }\n if ((_tbPtsA >= 7 || _tbPtsB >= 7) && Math.abs(_tbPtsA - _tbPtsB) >= 2) break;\n }\n if (_tbPtsA > _tbPtsB) sgA = 7; else sgB = 7;\n endedInTB = true;\n break;\n }\n setServer = (setServer === \'A\' ? \'B\' : \'A\');\n }\n if (!fsRecorded) {\n if (!_totalsOnly) {\n if (sgA > sgB) stats.winsFS_A++;\n if ((sgA + sgB) > 9.5) stats.fsOvers95++;\n if ((sgA + sgB) > 10.5) stats.fsOvers105++;\n sumFS += (sgA + sgB);\n sumFSA += sgA;\n sumFSB += sgB;\n stats.fsDistA[sgA] = (stats.fsDistA[sgA] || 0) + 1;\n stats.fsDistB[sgB] = (stats.fsDistB[sgB] || 0) + 1;\n var fsTotal = sgA + sgB;\n stats.fsDist[fsTotal] = (stats.fsDist[fsTotal] || 0) + 1;\n stats.fsGamesAList.push(sgA);\n stats.fsGamesBList.push(sgB);\n }\n fsRecorded = true;\n }\n gA += sgA; gB += sgB;\n var setWinner = (sgA > sgB) ? \'A\' : \'B\';\n _prevSetLoser = (setWinner === \'A\') ? \'B\' : \'A\';\n var _isFirstSetFinish = (setsA === 0 && setsB === 0);\n if (_isFirstSetFinish) firstSetWinner = setWinner;\n\n // Between-set momentum (SOFTENED + optional):\n // Only applied when MMC-lite is enabled and we are not in totalsOnly mode.\n // This prevents the totals engine from forcing blowouts that contradict base hold rates.\n if (sgA > sgB) {\n setsA++;\n } else {\n setsB++;\n }\n\n if (MMC_LITE_ON && !_totalsOnly) {\n var momShift = (_simIsWtaStyle ? 0.025 : 0.030);\n if (setWinner === \'A\') {\n dynHA_mp = Math.min(0.95, Math.max(0.15, hA + momShift));\n dynHB_mp = Math.min(0.95, Math.max(0.15, hB - momShift));\n } else {\n dynHB_mp = Math.min(0.95, Math.max(0.15, hB + momShift));\n dynHA_mp = Math.min(0.95, Math.max(0.15, hA - momShift));\n }\n } else {\n // Reset to baseline holds between sets (stable totals + avoids snowballing).\n dynHA_mp = hA;\n dynHB_mp = hB;\n }\n\n\n // CONDITIONAL SET DEPENDENCE (3-SET TAPER) - distribution generator fix.\n // Guard: only apply Set-2 taper when the Set-1 winner is also the pre-match favorite\n // (prevents locking in rare "underdog steals Set 1" scenarios).\n if (_useSetTaperSim) {\n // After Set 1 -> adjust Set 2 inputs.\n if (_isFirstSetFinish && firstSetWinner && (firstSetWinner === _taperPreFav)) {\n var _adj2 = _applyConditionalTaperToSet2_(dynHA_mp, dynHB_mp, firstSetWinner, _taperGap, _taperIsWta, _taperTour);\n dynHA_mp = _adj2.hA2;\n dynHB_mp = _adj2.hB2;\n }\n // REVERSE TAPER: regression-to-mean when underdog wins set 1 in a mismatch.\n // Tour-aware thresholds and regression fractions.\n else if (_isFirstSetFinish && firstSetWinner && (firstSetWinner !== _taperPreFav)) {\n var _revTourKMP = _taperTour || (_taperIsWta ? \'WTA\' : '
pythonfunc_runMatch[19650:21050] "'ATP');\n var _revThreshMP = (_revTourKMP === 'WTA' || _revTourKMP === 'ITF') ? 0.10 : (_revTourKMP === 'CH' ? 0.12 : 0.15);\n var _revFracMP = (_revTourKMP === 'ITF') ? 0.70 : (_revTourKMP === 'WTA' ? 0.65 : (_revTourKMP === 'CH' ? 0.60 : 0.55));\n if (_taperGap >= _revThreshMP) {\n var _tp2rMP = _taperParamsForTour_(_taperTour || (_taperIsWta ? 'WTA' : 'ATP'));\n var _mult2rMP = _threeSetTaperMult_(_taperGap, _tp2rMP.lambda, _tp2rMP.minMult);\n var _maxPenEff2rMP = _tp2rMP.maxPen * (1 + (Number(_tp2rMP.maxPenBoost) || 0) * _taperGap);\n var _pen2rMP = _maxPenEff2rMP * (1 - _mult2rMP) * _revFracMP;\n var _holdFloor2rMP = Number(_tp2rMP.holdFloor) || 0.40;\n var _dogSideMP = (_taperPreFav === 'A') ? 'B' : 'A';\n if (_dogSideMP === 'A') dynHA_mp = Math.max(_holdFloor2rMP, _clamp01_(dynHA_mp - _pen2rMP));\n else dynHB_mp = Math.max(_holdFloor2rMP, _clamp01_(dynHB_mp - _pen2rMP));\n }\n }\n\n // Optional: Set 3 taper (Bo3 only) to control the 29+ tail in mismatches.\n // Apply when match reaches 1-1 AND either:\n // - favorite won Set 1 (original behavior), OR\n // - mismatch gap is large (>= 0.30), even if the underdog stole Set 1.\n "
pythonfor m in re.finditer(r'_taperGap', func_runMatch): print(m.start()) break
pythonfunc_runMatch[7600:9100] "th.max(hA, hB);\n _domRatio = _maxH / _minH;\n }\n\n\n // CONDITIONAL SET DEPENDENCE (3-SET TAPER): precompute mismatch gap + pre-match favorite.\n // Optional: pass opts.winProbA / opts.winProbB (0..1) if you have a pre-match blended win prob.\n var _taperWinProbA = Number(opts.winProbA);\n var _taperWinProbB = Number(opts.winProbB);\n if (!Number.isFinite(_taperWinProbA)) _taperWinProbA = NaN;\n if (!Number.isFinite(_taperWinProbB)) _taperWinProbB = NaN;\n var _taperGap = _computeMismatchGap_(_taperWinProbA, _taperWinProbB, hA, hB, tourLabel || (_simTourInfo && _simTourInfo.tour));\n var _taperPreFav = (Number.isFinite(_taperWinProbA) && Number.isFinite(_taperWinProbB))\n ? ((_taperWinProbA >= _taperWinProbB) ? 'A' : 'B')\n : ((hA >= hB) ? 'A' : 'B');\n var _taperIsWta = !!_simIsWtaStyle;\n var _taperTour = _taperTourKey_(tourLabel || (_simTourInfo && _simTourInfo.tour) || (_taperIsWta ? 'WTA' : 'ATP'));\n\n // PRE-SIM HOLD ALIGNMENT (same logic as matchOutcomeProbs)\n if (Number.isFinite(_taperWinProbA) && Number.isFinite(_taperWinProbB)) {\n var _wpAlignFavIsA_mp = (_taperWinProbA >= _taperWinProbB);\n var _wpAlignFavWp_mp = _wpAlignFavIsA_mp ? _taperWinProbA : _taperWinProbB;\n var _holdGapRaw_mp = hA - hB;\n var _haKernAvg_mp = ((hA || 0.75) + (hB || 0.75)) / 2;\n var _haKernK_mp = 1.0 / Math.max(0.01, _kernelScale_(_haKernAvg_mp, _tourK));\n var _holdImpliedPa_mp = 1 / (1 + Math.exp(-_haKernK_mp * _holdGapRaw_mp));\n var _holdImpliedFavWp_mp = _wpAlign"
python# search for "totalsOnly: true" occurrences len(re.findall(r'totalsOnly\s*:\s*true', data)) 4
pythonsnips=find_snippets(r'totalsOnly\s*:\s*true', n=10, context=200) [(pos, s[:400]) for pos,s in snips] [(636376, ' var _volB_fb = Math.abs(simHB_match - _defHold_fb) / _defHold_fb;\n var simTotals = runMatchSimulation_Exact(simHA_match, simHB_match, bo, THRESHOLDS.TOTALS_MONTE_CARLO_SIMS, lineTot, tourLabel, { totalsOnly: true, mmcLite: false, volA: _volA_fb, volB: _volB_fb, winProbA: displayProbA, winProbB: displayProbB });\n\n var holdDiff = Math.abs(hA_match - hB_match);\n // === 2026 TENNIS PMF EXPEC'), (737163, '\n simHA = _effSIM.hA_eff;\n simHB = _effSIM.hB_eff;\n\n var simTotals = null;\n try {\n simTotals = runMatchSimulation_Exact(simHA, simHB, bestOf, _tlTotalsIters, marketLine, tourLabel, { totalsOnly: true, mmcLite: false, volA: volA, volB: volB, winProbA: _taperSeedA, winProbB: _taperSeedB, sgWinRateA: (statsA && statsA.sgWinRate ? statsA.sgWinRate : 0.5), sgWinRateB: (statsB && statsB'), (737802, 'ength) {\n // Fallback (still totalsOnly) - keeps preview running if the high-N pass errors\n simTotals = runMatchSimulation_Exact(simHA, simHB, bestOf, _tlPropIters, marketLine, tourLabel, { totalsOnly: true, mmcLite: false, volA: volA, volB: volB, winProbA: _taperSeedA, winProbB: _taperSeedB, sgWinRateA: (statsA && statsA.sgWinRate ? statsA.sgWinRate : 0.5), sgWinRateB: (statsB && statsB'), (738658, '\n try {\n var _priceIters = Math.max(1200, Math.round(_tlPropIters * 0.65));\n simTotalsPrice = runMatchSimulation_Exact(simHA, simHB, bestOf, _priceIters, marketLine, tourLabel, {\n totalsOnly: true,\n priceDiscovery: true,\n mmcLite: false,\n volA: volA,\n volB: volB,\n winProbA: _taperSeedA,\n winProbB: _taperSeedB,\n sgWinRateA: (stats')]
pythonlen(re.findall(r'APPLY_TAPER_TO_SET3', data)) 3
pythonsnips=find_snippets(r'APPLY_TAPER_TO_SET3', n=10, context=120) [(pos,s[:200]) for pos,s in snips] [(21692, 'lightly (only if the underdog already forced it)\n// Set 2 is the main lever; Set 3 primarily controls the 29+ tail.\nvar APPLY_TAPER_TO_SET3 = true;\n\n// Global multiplier (keeps the legacy knob name us'), (276334, 'eTailGovernors === true));\n var _moUseSetTaper = (USE_CONDITIONAL_SET_TAPER && !_moIndependent);\n var _moApplySet3 = (APPLY_TAPER_TO_SET3 && !_moIndependent);\n\n _tankMultiplier = 1.0;\n if (_mo'), (680729, 'nking === true));\n var _useSetTaperSim = (USE_CONDITIONAL_SET_TAPER && !_disableTailGovernors);\n var _applySet3Sim = (APPLY_TAPER_TO_SET3 && !_disableTailGovernors);\n\n // Default iterations if call')]
pythondata[276150:277250] ' true || propConfig.priceDiscovery === true || propConfig.disableTailGovernors === true));\n var _moUseSetTaper = (USE_CONDITIONAL_SET_TAPER && !_moIndependent);\n var _moApplySet3 = (APPLY_TAPER_TO_SET3 && !_moIndependent);\n\n _tankMultiplier = 1.0;\n if (_moTierInfo && Number.isFinite(_moTierInfo.motivation)) {\n if (_moTierInfo.motivation >= 0.98) _tankMultiplier = 0.5;\n if (_moTierInfo.motivation <= 0.92) _tankMultiplier = 1.2;\n }\n } catch (_eMoTier) { _tankMultiplier = 1.0; }\n\n var setsToWin = (bo === 5 ? 3 : 2);\n \n var outcomeProbs = {\n A_2_0: 0, A_2_1: 0, B_2_0: 0, B_2_1: 0,\n A_3_0: 0, A_3_1: 0, A_3_2: 0, B_3_0: 0, B_3_1: 0, B_3_2: 0,\n meanGames: 0, medianGames: 0, pDecider: 0\n };\n var gamesPairDist = {};\n var allTotalGames = [];\n \n var trackProps = propConfig && (\n Number.isFinite(propConfig.aceRateA) || \n Number.isFinite(propConfig.dfRateA) ||\n Number.isFinite(propConfig.avgBPsPerGameA)\n );\n \n var allAcesA = [], allAcesB = [], allAcesTotal = [];\n var allDfsA = [], allDfsB = [], allDfsTotal = [];\n var allBpsA = [], allBpsB = [],'
python# find nearest "function matchOutcomeProbs" before 276150 pos=data.rfind("function matchOutcomeProbs", 0, 276150) pos 275233
pythondata[pos:pos+300] 'function matchOutcomeProbs(hA, hB, startServer, bo, propConfig){\n // Cache tour once per call (avoid sheet reads inside MC loop)\n var _tourMO = tourCode();\n var _tdMO = _tourDefaults(_tourMO, surfaceAlias());\n if (!Number.isFinite(hA)) hA = _tdMO.hold * 0.95 + 0.50 * 0.05;\n if (!Number.isFinite'
pythonlen(re.findall(r'\.gapP\s*=', data)) 1
pythonimport re, os, pathlib, textwrap orig=data # 1) Set APPLY_TAPER_TO_SET3 = false pattern = r"var\s+APPLY_TAPER_TO_SET3\s*=\s*true\s*;" m=re.search(pattern, data) m.group(0) if m else None 'var APPLY_TAPER_TO_SET3 = true;'
pythondata2=data data2=re.sub(pattern, "var APPLY_TAPER_TO_SET3 = false; // Decider evidence: do NOT suppress Set 3 length once a decider exists.", data2, count=1) # 2) Disable pre-sim hold alignment when totalsOnly or priceDiscovery # Find the if statement inside runMatchSimulation_Exact: pattern2 = r"// PRE-SIM HOLD ALIGNMENT $same logic as matchOutcomeProbs$\n if $Number\.isFinite\(_taperWinProbA$ && Number\.isFinite$_taperWinProbB$\) \{" m2=re.search(pattern2, data2) bool(m2), (m2.start() if m2 else None) (True, 688606)
pythonreplacement2 = ("// PRE-SIM HOLD ALIGNMENT (winner-sim only).\n" " // IMPORTANT: Totals price-discovery must be driven by holds, not by winner-prob seeds.\n" " // So we SKIP this alignment in totalsOnly/priceDiscovery modes.\n" " if (!_totalsOnly && !(opts && opts.priceDiscovery === true) && Number.isFinite(_taperWinProbA) && Number.isFinite(_taperWinProbB)) {") data2=re.sub(pattern2, replacement2, data2, count=1) # 3) Update _markovEffectiveHolds_ docstring comment (optional but requested for architecture clarity) # Replace the opening comment block lines for that function. pattern3 = r"/\*\*\n \* Markov totals must use the SAME mismatch-compressed regime as the Monte Carlo sim\.[\s\S]*?\* Output:\n \* - \{ hA_eff, hB_eff \}: effective holds to feed matchOutcomeProbs / matchTotalDistribution\n \*/" m3=re.search(pattern3, data2) bool(m3), (m3.start() if m3 else None) (True, 25516)
pythonreplacement3 = textwrap.dedent("""\ /** * Markov totals is an ANALYTIC CROSS-CHECK and must remain INDEPENDENT of Monte Carlo tail governors. * It uses baseline (pre-taper / pre-tanking) hold probabilities directly (no mismatch compression). * * Inputs: * - hA/hB: baseline match hold probabilities * - pWinA: optional win-prob seed (0..1 or 0..100) used ONLY to compute a mismatch diagnostic index * - tourLabel: tour label string ('ATP','WTA','CH','ITF', etc.) * * Output: * - { hA_eff, hB_eff, mismatch, favWp, holdDrop }: effective holds (equal to baseline) + diagnostics */ """) data2=re.sub(pattern3, replacement3, data2, count=1) len(orig), len(data2), (len(orig)==len(data2)) (900478, 900591, False)
python"var APPLY_TAPER_TO_SET3 = true;" in data2, "var APPLY_TAPER_TO_SET3 = false" in data2 (False, True)
pythonidx=data2.find("// PRE-SIM HOLD ALIGNMENT", 680000) data2[idx:idx+500] '// PRE-SIM HOLD ALIGNMENT (winner-sim only).\n // IMPORTANT: Totals price-discovery must be driven by holds, not by winner-prob seeds.\n // So we SKIP this alignment in totalsOnly/priceDiscovery modes.\n if (!_totalsOnly && !(opts && opts.priceDiscovery === true) && Number.isFinite(_taperWinProbA) && Number.isFinite(_taperWinProbB)) {\n var _wpAlignFavIsA_mp = (_taperWinProbA >= _taperWinProbB);\n var _wpAlignFavWp_mp = _wpAlignFavIsA_mp ? _taperWinProbA : _taperWinProbB;\n var _holdGapRaw'
pythonstart_idx=data2.find("function _markovEffectiveHolds_") data2[start_idx-600:start_idx+200] "Floor: TAPER_MIN_HOLD_FLOOR_ATP\n };\n}\n\n\n/**\n * Markov totals is an ANALYTIC CROSS-CHECK and must remain INDEPENDENT of Monte Carlo tail governors.\n * It uses baseline (pre-taper / pre-tanking) hold probabilities directly (no mismatch compression).\n *\n * Inputs:\n * - hA/hB: baseline match hold probabilities\n * - pWinA: optional win-prob seed (0..1 or 0..100) used ONLY to compute a mismatch diagnostic index\n * - tourLabel: tour label string ('ATP','WTA','CH','ITF', etc.)\n *\n * Output:\n * - { hA_eff, hB_eff, mismatch, favWp, holdDrop }: effective holds (equal to baseline) + diagnostics\n */\n\nfunction _markovEffectiveHolds_(hA, hB, pWinA, tourLabel) {\n // INDEPENDENT MARKOV HOLDS (v17.4.6 FIX — 2026-03-01)\n // Markov is an analytic cross-check and MUST remain independent of Monte Carlo t"
pythonpatched_path="/mnt/data/Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED_PATCHED.txt" open(patched_path,'w',encoding='utf-8').write(data2) patched_path, os.path.getsize(patched_path) ('/mnt/data/Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED_PATCHED.txt', 900909)
pythonassigns=[m.start() for m in re.finditer(r'fairLineMC\s*=', data2)] len(assigns), assigns[:10] (2, [812922, 823211])
Updated script is ready.
APPLY_TAPER_TO_SET3 = true). (Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED.txt)APPLY_TAPER_TO_SET3 = false so once a match reaches a decider, Set 3 runs on baseline holds (no mismatch crushing).runMatchSimulation_Exact, you had PRE-SIM HOLD ALIGNMENT that shifts holds whenever opts.winProbA/winProbB are provided. (Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED.txt)totalsOnly and priceDiscovery modes (totals distribution stays driven by holds, not winner-prob seeds)._markovEffectiveHolds_ code is already independent, but the header comment still described “same mismatch-compressed regime”. (Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED.txt)fairLineFromSortedTotals() (per your instruction) and I preserved the “MC is canonical / Markov is cross-check” totals decision framing already present in getTotalsPick(). (Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED.txt)getTotalsPick(). (Tennislocks_V17.4_Cluster_Governor_v17.4.6_UPDATED.txt)_totalsOnly, opts) in runMatchSimulation_Exact.