Latest Retro Manager updates

What changed recently for players

V3.1.74 - SCOUT CARD FREEZESeptember 2026

  • Fix: dismissing scout report cards after the summer or winter transfer-window popup no longer freezes the hub. Honour screens wait for that popup too, then play one trophy at a time before the scout cards.

Full technical notes for every release continue below.

Changelog

RETRO MANAGER · PATCH NOTES

V3.1.74 - SCOUT CARD FREEZE

September 2026
  • **Fix:** dismissing scout report cards after the summer or winter transfer-window popup no longer freezes the hub. Honour screens wait for that popup too, then play one trophy at a time before the scout cards.

V3.1.73 - CELEBRATIONS & MATCHDAY

September 2026
  • **Honours:** winning the league, a promotion (including playoffs), the domestic cup, or the continental cup now opens a full-screen celebration — crest, trophy, confetti. Multiple trophies queue one Continue each.
  • **Matchday:** named bench is 7 (18-man list); empty chairs are allowed; both sides still get **5 substitutions** per match.
  • **Match:** strikers take a larger share of team goals.
  • **Transfers / economy:** youth academy players no longer get incoming loan offers; Big 5 D1 stars stay in the £20M+ band; lower-league official packs stop bleeding wages on merch.
  • **Inbox:** routine clean sheets, 0-0s, debuts, and injury-return lines are gone.

V3.1.72 - CAREER HISTORY & MATCH UX

September 2026
  • **Career:** player profiles have a History tab — winter transfers and loans write one line per club; season awards still count the whole year. Saves keep match detail unless slimming actually shrinks the file enough.
  • **Match:** opponents pick their Best XI at kickoff vs you (fitness, returns, new signings).
  • **World / results:** week results group by country (your nation first) when more than one country played.
  • **Scout:** the player-card popup still appears after Play Match, and waits until week results and weekly transfers are closed.

V3.1.71 - SHOOTOUTS, MATCH UX & TRANSFER FEES

August 2026
  • **Match:** knockout draws stay on the pitch for a watchable penalty sequence (clock PENS, named kicks, scored/saved/missed). Cup, continental, playoff final, and two-leg playoff second legs when the tie is still level. Flash to full time skips the sequence.
  • **Playoffs:** two-leg semis then a one-off final. No away goals — extra time and pens if aggregate is level after 90 of the second leg. First leg is 90 minutes only.
  • **Transfers:** world-class fees are in a more realistic range (around £20M at a big club). Lower-division players stay buyable.
  • **World / results:** home always left, away right; your club and players stand out; midweek Play Match can open week results; full-time overlay shows crests, scorers, and missed pens.
  • **Club:** Hall of Fame and club records are this career only. Squad badges (exp, wnt, and the rest) open the Contract tab.

V3.1.70 - MATCH COMMENTARY LOCALE

August 2026
  • **Match:** paused and resumed minutes now stay in the career language (Spanish, German, French, Portuguese, Italian) instead of dropping back to English.

V3.1.69 - ITALIAN LOCALE

August 2026
  • **Language:** Italian is now a full in-game locale — hub, club, finance, staff, stadium, competitions, settings, match commentary, and the rest of the career UI.
  • **Locales:** Spanish, German, French, Portuguese, and Italian in-game dictionaries are at zero translation debt (`npm run i18n:audit`).
  • **Still English:** marketing/store site copy, and some dynamic assistant advice generated at runtime.

V3.1.68 - SQUADS & THE FREE AGENT MARKET

August 2026
  • **Rival clubs:** AI squads keep their players instead of releasing most of them every summer and replacing them with newly invented ones — club identity now survives a long career.
  • **Contracts:** AI clubs renew far more of their own players, and a club short of bodies keeps a squad man rather than letting him walk.
  • **Free agents:** clubs actually sign from the free-agent pool, so it no longer grows into thousands of unsigned players nobody ever touches.
  • **Free agents:** players released this summer stay on the market, so you still get first look before rivals pick them up.
  • **Squads:** a club short of numbers signs a free agent or promotes its own youth before any new player is created.
  • **Careers:** save files stay much smaller over a long career, and rival squads keep their depth and wage bills instead of quietly decaying.

V3.1.67 - TACTICS & MATCH DAY

August 2026
  • **Tactics:** tempo now does something — higher tempo creates more attacking phases and turns control into shots more often; lower tempo quiets the game when you are seeing one out.
  • **Assistant:** style and formation suggestions read as options rather than guaranteed counters, and tempo/width advice matches what the engine actually does.
  • **Match day:** live match header shows attendance alongside competition and stadium (pre-match stays competition and venue).
  • **Transfers:** a popup now marks the transfer window **opening**, not just deadline and closing weeks.
  • **Hub:** sponsor offer prompt is a solid panel instead of a faint wash, so a waiting deal is hard to miss.
  • **Prematch:** Apply Best XI is available on the opponent report again, even when your XI is already complete.

V3.1.66 - MATCH UX

August 2026
  • **Match:** side lineup rails update after substitutions; live and summary ratings are color-coded (green ≥7.5, red <5.5).
  • **Match:** your red card auto-pauses and opens tactics; half-time assistant score copy no longer mismatches the scoreboard.
  • **Assistant:** hide empty hub/office recommendations and mid-match pitch check-ins when there is nothing useful to say.

V3.1.65 - FIXTURES & MATCH DAY

August 2026
  • **Fixtures:** league home/away no longer clumps into long runs (venue polarity by round); World Fixtures uses the same country/division strip as Standings.
  • **Match day:** top bar shows competition and home stadium (e.g. Premier League - Highbury); pre-kickoff subtitle matches.
  • **Assistant:** formation notes name the opponent so counter suggestions are clearer.
  • **Cards:** ABL/POT stars slightly larger and vertically centered.
  • **Carries V3.1.64:** staff pool, profile squad switcher, board job-security credit.

V3.1.64 - STAFF & PROFILE UX

August 2026
  • **Staff pool:** Available Staff tops up every role (DoF, GK Coach, Youth Coach) on load; mixed nationalities; coach types seeded across all division tiers.
  • **Your Team:** backroom order is DoF → GK Coach → Coaches → Physios → Scouts → Youth; open seats stay empty after season end until you hire.
  • **Scouts:** specialisms use **Current ability** / **Potential ability** labels; PA-focused scouts appear in the pool.
  • **Profile:** own-player **Squad** switcher (position, name, OVR) overlays the profile without closing it.
  • **Carries V3.1.63:** board realism, job-security credit, form hold-fire, default DoF + GK Coach seats.

V3.1.63 - BOARD REALISM

August 2026
  • **Board:** Premier survival / mid-table finishes no longer leap to a top-4 brief — D1 expectations step through mid-table (10th) first.
  • **Job security:** Overachieve or title seasons grant board goodwill (~half a season): under-target confidence hits soften and the sack line drops to 8% while credit lasts.
  • **Form:** Recent league results nudge confidence; boards will not sack you on a four-win streak.
  • **Staff seats:** clubs also default to **1 Director of Football** and **1 GK Coach** (Fitness stays hire-only). Open seats + season backfill apply; DoF still boosts bid accept chance, GK Coach still boosts GK training.

V3.1.62 - STAFF LIFECYCLE & SCOUT CAP

August 2026
  • **Scouting:** full scout reports capped at **5 × scout count** per week (Market + Profile); counter resets when you advance the week. Assistant discovery stays separate.
  • **Staff seats:** clubs default to **3 coaches**, **2 physios**, **2 scouts**, and **1 Youth Coach**; DoF / GK / Fitness stay hire-only. Season backfill fills missing defaults; free-agent pool ~48.
  • **Staff:** age, retire at 62, fired under-62 return to applicants; **specialism attributes** (defence/attack, judging CA/PA, recovery, etc.) drive best-of-role training, physio, scout, youth, and DoF effects. Age + specialisms in Office/profiles. **Overall** = rounded mean of specialisms.
  • **Staff interest:** applicants show Keen / Interested / Reluctant / Not interested from your division + reputation vs their rating; elite staff will not join weak clubs. Free-agent pool mixes quality bands so all leagues have hireable staff.
  • **Office:** empty default seats show as open slots (e.g. 2/3 coaches). Available Staff list supports search, role/interest/min-rating filters, and sortable columns. Staff wages are **100 / 250 / 500 / 1000** by ability (+ role nudge).

V3.1.61 - YOUTH OFF MARKET

August 2026
  • **Transfers:** Youth Academy players no longer appear on the transfer market or shortlist; bids, loans, AI club sales, and assistant discovery skip them.
  • **Carries V3.1.60:** Squad Stats list view; Steam HTML5 squad drag (Tauri `dragDropEnabled: false`); denser match overlays; Facilities news; 2s toasts.

V3.1.60 - SQUAD STATS & STEAM DRAG

August 2026
  • **Squad:** new Stats list view (season apps, goals, assists, AVR, YC, RC, MotM, mins, CS) — same width as Attributes.
  • **Steam / desktop:** HTML5 squad drag gates on real Capacitor native only; steam/mas/microsoftstore builds clear Capacitor env stamps; Tauri `dragDropEnabled: false` so webview HTML5 DnD works on Mac and Windows.
  • **Match:** solid prematch / half-time / full-time overlays; denser live match panels; toasts auto-dismiss after 2 seconds.
  • **News:** Facilities category for stadium stands, training-ground upgrades, and academy campus completions.

V3.1.59 - TRANSFER & MATCH UX

August 2026
  • **Transfers:** five failed bid/loan/wage attempts on the same player in one week walks them away until you advance (shared counter; saves keep the map).
  • **Manager career:** games managed / wins / win % update after each finished user match (season-end no longer the only tick).
  • **Live match:** Confirm changes + Undo for pitch↔bench; XI↔XI reshape is tactics-only; bench drag-and-drop; Auto XI keeps a spare GK when one exists.
  • **Tooling:** designer toast inventory (`docs/game-toasts-inventory.md`); `npm run test:ship` gates Steam/MAS/Microsoft Store/Capacitor prebuilds.

V3.1.58 - PLAY MATCH LOGGER OFF

August 2026
  • **Play Match:** debug journey logger is off by default again (opt-in via localStorage `rm_debug_play_match=1`); runbook + stress script documented in `docs/store_apps/play_match_large_career.md`.

V3.1.57 - MATCH EXIT LOOP

