Nuffle Arena

Changelog

Historique public des nouveautes et corrections de Nuffle Arena. Egalement disponible en flux RSS.

  • v1.101.0

    ✨ Features

    • pro-league: level-up applier (skill rolls aux seuils BB) (Lot 3.C.4)
    • pro-league: SPP attribution + career counters + progression cron (Lot 3.C.2)
    • pro-league: structured sim error logs + slow sim warn + drift alerts (Lot 4.A)
    • pro-league: wire casualty sweep + roster-aware applier (Lot 3.C.1)
    • sim-engine: comparator hybrid vs full + EngineComparison + Prometheus (Lot 3.B.2)
    • sim-engine: perf baseline + verbose trace pour le full driver (Lot 3.B.3)
    • sim-engine: TD scorerId in events + 3 SPP per TD attribution (Lot 3.C.3)
    • sim-engine: toggle hybrid/full driver par saison + override match (Lot 3.B.1)
  • v1.100.0

    ✨ Features

    • sandbox: create test matches from admin (Lot 2.C.2 + 2.C.4 + 2.C.5)
    • sandbox: exclude isTest matches from aggregators (Lot 2.C.3)
  • v1.99.0

    ✨ Features

    • sim-engine: full driver emits MatchEvent[] via state diff (Lot 3.A.2.b)
    • sim-engine: full driver MVP orchestrator (Lot 3.A.2.a)
    • sim-engine: roster-aware GameState builder for full driver (Lot 3.A.2.c)
  • v1.98.0

    ✨ Features

    • ai: 2-ply minimax lookahead for END_TURN (Lot 3.A.0.b)
    • ai: per-race opening book bonus (Lot 3.A.0.c)
    • ai: tactical profile modulates AI weights (Lot 3.A.0.a) , closes #4
  • v1.97.0

    ✨ Features

    • admin: sim health + broadcaster live UIs (Lot 2.B.3 + 2.B.4)
    • metrics: instrument sim-runner + broadcaster (Lot 2.A.3 + 2.A.4)
    • metrics: Pro League sim engine metrics (Lot 2.A.1 + 2.A.2)
    • schema: isTest flag on ProLeagueMatch (Lot 2.C.1)
    • web: i18n Pro League components + feed + me (sprint i18n.5) , closes #661 #662 #664 #671
    • web: i18n Pro League gazette + hall-of-fame (sprint i18n.3)
    • web: i18n Pro League matches detail + live + replay (sprint i18n.4)

    📝 Documentation

    • audit: Lot 3.A.1 — AI game-engine assessment for full driver
    • roadmap: sprint sim-engine — observability + full driver + sandbox , closes #655 #658

    ♻️ Code Refactoring

    • game-engine: extract choice handlers (S27.8.7)
    • game-engine: extract failure helpers (S27.8.4)
    • game-engine: extract getLegalMoves to legal-moves.ts (S27.8.11)
    • game-engine: extract handleBallPickup + canUseTeamReroll (S27.8.5)
    • game-engine: extract handleBlitz to blitz-handler.ts (S27.8.13) — DoD <=600 atteint
    • game-engine: extract handleBlock + import cleanup (S27.8.8)
    • game-engine: extract handleLeap/Move/Dodge + handleDumpOffChoose (S27.8.12)
    • game-engine: extract move sub-handlers (S27.8.6)
    • game-engine: extract multi-block + frenzy from actions.ts (S27.8.10)
    • game-engine: split block-action — extract handleBlock (S27.8.15) , closes #683
    • game-engine: split choice-handlers — extract handleRerollChoose (S27.8.14)
    • server: extract handleGetMatchSummary to dedicated module (S27.8.32)
    • server: extract handleHireStarPlayer to dedicated module (S27.8.31)
    • server: extract handleUpdatePlayerSkills to dedicated module (S27.8.30)
    • server: split match.ts — extract 3 kickoff handlers (S27.8.21)
    • server: split match.ts — extract 3 readonly handlers (S27.8.17)
    • server: split match.ts — extract 4 lifecycle handlers (S27.8.20)
    • server: split match.ts — extract 5 details/list handlers (S27.8.19)
    • server: split match.ts — extract handleGetMatchState (S27.8.18)
    • server: split match.ts — extract handleValidateSetup (S27.8.29)
    • server: split match.ts — extract spectate + replay handlers (S27.8.16)
    • server: split team.ts — extract 2 selection handlers (S27.8.26)
    • server: split team.ts — extract 3 mutation handlers (S27.8.25)
    • server: split team.ts — extract 4 player handlers (S27.8.24)
    • server: split team.ts — extract 4 readonly handlers (S27.8.22)
    • server: split team.ts — extract 4 star-player handlers (S27.8.23)
    • server: split team.ts — extract handleBuildTeam (S27.8.27)
    • server: split team.ts — extract handlePurchase (S27.8.28)
    • server: split team.ts — final extraction + S27 TERMINE (S27.8.33)
  • v1.96.0

    ✨ Features

    • web: i18n Pro League standings + leaderboard (sprint i18n.2)
  • v1.95.0

    ✨ Features

    • server: wire audit log into admin-data routes (S27.6.4)
    • sim-engine: every yard the ball moves is a narrated MOVE event
    • web: /pro-league/about marketing page (sprint 1.F.4) , closes #630 #631 #632
    • web: i18n Pro League hub + about pages (sprint i18n.1)

    ♻️ Code Refactoring

    • game-engine: extract turn + foul handlers (S27.8.3)
  • v1.94.1

    ♻️ Code Refactoring

    • game-engine: extract pass family handlers (S27.8.2)
  • v1.94.0

    ✨ Features

    • sim-engine: space key-moment events inside the turn window
    • sim-engine: successful passes advance the drive (and can score) , closes #1

    🐛 Bug Fixes

    • sim-engine: cap single-turn yards so TDs span multiple turns , closes #2
    • sim-engine: turnovers no longer chain into a same-turn TD , closes #2

    ♻️ Code Refactoring

    • sim-engine: drop dead hasPossession field on DriveState
  • v1.93.0

    ✨ Features

    • web,e2e: replay keyboard shortcuts + Playwright spec (sprint 1.G.5)
    • web: auto LIVE vs REPLAY mode redirect (sprint 1.G.3)
    • web: TD/CASUALTY/NUFFLE markers on replay scrub bar (sprint 1.G.4)

    ♻️ Code Refactoring

    • game-engine: extract special-action handlers (S27.8.1)
  • v1.92.0

    ✨ Features

    • game-engine,server: skeleton Saison 4 BB3 (S27.5)
    • mobile: a11y board PixiBoardNative (S27.4.1)
    • mobile: hook composite useGameMatch (S27.4.2, cloture S27.4)
    • mobile: i18n des ecrans cups (S27.3.16)
    • mobile: i18n des ecrans leagues (S27.3.15)
    • mobile: i18n des ecrans match + replay (S27.3.18)
    • mobile: i18n des ecrans star-players (S27.3.17)
    • mobile: i18n des titres de navigation (S27.3.19, cloture S27.3)
    • server,db: audit log admin foundation (S27.6.1)
    • server,web: UI lecture du journal d'audit (S27.6.3, cloture S27.6)
    • server: replay dump endpoint for completed matches (sprint 1.G.1)
    • server: wire audit log into admin routes (S27.6.2)
    • sim-engine: enriched narrator + regen 50 panel replays on 0.13.0
    • web: MatchReplayPlayer with scrub bar + speed controls (sprint 1.G.2)
    • web: Pro League sitemap + JSON-LD SportsLeague/FAQ (sprint 1.F.3)

    📝 Documentation

    • panel: regenerate 50 panel replays on engineVer 0.13.0 (post iter #12-16) , closes #12-16 #12-16 #12-16 #13-14 #15-16 #12-16 #594 #12-16 #594 #595

    ♻️ Code Refactoring

    • game-engine: Horns/PileDriver/SneakyGit via registry (S27.7.3, cloture S27.7)
    • game-engine: Sprint GFI cap via skill registry (S27.7.2)
    • game-engine: Stunty AV via skill registry (S27.7.1)
  • v1.91.0

    ✨ Features

    • server,db: casualties post-process roster (sprint 1.E.4)
    • server,db: Pro League badges/titres (sprint 1.D.9) , closes #614 #615 #616 #617 #618 #619 #621 #622
    • server,web,db: Pro League Hall of Fame light (sprint 1.E.5)
    • server,web: Pro League bet leaderboard (sprint 1.D.8)
    • server,web: Pro League Gazette models + UI (sprint 1.E.2)
    • server,web: SEO metadata + Pro League healthcheck (sprint 1.F.2)
    • server: Pro League LLM Gazette daily generation (sprint 1.E.1)
    • server: Pro League rookie generator + seed + replenish (sprint 1.E.6)
    • server: Pro League storyline detector + Gazette daily recap (sprint 1.E.3)
    • turnstile: injecte NEXT_PUBLIC_TURNSTILE_SITE_KEY au build Next.js
    • web: Pro League betting UI (sprint 1.D.7)
  • v1.90.0

    ✨ Features

    • admin: UI lecture des replays panel pour validation C6-C9
    • db: Pro League bet markets + bets + settlements (sprint 1.D.2)
    • db: Pro League Prisma models (sprint 1.A.1)
    • mobile: i18n des popups in-match (S27.3.14)
    • mobile: i18n play/[id] screen (sprint S27.3.13)
    • mobile: S27.3.12 — i18n migration of player detail screen
    • server,db: Pro League wallet + transaction ledger (sprint 1.D.1)
    • server,web: Pro League detailed standings page (sprint 1.C.5)
    • server,web: Pro League fan follow + feed (sprint 1.C.4) , closes #609 #611 #612 #610
    • server,web: Pro League hub page (sprint 1.C.1)
    • server,web: Pro League match detail page (sprint 1.C.3)
    • server,web: Pro League team detail page (sprint 1.C.2)
    • server: activate Pro League sim runner cron at boot , closes #600
    • server: engine version policy + replay freeze (sprint 1.A.5)
    • server: Pro League bet endpoints (sprint 1.D.4)
    • server: Pro League bet settlement + cron (sprint 1.D.5)
    • server: Pro League match broadcaster (sprint 1.B.1)
    • server: Pro League odds calculator (sprint 1.D.3)
    • server: Pro League scheduler service (sprint 1.A.3)
    • server: Pro League sim runner service (sprint 1.A.4)
    • server: Pro League wallet rewards + endpoints (sprint 1.D.6)
    • server: SSE endpoint /pro-league/matches/:id/stream (sprint 1.B.2)
    • sim-engine,db: Replay storage + compression CBOR + gzip (sprint 1.A.2)
    • sim-engine: tuning iter #10 — engineVer 0.11.0 (breakthrough 16% + 8 Nuffle casualty events) — pause user
    • sim-engine: tuning iter #11 — engineVer 0.12.0 (breakthrough 18% + TV delta bonus → C1 5/5 ✓)
    • sim-engine: tuning iter #12-16 — engineVer 0.13.0 (TV recalibration → C2 atteint sur Ogres vs Halflings) , closes #12-16 #12-16 #13-14 #15-16
    • sim-engine: tuning iter #6 — engineVer 0.7.0 (breakthrough 8% + nemesis_clash casualty)
    • sim-engine: tuning iter #7 — engineVer 0.8.0 (breakthrough 10% + +40 vs soft D + tantrum/cocky casualties)
    • sim-engine: tuning iter #8 — engineVer 0.9.0 (breakthrough 12% + crowd_riot 50% + Halflings tv 850)
    • sim-engine: tuning iter #9 — engineVer 0.10.0 (breakthrough 14% + TV gap cap 200) — 2 matchups en cible C1
    • web: Pro League Pixi field visualization (sprint 1.B.3) , closes #606 #606 #606

    📝 Documentation

    • panel: regenerate 50 panel replays on engineVer 0.12.0 , closes #11 #11
  • v1.89.1

    🐛 Bug Fixes

    • nav: Soutenir en nuffle-red (#7A1F1F) au lieu du gris , closes #7A1F1
  • v1.89.0

    ✨ Features

    • sim-engine: tuning iter #4 — engineVer 0.5.0 (defensive disruption + bash /25 + breakthrough +30) , closes #3 #5
    • sim-engine: tuning iter #5 — engineVer 0.6.0 (Nuffle casualty injection + bash /28 + breakthrough 6%)

    🐛 Bug Fixes

    • admin: conditionne le lien Ligues au feature flag leagues_v2_ui
  • v1.88.0

    ✨ Features

    • mobile: S27.3.11 i18n teams detail screen (FR/EN)
    • nav: refonte menus principal et utilisateur (Option A)
    • sim-engine: tuning iter #2 — engineVer 0.3.0 (block→armor + tv per team + bash counter + fat-tails)
    • sim-engine: tuning iter #3 — engineVer 0.4.0 (upset metric fix + bash recalibration) , closes #2
  • v1.87.0

    ✨ Features

    • sim-engine: tuning iteration #1 — race-aware LOS + pace yards (0.E.1)

    🐛 Bug Fixes

    • admin: add missing Ligues link in admin sidebar nav

    📝 Documentation

    • pro-league: gate Phase 0 → Phase 1 — closes Phase 0 (0.E.4)
    • pro-league: kit panel BB experts (sprint 0.E.3)
  • v1.86.0

    ✨ Features

    • sim-engine: replay sampling tool — pnpm sim:replay (0.E.2)
  • v1.85.0

    ✨ Features

    • admin: petit utilitaire admin pour simuler des paires Pro League
    • initialize @bb/sim-engine package with public API
    • mobile: i18n auth screens (login/register) — S27.3.5
    • mobile: i18n leaderboard screen — S27.3.7
    • mobile: i18n matchmaking screen — S27.3.6
    • mobile: i18n teams list screen — S27.3.8
    • mobile: i18n teams new screen — S27.3.9
    • mobile: S27.3.10 — script audit i18n (baseline 42 strings)
    • mobile: S27.3.3 i18n sub-components settings/*
    • mobile: S27.3.4 refactor lobby.tsx + i18n lobby.* complet
    • shared-types: typed MatchEvent format with EventType catalogue (Pro League 0.A.3)
    • sim-engine: 16 profils raciaux Pro League (0.B.3)
    • sim-engine: BB action resolvers (block/dodge/pass/pickup/gfi/foul) — Pro League 0.A.5
    • sim-engine: behavior tree 3-passes + 6 strategies + 5 patterns — closes lot B (0.B.1)
    • sim-engine: bibliothèque Eye of Nuffle (28 events scriptés) (0.C.1)
    • sim-engine: CI bench regression gate — closes lot D (0.D.4)
    • sim-engine: CLI pnpm sim:bench (runner + formatter + report) (0.D.1)
    • sim-engine: cross-match PlayerForm avec decay sur 3 matchs — closes lot C (0.C.4)
    • sim-engine: dataset référence FUMBBL versionné (0.D.2)
    • sim-engine: hooks injection Nuffle events dans le driver (0.C.2)
    • sim-engine: hybrid driver — closes lot A (Pro League 0.A.2)
    • sim-engine: IA temperature softmax pilotée par riskAppetite (0.B.5)
    • sim-engine: métriques vivacité (variance, fat-tails, Gini, upset rate) (0.D.3)
    • sim-engine: per-player momentum tracker hot/normal/cold (0.B.4)
    • sim-engine: seeded xoroshiro PRNG + ban Math.random (Pro League 0.A.4)
    • sim-engine: TacticalProfile + Zod schema (Pro League 0.B.2)
    • sim-engine: underdog variance boost (TV gap > 200, +10%) (0.C.3)

    🐛 Bug Fixes

    • docker: add sim-engine and shared-types package.json to server Dockerfile

    📝 Documentation

    • archive Ligues v2 optional extensions to future-ideas
  • v1.84.0

    ✨ Features

    • Add admin leagues management console (L2.C.6)

    📝 Documentation

    • add new sprints for leagues v2 and Pro League
    • add Pro League sprint and future ideas backlog
    • Update TODO roadmap — Ligues v2 sprint completion
  • v1.83.0

    ✨ Features

    • server: update skill descriptions for Season 3 in French and English
  • v1.82.0

    ✨ Features

    • Add player advancement UI (level-up page & banner)
    • leagues: PR6 Bagarreurs Brutaux override + integration tests (L2.B.8-B.9)
  • v1.81.0

    ✨ Features

    • coach-profile: CoachEloChart inline SVG curve on /coach/{slug} (S26.3n)
    • coach-profile: export PDF coach-card on /coach/{slug} (S26.3o, closes S26.3)
    • coach-profile: monthly Nuffle Cup champion badge backend (S27.1d)
    • coach-profile: monthly Nuffle Cup champion badge UI (S27.1e)
    • coach-profile: themed championships badge backend (S26.6d)
    • coach-profile: themed championships UI banner on /coach/[slug] (S26.6e)
    • cups: admin can create monthly Nuffle Cups via POST /cup (S27.1i)
    • cups: admin pick endpoint for match-of-the-week (S27.1g)
    • cups: match-of-the-week public read foundation (S27.1f)
    • cups: match-of-the-week UI banner on /cups/monthly (S27.1h)
    • cups: monthly Nuffle Cup slot foundation (S27.1a)
    • cups: public listing of monthly Nuffle Cups (S27.1b)
    • cups: public monthly Nuffle Cup calendar UI /cups/monthly (S27.1c)
    • cups: visual bracket view on /cups/[id] (S27.1j, closes S27.1)
    • leagues: PR2 UI — flag-gated UI for league management (L2.A.6-A.10)
    • leagues: seasonal themes foundation on LeagueSeason (S26.6a)
    • leagues: theme read endpoints + season creation propagation (S26.6b)
    • leagues: themed season closure hook (S26.6f, closes S26.6)
    • leagues: themed seasons calendar UI /leagues/seasons (S26.6c)
    • mobile: i18n foundation (FR/EN) without external dep (S27.3.1)
    • mobile: integrate Throw Team-Mate flow on play screen (S27.2.2, closes S27.2)
    • mobile: port Throw Team-Mate click helper foundation (S27.2.1)
    • mobile: useTranslation hook + i18n settings.tsx (S27.3.2)
    • notifications: friend-match-started notification + user pref (S26.5)
    • s3-data: apply OCR-canonical Saison 3 data (skills, special rules, leagues)

    🐛 Bug Fixes

    • leagues: mirror LeaguePairing model + Match league fields in SQLite schema , closes #536

    📝 Documentation

    • roadmap: S26 termine
  • v1.80.0

    ✨ Features

    • extraction: add OCR transcriptions for Blood Bowl rules, skills, and traits
    • friends: listAcceptedFriendIds helper (S26.5b)
  • v1.79.0

    ✨ Features

    • coach-profile: EloSnapshot model + persist on match end (S26.3l)
    • coach-profile: GET /coach/:slug/elo-history endpoint (S26.3m)
    • friends: suggestFriendsByElo + /friends/suggestions route (S26.5a)
  • v1.78.0

    ✨ Features

    • achievements: celebration banner + NEW badge on lazy unlock (S26.2b)
    • achievements: expose newlyUnlocked slugs on lazy read (S26.2a)
    • achievements: match-end celebration panel + CTA (S26.2c)
    • coach-profile: coach-slug derivation utility (S26.3a)
    • coach-profile: getCoachPublicProfile service (S26.3b)
    • coach-profile: list public coach slugs + sitemap integration (S26.3g)
    • coach-profile: privacy toggle endpoint + GET /me exposes privateProfile (S26.3j)
    • coach-profile: private profile toggle on /me/profile (S26.3k)
    • coach-profile: public /coach/[slug] page with header (S26.3d)
    • coach-profile: public GET /coach/:slug route (S26.3c)
    • coach-profile: recent teams section (S26.3h)
    • coach-profile: RGPD private profile opt-in (S26.3i)
    • coach-profile: showcase achievements service (S26.3e)
    • coach-profile: wire showcase achievements end-to-end (S26.3f)
    • friends: autocomplete search endpoint /friends/search (S26.4c)
    • friends: findUserByCoachName resolver for @username (S26.4a)
    • friends: FriendUsernameAutocomplete reusable component (S26.4d)
    • friends: POST /friends accepts {username} via @-resolver (S26.4b)
    • tutoriel: badge unlock + completion timestamp (S26.1a)
    • tutoriel: global XP progression bar on listing page (S26.1c)
    • tutoriel: recommended teams panel after completion (S26.1b)

    ♻️ Code Refactoring

    • match: migrate POST /:id/move to ApiResponse (S25.5m)
    • play: extract BlockingOverlays + MatchOverlays (S26.0x, DoD < 600 lignes ATTEINT)
    • play: extract BoardSection (S26.0v, ~70 lignes restantes vers 600)
    • play: extract ChoicePopups (5 popups, -121 lignes) (S26.0u)
    • play: extract getAvailableActions util (S26.0j)
    • play: extract handleBlockClick branch (S26.0r)
    • play: extract handleMoveClick branch (S26.0s)
    • play: extract handlePlayerClick util (S26.0m)
    • play: extract handleSetupCellClick branch (S26.0p)
    • play: extract handleSetupDragStart util (S26.0n)
    • play: extract handleSetupDrop util (S26.0o, < 1000 lignes)
    • play: extract handleThrowTeamMateClick branch (S26.0q)
    • play: extract InducementsPhaseUI + normalizeState (S26.0a)
    • play: extract InGameListeners components (S26.0b)
    • play: extract kickoff-actions API helpers (S26.0d)
    • play: extract KickoffSequencePanel component (S26.0g)
    • play: extract MatchLogAndSpp section (S26.0w, ~46 lignes restantes)
    • play: extract PlayerActivationBar component (S26.0k)
    • play: extract PreMatchPanel composite (S26.0t, > 50% reduction)
    • play: extract setup-validation utils (S26.0c)
    • play: extract SetupPhasePanel component (S26.0h)
    • play: extract ThrowTeamMateIndicator + applyOrSubmitMove (S26.0i)
    • play: extract TopStatusBanners components (S26.0l)
    • play: extract validateSetupPlacement helper (S26.0e)
    • play: introduce LegalAction, eliminate all 13 as any (S26.0f)
    • team: migrate /name-generator + /rosters/:id to ApiResponse (S25.5n)
    • team: migrate /team/:id/available-positions to ApiResponse (S25.5s)
    • team: migrate /team/:id/recalculate to ApiResponse (S25.5r)
    • team: migrate /team/:id/star-players to ApiResponse (S25.5q)
    • team: migrate /team/available to ApiResponse (S25.5o)
    • team: migrate /team/mine paginated to ApiResponse (S25.5p)
    • team: migrate DELETE /:id/players/:playerId to ApiResponse (S25.5t)
    • team: migrate DELETE /:id/star-players/:starPlayerId to ApiResponse (S25.5v)
    • team: migrate GET /:id/available-star-players to ApiResponse (S25.5aa)
    • team: migrate GET /team/:id + close S25.5 + S25 TERMINE (S25.5ae)
    • team: migrate POST /:id/players to ApiResponse (S25.5z)
    • team: migrate POST /:id/purchase to ApiResponse (S25.5w)
    • team: migrate POST /:id/star-players to ApiResponse (S25.5ab)
    • team: migrate POST /team/build to ApiResponse (S25.5ad)
    • team: migrate POST /team/choose to ApiResponse (S25.5x)
    • team: migrate PUT /:id/info to ApiResponse (S25.5u)
    • team: migrate PUT /:id/players/:playerId/skills to ApiResponse (S25.5ac)
    • team: migrate PUT /team/:id to ApiResponse (S25.5y)
  • v1.77.1

    🐛 Bug Fixes

    • server,engine: adapt setup checks to placeable count below 11

    ♻️ Code Refactoring

    • match: migrate /:id/state to ApiResponse (S25.5l)
  • v1.77.0

    ✨ Features

    • auth: wire access+refresh rotation into login/register/logout (S24.3e)

    🐛 Bug Fixes

    • keep KO/sent-off/casualty out of post-TD setup, allow validate <11

    ♻️ Code Refactoring

    • match: migrate /:id/summary to ApiResponse (S25.5k)
    • match: migrate /details, /:id/details, /:id/teams to ApiResponse<T> (S25.5j)
  • v1.76.3

    🐛 Bug Fixes

    • engine: compute legalSetupPositions on post-touchdown
  • v1.76.2

    ♻️ Code Refactoring

    • match: migrate GET routes to ApiResponse<T> envelope (S25.5i)