Now I have everything I need. The code is fully vi...
Creato il: 30 marzo 2026
Risposto usando GPT-5.4 Thinking da Chat01
Creato il: 30 marzo 2026
Risposto usando GPT-5.4 Thinking da Chat01
Now I have everything I need. The code is fully visible. Here's the precise fix:
afDetectInjury looks at the Tennis Abstract match history and flags isBack = true when:[1]
INJURYGAPDAYS constant), ANDdaysSinceReturn < 120) — or within 365 days with fewer than 15 matches backThe confidence is HIGH if gap ≥ 180 days + 2 retirements, MID if gap ≥ 90 + 1 retirement, LOW otherwise.[1]
afAutoTagInjury then writes (inj) into A2/A11 only for HIGH or MID confidence — but once written, it never expires.[1]
Tennis Abstract's player-classic.cgi data includes a date on every match row and a retirement flag (isRetirement) per match. The fix should use that date to determine whether the injury flag is still current — not just whether the tag exists in the cell.[1]
Here's the patch to afAutoTagInjury:
javascriptfunction afAutoTagInjury(sheet, cell, origName, injInfo) { try { if (!injInfo || !injInfo.isBack) return null; if (injInfo.confidence !== 'HIGH' && injInfo.confidence !== 'MID') return null; // ✅ FIX: Only tag if the return was recent (within 42 days) // Tennis Abstract dates let us know exactly when the player came back. // If they've played 5+ matches since returning, they're no longer "coming back" var now = new Date(); var daysSinceReturn = injInfo.lastGapEnd ? Math.round((now.getTime() - injInfo.lastGapEnd.getTime()) / 86400000) : 999; var STALENESS_DAYS = 42; // player back > 42 days ago → not injured anymore var MATCHES_BACK_CLEAR = 5; // played 5+ matches since return → healthy if (daysSinceReturn > STALENESS_DAYS) { Logger.log('afAutoTagInjury: return was ' + daysSinceReturn + 'd ago, skipping tag'); return null; } if (injInfo.matchesSinceReturn >= MATCHES_BACK_CLEAR) { Logger.log('afAutoTagInjury: ' + injInfo.matchesSinceReturn + ' matches since return, skipping tag'); return null; } // Check if tag already exists var lc = origName.toLowerCase(); var existingTags = ['inj','knee','ankle','leg','calf','hamstring','shoulder','elbow', 'back','core','oblique','wrist','hand','fatigue','illness','sick','medical']; for (var t = 0; t < existingTags.length; t++) { if (lc.indexOf(existingTags[t]) !== -1) return null; } var tagged = origName + ' (inj)'; sheet.getRange(cell).setValue(tagged); return tagged; } catch(e) { Logger.log('afAutoTagInjury error: ' + e.message); return null; } }
You also need to pass matchesSinceReturn back through injInfo, which means adding it to the return object in afDetectInjury:
javascript// In afDetectInjury, where matchesSinceReturn is already computed: result.matchesSinceReturn = matchesSinceReturn; // ← add this line
This way the (inj) tag only fires for genuinely recent returns, and old injuries from months ago in the Abstract data won't keep bypassing the market anchor forever.
Sources
[1] TennisLocks_v26_CAL_2_patched-3.txt https://ppl-ai-file-upload.s3.amazonaws.com/web/direct-files/attachments/517033057/3dab4d36-7cd1-44a3-a4a3-5b7aad4a243e/TennisLocks_v26_CAL_2_patched-3.txt
[2] JeffSackmann/tennis_atp: ATP Tennis Rankings, Results ... https://github.com/JeffSackmann/tennis_atp
[3] GitHub - JeffSackmann/tennis_MatchChartingProject https://github.com/JeffSackmann/tennis_MatchChartingProject
[4] JeffSackmann/tennis_slam_pointbypoint: Point-by-point data for ... https://github.com/JeffSackmann/tennis_slam_pointbypoint
[5] [PDF] and third-tier tournaments on the ATP and WTA tours https://pdfs.semanticscholar.org/36d1/e93aa6d03b888a8966553c7c01e1492ffda5.pdf
[6] New Match Charting Project Excel Template - Tennis Abstract https://www.tennisabstract.com/blog/2018/05/16/new-match-charting-project-excel-template/
[7] [PDF] a machine learning approach using the srp-crisp-dm https://open.metu.edu.tr/bitstream/handle/11511/106394/toyan_unal_tez.pdf
[8] Does TennisAbstract have a consolidated database for all matches this season (not just by player)? Where do people get the data from otherwise? https://www.reddit.com/r/tennis/comments/1ovuplf/does_tennisabstract_have_a_consolidated_database/
[9] Match Charting Project: More Matches, More Data, New Spreadsheet https://www.tennisabstract.com/blog/2015/04/07/match-charting-project-more-matches-more-data-new-spreadsheet/
[10] The Tennis Abstract Podcast - Jeff Sackmann - Listen Notes https://www.listennotes.com/podcasts/the-tennis-abstract-podcast-jeff-sackmann-AWk2SsvhO_P/
[11] JeffSackmann/tennis_pointbypoint: Sequential point-by ... - GitHub https://github.com/JeffSackmann/tennis_pointbypoint
[12] [PDF] Real Time Tennis Match Prediction Using Machine Learning https://cs229.stanford.edu/proj2017/final-posters/5148175.pdf
[13] Jeff Sackmann Match Results, Splits, and Analysis - Tennis Abstract http://www.tennisabstract.com/cgi-bin/player.cgi?p=JeffSackmann
[14] Free ATP and WTA Results and Stats Databases https://www.tennisabstract.com/blog/2015/03/24/free-atp-and-wta-results-and-stats-databases/
[15] On Tennis Abstract, specific match charting data shows how ... - Reddit https://www.reddit.com/r/tennis/comments/1g4cm2l/on_tennis_abstract_specific_match_charting_data/
[16] Withdrawals and Retirements – Heavy Topspin - Tennis Abstract http://www.tennisabstract.com/blog/category/withdrawals-and-retirements/
[17] Free ATP and WTA Results and Stats Databases - Tennis Abstract http://www.tennisabstract.com/blog/2015/03/24/free-atp-and-wta-results-and-stats-databases/
[18] EdwinTh/tennis source: R/data_documentation.R https://rdrr.io/github/EdwinTh/tennis/src/R/data_documentation.R
[19] GitHub - JeffSackmann/tennis_viz: code and data for tennis analytics visualizations https://github.com/JeffSackmann/tennis_viz
[20] Enter Walkover/ Retirement, Withdrawn, or Incomplete to Score Entry in Draws in Tournament Desk https://customercare.usta.com/hc/en-us/articles/360055224431-Enter-Walkover-Retirement-Withdrawn-or-Incomplete-to-Score-Entry-in-Draws-in-Tournament-Desk
[21] GitHub - BigTimeStats/atp-tennis: ATP Tennis Match Data Test https://github.com/BigTimeStats/atp-tennis
[22] GitHub - jameswmiller/ATP_project: Data Science Project analysing Association of Tennis Professional's (ATP) data. https://github.com/jameswmiller/ATP_project
[23] pbp_raw.df: Point-by-point records of tennis matches https://rdrr.io/github/kattaoa/oktennis/man/pbp_raw.df.html
[24] JeffSackmann - Overview https://github.com/jeffsackmann
[25] Using R to study tennis players | R-bloggers https://www.r-bloggers.com/2017/02/using-r-to-study-tennis-players/
[26] Tennismylife/TML-Database: A complete and live ... https://github.com/Tennismylife/TML-Database
[27] EDA Project: WTA data https://www.stat.cmu.edu/cmsac/sure/2021/materials/labs/demos/0607-EDA-Project-WTA.html
[28] tennis_misc/README.md at master · JeffSackmann/tennis_misc https://github.com/JeffSackmann/tennis_misc/blob/master/README.md
[29] Data-Driven Prediction of ATP Tennis Match Outcomes Using ... https://www.cs.vu.nl/~wanf/theses/dryja-bscthesis.pdf
[30] tennis_atp/README.md at master · JeffSackmann/tennis_atp https://github.com/JeffSackmann/tennis_atp/blob/master/README.md
[31] purl-is.txt - CMU School of Computer Science http://www.cs.cmu.edu/~infobot/purl/archive/snapshot980610/purl-is.txt
[32] https://data.cityofnewyork.us/api/views/2pg3-gcaa/... https://data.cityofnewyork.us/api/views/2pg3-gcaa/rows.csv?accessType=DOWNLOAD
[33] Untitled https://app.collierclerk.com/LFBMR/DocView.aspx?id=25287&dbid=0&repo=BMRPROD
[34] Identification and engineering of antibodies with variant fc regions ... https://patents.google.com/patent/WO2006088494A9/en
[35] Word cloud intersection - GitHub Gist https://gist.github.com/8579a28a78ddd3391d6b
[36] JeffSackmann/tennis_atp: ATP Tennis Rankings, Results, and Stats https://github.com/jeffsackmann/tennis_atp
[37] SP-7 Temecula Regional Center Specific Plan Volume II https://laserfiche.temeculaca.gov/WebLink/DocView.aspx?id=328966&dbid=2&repo=Temecula
[38] JeffSackmann/tennis_wta: WTA Tennis Rankings, Results, and Stats https://github.com/JeffSackmann/tennis_wta
[39] Untitled https://lfweb.albemarle.org/WebLink/DocView.aspx?id=288899&dbid=0&repo=CountyofAlbemarle
Do not give to a sub agent
For any core engine piece (winner prob, bimodal, sets, confidence):
Example:
Bad (colliding):
js// OLD: // var p3 = someOldBlend(...); // NEW: var p3 = bimodal.pDeciderAuth;
If someOldBlend is still used later, you end up with two different concepts of “p3” floating around.
Correct:
js// Replace the old code entirely: var p3 = bimodal.pDeciderAuth;
And make sure any references to the old computation are gone.
For these keys, there must be exactly one definition:
pWinA (or pFinal) that MATCH_PREVIEW uses.pDeciderAuth from _computeFullBimodal_.cfg.p2LeanThr, cfg.p2BetThr, cfg.p3LeanThr, cfg.p3BetThr computed once from tour+32k.If you see:
pDeciderRaw computed in multiple helpers, orp2/p3 computations using different formulas,you need to delete the duplicates and route everyone through the canonical value.
Any time you refactor a core function like _buildSetsMarketEngine_ or _computeFullBimodal_:
if (legacyMode) or if (!bimodal) unless you are 100% sure they’re dead.Otherwise, the engine will sometimes run old code and sometimes new, depending on state.
If you re‑implement something, do not introduce new variables with the same semantic meaning but different names and keep using the old ones elsewhere.
Example:
Bad:
jsvar p3Raw = bimodal.pDeciderAuth; var p3New = _clamp_(p3Raw, ...); // but later: if (p3Old >= SETS_MARKET_CFG.READ_STRONG_3SET_BO3) { ... }
Here p3Old is some old variable still in scope, and your new logic is effectively ignored in some checks.
Correct: rename everything to the new canonical name or delete the old, e.g.:
jsvar p3 = _clamp_(bimodal.pDeciderAuth, ...); // and *only* use p3 downstream
Search the function for p3 and make sure you don’t have both p3Old and p3 used in decisions.
When you or an agent makes a change, always check:
Updates my script then send it as a downloadable txt link
Done — I updated your script based on the uploaded file (TennisLocks_v26_CAL_2_patched-3_no_conf_none.txt) and saved the fixed version here:
Applied changes:
_afDetectInjury_ now returns daysSinceReturn and matchesSinceReturn_afAutoTagInjury_ now only tags when return is within 42 days and matches since return are under 5(inj) tags can be cleared instead of lingering forever