August 2026
  • **Play Match:** leave-match advances the week directly (no confirm dialog behind Finishing), waits for advance to finish before remounting the hub, and safety-clears the match shell so dashboard → match → dashboard can repeat.

V3.1.56 - PREMATCH BENCH HANG

August 2026
  • **Play Match:** Kick Off stuck on Preparing when two midfielders were injured — Auto XI bench builder looped forever with fewer than 5 leftovers; also harden Hungarian assignment and keep greedy injured XI fills on the sim hot path.

V3.1.55 - PLAY MATCH JOURNEY LOG

August 2026
  • **Play Match:** freeze was debug HUD writing DOM inside a React setState updater after squad ensure — prep now skips when XIs are ready, MatchSim mounts before prep, and the debug log covers hub → lineup → kickoff → HT → FT → exit → hub (file + localStorage mirror).

V3.1.54 - MATCH PREP AFTER OPENING

August 2026
  • **Play Match:** debug log froze in squad prep before Opening could finish — prep now runs after Opening paints; player-DB patch LZ is cached; hydrating clubs no longer remaps the whole world.

V3.1.53 - LIVE MATCH SHELL AGAIN

August 2026
  • **Play Match:** debug log showed click then freeze on MatchSim-in-hub — hub memos still ran on the same tree. LiveMatchShell is back (hub unmounts) with portal Opening / exit Finishing / autosave+LZ fixes kept.

V3.1.52 - MATCHSIM IN HUB

August 2026
  • **Play Match:** restore V3.1.40-style MatchSim overlay on the hub for Steam/desktop (LiveMatchShell route removed from the live path).
  • **Kept:** autosave pause / large-career LZ Worker, club-scoped Best XI & player indexes, portal-first MatchSim, Opening-match first frame, and Play Match debug file log.

V3.1.51 - PLAY MATCH FILE LOG

August 2026
  • **Debug (temporary):** Steam writes Play Match timing to `~/Library/Application Support/games.retromanager90.desktop/play-match-debug.log` (on by default; set localStorage `rm_debug_play_match=0` to disable).

V3.1.50 - OPENING MATCH HOLD

August 2026
  • **Play Match:** keep Opening match… until MatchSim finishes a cheap first frame, then load the heavy UI — stops looking stuck on Opening while the main thread builds the match screen.

V3.1.49 - PLAY MATCH DEBUG

August 2026
  • **Debug (temporary):** enable with localStorage `rm_debug_play_match=1` for Play Match timing marks + on-screen HUD (console: `__rmPlayMatchDebug.dump()`).
  • **Play Match:** open the match shell before squad prep, defer the full sim until after paint, and stop scanning the whole world for Best XI / player lookups on large careers (from V3.1.48).

V3.1.48 - PLAY MATCH YIELD

August 2026
  • **Play Match:** open the match shell before squad prep, defer the full sim until after paint, and stop scanning the whole world for Best XI / player lookups on large careers.

V3.1.47 - MATCH EXIT YIELD

August 2026
  • **Play Match:** leaving a match shows Finishing…, runs week-advance before remounting the hub, and defers week-results — avoids freezing on exit for large careers.

V3.1.46 - MATCH PORTAL FIRST PAINT

August 2026
  • **Play Match:** desktop/Steam MatchSim portals to the viewport on the first frame (no invisible inline/absolute mount inside the live-match shell); opening screen is full-viewport.

V3.1.45 - LIVE MATCH SHELL

August 2026
  • **Play Match:** live matches now run in an isolated shell so the hub fully unmounts — large multi-country careers no longer recompute the entire hub on every match state update (the real week-8 freeze).

V3.1.44 - BLOB LZ WORKER

August 2026
  • **Play Match:** LZ compress uses an in-app blob Worker (Tauri-safe) and never falls back to multi-second main-thread compress on large careers; load no longer idle-resaves huge worlds.

V3.1.43 - PLAY MATCH LZ WORKER

August 2026
  • **Play Match:** career LZ compress (~4s on large multi-country saves) now runs in a Web Worker so the UI stays responsive when opening a match; large careers still skip hub debounce autosaves.

V3.1.42 - LARGE CAREER PLAY MATCH

August 2026
  • **Play Match:** large multi-country saves no longer freeze on hub Play Match — career load / week idle no longer start a multi-second LZ compress before you can open the match; hub clicks only hold pending state until leave-match / manual save / delayed idle.

V3.1.41 - AUTOSAVE, TOP 50 & MATCH POLISH

August 2026
  • **Performance:** large multi-country careers no longer freeze the UI on hub clicks — autosave waits for idle and pauses as soon as you hit Play Match.
  • **World Top 50:** early-season apps gate kept soft through week 11 so the list shows active-league players, not only your squad with friendlies.
  • **Assistant:** in-form player names are clickable; hub all-clear briefings drop urgent filler lines.
  • **Match:** Attack half-time talk commentary is push-forward (not hairdryer); side-rail position+side and smaller card glyphs.
  • **Stability:** safer match entry when formation data is missing; sim failures toast instead of crashing.

V3.1.40 - MARKET AVR & ASSISTANT SCOUTING

