Project updates

What's new under the pitch.

A brief look at the work behind MUTP, from game-day improvements to the tools that keep the project moving. Each entry links to its merged pull request for the full details.

180 merged pull requests · Latest merge October 28, 2026 · Newest first

180 merged pull request updates, newest first.

DesignPR #377

Give pitch dice more time and clearer outcomes

Pitch dice now materialize and evaporate smoothly, with football graphics highlighting armor breaks, stuns, knockouts and casualty results. Important rolls stay visible longer, while required choices remain available until resolved. Live play, replay and reduced-motion views share the updated presentation.

GameplayPR #372

Pace movement, dice and ball events consistently

Players now move smoothly at a steady pace, with grouped dice and ball bounces presented in native order before dependent decisions appear. Coaches and spectators follow events independently; replay speed, skipping and recovery retain their existing controls.

DesignPR #370

Highlight the square beneath the pointer

Moving a mouse, trackpad or hovering pen over the pitch now outlines the square beneath it while preserving player selection. The guide follows camera changes and hides beneath panels or special targeting, across coach, spectator and replay views.

DesignPR #368

Resize chat and game log independently

Chat and game log now offer minimized, default and maximized sizes, with saved choices and room for their dugouts and drive tracker. Minimized chat preserves its reading position and signals unread messages; the game log returns to the latest entries.

GameplayPR #365

Make skill prompts smaller and rerolls clearer

Skill decisions now use compact circular prompts with a countdown, clear player pointers and a source picker when needed. Non-block rerolls offer available built-in skills first, Sidestep uses pitch arrows, and large Solid Defence setup responses remain recoverable.

DesignPR #362

Show negative player conditions on the pitch

Distracted, chomped, rooted, Dodgy Snack, Greasy Cleats and Eye Gouged now appear as red pitch symbols and alongside posture in the player card's Status list. A saved Interface setting controls the markers, which follow native effect lifetimes through play, replay and recovery.

DesignPR #358

Put camera controls beside match and replay menus

Coaches and spectators can now flip perspective and cycle through 30-, 40-, 50-degree and overhead views using visible match and replay buttons. Choices are retained for each match, and overhead view remembers the selected end for a return to angled play.

GameplayPR #356

Repair match decisions and polish dice presentation

Adjacent Blitz and ordered Multiple Block targeting now continue through their required decisions more reliably. The roundup also steadies hover effects, restores drive-facing direction, prefers equivalent routes around a loose ball and presents paired injury dice once. Solid Defence and foul-bribe flows retain manual-review follow-ups.

GameplayPR #343

Mark consumed limited actions above players

Gold pitch icons now identify the player who consumed a limited team action, with a saved Interface toggle. Tags follow players through movement, replay and recovery, then clear at the appropriate turn or drive boundary. Computer matches also avoid waiting behind workers that are idle for human input.

DesignPR #341

Clear stadium scenery for the next overhaul

Browser matches now show the existing turf without stadium architecture, crowd banks or sideline props, preparing the scene for a later overhaul. All 390 pitch squares, players, ball, controls and targeting remain available in live play, spectator views and replay.

PlatformPR #339

Make live actions and match delivery more responsive

Confirmed actions now take priority over queued movement guidance, use a durable recovery journal and deliver match state with its event history. Immediate feedback and conservative movement previews reduce waiting, while native results, exact recovery and replay remain authoritative. Separate measurements track remaining latency.

GameplayPR #331

Offer BB2025 Hail Mary passes and bombs

Pass and Throw Bomb actions now offer normal and Hail Mary modes with distinct controls and range guides. BB2025 resolution uses the player's Passing Ability, preserves eligible rerolls and prevents accurate Hail Mary results; Blizzard retains Quick and Short range limits.

GameplayPR #323

Show block targets and counted assists

Block and Blitz previews now mark the blocking square, target and counted attacking and defending assists. Committed markers remain through dice choices, rerolls and skill prompts, including spectators, replay and recovery. Multiple Block keeps separate context and native dice choices for each target.

GameplayPR #322

Save optional skill-use preferences

Coaches can choose Always Use or Always Ask for eighteen approved BB2025 skill-use cases in Game Settings. Preferences follow the account through play, reconnect and recovery, while required player or square choices and other eligible reroll resources remain available.

DesignPR #314

Refresh Play and Team Builder

Play now shares Team Builder styling, with Human and AI buttons and illustrated coach cards showing skill levels and upcoming opponents. Team Builder adds Save as new, unique account team names, editable fantasy recruit names, player counts and clearer roster details and validation feedback.

GameplayPR #308

Meet Bogruk the Almost Clever

Bogruk joins the selectable computer coaches at Weak difficulty, pursuing touchdowns and taking occasional purposeful risks through an independent BB2025 policy. His identity survives save and resume. Acceptance work also repairs Secure the Ball reroll choices, spectator subscriptions and memory use when saving completed matches.

Project notesPR #312

Clarify the standard delivery workflow

The documented usual method now carries agreed work through issue tracking, a working branch, implementation, review, validation and a results report. Publishing, merging and deployment are recorded as separately authorized steps, giving future handoffs a clearer stopping point.

Developer toolsPR #310

Wait for reroll choices and artwork in browser checks

Browser validation now waits for the offered reroll state and its resource artwork before checking choices. A delayed-state and delayed-image regression covers those readiness boundaries, improving parallel local checks while preserving the existing gameplay assertions.

GameplayPR #307

Plan movement and a ball transfer together

