All notable changes to this project are documented here.
v1.7.63Startup No Longer Rewrites Planet Table
2026-09-02
Starting the app no longer adds infoturn columns to every planet and starbase row (that rewrite could lock the local H2 file for a very long time)
v1.7.62Replay Ships on Planets and Fleet Icons
2026-09-02
Ships in orbit are listed on the planet tooltip (Ships tab); click a row for the full ship card
Stacked ships at one point show a combined hull icon with a count instead of hiding under each other
Map markers use the same Planets.nu hull pictures as the tooltip, with the class silhouette as fallback
v1.7.61Starbases Lost Uses Current Planet Knowledge
2026-09-02
Most Starbases Lost no longer counts leftover scans of a base you no longer see
A loss is a planet you currently owned with a starbase that is captured, or a base destroyed while you still hold the planet
Replay map owners and starbases prefer the owner's own turn file over stale intel from other seats
Recalculate game statistics so existing games pick up the new counts
v1.7.60Home Page Agent Answers Planets.nu Rules
2026-08-30
The assistant on the home page now answers Planets.nu host rules, race abilities, and strategy even when no imported game is open
Home-page questions about mines, fuel, or races no longer get stuck on a thin game list or a coincidentally matching game name
Race win rates and win-rate leaderboard highlights are included so the home chips have data to work with
v1.7.59Starbases Lost Counts Captures and Destruction
2026-08-25
Most Starbases Lost no longer stays at 0: a base is counted when the planet is captured (ground attack) or the base is destroyed
Recalculate game statistics once so existing games pick up the new counts
v1.7.58Win Rate and Destroyed Hull Leaderboards
2026-08-25
Best Win Rate lists only real commanders (Dead, Open, and race-name seats are omitted)
Most Ships Destroyed by Race now shows the destroyed hull type next to the race
v1.7.57Leaderboards Honour Race Filter
2026-08-25
Advanced Filter race selection now applies to every leaderboard (for example Most Ships Built no longer lists Horwasp when race 12 is unchecked)
v1.7.56Classic Races Filter On by Default
2026-08-25
The home page starts with Advanced Filter active for races 1–11; Horwasp games stay out until you select that race
v1.7.55Faster Advanced Filter
2026-08-25
Advanced Filter ranks matching games without loading every turn of every player
Host settings are filtered in the database (indexes on game type, ship limit, win condition, tenacity)
v1.7.54Replay Opens in 3D
2026-08-22
Game replay starts in 3D; 2D remains available from the view toggle
v1.7.53Classic Races Preselected in Advanced Filter
2026-08-22
Advanced Filter starts with races 1–11 checked; Horwasp stays off until you select it
v1.7.52Quiet 404 for Unknown Files
2026-08-22
Missing files and scanner probes (for example /wp-login.php) return a plain 404 instead of a 500 error page and stack trace
v1.7.51Replay Map Full Screen
2026-08-22
Replay map can be maximized to fill the whole screen (Escape or the button exits)
Left and right chart columns each have a switch to collapse them and give the map more room
v1.7.50Admin: Force Reset Stuck Worker
2026-08-21
Admins can force-kill a stuck worker process from the home page when jobs hang indefinitely
All running import and work jobs are marked as failed so they can be restarted cleanly
The worker restarts automatically after ~8 seconds via the container entrypoint
v1.7.493D Replay Map
2026-08-21
Replay can switch between the classic 2D map and a 3D view you can tilt, rotate and zoom
Planet coordinates and distances stay the same on the map plane; minefields show as translucent cylinders in 3D
v1.7.48Import Pauses While You Browse
2026-08-21
Import and statistics recalculation pause automatically when someone uses the website, then continue after a short idle period
The NAS container is sized for 12 GB (2 GB reserved for the site)
v1.7.47H2 Engine Pinned to 2.4.240
2026-08-21
Local and Docker now start the same pinned H2 2.4.240 engine and record its version on startup
v1.7.46Delete Aborted Imports Again
2026-08-21
Deleting a game or a failed import job works again (the worker used SQL that H2 2.x does not accept)
v1.7.45Website Stays Up During Huge Imports
2026-08-21
Import, statistics recalculation and game delete run in a separate worker process, so a 600-turn game can no longer take the website down with an out-of-memory crash
The home page warns if that worker is not running; browsing already imported games still works
v1.7.44Quiet Fan-Project Disclaimer
2026-08-20
A small footer notes that this analyser is unofficial and not affiliated with Planets.nu or VGA Planets, with a contact link to ted on Planets.nu
v1.7.43Replay Assets Refresh After Deploy
2026-08-20
CSS and the replay map script are loaded with a deploy version in the URL, so browsers pick up new features without Ctrl+F5
v1.7.42Replay Turn Count While Loading
2026-08-20
Replay shows '50 of 250 turns loaded' instead of a progress bar, so long games stay obviously loading in the background
The remaining turns load in tens, and the count updates every 10 turns until the map is complete
v1.7.41Deep Scan Filter, Faster Replay and Agent Newsflash
2026-08-20
Advanced Filter is grouped into Field of Play and Host Rules, with a collapsible Deep Scan for rarely used host flags
Replay map loads the first 50 turns, shows 12 / 87 style progress, and keeps fetching the rest in the background
Charts draw after those first 50 turns and refresh once the remaining turns are in, not every few turns
Newsflash: the Analyzer Agent can guide you through the page; Replay Map asks it to offer the last 10 imported games
v1.7.40Stuck Import Jobs Can Be Deleted or Restarted
2026-08-20
Import jobs left hanging after a crash or stop are marked failed so they can be deleted or restarted
Deleting or restarting an unfinished job also removes leftover imported game data in the background
Delete waits if statistics are still calculating for that game, and calculate waits if that game is being deleted
v1.7.39AI Sector Jumps and Replay Translations
2026-08-19
On the home assistant, imported game names, game IDs and commander names open that sector's replay map
Replay map labels, tools and tooltips are translated in all languages instead of leftover English
v1.7.38Replay AI Button Visible Again
2026-08-19
The assistant on the replay map appears as soon as the first turns are playable, even after a jump from another page
v1.7.37Replay Turn Load Progress
2026-08-19
Loading turns shows a progress bar and 12 / 87 style count; a thin strip stays while later turns finish in the background
v1.7.36Replay AI Stays Put and Zooms In
2026-08-19
On the replay map the assistant appears only after the current turn is loaded, so it already has that turn as context
Txx jump buttons stay in this browser tab, keep the chat panel and answers open, and zoom the map in on the clash (~240 ly)
The robot icon bobs as soon as the assistant becomes active
v1.7.35AI Walks Game Data Through Q&A
2026-08-19
The assistant uses the page you are on (home, game, replay, commander, player, compare) plus the last questions, and loads only the matching slice
Follow-ups keep commander names and turns, so you can zoom from who-fought-whom to when/where to a jump without dumping the whole log
One model call per message: no retrieval loops and no multi-agent tasks; combat and mail stay capped
v1.7.34AI Jumps the Replay Map and Reads Commander Mail
2026-08-19
Txx jump buttons wait until that turn is loaded and then move the slider; if chat is on another page they open the replay window at that turn
Assistant context includes commander-to-commander mail and, on a commander profile, that commander's imported games
New imports also store Planets.nu mymessages (diplomatic inbox)
v1.7.33Commander Mail Filter and Profile Links
2026-08-19
Messages between commanders now count only subspace/From-To mail, not Fleet Command or combat/capture logs
Commander names in the replay list open a normal new tab instead of a named window that could stay blank
v1.7.32Replay AI Knows the Combat Log
2026-08-19
Replay assistant gets a when/where combat timeline (commanders, turn, XY, winner) so it can answer who attacked whom
Answers can include jump buttons that open that turn and pulse the map location
The robot button idles, leans while thinking, and nods when a reply arrives
v1.7.31Replay Commander Links, Game Tooltip and Chart Max
2026-08-19
Commander names with apostrophes no longer break later legend links (Holzdrache in game 68465)
Hover the sector/game title for game id and settings; extra facts load only on first mouseover
Each side chart has zoom in/out and Max/Normal fullscreen
v1.7.30Replay Diplomacy Chart, Map Tools and Mine Odds
2026-08-19
Messages-between-commanders chart is a race-labelled matrix: this turn vs all turns, click a cell to read the mail
Toolbox above the map: pan, measure light-years, lasso ships for host combat order (numeric FC, Kill, primary enemy, ship id)
Minefield tooltip lists every overlapping field under the cursor and the combined hit chance per light-year (normal / cloaked / web)
v1.7.29Faster Replay Turn Loading
2026-08-19
Replay map becomes playable after the first 12 turns instead of waiting for the whole game
Turn payload is gzip-compressed; message and diplomacy data are read in one scan
v1.7.28Commander Race Counts and Visitor Page-View Time
2026-08-19
Commander race comparison counts only that commander's games, not every seat in those games
Page-view times are sent as UTC and shown as visitor-local hours and minutes, refreshing as time passes
v1.7.27Replay Diplomacy Charts and Commander Game Import
2026-08-18
Replay side charts are selectable; extra series include commands/turn, expansion, minefields, alliance slots and a commander message-flow tree
Click a message-flow band to read the turn-log mail between those two commanders
Logged-in commanders can load their finished Planets.nu games on the homepage, pick up to 3 and queue them; already imported or queued games are locked
Locale bundles now share the English key set; missing game.players and broken headers/keys are repaired
v1.7.26Replay Chart Load Fix and Collapsible Legend
2026-08-17
Side charts load ApexCharts as an ES module (the previous window global was invisible to replay-map.js)
Player list on the map can be collapsed and remembers that choice
v1.7.25Replay Ship Equipment and Host Formulas
2026-08-17
Ship data tab shows engine, beam type/tech, torpedo type/tech, tube count and minesweep (normal / web)
Sweep uses official kill² × beams (web: kill × beams); Colonies add 20 per fighter on normal mines
Host formulas and static equipment tables live in .github/planets-nu-mechanics.md; engine_id is imported when present
v1.7.24Replay Minefield Tooltips
2026-08-17
Hovering a minefield shows id, type (mines / web), units, radius, owner/race and the turn it first appeared
Matching turn-log messages appear in the Messages tab when available
v1.7.23Replay Ship Data Tab
2026-08-17
Ship tooltips open a Ship tab with fuel, warp fuel use, mass, crew, damage, friendly code, mission, prime enemy, weapons and cargo
Messages tab still appears when a turn-log entry matches that ship
v1.7.22Replay POI Markers and Message Tabs
2026-08-17
Points of interest appear as map markers; hover or click shows what happened (battles, captures, lost ships)
Pinned tooltips have Event and Messages tabs when Planets.nu turn-log messages match the location, planet or ship
Planet and ship tooltips use the same Messages tab when a matching log entry exists
v1.7.21Stop Tracking Local H2 Database in Git
2026-08-17
Local H2 files under data/ (*.db) are gitignored and removed from upcoming commits so pushes stay small
v1.7.20Homepage Newsflash: Replay Map
2026-08-17
Welcome portal shows a Newsflash for the Replay Map: rewind the campaign instead of only reading the scoreboard
v1.7.19Replay: Side Charts, POI Bar & Map Depth
2026-08-17
Replay map gets a deeper look: lit planet spheres, glow, shadows, starfield and a vignette
Left charts track each race's planets/starbases and ships/fighters over turns (solid / dashed)
Right charts show cumulative planet/starbase and ship/fighter losses per race, synced to the turn slider
A Points-of-Interest bar above the map clusters battles, captures and ship losses; click to jump there
v1.7.18Replay: Planet Hover Data & Hull Icons
2026-08-17
Hovering a planet on the replay map shows imported turn data when available: clans, temp, mines, factories, defense, MC, supplies, minerals, friendly code and starbase
If the current turn has no snapshot for that planet, the last known values are shown with an as-of-turn note
Ships use hull-class silhouettes (colored by owner, rotated by heading) instead of generic dots
Ship tooltip shows the official Planets.nu hull image and hull name
v1.7.172D Game Replay Map
2026-08-17
Each imported game has a Replay view: 2D starmap with turn slider, play/pause, zoom and pan
Planet ownership colors update per turn; native treasure planets are marked with 1–3 stars
Toggle layers for planets, ships (with movement vectors), minefields and treasure stars
Ion-storm layer is present but disabled until storms are imported as structured data
Entry from the game page and from the commander games list
Three.js is loaded as an ES module (r170 no longer ships a global three.min.js)
v1.7.16Commander Avatar from Planets.nu on Check-in
2026-08-17
Entering a Planets.nu username now loads the public profile via /account/loadprofile (no password)
Navbar and identify dialog show that commander's planets.nu avatar instead of the default Ted image
v1.7.15Spacedock Check-in Prompt
2026-08-17
Homepage hero invites unidentified visitors: Commander, check in at the Spacedock with your name
Shuttle icon / prompt opens the same identify dialog as the top-left avatar
v1.7.14Page View Details: Who & When
2026-08-17
Admin Page View Statistics: click a view count to open a visitor timeline (who / when)
Newest tab lists recent views across all pages, filterable by Commander or Unknown
Logged-in visitors show as Commanders (avatar, profile link); anonymous visits use a dashed Unknown/Guest identity
Each page row shows the Commander vs Unknown split next to the clickable view count
v1.7.13Commander Career Charts
2026-08-16
Commander profile now shows career charts across imported games: finish rank (1 at the top) and end-game planets/ships
Header adds average finish rank and Planets.nu tenacity when available
Games Played list is sorted newest-first and has a search box (name, race, game ID)
Identified users get a My Stats button in the avatar modal linking to their commander page
Full i18n for the new commander/career keys across all 20 locale files
v1.7.12Leaderboard Drill-down: Per-Turn Chart & List
2026-07-28
Clicking a leaderboard value opens the player page with ?lb={category} and scrolls to a drill-down section under the charts
Multi-player chart for the selected metric over all turns in that game (focused player emphasized with a thicker line)
Turn-by-turn value list for the selected player; cumulative DB counters (battles, ships built, captures, losses, …) are shown as per-turn deltas, not running totals
Stock metrics (planets, ships, commands, minefields) and already-per-turn fields (expansion) stay as the value for that turn
Applies to all standard leaderboards with game+player links; Win Rate / Different Enemies / Hull Types have no per-turn series
Wide layout: .container uses ~90vw from 1500px viewport width (ultrawide / 3K–5K) across all themes
i18n (EN/DE) for drill-down labels: over turns, turn list, turn
Most Starbases Captured: counts every planet capture that has/had a starbase (planet-driven, same idea as planet takes; ground combat always transfers the SB)
Compare Players: fixed broken AI-chat fragment path that could break the page; safer ApexCharts init (inline JS defaults, series padding, deferred render) to avoid error flash / slow layout build-up
Analysis page: same AI-chat fragment path fix
Leaderboard UI rewrite: formula ? panel, grip-handle drag reorder, expand/move/collapse as real buttons
Leaderboard JS: removed th:inline/onclick (fixed toggleLbFormula is not defined on homepage); all actions via data-lb-action + data-* config on .lb-container
Hint text for Most Starbases Captured updated (EN/DE) to mention ground attack
Rebuilt Hull ID→name table from api.planets.nu/static/all (211 hulls) — previous map used wrong sequential TIM-style IDs so hull labels in Ship Experience were wrong (e.g. Merlin was mapped as Iron Slave)
Merlin exclusion id corrected to 105, Neutronic Refinery to 104 (official Nu ids)
VCR import now reads nested left/right combatant objects (hullid, name, damage) instead of missing flat fields — killer ship names and hull types are stored correctly for new imports
Ship Experience easter egg header icon changed from egg emoji to Font Awesome ranking-star (fa-ranking-star)
Merlin Class Alchemy Ship (hull 105) and Neutronic Refinery Ship (hull 104) are always excluded from XP rankings, per-race best, and killer-ship stats
v1.7.8Public URLs use Planets.nu Game ID
2026-07-24
All game URLs (detail, compare, player, analysis, export, admin actions, leaderboard links) now use Planets.nu game id as the path key instead of the internal DB id
Lookup accepts Planets.nu id first, with fallback to internal id for old bookmarks
Leaderboard/portal records and race-drilldown links emit planetsNuGameId; import queue Go-to-Game uses planetsNuGameId
Fixes broken Compare Player and mixed-id navigation when internal import number diverged from the real Planets.nu game id
v1.7.7Import Messages: No Thousand Separators on Game IDs
2026-07-24
Import flash messages no longer locale-format Planets.nu game IDs (e.g. 500821 was shown as 500,821 / 500.821); IDs are passed as strings to MessageFormat
v1.7.6Locale-aware Build Timestamp
2026-07-24
Navbar build date/time now formats according to the selected UI language (SHORT date + time via LocaleContextHolder), e.g. de 24.07.26, en 7/24/26, ja 2026/07/24
v1.7.5Fix Player Identity, Winner Rank & Ownership Mapping
2026-07-24
Winner/rank: map API finishrank (was wrongly reading non-existent finishplace/iswinning) so finish position and isWinner are correct
Seat vs race: treat players[].id as seat/slot (ownerid) and players[].raceid as race – no longer conflate the two
ZIP import keys player{N} files by slot id; loadturn playerid uses slot id
Statistics and score import filter planets/ships/minefields/battles by owner slot id instead of raceId
Dead-player resolution (events, ZIP turn-1, recalculate) matches by slot id
Ship kill-tracker labels owners by slot id
games/list: status=3 for finished games; parse top-level JSON array correctly
Note: already-imported games keep old wrong ranks/winners until re-import or stats recalculation; re-import recommended for free-race games
v1.7.4Import Guard for Unfinished Games & Planets.nu API Reference
2026-07-24
Import now rejects games that are not finished (Planets.nu status != 3) with a clear, localized error message including current status (Interest / Joining / Running / On Hold)
Check runs immediately when queuing an import (web UI) and again during job processing / REST import as a safety net
loadinfo mapping extended with top-level game object so game.status is read correctly (settings.status is often empty on the live API)
Also shows a dedicated message when the game ID is not found on Planets.nu
Full i18n for import.notFinished, import.gameNotFound, and import.status.* across all 20 locale files
Added agent/developer API reference at .github/planets-nu-api.md (endpoints, identity model slot vs race, finishrank vs iswinning, known code mismatches)
copilot-instructions.md now points to the Planets.nu API reference for import/player/race/winner work
v1.7.3Commander Profile Page
2026-03-30
New Commander profile page at /commander/{username} – clicking any player name opens their profile
Profile shows avatar, total games, wins, win rate, and favorite race
Commander-scoped Leaderboard ranking all players across the commander's games
Race Comparison table filtered to races played by the commander
Games Played table with race, rank, end-game stats per game
Commander-scoped leaderboard drill-down API: GET /api/commander/{username}/leaderboard/{category}
All player username links across Leaderboards, Game, Player pages now link to internal Commander page
Full i18n support for commander keys across all 20 locale files
v1.7.2Advanced Filter: Tenacity Range & Race Selection
2026-03-30
New Tenacity filter (min/max) in Advanced Filter – filters games by player tenacity score
New Race multi-select filter – filters games containing at least one player of selected race(s)
Player entity extended with tenacity field, imported from Planets.nu API player data
Flyway migration V15: tenacity column on players table
Full i18n support for new filter labels across all 20 locale files
Advanced Filter title tooltip explains global scope (Leaderboards, Race Comparison, Games) and session persistence
v1.7.1AI Assistant: Ollama → xAI Grok Migration
2026-03-28
Replaced local Ollama LLM with xAI Grok cloud API (OpenAI-compatible)
Fixed AI chat fragment name mismatch (ai-chat → ollama-chat) that made the assistant invisible
Fixed API key override: application.yml empty default no longer overrides Java class default
Corrected xAI model name from grok-4.1-fast to grok-4-1-fast-non-reasoning
Improved error handling: WebClientResponseException now logs API response body
Updated NAS Docker .env from old Ollama config to xAI Grok environment variables
Updated .env.example, docker-compose.yml, DEPLOY.md with correct model name
Deploy script status output renamed from Ollama to AI Chat
v1.7.0Reusable Leaderboard Fragment & Game-Scoped Leaderboard