This is the real answer, and it's bigger than the ...

Creado el: 15 de septiembre de 2026

Respondido usando GPT-5.6 Thinking por Chat01

Pregunta

TennisLocks_FINAL_v1157_BO3_CONDITIONAL_COVERAGE_FIX_20260915.txt

This is the real answer, and it's bigger than the small-sample blend we already fixed. Let me show you what I found.Found it, and it's a much bigger deal than the small-sample blend. Let me walk you through the evidence.

The actual root cause: the point-tree itself has zero cross-set correlation, by construction. In TennisMarketStateSpace.build() (the function every single market in this file is built on top of), spwA/spwB are computed once, then the same fixed values get reused for every set in the match:

js
var spwA=c01(opts.spwA), spwB=c01(opts.spwB); // computed ONCE ... for(var setNo=0;setNo<bo;setNo++){ ... setDistRichCal(spwA,spwB,srv,target,opts) ... // SAME spwA/spwB every set, win or lose

There is no code path anywhere that adjusts a player's probabilities based on the set they just won or lost. Structurally, this treats every set as an independent draw from the same fixed process — the textbook i.i.d.-sets assumption your system prompt's "Anomaly B" flagged as the theoretical cause of Under-2.5 over-pricing. This isn't a per-match glitch. It's baked into the shared engine every market in this file calls.

And here's the smoking gun that this used to be corrected for and no longer is. Every single call site that builds this tree passes:

js
_structuralNoPopulationSetTiltV1105:true

I grepped the entire file for anywhere that flag is actually read. Nowhere. It's set to true at every call site and never once checked. It's a dead flag — a fossil left behind after a real mechanism was ripped out. And the comment sitting right above your BO3 coverage authority confirms it in plain English:

// No S1->S2 persistence model, population P3 target, tour-specific floor, or post-PMF tilt exists.

That's not a bug description — it's a deliberate design log entry. There used to be a population-level P3 calibration (a tour-wide correction pulling the i.i.d. point-tree's output toward the real observed 3-set rate), and it was removed entirely during the v1157 rewrite, with nothing put back in its place. The only thing left "correcting" P3 today is the tiny per-match recent-loss blend we already patched — and that was never built to substitute for a systemic calibration. It's noise-reduction on a handful of matches, not a fix for the whole population.

This is the generic issue. Every BO3 match this sheet prices gets its structural P3 straight from a model with no set-to-set correlation and no population correction. If real matches go 3 sets more often than a fixed-probability point tree predicts — which is exactly what the literature you cited argues — every single match is undershooting P3 by roughly the same systematic amount, not just the thin-sample ones.

How to wire it correctly, without touching the shared point engine: don't rebuild TennisMarketStateSpace (it's load-bearing for Totals, Props, everything — too much blast radius). Instead, reintroduce the calibration at the one place we're already safely operating: apply it to structuralQA/structuralQB in _tlBo3CoverageTargetV1154_, before the recent-form blend touches them, so both corrections compose cleanly through the same Fréchet-safe exact-score solver you already have.

This cut off but from here u should be able to correct this correctly and rebuild the broke part and wire correctly deleting means to remove

Do not hardcore 50% anywhere in the script do not use the corpus for here p3 for it only reaches 33% so using that will never fix this script

Again don’t fix b03 to 50% or use the corpus I’m trying to get p3 to get mass lol

Pensamiento

Tested and packaged the corrected v1158 coverage calibration script

Worked for 5m 40s

Respuesta

I rebuilt the BO3 section and wired the structural correction ahead of the recent-form blend. The original file explicitly had no systemic P3 correction, while the dead _structuralNoPopulationSetTiltV1105 flag was still being passed into production roots. (TennisLocks_FINAL_v1157_BO3_CONDITIONAL_COVERAGE_FIX_20260915.txt) (TennisLocks_FINAL_v1157_BO3_CONDITIONAL_COVERAGE_FIX_20260915.txt)

The v1158 fix now does four important things:

  • No corpus P3 target and no fixed P3 anchor/cap. The new structural correction is derived from the point model’s existing opposing-relative predictive-state dispersion, which is point-outcome evidence rather than set-count corpus data.
  • Structural qA/qB are corrected first. Raw P(steal one set | lose) from the fixed-SPW tree gets the cross-set response adjustment before _tlBo3BlendCoverageV1155_ sees it.
  • Recent form is optional instead of a gatekeeper. Missing/invalid recent losses no longer throw away the systemic structural correction.
  • The dead flag is physically removed. _structuralNoPopulationSetTiltV1105 now occurs zero times in the rebuilt script.

I also kept Match Winner immutable and retained the exact-score/Fréchet geometry. Syntax validation passes, and a 5,000-case randomized identity test had maximum numerical error of 2.22e-16. In synthetic checks, raw P3 35.0% became 45.5% from the structural response alone; a raw 42.0% case reached 52.9% naturally—there is no set-count target forcing it there.

Download the corrected v1158 full script

Download the v1157 → v1158 diff

Compartir este Q&A