Coaches can now plan movement, pickup and a pass or handoff to a teammate before activating the player, then confirm the sequence once. Recipient changes preserve the route, right-click removes the transfer before waypoints, and native decisions pause and resume the committed plan.

Developer toolsPR #300

Restore local sign-in after credential refresh

Local startup now repairs missing or incorrect development quota-project metadata in refreshed Google credentials, even when the access probe succeeds. The server restarts only when the credential file changes, restoring game sign-in without unnecessary restarts.

DesignPR #299

Keep every confirmed movement square visible

Movement playback now waits for each displayed board state to commit before starting the next delay. This prevents short timers from skipping confirmed squares, including reduced-motion playback, while cancellation clears pending beats and ball rotation retains its existing behavior.

GameplayPR #298

Plan Jump, Leap and Pogo movement

BB2025 movement plans now support explicit Jump, Leap and Pogo segments, including approaches before Blitz or Foul. A compact Jump control shows legal landings, difficulty and Rush warnings; confirmation follows native commands, with rerolls and recovery preserving the chosen jump.

DesignPR #296

Display core player skills above the pitch

The 108 core BB2025 skills and traits can now appear as text badges or illustrated markers above players. Saved settings control teams, base and acquired skills, traits, size and presentation. Complete player cards, readable zoom limits and crowded-marker overflow remain available in live play and replay.

GameplayPR #295

Offer timed BB2025 reactive skill decisions

Optional reactive skills now prompt the owning coach with native effects, required destinations and a server-enforced thirty-second deadline. Unanswered optional choices decline normally, while interrupted routes, nested reactions and reconnects retain their sequence. The update also corrects Shadowing, Dump-Off and Safe Pair of Hands handling.

DesignPR #292

Make the game log easier to read

The game log now shows a complete scrollable history with revised event wording and current block and numeric dice graphics. Compact text, tighter line spacing and coach-colored selection outlines improve readability across the main log, Game Settings, replay and recovered history.

GameplayPR #291

Repair preparation, movement and BB2025 skill flows

Match preparation now stays connected independently of play, and older retained matches can be conceded. Space confirms proposals, Blitz preserves waypoints, Hand Off selects its receiver, and movement ranges update along planned routes. Hit and Run, stun recovery, kickoff bribes and computer apothecary flows also gain fixes or coverage.

DesignPR #278

Animate numeric dice in ordered roll groups

Native d6, d8 and d16 rolls now share the polygon-dice tumble, with grouped results, armor and injury captions and independent visibility. Numeric reroll choices and replay use the same presentation, preserving native outcomes, pending decisions, reduced motion and restored snapshots.

DesignPR #277

Compact the player action menu

Player actions now appear as eligible icon tiles with full-name tooltips, faded spent actions and a yellow selection highlight. End Turn moves beneath the active coach's timer, while Backspace uses the same confirmation flow. Pass and Hand Off declarations also allow collecting the ball during movement.

DesignPR #276

Keep follow-up decisions clear of the action

Follow-up prompts now sit near screen center while leaving the block initiator and destination arrow visible. Coaches can pan and scroll before deciding, and the movement preview follows the initiating player through chain pushes while preserving the original Yes and No commands.

DesignPR #275

Preview block strength with native polygon dice

Block and Blitz proposals now show the native signed dice count as hovering cubes, continuing through confirmation until the result arrives. One tumble reveals the authoritative faces, with red glows for uphill blocks and matching reroll presentation. Native rules and coach choices determine the outcome.

GameplayPR #274

Explain apothecary injury choices

Apothecary prompts now name the injured player, pending injury and its effects, including stat reductions, niggling injuries and missed games. Distinct icons accompany Accept, Use, Keep and Choose options; multi-player treatment and remaining apothecary counts continue to use native decisions.

GameplayPR #273

Place kickoff balls and compare Kick landings

Kick placement now follows the pointer with a snapping ball marker and submits on the first click. New browser matches offer Kick after deviation, showing normal and alternative landings linked by an arrow. Coaches can pan while comparing them; existing matches retain their saved timing.

Developer toolsPR #272

Align local maintenance and Node tooling

Browser packages, computer-player tools and CI now use Node 26 consistently. A guarded local maintenance command previews stale-game cleanup before an explicit apply step, verifies transactional removal and restarts services while preserving accounts, saved teams, settings and archived backups.

DesignPR #270

Align the pixel ball with pitch perspective

The ball highlight now sits on the pitch plane, using a slowly rotating pixel ring and counter-rotating inner arrows. Loose footballs and their shadows scale with the projected square at every zoom; carried balls retain the marker without drawing a second football.

GameplayPR #269

Switch player activations through the next action

Coaches can plan another player's activation without explicitly ending the current one; confirmation commits the switch and waits for any required native decisions. Movement and Foul can be reviewed together, teammate clicks distinguish recipients from activation changes, and queued actions survive checkpoint recovery.

DesignPR #268

Compare original and modular stadium studies

The development pitch preview now opens with the original stadium painting and offers hybrid-crowd and crowd-free modular wall studies. Artwork, provenance and review captures are retained. Asset synchronization preserves unchanged files, and camera checks wait for the pitch's measured size.

Developer toolsPR #267

Provision a fresh local review database

A new explicit bootstrap service creates the isolated review database schema before daily local startup. Fresh-PC instructions cover container setup and credential files, while profile and data guards keep the bootstrap away from the retained development database.

GameplayPR #266

Tidy site navigation and match interactions

The site now uses one sign-in or account link, and Game Menu options fit without horizontal scrolling. Matches gain straighter equivalent routes, right-click deselection, clearer Block and Blitz targeting, teammate throw ranges and longer idle connections. Legacy saved-team cleanup is limited to reviewed team records.

