You’re right. The previous version was still too h...
Créé le : 16 juillet 2026
Répondu en utilisant GPT-5.6 Thinking par Chat01
Créé le : 16 juillet 2026
Répondu en utilisant GPT-5.6 Thinking par Chat01
You’re right. The previous version was still too high level. If you’re giving this to an engineering AI, it needs diagnosis + likely root causes + explicit audit tasks + validation criteria. It also needs to avoid biasing the engine toward more Overs or more Unders. Here’s a stronger version.
⸻
TENNISLOCKS ENGINE-WIDE CONSISTENCY, CALIBRATION & PREDICTIVE ACCURACY AUDIT
The renderer cleanup resolved many presentation issues, but several deeper architectural issues may still exist within the prediction engine. These are not observations about any one match. They are generic classes of problems that could occur across ATP, WTA, Challenger, and ITF matches.
The objective is not to make predictions more conservative, produce more Overs, produce more Unders, or suppress outputs. The objective is to ensure every market originates from one mathematically consistent simulation, remains historically calibrated, and accurately represents the finalized canonical probability distribution.
Every recommendation should be explainable as the natural consequence of the finalized simulation rather than the product of independent estimators, legacy calculations, heuristics, or renderer-side reconstruction.
⸻
ISSUE 1 - Complete Total Games Engine Audit (Highest Priority)
The Total Games engine should be treated as one of the most critical components because every simulated match necessarily produces one exact total-games outcome. Any inconsistency here propagates into multiple downstream markets.
Potential Structural Problems
Audit whether the Total Games recommendation is influenced by anything other than the finalized canonical exact-score distribution.
Investigate whether the market is being affected by:
The recommendation should be generated by summing finalized probability mass above and below the betting line. No secondary decision logic should override the canonical distribution.
⸻
Audit the Entire Distribution
Do not audit only the final Over/Under recommendation.
Audit the entire distribution.
Review:
Determine whether the shape of the distribution matches historical professional tennis.
⸻
Investigate Probability Allocation
Perform a probability-mass audit.
Verify that:
⸻
Structural Tennis Audit
Determine whether the simulation systematically favors certain match structures.
Investigate whether the engine generates:
Do not assume the bias exists in one direction.
Measure the bias from historical results.
⸻
Historical Calibration
Backtest the Total Games engine separately.
Measure:
If systematic bias exists, determine whether it originates from the simulation itself, calibration, reconciliation, or pricing.
Correct the root cause rather than adjusting outputs.
⸻
ISSUE 2 - Player Games Engine Audit
Player Games should not function as an independent forecasting system.
Games Won must emerge directly from the finalized exact-score distribution.
Audit whether Games Won is still being estimated independently instead of being calculated from canonical simulation outcomes.
Investigate whether the engine systematically:
Verify that:
Winner Games + Loser Games = Total Games
for every simulated branch before aggregation.
Player Games should be a derived market, not an independently predicted market.
⸻
ISSUE 3 - Sets Won Engine Audit
The disappearance of the Sets Won projection suggests the display changed, but the market itself should still exist because every simulated match produces a deterministic number of sets won.
Do not suppress the market.
Audit it.
Verify that Sets Won:
Backtest:
If calibration issues exist, improve the underlying simulation rather than removing the display.
⸻
ISSUE 4 - Canonical Probability Object Audit
Every finalized market should read from the same canonical probability object.
Audit whether duplicate probability objects still exist.
Examples include:
The public engine should expose exactly one finalized probability for each market.
Any duplicate finalized values indicate multiple competing probability sources.
⸻
ISSUE 5 - Renderer Audit
The renderer must never generate predictions.
Its responsibility is presentation only.
Audit whether the renderer:
Every displayed recommendation should reference finalized canonical market objects only.
⸻
ISSUE 6 - Cross-Market Consistency Audit
Every market describes the same simulated match.
Therefore the following relationships should remain mathematically consistent:
Winner ↔ Match Length
Winner ↔ Exact Score
Winner ↔ Player Games
Winner ↔ Total Games
Winner ↔ Sets Won
Match Length ↔ Exact Score
Match Length ↔ Total Games
Match Length ↔ Tiebreaks
Exact Score ↔ Player Games
Exact Score ↔ Total Games
Exact Score ↔ Sets Won
Player Games ↔ Total Games
Player Games ↔ Sets Won
First Set ↔ Match Length
First Set ↔ Exact Score
Tiebreaks ↔ Total Games
Props ↔ Canonical Simulation
Audit these relationships across a large historical sample rather than isolated matches.
Recurring contradictions indicate structural issues in the simulation or reconciliation pipeline.
⸻
ISSUE 7 - Full Engine Validation
After completing all audits and improvements:
The final engine should be internally coherent, mathematically reconciled, historically calibrated, and driven entirely by one canonical simulation from which every public market is derived.
════════════════════════════════════════
🎾 TENNISLOCKS 🎾
════════════════════════════════════════
🎯 WTA 250 Iasi | Clay, Outdoor | Best of 3 | Total line 20.5
Court speed index: 28 | Tour: WTA
────────────────────────────────────────
Tereza Valentova vs Aliaksandra sasnovich
────────────────────────────────────────
READING GUIDE: Forecast = model outcome | Fair price = model probability price | External EV = comparison with an entered sportsbook price | Pass = no priced edge
========================================
📊 MATCH WINNER
────────────────────────────────────────
Winner forecast: Tereza Valentova (61.6%) | fair ML -160
Moneyline: PASS at entered prices
Model fair ML: Tereza Valentova -160 / Aliaksandra sasnovich +160
════════════════════════════════════════
MATCH SUMMARY: Winner forecast: Tereza Valentova 61.8% | Match length: 2 sets
🎲 MATCH LENGTH:
Forecast: 2 sets / Under 2.5 (58.6%)
Model pick: Under 2.5 sets | probability 58.6% | model fair -142 | stability check passed
📊 Player Stats (Live):
========================================
🎯 TOTAL GAMES:
TOTAL FORECAST: OVER 20.5 (60.8%) | model fair odds -155
Expected 23.4 games | typical 80% range 16-30 games
########################################
🎯 PLAYER PROPS & PROJECTIONS 🎯
########################################
📊 Tereza Valentova - Projections:
Games Won: OVER 12.5 (50.5%) | fair odds -102 | expected 12.4 games
1st Set Games: OVER 5.5 (64%) | Fair -181
Serve Games: 11.54 projected
Serve Points: 77.1 projected
Aces: UNDER 0.5 (72%) | Fair -251
Double Faults: UNDER 3.5 (57%) | Fair -133
Breaks Won: OVER 4.5 (55%) | Fair -121
Break Points Created: UNDER 10.5 (52%) | Fair -109
BP Conversion: 46% projected (4.9 / 10.7)
Opponent BP Save: 54% projected (5.8 saved / 10.7 faced)
Opponent return: opp return 28% | gate needs player sample/opponent sample
⚠️ CAUTION: Props below computed from tour-average return rates due to insufficient player sample. Confidence is reduced.
📊 Aliaksandra sasnovich - Projections:
Games Won: OVER 11.5 (56.3%) | fair odds -129 | expected 11.0 games
1st Set Games: UNDER 5.5 (52%) | Fair -107
Serve Games: 11.53 projected
Serve Points: 80.0 projected
Aces: OVER 0.5 (55%) | Fair -123
Double Faults: UNDER 4.5 (53%) | Fair -111
Breaks Won: UNDER 4.5 (55%) | Fair -122
Break Points Created: UNDER 8.5 (50%) | Fair -100
BP Conversion: 49% projected (4.4 / 8.9)
Opponent BP Save: 51% projected (4.5 saved / 8.9 faced)
Opponent return: opp return 29% | gate needs player sample/opponent sample
⚠️ CAUTION: Props below computed from tour-average return rates due to insufficient player sample. Confidence is reduced.
🎲 Match-Level Context:
1st Set Total: UNDER 9.5 (50.5%)
Tiebreak forecast: NO TIEBREAK (71.9%)
Tiebreak O/U: UNDER 0.5 (71.9%)
💰 ACTION BOARD:
TENNISLOCKS MODEL BETS:
None: no entered market price offers positive model EV.
FORECASTS / NON-BET PRICES:
[SETS] 2 Sets / Under 2.5 sets: model probability 58.6% | model fair -142 | confidence MID
[MATCH WINNER] FORECAST ML - Tereza Valentova: model probability 61.6% | model fair -160 | confidence MID
[PROP] Match under 0.5 Tiebreaks Played: model probability 71.9% | model fair -256 | confidence STRONG
[PROP] Tereza Valentova under 0.5 Aces: model probability 71.5% | model fair -251 | confidence STRONG
[TOTAL GAMES] OVER 20.5: model probability 60.8% | model fair -155 | confidence MID
[PROP] Tereza Valentova over 5.5 1st Set Games: model probability 64.4% | model fair -181 | confidence MEDIUM
[PROP] Tereza Valentova under 3.5 Double Faults: model probability 57.1% | model fair -133 | confidence LOW
[PROP] Aliaksandra sasnovich over 11.5 Games Won: model probability 56.3% | model fair -129 | confidence LOW
[PROP] Aliaksandra sasnovich over 0.5 Aces: model probability 55.2% | model fair -123 | confidence LOW
[PROP] Aliaksandra sasnovich under 4.5 Breaks Won: model probability 55.0% | model fair -122 | confidence LOW
Note: No prop sportsbook prices were entered; displayed prop sides are model-fair forecasts only.
This match the loser went under lol not over 11.5? And the sets won is gone plus over 20.5???
Read all instructions
Do not add gates or thresholds
The Iasi result does not by itself prove the engine should have predicted Under 20.5 or Sasnovich Under 11.5. A 60.8% Over still loses about 39.2% of the time. However, the source did contain structural defects capable of distorting these markets.
A parallel match state was being created.
The finalized simulation used simHA and simHB, but the later exact-score state preferred statsA.spw and statsB.spw, then recalculated another hold pair. Total Games, Player Games, Sets Won, and related props could therefore represent a different match from the winner simulation. (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt) (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt)
Efron–Morris weighting was reversed.
Its sample-dependent factor increased toward one as sample size increased, but that increasing weight was applied to the population mean. Large samples were consequently shrunk more heavily than small samples. (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt)
Sets Won was suppressed by the renderer.
It was displayed only when _setsHasLineA or _setsHasLineB was true, even though a complete canonical Sets Won distribution already existed. (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt) (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt) (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt)
The 11.5 Games Won line could be generated by the model itself.
When no Games Won line was entered, the engine substituted the PMF’s generated fairLine, but the renderer presented it like a normal market line. (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt)
Service-exposure props used another hold/SPW combination.
Aces, double faults, breaks, and break points were built with _propSpwA/B and hA/hB rather than the finalized canonical state inputs. (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt)
The original Total Games settlement logic was already correctly summing exact PMF mass above and below the line. (TennisLocksEngine_v412_ONE_CANONICAL_PROBABILITY_PIPELINE_20260716.txt) I did not replace that with mean, median, mode, or heuristic decision logic.
Static comparison confirmed:
DecisionPolicy.evaluate() calls;_allowBet() calls;MIN_PICK_CONF usage;JavaScript syntax validation passed. A synthetic canonical joint-PMF test also confirmed that Player A Games + Player B Games equals Total Games and that all three settlements originate from the same joint distribution.
Historical Brier scores, log loss, calibration curves, and ATP/WTA/Challenger/ITF backtests were not run because no historical prediction/outcome dataset or executable workbook was supplied.
Download the patched v414 engine
The problem is your previous prompt is still too forgiving. It keeps telling the AI “investigate” and “this doesn’t necessarily prove it’s wrong.” A code agent will often interpret that as “there may not be anything to fix.” If your goal is to make the engine internally self-consistent, the prompt needs to tell it to find and eliminate the source of contradictions, not simply audit them.
I’d write it like this:
⸻
TENNISLOCKS ENGINE-WIDE CANONICAL CONSISTENCY REBUILD
The remaining issues are no longer display bugs. The remaining issues indicate that multiple prediction subsystems are still capable of reaching incompatible conclusions from the same simulated match.
The objective is to repair the underlying probability generation so every market is produced from one canonical simulation and every public prediction tells the same story.
Do not suppress outputs or remove markets. Repair the underlying calculations.
⸻
ISSUE 1 - TOTAL GAMES ENGINE IS NOT CONSISTENT WITH THE CANONICAL MATCH SIMULATION
This is now the highest-priority issue.
Across multiple matches, the Total Games market can recommend an Over while the rest of the engine simultaneously forecasts a match structure that naturally favors the Under.
Examples include combinations such as:
while the Total Games recommendation still outputs Over.
The issue is not whether any individual match finished Over or Under.
The issue is that the Total Games recommendation is capable of disagreeing with the engine’s own structural forecast.
The Total Games market should never behave like an independent opinion.
It must be the mathematical consequence of the finalized exact-score distribution.
Audit the entire Total Games pipeline.
Determine whether the Over/Under decision is being influenced by anything other than the finalized exact-score PMF.
Specifically verify whether any of the following are still affecting the decision:
The final Over/Under probability must be computed only by summing the probability mass of all legal exact-score outcomes that finish above or below the market line.
Nothing else should contribute.
For every generated match verify that
P(Over Line)
equals
Σ P(all exact scores whose total games exceed the line)
and
P(Under Line)
equals
Σ P(all exact scores whose total games remain below the line)
Any deviation indicates a second probability engine still exists.
⸻
ISSUE 2 - TOTAL GAMES DISTRIBUTION MAY BE SYSTEMATICALLY BIASED
Even if the probability pipeline becomes canonical, the underlying simulation itself may still produce inaccurate score distributions.
The engine appears capable of producing distributions where long matches receive more probability than the structural assumptions justify.
Audit the simulator itself.
Investigate whether it systematically overproduces:
Likewise investigate whether it underproduces:
These biases can shift every total upward without any display bug existing.
Inspect every transition probability that affects final game counts.
Confirm that hold probabilities, break probabilities, deuce resolution, serve-order transitions, and tiebreak entry rates produce historically realistic set-length distributions.
The objective is not to force more Unders.
The objective is to eliminate any systematic tendency to inflate match length.
⸻
ISSUE 3 - PLAYER GAMES MUST BE A PURE DERIVATIVE OF EXACT SCORES
Games Won should never be estimated independently.
Player Games must be calculated directly from the finalized exact-score distribution.
Audit the Games Won engine.
Determine whether any independent estimator still contributes probability.
Look for:
For every player verify:
Expected Games
equals
Σ (games won in each legal score × probability of that score)
The probability of Over X.5 Games must equal the summed probability of every exact-score outcome where that player exceeds the threshold.
No approximation should exist.
No secondary estimator should exist.
⸻
ISSUE 4 - PLAYER GAMES DISTRIBUTION MAY ALSO BE STRUCTURALLY BIASED
If the Games Won market is canonical but still produces implausible probabilities, inspect the simulation rather than the display.
Determine whether the engine systematically inflates:
or suppresses:
If losing players consistently receive too many games, every downstream Games Won market will become biased toward Overs.
Correct the simulation itself rather than applying market-specific adjustments.
⸻
ISSUE 5 - SETS WON MUST BE RECONCILED FROM EXACT SCORES
Sets Won should never disappear.
Every exact-score outcome already defines the number of sets won.
Generate Sets Won directly from the finalized exact-score PMF.
Verify:
Expected Sets
Median Sets
Mode Sets
Probability of 0
Probability of 1
Probability of 2
Probability of 3 (BO5)
all equal the exact-score distribution.
No independent estimator should exist.
⸻
ISSUE 6 - EVERY MARKET MUST SHARE ONE CANONICAL SOURCE
The canonical dependency chain should be:
Simulation
↓
Legal Match States
↓
Exact Score PMF
↓
Winner
↓
Match Length
↓
Total Games
↓
Player Games
↓
Sets Won
↓
First Set
↓
Tiebreaks
↓
Props
↓
Fair Odds
↓
Renderer
No market may bypass this chain.
No market may reconstruct probabilities.
No market may estimate outcomes separately.
⸻
ISSUE 7 - CROSS-MARKET CONSERVATION VALIDATION
After every simulation automatically verify:
Winner ⇄ Exact Score
Winner ⇄ Match Length
Winner ⇄ Player Games
Winner ⇄ Total Games
Winner ⇄ Sets Won
Match Length ⇄ Total Games
Match Length ⇄ Tiebreaks
Exact Score ⇄ Total Games
Exact Score ⇄ Player Games
Exact Score ⇄ Sets Won
First Set ⇄ Full Match
Props ⇄ Exact Score
Every identity should reconcile within floating-point tolerance.
If any market disagrees with the canonical exact-score distribution, stop the render and identify which subsystem generated the inconsistent probability.
⸻
This version tells the AI exactly what to fix. It no longer says “maybe” or “it doesn’t prove it’s wrong.” Instead, it instructs the agent to trace every market back to the canonical exact-score probability mass function, eliminate any independent estimators, and repair the simulation if it is systematically producing too many long matches or too many games for losing players. That targets the root causes you’re seeing across matches rather than treating them as isolated display issues.
════════════════════════════════════════
🎾 TENNISLOCKS 🎾
════════════════════════════════════════
🎯 WTA 250 Iasi | Clay, Outdoor | Best of 3 | Total line 20.5
Court speed index: 28 | Tour: WTA
────────────────────────────────────────
Tereza Valentova vs Aliaksandra sasnovich
────────────────────────────────────────
READING GUIDE: Forecast = model outcome | Fair price = model probability price | External EV = comparison with an entered sportsbook price | Pass = no priced edge
========================================
📊 MATCH WINNER
────────────────────────────────────────
Winner forecast: Tereza Valentova (62.4%) | fair ML -166
Moneyline: PASS at entered prices
Model fair ML: Tereza Valentova -166 / Aliaksandra sasnovich +166
════════════════════════════════════════
MATCH SUMMARY: Winner forecast: Tereza Valentova 62.7% | Match length: 2 sets
🎲 MATCH LENGTH:
Forecast: 2 sets / Under 2.5 (58.7%)
Model pick: Under 2.5 sets | probability 58.7% | model fair -142 | stability check passed
📊 Player Stats (Live):
========================================
🎯 TOTAL GAMES:
TOTAL FORECAST: OVER 20.5 (60.2%) | model fair odds -151
Mean 23.3 | median 22 | mode 19 (8.1%) | SD 5.6 | skew 0.39 | typical 80% range 16-30 games
########################################
🎯 PLAYER PROPS & PROJECTIONS 🎯
########################################
📊 Tereza Valentova - Projections:
Games Won: OVER 12.5 (50.4%) | fair odds -102 | model-generated reference line | mean 12.4 | median 13 | mode 12
1st Set Games: OVER 5.5 (65%) | Fair -184
Sets Won: 1.42 projected | median 2 | mode 2 (62.4%) | P(0) 20.1% / P(1) 17.5% / P(2) 62.4%
Serve Games: 11.50 projected
Serve Points: 78.9 projected
Aces: UNDER 0.5 (71%) | Fair -246
Double Faults: UNDER 3.5 (56%) | Fair -126
Breaks Won: UNDER 5.5 (56%) | Fair -129
Break Points Created: UNDER 10.5 (50%) | Fair -101
BP Conversion: 49% projected (5.3 / 11.0)
Opponent BP Save: 51% projected (5.6 saved / 11.0 faced)
Opponent return: opp return 28% | gate needs player sample/opponent sample
â ï¸ CAUTION: Props below computed from tour-average return rates due to insufficient player sample. Confidence is reduced.
📊 Aliaksandra sasnovich - Projections:
Games Won: OVER 11.5 (55.3%) | fair odds -124 | model-generated reference line | mean 10.9 | median 12 | mode 12
1st Set Games: UNDER 5.5 (52%) | Fair -110
Sets Won: 0.99 projected | median 1 | mode 0 (38.6%) | P(0) 38.6% / P(1) 23.9% / P(2) 37.6%
Serve Games: 11.49 projected
Serve Points: 79.2 projected
Aces: OVER 0.5 (55%) | Fair -122
Double Faults: UNDER 4.5 (53%) | Fair -114
Breaks Won: OVER 4.5 (50%) | Fair -100
Break Points Created: OVER 9.5 (51%) | Fair -104
BP Conversion: 46% projected (4.7 / 10.1)
Opponent BP Save: 54% projected (5.4 saved / 10.1 faced)
Opponent return: opp return 29% | gate needs player sample/opponent sample
â ï¸ CAUTION: Props below computed from tour-average return rates due to insufficient player sample. Confidence is reduced.
🎲 Match-Level Context:
1st Set Total: UNDER 9.5 (51.1%)
Tiebreak forecast: NO TIEBREAK (72.9%)
Tiebreak O/U: UNDER 0.5 (72.9%)
💰 ACTION BOARD:
TENNISLOCKS MODEL BETS:
None: no entered market price offers positive model EV.
FORECASTS / NON-BET PRICES:
[SETS] 2 Sets / Under 2.5 sets: model probability 58.7% | model fair -142 | confidence MID
[MATCH WINNER] FORECAST ML â Tereza Valentova: model probability 62.4% | model fair -166 | confidence MID
[PROP] Match under 0.5 Tiebreaks Played: model probability 72.9% | model fair -269 | confidence STRONG
[PROP] Tereza Valentova under 0.5 Aces: model probability 71.1% | model fair -246 | confidence STRONG
[TOTAL GAMES] OVER 20.5: model probability 60.2% | model fair -151 | confidence MID
[PROP] Tereza Valentova over 5.5 1st Set Games: model probability 64.8% | model fair -184 | confidence MEDIUM
[PROP] Tereza Valentova under 5.5 Breaks Won: model probability 56.3% | model fair -129 | confidence LOW
[PROP] Tereza Valentova under 3.5 Double Faults: model probability 55.8% | model fair -126 | confidence LOW
[PROP] Aliaksandra sasnovich over 11.5 Games Won: model probability 55.3% | model fair -124 | confidence LOW | model-generated reference line
[PROP] Aliaksandra sasnovich over 0.5 Aces: model probability 55.0% | model fair -122 | confidence LOW
PLAYER PROJECTIONS:
Tereza Valentova Sets Won: 1.4 sets (canonical exact-score PMF)
Aliaksandra sasnovich Sets Won: 1.0 sets (canonical exact-score PMF)
Note: No prop sportsbook prices were entered; displayed prop sides are model-fair forecasts only.
Plus the action board is displaying below?
You were correct about the renderer and validation architecture.
The v414 consistency check compared aggregate PMFs and expected values, but it did not independently rebuild every public market from the exact-score × player-games branches. (TennisLocksEngine_v414_ENGINE_WIDE_CANONICAL_AUDIT_FIX_20260716.txt) The Action Board was also constructed only after the detailed prop section, which forced it to the bottom, and it repeated projection-only entries inside the board. (TennisLocksEngine_v414_ENGINE_WIDE_CANONICAL_AUDIT_FIX_20260716.txt) (TennisLocksEngine_v414_ENGINE_WIDE_CANONICAL_AUDIT_FIX_20260716.txt)
Before rendering, the engine now reconstructs:
P(exact match score) × P(player A games, player B games | exact match score)
It then independently derives and verifies:
If any published probability differs from the reconstructed branch probability, rendering stops and names the failed identity, such as:
total line settlement pOver
The previous generic consistency failure message has been replaced with the actual subsystem and mismatch.
The Total Games card now shows where the probability comes from:
textSettlement decomposition: Over 60.2% = 2 sets X% + 3 sets Y% Under 39.8% = 2 sets X% + 3 sets Y%
This is important because:
can all be mathematically true simultaneously.
I did not force Total Games to agree with the mode, median, winner strength, or largest individual score category. That would create a new heuristic estimator. Instead, the engine must now demonstrate that the displayed Over or Under equals the complete branch sum.
Each Games Won projection now shows the Over composition:
textGames Won Over composition: win paths X% | loss paths Y% | straight-set loss Z%
For Sasnovich, this will reveal whether the Over probability comes from:
The Games Won probability itself must exactly match the marginal of the canonical joint-games PMF.
The Action Board is now placed:
Model-generated Games Won balancing lines remain visible in the player projection cards, but they are no longer promoted to the Action Board as though they were entered sportsbook markets.
The duplicate PLAYER PROJECTIONS subsection was removed from the Action Board because Sets Won and the other projections remain fully displayed in their player cards. No market was removed.
The following source counts are unchanged between v414 and v415:
| Rule | v414 | v415 |
|---|---|---|
MIN_PICK_CONF | 6 | 6 |
MATCH_WIN_MIN_EDGE | 2 | 2 |
_allowBet( | 2 | 2 |
fixedActionProbabilityThreshold | 3 | 3 |
Core pOver > 0.5 side selector | 2 | 2 |
No new forecast gate, minimum probability, confidence cutoff, Over bias, Under bias, or market suppression was introduced. This preserves the requirement already stated in the uploaded v414 source. (TennisLocksEngine_v414_ENGINE_WIDE_CANONICAL_AUDIT_FIX_20260716.txt)
JavaScript syntax validation passed. A synthetic consistent branch PMF passed the new validator; altering only the displayed Total Games probability caused the expected hard failure.
Download the v415 rebuilt engine