A management game’s transfer market can be wrong in two ways. Either the rider is a number that signs with the highest bidder, or the negotiation is a menu where you click “accept” without ever feeling who is across the table. We wanted the opposite: a rider with priorities you can guess without reading them, an agent who reacts to every offer, and rival teams that go after a rider for a reason. The market was rebuilt in four tickets, T166 to T169: the rider’s choice, the live negotiation, the teams’ recruitment plan, then the screen.
This post follows one offer from start to finish: the guarantees, the two stories that set the course, what a rider wants, the talk with their agent, the difference between an agreement and a signature, the way a rival team picks its targets, what you see on screen, then the measurements and what is still not right. Founding a team by hand is covered in the post on Draft mode, and the season programme in the post on season planning. The market engine lives in a TypeScript package with no clock: all its randomness goes through the game’s pseudo-random generator.
Four guarantees before the first offer
Bordure rests on seven pillars. Four of them shape the transfer market.
One rule for every team
The recruitment plan, the agent’s answer and the rider’s choice are the same functions for every team. Your staff’s proposal is the decision a rival team would take in your place, and “let the staff negotiate” plays the talk through the same function.
Imperfect information
A rider’s mentality is hidden. You read an assumed mentality, with its source and its age: what their agent says, what a scout thinks. Never the weights.
Repeating gets you nothing
An identical offer earns no concession and wears down the agent’s patience. An insulting one wears it down twice. No insisting, no bonus for repetition.
Same seed, same market
The mentality is drawn once, when the rider is created, from a named stream. Answers and decisions involve no draw, apart from the already-named tie-break between two equal agreements. Same commands on the same days: same world.
Two stories to set the course
The game owner’s brief came down to two stories. They became the acceptance criteria of the whole effort, then named tests.
Pogačar, out of contract and the best rider in the world, receives four offers: UAE (€2M, leader, very strong squad), Visma (€2.1M, leader, strong squad), FDJ (€3M, leader, average squad) and Van Rysel Roubaix (€5M, leader, weak squad). He most probably picks UAE. A mercenary would go to FDJ or to Van Rysel Roubaix.
Red Bull (Evenepoel, Lipowitz, Roglič) sees Pogačar (World #1), McNulty, Milan and Jan Christen on the market. If the budget allows, it goes first for Pogačar (a rare opportunity), then Christen (a promising young rider), then McNulty (a lieutenant for Evenepoel or Lipowitz). Milan does not fit its strategy, but an offer remains possible.
Before the work began, the game failed the first story. The finding of October 19, on real-2026 at creation: Pogačar signed with FDJ. The utility of an offer was almost entirely salary; between UAE and a continental team, prestige was worth only about 12% of the rider’s market value, and squad quality only entered through it. The offers in the story were not even legal: a mercenary’s offer was capped at 1.5 times the rider’s market value, and Van Rysel Roubaix’s €5M was worth 2.5.
What a rider wants
A rider reads an offer on six criteria, each a satisfaction from 0 to 1, computed from public facts. Their priorities, meaning the weight of each criterion, come from their mentality.
| Criterion | What is measured |
|---|---|
| Salary | The ratio of salary to market value, on a logarithmic curve: an extra euro counts for less than the first. The signing bonus will count here, spread over the length of the contract. |
| Status | The status obtained (the promise, otherwise their projected rank in the squad, counted at 70% for lack of a guarantee) against the status they want. It is worth 1 if they get it, 0.4 one step below, 0 two steps below. |
| Team reputation | The team’s prestige, scaled between the median team and the best. |
| Squad quality | Support on their terrain: the average of the squad’s four best riders for the season covered, without them, scaled between the median team and the best. |
| Security | The gap between the length offered and the length they want, depending on age and mentality. |
| Loyalty | Worth 1 for their current team; the weight comes from their loyalty trait. |
Five mentalities
The mentality is drawn once, when the rider is created, and never changes. It is random for now: we have hand-set no real rider’s mentality, but a content pack can fix it, for anyone who wants to mod the peloton. The odds depend on age and ambition: progression weighs mostly before 23, security beyond 31, and the taste for winning or leading rises with ambition.
| Mentality | Salary | Status | Team | Squad | Security |
|---|---|---|---|---|---|
| Competitor | 0.20 | 0.20 | 0.20 | 0.35 | 0.05 |
| Mercenary | 0.65 | 0.10 | 0.08 | 0.07 | 0.10 |
| Leader above all | 0.25 | 0.45 | 0.10 | 0.10 | 0.10 |
| Security | 0.35 | 0.10 | 0.10 | 0.10 | 0.35 |
| Progression | 0.15 | 0.15 | 0.35 | 0.25 | 0.10 |
Starting values. Loyalty is added on top (0.25 × loyalty ÷ 100), then the weights are renormalised. The “Progression” row was raised on team and squad by T166: with the initial weights, young riders refused small teams too often.
Story 1, in numbers
| Pogačar… | UAE | Visma | FDJ | Van Rysel Roubaix | Picks |
|---|---|---|---|---|---|
| competitor | 0.881 | 0.817 | 0.702 | 0.544 | UAE |
| mercenary | 0.651 | 0.602 | 0.697 | 0.829 | Van Rysel Roubaix |
| leader above all | 0.863 | 0.802 | 0.800 | 0.793 | UAE |
Utilities computed by the design prototype, on the public facts of real-2026 at creation. The shipped model adds peer-based expectations and a salary floor per mentality: its numbers differ, its outcomes do not. T166’s named test checks all three: the competitor picks UAE, the mercenary Van Rysel Roubaix, the leader-above-all UAE.
What you read: an assumed mentality
The rider does not tell you they are a “mercenary”. You read a sentence, from one of two sources: their agent, as soon as you have heard their ask; or a scout, whose report is right with a probability that rises with their level, from 55% at level 1 to 95% at level 5. When the scout is wrong, they read one of the other four mentalities at random, through a named draw made at reading time, with nothing stored in the state. On the rider’s page, the scout “confirms” or “contradicts” the agent. For now, the agent always tells the truth.
| Mentality | “He…” | What would count most for him |
|---|---|---|
| Competitor | wants above all to win | the squad’s level, then the salary, the status and the team’s reputation |
| Mercenary | looks at the salary first | the salary above all |
| Leader above all | wants to be leader | the promised status, then the salary |
| Security | wants security | the length of the contract and the salary |
| Progression | wants to progress | the team’s reputation, then the salary and the squad’s level |
The talk with the agent
Before T167, an offer made on a Monday got its answer the following Monday. It was a form. A talk now puts your team face to face with a rider’s agent on any day of the window (all year for a free agent), in back-to-back turns: time does not pass during the talk.
The talk mock-ups: the thread with the agent, then the screen after an agreement.
What the agent says
- A tone, on four notches: “very far”, “far”, “one more effort”, “close”. They also name the terms that block (“the salary”, “the length”, “he wants to be leader”) and what no term can buy back (“he doubts the squad’s level”).
- A concession in proportion to your effort. Their ask drops by half of what your offer rose, never below their requirement. Each step is therefore paid at half: the final price lands between their requirement and their opening ask, depending on how you negotiate.
- Nothing for repeating. An offer that has not risen earns no concession and costs two turns of patience.
- An insult has a threshold. An offer whose salary alone does not reach three quarters of their requirement costs two turns. Two insults: they walk out, until the window closes.
- They go away to think, or walk out. Once patience runs out, if the turn’s offer is within 3% of their requirement, they go away to think: the following Monday they come back with an agreement, a last ask valid for a week, or a refusal. Otherwise they walk out: no more talks with that team for four weeks.
| Talk | Turn 1 | Turn 2 | Turn 3 | Outcome |
|---|---|---|---|---|
| A · insisting | 1.00 × V, 3 seasons: “one more effort” (salary, length) | The same offer: no concession, patience −2 | 1.15 × V, 4 seasons: “close” (salary) | Patience spent: they go away to think |
| B · raising every turn | 1.00 × V, 3 seasons: “one more effort” | 1.15 × V, 4 seasons: “close” | 1.30 × V, 4 seasons: agreement | Answer the following Monday |
Red Bull facing the agent of a competitor Pogačar, early August; V is the rider’s market value. The numbers are those of the design prototype, before T167 set the thresholds in salary.
Why “in salary”: the 10% premium
T167’s first version reasoned in utility: a 4% margin on the agent’s utility was worth about 8% in salary for a mercenary and 27% for a competitor, depending on how much salary weighs in their mentality. The same negotiating rule therefore produced very unequal prices. T167 now reads everything in salary: the requirement is the salary that, on the terms of their ask, brings the rider’s utility up to their requirement level, and the agent asks 10% above it. The owner settled the premium: at 4%, negotiating well only won 4%, too little for the gesture to matter.
Patience, for its part, depends only on ambition, which is public: a patience that followed the mentality would give it away.
An agreement is not a signature
An agreement is a firm offer: the budget, the place and the status promise are reserved until the rider answers, and the team can neither withdraw nor lower it. But the rider does not sign at the agreement. They decide on market day, the Monday, among all the agreements received.
The best agreement
They take the best agreement whose utility reaches their requirement of the day, which falls over the window and rises if rival agreements are credible. Tie: prestige, then the rule’s named draw.
One more Monday
If other teams are still negotiating with them and their best agreement does not exceed their requirement by 5%, they wait a Monday (two for a world top 20). Your agreements stay firm during the wait.
Without reopening the talk
An agreement can be improved with a salary at least equal, length and status at least as good for them, and one term strictly better. It is the answer when the agent lets it be known that their client is waiting for another team.
The in-season free agent
A free agent during the season, with no other team negotiating, signs the day after the agreement.
Red Bull has an agreement with Pogačar. The same Monday, UAE’s extension (market value, leader, four seasons) is worth slightly more to him than Red Bull’s agreement: he extends with UAE, as the story expects, unless Red Bull improves its agreement before the Monday.
The advance stops follow the same logic: the game no longer stops “every Monday for lack of an answer”, only when a rider decision concerns you (agreement, wait, an agent coming back after thinking, last ask, refusal, signing) or when your staff’s plan has changed. The stop names the decision.
How a team picks its targets
Before T168, a team ranked candidates by a single value, the expected aptitude on the terrains that matter to it. Nothing told a star from squad depth, or a young rider from a lieutenant, and up to 16 teams went after the same rider on the first Monday. The recruitment plan now ranks candidates by role, in the order the owner asked for.
| Order | Role | Who | Ceiling |
|---|---|---|---|
| 1 | Rare opportunity | The best available star (world top 5), whatever their terrain. Only one per window. | 2.0 × V |
| 2 | Specialist leader | If the team has fewer leaders than wanted on its focus terrains: the best candidate who would be leader there. | 1.3 × V |
| 3 | Young rider | Under 23: the best projected at 25. | 1.2 × V |
| 4 | Lieutenant | For each leader with fewer than two lieutenants on their terrain. | 1.1 × V |
| 5 | Squad depth | The remaining places: value, needs, competition, budget per place. | team’s own rule |
| 6 | Off-strategy | If budget remains: a star outside its focus, at the opening offer, with no bidding war. | 1.0 × V |
Ceilings from the design, starting values; T168 tuned them on the bench. A candidate’s estimated price is the rider’s public requirement at that team, computed with the average mentality, since theirs is hidden.
Story 2, played by the plan
- Rare opportunity: Pogačar (World #1), estimated price 1.05 × V, or €1.74M. It would mean giving up two depth places.
- Young rider: Jan Christen, €0.23M.
- Lieutenant: McNulty, a climbing lieutenant, €0.56M.
- Off-strategy: Milan, a second star and a sprinter outside the focus, an offer with no bidding war.
For a place of €6.97M in 2027. The player sees this same plan, readable, in the staff’s proposal: they follow it, reorder it, drop a name, or negotiate themselves.
Three things that changed everything while coding
- A role only keeps what the team would pay. The first version went after stars without looking at the price: 26 teams out of 36 targeted a star on the first Monday. A role now keeps a rider only if their estimated price fits under the role’s ceiling, and squad depth does the same. That is what nearly tripled the pair conclusion rate.
- The focus is live. It no longer comes from the content: it is the draft’s formula applied to the day’s active squad, on public ratings, “anchored” so that it only changes if the squad clearly points elsewhere. A declared focus (content, founded team) wins. In the design, Red Bull came out as “time trial” on
real-2026because of Evenepoel: its leader role was therefore looking for a rouleur. This answers the limit our draft post noted: the focus now serves the market. - The AI gives up instead of clinging on. An AI negotiates through the same function as your staff: it opens at 90% of the ask brought to the shape of its offer, reads from the tone what would be needed, offers its ceiling once, then gives up when it can no longer go higher. Leaving the table and coming back the following week kept places for it on riders out of reach.
What you see
T169 puts the talk on screen. The mock-ups were validated before the code; the screen as shipped departs from them in a few points, recorded in the ticket’s report.
The thread with the agent
Their ask right now, your offers, their reactions. Patience is shown as boxes for the turns that remain, with no total. The tone on four notches, the gap between two asks, what is blocking and what no term can buy back.
Our agreement
After an agreement, the “their ask right now” card gives way to “our agreement”, with the answer date and “improve the agreement”. While the agent is thinking, it is “our offer under review”: nothing is reserved.
The assumed mentality
On the public rider page, the negotiation and the Recruitment column: the agent’s or scout’s sentence, with its source and date. For a rider on your own team, none: you know them.
The Inbox
One message per Monday that names each decision. A “decision awaited” when an agent comes back with a last ask, which stays among the important messages for as long as it is valid.
The talk commands (offer, accept their ask, leave the table, improve an agreement, delegate) are stored with their day, like programme edits: resuming in the middle of a talk, with an agreement pending, gives back the same world. All the text is in French and English, following the project glossary.
Measuring the market
Every ticket has its bench: lab career world plays complete careers, on the default pack with fictional races, every team run by its staff, over 8 seeds and 20 seasons. Targets are written before the measurement, and the lines that block are named in advance. The world’s stationarity (the best quality does not drift by more than 2 points in ten years, no squad outside its bounds, no team beyond its budget, no rider created in an emergency in steady state) holds at every step.
The four steps, side by side
The bars are to scale: 27.4% fills the full width, and the target band (40 to 80%) lies beyond it. T167’s drop is intended: the AI immediately gives up on what it cannot pay, where T166 let the offer run until a refusal. T168’s plan nearly triples it, because roles and depth no longer target riders the team would not pay for.
| Quantity | Before T166 | T166 | T167 | T168 |
|---|---|---|---|---|
| Signed salary ÷ V: median · share within [0.9; 1.3] | 1.00 · 81% | 0.95 · 55% | 0.99 · 65% | 1.03 · 83% |
| Length of a concluded negotiation | 2 weeks | 2 weeks | 1 week | 1 week |
| Mercenaries who sign the best-paid offer | — | 62% | 54% | 63% |
| Competitors in the most prestigious team | — | 44% | 63% | 60% |
| Drift of the best quality over 10 years (median) | 0.96 | 1.04 | 0.45 | 0.66 |
Each column comes from a separate bench; each ticket’s reference of the day differs slightly (T168’s “main” is T167’s: 9.5% pair conclusion against 10.1%). Read it as a trend, not as a continuous series.
What the recruitment plan had to deliver
| Criterion | Target | Measured | Verdict |
|---|---|---|---|
| Teams in talks with the same rider on the first Monday (p90) | at most 8 | 4.1 (worst window: 9) | met |
| Competitor stars signed by a team in the prestige top 5 | at least 70% | 74% | met |
| Plan leaders with a lieutenant on their terrain | at least 75% | 93% | met |
| Teams that change focus from one window to the next | at most 20% | 14.8% | met |
| Top 20 projected young riders signed · of whom in the top division | 90% · 50% | 87% · 73% | partial: 87% is below target |
| Mercenaries who sign the best-paid offer | at least 70% | 63% | not met |
| Pair conclusion | 40 to 80%; at least twice “main” | 27.4% (“main”: 9.5%) | doubling met, band not |
| Neo-pros: quality of those signed − of those unsigned | positive | −1.15 | not met |
The cost: a simulated season takes 9% longer (11.9 s against 10.9 s), because the market panel, which the Recruitment screen re-reads after every command, computes the plan and the world ranking: it goes from 9 to 47 ms. We did not need to store the ranking in the state to keep it.
What is not right yet
A transfer market is a compromise between rich teams and ambitious riders, not a truth. Here is what we know we do not yet do well.
- Pair conclusion is still under its band. 27.4% rather than 40 to 80%, and no ticket has met it since T47a. A team still hears asks higher than its estimated price, because the rider’s true mentality and their agreements elsewhere escape it.
- Mercenaries do not sign the best-paid offer often enough (63% against 70% aimed for). A rider almost never waits: the agreement is taken at their ask, above the waiting threshold. The AIs improved an agreement only 17 times in twenty seasons.
- Neo-pros from the talent pool stay negative. The plan’s young rider is chosen on their public projection, which says nothing about their margin; only a scout reads it.
- The mentality is drawn at random, and the agent always tells the truth. An agent who lies, or a fooled scout, will come later.
- The levers are not there. The last season is capped at three seasons, and the settings on screen are greyed-out boxes. On T170’s programme: length up to five seasons, the signing bonus (paid up front from the current season’s budget), the guaranteed programme (“at the start of the Tour de France”), leader exclusivity, then result bonuses and a season option.
- No paid transfers. No release clause, no buying out a rider under contract: the game has no transfer fee, and we ruled it out at design time. Bundled contracts and agent characters too: the agent stays the rider’s voice.
- Old saves do not resume. The market changed model with every ticket; a career begun before is refused, not migrated.
Read next