GameplayPR #255

Follow each drive from setup to kickoff

A start-of-drive tracker now shows completed, current and upcoming BB2025 phases beneath the receiving team's resources. It skips inapplicable checks and highlights interactive kickoff events, then disappears before ordinary player actions. Replay and recovery retain compatible native phase information.

PlatformPR #251

Recover Dodgy Snack checkpoints consistently

Match saves now order temporary stat modifiers consistently, fixing intermittent recovery failures involving Dodgy Snack. Existing snapshots are normalized after checksum validation, allowing valid saved games to restore without depending on the native modifier set's iteration order.

GameplayPR #250

Inspect opposing movement threats

Selecting an unfinished friendly player now reveals opposing tackle zones and movement-skill threats during regular turns and Charge! Saved Game Settings control zone colors, Tackle warnings and striped skill areas. Local browser validation also gains isolated parallel shards with complete coverage checks.

Developer toolsPR #246

Keep generated site output out of version control

Generated public-site files now stay local and ignored, with tracked source pages and build scripts providing the published inputs. The update removes previously tracked output and documents how rebuilding and Firebase Hosting assembly recreate it.

DesignPR #244

Add modular stadium crowds and accessories

Modular stadium pieces now combine mixed Human, Dwarf and Halfling supporters or Orc, Goblin, Ogre and Troll crowds. Rounded overhead stands, wall caps, recessed towels and spare jerseys complete the scene, with local gestures, source provenance and assembled review captures.

GameplayPR #243

Outline player movement ranges

Selected players now show blue normal-movement and yellow Rush perimeters, with small warnings in Rush-only squares. Active players use their remaining allowance; inactive-team inspection shows the next activation. Ranges refresh after committed routes, while Jump, Leap and Pogo shortcuts remain outside the ordinary forecast.

Developer toolsPR #239

Split validation by delivery environment

Validation now uses isolated native shards and checks browser coverage at the required deployment stage. Local review runs full browser checks before restart; DEV publication requires an explicit command and local preflight, while production verifies the exact tagged release before approval and publication.

DesignPR #237

Remove filled movement and risk markings

Live matches no longer show filled movement ranges, Dodge and Rush squares or risk legends from the earlier movement flow. Player selection, route lines, waypoint dots, right-click undo and single-confirmation Move and Blitz remain, with native legality, rolls and logs preserved.

Developer toolsPR #236

Recover startup checks and diagnostic routing

Preserved startup and documentation work now joins the current implementation, including bounded DEV WebSocket health checks and production SSH readiness. Diagnostic routes retain the Play prefix, query and fragment, and project links return to the README. Browser fixtures also follow the revised movement flow.

GameplayPR #235

Confirm movement and Blitz in one step

Selecting a player and destination now prepares movement for one confirmation, including adjacent squares. Waypoint dots unify route planning, right-click undoes the latest segment, and selecting an opponent prepares a Blitz approach. The change also introduced movement-range guidance later revised by subsequent updates.

DesignPR #229

Give game displays the full browser area

Coach, spectator and result-replay displays now hide the shared site top bar, giving the pitch and game controls more room. Play setup and ordinary site pages retain their navigation.

DesignPR #227

Use one logo across site headers

Every site page now shares the existing mole-and-wordmark logo at a consistent proportional size, alongside the same navigation and account menu. The account popover follows the header's actual position as fonts load, pages scroll and layouts resize.

DesignPR #225

Streamline Play setup and live controls

Play now puts game creation first and lists current games afterward using matchup cards with Resume and guarded Concede controls. Routine connection labels and duplicate setup hints are removed. Live log preferences are shared with Game Menu, and confirmation stays centered without the setup background bar.

DesignPR #223

Unify navigation and anchor action confirmation

Static pages now share one header renderer, navigation order and account highlighting. Match confirmation uses a fixed dock across setup and play, keeping previews and pending actions from moving its button. The account menu also scrolls on short screens so Sign out remains reachable.

PlatformPR #221

Restore local game access and add account navigation

Local startup now provisions the current-games query index and limits concurrent computer workers, fixing unavailable game lists and exhausted browser connections. A shared My account menu adds sign-in state, sign-out and future account links with keyboard dismissal and mobile layout support.

Developer toolsPR #219

Manage local computer-player startup and shutdown

Local review startup now launches the computer-player daemon and waits for registration before reporting readiness. Stop and restart manage the recorded daemon and its match clients, with hidden Windows console processes and checks for the required token and Node version.

DesignPR #214

Assemble packed Human and Orc stadium bowls

Human and Orc stadiums now assemble distinct modular paintings into dense crowd banks, wall runs and corners around a clear pitch apron. Home League selects architecture while each team supplies its supporters and bench details, with restrained gestures and preserved source artwork.

GameplayPR #218

Explain block choices and resolved outcomes in the log

The Game Log now shows native block faces, the selected die and the coach making the final choice, including uphill blocks. Rerolls, skill use, pushes and knockdowns follow native order, with pending falling states waiting for resolution before a knockdown is reported.

GameplayPR #217

Keep checks and rerolls in chronological order

The Game Log now preserves original trait checks, reroll sources, retry attempts and final results in order. Native mechanics and typed reports supply the thresholds and actor details, keeping the recorded history aligned with the actual sequence.

GameplayPR #216

Narrate actions and committed movement

The Game Log now names native actions and primary rolls, including base and adjusted thresholds and outcomes. Movement summaries distinguish one planned route from separately confirmed steps. Saved Debug, Movement and Roll modifiers controls reformat the existing history as well as new entries.

