Cycling race predictor · Tour de France 2026

Stage 12 — 2026-07-16

The same production stack priced under 4 course readings, against the bookmaker's pre-stage line. Each scenario is one opinion about what kind of day this is; the results section settles the argument.

4 scenarios 174 riders priced models retrained 2026-06-28 book snapshot markets_1254.json

The fork

4 readings of the same road

Course profile is an input the model can't see from a map — it's set from reference races (or overridden by hand). Different readings redistribute the same probability mass across rider types.

Full sprint

Full bunch sprint — the gallop reforms for Chalon-sur-Saône
sprint1.00
mountain0.00
hilly0.00
rolling0.00
break0.00
TT0.00
The base case, and the book's. Magny-Cours to Chalon-sur-Saône is 179 km east across the Nièvre and into the Saône valley, gently rolling rather than pancake, with three category-4 bumps — the Côte de Lanty and the Côte de Cuzy in the middle third, and the Côte de Montagny-lès-Buxy (2.6 km at 4.3%) cresting around 20 km out. None is steep enough to shed a sprinter who wants to be there, and after the last one there is a flat 20 km run-in for the trains to reassemble. The same standing flat archetype as stages 5, 7, 8 and 11 (six pure GT bunch gallops, sprint score 1.0). The market makes it a sprint but a notch less certain than Nevers: Merlier has eased to 2.10 (32.4% devigged) after being beaten there, Kooij sits 5.00 (13.6%), Philipsen 6.00 (11.4%) — the three of them hold about 57% of the win book, with Wærenskjold shortened to 15 (4.5%) off his stage-11 win and Girmay 17 (4.0%). As on every sprint this Tour, our disagreement with the book is not about the day but inside the gallop — and this time it has narrowed to a single axis. Measured on the same footing (each read renormalized over the field, since the raw blend is a set of per-rider marginals summing to 137% here and does not stand next to the book unadjusted), we and the market now agree on the favourite: Merlier 33.1% to the book's 32.4%, the price having come back to us after he was beaten in Nevers. Where we still part company is the same place it paid yesterday — the two fast men just behind him. We make Kooij a 22.1% chance against the book's 13.6%, and Philipsen 17.8% against 11.4%: the identical lean that returned Kooij second and Philipsen third on stage 11. And we decline to chase the book's new enthusiasm for Wærenskjold, shortened to 15 (4.5%) on the strength of one win, where we still hold him at 1.3%. Same podium of favourites, the mass tilted once again toward the challengers rather than the marquee name.
Top 5 (blend): Merlier Tim 45.2%; Kooij Olav 30.2%; Philipsen Jasper 24.3%; Gaviria Fernando 4.6%; Kanter Max 4.2%

Reduced sprint

Reduced group sprint — the late côtes thin the gallop
sprint0.52
mountain0.01
hilly0.46
rolling0.01
break0.00
TT0.00
More live here than it was on the flat run to Nevers. The three category-4 climbs, and above all the Côte de Montagny-lès-Buxy 20 km from the line, give a team that wants to drop the pure sprinters a place to try it — a hard tempo over the last bump, a nervous run-in, or a crosswind off the open Saône plain, and the group that contests the finish is thinned and roughed-up rather than whole. This is the established reduced-gallop archetype (same refs as stages 5, 8 and 11): Philipsen TdF'23 s7, Merlier Giro'24 s3, Coquard Suisse'24 s2, Milan Renewi'24 s1, Merlier UAE Tour'25 s5, avg sprint ~0.51 / hilly ~0.44. Remember the model's semantics — a high hilly score is not a puncheur read, it is a hard day that still ends in a bunch kick, so the pure sprinters stay near the top and it is the fringe fast men who climb. It is the branch that promotes the hard-men finishers — Pedersen, van der Poel, Wærenskjold, fresh off Nevers — without ever handing the day to a climber.
Top 5 (blend): Merlier Tim 36.3%; Kooij Olav 33.1%; Philipsen Jasper 24.8%; Girmay Biniam 10.3%; Kanter Max 4.5%

