Yes. I double-checked **Sets Won end-to-end**, and...
बनाया गया: 15 सितंबर 2026
का उपयोग करके उत्तर दिया गया GPT-5.6 Thinking द्वारा Chat01
बनाया गया: 15 सितंबर 2026
का उपयोग करके उत्तर दिया गया GPT-5.6 Thinking द्वारा Chat01
Yes. I double-checked Sets Won end-to-end, and the probability wiring is correct now.
v1167 is already feeding Sets Won from the same final exact-score PMF as Sets Played and Total Games. There is no second recent-form/q adjustment inside Sets Won, so no duplication. I ran 10,000 randomized BO3 PMFs across the key identities with 0 failures and max numerical error 3.33e-16.
I did find one separate publication bug: in your output,
2+ sets = 67.2%67.2%Those are literally the same event in BO3. Yet Sets Won was printing LEAN 2+ SETS while Match Winner correctly said NO BET. The Sets Won display helper was recomputing its own confidence and bypassing the Winner publication block.
I fixed only that in v1168. No probability model changed.
For this preview, v1168 should show approximately:
PASS | 2+ SETS 67.2% | MATCH WINNER EQUIVALENT | winner betting status not officialLEAN 1+ SET | 61.9% | MEDIUMElina's 61.9% remains independent because 1+ set is not Match Winner—it includes her 2-0, 2-1, and 1-2 paths.
The identities now enforced/verified are:
A 1+ = 1 − P(0-2)B 1+ = 1 − P(2-0)A 2+ = P(A wins)B 2+ = P(B wins)P3 = P(A 1+) + P(B 1+) − 1The v1167 BO3 activation fix, q blend, P2/P3 calculation, Match Winner, Total Games, and BO5 logic are unchanged.
Download Sets Won validation report
I double-checked the actual publisher. The key is that there is no entered Sets Won line here. When the line is absent, the script invents a display threshold from expected sets; for Elina that becomes 0.5, so LEAN 1+ SET 61.9% is an automatically generated marginal event, not the same statement as “the forecast loser steals a set if Julia wins.”
Worked for 35s
Yes — I checked it carefully, and the probabilities are coherent, but the wording can absolutely look contradictory.
From your final PMF:
So:
UNDER 2.5
= Julia 2-0 + Elina 2-0
= 38.1% + 13.3%
= 51.4%
But Elina 1+ set is:
= Julia 2-1 + Elina 2-0 + Elina 2-1
= 29.1% + 13.3% + 19.6%
≈ 61.9%
So both can be above 50% because they're overlapping events. In particular, Elina winning 2-0 simultaneously satisfies:
The important distinction is this:
“Elina wins 1+ set” = 61.9% marginally.
But “Elina steals a set if forecast winner Julia wins” = 43.3%.
That second number is the one matching what you were thinking about when you said, “How can you lean the loser a set if we're UNDER?”
And I checked why it's printing LEAN 1+ SET: because there is no actual Sets Won prop line entered. The display function automatically chooses a threshold from expected Sets Won. For Elina it chooses Over 0.5 sets, then sees 61.9% and manufactures the LEAN 1+ SET display.
So my double-check conclusion is:
No probability bug. No duplicate calculation. No contradiction in the PMF.
But yes, the automatic wording is potentially misleading because LEAN 1+ SET sounds like “forecast loser takes one in the Julia-win scenario,” while mathematically it includes all Elina match-win outcomes too.
Your actual internally consistent directional picture is:
So I would not change anything from this check alone. The model math is behaving correctly; what you're noticing is the distinction between unconditional player set coverage and conditional loser-set-steal probability.
Maybe the math is wrong then
But Elina 1+ set is:
= Julia 2-1 + Elina 2-0 + Elina 2-1
= 29.1% + 13.3% + 19.6%
≈ 61.9%
So both can be above 50% because they're overlapping events. In particular, Elina winning 2-0 simultaneously satisfies:
UNDER 2.5 sets
Elina wins 1+ set
The important distinction is this:
“Elina wins 1+ set” = 61.9% marginally.
But “Elina steals a set if forecast winner Julia wins” = 43.3%.
That second number is the one matching what you were thinking about when you said, “How can you lean the loser a set if we're UNDER?”
And I checked why it's printing LEAN 1+ SET: because there is no actual Sets Won prop line entered. The display function automatically chooses a threshold from expected Sets Won. For Elina it chooses Over 0.5 sets, then sees 61.9% and manufactures the LEAN 1+ SET display.
So my double-check conclusion is:
No probability bug. No duplicate calculation. No contradiction in the PMF.
But yes, the automatic wording is potentially misleading because LEAN 1+ SET sounds like “forecast loser takes one in the Julia-win scenario,” while mathematically it includes all Elina match-win outcomes too.
Your actual internally consistent directional picture is:
UNDER 2.5: 51.4%
Julia wins: 67.2%
If Julia wins, Elina takes a set: 43.3%
Elina 1+ set unconditionally: 61.9%
We are trying to pick the correct picks not pick losing picks how can a lose be 61* ? Why doesn’t it say under 0.5?
In tennis it’s not logic to have a loser saying lean 1 set when the same match is predicting them to loser 2:0 it’s just not logical
════════════════════════════════════════
🎾 TENNISLOCKS 🔒
OFFICIAL MATCH MODEL
VERSION 3.0
GENERATED 3:03 AM | September 15, 2026
ENGINE Point • Game • Set Probability Model
════════════════════════════════════════
🎯 WTA 250 (OUTDOOR) | Best of 3 | Line: 21.5
Tour: WTA | Court speed (CPI): 38
Metadata confidence: HIGH
────────────────────────────────────────
Julia Riera vs Elina Avanesyan
────────────────────────────────────────
────────────────────────────────────────
💰 MODEL PICKS:
📈 STRONG LEANS:
🟡 LOW CONFIDENCE:
🚫 NO BETS:
Match type: Both break more, one side clearly better. Shorter games. (RETURN_RETURN_UNEVEN)
Risk: 0.15 (LOW)
Pricing data quality: WEAK | opponent-rank samples 4/7 | trust 1.00
PLAYER INTEL
┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄
Julia Riera Elina Avanesyan
Rank 144 155
Elo 1619 1684
Avg Opp Rank 152 92
Schedule A: MID (trust 1.00, ranks 7) | B: SOLID (trust 1.00, ranks 7)
Serve Style ace 5.4% ace 2.7%
Momentum RECENT_RESULTS RECENT_RESULTS
Hold % 60.8% 52.6%
Recent-row SPW (raw) 56.4% 49.7%
Dominance Ratio 1.04 0.78
Recent Hold SD - 14.7%
Break Rate 47.4% 39.2%
1st Srv Win % 66.7% 55.2%
2nd Srv Win % 46.3% 45.1%
1st Srv In % 49.5% 62.9%
[WINNER STABILITY] official side A | profile central B | endpoint crosses 50 NO | window crosses 50 NO | surface Elo unavailable | official block NO
Signals: forecast side retained, but betting status is below OFFICIAL BET
════════════════════════════════════════
🎲 SETS OUTLOOK
[SET RESEARCH REF] CANONICAL_POINT_ROOT | WTA/HARD/MAIN/CANONICAL_POINT_STATE_SET_COUNTS_V1144 | read-only, no live blend
[SET INPUTS] SPW A/B 54.4% / 51.1% | Hold A/B 60.8% / 52.6% | route UNIFIED_CURRENT_POINT_ROOT_V1113
[SET TB CAL] not applied | tree P(7-6) 12.2% | raw 12.2% | hist not measured | n null | CANONICAL_POINT_ROOT_NO_HISTORICAL_SET_TB_MUTATOR_V1144 | set-winner margin preserved by construction
[SET AUTHORITY] ACTIVE | BO3_POINT_STATE_RESPONSE_PLUS_TWO_SIDED_CONDITIONAL_COVERAGE_V1163 | BO3 length priced from player 1+ set coverage and reconciled to Match Winner
[BO3 COVERAGE MODEL] winner anchored | raw structural q -> point-state cross-set response -> optional two-sided conditional exact-score shrinkage | P3 = P(B wins)*qA + P(A wins)*qB | no raw-coverage blend | no corpus/population P3 target | no fixed P3 cap
[BO3 COVERAGE EFFECT] canonical P3 47.3% | response prior P3 58.7% | final P3 48.6% | response +11.4pp | recent -10.0pp
[BO3 PLAYER COVERAGE] A wins 1+ set 86.7% | B wins 1+ set 61.9% | identity 48.6%
[BO3 CONDITIONAL q] A raw/response/recent-paired/final 55.2% / 66.2% / 42.9% / 59.5% || B raw/response/recent-paired/final 43.4% / 55.0% / 14.3% / 43.3%
[BO3 ACTIVE POINT EXPOSURE] UNIFIED_CURRENT_POINT_ROOT_EXPOSURE_V1167 | structural W A/B 17.43 / 17.43 | form share A/B 28.7% / 28.7% | applied YES
[BO3 CONDITIONAL EVIDENCE] qA A-loss/B-win N 7.0 | qB B-loss/A-win N 7.0 | mirrored H2H dedup 0
[SET LENGTH ROOT] final Sets Won / Both Win a Set / Over 2.5 identity P3 48.6% | one exact-score PMF
[SET WINNER ALIGN] final winner error 0.0e+0 | final set-count margin error 0.0e+0
[SET EXACT PMF] 2-0 38.1% | 2-1 29.1% | 0-2 13.3% | 1-2 19.6% | final P3 48.6%
[SET ACTION] LOW FORECAST UNDER 2.5 | probability 51.4% | model fair odds -106 | forecast only
[SET BETTING GATE] final exact-score PMF direction always visible | HIGH >= 60.0% = official PICK | MID 55.0%-<60.0% = LEAN | LOW >50.0%-<55.0% = forecast only | no BO3 data-quality confidence cap
[SET FAIR PRICE] Over 2.5 +106 | Under 2.5 -106
[SET TREE DIAGNOSTIC] canonical P(2) 52.7% | canonical P(3) 47.3% | canonical point/game/set tree
📊 Player Stats (Current Live-Source Audit):
Totals Fair Line (canonical structural threshold ref): 23.5 (CDF 50/50) | Full-dist median ref: 23.0
Full-dist range (pricing ref): P10=17 | P50=23 | P90=32
Totals EV (tree mean): 23.9 | Median: 23.0
Projected match duration: ~117 min | 2 sets ~90 min / 3 sets ~145 min | research projection only
Settlement full-dist mode: 18g | settlement density zone: 17-19g 20.4%
All-match median ref: 23.0g | Conditional totals (not picks): E[T|2 sets] 19.2 | E[T|3 sets] 29.0 | alternative 3-set probability 49%
Settlement PMF top exacts: 18g 7.1% | 19g 7.0% | 17g 6.3% | 20g 6.3% | 22g 6.1% | 29g 5.5% | 28g 5.5% | 30g 5.2% [canonical full-match mixture]
========================================
🎯 TOTAL GAMES
[TOTAL GAMES FORECAST] STRONG LEAN OVER 21.5 | 59.6% | MEDIUM confidence | forecast only
Pricing method: all legal full-match score paths are summed against your Total Games line. No single exact score controls the pick.
Decision reason: OVER 59.6% clears the full-pick probability threshold, but reliability/data-quality controls cap action at a MEDIUM strong lean.
At 21.5: Over 59.6% | Under 40.4%
Total Games probability authority: ONE canonical joint score+games PMF | no second threshold recalibration is applied after the current length root.
Set-count decomposition at 21.5:
2-set lane: 51.4% match mass | P(Over | 2 sets) 21.9% | contributes 11.3pp raw Over mass
3-set lane: 48.6% match mass | P(Over | 3 sets) 99.4% | contributes 48.4pp raw Over mass
Combined no-push P(Over 21.5) = 59.6% from all lanes.
First-server sensitivity (diagnostic only): A serves first -> Over 59.5% | B serves first -> Over 59.7% | mean-total gap 0.02g
Projected total-games distribution: fair line 23.5 | mean 23.9 | median 23 | largest single exact bucket 18g (7.1%, not a majority and not the O/U authority)
Exact-total concentration: dominant 3-game cluster 17-19g = 20.4%.
Unconditional pricing distribution: 80% range 16-30 | SD 5.8 | mode 18g (7.1%) | leaders 18g 7.1% | 19g 7.0% | 17g 6.3% | 20g 6.3% | 22g 6.1%
########################################
🎯 PROP PROJECTIONS 🎯
########################################
📊 Julia Riera - Player Props:
Games Won: mean 13.0 | median 13 | mode 12 | full-match distribution
1st Set Games Won: 5.23 projected
Sets Won: PASS | 2+ SETS 67.2% | MATCH WINNER EQUIVALENT | winner betting status not official
Serve Games: not requested | enter a service prop line to price
Serve Points Played: not requested | enter a service prop line to price
Serve Points Won: not requested | enter a Serve Points Won line to price
Aces: not requested | enter a Aces line to price
Double Faults: not requested | enter a Double Faults line to price
Breaks Won: not requested | enter a Breaks Won line to price
Break Points Created: not requested | enter a Break Points line to price
BP Conversion: not requested | enter a Break Points line to price
Opp BP Save: not requested | enter a Break Points line to price
Opponent Matchup: opp return 39% | context only; official pricing uses the final match tree
Historical sample: 8.0 service games | projected Games Won CV: 24%
📊 Elina Avanesyan - Player Props:
Games Won: mean 11.0 | median 12 | mode 12 | full-match distribution
1st Set Games Won: 4.40 projected
Sets Won: LEAN 1+ SET | 61.9% | MEDIUM
Serve Games: not requested | enter a service prop line to price
Serve Points Played: not requested | enter a service prop line to price
Serve Points Won: not requested | enter a Serve Points Won line to price
Aces: not requested | enter a Aces line to price
Double Faults: not requested | enter a Double Faults line to price
Breaks Won: not requested | enter a Breaks Won line to price
Break Points Created: not requested | enter a Break Points line to price
BP Conversion: not requested | enter a Break Points line to price
Opp BP Save: not requested | enter a Break Points line to price
Opponent Matchup: opp return 45% | context only; official pricing uses the final match tree
Historical sample: 11.2 service games | projected Games Won CV: 38%
🎲 Match-Level Context:
Sets Played: LOW FORECAST UNDER 2.5 | P(2 sets) 51.4% / P(3 sets) 48.6% | expected 2.49 sets
3-set match / both players win a set: YES 48.6% | NO 51.4% | no betting action
Exact match-score paths: Julia Riera 2-0 38.1% | Julia Riera 2-1 29.1% | Elina Avanesyan 2-0 13.3% | Elina Avanesyan 2-1 19.6%
If forecast winner Julia Riera wins: straight sets 56.7% | Elina Avanesyan steals one set 43.3% conditional (29.1% of all match paths)
Individual win 1+ set: Julia Riera 86.7% | Elina Avanesyan 61.9% | marginal coverage only; NOT the BO3 3-set probability; includes paths where that player wins the match
Straight-set loss chance: Julia Riera 13.3% | Elina Avanesyan 38.1%
Games/aces/breaks use the full match tree, not a single 2-0 or 2-1 scoreline.
Surface: HARD | Tour ace reference 4.4% | double-fault reference 5.1%
textsupposedly fixed it for Elina 61% observed probability but I’m still seeing it
Yes — I found the problem. The 61.9% itself is not bad math, but it is being shown in the wrong mode for the situation you described.
For your PMF:
So an actual sportsbook Elina Over 0.5 Sets Won really is:
And an actual Elina Under 0.5 bet is only Julia 2-0:
So if there were a genuine Elina Sets Won 0.5 market entered, OVER 0.5 at 61.9% would mathematically be the correct side. You cannot price a real U/O 0.5 market conditional on Julia winning, because the bet also settles when Elina wins the match.
But that is not what should be happening when no Sets Won line is entered.
LEAN 1+ SET 61.9%v1172 contains the correct new no-line logic. Its own header explicitly says that with no BO3 Sets Won line, the forecast loser's 0.5-set projection should be conditioned on the forecast-winner row. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)
And the implemented calculation is:
which gives:
Therefore:
The code literally computes stealMass / winnerMass versus straightMass / winnerMass, then chooses 1+ SET or UNDER 0.5 SETS. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)
So the correct no-line display for this match is:
Elina Sets Won: LEAN UNDER 0.5 SETS | 56.7% | MEDIUM | FORECAST WINNER CONDITIONAL
Not 61.9%.
The Player Props publisher does this:
_setsHasLineB is true → use the unconditional market settlement_setsWonProjectionText_('B'), the new conditional v1172 thesis. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)Your exact output:
LEAN 1+ SET | 61.9% | MEDIUM
comes from the unconditional helper. That means at runtime _setsHasLineB is evaluating true. The script therefore believes an Elina Sets Won line exists. _setsHasLineB is set directly from the parsed setsWonB input. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)
And I found the vulnerable part: the market-input reader scans the Match Inputs rows, and any row whose label contains “SETS WON” can be classified as setsWonA/B; any positive numeric value in that row's line cell can become the market line. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt) (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)
It even scans the entire supplied Match Inputs range dynamically rather than using a dedicated Sets Won input location. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)
So v1172 fixed the publisher, but it did not fully fix the input classification. A phantom/derived 0.5 is apparently still making _setsHasLineB=true, which sends Elina straight back into the old unconditional 61.9% route.
Your instinct about the display/thesis is correct.
For this match:
Actual unconditional market probabilities
But with no Sets Won market entered, the coherent match-thesis projection should be
So don't change the PMF to force Elina below 50%. That would corrupt the actual probability model. The remaining fix is to stop the parser from falsely deciding a Sets Won 0.5 line was entered.
And importantly, the v1172 file you uploaded really does contain the intended conditional fix; this isn't me inferring it from the comments—the actual publisher implements it. (TennisLocks_FINAL_v1172_SETS_WON_THESIS_CONDITIONAL_20260915.txt)