DesignPR #215

Identify chat speakers by team and spectator number

Coach chat now uses team names, adding Home or Away only when names collide. Spectators receive stable numbered labels in muted violet after their first accepted message, consistent across viewers, paging, retries and restarts. System messages use Match.

GameplayPR #213

Explain additional movement checks before confirmation

Movement guidance now identifies native pickup and jump targets alongside possible Diving Tackle, Tentacles and Shadowing reactions. Square details distinguish conditional effects from required rolls, use Secure the Ball's native target and show ball scatter for players unable to hold it.

DesignPR #212

Prepare modular Human and Orc stadium artwork

Original Human and Orc stadium sheets now provide measured modular pieces, source hashes and a generated asset catalog for the next renderer integration. The art follows shared pitch dimensions, a clear apron and two sideline portals, preserving the approved dense-bowl reference.

GameplayPR #210

Show native movement difficulty by square

Movement squares and planned routes now show native Dodge difficulty and final Dodge and Rush targets before confirmation. Combined checks keep both labels, while safe squares retain their own color after earlier risks. Older projections and checkpoints remain readable.

DesignPR #209

Center player bodies and their shadows

Reviewed Human and Orc pose anchors now align visible torsos and feet with their pitch squares, correcting shifts caused by transparent padding and asymmetric artwork. Ground shadows follow the rendered contact point in angled and overhead views.

DesignPR #208

Add a pixel football and synchronized highlight

The ball now uses original pixel artwork with a shared pulse across its circle and arrows. Native possession hides the loose football while retaining the carried highlight, and ordered playback follows ball movement and possession changes. Out-of-play balls have no marker.

Developer toolsPR #207

Validate stadium assets and record the delivery review

CI now checks canonical stadium assets before rebuilding can hide stale runtime copies. Generated catalogs retain consistent line endings, and a retrospective maps the original stadium plan to completed work, visual evidence and remaining performance, halftime and future-League verification limits.

DesignPR #205

Bring restrained motion to stadium crowds and pennants

Crowds, fire and team pennants now use sparse, staggered movement while their pitch anchors stay fixed. Human and Orc venues retain separate angled and overhead artwork, and reduced-motion mode freezes ambient effects without changing the match state.

GameplayPR #206

Consolidate manual skill reroll choices

Manual reroll sources now appear once, with Pro tested before an eligible retry or block-die selection. Brawler offers eligible Both Down dice and handles a sole candidate automatically. Original results remain separate from the Pro test, and recovery consumes a saved result only once.

GameplayPR #204

Resolve teammate-action traits before movement

Throw Team Mate and Kick Team Mate declarations now resolve native activation traits before legal movement. Choosing an eligible teammate creates a proposal that can be changed or cancelled before confirmation, while later checks, landing outcomes and BB2025 kick ranges follow native mechanics.

DesignPR #203

Add Badlands architecture and mixed supporters

Orc hosts now use a Badlands venue while visiting teams retain their own supporter and bench identity. Both mixed hosting arrangements share the stadium layout and camera rules, and the pavilion fits within its recess. Original artwork and provenance support future League additions.

PlatformPR #202

Launch and resume matches in the current tab

Starting or resuming a match now uses the current tab by default, with a separate new-window option and popup-blocked fallback. Direct-link failures explain unavailable links or account access, while existing identity and match-membership checks remain in force.

DesignPR #200

Add a League-aware Human stadium

Matches now retain team-level League and roster identity independently of placed players. The browser uses that identity for an Old World Classic venue with Human supporters, recessed furnishings and foreground cutaways. Architecture and supporter catalogs provide separate foundations for later venues.

GameplayPR #201

Concede activated matches from game setup

Current-game listings now offer a confirmed Concede action for activated matches without opening the pitch. The server applies native legality, results and penalties, then refreshes the list. Uncertain replies retain an explicit exact-request retry on setup.

GameplayPR #199

Find unfinished games on the setup page

Signed-in coaches can now browse their unfinished matches without entering a game ID. Waiting and ready games offer Continue setup, activated games offer Resume, and unreadable saves show an unavailable state with refresh. Listings use authorized membership and public team details.

DesignPR #184

Recover match HUD and kickoff refinements

Recovered match work aligns timers, team names and resources, adds clearer weather and kickoff guidance, and compacts action controls. Chat and log gain independent text sizes, while existing setup swaps, dugout views and newer pitch behavior remain integrated. The recovery report records deferred artwork and display review.

Project notesPR #183

Fill five gaps in the Updates history

The Updates archive now includes the previously missing Spectate launch, cached-asset fix, Windows startup and homepage refresh, expanded-dugout setup placement and match-control refinements. Each short entry retains its verified merge date, category and PR link, bringing that audit to 105 summaries.

DesignPR #182

Improve match setup, movement and pitch controls

Board clicks now plan moves for confirmation, while setup supports friendly-player swaps and explains invalid formations. Match panels gain adjustable backgrounds, compact dice and revised kickoff prompts; camera controls, ball highlighting and stadium stands are clearer. The accompanying retrospective records remaining review work.

GameplayPR #181

Place setup players through expanded dugouts

Expanded dugouts now act as setup drop targets: drag reserves onto legal pitch squares or return eligible players by dropping them anywhere in their team's expanded dugout. Up/down controls switch among the team name, state counts and vertical player list; opponent and invalid drops remain blocked.

PlatformPR #180

Fix Windows startup and refresh the homepage