Break survives

The escape stays away — the bump at 20 km is the launchpad
sprint0.80
mountain0.00
hilly0.10
rolling0.00
break0.10
TT0.00
The branch stage 11 could not quite justify and this one can. Asgreen at Moulins (TdF'23 s18) is the template and it is barely 50 km up the road from today's start — a lumpy flat stage everyone had written off as a gallop, where a strong escape used the terrain and two seconds of nerve to hold off the charging bunch. The other refs are the same real flat Grand Tour break wins: Mohoric at Libourne (TdF'21 s19), Politt at Nîmes (TdF'21 s12), Campenaerts at Gorizia (Giro'21 s15), Konrad (TdF'21 s16); avg sprint ~0.79 / hilly ~0.10 / breakaway ~0.10. The Côte de Montagny-lès-Buxy at 20 km is a real launchpad, and with the sprinters' teams a man light after two weeks the control is not guaranteed. Read the raw board with care: the model prices rider-course fit, not break formation, so a mostly-flat profile still tops out with the fast men. The value of the read is the pool table below — strip out the top nine on ACTUAL GC after stage 11 (the cliff is the 5:15 between Martinez in 9th and Pidcock in 10th) and every rider the model itself classifies as a pure sprinter, then renormalize the rest into 'if the escape wins' odds. The book's own break card: Abrahamsen and van der Poel at 34, Ganna and Asgreen at 41.
Top 5 if the break wins (top 9 on GC and the sprinters removed): Pedersen Mads 10.0%; van der Poel Mathieu 8.5%; Wærenskjold Søren 7.4%; Matthews Michael 4.5%; Askey Lewis 4.0%

Hindsight (post-hoc)

Hindsight (post-hoc) — the day as it actually raced
sprint0.90
mountain0.00
hilly0.09
rolling0.00
break0.00
TT0.00
Post-race reconstruction, never logged. The nearest finish-curve neighbours among WT stages since 2021, and every one is a flat or near-flat bunch gallop: Molano Vuelta'23 s12, Bauhaus Tirreno'22 s7, Milan Giro'24 s13, Bauhaus Pologne'21 s1, Kooij Giro'25 s21 — avg sprint ~0.90. One honest caveat on method: FirstCycling's origin was returning 503 under Tour load the evening of the stage, so the full field gap-curve could not be archived; the finish shape was taken from stage 8 of this Tour — Merlier's own near-identical chaotic bunch gallop into a valley town — as the template, and the neighbour set is robust to that choice, since every near match to a large-front-group sprint is itself a bunch sprint. The reading barely moves from the pre-race full/reduced-sprint reads, which is the finding: a bunch sprint that regroups is a day-type the model prices at book level, and course knowledge was not the constraint here.
Top 5 (blend): Merlier Tim 43.3%; Kooij Olav 42.9%; Philipsen Jasper 25.5%; Girmay Biniam 8.3%; Gaviria Fernando 5.3%

The board

Win probabilities, scenario by scenario

Blend win probability per scenario (cascade × LambdaRank, DNF-adjusted at the pricing layer), next to the devigged Kambi (Unibet) win line captured the morning before the stage. "Max edge" compares the most favourable scenario against the book — treat it as scenario-conditional, not a free bet.

Read "Max edge" as directional, not as a price. The blend is a set of per-rider marginals and does not sum to one book — across this field each reading totals Full sprint 137%, Reduced sprint 143%, Hindsight (post-hoc) 154% — while the devigged book column sums to exactly 100%. Putting the two side by side flatters the model, and Max edge is inflated by about that factor: divide a rider's probability by his reading's total before calling anything an edge. Of our heads only the LambdaRank one is natively book-preserving.

RiderTeamFull sprintReduced sprintBreak survivesHindsight (post-hoc)Book oddsBook devigMax edge
Merlier TimSoudal Quick-Step45.2%36.3%–43.3%2.1032.4%+12.8pp
Kooij OlavDecathlon CMA CGM Team30.2%33.1%–42.9%5.0013.6%+29.2pp
Philipsen JasperAlpecin-Premier Tech24.3%24.8%–25.5%6.0011.4%+14.1pp
Girmay BiniamNSN Cycling Team4.1%10.3%–8.3%17.004.0%+6.3pp
Gaviria FernandoCaja Rural-Seguros RGA4.6%3.7%–5.3%101.000.7%+4.6pp
Kanter MaxXDS Astana Team4.2%4.5%–4.8%21.003.2%+1.6pp
van der Poel MathieuAlpecin-Premier Tech1.2%4.0%8.5%1.7%34.002.0%+2.0pp
Pedersen MadsLidl-Trek2.4%3.4%10.0%2.2%34.002.0%+1.4pp
Ackermann PascalTeam Jayco-AlUla3.1%2.7%–3.0%151.000.5%+2.7pp
Pogacar TadejUAE Team Emirates-XRG2.2%1.5%–0.8%401.000.2%+2.1pp
Fretin MilanCofidis1.9%1.8%–2.1%81.000.8%+1.3pp
Wærenskjold SørenUno-X Mobility1.8%1.9%7.4%1.9%15.004.5%-2.6pp
Bauhaus PhilBahrain Victorious1.6%1.4%–1.7%301.000.2%+1.5pp
Ballerini DavideXDS Astana Team1.3%1.6%–1.4%301.000.2%+1.3pp
Matthews MichaelTeam Jayco-AlUla1.0%1.4%4.5%1.1%301.000.2%+1.2pp
Bittner PavelTeam Picnic PostNL1.2%1.1%–1.2%126.000.5%+0.6pp
Abrahamsen JonasUno-X Mobility0.0%0.0%0.4%0.0%34.002.0%-2.0pp
Break survives is shown conditional on the break winning — the top 9 riders on actual GC and every pure sprinter are removed and the remaining probabilities renormalize within the break pool. That column isn't comparable with the book line or the other readings, so it's left out of Max edge; a "–" means a GC captain or a pure sprinter we assume won't be up the road.
Full bunch sprint — the gallop reforms for Chalon-sur-Saône — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Merlier Tim45.2%53.0%31.1%75.3%89.4%2.10
2Kooij Olav30.2%29.6%22.2%62.8%82.7%5.00
3Philipsen Jasper24.3%20.9%18.7%48.1%82.6%6.00
4Gaviria Fernando4.6%1.3%4.2%8.0%68.8%101.00
5Kanter Max4.2%3.0%3.4%16.9%81.2%21.00
6Girmay Biniam4.1%2.9%3.3%12.7%81.1%17.00
7Ackermann Pascal3.1%1.4%2.7%9.4%73.0%151.00
8Pedersen Mads2.4%2.5%1.7%10.4%53.8%34.00
9Pogacar Tadej2.2%5.5%0.8%8.4%26.3%401.00
10Fretin Milan1.9%1.8%1.4%8.7%73.5%81.00
11Wærenskjold Søren1.8%1.5%1.4%7.1%68.3%15.00
12Bauhaus Phil1.6%0.8%1.4%9.0%55.7%301.00
13Ballerini Davide1.3%0.9%1.1%8.2%50.3%301.00
14van der Poel Mathieu1.2%1.5%0.8%6.6%38.2%34.00
15Bittner Pavel1.2%1.5%0.8%7.9%72.4%126.00
16Matthews Michael1.0%0.9%0.8%6.1%61.0%301.00
17Wright Fred0.5%0.7%0.3%2.8%19.4%126.00
18van Dijke Tim0.4%0.7%0.3%3.6%26.4%401.00
19Askey Lewis0.4%0.4%0.3%2.1%18.4%801.00
20Vacek Mathias0.3%0.2%0.2%2.2%13.6%126.00
21Biesterbos Frits0.3%0.3%0.2%1.5%36.4%601.00
22Oldani Stefano0.2%0.1%0.2%1.6%38.7%801.00
23Bol Cees0.2%0.3%0.2%1.5%20.0%301.00
24Stuyven Jasper0.2%0.1%0.2%1.0%24.7%201.00
25del Toro Isaac0.2%0.2%0.1%0.7%5.1%801.00
26Cort Magnus0.2%0.2%0.1%1.1%27.4%67.00
27Asgreen Kasper0.2%0.6%0.0%0.7%6.6%41.00
28Artz Huub0.2%0.3%0.1%2.2%23.2%81.00
29Godon Dorian0.2%0.1%0.1%0.9%15.7%201.00
30Pidcock Tom0.1%0.1%0.1%1.0%6.2%501.00
Reduced group sprint — the late côtes thin the gallop — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Merlier Tim36.3%52.3%21.4%71.6%86.1%2.10
2Kooij Olav33.1%29.0%24.2%59.1%77.0%5.00
3Philipsen Jasper24.8%20.7%18.4%45.5%77.1%6.00
4Girmay Biniam10.3%7.9%7.8%29.0%77.8%17.00
5Kanter Max4.5%3.4%3.4%16.2%74.2%21.00
6van der Poel Mathieu4.0%4.1%2.7%16.1%53.2%34.00
7Gaviria Fernando3.7%1.2%3.2%8.9%56.1%101.00
8Pedersen Mads3.4%3.3%2.4%11.7%51.2%34.00
9Ackermann Pascal2.7%1.5%2.1%7.9%64.7%151.00
10Wærenskjold Søren1.9%1.6%1.4%7.9%54.6%15.00
11Fretin Milan1.8%2.2%1.2%10.3%64.8%81.00
12Ballerini Davide1.6%1.0%1.2%8.5%45.7%301.00
13Pogacar Tadej1.5%1.5%1.1%5.0%25.9%401.00
14Matthews Michael1.4%1.5%0.9%6.0%48.8%301.00
15Bauhaus Phil1.4%0.7%1.1%8.5%49.8%301.00
16Bittner Pavel1.1%1.7%0.6%8.7%62.1%126.00
17Askey Lewis0.6%0.3%0.5%3.1%32.9%801.00
18Wright Fred0.6%0.8%0.3%4.0%28.2%126.00
19Oldani Stefano0.5%0.1%0.4%1.5%49.0%801.00
20Vacek Mathias0.5%0.3%0.4%2.9%14.1%126.00
21van Dijke Tim0.4%0.5%0.3%3.1%22.5%401.00
22Pidcock Tom0.4%0.2%0.3%2.4%11.0%501.00
23Stuyven Jasper0.3%0.2%0.2%1.4%26.3%201.00
24Biesterbos Frits0.3%0.3%0.2%1.6%37.1%601.00
25Aranburu Alex0.3%0.1%0.2%1.5%23.2%601.00
26Godon Dorian0.3%0.3%0.2%1.5%24.1%201.00
27Van Gils Maxim0.3%0.3%0.2%1.5%9.1%601.00
28Bol Cees0.2%0.2%0.2%1.3%23.5%301.00
29Pluimers Rick0.2%0.1%0.2%2.3%29.4%301.00
30Artz Huub0.2%0.3%0.1%2.9%19.6%81.00
The escape stays away — the bump at 20 km is the launchpad — top 30, all heads · top 9 on GC and the sprinters removed
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Pedersen Mads2.1%2.3%4.9%5.9%17.9%34.00
2van der Poel Mathieu1.8%2.1%4.1%5.1%17.0%34.00
3Wærenskjold Søren1.6%1.0%3.8%17.6%38.5%15.00
4Matthews Michael1.0%1.5%2.1%3.8%22.5%301.00
5Askey Lewis0.8%1.2%1.9%5.2%19.4%801.00
6Oldani Stefano0.6%0.2%1.6%2.3%21.6%801.00
7Vacek Mathias0.6%1.1%1.2%5.0%17.9%126.00
8Wright Fred0.5%0.9%1.0%3.0%18.5%126.00
9Stuyven Jasper0.5%0.8%1.1%3.0%20.1%201.00
10Godon Dorian0.5%1.6%0.9%4.6%21.8%201.00
11van Dijke Tim0.5%0.6%1.0%2.3%21.1%401.00
12Bol Cees0.4%0.2%1.1%0.9%14.5%301.00
13Tarling Joshua0.3%0.7%0.7%4.5%17.0%151.00
14Aranburu Alex0.3%0.2%0.7%0.9%9.3%601.00
15Cort Magnus0.3%0.1%0.7%0.8%17.5%67.00
16Vermeersch Florian0.3%0.5%0.5%1.4%13.8%801.00
17Teunissen Mike0.2%0.3%0.6%0.7%18.2%401.00
18Berckmoes Jenno0.2%0.2%0.6%3.3%21.7%401.00
19Asgreen Kasper0.2%0.9%0.3%4.2%16.1%41.00
20Russo Clément0.2%0.1%0.5%1.8%22.6%601.00
21Pidcock Tom0.2%0.2%0.5%1.5%8.8%501.00
22Märkl Niklas0.2%0.5%0.4%1.6%13.9%n/a
23Biesterbos Frits0.2%0.1%0.5%1.2%19.1%601.00
24Pluimers Rick0.2%0.1%0.5%0.9%17.3%301.00
25Debruyne Ramses0.2%0.1%0.5%1.3%17.6%401.00
26Gate Aaron0.2%0.1%0.5%0.9%7.9%401.00
27Vauquelin Kévin0.2%0.1%0.4%0.5%4.8%1001.00
28Turgis Anthony0.2%0.2%0.4%0.9%8.9%301.00
29Ganna Filippo0.2%0.5%0.3%4.1%14.9%41.00
30Le Berre Mathis0.2%0.1%0.4%2.5%17.9%n/a
Hindsight (post-hoc) — the day as it actually raced — top 30, all heads
#RiderBlendCascade LambdaRankPodiumTop 15 Book odds
1Merlier Tim43.3%54.4%25.4%77.1%90.6%2.10
2Kooij Olav42.9%45.4%27.3%72.6%86.3%5.00
3Philipsen Jasper25.5%19.9%18.0%50.7%81.8%6.00
4Girmay Biniam8.3%5.8%6.0%19.8%80.5%17.00
5Gaviria Fernando5.3%1.5%4.4%9.9%70.0%101.00
6Kanter Max4.8%3.1%3.5%17.0%79.6%21.00
7Ackermann Pascal3.0%1.7%2.3%7.8%72.2%151.00
8Pedersen Mads2.2%2.0%1.5%9.1%50.3%34.00
9Fretin Milan2.1%2.2%1.4%10.0%73.2%81.00
10Wærenskjold Søren1.9%1.6%1.3%8.4%66.9%15.00
11Bauhaus Phil1.7%1.0%1.3%9.3%60.5%301.00
12van der Poel Mathieu1.7%2.2%1.0%8.6%44.2%34.00
13Ballerini Davide1.4%1.0%1.0%8.3%48.8%301.00
14Bittner Pavel1.2%1.7%0.6%8.6%71.4%126.00
15Matthews Michael1.1%1.2%0.7%4.7%54.5%301.00
16Pogacar Tadej0.8%0.7%0.6%2.7%15.0%401.00
17Wright Fred0.5%0.7%0.3%3.3%25.6%126.00
18Askey Lewis0.4%0.4%0.3%2.2%24.5%801.00
19van Dijke Tim0.4%0.7%0.2%2.7%26.4%401.00
20Oldani Stefano0.3%0.1%0.3%1.0%41.8%801.00
21Biesterbos Frits0.3%0.3%0.2%1.3%35.4%601.00
22Vacek Mathias0.2%0.3%0.2%2.7%13.9%126.00
23Stuyven Jasper0.2%0.2%0.2%1.3%26.5%201.00
24Bol Cees0.2%0.3%0.1%1.3%24.5%301.00
25Asgreen Kasper0.2%0.7%0.0%0.8%6.2%41.00
26Artz Huub0.2%0.3%0.1%3.4%22.7%81.00
27Godon Dorian0.2%0.2%0.1%1.0%21.0%201.00
28Cort Magnus0.2%0.1%0.1%0.8%24.7%67.00
29Vermeersch Florian0.1%0.4%0.0%0.8%11.5%801.00
30Teunissen Mike0.1%0.1%0.1%0.7%28.3%401.00

Angle

If the break goes — the field with the sprinters and the GC pool removed

On a flat day the escape has to beat the fast men home, so the pool that can win from it is the field minus every pure sprinter and minus the top 9 on GC after stage 11. Pure sprinter is the model's own verdict, not a hand list: real speed on a flat-sprint anchor of this exact field, but collapsing to a fraction of it once the road turns selective — that collapse is what separates a Merlier from a Pedersen. Classified out: Ackermann Pascal, Ballerini Davide, Bauhaus Phil, Bittner Pavel, Fretin Milan, Gaviria Fernando, Girmay Biniam, Kanter Max, Kooij Olav, Merlier Tim, Philipsen Jasper. The conditional column renormalizes the survivors' win probability under the 'Break survives' read over this pool (P(win | the break wins); the pool holds 21% of the unconditional book). The model cannot see who actually gets up the road — read this as a fitness-for-the-day ranking, not break-formation odds.

RiderTeamBreak survives win pP(win | break wins)Book oddsBook devig
Pedersen MadsLidl-Trek2.1%10.0%342.0%
van der Poel MathieuAlpecin-Premier Tech1.8%8.5%342.0%
Wærenskjold SørenUno-X Mobility1.6%7.4%154.5%
Matthews MichaelTeam Jayco-AlUla1.0%4.5%3010.2%
Askey LewisNSN Cycling Team0.8%4.0%8010.1%
Oldani StefanoCaja Rural-Seguros RGA0.6%3.1%8010.1%
Vacek MathiasLidl-Trek0.6%2.7%1260.5%
Wright FredPinarello-Q36.5 Pro Cycling Team0.5%2.3%1260.5%
Stuyven JasperSoudal Quick-Step0.5%2.3%2010.3%
Godon DorianNetcompany INEOS0.5%2.3%2010.3%
van Dijke TimRed Bull-BORA-hansgrohe0.5%2.2%4010.2%
Bol CeesDecathlon CMA CGM Team0.4%2.1%3010.2%
Tarling JoshuaNetcompany INEOS0.3%1.6%1510.5%
Aranburu AlexCofidis0.3%1.4%6010.1%

Angle

The book's card — its favourites under our readings

Shortest book prices for the stage, with our blend win probability (and rank) under each scenario. 'free' = outside the excluded GC pool (top 9 on GC after stage 11), i.e. the type the peloton might let up the road.

RiderBook oddsDevigFull sprintReduced sprintBreak survivesGC status
Merlier Tim2.1032.4%45.2% (#1)36.3% (#1)1.6% (#6)free
Kooij Olav5.0013.6%30.2% (#2)33.1% (#2)3.4% (#3)free
Philipsen Jasper6.0011.4%24.3% (#3)24.8% (#3)5.1% (#1)free
Wærenskjold Søren15.004.5%1.8% (#11)1.9% (#10)1.6% (#7)free
Girmay Biniam17.004.0%4.1% (#6)10.3% (#4)1.2% (#9)free
Kanter Max21.003.2%4.2% (#5)4.5% (#5)3.5% (#2)free
Pedersen Mads34.002.0%2.4% (#8)3.4% (#8)2.1% (#4)free
van der Poel Mathieu34.002.0%1.2% (#14)4.0% (#6)1.8% (#5)free
Abrahamsen Jonas34.002.0%0.0% (#52)0.0% (#60)0.1% (#67)free
Asgreen Kasper41.001.7%0.2% (#27)0.1% (#40)0.2% (#33)free

After the stage

Results — won by Merlier Tim

PosRiderTeamFull sprint win pReduced sprint win pBreak survives win pHindsight (post-hoc) win p
1Merlier TimSoudal Quick-Step45.2%36.3%1.6%43.3%
2Kooij OlavDecathlon CMA CGM Team30.2%33.1%3.4%42.9%
3Philipsen JasperAlpecin-Premier Tech24.3%24.8%5.1%25.5%
4Girmay BiniamNSN Cycling Team4.1%10.3%1.2%8.3%
5Fretin MilanCofidis1.9%1.8%0.7%2.1%

Scenario scoring — probability given to the actual winner

ScenarioBlend win pBook devig
Full sprint45.23%32.44%
Reduced sprint36.33%32.44%
Break survives1.57%32.44%
Hindsight (post-hoc)43.31%32.44%

Reflection

What we make of it

The road picked the sprint — and, of the two sprint reads, the fuller one. Chalon-sur-Saône came down to a chaotic bunch gallop that Lidl-Trek spent the last 40 km trying to blow apart, Simmons, Vacek, Skjelmose and Pedersen attacking in relays to shed the fast men, only for it to knit back together for the kick. Tim Merlier took his third stage of this Tour from Olav Kooij and Jasper Philipsen, Biniam Girmay and Milan Fretin behind — the pure sprinters, not the hard-men the reduced read promotes, so the day landed nearer full_sprint than reduced_sprint. It was not clean: a crash inside the final kilometre put Fernando Gaviria and Jenno Berckmoes out of the race with broken collarbones and left Wærenskjold, Abrahamsen, Charmig and Godon on the deck but continuing.

Scored on the footing that compares with the book — each read renormalized over the field, since the raw blend totals 137% here and flatters the board above — this is the model's cleanest sprint of the Tour. full_sprint gave Merlier 33.1% against the book's devigged 32.4%: we agreed with the market on the favourite and he won. And the lean behind him, the one that has defined our sprint reads, paid a second straight day — we made Kooij 22.1% to the book's 13.6% and Philipsen 17.8% to its 11.4%, and they finished second and third, exactly as on stage 11. The difference from stage 11 is that this time the favourite landed too, so on win-log-loss we beat the market on the result rather than just matching it on the pool.

The hindsight run confirms course knowledge was not the constraint. Reconstructing the day from its finish curve — five flat bunch sprints at sprint ~0.90 — prices Merlier 28.2% and Kooij 27.9% renormalized, with the same top three, barely a step from the full_sprint read we published cold. A bunch gallop that regroups is a day-type the model already reads at book level; there was nothing structural it needed to have known. One method note for the record: FirstCycling's origin was returning 503 under Tour load the evening of the stage, so the full field gap-curve could not be archived and the finish shape was borrowed from stage 8 — Merlier's own near-identical chaotic gallop into a valley town — as the template; every near neighbour to a large-front-group sprint is itself a bunch sprint, so the reconstruction is robust to that choice.

Carry forward. (1) The intra-sprint edge over the book is now the most repeatable signal of the race: stages 11 and 12 both saw us over-weight Kooij and Philipsen against the market, and both times they filled the podium behind the winner — on stage 11 the model owned the pool and lost the win to a 34-1 lead-out, on stage 12 it owned the pool and took the win as well. (2) This is not the GT hard-day hole and does not pretend to be: a flat bunch sprint settled by pure speed, priced at book on the winner and above book on the placings — the sprinter's mirror of the stage-10 mountain day. (3) Attrition is the story now turning the Tour. Two more sprinters gone to the Chalon crash and several banged up as the race leaves the valleys for the Vosges — stage 12 was, in all likelihood, the last true bunch sprint for a while.