Normally a game starts in a team from the content pack, with the squad the content gives it. Draft mode offers another start: you found a team in the division of your choice, then every team picks its riders in turn, yours and the opposing teams, from the pool of all the riders in the pack. Your starting squad is then the fruit of your choices, made against opponents who choose with the same rule and the same information as you. What follows the draft (programme, market, progression, reputation) does not change.
This post follows the draft in the order you live it: the guarantees, the team you found, the settings, what happens when the pool is too small, what you see, the budget, how an opposing team chooses, how it plays out, what becomes of the squads, then the measurements and what isn’t right yet. The programme of the season that follows is in the post on planning, the race itself in the post on the race engine. The draft engine lives in a TypeScript package with no clock, and all its randomness goes through the game’s pseudo-random generator: same settings, same picks, same world.
real-2026 pack: a complete draft takes 20 ms, set-up included.Four guarantees before the first pick
Bordure rests on seven pillars. Four of them bear directly on the draft. One, pillar 4 (imperfect information), receives an exception here, which we name rather than sweep under the carpet.
The same rules for every team
The opposing teams pick with the same rule, the same budget and the same ratings as you. When you let “the staff pick”, it applies exactly an opposing team’s function in your place: a test checks it.
Same seed, same world
Same settings, same picks from you, same draft seed: same squad for every team. No hidden draw in an opposing team’s choice.
Pace changes nothing
Playing the opposing picks one at a time or all at once up to your turn gives exactly the same draft. The screen sets the speed, not the outcome.
Exact ratings, for the length of the draft
During the draft only, everyone reads the content’s exact ratings. As soon as the career is created, information becomes imperfect again: public views, power tests, scout reports.
A draft with blurred ratings would need scouts your team doesn’t have yet, and a world of estimates for every opposing team. We preferred an exception that is bounded and symmetrical: the same exact ratings for every team, no trace of them in the career once it is created. The engine guards it from a second side: the host never holds a draft and a loaded career at the same time (section 08), otherwise the pool’s exact ratings would sit next to the 612 riders of a career, whom pillar 4 forbids you to read.
Founding the team
The founded team is added to the pack’s teams: it replaces no existing team and is not a mere renaming. On real-2026 the world therefore has 182 teams (181 plus yours), on default 37 (36 plus yours). Technically, the career reads a derived in-memory pack, a pure function of the pack and of your team: the content on disk is never rewritten, and the save’s fingerprint stays that of the content.
Creation takes four steps on screen, the first being the founding:
What you choose
- The division: elite, pro or continental, depending on what the pack contains.
defaulthas no continental teams, and founding one there is refused. - The focus: classics, general classification, sprint, hilly, time trial or balanced. It steers your “staff picks” choices (section 06) and the terrain the pool is sorted on from the start.
- One to three title sponsors, taken from the pool of free brands drawn at creation: ⌈0.5 × (teams + 1)⌉ + 4 brands, drawn with the career seed. The team’s name is composed from these brands by the template you write. The pool is drawn without your team, which depends on it: otherwise the name would depend on the pool, and the pool on the name.
- The abbreviation (2 to 4 capitals, unused by the content), the colours and the country. The team’s identifier is derived from it:
fondee-followed by the abbreviation in lower case, which cannot collide with the content’s. - The budget level, below.
Three budget levels, without recalibrating
The reference is the lower median of the division’s sponsor budgets in the pack: the draft was calibrated with it. At the game owner’s request, two levels surround it, which gives, in their words, “a bit of difficulty modes”. The low level is the division’s smallest budget plus 10 %, never above the median; the high level is the division’s largest budget plus 10 %. Amounts are rounded down to the cent, and the chosen budget is shared equally among your titles.
| Pack · division | Low | Median | High |
|---|---|---|---|
default · elite | 4.587 (63 %) | 7.26 | 12.705 (175 %) |
default · pro | 3.619 (78 %) | 4.65 | 8.041 (173 %) |
real-2026 · elite | 9.922 (82 %) | 12.08 | 20.603 (171 %) |
real-2026 · pro | 3.146 (42 %) | 7.55 | 15.829 (210 %) |
real-2026 · continental | 0.495 (29 %) | 1.72 | 4.928 (287 %) |
The gap is not the same from one division to another: it follows the spread of the content’s budgets. At the high level, the founded team is richer than every team in its division.
The division where the gap is widest: among continental teams the high level is almost three times the median and ten times the low level.
The level is not stored separately: the save’s founded team already carries its budget, and resuming checks that it is one of the three levels of its division. Nothing else is handed to you at founding: no scouts, no coaches, no written suppliers, the staff provides for the team as for a content team without a block. Under the official invitation rule (real-2026), the founded team is entered like the others, after the teams ranked in the first season. On the test pack uci-test (seed 7), a founded elite team is entered in 17 of the 26 races of 2026.
Settings: groups, order, rounds
The draft is played in groups of divisions: a group picks from what the earlier groups have left. Two modes exist.
Single division: each division picks alone, in its turn
Pro division: elite and pro pick together
Divisions absent from the pack have no group: default has only the elite and the pro.
The order within a group
The order of a group’s teams is drawn: the teams, sorted by identifier, are shuffled by a Fisher-Yates on the stream squadDraft/v1/order/<group rank> of the draft seed. This seed is separate from the career seed, which draws the pool of your team’s titles: “Draw again” changes only the draft seed, without pushing your titles out of the pool. You can reorder by hand, but only before launch, by a permutation of the same group. Same draft seed, same settings: same order.
Two passing orders: classic, the drawn order every round, or snake, every other round reversed, which offsets the advantage of picking first. A team that has completed all its rounds is skipped.
| Round | Classic | Snake |
|---|---|---|
| 1 | A · B · C · D · E · F | A · B · C · D · E · F |
| 2 | A · B · C · D · E · F | F · E · D · C · B · A |
| 3 | A · B · C · D · E · F | A · B · C · D · E · F |
The letters are the group’s drawn order. In a snake, A opens round 1 and closes round 2, which offsets the advantage of picking first; round 3 starts over in order.
Rounds per division
The number of rounds is the number of riders a team drafts. You set it per division: every team in a division has the same. Its bounds depend on the pack.
| Division | UCI rule (real-2026) | Offered | default |
|---|---|---|---|
| Elite | 27 to 30 | 30 | 18 to 18 |
| Pro | 20 to 30 | 25 | 16 to 16 |
| Continental | 10 to 16 | 14 | — |
Under the official invitation rule, the bounds are the UCI’s: elite 27 to 30, pro 20 to 30, continental 10 to 16. On a fixed-list pack, they are the smallest and largest squads in the division’s content: the choice of rounds has no latitude there. The value offered is the lower median of the content’s squad sizes, brought back within the bounds.
The lower bound is raised to the largest number of starters in the races open to the division: a team that drafted fewer riders than the start list of one of its races couldn’t ride it. Rounds below that number are refused. In the content of real-2026, some squads fall outside these bounds (up to 32 in the elite, 7 to 21 among continental teams); we preferred the UCI bounds to the content’s, a decision of the owner on October 16.
When the pool is too small
The rounds you set are bounded by the UCI, not by the pool. If their sum exceeds the number of riders in the pack, the engine reduces some rounds, but only in the last group to pick, never in the groups that have already picked in full. Each team knows its rounds before the start.
- In the last group, the largest target loses a round, then the next, until the targets are level.
- When targets are equal, the smallest sponsor budget loses its round first, then the smallest identifier.
- A team never goes below its largest number of starters, nor, under the UCI rule, below its division’s lower bound.
- If nothing fits, the settings are refused with a precise code (
draftPoolTooSmall) rather than adjusted without saying so.
Each team’s rounds depend neither on the draft seed nor on the drawn order: the log recomputes them without a seed.
The second point exists because the first criterion, the identifier, was unfair: a founded team’s identifier (fondee-…) sorts before the content’s (team-…), so it was always the first reduced. A small sponsor also carries a smaller squad, and one place fewer leaves a poor team more budget per place.
With a founded elite team, at the median level:
default: 630 rounds for 612 riders. In single-division mode, the 18 ProTeams drop from 16 to 15 riders. In pro-division mode, 18 of the 19 elite teams drop to 17; only the richest keeps 18.real-2026: 3,028 rounds for 3,008 riders. The 20 poorest continental teams drop to 13.
The rule leaves the founded team whole when it can: at the high level, richer than all those in its division, it loses a round only if its whole group does. At the low level, it is reduced nowhere the median doesn’t reduce it (continental on real-2026 at the low level: fifth smallest budget out of 148, the four poorest lose a round, not you). One case remains: if more than about half of its group is reduced, yours is too. The rule removes the construction disadvantage, not the reduction.
What you see
The pool table is the centre of the screen. For each available rider you read identity, nationality, age on the first day of the season, height and weight, the content’s salary, the fifteen exact attributes, the exact aptitude at each terrain of the pack’s race days (to the tenth) and the best terrain. The exact sheet of the selected rider is marked “Draft: real ratings”, so you know these ratings are no longer visible afterwards.
The content’s ratings
Attributes, aptitude by terrain, age, height, weight, salary. The opposing teams read the same ones to choose.
Reputation and scouts
Nothing of public reputation or scout reports: they don’t exist yet at that point.
- Filters and sorting. By terrain, age, nationality, salary; each column header sorts. The exact attributes are on the sheet, not in columns.
- Initial sort. On the main terrain of your team’s focus, or on best aptitude for a balanced team. The screen says nothing of what the AI is aiming for, or how many riders each terrain needs: reading your squad is up to you.
- A long pool. The table shows 200 rows after filters and sorting, then “Show 200 more”.
real-2026has 3,008 riders, and the counter always reads “N available out of M”. - The clock of the pick to play, your riders, your budget and your cap, and the feed of the latest picks of every team, by abbreviation.
The budget and the free first pick
With no budget constraint, an opposing team would take eighteen leaders and open the season in deficit. The draft therefore imposes a budget, the same on every team, yours included.
A team’s draft budget is 80 % of its sponsor’s budget (the rest covers running costs), capped by the pack’s salary cap when it has one. A rider’s cost is the content salary, and the initial contract lasts as long as usual: no renegotiation at the draft. The remainder is the draft budget minus the mass already drafted.
A rider can be taken if the salary fits under the cap. The reserve keeps enough for the team to finish its rounds at the lowest salaries: without it, teams emptied their remainder before their last rounds, which the last term then forced above budget. The first bench had 25 % of default’s teams and 47 % of real-2026’s above their budget; with the reserve, 6.8 % and 40 %. The smallest available salary, for its part, guarantees that a team always finishes its rounds: it may then exceed its budget by the salary of one of the cheapest riders, when everything else is too expensive for it. For you, the cap is visible: riders above it are greyed out in the pool, “Pick” is refused (overBudget), and the cap is shown in the budget panel.
Every team’s first pick is free
The game’s owner asked that the first pick could be any rider, even outside the budget. To hold pillar 3, the rule is the same for every team: each team’s first pick has no budget cap. The alternative, a privilege for your team alone, would have been an exception to the pillar.
A rule with no cap has a cost the first measurement showed: the poorest continental teams of real-2026 put 40 to 60 % of their draft budget into their first pick alone, and the worst finished at 1.70 times its budget. So we separated the rule, free, from the AI’s policy, prudent: at the first pick, an opposing team (and “the staff picks” or “the staff finishes” in your place) takes only a rider whose salary fits under max(remainder − reserve, smallest salary available), its whole budget minus what it needs to finish its rounds, without the per-place cap. Only the director can go beyond. The rule is symmetrical; the prudence is a policy, applied to your staff too.
With the prudence, the worst continental team of real-2026 (draft budget €0.36M) puts 29 % of its budget into its first pick (€0.103M). The worst mass ÷ budget in the measurement is 1.263; it was 1.703 without the prudence, in the first measurement. The continental overrun existed before the free first pick: see section 09.
How an opposing team picks
On its turn, an opposing team takes the rider with the best score under its cap. The score adds two bonuses of the same size to the rider’s value. The function is shared with the career’s market: the evaluator (a rider’s value, needs by terrain, terrain shares) was extracted from the market without changing its behaviour, to the byte, then plugged into another source of information, the content’s exact ratings.
The terrains that matter to a team are those of its shares: half the calendar of the races open to its division, half the focus. The calendar is not enough: under the UCI rule every team in a division has the same possible calendar, and the calendar alone would make them all pick alike. The focus is what tells them apart.
| Focus | Weights by terrain |
|---|---|
| Classics | cobbles 0.5 · hilly 0.3 · flat 0.2 |
| General classification | mountain 0.5 · time trial 0.3 · hilly 0.2 |
| Sprint | flat 0.7 · hilly 0.3 |
| Hilly | hilly 0.6 · mountain 0.4 |
| Time trial | time trial 0.6 · flat 0.4 |
| Balanced | the shares of the team’s calendar |
A terrain absent from the pack has its weight redistributed, and a focus none of whose terrains is in the pack follows the calendar.
The leader bonus is why a classics team takes a cobbles specialist before a climber of the same value, and the reverse for a general-classification team. A test demands it: on a hand-built pack, the cobbles leader goes before the climber for one, the reverse for the other, and the test fails without the bonus.
Where the content teams’ focus comes from
The shipped packs write no focus. Failing that, it is deduced from the squad: for each terrain, a team’s strength is the mean of its best exact aptitudes (as many as its number of leaders); this strength is compared with the other teams in its division, and the terrain with the greatest reduced gap gives the focus if it reaches 0.75, otherwise the team is balanced. The result on real-2026, in the elite: 10 balanced, 2 classics, 2 sprint, 2 time trial, 1 general classification, 1 hilly. In the pro: 11 balanced, 3 sprint, 1 hilly, 1 time trial.
Playing the draft
Launching plays no pick. After that, two situations.
One pick at a time, or up to you
“Next pick” plays and shows a single pick. “Go to my turn” plays all the picks up to yours at once. The engine advances one pick or up to your turn: the outcome is the same.
Pick, or let the staff
“Pick” takes a rider under your cap. “The staff picks this turn” applies the opposing teams’ function, with no confirmation. “The staff finishes the draft” plays everything else, with a confirmation.
When your rounds are used up, “The staff finishes the draft” disappears and “Go to my turn” becomes “Finish the draft”: it plays the remaining picks, later groups included, without a confirmation since nothing is left that is yours. The confirmation on “The staff finishes” exists because that choice is irreversible for the draft in progress.
Two invariants hold it all together, and tests verify them on default as on real-2026:
- The pace doesn’t matter. Advancing pick by pick, up to your turn or all at once gives the same draft. The engine is a function of the log of picks, not of how it was advanced.
- Symmetry. “The staff finishes” from your very first turn gives exactly the draft of the opposing teams alone: your team takes what an opposing team would take in its place. That is what stops “the staff” from being cleverer than an opponent.
Refusals are typed
Every refusal from the engine has a code, down to the screen’s message: notOurTurn, ourTurnPending, riderTaken, overBudget, draftNotStarted, draftNotFinished, teamIdTaken, draftPoolTooSmall… The interface computes no sporting rule: it reads the view and displays what the engine refuses.
After the last pick
The log of the finished draft gives the starting squad: the team of every rider picked, and nothing for the others. They are then placed in the career.
A first contract
The rider signs with the team that picked them, at the content salary, for today’s length, on the first day of the career.
Free agents
Free status from the creation season, no contract. They feed the market, like the free agents of any career. At the UCI minimums on real-2026 there are 705: 2,303 picks for 3,008 riders.
The market aims at your draft
The drafted squad becomes each team’s squad target, which the market, renewals and supplier offers read in place of the content’s squad.
Computed afterwards
Team prestige, partnerships, suppliers and programmes are computed on the drafted squads, hence after the draft.
The log is stored in the career state: rule, mode, order, rounds per division, the order of each group, and the picks {team, rider}. On creation and on resuming, it is cross-checked without replaying the AI: each group is a permutation of its teams, rounds are recomputed, each pick is a rider of the pack not yet taken, made by the team whose turn it was and under that team’s budget cap at that moment (no cap at its first pick, through the same salary ledger as the AI and the director), and the squad it gives is the one in the creation contracts. A tampered log is refused, and a log from an older rule is refused by name.
Two design choices deserve to be stated:
- No save during the draft. It is a session of a few minutes: quitting the application abandons it. The save takes place when the career is created, as usual.
- Draft and career never coexist in the host. Setting up a draft unloads the career in progress (its save stays on disk); creating or resuming a career abandons the draft. This rule comes from the ticket’s review, which reproduced a defect:
newCareerfollowed bysquadDraftSetupserved the exact ratings of the 612 riders of a loaded career.
Measuring a draft
A light bench plays complete drafts over eight seeds, on default and on real-2026, with a founded elite team at the median level, in single-division mode and snake order, “the staff finishes” for every team. The targets were set before the measurement, then the bench was re-run under rule 3, without recalibration: the owner decided that the median calibration was done and that the budget levels would only add difficulty modes.
| Criterion | Target | default | real-2026 |
|---|---|---|---|
| C1 · time for a complete draft, set-up included | < 0.3 s · < 2 s | 3 ms | 20 ms |
| C2 · teams under their draft budget | at least 95 %, none beyond 110 % | 84.1 % · max 1.009 | 59.5 % · max 1.263 |
| C3 · best rider on the focus’s terrain | at least 60 % | 85.3 % | 98.7 % |
| C4 · at least three terrains of speciality | every team of 12 riders or more | 57.1 % | 97.7 % |
| C5 · free agents = pool − sum of rounds | at every seed | 8 of 8 | 8 of 8 |
C1, C3 and C5 are met, C1 with a hundredfold margin. Three choices do a lot there: the evaluation is precomputed per list of terrains and not per team; needs are compared with a threshold per terrain; the scan of riders stops as soon as none can beat the best score. 3,008 picks in 20 ms is what makes it reasonable to play every opposing team at once.
C2 and C4 are not met, and we would rather say so than rewrite them.
C2: the continental teams’ budget
| Pack · division | Beyond 1.0 | Beyond 1.25 | Worst mass ÷ budget |
|---|---|---|---|
default · elite (152) | 11 → 31 | 0 → 0 | 1.003 → 1.004 |
default · pro (144) | 9 → 16 | 0 → 0 | 1.010 → 1.009 |
real-2026 · elite and pro (280) | 0 → 0 | 0 → 0 | — |
real-2026 · continental (1,176) | 597 → 589 | 0 → 8 | 1.236 → 1.263 |
The reserve fixes the elite and the pro. The overruns that remain are those of the continental teams of real-2026, which pick last.
Why? The diagnosis from the first measurement (seed 1) shows that the continental teams’ total budget is enough (€206.7M for €178.2M drafted), but the poorest have less per place (€25.7k) than the lowest salaries remaining (€36.6k at the tenth percentile): 147 continental teams fight over the same cheap riders, and the reserve, computed on what is free at the moment of the pick, underestimates what the later rounds will cost. The content itself overshoots: 20 % of real-2026’s teams are above 80 % of their sponsor, and the career’s budget also counts suppliers. The owner chose to accept this overrun (D-122-9) rather than give the AI a salary policy. The free first pick did not make it worse (597 → 589); it added eight cases beyond 1.25, all continental teams.
C4: default’s specialists
On default, the calendar is mostly flat and hilly. A balanced team (about half of them) evaluates only the terrains making up at least 10 % of the race days, and so takes neither a climber nor a cobbles specialist, while the content’s squads, generated by archetypes, all have some. On real-2026 (six terrains, varied calendar), the draft equals the content. The owner wants no correction: default doesn’t count for this target (D-122-10).
What the snake does, with no target
Measurement of October 16. Over 26 lines (division × terrain × pack), the draft tightens the teams on 23. It spreads them apart on the elite’s cobbles (5.36 against 4.49 on default, 4.36 against 3.50 on real-2026) and on the elite’s time trial on real-2026 (6.05 against 5.67).
In plain terms: a draft opens a world that is more even than hand-written content, at least among pro and continental teams. That is what you expect of a snake, which offsets the advantage of picking first, but we had not set it as a target. The free first pick tightened it further for the continental teams (mountain 5.96 → 5.32, cobbles 6.62 → 5.78): every team takes the best rider left for it in the first round.
What isn’t right yet
A draft’s rules are compromises, not truths. Here is what we know we don’t yet do well.
- Poor continental teams overshoot their draft budget. By up to 1.263 times, on
real-2026. It is accepted, but the cause, a reserve that ignores competition for the same cheap riders, is not fixed. Leads set aside for now: an AI that prefers the cheaper rider when its remainder per place is tight, fewer rounds by default for continental teams. - Balanced teams on
defaulthave neither a climber nor a cobbles specialist, for lack of terrains weighing 10 % of the calendar. Unimportant for this demonstration pack; a minimum share of each of the pack’s terrains in the needs would be the remedy. - The high level is not the same challenge everywhere. It is worth 175 % of the median in
default’s elite and 287 % inreal-2026’s continental teams. We applied the owner’s formula to the letter rather than equalise the gap. - No save during the draft. Quitting the application abandons the session. The log stored in the state would allow replaying it later.
- Old drafts are not resumed. A career drafted under rule 1 or 2 (T122 to T124, T161) is refused by name. We don’t migrate the saves of a game under construction.
- The focus doesn’t yet serve the market. It steers only the draft; the career’s market still reads the team’s calendar. Plugging the focus into recruitment is an optional ticket, to be decided after a re-measurement.
- The reduction can still hit the founded team. It reaches it if more than about half of its group is reduced: in
default’s pro, 16 ProTeams of 19 drop to 15, yours included. - The draft view grows with the picks. It returns every pick played with each reply, up to 234 KiB at the end of
real-2026; the pool passes only once.