Windows review startup now resolves Docker Desktop mount paths correctly before checking local credential files. The homepage replaces its character portrait with a responsive match screenshot, removes Privacy and Support from the top navigation and adds more space between links; both pages remain available from the footer.

PlatformPR #165

Load current Spectate assets for returning players

Spectate now requests versioned page and game assets so returning players receive the current directory even when older Play files are cached. The fix keeps existing Play URLs and sign-in return behavior intact.

PlatformPR #164

Browse live matches and search the Updates history

The new Spectate page lists live matchups, public game details and Watch links, with an initial replay-search scaffold. Updates now covers the merged PR history with topic and PR-number search, category filters and ten entries per page; full history remains readable without JavaScript.

Project notesPR #126

Record the pitch follow-up retrospective

Documented the outcome of seven pitch follow-up changes, linking completed tickets to their checks. The report also records the remaining signed-in match review and visual comparison work.

GameplayPR #125

Apply reroll source priority in BB2025

BB2025 team rerolls now consume the requested eligible source in native priority order, with conditional Mascot attempts and permitted fallback. The HUD distinguishes guaranteed sources from Mascot availability, and match history names the source actually used.

GameplayPR #124

Offer native reroll sources beside the dice

Eligible team, Mascot, Pro, and skill rerolls now appear beside the relevant dice, including block-die choices. The selected source sends its exact native command, while late or reconnected views restore the pending roll.

DesignPR #123

Show unboxed dice beside match decisions

Live and replay dice now appear as individual ivory and cyan faces on the pitch without enclosing panels. Labels, selection, and keyboard focus remain available, and revealed results stay visible beside pending reroll or skill choices.

GameplayPR #122

Show pass ranges and weather on the pitch

A declared Pass colors the pitch by native throwing distance and weather, with a legend and target text explaining each range. The guide updates after movement or weather changes and marks throws made unavailable by Blizzard.

GameplayPR #121

Confirm passes by clicking recipients

After declaring Pass, clicking a legal recipient keeps the passer selected and prepares the exact throw for confirmation. Movement, pickup, and pickup reroll remain available before the throw.

DesignPR #120

Keep player art visible during knockdown pushes

A knocked-down defender now keeps its player graphic while the coach chooses a push destination. The sprite changes to the prone pose after the push and follow-up resolve.

DesignPR #119

Add more perspective camera angles

Coaches can switch among 30-, 40-, and 50-degree perspective views or a top-down view without losing selection, planned routes, or pending decisions. The camera choice remains local to the viewer.

Project notesPR #110

Record the pitch integration retrospective

Recorded the pitch overhaul, repaired defects, and evidence from two-coach and computer matches. The retrospective identifies remaining hosted review work and lessons for future development.

DesignPR #109

Bring the new pitch to completed-match replay

Completed-match replay now uses the coach-oriented pitch with either coach camera end, tactical view, dugouts, and player inspection. The result route remains read-only while live coach actions stay tied to match membership.

PlatformPR #108

Validate coach-oriented matches against the real server

Real Human and Orc matches through the production interface exposed issues in setup, result access, and long match history, which this change repairs. It adds isolated signed-in review tooling and supports completed computer games and recovery through bounded, lossless storage.

DesignPR #107

Present native dice and responsive playback

The pitch now renders authoritative dice with a brief spin and plays confirmed movement in order. New decisions, reconnects, and replay seeks cancel obsolete animation so the current match state stays responsive; reduced-motion mode avoids spinning and sliding.

DesignPR #106

Add the coach-oriented match HUD

The live match gained a fixed HUD with score and turn context, available resources, action confirmation, player inspection, chat, log, and categorized dugouts. It keeps native decisions and existing match controls available, including keyboard and text alternatives.

DesignPR #105

Bring coach-oriented views to the live pitch

Live matches now offer travelling 40-degree coach perspectives and a centered tactical view. The pitch uses shared coordinates for both coaches and shows directional player art, scenery, routes, ball, and push choices through the new projection.

DesignPR #104

Add directional Human and Orc player art

Human and Orc teams gained twelve position archetypes with directional body poses and dedicated portraits. The asset pack includes validation and delivery support while preserving source artwork and legacy variants.

DesignPR #103

Add a shared pitch camera projection

A shared camera service maps pitch cells, player art, and overlays into coach views and translates pointer positions back to cells. It also defines camera travel and navigation for the upcoming live pitch integration.

Project notesPR #102

Record the coach-oriented pitch baseline

Documented the starting point for the coach-oriented pitch overhaul, its camera and player-art requirements, and the checks needed for real matches. This provided the implementation handoff.

DesignPR #100

Reconcile match controls and pitch design references

This change records approved camera, HUD, and dice studies while tightening live names, clocks, player details, guarded controls, replay compatibility, and computer-opponent recovery. It establishes the handoff for the later playable pitch presentation.

DesignPR #99

Polish routes, push arrows, and scoreboard

Push choices use compact directional arrows, planned routes use a narrow curved guide, and selecting End player action sends its offered action directly. Team names remain readable within scoreboard nameplates.

Project notesPR #98

Record the pitch interaction outcome

Documented delivery of target clicking, player dragging, and chain-push choices, with browser checks covering all three together. The report compares the final behavior with the agreed requirements.

GameplayPR #97

Choose push destinations on the pitch

Server-offered push destinations appear as directional arrows, including each step of a chain push. Coaches can choose by click or keyboard, with the decision dialog available when the pitch cannot identify a destination.

GameplayPR #96

Drag players during setup and Solid Defence

Coaches can drag reserves onto legal setup squares, reposition players, return them to reserves, and place eligible Solid Defence players. The pitch highlights available destinations and rejects occupied, out-of-half, or unauthorized drops.