August 2026
  • **Market:** **Interested only** filter (League / World / Shortlist) for targets who would realistically join; softer free-agent interest gate; clearer “not interested” toast naming the player.
  • **Desktop:** Steam/Tauri app opens **maximized** (not fullscreen).
  • **Market / squad:** list views on Market; squad **AVR** column; match overlay polish; national-team profile copy.
  • **Assistant:** Office discovery is **Scouting**, with a **one-week** report wait (windows are short).
  • **Tactics:** DMs are out of position in attacking-mid seats (AMC/AML/AMR/SS).
  • **Transfers:** Big Five rank-1 clubs stay in elite leagues; squad `wnt` tooltip is club names only.
  • **Economy (#31):** squad wages retuned against post-gate income.
  • **Copy / i18n:** shorter scout, shout, and match-why lines; Portuguese retargeted to Brazilian.

V3.1.39 - SQUAD VIEWS & TACTICS PACKS

August 2026
  • **Squad list:** wide Selection and live-match Personnel tables switch between General, Attributes, Contract, Training, and Status (saved on the device, not the career).
  • **Tactics:** export/import formation packs as JSON (no player IDs); custom-formation lookup on pack export; custom faces can tint to the club kit.
  • **Squad tabs:** Selection / Tactics / Youth stay on the last tab you used.
  • **Auto XI / hub:** Auto XI prefers natural roles without rewriting your formation; hub collapsible bars are opaque with a visible minimize control; sponsor offer CTA on the hub when a deal is waiting.
  • **Youth Academy:** commencing the next season tops the academy back up after promotions and age-21 leavers; the Youth tab remounts so you see the new roster.

V3.1.38 - KNOCKOUT EXTRA TIME & AWARDS

August 2026
  • **Cups:** Retro Cup and Retro Continental keep extra time and penalties after a live pause, tactics change, or flash-to-FT — a 1–1 no longer counts as going out with no shootout.
  • **Playoffs:** first-leg semis stay 90 minutes; the second leg only goes to extra time and pens if the tie is still live on aggregate and away goals; the final is still a single-leg shootout if drawn.
  • **Awards:** Ballon d’Or, Golden Boy, world Golden Boot, and domestic Player / Young Player of the Year need **20 appearances**.
  • **Squad / Youth:** name columns have more room on desktop.
  • **Tactics pitch:** formation changes keep XI cards mounted (less hitch with a full lineup); pitch green restored on the tactics / custom-formation screens.
  • **Squad Selection:** vacant roles show under **Empty positions** (informational); assign players with the **PK +** popover (or an empty pitch seat) — no lineup checkboxes.
  • **Assistant / contracts:** Youth Academy pipeline deals are excluded from “contracts need review” and the squad expiring badge (renew UI is senior-only).

V3.1.37 - DISPLAY CURRENCY

August 2026
  • **Display currency (#75):** eurozone careers (Spain, Germany, France, Italy, Netherlands, Portugal, Belgium) show **€** for the same ledger numbers; England and other packs stay **£**. No FX conversion.

V3.1.36 - EDITOR CRESTS & BULK FACES

August 2026
  • **Editor:** import custom team crests from device-local images for database packs.
  • **Editor:** bulk player face import with id-list matching and plate background support.
  • **Transfers:** AI clubs keep one window strategy; Market `wnt` badges; CPU U23 fringe loans; fire-sale/splash inbox copy (#68 P2).

V3.1.35 - NEWS LINKS & TRANSFER WINDOW

August 2026
  • **News:** inbox items can deep-link into the relevant game section; assistant CTAs open the right screen.
  • **Transfers:** no new incoming bids/loan offers on the week the window closes — avoids offers you cannot accept.
  • **Squad / Youth / Market:** faster tab switches, column sorting, and custom formation names on match screens.
  • **Editor:** Discord-ready Database Editor PDF guide plus blank JSON import starters.

V3.1.34 - STAFF & MANAGER PROFILES

August 2026
  • **Staff profiles:** Office → Staff opens a full profile (role, rating, wage, nationality, bio, joined week).
  • **AI managers:** Team Profile shows personality and bio; click through for the same profile dialog (stable per-club identity).
  • **Manager archetypes:** soft career tags on Manager Profile (trophy winner, promotion specialist, youth developer, and more).
  • **Staff roles:** optional hireable Director of Football, GK coach, fitness coach, and Head of Youth with light gameplay bonuses.
  • **Job market:** post-sack vacancies show a club brief (expectation, budget band, archetype fit).

V3.1.33 - LIVE PLAYER DEVELOPMENT

August 2026
  • **Live development:** players with room under potential can grow mid-season from minutes and training (age/headroom scaled; per-season caps + cooldown). Leftover bank still settles at season end; veterans unchanged.
  • **Player profile:** Development meter rates overall development quality (Poor → Excellent) with color coding and a how-to-improve tooltip.
  • **Fonts:** Settings → Appearance adds **RM0102** (clean geometric sans).
  • **Canvas background:** **Plain** replaces Plain black — pick a solid colour via swatches, hex, or colour picker.

V3.1.32 - GUIDE HUB & CLEAN FONTS

August 2026
  • **Office → Guide & Changelog:** in-career game guide, editor guide, FAQ, and patch notes (no more leaving to the marketing site); assistant tip points new managers there first.
  • **Website guides:** game/editor/FAQ pages use the expanded Steam-aligned content; changelog adds Back to game; marketing layout widened on desktop.
  • **Fonts:** Settings → Appearance adds **IBM Plex Sans** and **Source Sans 3**; optical size is normalized across all font options so switching faces keeps UI text consistent.
  • **Assistant discovery:** request report can filter by minimum potential stars (1★–5★, same scale as player cards).
  • **Active Leagues:** foreign active countries get opening Youth Academy intakes at career start (was limited to continental clubs by a boot-scope bug).
  • **Settings → Appearance:** upload a custom canvas background (device-local; auto-resized; PNG/JPEG/WebP); also adds a **Plain black** canvas option.

V3.1.31 - ASSISTANT CAREER TIPS

August 2026
  • **Assistant tips:** added 14 career gameplay tips (board confidence, preseason friendlies, transfer windows, training, youth, stadium/campus, physio, scout, discovery, lists, contracts, sponsors, active leagues, cups).

V3.1.30 - CAREER BOOT SCREEN

August 2026
  • **New career:** starting a game shows a full-screen Retro Manager **Game Environment** boot screen (8 staged tasks at 1.5s each, solid opaque backdrop); then the career commits.
  • **Start menu:** career selection uses the full viewport width so Active Leagues presets and club options are no longer clipped.

V3.1.29 - MATCH ASSISTANT DISMISS

August 2026
  • **Match assistant:** the secondary shout action is labeled **Dismiss** (was hardcoded Back).

V3.1.28 - GAME SMOOTHNESS (PHASE 4)

August 2026
  • **Store:** split GameState vs actions contexts; `useGameActions` / `useGameStateSelector` so action-only views skip state republishes.
  • **Autosave:** paused during live match (flush on leave / manual Save); week & season transitions persist on idle so the hub can paint first.
  • **Market:** no remount on every Market tab open; world pack hydrate deferred until World tab / scout recs; filter memos use narrow deps.
  • **Runtime RAM:** inbox / player history / country-archive caps applied in-memory after week and season (same caps as save).

V3.1.27 - TRANSFER SCROLL & FILTERS

August 2026
  • **Weekly transfers overlay:** the list scrolls with the overlay body (no nested scroll trap).
  • **World transfers:** weekly + archive tables use a single scroll region with sticky headers; archive filters by country, type, and season.

V3.1.26 - WEEKLY TRANSFERS COUNTRY

August 2026
  • **Weekly / World transfers:** tables show a **Country** column (buyer league country, seller fallback) so multi-country careers can tell which pyramid each deal belongs to.

V3.1.25 - GAME SMOOTHNESS (PHASE 3)

August 2026
  • **Advance week:** player/club/team Maps for AI Auto XI, fixture rollup, and weekly staff lookups (no more O(P×T) team finds).
  • **AI transfers:** seller/buyer squad pools reuse a club index rebuilt only after each successful deal (was rescanning the world up to 800×).
  • **Season transition:** country archive built once per sim country; intake/wage/lineup cleanup uses club + id indexes.

V3.1.24 - GAME SMOOTHNESS (PHASE 2)

August 2026
  • **Match theater:** attack-pressure chart builds one new minute per tick instead of rebuilding 1..N every second (full rebuild still on tactics/sub/result changes); chart EMA updates via `startTransition`.
  • **Live tactics:** debounced mid-match toggle changes no longer `flushSync`; opponent-report “apply all” batches into one flush before resync.
  • **Match UI:** `MatchPlayViewNew` and side rails are memoized; pitch fitness helper is stable across quiet re-renders.

V3.1.23 - GAME SMOOTHNESS (PHASE 1)

August 2026
  • **Nav chrome:** tab / club / world subview changes no longer rewrite full career GameState (or trigger autosave) on every click — last view still restores from save.
  • **Player profile:** Squad, Market, and Match open the shared profile host so a closed profile is fully unmounted (no idle `useGame` subscriber).
  • **Match overlays:** celebration / card pauses scale with playback speed but cap at 4s so ×¼ no longer lingers ~12s on goals.
  • **Squad list:** one TooltipProvider around the tables instead of a provider per badge cell.

V3.1.22 - PLAYER CARD NAME NUDGE

August 2026
  • **Player cards:** name and Wonderkid / Generational / World class tags sit a few pixels higher so they clear the gold divider above the stats.

V3.1.21 - QUARTER MATCH SPEED

August 2026
  • **Match playback:** **×¼** quarter-speed option alongside ×½, ×1, and ×2 (in-match speed button and OS Config default).

V3.1.20 - SEASON GROWTH UI

August 2026
  • **Season OVR deltas:** player cards, squad list, and profiles show overall as e.g. **56 (+2)** after season development (attributes still change at season transition; weekly play banks development points). Attribute rows show sparse season deltas; the profile Development panel adds a mid-season **dev bank** toward the next growth threshold. Starting the next season posts a Squad Development inbox note for your club when anyone moved.

V3.1.19 - PLAYER CARD ELITE LABELS

August 2026
  • **Player cards:** Wonderkid / Generational / World class tags sit in a band **between the name and stats**, so long labels no longer collide with the player name under ABL/POT.

V3.1.18 - YOUTH ACADEMY

August 2026
  • **Youth Academy tab:** Team now has Squad Selection | Tactical Hub | Youth Academy. Academy intake (yth) starts on the Youth Academy — not in the first-team list or Auto XI. A starter Youth Academy of **7–10** is created when a career launches; summers top the squad back up to 7–10. Assign individual **training focus** from the Youth Academy tab or Club → Training (Youth Academy section). Youth list hides OVR (potential as stars); profile Attributes / Contract / Report stay locked and the player card masks OVR + attributes until graduation. **Team Profile** also has a Youth Academy tab (same list rules for any club).
  • **Season promotion:** the best Youth Academy prospects graduate into the first-team squad when there is room (intake-sized slots under a soft senior cap); others stay on the Youth Academy. Graduates get a **1-year** deal; releasing a **yth** player is **free** until they renew. At **21** they must **graduate or leave** (free agent if no place). Season wrap shows promotions + new intake.

V3.1.17 - PLAYER PROGRESSION

July 2026
  • **Player development:** weekly development points now scale so regularly played youths can actually hit season growth thresholds. Previously thresholds were ~10× higher than a season’s banked DP, so attribute/OVR growth was almost only a rare lottery — explaining careers where a heavily used kid stayed flat for years.
  • **Season growth:** under-23s spend DP in clearer ~1 growth/season chunks (up to 3 if elite coaching/potential); peak ages refine skill toward their soft ceiling more slowly. Match ratings still only affect weekly DP for under-23s — attributes change at season transition. OVR remains capped by potential.

V3.1.16 - EDITOR OVR INPUT

July 2026
  • **Player database editor — Overall (GES):** typing a rating no longer glitches mid-keystroke (e.g. 77 → 59). Commit on blur/Enter; Higher/Lower buttons step by a real ability band instead of stuck browser spinners.

V3.1.15 - MIDWEEK FIXTURES

July 2026
  • **Midweek fixtures (cup + league same week):** finishing one match no longer auto-advances the week (which silently simulated your other fixture with the same XI and stacked fitness). You return to the hub for the midweek game — rotate, then play or consciously advance; Advance Week warns if a midweek fixture is still pending.

V3.1.14 - SEASON ACCOUNTS TRANSFERS

July 2026
  • **Financial Hub → Season Accounts:** buying and selling players during the transfer window now updates Transfer Spending / Transfer Sales. Bank balance was already correct; net balance was missing those fees (cosmetic).

V3.1.13 - SHORTLIST SCROLL

July 2026
  • **Transfer market shortlist:** long shortlists can scroll fully past the bottom nav — the last players are no longer cut off / blurred behind the fixed bar.

V3.1.12 - SHORTLIST SORT

July 2026
  • **Transfer market shortlist:** column headers (Name, Age, OVR, Pot, Value) now sort the Shortlist tab the same way as League / World — previously the headers looked clickable but the shortlist stayed in roster order.

V3.1.11 - EDITOR OVR SCALE

July 2026
  • **Player database editor:** edit dialog is wider (no sideways scrolling), with overall pinned beside attributes so you can see OVR impact while editing.
  • **Editable overall:** change OVR and attributes auto-scale (Potential lifts when needed). Overall is still derived — not stored in JSON.

V3.1.10 - EDITOR LIVE OVR

July 2026
  • **Player database editor:** overall rating is shown live while editing — a sticky OVR badge stays visible as you scroll, and updates immediately when you change position or attributes.

V3.1.9 - AUTO XI POSITION FIX

July 2026
  • **Lineup / Auto XI:** defenders are no longer treated as natural forwards. A strong CB will not be auto-picked into a striker/wing slot when real forwards (or attacking midfielders) are available — fixes the “defender randomly appears up front” report.
  • **Kickoff injury / suspension fill:** starting a match with an unavailable player now clears only those slots and refills by position, instead of rebuilding the entire XI (which could reshuffle healthy players into the wrong roles).

V3.1.8 - LABELS & SEASON ORDINALS

July 2026
  • **Position labels:** defenders always show **D** (with side, e.g. `D (R)`), never the rare cosmetic **DF**. The old label was easy to misread as “Defense or Forward”; those players were always defenders and only fit defensive slots.
  • **Existing saves:** any player still stored with `positionLabel: DF` is displayed as **D** in squad, cards, and youth intake.
  • **Season wrap-up:** final league place and board target use proper ordinals (`1st` / `2nd` / `3rd`) instead of always appending `th` (`1th`, `2th`, `3th`).

V3.1.7 - SUBSTITUTE RATINGS & MINUTES

July 2026
  • **Match player ratings:** manual / half-time substitutions (including goalkeeper changes) now get ratings and correct minutes at full time. Previously the FT ratings overlay could show the kickoff XI at ~90′ each while the player who came on had no rating and no minutes (and was not labeled Bench).
  • **Mid-match continuation:** keeps the true kickoff XI on the result, rates cameo subs after flash-to-FT / live re-sim, and records off/on minutes from SUB events even when the live lineup is already swapped.

V3.1.6 - CUP ROUND PROGRESSION

July 2026
  • **Cup / continental progression:** next-round draws now use fixtures after mid-week AI simulation, so later cup rounds schedule when ties are finished on advance (previously only pre-simmed results counted, so the cup often stopped after R64).
  • **Hub Play Match:** prefers cup / continental / playoff over league when both remain in the same week, so knockout ties are less likely to be auto-simmed after the league game.

V3.1.5 - MATCH COMPETITION LABELS

July 2026
  • **Match screens:** pre-kickoff, live match header, half-time, and full-time overlays show a human-readable competition label (league division, cup, continental, playoff, friendly) instead of raw enums like `LEAGUE`.
  • **Hub & results:** next-match card, tactics prep strip, game summary, and match reports use the same `getFixtureCompetitionLabel` helper (division names + cup rounds).

V3.1.4 - HUB LAST 5 SCORE FIX

July 2026
  • **Hub Last 5 results:** W/D/L and for–against scores now use the same **benefiting-side** goal totals as the match scoreboard / game summary (scorer `benefitsHome`, GOAL event `teamId`, then kickoff squad), instead of raw stored `homeGoals`/`awayGoals` that can drift after flash-to-FT or own-goal edge cases. Fixes cases like a 3–1 win showing as a loss on the dashboard.
  • **Match result normalize:** persisted `homeGoals`/`awayGoals` are realigned to those scorer-based totals when results are saved or loaded.

V3.1.3 - WORLD, EDITOR & PLAYER CARDS

July 2026
  • **Multi-country world:** load the full playable world at career start, with lighter memory use, **League / World** transfer market, and world scouting.
  • **Hall of Fame:** real manager and team boards with trophy icons, player cards on leaders and records, and retired alumni kept on team HoF.
  • **Custom faces:** import per-player portraits in the Database Editor — backdrop cutout, kit-tint tips, and a gold-framed white plate on cards.
  • **Editor fields:** edit **age**, **position**, and **side** (L / R / C / LC / RC / LR / ALL) in the UI and in JSON patches; wider editor tables; team search and club labels on exports.
  • **Ratings:** overall is derived from position-weighted attributes and **capped by Potential**, without wiping sleepers or lower-league gems.
  • **Match & squad feel:** mild play-style and side fit, late-match stamina fade, set-piece polish, softer home advantage, disciplinary lean, dressing-room morale, and training-load effects.
  • **Stability:** harder multi-country career boot and fewer world RAM spikes; market filter polish.

V3.1.2 - CUSTOM FORMATIONS, MATCH REPORTS & TRANSFERS

July 2026
  • **Custom formations:** build and save your own shapes on the tactics pitch — five-channel seat snap, auto role labels (DL / DLC / DC…), and magnetic player drops.
  • **Weekly Transfers Summary:** end-of-week transfer roundup so you can see who moved across the league.
  • **Assistant — incoming offers:** the assistant panel now advises when you have incoming transfer offers to review.
  • **Squad OFF marker:** players with a pending offer show **OFF** beside their name on the squad screen.
  • **Match reports:** read reports of the week’s games from the **World** tile.
  • **Own goals:** own-goal events use a **red football** icon in match feeds and reports.
  • **Ballon d’Or–style awards:** end-of-season prestige awards on the season wrap-up.
  • **General bug fixes** and polish across match, transfers, and squad UI.

V3.1.1 - SCOUT RECS, TOP 50 & WEB REFRESH

July 2026
  • **Scout REC markers:** transfer market **REC** toggle highlights scout-recommended targets when your club employs a scout (`PlayerMarket.tsx`, `scout-recommended.ts`).
  • **World Top 50:** form-weighted **hot list** in **World** with **All** and **U21** modes — apps, rating, goals/assists, OVR/POT (`WorldTop50Rankings.tsx`, `world-top-50.ts`).
  • **Matchday polish:** stadium **advertising hoardings** along the pitch; match summary and transfer-listing UX refinements.
  • **League & transfers:** AI results better reflect **squad strength**; improved bids on **listed players**.
  • **Website:** homepage **gameplay hero clip**, **email signup** for update news, **screenshots** gallery, and refreshed marketing pages.

V3.1.0 - ARGENTINA, PLAYER CARDS & TACKLING

June 2026
  • **Argentina domestic league:** new **4×20** country pack — **Liga Profesional**, **Primera Nacional**, **Primera B**, **Primera C** (80 clubs); career-start country picker entry; **20 bespoke Div 1 crests** under `public/team-crests/` (`teams-argentina.ts`, `domestic-country.ts`).
  • **FUT-style player cards:** dark/gold framed cards on **player profile**, **signing/scout moments**, and **academy intake** (`PlayerCard.tsx`, `PlayerCardMomentBridge.tsx`, `public/player-cards/`). Masked **OVR / ABL / POT** until scouted (`player-card-visibility.ts`).
  • **Tiered portrait frames:** **gold / silver / bronze / iron** (and glow variants) from **ABL** on cards, squad rows, tactics pitch, and hub stats (`FramedPlayerPortrait.tsx`, `player-portrait-frame-tier.ts`). **Elite labels** — Wonderkid, Generational, World Class — with scout-aware masking (`player-wonderkid.ts`).
  • **Tackling attribute:** new outfield stat in generation, match engine, profiles, and assistant **Auto XI** / lineup picks (`game-data.ts`, `player-generation-config.ts`).
  • **Season awards:** **Playmaker** (top assister) on the season summary; **Stats Hub** adds **goalkeeper** and **penalty** leaderboards (`prepare-season-summary.ts`, `SeasonSummary.tsx`).

V3.0.9 - PORTRAIT POOL & HD CRESTS

June 2026
  • **Player portrait pool:** refreshed art across **200** numbered slots (`000`–`101`, `106`–`203`); `npm run portrait-pool:import` for batch updates; transparent **card** variants under `background_removed/` (`player-portrait-url.ts`, `public/player-portraits/README.md`).
  • **Kit-coloured shirts:** portrait PNGs **tint** the shirt layer to the club’s **primary kit** colour (`PlayerPortrait.tsx`).
  • **HD team crests:** imported kit-pool badges **86–116**; bespoke **Div 1** crests for **Netherlands, Portugal, Brazil, Belgium, Turkey, and Poland** top flights (`team_kits.json`, `docs/team-crest-reference.md`).
  • **Staff & manager portraits:** shared PNG pool for non-player profiles (`staff-portrait-url.ts`).

V3.0.8 - CAMPUS, NEW COUNTRIES & LEADERBOARDS

May 2026
  • **Campus screen:** illustrated **stadium overview** with layered PNG stands, pitch, lights, and commercial art; **training** and **academy** tier visuals (`CampusScreen.tsx`, `campus-assets.ts`, `StadiumOverview.tsx`, `public/stadium/`).
  • **Academy focus:** managers set **youth intake positional focus** from Campus (quality/output/discipline projects align with training tiers).
  • **Stand seating:** new stadium upgrade track and cost-matrix docs for seating capacity projects.
  • **Six country packs:** **Belgium, Brazil, Netherlands, Poland, Portugal, Turkey** — each a standard **4×20** domestic pyramid with bundled team data and crest mapping (`domestic-country.ts`, `teams-*.ts`).
  • **Global leaderboard:** world rankings with **Supabase** auto-sync from career saves; **PostHog** analytics for career start/resume.
  • **Localization:** **German (de)** and **French (fr)** UI dictionaries; language picker on career start; expanded **Spanish** coverage across match, tactics, and editors.

V3.0.7 - STEAM RETAIL, WORKSHOP & MATCH TELEMETRY

May 2026
  • **Steam retail shell:** **Tauri** desktop app opens **`/steam-intro`** (not the marketing home); **static export** target for Steam builds; **universal macOS** binary (Intel + Apple Silicon depots) plus Windows depot refresh (`steam/`, `docs/store_apps/STEAM.md`).
  • **Steam Workshop:** subscribe, browse, and **apply** player/database mods from in-game Workshop UI; publish pipeline and player guides (`docs/store_apps/`).
  • **Steamworks:** **rich presence** during careers; local **achievements** unlock to Steam in the retail shell.
  • **Match telemetry:** per-player **minutes** and event meta retained in saves; telemetry-backed **career achievements**, **assistant fact lines** (HT/FT + week news), **match summary narratives**, and division **xG** table (`match-telemetry.ts`, PLAN #48 D2–D4).
  • **Hub & match polish:** experimental **dashboard** layout (next-match card, stats row/carousel); **one-screen match theater** option; **league table position** in the shell top bar; **transfer-window advance gate** when open deals would be lost.

V3.0.6 - iOS APP STORE & CLOUD PRIVACY

May 2026
  • **iOS App Store:** paid **no-ads** Capacitor build; **AdMob** removed from native pipeline; privacy policy updated for store release.
  • **Privacy page:** `/privacy` linked from cloud account panel and site nav.
  • **Web vs native:** marketing **About** page; Steam builds hide web-only **Pro checkout** and ad surfaces.

V3.0.5 - MATCH PLAYBACK, SAVE SLOTS & LIVE RESYNC

May 2026
  • **Match playback:** default speed setting in OS Config; **×½** half-speed option alongside ×1 and ×2.
  • **Save slots:** multiple career slots with named saves and resume picker.
  • **Live match resync:** re-simulates when pre-kickoff XI changes from stored kickoff ids (`MatchSim.tsx`).
  • **Market:** **value band** filter and **side** (left/right) filter on transfer listings.
  • **Sacking flow:** fixes for manager dismissal and job-market transitions after board action.

V3.0.4 - GLOBAL DATABASE EDITORS & INTERNATIONAL UI

April 2026
  • **Global database editors:** split **global** vs **save-only** scopes; **competition renaming** with global persistence; **crest** and **portrait pickers** in Team/Player Database editors.
  • **International squads:** World **International** view shows **one nation at a time** with nationality flags on nation tiles.
  • **Opponent tactics:** read-only view of the opponent’s formation and instructions before kickoff.
  • **Per-player training focus** in squad management.

V3.0.3 - MATCH AUTO-PAUSE, NEWS CLEAR ALL & UI POLISH

April 2026
  • **Appearance defaults & naming:** Default **tactics pitch** is **Tile**; default **match layout** is **Expanded** (one-screen theater when side lineups apply). OS Config labels use paired names (**Tile** / **Classic**, **Expanded** / **Compact**, **Split row** / **Classic fixture card**, etc.); **Live match spacing** uses **Comfortable** / **Tight** (replaces the old “Compact” density label to avoid clashing with match layout).
  • **Match auto-pause:** OS Config → **Appearance → Game options** — **Auto-pause match at minute** (device-local; default **65′**, range **46–120**). When enabled, the live match **pauses once per fixture** at that minute and opens **tactics** on the **Personnel** tab so you can adjust the XI; the trigger is skipped if that minute already has a **goal**, **red card**, or **injury** event (`matchAutoPauseEnabled` / `matchAutoPauseMinute` in `appearance.ts`, `AppearanceProvider`, `SettingsHub`, `MatchSim`).
  • **Side lineup rails:** when **Side lineups (wide screens)** is on at **xl+**, the bottom **Live ratings** strip is **hidden** so player rows are not duplicated beside the home/away rails (`MatchSim.tsx`).
  • **News feed:** **Clear all** dismisses every headline currently shown in the filtered list (same week’s items); wired via `dismissMessagesByIds` in `store.tsx` and **Clear all** in `NewsFeed.tsx`.
  • **Assistant:** `suggestCounterFormation` uses **diversified** counter picks against the opponent’s shape where multiple formations are valid (`assistant-logic.ts`, `tests/suggest-counter-formation.test.ts`).
  • **Steam (macOS):** first **SteamPipe** upload for **Retro Manager** (App **4613680**, depot **4613681**); Tauri bundle from `src-tauri/target/release/bundle/macos`. Local upload scripts live under `~/steam_upload/retro_manager/` — see **`steam/README.md`** and **`docs/store_apps/STEAM.md`**.

V3.0.2 - AI MATCHDAY SUBS & SIDE LINEUP RAILS

April 2026
  • **AI in-match substitutions (career path):** `simulateMatchForGameWeek` now passes **matchday bench** players (lineup slots 12–16) into `simulateMatch`, so **non-user teams** use the existing engine **`SUB`** logic (`match-sim-game.ts` **`matchdayBenchForTeam`**, `store.tsx` simulate week / fixture / advance week / fast-forward). **Your team** is unchanged — still **manual** subs only. Fast-forward season keeps **full 16-slot** auto lineups for AI clubs so benches exist.
  • **Side lineup rails:** OS Config → **Appearance → Game options** → **Side lineups (wide screens)** adds scrollable **home / away** columns (live rating, match fitness, goal and card markers) on **xl+** viewports; optional widened match shell (`MatchSim.tsx`, `MatchLineupSideRail.tsx`, `useMinWidthXl`, `appearance.ts` / `AppearanceProvider` / `SettingsHub`).
  • **Match density:** Settings → **Appearance → Match screen** — **Compact** tightens padding, scoreboard, commentary, tactical blocks, and stats on the live match view (Classic and New). Device-local (`matchScreenCompact` in UI prefs; `match-play-density.ts`, `MatchPlayView.tsx`, `MatchPlayViewNew.tsx`).

V3.0.1 - TEAM CREST IMAGES & PROCEDURAL CREST POLISH

April 2026
  • **Team crest images:** optional **PNG or WebP** crests via root-relative paths (for example under `public/team-crests/`). `ClubCrest` loads the asset with **`publicAssetUrl` / `runtimePublicAssetUrl`** (itch-style builds) and **falls back to the procedural crest** if the file is missing or fails to load. `Team.crestPublicPath` is editable in **Team Database** and flows through global DB patches and share sanitization (`team-crest-url.ts`, `public/team-crests/README.md`).
  • **Procedural crests:** more variety (**hexagon** and **lozenge** shapes, **saltire / quarters** pattern, **cross** center) plus monogram and ring polish for readability at small sizes (`crest-generator.ts`, `ClubCrest.tsx`). Because the generator option sets grew, **a given team id may get a different shape or palette than before** (one-time visual reshuffle unless the spec is versioned).

V3.0.0 - STABLE RELEASE

April 2026
  • **Major version:** Retro Manager **3.0** — stable release line. Product UI version (`APP_VERSION` / changelog) is **3.0.0**; npm package **`retro-manager-90`** is aligned at **3.0.0**.
  • **Shipped scope (this line):** OS Config — **choose which hub news / desktop ticker message types** to show (`hiddenNewsMessageTypes` in UI prefs; **TRANSFER** and **LOAN** always visible). **Season stats** table — **sortable column headers** (full division list, apps ≥ 1). Prior **V2.7.38** highlights remain: World **All Teams** grid, continental invitee **countries** & pools, **player portrait** PNG pool, squad **captain / set-piece** dropdown polish, and documentation updates.

V2.7.38 - WORLD ALL TEAMS, CONTINENTAL CLUBS & UI POLISH

April 2026
  • **World — All Teams:** new **World office** tile opens a **division-filtered grid** (DIV 1–4 strip) of domestic clubs with crest, points, and standings order; **click a tile** to open the same **Team profile** flow as the league table (`AllTeamsGrid.tsx`, `WorldSubView` **`ALL_TEAMS`**).
  • **Continental invitees:** expanded fictional **division 0** club bank; each invitee has a **`country`** (matches `NATIONALITY_POOLS`) stored on `Team`; new name pools (**Turkey, Poland, Greece, Denmark, Austria, Croatia**); procedural squads for invitees **bias toward home nationality** (~78%) via `generatePlayer` **`homeNationality`**; **Team Database** and **Europe** friendly picker show country where relevant.
  • **Player portraits:** deterministic **PNG pool** (`public/player-portraits/pool/000.png`–`097.png`, **98** slots) keyed by `player.id`, with **procedural SVG fallback** on missing/failed load; see `public/player-portraits/README.md` and `player-portrait-url.ts`.
  • **Squad UI:** **Captain** and **set-piece taker** (corners / free kicks / penalties) dropdown lists use the **same typography as player names**; stat hints use **primary** colour and **one decimal** place.
  • **Docs:** `README.md`, `docs/FEATURES.md`, `docs/PLAN.md`, `docs/GAME_SYSTEMS_OUTLINE.md`, `docs/GAME_GUIDE.md`.

V2.7.37 - FULL CAREER PLAYER HISTORY IN SAVES

April 2026
  • **Saves:** `Player.history` is no longer truncated to five seasons on write — each season line (**appearances**, **goals**, **average rating**, **club name**) is kept for the full career. Match **fixtures** stay on the existing slim pipeline (`save-utils.ts` `DEFAULT_PLAYER_HISTORY_SAVE_CAP = ∞`).
  • **Docs:** `docs/PLAN.md` §5, `docs/STORAGE_AND_CLOUD_SAVES_PLAN.md`.

V2.7.36 - ECONOMY, PHYSIO, PLAYER WORLD & POLISH

April 2026
  • **Economy (backlog #31):** central `economy-config.ts`; `advanceWeek` gates for merch and match income; season prizes and sponsorship flows; `FinanceHub` tooltips; diagnostics `npx tsx scripts/economy-sanity.ts`; Vitest in `src/lib/economy-config.test.ts`; `tests/financial-stability.ts` aligned.
  • **Physio room (backlog #29):** Office **Physio** sub-view (`PhysioRoom.tsx`); `Injury.treatmentTier` and paid treatments with weekly charge on `advanceWeek` (`injuryTreatment.ts`); profile hooks; tests in `src/lib/injuryTreatment.test.ts`.
  • **Player standards (backlog #10 — first tranche):** `player-generation-config.ts` — procedural seniors use **division-based international weights**; **senior potential** with **lower-league sleepers** (high PA, modest CA); **Premier League soft cap** on elite PA; continental invitees uncapped; **`generateForeignPlayerPool`** wider PA spread.
  • **Official roster pack:** `tuneCuratedPackPlayerForDivision` in `roster-pack.ts` — same PA rules on new curated careers, **deterministic per player id**.
  • **Match quality:** kickoff XI resolution and rating reconciliation for lineups with gaps (`game-engine.ts`, `store.tsx`); tests in `match-played-ratings.test.ts`.
  • **Assistant / MatchSim:** shout primary control shows **Apply** when toggles or mapped zone boosts apply, else **OK** (`MatchSim.tsx`; RTL test updated).
  • **News ticker:** ~**50% slower** scroll (`news-ticker-duration.ts`); reduced-motion headline **16s**; `GameNewsTicker.tsx` wired.
  • **Tests / CI:** `player-generation-config`, `news-ticker-duration`; calibration **describe** timeout **30s**; **scorer rating boost** uses aggregate mean over many matches (`game-engine.test.ts`).
  • **Docs & porting:** `docs/PLAN.md`, `FEATURES.md`, `stats.md`, `GLOBAL_DATABASE_IMPORT_GUIDE.md`, `SWIFT_PORTING_GUIDE.md`, `README.md`.

V2.7.35 - MATCH SUMMARY & AI SCOREBOARD

April 2026
  • **Game summary:** headline score, half-time strip, assistant narrative inputs, saves vs SOT, and chance-quality lines are driven from **goal lists** using the same **benefiting-side** rules as the attack-pressure chart (`scorerCreditsHomeSide`: `benefitsHome`, then matching **GOAL** event `teamId`, then match-day squad ids). Avoids score vs goal-list mismatches (e.g. own goals, older scorer rows, flash-to-FT quirks). Goal rows show a **ball** marker next to each scorer.
  • **Flash-to-FT / mid-match continuation:** when trimming a pre-run result and simulating from a later minute, **home/away goal totals** are recomputed with that same benefiting-side logic instead of counting by scorer club only.
  • **Match scoreboard (AI opponent):** under the AI team name, the line always shows **current effective formation · play style** from kickoff; when live shape differs from preferred ethos it prefixes **Chasing** / **Protecting** / **Adjusted** (unchanged thresholds). Your side still has no duplicate tactics strip.
  • **Docs & guides:** `docs/TACTICAL_BATTLE_BARS.md`, `docs/FEATURES.md`, `docs/PLAN.md`, `docs/GAME_SYSTEMS_OUTLINE.md`, `docs/attack-pressure-chart-engine-inputs.md`, `README.md`, `docs/GAME_GUIDE.md`, in-app guide (`/guide/game`), and **Best tactics** page updated to describe the above.

V2.7.34 - MATCH UI & STATS FIXES

April 2026
  • **Attack pressure chart:** goal/card markers use **fixed-size CSS card tiles** and a boxed goal glyph so icons are not stretched by system emoji rendering.
  • **Player match stats:** **shots** are at least **goals** when a goal is credited without a matching `shotTakers` row (typical **own goals** — scorer vs shooter). Same adjustment for **weekly aggregated** shot counts after each result.

V2.7.33 - ASSISTANT SUMMARY COPY

April 2026
  • **Match summary assistant (experimental):** tighter full-time prose — less repetition after the stat block, more natural score and possession lines, keeper workload without echoing shots-on-target counts, and sharper red-card context.

V2.7.32 - ATTACK PRESSURE GOAL CREDIT

April 2026
  • **Attack pressure chart (experimental):** goal markers now credit the **benefiting** team — same order as the engine: `benefitsHome` when present, then the matching **GOAL** event `teamId`, then squad. Fixes wrong-side ⚽ for own goals and older scorer rows without `benefitsHome`. Per-minute chart samples use the same attribution.

V2.7.31 - FRIENDLY POOLS & MATCH POLISH

April 2026
  • **Arrange friendly:** **Division** opponent list uses domestic league divisions **1–4** only so European invitee clubs do not appear there; **Europe** stays on division **0** invitees (with legacy foreign-market fallback).
  • **Attack pressure chart:** goal and card markers render in an **HTML overlay** so icons are not stretched by the SVG viewBox.
  • **Match summary assistant (experimental):** clearer narrative ordering and copy on full-time summary.

V2.7.29 - EUROPE FRIENDLY PICKER RELIABILITY

April 2026
  • **Arrange friendly (Europe tab):** opponent sourcing now prefers real in-save **division 0** invitee clubs, so European options appear reliably when invitees exist in the save.
  • **Legacy compatibility:** if invitee clubs are missing (older saves), the picker falls back to synthetic foreign-market Europe entries.

V2.7.28 - ATTACK PRESSURE MARKER POLISH

April 2026
  • **Attack pressure chart:** reduced goal/card marker icon size to avoid visual squashing at chart edges while keeping marker readability.

V2.7.27 - DIVISION PLAYOFFS + CALIBRATION GUARDS

April 2026
  • **EFL-style playoffs (Div 2/3/4):** after week 42, positions 3-6 enter single-leg semifinals and a final (`PO-SF`, `PO-F`) for the third promotion slot in each division.
  • **Promotion logic:** season summary and rollover now use playoff winners as promoted teams (with playoff-winner labeling), while keeping 3-up/3-down balance through the pyramid.
  • **Engine benchmarks:** shot/goal tuning and calibration guards were tightened, including ratio checks and soft-tail protections for extreme shot/score outliers.

V2.7.24 - EUROPEAN-STYLE FOREIGN CLUBS

April 2026
  • **Foreign market club names:** expanded synthetic parent clubs to European-style identities (for example **Madrid White**, **Catalonia Blue & Red**, **Munich Red**, **Turin Black & White**, **Paris Blue & Red**, etc.) while keeping fictional naming.
  • **Assignment logic:** players in the foreign pool now pick a random club within their nationality group instead of always resolving to one regional bucket.
  • **Market display:** foreign listings now show the synthetic club name (fallbacks still apply for legacy ids).

V2.7.22 - AI IN-MATCH SUBSTITUTIONS

April 2026
  • **Match engine:** AI teams now make practical in-match substitutions from bench players (planned windows plus injury replacements), while managed user teams keep manual substitution control.
  • **Continuation parity:** pre-existing `SUB` events are replayed into active lineups when simulating from a later minute, avoiding stale-on-pitch state in flash-to-FT continuation paths.
  • **Tests:** `game-engine.test.ts` now asserts AI substitution behavior and user-team no-auto-sub behavior.

V2.7.20 - REGIONAL POOLS, NEWS & COMMENTARY

April 2026
  • **Regional talent pools:** `applyNationalityFlavour` — England outfield +1 stamina; **France** pace+skill and **USA** pace+stamina (split from the old combined group); goalkeepers in several nations get +1 stamina. **Youth wonderkid** rolls use small multipliers for South American and select European nationalities (`generatePlayer`).
  • **Match-week news:** larger deterministic pools — derby 0-0, shutouts, goal fests, braces, late winners.
  • **Live commentary:** extra lines in attack, midfield, and defence buckets (`commentary.ts`).
  • **Docs:** `docs/PLAN.md`, `docs/FEATURES.md`, `docs/SWIFT_PORTING_GUIDE.md` updated for the above.

V2.7.19 - OPPONENT REPORT APPLY ALL + FAQ

April 2026
  • **Pre-match Opponent report — Apply all:** applies merged **formation/play style** and **match instructions** first, then **Apply Best XI** (so the XI fits the new shape), then **opens the tactics overlay** when any line asks for tactical review; review-only rows (e.g. **DANGER MAN**) are included in the count and recorded as accepted.
  • **Help → FAQ:** answers for **OK vs Back** on in-match assistant prompts, **match shout** title variety across windows, **half-time Assistant** buttons, and **Apply all** on the opponent report.
  • **docs/PLAN.md:** shipped section updated for **V2.7.17–18** assistant and match UI notes.

V2.7.18 - ASSISTANT IN-MATCH PARITY

April 2026
  • **Half-time assistant:** each tip can include a **Tactical Review** action that opens the in-match tactics overlay and records acceptance.
  • **Opponent report:** **DANGER MAN** includes the same **Tactical Review** shortcut.
  • **Match shouts:** consecutive shout windows avoid repeating the **same title** when another option exists (fallback if the pool would be empty).
  • **Settings → Assistant:** short note on **OK** vs **Back** on in-match assistant prompts and how learning uses outcomes.

V2.7.17 - MATCH SUMMARY ASSISTANT (EXPANDED)

April 2026
  • **Assistant summary (experimental):** richer copy — **clean sheets**, **goalkeeper saves**, **corners**, **shooting accuracy** vs **volume**, **discipline** (cards), **0–0 / low‑goal** deadlock, **high‑shot** or **cagey** pace, **comfortable margins**. Up to four extra sentences after the core story (full time); half-time still light. Same deterministic picks per fixture.

V2.7.16 - MATCH SUMMARY ASSISTANT (EXPERIMENTAL)

April 2026
  • **Settings → Appearance → Game options:** optional **Assistant summary** on **Match summary** — a short paragraph tying **score**, **possession** (model), **xG**, and **shots** (split-story when ball and chances disagree; finishing vs xG when clear). Deterministic per fixture (`game-summary-assistant-narrative.ts`). Off by default.

V2.7.15 - PWA SERVICE WORKER (NEXT CHUNKS)

April 2026
  • **Service worker (`public/sw.js`):** Next.js bundles under `/_next/static/` (and `/_next/data/`) now load **network-first**, then update cache — fixing stale **JS chunks** paired with fresh HTML on **custom domains** (returning visitors). That mismatch could break React and in-game behaviour (e.g. match clock appearing stuck); **preview** URLs often looked fine with a cold cache.
  • **Docs:** `docs/vercel-deployment.md` — unregister SW / hard refresh if odd behaviour persists after deploy.

V2.7.14 - ASSISTANT COPY (ACTIONABLE)

April 2026
  • **Assistant / Suggestions mode:** half-time and full-time lines are rewritten so the **first sentence** (what you see in **Suggestions**) always points at a **real action** — Strategy, Tactics, Squad, subs, formation, training focus, or Dashboard training.
  • **Match shouts** (`getMatchShouts`): fatigue, form, and pitch check-in lines tie to **subs**, **Strategy**, or **Tactics**; enhanced **board** and **injury** tips name **Club**, **Squad**, and **Training focus**.
  • **Tests:** `assistant-match-narrative` checks that suggestions clipped text still names an actionable surface.

V2.7.13 - COPY & NEWS VARIETY

April 2026
  • **Week news:** deterministic **brace** (two-goal) headlines and **shutout / clean-sheet** lines for low-scoring wins (league/cup); expanded tabloid pools stay **`stablePick`-seeded** for consistent saves.
  • **Commentary:** more lines in `TAGGED_LINES` and main buckets (attack, midfield, defence, save, miss, goal).
  • **Assistant match narrative:** extra **shots-chaser**, **0–0 half-time**, **discipline**, and **opponent threat** variants (still `narrativeSeed` / `pickVariant` deterministic).

V2.7.12 - POSSESSION ON RESULT

April 2026
  • **Fixture result** now stores **`homePossessionPct`** (0–100, home share) at the end of **`simulateMatch`**, using the same display pipeline as live bars (`getEngineAlignedZoneRatingsForDisplay` + `getPossessionFromDisplayedRatings`). Quick-sim and saved fixtures can show possession on **Game summary** without opening `MatchSim`.
  • **Game summary** uses `result.homePossessionPct` when set, otherwise the live prop from `MatchSim`. **Save slimming** retains `homePossessionPct` when present.

V2.7.11 - GAME SUMMARY BREAKDOWN

April 2026
  • Full-screen **Match summary** (half-time + full-time): **Goals & discipline** in one home/away block — scorers with optional **assists** and `(o.g.)` where appropriate, cards per side, yellow/red totals; **competition** line under the score.
  • **Story strip:** half-time score (full match), **weather**, **attendance**, and **possession** (from live `MatchSim` display). **Standouts:** highest **match rating** per side from `result.ratings`.
  • **Chance quality** panel: goals vs **xG** with delta, **shots on target %**; **assist leaders** line; **injuries**, **substitution** counts, **penalties** / shootout when relevant; **extra time** minutes included when filtering scorers/cards.
  • Code: `GameSummaryView.tsx`, `MatchSim.tsx` (`possessionHomePct`). Docs: `docs/PLAN.md`, `docs/FEATURES.md`.

V2.7.10 - AI HALF-TIME TEAM TALKS

March 2026
  • When you pick a **half-time team talk**, the **AI opponent** now gets a **deterministic** talk of their own (`pickAiHalfTimeTeamTalk`) using the same **second-half zone matrix and decay** as your side, so the second half is not one-sided.
  • Wired through **`MatchLiveModifiers.opponentTeamHalfTimeTalk`**, `getLiveZoneModifiers`, live match display, and **flash-to-FT** continuation. Skipping the talk picker (kick off without choosing) still gives **neither** side a talk effect.
  • Docs: `docs/PLAN.md` §1 — **global team/player patches** plus **JSON export/import**; `docs/FEATURES.md` half-time bullet; `docs/DEEPER_SHOUTS_AND_TEAM_TALKS_PLAN.md` M6.

V2.7.9 - ACHIEVEMENTS EXPANSION & QA

March 2026
  • **Career achievements** — **eight** new local meta-goals (now **51** total): **Road warrior** (win every away league match in a season), **Unbreakable run** (10 consecutive league games unbeaten), **Shutout streak** (5 consecutive league clean sheets), **Transfer merchant** (≥£2.5M net profit from transfers in a season), **Homegrown regular** (academy youth with 15+ apps in a season), **Loan army** (3+ loan players in the squad at once), **Scout network** (20 full scout reports locked), **International star** (squad player with 10+ caps). Same persistence and merge-on-load behaviour as V2.7.8.
  • **Tests**: Stabilised the **formation vs outcomes** check in `game-engine.test.ts` (more samples, goals/shots/**chances** comparison) to avoid RNG flakes.
  • Docs: `docs/FEATURES.md`, `docs/PLAN.md`, `future_features.md`, `docs/GAME_SYSTEMS_OUTLINE.md` synced.

V2.7.8 - CAREER ACHIEVEMENTS

March 2026
  • **Career achievements** — **38+** local meta-goals (including **Invincibles** for a full league season with no league losses) (league/cup/continental milestones, derbies, hat-tricks, penalty shootout wins, cup runs, big wins & sales, academy/stadium/sponsor, international caps & wonderkids, tactical/defensive seasons, longevity, board/fan moods, and more). Unlocks persist in your save; loads **merge** persisted ids with earned conditions so **new** achievements backfill for existing careers without duplicate toasts.
  • Club → **Legacy & Records**: **Career achievements** grid with locked/unlocked cards; toasts when you unlock during play.
  • Code: `src/lib/achievements.ts`; hooks in `advanceWeek`, `buyPlayer`, `hireStaff`, `startNextSeason`.

V2.7.7 - ASSISTANT SHOUT ZONE BOOSTS

March 2026
  • Certain **in-match assistant shouts** (Force errors / See out the game / Pitch check-in) apply a **short-lived live zone display** boost when you tap **OK**, on top of any tactical toggles the shout applies.
  • **15′ per-effect cooldown** on those zone boosts (toggles still apply every time). If the shout also sets **pressing high** or **tempo low**, the zone slice is **smaller** so the same intent is not double-counted against team-talk-style toggles.
  • Brief **status line** after OK when a boost applies or when you are still on cooldown. Effects clear at **full time** or **flash to FT**; display-only (same path as team talks v2), not written into the sim event stream.
  • Code: `src/lib/shout-zone-effects.ts`; `UserShoutZoneEffect` + `getLiveZoneModifiers` / `getEngineAlignedZoneRatingsForDisplay`; `MatchSim.tsx`.

V2.7.6 - TEAM TALKS V2 (ZONE & DECAY)

March 2026
  • Half-time team talks (Encourage / Calm / Aggressive) now apply **different** second-half zone tweaks by **score at the break** (behind, level, ahead): e.g. chasing a game favours forward zones on an aggressive talk; protecting a lead favours calmer shape on Calm.
  • Effects are **strongest from 46′–60′** and **fade to neutral by ~73′** instead of one flat boost for the whole half.
  • Half-time UI: each option shows a short **effect hint**; the pitch overlay uses a higher stack order so the talk picker sits above the stats sheet. **Away** fixtures get the same talk flow as home (managed side).
  • Code: `src/lib/team-talk-effects.ts`; `getLiveZoneModifiers` + `getEngineAlignedZoneRatingsForDisplay` take `userTeamId` and goals-at-45 context.

V2.7.5 - CANVAS BACKGROUNDS & COPY V1

March 2026
  • Club → OS Config → Appearance: pick a full-screen canvas background behind the floating UI (bundled art under `public/backgrounds/`). Default stays the classic stadium image; choice is saved on this device and reapplies after load (including Itch-style relative static builds).
  • Code: `src/lib/background-themes.ts`, `CanvasBackgroundSync` in root layout after the service worker hook.
  • Match and UI copy: expanded deterministic pools for commentary, assistant half-time/full-time and in-match shouts, and weekly inbox headlines — same stable picks where the engine already keyed them.
  • Assorted flavour and polish from the same pass: week-news and foreign-market lines, generatePlayer nationality snippets, small Market/Profile tweaks.

V2.7.4 - TRANSFER DEADLINE WEEK

March 2026
  • Transfer deadline week (summer week 4, winter week 26): higher chance of AI moves, incoming bids for your players, and incoming loan offers when you advance the week; optional tabloid-style deadline rumour inbox lines.
  • Entering a deadline week adds a board memo; Market shows an amber banner. Phase labels spell out that the window shuts after you advance past that week.
  • Advancing out of the window with open transfer business (pending deal, bids, counters, or loan offers) asks for confirmation so deals are not lost by accident.
  • Helpers: `isTransferDeadlineWeek` in `game-engine.ts`.
  • Dashboard (HUB): assistant panel hides the redundant “Why this?” block and uses a tighter layout so the quote and actions stay primary.

V2.7.3 - PRO ENTITLEMENTS (FOUNDATION)

March 2026
  • Club → OS Config → Pro unlockables: device-local Pro flag (not stored in career save). Prepares for future IAP bundle (remove ads, extra slots, editors). Development builds: Grant Pro / Clear Pro for testing.
  • Code: `src/lib/entitlements.ts`, `useProUnlocked()` hook for gating UI when features ship.

V2.7.2 - HUB & INBOX POLISH

March 2026
  • Weekly headlines: loan items tied to expired or removed offers are auto-marked read and no longer show Accept/Decline; same cleanup runs when loading a career save.
  • Assistant loan tips that send you to Market now switch the database to Domestic and set Contract / loan → On loan only so incoming offers and loan-listed players are easier to find.
  • Dashboard tab shows an amber count badge when there are unread loan headlines for the current week.
  • E2E: changelog page smoke test (visible heading + version entry).

V2.7.1 - STADIUM MATCHES CLUB STANDARD

March 2026
  • New careers: each club’s starting stadium (stands, pitch, lights, commercial, facilities, prestige) scales with reputation and division as well as capacity — big clubs no longer look like small grounds just because the numbers are similar.

V2.7.0 - CORPORATE HOSPITALITY & FICTIONAL GROUNDS

March 2026
  • Stadium projects: three-tier corporate hospitality track (lounge → executive suites → premium hall). Each tier adds hospitality level (0–3) and extra gate income on top of commercial retail.
  • Commercial project “Hospitality boxes” renamed to “Concourse retail unit” so it’s distinct from the new hospitality track.
  • All Division 1 (and Preston) home ground names in data are fictional — no real stadium trademarks.

V2.6.9 - STADIUM NAME

March 2026
  • Club → Finance → Stadium & infrastructure: rename your home ground (applies to legacy `stadium` and full `stadiumData`); shown on the stadium overview and elsewhere the name appears.

V2.6.8 - INDEXEDDB SAVE FALLBACK

March 2026
  • Career saves still use compressed localStorage first; if the ~5MB quota is exceeded, the game stores the career blob in IndexedDB (same browser, same site) and keeps a small flag in localStorage.
  • Successful localStorage saves also mirror to IndexedDB when available, as a backup if site data is cleared selectively.
  • Load career checks localStorage, then IndexedDB when needed (including resume after IDB-only storage).

V2.6.7 - ASSISTANT MATCH CONTEXT & RESET

March 2026
  • In-match accepts (Assistant Manager Ack, opponent briefing actions) record score and minute for post-match outcome learning; match context uses structured entries instead of title-only lists.
  • Assistant manager: Ack records an accept with snapshot; dismiss still skips without outcome linkage.
  • Settings → Assistant: Reset assistant learning clears accept/dismiss and match-outcome tallies (mode unchanged).
  • Saves with legacy `titles`-only match context migrate on load; Assistant manager fatigue/underperformance lines pick from several variants deterministically.

V2.6.6 - WEIGHTED OUTCOME RANKING

March 2026
  • Assistant advice ranking now applies margin-aware weights: 2+ goal wins/losses count more than one-goal margins; legacy tallies sit between. Chip totals are unchanged; only sort order uses the weighted net.

V2.6.5 - OUTCOME MARGIN CONTEXT

March 2026
  • In-match assistant outcomes now record whether the result was a one-goal or 2+ goal win/loss (draws unchanged). Ranking still uses total helpful minus harmful per tip; office tags show totals with tooltips breaking down one-goal vs 2+ vs legacy tallies from older saves.

V2.6.4 - ASSISTANT MODE & OUTCOME CAPS

March 2026
  • Club → OS Config → Assistant: choose Full (adaptive ranking + tags), Suggestions (same tips, no history-based ranking — telemetry still saved), or Off (no dashboard assistant, no in-match assistant manager or opponent briefing blocks; no new learning).
  • Per-advice outcome tallies cap at 8 per title; each new season applies a soft decay so old results fade.

V2.6.3 - ASSISTANT OUTCOME TAGS

March 2026
  • Assistant Manager Office: each suggestion can show small outcome tags when you have history — wins or losses after using that tip in a match (↑ wins after / ↓ losses after). Draws do not change these counts. Ranking already factors this alongside accept/skip; the sidebar note now says it learns from choices and results.

V2.6.2 - SCOUT CONCLUSIONS

March 2026
  • Player profile Report → Scout conclusion: richer headline + detail (OVR vs potential, position, recent form, personality traits). Wonderkid-style wording only for players aged 20 or under; older flagged wonderkids use a maturing headline.
  • Non-squad players: conclusion hidden until you run a scout report (Club → Staff scout required); IDs stored in save as scoutedPlayerIds. Your own squad always has the full write-up. Signing a player clears them from the external scout list.
  • Arrange friendly: opponent picker lists every other club (your division first, then others) with normalised division 1–4 so a bad/missing division on your team can’t empty the list.
  • Assistant UX polish: assistant action buttons now show a short Applied confirmation with duplicate-click guard in Assistant Manager Office and pre-match opponent briefing.
  • Polish: friendly arrange toasts (not preseason, already scheduled, invalid opponent, success); dialog stays open on failure; taller scroll on small screens; a11y hint id on dialog. Docs: FEATURES preseason line; PLAN backlog synced (captain/international/window countdown shipped); design notes live under docs/MATCH_RATING_SPEC.md and docs/YOUTH_SUGGESTIONS.md.
  • Branding: product display name **Retro Manager** (npm package id remains `retro-manager-90`). Career default start season remains configurable (e.g. 2025).

V2.6.1 - TESTS & TRANSFER WINDOW QOL

March 2026
  • Tests: youth-academy season transition uses fixed-age contracts so intake isn’t flaky when players retire or expire; engine-v2 and game-engine rating tests use aggregate same-XI / many-match stats instead of one random match.
  • Transfer window: Office (career stats) and Market show countdown to the next window when closed (winter from league weeks, summer preseason after week 26); helpers getTransferWindowCountdownLabel / getTransferWindowPhaseLabel in game-engine.ts.

V2.6 - YOUTH ACADEMY OVERHAUL

March 2026
  • Club academy profile: each team has academy quality, output, positional focus, and discipline (new careers get varied rolls; legacy saves use stable defaults from division + reputation).
  • Annual intake class: every club gets 1–3 academy youths per season (output-driven), with weighted positions from focus, formation, and squad needs — no automatic youth per leaver.
  • Squad fillers: if a club is below 16 players after intake, cheap senior players are generated (not academy youth).
  • Youth ages at intake: mostly 16–18 with occasional 15-year-olds; potential and wonderkid odds scale slightly with academy quality; discipline nudges professionalism.
  • Academy upgrades (Finance → Stadium & infrastructure): Improve / Expand / Elite projects (cost + weeks) raise quality and/or output when complete, like stadium expansion.
  • Minutes-based development (C1): youth under 23 get bonus/penalty to weekly dev from minutes played and match rating; injured or unused youth grow slower.
  • Intake quality band + messaging (C2): each intake rolls Poor/Steady/Promising/Excellent; wonderkid chance scales with band; user sees "ACADEMY INTAKE DAY" message with class and scout flavour.
  • Development variance + soft ceiling (C3): youth get developmentRate (0.7–1.3) and developmentEfficiency (0.85–1.0); effective skill cap = potential × efficiency; not every prospect reaches ceiling.
  • Rollback: set USE_ACADEMY_PROFILES or USE_ACADEMY_UPGRADE to false in src/lib/youth-academy-config.ts to disable new intake or upgrade UI.
  • Tests: tests/youth-intake.test.ts (incl. intake band); youth-academy and season tests updated; see docs/YOUTH_ACADEMY_UNIFIED_PLAN.md.

V2.5 - LIVE RATINGS, MATCH STATS & DOCS

March 2026
  • Live ratings during match: collapsible "Live ratings" block below the pitch shows ratings that update with the clock (performance so far); only players who have played so far are listed; block has its own scroll (max 50vh).
  • Match stats for ratings visibility: optional stat columns (Min, G, A, Sh, SOT, Svs/Conc/CS for GK) and tooltip on rating cell in SummaryRatings; summary and live stats from getMinutesPlayedMap and result data; used in half-time/full-time overlay and Live ratings block.
  • Half-time and full-time overlay: popup extends to show full lineup via scrollable ratings area and slightly wider max width (max-w-6xl/7xl); boundHeight={false} so tables grow and parent scrolls.
  • Pre-match Lineups overlay: same scroll behaviour so full XI + bench is visible.
  • Docs: docs/YOUTH_PLAYERS.md – academy intake flow, potential, attributes, development points and growth; docs/PLAYER_RATINGS.md, TACTICAL_BATTLE_BARS.md, SWEET_SPOT_PLAN.md added.

V2.4 - CUP UX, WEEK RESULTS & PLANS

March 2026
  • Week results screen: after advancing the week, a dedicated results view shows all that week's results (League by division, Retro Cup by round, Friendlies) with Continue to dismiss.
  • Cup UX: dedicated Cup view under World tab (fixtures by round R1→F); match day list grouped by League — Div 1–4, Retro Cup — round, Friendlies.
  • Preseason: Skip to next week on the dashboard next to Arrange friendly (and when a friendly is scheduled) so you can skip without playing.
  • Results screen uses the same format as the fixtures screen (header, list style, row layout).
  • Unified plan: single docs/PLAN.md (roadmap, backlog, status); old plan docs removed (retro-manager-v2-plan, STAGED_FEATURES_PLAN, full-review-opportunities, futurefeatures, pwa_plan, CODEBASE_REVIEW). README and FEATURES.md updated.

V2.3 - PRESEASON, CUP & MOBILE SCALE

March 2026
  • Preseason: 4 weeks (1–4) before league; arrange friendlies vs same-division clubs; advance week with or without playing.
  • Retro Cup: 32 teams (8 per division), knockout R1→R2→QF→SF→Final; extra time and penalties for draws; next round drawn when a round completes.
  • League calendar: 38 matchdays in weeks 5–42; standings and fan mood from league fixtures only; cup/friendlies don’t affect table.
  • Hub and match day: Preseason label, Arrange friendly, cup round badges (R1/QF etc.); Fixtures button opens week’s games; next fixture shows cup round when applicable.
  • Mobile: GameScaleWrapper renders game at 1366×768 and scales to viewport; one layout on desktop and phone; letterbox background; body scroll locked on /game only.
  • Tests: preseason-cup.test.ts (isPreseason, cup entrants, R1 generation, winners, next round); fixture-integrity league-only; winter transfer window 24–26.

V2.2 - CALIBRATION & TEAM PROFILE

March 2026
  • Team profile: click any team (league table or hub Division Snapshot) to open team overview, squad, and manager details.
  • Master calibration tests (tests/master_calibrate.md): goals, shots, cards, fouls, injuries, and penalties distribution asserted in tests/engine-v2/master-calibrate.test.ts.
  • Cards-per-game calibration: yellows/reds tuned to realistic bands; proportion with ≥1 red 10–25%, 2+ reds <5%.
  • In-match penalties tracked: result.penaltiesAwarded for calibration; penalty distribution test (0 / 1 / 2+ pens) added.
  • England flag display fixed (🇬🇧) across TeamProfile, PlayerProfile, SquadList, and related components.
  • AI managers use first name + surname (e.g. Alan Ferguson).
  • Squad selection: deselecting a player clears only that slot; others stay in position.
  • Docs: single canonical benchmark doc tests/master_calibrate.md; docs/stats.md points to it.

V2.1 - MATCH ENGINE IMPROVEMENTS

March 2026
  • Phase-based match flow: possession, territory, attack progression (central/wide/counter/set piece/long shot).
  • Team and player match profiles: tempo, directness, pressing, finishing from formation, play style, and squad quality.
  • Shot context and quality: shot type (one-on-one, foot, header, long range, set piece), pressure/assist/keeper factors, on-target and goal probability.
  • Outcome resolution: BLOCKED, MISS, SAVE, GOAL, WOODWORK; saves and blocks can lead to corners.
  • Calibrated player ratings and cards; red-card and in-match injury handling with active squads updated live.
  • Momentum derived from possession, territory, and shots; displayed on match screen; feeds into phase pressure.
  • Derby modifier and "Derby Day" tag for rivalry fixtures; increased attendance and match tension.
  • Weather (Rain/Snow): conversion and play modifiers applied; stored in result and shown in UI.
  • Injury-time and late-goal tension; Man of the Match (PoM) on full-time overlay; red-carded players greyed with icon.
  • Tunable engine config (goals, shots, set pieces, fouls, cards, injuries); optional arcade preset for higher scoring.

V2.0 - MATCH ENGINE, WORLD & APPEARANCE

March 2026
  • Full Match Engine V2: phase control, shot quality, ratings, momentum, derby, weather, Man of the Match; tunable config and optional arcade preset.
  • Rivalries, fan mood (Furious/Concerned/Happy/Delighted), and attendance linked to form and board pressure.
  • Player personality traits (Professional, Leader, Big Match Player, etc.) affect development and morale.
  • AI manager sackings and job market; new manager bounce when taking over a club.
  • Seasonal awards, Manager of the Month, club legends, career timeline, Hall of Fame.
  • Yellow card accumulation and suspensions; clean-sheet bonuses; transfer rumours; sponsorship deals.
  • Youth academy intake and wonderkids; procedural portraits and radar charts in profiles.
  • Appearance system: choose font (IBM Plex Mono, Inter, VT323, Press Start 2P) and color theme from OS Config.
  • Eleven color themes: Default, Warm, High contrast, Classic Retro, Neon Night, Stadium Lights, Tactical Board, Midnight Manager, Sunset League, Retro Terminal, Ice Blue.
  • Player Profile Report tab: section headers 20px, scout conclusion headline 28px, Best Role badge and development/psych/career stats typography hierarchy.
  • Contract tab: larger labels and buttons in Negotiation Console, Transfer Status and Release cards.
  • Attribute names increased to 14px in profile Overview and Attributes tabs.
  • Academy youth label "yth" now displays in green (accent) in Squad List and Team Roster.
  • Start menu: INITIALIZE CAREER button aligned with Management Philosophy explanation; team list extends to fill the gap.
  • MatchSim: fixed homeSquadIds/awaySquadIds used before initialization (runtime error).

V1.5 - POLISH & BALANCING

March 2026
  • Calibrated match engine to historical 90s benchmarks (avg 1.35 goals/team).
  • Balanced home advantage to realistic levels (~46% win rate for equal sides).
  • Economic stabilization: Recalibrated wages and prize pools for long-term health.
  • Added informational tooltips to Finance Hub and Player Profiles.
  • Created comprehensive feature documentation (docs/features.md).
  • Validated 20-season progression for financial stability.

V1.4 - MATCH DEPTH & ECONOMY

March 2026
  • Implemented Interactive Half-Time Team Talks with tactical modifiers.
  • Added Stadium Expansion projects (Small, Medium, Large tiers).
  • Integrated Finance Hub for club infrastructure management.
  • Added dynamic attendance based on club reputation and division.
  • Improved match commentary with half-time feedback.

V1.3 - PLAYER DEPTH

March 2026
  • Implemented Recent Form tracking (last 5 matches).
  • Added Match Sharpness (Condition) mechanics and decay logic.
  • Introduced Development Points for seasonal attribute growth/decline.
  • Added Age-based evolution: youngsters grow, veterans decline.
  • Enhanced Player Profile with in-depth stats and history.

V1.2 - SQUAD MANAGEMENT

March 2026
  • Developed full Squad List and Tactics Pitch interfaces.
  • Implemented 16-player match-day squads (11 starters, 5 subs).
  • Added Drag-and-drop lineup management.
  • Introduced Player Market with AI transfer bidding.
  • Standardized formations (4-4-2, 4-3-3, 5-3-2, etc.).

V1.1 - CORE ENGINE

February 2026
  • Initial Match Engine development (Zone-based simulation).
  • League Pyramid extraction (4 Divisions, 81 Teams).
  • Implemented 38-week season schedule and League Table logic.
  • Added Manager Persona and Board Expectations.
  • Created Retro UI Foundation (90s aesthetic).

End of changelog // No further updates listed