Every stage gets priced the morning before under several course readings, compared with the bookmaker's line, and settled against the result β with a reflection on what the model got right and why.
β System overview, season boards & the full race views Β· Post-race review: how the model's Vuelta went β
| Rider | GC gap | Outlook sees the race |
Pre-race blend | Book devig |
|---|---|---|---|---|
| Mas Enric | 0:00 | 65.8% | 8.6% | 82.9% |
| Roglic Primoz | +2:15 | 22.6% | 28.6% | 7.3% |
| Gall Felix | +2:44 | 1.1% | 13.1% | 4.1% |
| Kuss Sepp | +8:45 | 0.6% | 1.7% | 0.2% |
| Carapaz Richard | +6:54 | 0.4% | 3.7% | 3.3% |
| Onley Oscar | +9:28 | 0.3% | 10.6% | 1.1% |
Matthew Brennan won it, and the model out-priced the book on the winner by the biggest margin of the campaign so far. The 'hard men's sprint' base read made Brennan its outright #1 at 24.3% on the book-preserving head against a market that had him third-choice at 12.3% devig (5.50) behind Pedersen and van Aert at 3.50 each. It also had Pogacar #2 at 10.3% against 4.5% devig, and Axel Laurance #7 at 5.1% against 1.3% (51.0). Those three finished 1st, 3rd and 8th. Pedersen, the book's co-favourite, was 4th and sat 4th on our board; van Aert, its other co-favourite at 19.3% devig, was faded to 6.5% and came 22nd. On the two names where model and market disagreed hardest, the model was right in both directions.
The read of WHO would contest was close to exact; the read of HOW MANY was not, and that is the whole story of the day. The archived top-15 composition came back sprint .40 / rolling .27 / hilly .13 / time_trial .13 / mountain .07 β set that beside res_7's canonical signature (sprint .37 / time_trial .21 / hilly .16 / breakaway .14 / mountain .07) and the family and grade we keyed were essentially the right point in composition space. What we missed was group size: 41 riders finished on Brennan's time, 22.3% of the field, which trips the macro rule's 20% bar and routes the day to `bunch` before the residual analogs are ever consulted. Four riders the other way and the key scores exact. Tier-3 therefore records stage 2 as exact=False, covered=False, weight_on_true=0.00 (running 1/2, 1/2, mean 0.50) β an honest miss on the scoring rule, but a miss of shape by four bodies, not a miss of archetype. It is a live instance of the menu's own stated asymmetry: composition is roughly twice as forward-predictable as finishing-time shape (r .739 vs .452), and this is what the .452 half feels like.
The retrieval channel did exactly the thing it was built to do and also paid exactly the price it was warned to pay. It promoted Pau Miquel from production rank 17 onto the published board at 11 β and Pau Miquel finished SECOND at 101.0. That is the retrieval-only architecture earning its keep in public: a rider the untouched production ranking left outside the top 15 was surfaced by the key, priced by the unmodified heads, and ran second. But the same key dropped Onley (9th) and Tulett (11th) to make room, so the day-menu board held 7 of the actual top 15 against the production board's 8. Net pool retrieval was one worse. The mechanism is the same mis-sizing as above: keying a fractured finish sheds climbers, and in a bunch that arrived 41-strong the climbers did not get shed. Prices were structurally untouched throughout, as gate 6 promises β the cost landed entirely in pool composition, which is the only place it can land.
Carry-forward. (1) The `bunch`/res_7 boundary is the live risk on this race, not the family question β on a Vuelta full of drag finishes we will keep landing near the 20% line, and the honest response is to keep keying composition and accept that shape-driven macro routing will sometimes overrule a correct read rather than to start hedging keys toward `bunch` for scoring cosmetics. Menu v1 stands; this is a scoring-rule interaction, not evidence of item drift. (2) The pre-registered gc_day worry did NOT materialise β the oracle routed on group size, not on the prologue-contaminated GC top-10 β so that caveat can be retired for flat days and kept only for genuinely selective ones. (3) The model's three worst calls were Laporte (#3 at 8.8%, finished 57th), Turner (#6, 113th) and Meeus (#8, 129th): all three are riders whose case rested on being fast in a group that stayed together, and all three were simply not there at the end. Watch whether Laporte in particular keeps being over-ranked on drag finishes now that his stage-1 form reading is carrying weight.
STAGE CANCELLED β no result, and no verdict on this read. Riders were stopped by a heavy downpour and then a hailstorm on the Col de Mont-Louis with roughly 15 km left, took shelter, and the stage was abandoned on safety grounds before anyone reached Font-Romeu. The general classification stands exactly as it did in Manosque: Pogacar in red, van Aert +9s, Brennan +10s. The race resumes with stage 4 around Andorra la Vella.
The boards below were run and logged before the start and are preserved unchanged, but they are a prediction that never got tested β nothing here should be read as a hit or a miss. `score_day_keys.py` correctly declines to score a result-less stage, so the day key `{gc_day: 0.75, res_2: 0.25}` is NOT counted against the tier-3 record; the campaign scorecard stays at 1/2 exact over stages 1 and 2. That is the right behaviour and needed no intervention: the oracle labeller is driven off archived results, and there are none.
One thing the cancellation does carry forward. The reasoning that set this key β GC so compressed that no break is genuinely free β was written on standings that are now three days old and still unchanged, because no climbing has been raced. It therefore applies with MORE force to stage 4, not less: the field arrives in Andorra having done two flat-ish days, a 4-hour cancelled effort in the legs, and still no separation whatsoever between the GC men. Stage 4 inherits both the argument and the compressed standings intact.
Pogacar rode away and won alone by 2:39, and the base read did not just call the winner β it called the whole GC group in order. 'GC reckoning' had Pogacar at 63.4% against a book that already made him a 1.33 favourite (49.0% devig), and its top seven finished 1st, 4th, 3rd, 7th, 6th, 8th and 9th. Onley, Gall, Roglic, Mas, Carapaz and Skjelmose were ranked 2-3-4-5-6-7 and came home 4-3-7-6-8-9. Six of the seven were priced above the book, several by multiples: Gall at 4.3% against 1.9% (34.0), Roglic 2.7% against 1.0% (67.0), Mas 2.6% against 1.0% (67.0). On a day the market thought it understood, the model's ordering of the contenders behind the favourite was close to perfect.
The pre-registered disagreement resolved emphatically in the model's favour. The book's second and third choices were Vine (8.0, 8.1% devig) and Fortunato (13.0, 5.0%) β Andorra-local and break-specialist prices the model refused to pay, rating them 9th (1.0%) and 17th (0.5%) and never getting them above 2.1% and 0.9% even on its own break board. Vine finished 11th, Fortunato 40th; the other two break cards, Paret-Peintre and Castrillo, came 146th and 120th. The escape never mattered. That is a real point for the model on a hole we had flagged against it: the GT hard-day gap is about not being able to see WHO makes a break, and here the correct answer was that break membership was worth nothing, which is exactly what a rider-quality model defaults to. One clean day is not a refutation of the hole β it is evidence that the default is not always the expensive error.
The key scored exact β but only after a bug fix, and the bug is the more important finding. `score_day_keys.py` initially labelled the day `res_2` and marked our 0.6 gc_day read a miss. The cause: `morning_gc_ranks` sourced the morning classification from the archived race-page standings, and mid-race FirstCycling's race page serves only the DNF board β every row place='DNF', so the digit filter dropped all of them and returned an empty map. An empty map silently disables the gc_day branch of the oracle, meaning EVERY GC day for the rest of this Vuelta would have fallen through to a residual item and every gc_day key would have scored zero. Patched to fall back to the newest per-stage `results/stage_NN/gc.csv` (the classification parsed off the stage page), the same source `build_stage_page.standings_pool_ids` already uses. Re-scored: oracle `gc_day`, exact=True, weight 0.6. Stages 1 and 2 re-scored unchanged β they route on `itt` and `bunch` before the GC test β so the campaign record is 2/3 exact, 2/3 covered, mean weight 0.53.
Two names beat every board, and the post-hoc run says course knowledge would not have found them. Jarno Widar was 2nd at 101.0 (model #14, 0.5%) and Gregor Muhlberger 10th at 501.0 (model #36, 0.2%); neither was in any pool. The hindsight scenario β references rebuilt from the day's actual shape, a lone winner clear of a GC group by two to four minutes β moved both DOWN, Widar to #19 and Muhlberger to #44, while leaving the leaders essentially where they were. So feeding the model the true finish structure sharpened nothing and cost a little: it is the stage-17 lesson from the Tour again, that matching on how the day ENDED imports a selection story that does not identify the individuals who happened to be there. The retrieval channel was neutral on the day β 10 of the actual top 15 on the day-menu board against production's 10 on the base read, +1 on the break board β which is the expected result when the key is right and the pool is genuinely the GC group.
Carry-forward. (1) The `--all` flag is now mandatory for the daily results capture: the walk stops at the first stage with no results, and cancelled stage 3 is permanently empty, so a default run archives nothing for the rest of the race. Tonight's first capture silently found nothing before the flag was added. (2) GC has finally separated β this is the first day the standings carry climbing information, so `exclude_top_gc` cuts become meaningful from here and should be re-derived nightly rather than inherited. (3) Almeida finished 115th at +22:45 and Uijtdebroeks last at 26 minutes; the model had Almeida in its pool and Uijtdebroeks at #11. Both are riders whose form reading is now clearly stale, and the live-form re-aging should pick that up from tomorrow.
Brennan won again, and the base read called the finishing order at the top exactly: 'versatile sprint' had him #1 at 47.7% against a book that already made him a 1.85 favourite (35.9% devig), and Jordi Meeus #2 at 9.9% against 5.1% β they finished first and second. Two stage wins in four racing days for a twenty-year-old, and the model has been ahead of the market on him both times. Behind them the board stayed useful rather than perfect: Laporte #5 finished 6th, Laurance #8 finished 5th, Dainese #9 finished 7th, van Aert #3 finished 10th.
The shape revision was right, and it is worth being precise about how right. I keyed 0.35 on `bunch` against the runbook's stage-2 policy of pure-composition keying, on the argument that stage 5 was easier than stage 2 in every dimension that drives group size. The road agreed emphatically: 89 riders finished on the winning time, 48.9% of the field β not merely over the 20% macro bar but two and a half times stage 2's 22.3%. Alto de Pauls cost the bunch essentially nothing. Tier-3 records exact=False, covered=True, weight_on_true=0.35, which is partial credit where stage 2's composition-pure key scored zero. Campaign record now 2/4 exact, 3/4 covered, mean weight 0.49. If anything the honest verdict is that 0.35 was still too timid β but the composition half was also vindicated, since the winner was a versatile fast man and not a pure sprinter, so the mixed key was reading the day correctly on both axes and merely under-weighting one.
The post-hoc run says, for the third stage running, that knowing the true shape would not have helped. Rebuilt from five days whose winner-group PROPORTION matched the actual 48.9% β deliberately disjoint references from the pre-race set β the hindsight board is nearly identical at the top (Brennan 45.6% vs 47.7%, Meeus 11.2% vs 9.9%) and found none of the surprises: Albanese, 3rd at 201.0, moved from #29 to #31; Romele, 4th at 81.0, stayed at #63. Pool retrieval got WORSE, 7 of the actual top 15 against the pre-race board's 8. That is now a robust campaign finding rather than an anecdote β stages 4 and 5 both say the same thing the Tour's stage 17 said, that reference-matching on how a day ENDED imports a selection story without identifying the individuals who were there.
The retrieval channel had its best day yet, and by the same mechanism as stage 2. The day-menu board held 8 of the actual top 15 against the production board's 7: it promoted Pau Miquel, who finished 11th, and dropped Pogacar, who finished 49th. That is the second time this race the channel's promotion has been Pau Miquel and the second time he has justified it β 2nd in Manosque, 11th here. Across the four scored stages the ledger is now stage 2 β1, stage 4 level (+1 on the break board), stage 5 +1: roughly neutral overall, with the wins concentrated exactly where theory says they should be, on days whose key is a composition the production ranking under-weights.
Two names to carry forward, in opposite directions. Mads Pedersen was the model's #4 (4.7%) and the book's third choice (7.4%) and finished 156th; Ben Turner was #6 and finished 171st. Both simply stopped β a bunch that keeps half the field together does not shed riders to 156th by attrition, so this reads as riders sitting up rather than being dropped, which no board can price. Against that, Christophe Laporte was the flagged watch item after Manosque (#3 on the board, 57th on the road) and this time delivered 6th from #5, so that particular over-ranking concern is answered. The open question the stage-5 result sharpens is Pedersen's condition, not the model's read of him.
Pogacar won again and the break never mattered β Bartolo's gravel was enough, and the 20.6 km of descent and flat that were supposed to make a GC attack unprofitable simply did not. He and Enric Mas came in together, a five-man group of Debruyne, Carapaz, Tejada, Gall and Roglic followed at 46 seconds, and only twelve riders finished within two minutes. That is his third win in five raced stages.
The key was wrong in the same direction as the day's headline: I keyed res_2 at 0.65 and the oracle returned gc_day (covered, weight 0.35). More importantly it completes a pattern the archive now makes impossible to ignore. Across the four judgment stages of this race the oracle has landed on a MACRO item every single time β bunch, gc_day, bunch, gc_day β and never once on a residual analog. On three of those four I put the macro in the minority: st2 res_7 .55 (oracle bunch, scored 0.00), st5 bunch .35 (oracle bunch, 0.35), st6 res_2 .65 (oracle gc_day, 0.35). The only stage where I made the macro the majority, st4 at gc_day .6, is my only exact. Four for four is a small sample, but the direction is consistent and the mechanism is intelligible: I have been pricing the interesting branch over the boring one. Campaign record 2/5 exact, 4/5 covered, mean weight 0.46. From stage 7 the standing correction is to start from the macro and require a positive reason to demote it, rather than starting from the residual analog and asking whether the macro might also happen.
The book made the same error, far more expensively, and the model did not. The market's card behind Pogacar was a break card β Tulett 12.0, Johannessen 12.0, Fortunato 17.0, Vine 19.0, Bisiaux 23.0, Bilbao 26.0 β and NOT ONE of them finished in the top twenty. Vine was 54th, Johannessen 36th, Bisiaux 30th, Torres 40th, Bilbao 74th, Tulett 105th, Fortunato 119th. The model had refused the entire card, rating them #7 to #24, and it was right for the second consecutive test. Combined with stage 4 that is now two clean wins for the rider-quality default over paid break membership, and it sharpens yesterday's refinement: the GT hard-day hole is real but narrow, and on these Vuelta stages the expensive error has consistently been the book's, not the model's.
The retrieval channel paid the predicted price for the wrong key. The res_2-leaning boards held 8, 7 and 8 of the actual top 15 against the production board's 9; only `gc_attack`, keyed gc_day at 0.9, matched production at 9. That is gate 6 behaving exactly as specified β a wrong key costs pool composition and cannot touch prices β and it is the cleanest in-race demonstration of it so far, because the four boards differ ONLY in their keys and cuts while sharing the same heads. Running ledger across scored stages: st2 β1, st4 level, st5 +1, st6 β1.
Two caveats on yesterday's satellite discussion, now that the road has answered. The `uae_satellite` scenario was the right analytical object β the base read's top-15 cut genuinely did exclude riders who were free β but it made no difference to the outcome, returning an identical board to `mountain_break` because the cut only changes the conditional column, not the model's prices. And the underlying thesis did not get tested in the direction hoped: UAE did not sit up, Pogacar raced, and Vine finished 54th. The satellite reading remains live for stage 7 β Vine is now 19th at +14:45 and genuinely free, and the book still makes him its clear second choice at 7.50 β but stage 6 offered no evidence for it, and the cleaner lesson of the day is that a team with the strongest rider in the race has not yet shown any intention of giving stages away.
Andreas Leknessund won alone from the escape, Uno-X went one-two with Johannessen at 34 seconds, van Aert took third at 47, and the GC group finished between 19th and 30th, nineteen minutes down. The break was conceded completely. This was the model's worst day of the campaign by a distance: the winner sat at #41-45 on the three boards at 0.1-0.4% against a book price of 151, and pool retrieval was 2, 4 and 2 of the actual top 15 against a production board that managed 1.
The key was wrong, and the way I got it wrong is the useful part. I keyed gc_day at 0.6 and the oracle returned res_2 (covered, weight 0.40). Two of my three stated reasons were sound and one was not. The summit-finish geometry argument β that removing the descent removes the reason a GC attack gets neutralised β turned out to be simply false here: a summit finish is not a reason the peloton chases, it is only a reason the chase would work if anyone wanted one, and nobody did. The market-has-been-wrong-twice argument was fair but was itself a two-sample claim. The third reason was the bad one: I corrected toward the macro item because it had won four judgment stages in a row, and a four-sample streak is not a prior. That correction fired on precisely the stage that broke it. The honest conclusion is not to swing back β it is that macro-frequency is not the right instrument at all, and the key should be driven by whether the peloton has a REASON to chase, which on stage 7 it plainly did not: Pogacar had three wins and 3:34 in hand, and the podium contenders were watching each other. Campaign record 2/6 exact, 5/6 covered, mean weight 0.45.
The break-card ledger has to be rewritten, and in the book's favour. After stages 4 and 6 the record read as two clean wins for the model's refusal to pay for escape membership; stage 7 is a clean win for the market. Its 19.0 shot Johannessen finished 2nd, its 15.0 shot Bisiaux 9th, and Paret-Peintre at 41.0 came 11th β all riders the model had at #8, #17 and #27 on its own break board. The market's card was still half wrong (Vine 85th at 8.5% devig, Fortunato 66th, Buitrago 92nd, Tulett 48th), so this is not a rout, but three tests now stand at two-one to the model rather than two-nil, and the one it lost it lost badly. The GT hard-day hole is exactly what it says on the tin: the model cannot represent 'this rider will be in the move on a day the bunch concedes', and on a day the bunch concedes completely that is the only thing that matters.
The retrieval channel had its best RELATIVE day of the campaign on the model's worst absolute one. Against a production board that found 1 of the actual top 15, the day-menu boards found 2, 4 and 2 β and the +3 came from `mountain_break`, the scenario keyed res_2 at 0.85, which is the item the oracle went on to assign. That is the retrieval-only architecture doing the one thing it was built for: when the composition of the front group is unlike the production ranking's default, the key moves the pool toward it. It also sharpens what the channel is for. On stages where the front is the obvious strong group it is worth roughly nothing (st4 level, st6 β1); on the day the front was made of riders the production ranking had no reason to surface, it quadrupled the retrieval. Running ledger: st2 β1, st4 level, st5 +1, st6 β1, st7 +3.
Carry-forward. (1) Replace the macro-frequency prior with a chase-incentive test: before keying, ask who specifically has a reason to spend, and price res_2 up when the answer is nobody. On stage 7 the answer was visibly nobody and I keyed against it anyway. (2) Van Aert finishing third from the move on a 3,572 m summit-finish day is a form signal worth carrying into the flat stages β the model had him #33 here. (3) The GC is now effectively decided at the top: Pogacar took no time from anyone, and the whole podium group finished together, so the standings still separate exactly as they did after CastellΓ³n.
Bryan Coquard won a 148-rider mass sprint ahead of Mads Pedersen and Jordi Meeus. The crash and PogaΔar's subsequent retirement defined the stage: the principal terrain feature was neutralised and the race reached Xeraco as the broad gallop the morning base case expected, though by an exceptional route rather than by ordinary control.
The official key was right. The oracle returned `bunch` from a mass-sprint finish with 148 riders on the winning time, 85.5% of the classified field; the morning read put 0.60 on `bunch`, so stage 8 scores exact and covered with weight-on-true 0.60. The campaign record moves to 3/7 exact and 6/7 covered, with mean weight 0.47.
The board read the macro shape better than the winner. The bunch scenario made Meeus #1, Brennan #2 and Pedersen #4; they finished third, tenth and second. Coquard was a near-pool miss at #19 on the production board and #16 on the day-menu board, priced at 1.5% against the book's 1.0% devigged line at 67.0. The top-15 retrieval count was 6 for the keyed board against 7 for production: the key cost one place on a day whose front already resembled the production sprint ranking.
Perfect finish-shape knowledge did not improve the result. The no-log hindsight profile, built from five broad pure sprints with winning groups around 85% of their fields, still placed Coquard #19 on production and #19 on the keyed board at 1.2%; it retrieved 6 of the actual top 15 against production's 7. This is the sixth consecutive post-hoc run that failed to add value: once the correct broad scenario was already represented, the remaining miss was rider ordering rather than course reading.
The hard-men branch was decisively wrong once the climb was neutralised: it placed Coquard #137 and centred PogaΔar, Pedersen, van Aert and Brennan. That is not evidence against its terrain premise because the terrain was removed from the race, but it is evidence that the settled page must record disruptions explicitly rather than treating every result as an ordinary test of the course read.
Carry forward: PogaΔar is DNF and must disappear from every live-state and GC output after stage 8. Enric Mas inherits the race lead, with RogliΔ at 1:00 and Gall at 1:11. Tomorrow's Aitana stage is therefore a genuine contest for an open GC rather than another day controlled by a leader already three and a half minutes clear.
Enric Mas won at Alto de Aitana and took the race lead, with Oscar Onley on the same time, Roglic at 12 seconds and Gall at 18. The GC group came apart exactly as a summit finish on an open classification should make it: a winning group of two, 18,640 seconds of racing, and the oracle returned gc_day on the tiny_group rule.
The key was exact at full weight β the first time this campaign the macro item was keyed at 1.0 and the road agreed. This is the stage-7 correction working as intended: start from the macro item and demand a positive reason to demote it. On stage 7 the chase-incentive test said nobody had a reason to spend and I keyed gc_day anyway; here four men were separated by 2:20 with a summit finish in front of them, so the incentive was real and the macro was right. Scorecard moves to 4/8 exact, 7/8 covered, mean weight 0.54.
The board's retrieval was the best of the campaign. `aitana_shatters` put the actual top four β Roglic 8.4%, Gall 7.9%, Onley 6.6%, Mas 4.4% β in its own top four, in a different order (they finished 3, 4, 2, 1). Getting the quartet without the ordering is precisely what these heads are for; the ordering inside a four-man summit-finish group is close to a coin toss. The cohesive-group branch was slightly worse, dropping Mas to #7 at 2.7%.
The book had a bad day and the model had a good one. Gall was the favourite at 2.60 (24.8% devig) and finished 4th; the winner Mas was only its third choice at 6.50 (9.9%). More striking, its second favourite Jay Vine at 4.75 β 13.6% devig β finished 119th. That is the second consecutive stage where the book's price on Vine has been badly wrong (85th at 8.5% devig on stage 7), and it moves the break-card ledger back toward the model after stage 7 handed the market a clean win.
The retrieval channel earned its keep again: the keyed kernod board held 10 of the actual top 15 against production's 9 on the shatters scenario and 10 against 8 on the cohesive one. Ledger across scored stages: st2 -1, st4 level, st5 +1, st6 -1, st7 +3, st9 +1/+2.
The GC heads now disagree in a way that is worth recording. Against a book reading Mas 33.3% / Roglic 30.6% / Gall 15.3% / Onley 10.9%, the state-aware outlook head returns 33.9% / 29.7% / 4.2% / 2.1% β it matches the market almost exactly on the two leaders and then collapses on the chasers, while the blend does the opposite, putting Mas at 7.5% behind Roglic, Onley and Gall because the main heads never see the standings. Neither head is right alone: the outlook knows who is winning and over-concentrates, the blend knows who is good and ignores the race. This is the clearest in-race evidence yet for the dedicated-GC direction β a corrector over the shared board rather than either head on its own.
Carry forward. (1) Pogacar's stage-8 abandon has turned a procession into a four-man race and every downstream output now has to be read on the new classification, not the old one. (2) Rest day 2026-08-31; stage 10 is 2026-09-01, a reduced hilly sprint where the book leads Brennan 2.75, van Aert 4.00, Pedersen 7.00 and then falls off a cliff to Meeus at 19. (3) The chase-incentive test is now 1-for-1 since it replaced the macro-frequency prior β keep applying it rather than counting macro streaks.
Bastien Tronchon won from a 68-rider group β 40% of the field on the same time β with Cort 2nd, Nys 3rd and van Aert 4th, while the three fastest men in the race finished 90th, 111th and 163rd. The day key scored EXACT: keyed bunch at 0.50 against an oracle of `bunch`, with the winner group comfortably over the macro bar. The board was another matter entirely. 'Bunch sprint' had Brennan #1 at 63.3% against a book price of 24.7% and he came 90th; Meeus #2 finished 111th, Pedersen #5 finished 163rd. Only van Aert, #3 at 6.7% against a 17.0% book, was anywhere near right at 4th.
This is the exact mirror image of stage 2, and putting the two side by side is the most useful thing this race has produced about the menu's two axes. At Manosque the composition read was near-exact β realized shares sprint .40 / rolling .27 / hilly .13 / tt .13 against res_7's canonical .37/.21/.16 β and the SHAPE was wrong by four riders over the 20% bar, so the key scored zero while the board went 1-3-4-8 through its top seven. Here the shape was right and the COMPOSITION was wrong: realized shares came back sprint .40, mountain .20, time_trial .27, hilly .07 β a fast-finisher-power signature much closer to res_1 (.24/.21/.17/.17) than to anything a `bunch` key surfaces β so the key scored exact and the board was a disaster. The two axes are genuinely independent, this race has now produced a clean error of each type, and the tier-3 number captures only one of them. A key can be exact and the board still worthless.
The retrieval channel said so at the time, and we did not listen to it. Of the three boards, the one that retrieved best was `hills_stick` β the most selective read, 5 of the actual top 15 against production's 3 β while the base `bunch_sprint` board managed 2/15 against production's 2. The channel's ordering across the three scenarios was a live signal that the front group would not be a sprinters' group, and it pointed the right way before the stage. Running ledger: st2 β1, st4 level, st5 +1, st6 β1, st7 +3, st10 base level / selective +2.
A process failure worth recording plainly. This config was written on the rest day and its own note called the key PROVISIONAL, to be confirmed on Tuesday morning against the road book and a fresh odds capture before standing as the tier-3 archive entry. That confirmation never happened β the odds attached are the rest-day snapshot from 30 August, and no capture was taken on the morning of the stage. The key scored exact anyway, which is luck rather than vindication: the boards were run against two-day-old prices on a day when the market had moved. Any key written before the road book is available must be re-run in the morning, or it should not be treated as the archive entry.
Race context. Pogacar abandoned on stage 8 while leading by 3:34, so the Vuelta now has a real GC: Mas leads, Roglic at 1:18, Gall 1:39, Onley 2:20, Carapaz 3:26. That changes the incentive landscape the chase-incentive test depends on β for the first time this race there are four teams with something to defend and something to gain, which should make transitional stages more controlled and breakaway days harder to come by than they were while one rider had the race in hand.
Brennan won again from a 96-rider bunch, 57% of the field, and the base board called it cleanly: he was #1 at 65.7% against a 34.2% book, Meeus #2 finished 3rd, van Aert #3 finished 5th. The key scored EXACT at weight 0.65 β the highest weight-on-truth of the campaign after stage 1 β and the campaign record moves to 6/10 exact, 9/10 covered, mean 0.55.
The stage-10 lesson was applied and it worked in both directions. Yesterday's failure was a correct SHAPE key with a wrong composition: a big group arrived and the sprinters were not in it, realized shares sprint .40 / mountain .20 / time_trial .27. So this key kept bunch as a clear majority but moved the residual weight to res_3 (survivor gallop) and res_1 (the stage-10 repeat) rather than res_7, explicitly pricing the possibility that Aledo's twenty-minute drag in 35Β°C would grind the fast men out again. It did not: realized shares came back sprint .60 / mountain .13 / hilly .13 / tt .13, a textbook res_3 composition, and the sprinters were all present. Getting the composition question right mattered as much as the shape one β the same 0.65 bunch weight with res_7 filling the remainder would have produced a materially different board.
The retrieval channel again ordered the scenarios correctly, which is now a repeatable observation rather than a one-off. `sprinters_ground_out` β the most selective board, built from hilly days won by puncheurs from large groups β retrieved 8 of the actual top 15 against production's 5, while the two sprint-flavoured boards tied production at 7/15. On stage 10 the same pattern held (selective board 5/15 vs production 3/15) and the day went the selective way; here it held and the day went the sprinters' way. So the signal is not 'the selective board wins' but 'the selective board's key surfaces riders production's ranking systematically under-rates', which pays off on retrieval regardless of which branch the road takes. Ledger: st2 β1, st4 level, st5 +1, st6 β1, st7 +3, st10 level/+2, st11 level/+3.
Where the board still missed: Coquard finished 2nd at 12.0 and sat #12 at 0.7%, Cort 4th at 17.0 and #25, Tronchon 7th and #29, Romele 8th and #42. Those are four of the top eight the model had essentially nowhere, and three of them (Cort, Tronchon, Romele) were the same names that filled the front of stage 10. There is a small group of riders on this Vuelta who keep finishing in the front of reduced-to-large groups and whom the model does not rate; with Pogacar, Groves and Turner gone and seventeen abandons, the field's effective depth has changed faster than the rider-quality features can track.
Race context going into the mountains. Mas holds red from Roglic at 1:18, Gall 1:39, Onley 2:20, Carapaz 3:26, Skjelmose 3:55, Kuss 4:09, Tejada 4:39 β four teams with a genuine claim on the podium and one, Movistar, obliged to defend. Pedersen abandoned during stage 11, taking another of the fast men out.
The break won and the model missed the winner, but this was a far better day than Valdelinares. Jakob Omrzel β twenty years old β went clear and held 1:56 on Berrade and 2:13 on Buitrago, with Mas the first GC man home in 6th at 2:56, taking 27 seconds out of Roglic, Gall and Carapaz. The boards had Omrzel at #23-25 (1.0-1.1%) and Berrade at #57-62, so the podium of the stage was not found. What the model DID get right was everything behind it: on 'mountain break' Roglic was #1, Gall #2, Carapaz #4 and Mas #6, and they finished 8th, 7th, 9th and 6th. Pool retrieval was level with production on all three boards (6/6, 7/7, 6/6), which is the honest verdict β the key neither helped nor hurt on a day whose front was half escape and half GC.
The key scored covered at 0.45, and the reason it was not exact is a labelling artifact worth recording. By any human reading this was a mountain escape: a breakaway rider soloed, the GC group conceded three minutes, and the realized top-15 composition came back mountain .47 / rolling .40 / time_trial .13 β a pure climbers' front that sits close to res_2's canonical mountain .42 / tt .24 / rolling .20. But Omrzel happened to sit 10th on GC overnight at +8:05, so the oracle's 'winner inside morning GC top-10' clause fired and stamped the day gc_day. This is the inverse of the stage 2-4 problem: back then the GC top-10 was contaminated by sprinters who would never contest a mountain; now it is contaminated by a breakaway rider who banked time earlier in the race and is, functionally, still a break rider. The composition half of our read (res_2 at 0.55) was correct and the score does not credit it.
The chase-incentive test was right that the GC teams would race, and wrong about what that would buy them. Going in, the argument for holding gc_day at 0.45 was that four teams had a live claim on the win and Movistar were obliged to defend β the most incentive this Vuelta has had. They did race: Mas attacked and took 27 seconds on his three nearest rivals, which is a real GC day inside the stage. But the escape had gone up the road on the early slopes and the racing behind never threatened it. The refinement the day suggests: chase incentive predicts whether the GC group RACES, not whether the break is CAUGHT. Those are different questions, and on a 4,568 m day with the climbing starting at km 7.7, the second one is mostly settled before the first one starts.
The parcours read held up in its specifics. The final climb's irregular upper half did limit the damage β the GC selection was 27 seconds, not minutes, exactly the 'less room for a big explosion' the pre-race note argued for, and much less than Aitana produced. Mas is now 1:45 clear of Roglic with Gall at 2:06 and Carapaz 3:53; the state-aware GC outlook head has him at 47.0% against Roglic 27.0%, essentially unchanged from before the stage despite the day going his way.
RETROSPECTIVE ONLY β no prediction was made for this stage. The daily cycle was missed on 4 September: no odds were captured, no key was logged, no boards were run before the start. There is therefore nothing here to score and nothing to claim. The oracle labelled the day anyway (res_2, tiny_group, winner group 2), because oracle labels build the settled-stage corpus whether or not we keyed the day, and the tier-3 record stays at 11 keyed stages β 6 exact, 10 covered, mean weight 0.54.
What happened: Wout van Aert beat Valentin Paret-Peintre for the win, with a group of five β Brennan, Widar, Albanese, Fisher-Black, Vermaerke β at 24 seconds, Bisiaux at 28, and thirty riders inside a minute. The realized top-15 composition came back mountain .33 / rolling .33 / hilly .20 / time_trial .13: a mixed punchy front rather than a pure climbers' one, which is why the oracle's residual assignment landed on res_2 with res_4 as its nearest neighbour. Van Aert has now been 3rd at Valdelinares from the move, 5th at Lorca in the bunch, and a winner here β the form signal flagged after stage 7 has kept paying.
The post-hoc board is the weakest artifact in this campaign and should be read as such. It has no book columns at all (no stage-13 market was ever captured, so there is no market comparison for this day), its live-form features are as-of 4 September rather than the morning of the stage, and it has already seen stage 12. It puts van Aert 6th at 1.3% on the day's true profile. Given that four consecutive genuine hindsight runs have failed to add value over the pre-race board, a hindsight run with no pre-race board to compare against tells us close to nothing β it is logged for corpus completeness, not as evidence.
Two process fixes came out of writing this up, and both are worth more than the retrospective itself. (1) `score_day_keys.logged_key` falls back to the FIRST scenario carrying a day_key when the config root has none β so a post-hoc file containing only a hindsight scenario would have had that key promoted into the tier-3 archive and scored as a fabricated exact. Configs written after the fact now carry `post_hoc: true` and the scorer refuses to read a key from them. Verified: stage 13 stays unkeyed. (2) `predict_stage_scenarios.load_book` required both `odds_capture` and `event_id` and raised without them; it now returns an empty book instead, so a backfill board for a day whose market was never captured runs cleanly with empty book columns rather than crashing.
The lesson for the campaign is operational, not modelling: a missed day cannot be recovered. Stage 12's boards existed and could be judged; stage 13's cannot, and no amount of after-the-fact reconstruction changes that. The tier-3 archive is only worth what its discipline is worth.
The escape won for the third time in four mountain stages, and it won in the one way the morning read had argued against. Marco Brenner took Tudor's first Grand Tour stage from a 44-rider break, beating Santiago Buitrago by a second after the Colombian had attacked on the steepest section and been reeled back as the gradient eased; Cristian Rodriguez was third at 11 seconds and Ivan Sosa fourth at 14. The first GC riders home β Mas and Gall, together β were 21st and 22nd at 4:12. The oracle labelled the day res_2 (winner group of two, realized front a climbers' escape, first GC man outside the front five), and the key of gc_day 0.6 / res_2 0.4 scored covered at 0.40. The tier-3 record stands at 6/12 exact, 11/12 covered, mean weight 0.53.
The terrain half of the read was right and the oracle does not credit it, which is now the campaign's recurring shape on mountain days. The Pandera did exactly what the road book promised: Mas attacked at 2.7 km to go and dropped Skjelmose, Roglic accelerated inside 1.5 km and could not shed him, and the classification moved β Roglic lost 25 seconds and drops to third behind Gall, Carapaz lost 31, Onley 1:15, Skjelmose 1:17. A 'shattering instrument' is precisely what the finish proved to be. But the oracle labels the day by who wins, not by what happens behind, and the escape had seven minutes at the foot of the climb. The morning note's own sentence β 'chase incentive predicts whether the GC group RACES, not whether the break is CAUGHT' β was the right refinement; the mistake was drawing the wrong conclusion from it.
The launchpad argument was the specific error, and it is worth naming so the next read does not repeat it. The case for gc_day at 0.6 rested on a structural difference from Calar Alto: there the climbing began at km 7.7, here the first categorised climb came at km 80, so a break would have far less road in which to build a defensible lead. That was true and irrelevant. The break did not need the climbs to build its lead β it went in the opening kilometres on flat roads and was allowed seven minutes because of who was in it: forty-four riders with every team represented, UAE sending Almeida, Vermaerke and Oliveira, and Movistar β the leader's own team β placing Castrillo and Garcia Pierna in it. Once the red jersey's team has two men up the road, the chase-incentive question answers itself: Movistar will not chase their own satellites, and Red Bull and Decathlon needed to attack Mas, not close a gap for him. A launchpad check measures where a break can extend a lead; the size and composition of the move, and whether the leader's team is in it, decide whether it gets one at all. Applied properly, the incentive test pointed to res_2 by lunchtime, and the market β which had 60% of its probability outside the GC top-10 and Buitrago second choice at 9.9% β had read it right.
Where the retrieval channel did its job was, again, on the branch board rather than the official one. The 'mountain break' board, keyed res_2 0.85 with the GC top-10 cut, surfaced five of the actual top 15 inside its pool of fifteen against the production board's two β Paret-Peintre #6, Nordhagen #4, Zana #7, Buitrago #12, Almeida #13 β while the official 'GC showdown' board managed two against one. Buitrago, the market's second choice, sat #12-19 across the boards at about 1.1%, and Brenner β a 101.0 shot on the book at 0.3% β was #22 on the break board and #41-50 elsewhere; Sosa was #33-42. That is the same break-membership wall as Valdelinares and Calar Alto: the model can rank the climbers who might be in a move, but nothing it sees tells it who will be, and a 44-man escape makes the pool almost the whole peloton minus the top ten.
The hindsight board, built on five escape-won mountain days and keyed res_2 outright, is the seventh consecutive post-hoc reconstruction to fail to beat the morning read on the winner. It retrieves the same five of the top 15 that the 'mountain break' board found prospectively (production: one), moves Paret-Peintre to #4 and Buitrago to #11, and still leaves Brenner at #25 and Sosa at #23 at 0.3% each. Better course knowledge would not have found them; they were found by being in a 44-man move, which is not a thing the model sees.
The race state going into the last week. Mas leads Gall by 2:06 and Roglic by 2:10, Carapaz at 4:24, Onley 5:44, Omrzel 6:14, Skjelmose 6:49, and Cristian Rodriguez climbed to 8th at 7:01 from the break. The book has effectively decided β Mas 1.20 (69.5% devig), Roglic 6.00, Gall 9.00 β and the two GC heads have moved further apart rather than closer: the state-aware outlook has Mas 34.5% / Roglic 26.2% / Gall 3.0%, still concentrated on the two men it decided were the race before Gall had shown himself, while the blend has Roglic 29.6% / Gall 17.9% / Onley 16.1% / Mas 8.6% because it never sees the standings. Neither is within twenty points of the market on the leader. Five more riders left the race β Busatto, Lutsenko, MΓΌhlberger, Sentjens and Sivakov β leaving 150.
The break survived and the official read did not see it coming. Wout van Aert won his second stage in three days from a five-man escape β Romele second, Nys third, Debruyne and Leknessund two seconds back β with the peloton at 58 seconds behind Covi, Cort and Brennan at 1:47, and the GC group together at 2:44. The oracle labelled the day res_4, a punchy front from a tiny group, and the key of bunch 0.55 / res_3 0.30 / res_1 0.15 was not covered at all: the first family miss of the campaign since stage 7. The tier-3 record stands at 6/13 exact, 11/13 covered, mean weight 0.48.
The same-race sprint ledger β five of five sprint-flavoured stages had come back `bunch` β was the argument, and it was falsified on the sixth. What the road book comparison could not see was who would ride Artafi and why. The morning note named the mechanism almost exactly ('a 5.5% climb 36 km out on a short, hot stage is exactly where a fast climber's team might ride to shed the last of the pure speed') and then weighted it into res_3, a reduced sprint, rather than an escape. Visma did ride it, but not to set up a smaller sprint for Brennan: they rode it to launch van Aert, who bridged to Leknessund and Debruyne at the intermediate sprint and never looked back. The same team held the sprint favourite and the strongest escape candidate, so the chase-incentive test returned 'controlled' β Visma twice over β when the honest answer was that Visma could win either shape and would choose the harder one on a 40Β°C day fifteen stages in. When one team owns both the fastest man and the best puncheur, the incentive test does not decide the family; which rider the team prefers does, and a team riding the last climb hard is telling you.
The boards told the story in the order the retrieval channel keeps telling it. The official 'bunch sprint' board had Brennan #1 at 57.7% against a 25.4% book, and he finished 24th; van Aert sat #3 at 7.1% against the book's 14.1%, and the market had the winner closer than the model did. The 'break survives' branch board, keyed res_4 0.45, had van Aert #1 and pulled Debruyne (#27) and Leknessund (#23) inside its pool of fifteen β three of the actual top fifteen against the production board's one β while the two sprint boards managed one each. Romele, a 23.0 shot on the book at 2.8%, was #34 to #88 across the boards: the same break-membership wall as Valdelinares, Calar Alto and the Pandera, this time on a flat day.
Van Aert's form signal, flagged after stage 7, has now paid four times: third at Valdelinares from the move, fifth at Lorca in the bunch, a win at stage 13 from a two-up, and a win here from a five-up. The model prices him as a fast man who survives lumps, which is why he was third on the sprint boards; what it cannot see is that on this race he has become the rider Visma choose over their own sprinter when the road is hard enough.
The hindsight board, built on five small escapes that survived by a minute and keyed res_4 outright, makes van Aert #1 at 4.5%, Nys #9, Debruyne #19 and Leknessund #29, and still leaves Romele at #65. It retrieves four of the top fifteen against the production board's four β no better than the morning's break branch, which is the eighth consecutive post-hoc reconstruction to fail to beat a prospective read. The winner was findable; his four companions were not, because escape membership is not a thing the model sees.
The classification did not move. Mas leads Gall by 2:06 and Roglic by 2:10, Carapaz 4:24, Onley 5:44; the book has Mas at 69.5%. The two GC heads remain split the same way as after the Pandera β the state-aware outlook at Mas 36.6% / Roglic 24.3% / Gall 2.9%, the blend at Roglic 30.0% / Gall 16.9% / Onley 16.2% / Mas 8.7% β neither within twenty points of the market on the leader. Five more riders left the race β Houle, Kretschy, Labrosse, Laporte and Peace β leaving 150. Monday is the second rest day; stage 16 is Tuesday 8 September.
The road chose the official branch cleanly. Matthew Brennan won from Bryan Coquard and Vito Braet, with 102 riders β 68% of the surviving field β credited on the winner's time. The oracle therefore labelled the day bunch. Our official key of bunch 0.55 / res_3 0.30 / res_1 0.15 was exact and covered with 0.55 on the truth; the independent agent key was also exact, with 0.60 on bunch. This was not a boundary call like stage 2: the group was five times the menu's 20% bunch threshold.
The main board also got the winner right. Brennan was first on the published bunch board at 62.8% on the book-preserving head, versus 36.2% after removing the market margin; the wind-thins-it board still had him first at 52.4%. Meeus was second on both boards and finished fourth, while Coquard rose from seventh on the bunch board to fourth on the wind board and finished second. The model's strongest disagreement with the market β that Brennan was even more dominant than 1.85 implied β went the right way.
What did not happen matters for the carry-forward. The early hills, depleted trains and estuary wind neither reduced the winning group nor opened the door to the escape. Stage 15's lesson remains specific: Visma could choose van Aert when a late climb supplied a launchpad. Here ninety flat kilometres after the last rise left the peloton time and road to organise, and Visma chose Brennan. The chase-incentive test works when paired with a real launch point; team optionality alone is not enough to move a flat day out of the sprint family.
The classification did not move: Mas still leads Gall by 2:06 and Roglic by 2:10, with Carapaz at 4:24. Timo Roosen was the only new abandon, leaving 149 riders. Stage 17 is flatter again β Dos Hermanas to Sevilla, 185 km, no meaningful climbs β so bunch is the mechanical macro read. The live risk is weather rather than terrain: extreme heat could shorten the course and strong winds could make the approach nervous, but neither is a reason to hedge the official day key away from bunch before there is an announced route change.
The road picked the specialist branch, and picked it cleanly. Stefan Kung won in 35:22, three seconds ahead of Callum Thornley, with Joao Almeida third at nine seconds. Wout van Aert, the devigged favourite at 29.3%, was fifth at twenty seconds. The book had read the day correctly as a time trial engines' day: van Aert, Hayter, Kung and Armirail held 0.756 of the market between them and the winner came from inside that group.
The classification moved, but less than the terrain threatened. Primoz Roglic was the best of the general classification men, fourth at nineteen seconds, and took thirty-three seconds out of Enric Mas to cut the lead from 2:10 to 1:37. Felix Gall lost enough to drop from second to third. That is the whole of the day's effect on the race: a tighter top two going into the queen stage, and a podium order settled one place lower down.
The read that was never logged is the one worth recording. The shadow agent keyed the day {itt: 1.0} at confidence 0.97 on the evening before, routing the macro mechanically off the road book rather than off the market, and the oracle returned itt. That is the second time this race that a time trial has been keyed at full weight and come back exact. The cost of the missed cycle is not a bad read; it is the absence of a priced board to compare against a book that, on this evidence, had the day right.
The escape branch was right about the day and the oracle still graded it a miss. Eddie Dunbar won alone in 5:00:54 from a move the classification never tried to hold, with Santiago Buitrago at fourteen seconds and his own teammate Thomas Gloag at twenty-three. Dunbar started the day 35th overall. The front five had a general-classification median of 35th, so nothing about this finish belonged to the men racing for red.
The grade inside the family is the interesting part. The label came back res_4, the hard-puncheur neighbour, rather than res_2. Realised top-15 composition was mountain .40, rolling .267, breakaway .20 β a front of climber-rouleurs rather than pure climbers, which is exactly the signature that separates the two items. That is the second time in five settled stages that a break-won mountain finish at this Vuelta has landed on res_4 rather than res_2, after stage 15.
Nothing moved at the top of the race. Mas, Roglic, Gall, Carapaz and Onley all came in together, holding 1:37, 3:01, 5:17 and 6:03, so the whole classification question rolled into the queen stage unchanged. Mattias Skjelmose was the only man inside the top ten to lose ground, dropping from eighth to below Cristian Rodriguez.
The watch item is the cost of the missed cycle itself, not the read. Two consecutive stages went unkeyed and unpriced, and stage 19 then contaminated the tier-3 card by letting a scenario-level key stand in for a morning read. The guard that stops that exists and works; it only fires when the config is marked post_hoc, which a backfilled config has to be from the moment it is written, not after someone notices.
The road picked the escape, which is what the key said, and then graded it the other way. Mikel Landa went clear and won alone in 4:58:01, 47 seconds ahead of Tobias Halland Johannessen and 1:27 ahead of Ramses Debruyne, with only three riders inside two minutes of him and eighteen inside ten. The classification men were nowhere near it. The key was res_2 .45 / gc_day .40 / res_4 .15 and the oracle returned res_4: covered, not exact, weight on true 0.15. The shadow agent, which had the same three items in the other order, scored better on weight at 0.23 while also missing the argmax.
The grade is the lesson, and it is now a pattern rather than an accident. This is the third consecutive break-won mountain finish at this Vuelta to come back res_4 rather than res_2, after stage 15 and stage 19. The morning note explicitly argued the other way, that a wall of 8.3 km at 9.8% would select pure climbers and so deserved res_2 with res_4 kept to a graded-neighbour weight. The realised top fifteen was in fact climber-heavy, mountain .733 against rolling .133, and the day was still labelled res_4. Whatever separates the two items at this race, it is not the archetype share of the front group, and three straight misses in the same direction say the prior on that pair should be flipped until a mountain escape here actually returns res_2.
Against the book the boards did well everywhere except on the winner. Renormalised, the three reads gave Landa 0.27%, 0.34% and 0.29% where the book had him at 0.80%. But they gave Johannessen 4.6% to 5.2% against a book price of 1.27%, and he finished second, and Debruyne 2.0% to 3.7% against 0.64%, and he finished third. On the two podium places the model was three to five times the book and right to be. The day-menu channel was neutral on retrieval: eight of the top fifteen surfaced with the key against seven or eight from the production board.
The hindsight run says course knowledge was not the constraint. Given the day's actual shape as references, the reconstruction still prices Landa at 0.29% and ranks him 52nd. The reason is visible in his record rather than in the parcours: his best result anywhere in 2026 before this stage was fourteenth, at Catalunya in March, and he had not won a bike race since the Vuelta a Burgos in August 2021. A feature set built on recent results has nothing to work with there, and the book, at 81.0, barely did either. Some winners are not mispriced so much as unpriceable in advance, and it is worth keeping that category separate from the days where we genuinely read the road wrong.
The classification moved more than the stage win did. Mas extended his lead over Roglic from 1:37 to 2:15 while Gall took seventeen seconds back to sit 2:44 down, so second and third are now 29 seconds apart going into a final stage that carries bonus seconds at both the intermediate sprint and the line. Sepp Kuss climbed from eleventh to fifth and Oscar Onley slipped to sixth. That is the watch item for stage 21: the race for the podium is live in a way the race for red is not, and the two GC heads disagree about it more sharply than at any point this race, with the outlook head giving Mas 77.9% against a book at 82.9% while the blend, which cannot see the standings, has him fourth at 9.3% behind Roglic on 29.8%.
The circuit did what the read said it would, and the label still came back bunch. Tobias Halland Johannessen won in 2:54:08 from Alessandro Romele and Ramses Debruyne, with forty riders on his time, seventy-eight more at 1:49 and fourteen at 3:59. Forty is a gallop, so the oracle graded the day bunch. The key was res_7 .40 / bunch .35 / res_1 .25: covered, not exact, weight on true 0.35. The shadow agent had the same three items with bunch last and scored 0.25.
The composition read was right and the macro was about something else. The front fifteen came back sprint .20, rolling .267, mountain .267 and time trial .133, with a front-five classification median of 77th β not a sprinters' front. Matthew Brennan, who won four stages at this race, was fourth. Wout van Aert, the book's favourite at 1.75 for 37.4% devigged, was sixty-fifth. The men who could use the cobbled wall were the men at the front, exactly as the morning read argued; the bunch macro grades winner-group size, not winner type, and those two questions had different answers today.
The hedge paid off for a reason that did not apply. Bunch carried 0.35 rather than a minority weight largely because the last two Tour circuit finales at Montmartre recorded every finisher on the winner's time, which would have made bunch true by construction. Granada did not neutralise: the winner-group proportion was 0.282, not 1.000, and the road produced the split honestly. So the extra weight was right and the argument behind it was wrong, which is worth recording as plainly as a miss would have been. The transferable part is narrower than it looked: the freeze is a Tour practice, not a grand tour one.
The branch structure earned its keep even though the headline board did not. The late-move read had van Aert first, Debruyne second and Johannessen third β two of the actual podium in its top three β and priced the winner at 4.25% against a book that had him at 0.81%. The other two reads had Brennan first at 28.5% and 40.4%, and the hindsight run, given the day's real shape, still puts him first at 24.5%. The model cannot see that a rider who has won four sprints is the wrong rider for a finish reached over a cobbled ramp four times; the scenario fork is what carried that knowledge, and on this day it carried it well.
The race ends as it stood. Everyone in the classification fight finished in the 1:49 group, so Enric Mas wins the Vuelta from Primoz Roglic at 2:15 and Felix Gall at 2:44, with Richard Carapaz fourth, Sepp Kuss fifth and Oscar Onley sixth and in the young riders' jersey. Van Aert takes the points classification from Brennan and Santiago Buitrago the mountains. Across the campaign the day key was exact on 8 of 17 keyed stages and covered on 15, at a mean weight on the true item of 0.49, with three stages unkeyed because the daily cycle was missed.