GameplayPR #95

Plan actions by clicking pitch targets

Selecting a player and clicking a square or opponent now prepares the appropriate move, block, blitz, or foul flow. The browser keeps that intent only while the selected player and server-offered actions remain valid, and can try another open approach square.

DesignPR #91

Refine live match controls and request recovery

The scoreboard handles long names more clearly, dugouts focus on off-pitch players, and action previews lose a duplicate selector. Request recovery now appears after the original request leaves flight and preserves an exact retry across reconnects.

GameplayPR #90

Add standalone computer opponents

Match setup can create a game against a computer opponent from a saved team and cloned opposing roster. The change adds server preparation and job dispatch, a standalone computer-player service, availability checks, and deployment configuration.

Developer toolsPR #89

Share local review state across checkouts

The local development command now stores its lifecycle state with the shared Git directory. It recognizes existing checkout state and verifies the recorded owner, so the primary checkout can manage the same review services.

Developer toolsPR #88

Manage the local review stack with one command

A local development command starts, stops, or restarts the isolated review stack, browser hosting, and proxy. It verifies routes at startup and stops only processes it recorded, while retaining review database volumes.

Developer toolsPR #87

Renew local review credentials at startup

The match review startup command checks the mounted Google credentials, reuses a valid session, or guides renewal when needed. It then verifies the isolated database, server, and Firebase access, reducing manual setup for signed-in review.

DesignPR #86

Simplify the live match sidebar

The sidebar now centers on controls, log, chat, and a game menu, while player details appear from pitch or dugout inspection. The menu adds pause and resume, confirmed concession, interface settings, key bindings, and log access.

DesignPR #85

Refine the live match layout and dugouts

The scoreboard, sidebar, and dugouts have a clearer arrangement, with full player sprites and compact or expanded dugout views. Redundant labels and cards were removed, and the action menu now shows choices relevant to the selected player or target.

GameplayPR #84

Restore authenticated route previews

Route previews now load the match using the coach's verified home or away role. This fixes previews that were rejected because the server passed an account identifier where the match loader expected a role.

PlatformPR #83

Recover route planning after socket authentication expires

When authentication expires during a path preview, the browser refreshes its token, reconnects once, and reloads the authorized pitch. An uncertain match action remains available for an explicit exact retry.

Developer toolsPR #82

Detect expired credentials in local match review

A local preflight checks whether the review server can refresh its Google credentials and reach Firebase Auth, with clear failure messages that do not expose tokens. The runbook explains renewal and the signed-in review evidence.

Project notesPR #81

Record the match window implementation outcome

Documented the eight match-window changes and their supporting checks. The outcome report distinguishes completed criteria from the remaining signed-in review of the combined browser and server.

Developer toolsPR #80

Check waypoint planning in the browser

A browser interaction check follows waypoint selection, route preview, undo and clear controls, and a single committed path request. It also verifies that previews do not change the match and spectators cannot plan routes.

Developer toolsPR #79

Check native route continuation and risky moves

New engine tests cover stopping a route, resuming after dodge or rush rerolls, and comparing safe paths with deliberate risky waypoints. The report also notes the remaining signed-in review.

Developer toolsPR #78

Add an isolated stack for integrated match review

A separate local game server and database let reviewers examine the new browser and server together without disturbing the existing development stack. Review captures and browser checks cover crowded pitches, controls, dice, push decisions, and results across target screen sizes.

GameplayPR #77

Explain more match events in the history log

The match log now spells out reroll sources, bribes, send-offs, injury and casualty rolls, apothecary decisions, and between-drive recovery. It formats recorded native facts into readable lines while preserving older reports through a generic fallback.

GameplayPR #76

Navigate completed matches by event or turn

Replay gained event and turn seeking, play/pause and speed controls, plus optional square-by-square movement. The pitch, dice, log, and chat follow the selected saved revision.

DesignPR #75

Show dice on the pitch

Recorded rolls appear as brief pitch dice with outcomes and targets, while block decisions use selectable graphical die faces. The displayed faces come from native reports and server-offered choices.

DesignPR #74

Animate confirmed movement one square at a time

The live pitch plays each server-confirmed movement square in order before showing the next decision. Reconnecting viewers start from the current match state, and reduced-motion mode keeps the steps without sliding animation.

GameplayPR #73

Show chat and match history together

Live matches and completed replays now share tabs for the event log and saved conversation. The chat view tracks unread messages, restores missed pages after reconnect, and keeps a draft while an active match is open.

PlatformPR #72

Save match chat for recovery and replay

Authenticated coaches and spectators can send messages that are validated, retained with the match, and included in completed results. The protocol supports paging and safe retries, while older match records remain readable.

GameplayPR #71

Plan movement with pitch waypoints

Coaches can click waypoints to plan a route, review the server's square-by-square movement forecast, then undo, clear, or commit the path. Spectators remain read-only, and older matches retain their adjacent movement controls.

PlatformPR #70

Save and resume committed routes

The server now commits a route as native adjacent moves, saves its progress through interruptions, and resumes after a chosen reroll. Clicked adjacent squares stay exact, longer spans use route search, and existing checkpoints remain readable; browser waypoint controls follow separately.

PlatformPR #69

Preview routes from native match state

Coaches can request a read-only route preview tied to the current player and match revision. The server expands nearby waypoints or longer paths and returns squares with dodge, rush, and possible reaction information.

GameplayPR #68

Add a live match event log

The match sidebar now shows accepted choices and native report lines from durable transcript pages. It catches up on join, reconnect, and new revisions, supports page navigation without losing reading position, and also appears with completed results.

PlatformPR #67

Persist and page match transcripts

New recoverable matches now store each accepted decision, timestamp, native outcomes, and authoritative snapshot with the checkpoint. Authorized clients can request bounded transcript pages, including for completed results, while older checkpoints remain readable.

Developer toolsPR #66

Capture ordered native match outcomes

Added a server component that records game-rule outcomes and model changes in command order, rejecting duplicate records. This groundwork supports the later saved match history and replay.

Project notesPR #65

Define the match transcript format

Documented how game actions, rule outcomes, saved board states, and chat belong in match history and completed replay. The design covers ordering, access, storage limits, and compatibility.

GameplayPR #64

Offer Multiple Block defender pairs

An eligible player can choose a server-issued pair of adjacent defenders for Multiple Block. The choice uses the native paired command and the defenders' original states, preserving one coherent block decision.

GameplayPR #63

Expose more special turn actions

The server now offers eligible Gaze, Bomb, Punt, Kick Team-mate, and Recover declarations with their native targets. The match ribbon shows these actions and places target choices where they remain usable in compact windows.

GameplayPR #62

Offer special blocks and fouls

Eligible players can receive native Stab, Chainsaw, Projectile Vomit, and Breathe Fire choices, plus Chainsaw foul targets. The action ribbon keeps the attacker’s options available while selecting a defender and submits the server-issued action.

GameplayPR #61

Keep player declarations with their actor

Foul, Pass, Hand-off, Throw Team-mate, and Secure Ball declarations now carry the acting player's identity in the server projection. This lets the ribbon show legal options for that player, including when a Block target is selected.

GameplayPR #60

Choose kickoff players from the ribbon

Kickoff player choices now appear as select and deselect buttons in the match ribbon. A separate confirmation becomes available only when the server offers it, with selected counts shown before submission.

GameplayPR #59

Show required decisions in focused popups

Coin and receive choices, block dice, rerolls, skill use, and other required decisions now appear in focused popups for the coach who must answer. Each choice submits the exact server option, and pending requests disable repeat input.

GameplayPR #58

Add the match action ribbon

The bottom ribbon now groups server-offered Move, Block, Blitz, and other actions around the acting player. It adds a recent-action shortcut, confirms End Turn when players remain unused, and keeps every offered action accessible through a disclosure.

DesignPR #57

Fit the match view to the approved frame

The live match was arranged into a fixed scoreboard, pitch, dugouts, sidebar, and bottom ribbon that fits the specified desktop windows. Roster details, keyboard companion, and save/resume controls remain accessible in the scrolling sidebar.

GameplayPR #56

Show authoritative team and player details

The match scorecard and bench now use frozen team names and server-supplied player numbers, attributes, skills, status, and resources. Spectators see a read-only view, while retained replay and recovery records remain readable.

Developer toolsPR #55

Capture dodge and rush match states

Deterministic dodge and rush interruption fixtures now cover both coaches and a spectator. The same three views were checked for kickoff prompts and the full pitch, and remaining action and route needs were documented.

Developer toolsPR #54

Capture a three-role match baseline

Captured the match-window requirements and a repeatable Blitz scenario from the real game engine. Each saved step includes both coach views and the spectator view for later comparison.

Developer toolsPR #52

Unify game art and browser assets

Accepted team sprites, pitch art, interface graphics, fonts, and source records moved into one canonical game-art tree. A checked sync process now supplies those assets to browser previews and hosted play.

DesignPR #51

Present matches in a compact pitch window

The active match window gained a pitch-first layout with illustrated score, live board, server-backed actions, and compact bench. It opens after confirmed activation, provides a blocked-popup fallback, and offers an Exit match control.

Project notesPR #48

Track open work in GitHub Issues

Eleven open tasks were linked to GitHub Issues, with local Markdown notes retained for design and handoff details. The issue-tracker guidance and triage labels now reflect where task status and discussion live.

PlatformPR #36

Clear connection errors after reconnect

A successful reconnect now removes an earlier authentication error from both Play and Team Builder, so the displayed status matches the accepted connection.

DesignPR #35

Open active matches in a separate window

Starting a match now reserves a separate window or tab, then opens it after server confirmation. If the browser blocks it, play opens in the current tab; reloads and opponent links keep access to the right match.

GameplayPR #34

Add Orc teams to exhibition play

The BB2025 exhibition catalog and team builder gained six Orc positions, their prices and skill access, Troll Loner rules, and approved sprites. Orc teams can be saved and matched against Human teams while older Human match records remain readable.

DesignPR #33

Add keyboard and text pitch navigation

Keyboard users can move through pitch squares, pan a zoomed board, and read a text companion naming the square, occupant, ball, and available server target. Action shortcuts now respect focused controls and match ownership.

GameplayPR #32

Show live match status and completed replay

The match view gained score, resources, current decision, and player status drawn from server data. Participants can open a completed result and step through its read-only replay; End Turn uses the same confirmed action flow as other choices.

GameplayPR #31

Select match actions on the pitch

The pitch now highlights player and square targets supplied by the server. Coaches can select an exact action before committing it, including Blitz choices; stale or wrongly owned decisions refresh safely through the existing retry flow.

GameplayPR #30

Add the server-backed match pitch

The live match gained a DOM/SVG pitch showing server-positioned players, the ball, and status cues, with fit, zoom, and pan controls. Frozen roster identities drive player art, with labeled fallbacks and compatibility for older replays.

PlatformPR #29

Separate match preparation from live play

Preparation and match play moved to distinct routes. Confirmed activation opens the match view, while direct links, reloads, reconnects, and spectator access preserve the correct match context and permissions.

Developer toolsPR #28

Map the live match contract

Mapped the data and actions needed for live matches, including what coaches and spectators can see. Eight saved Blitz checkpoints from the real game engine provide repeatable examples for later pitch changes.

DesignPR #27

Choose the match board renderer

Compared two pitch renderers and chose the sharper browser-native board. A scripted Blitz, review notes, and implementation plan documented the decision before changing live match play.

Project notesPR #26

Merged pull request updates

The Updates page gained a dated entry and direct GitHub link for each of the first 25 merged pull requests. These entries replaced the earlier narrative posts, and the generated hosting copy was refreshed.

PlatformPR #25

Centralize live match updates

Live match updates now share one server component for choosing viewers, checking access, and delivering the right game state. Retry tests cover a completed action whose acknowledgement was lost.

GameplayPR #24

Restore saved-match resume requests

Saved games now preserve a pending resume request through recovery. Coaches can see their proposal while play stays paused, and spectators see the status without save or resume controls.

DesignPR #23

Restore the roster workshop layout

The account team builder regained recruit cards, team options, roster value, resources, and an editable player list. Prices and validation come from the server catalog.

Project notesPR #22

Document the team builder rollout

The deployment record now covers the updated team builder in DEV and PROD, including database changes, backups, and connection checks. Signed-in acceptance remained a separate follow-up.

GameplayPR #21

Save match-ready teams to your account

The builder can save named teams with player names and jersey numbers to the signed-in account. Match setup validates each selected team and freezes a copy for the game.

Developer toolsPR #20

Align deployment and developer setup

Deployment identity settings were updated for the renamed repository. Windows and Ubuntu setup scripts and release instructions provide a repeatable development environment.

Developer toolsPR #19

Add shared engineering skills

Repository skills now provide reusable guidance for engineering tasks, reviews, and project workflows, giving contributors and coding agents a shared set of conventions.

DesignPR #18

Start the browser team builder

The first team builder page established the roster-building interface and its place in the public site. Later changes connect this foundation to account-owned, match-ready teams.

PlatformPR #17

Add game backup and restore tools

New backup and separate-restore tools preserve current game records and check that restored matches can continue correctly. Operator instructions and saved-game fixtures document the supported recovery workflow.

PlatformPR #16

Bound active game resource use

Completed games release their running engines after their results are saved, and idle games retain recoverable checkpoints. Admission and storage limits protect accepted work; mutual save and resume controls were introduced as a local candidate.

PlatformPR #15

Keep private data out of browser views

Browser responses are checked before rendering, rejecting unexpected credentials, ownership information, private checkpoints, and another team's data. Tests cover these privacy boundaries for each recipient role.

PlatformPR #14

Isolate game connections by environment

Local, DEV, and PROD connections now enforce their own host, route, origin, and authentication boundaries. Hosted game traffic uses encrypted connections through a private server proxy, with credential renewal and startup safeguards.

PlatformPR #13

Define authenticated spectator access

A new spectator protocol checks identity and match visibility before showing read-only game state. Match membership and role-specific browser views distinguish spectators from participating coaches.

PlatformPR #12

Connect game sign-in to Firebase

The game service now verifies Firebase sign-in and uses authenticated player sessions. Two-player pregame checks covered the connection between sign-in, match access, and setup.

PlatformPR #11

Add site deployment and sign-in workflows

DEV and PROD gained Firebase deployment workflows and environment setup instructions. Google and email-link sign-in, updated logos, and shared brand assets established the public site's identity.

PlatformPR #10

Bring the MUTP site into the repository

The public project site, initial branding, and browser-facing documentation joined the monorepo. Its static pages and Firebase Hosting structure became the foundation for later builder and game pages.

PlatformPR #9

Preserve games through server restarts

Durable checkpoints now retain game state, dice, retry history, and completion information. Restart checks confirmed exact restoration, while corrupt or unsupported records are rejected safely.

PlatformPR #8

Establish the modern game-service foundation

The service foundation moved to Java 21 and Jetty 12, with tighter connection boundaries and an isolated compatibility policy. Engine traces, replay, database, and retry checks compared it with the retained Java baseline.

Developer toolsPR #7

Expand full-match and recovery verification

Full-match, setup recovery, reconnect, access control, and replay checks extended the browser protocol's coverage against real engine behavior. The evidence documented what the first complete game flow could support.

Developer toolsPR #6

Verify the first complete game lifecycle

The match driver now covered games through completion, saving results and reading replay data. Restart and browser checks exercised the first end-to-end game lifecycle.

Developer toolsPR #5

Verify core browser turn actions

The browser protocol and engine checks expanded through core turn actions, required prompts, and state transitions. Live evidence recorded how the browser choices connect to game rules.

GameplayPR #4

Establish setup and turn flow

The first browser setup and core-turn flow introduced server prompts and kickoff actions around the existing engine. This established the structure used by later gameplay features.

GameplayPR #3

Add team and match preparation

Human roster validation, saved teams, and prepared matches introduced team selection before a game. Database changes provided the storage needed for this preparation flow.

PlatformPR #2

Complete the first browser match connection

The initial browser transport gained choice handling, reconnect behavior, and repeatable protocol fixtures. Repository branch-protection conventions were also established for subsequent work.

PlatformPR #1

Lay the local game runtime foundation

The local Java and Maven toolchain, container runtime, database wiring, and startup and shutdown lifecycle were established. Initial browser-service scaffolding made later match experiments possible.