Tickets 113–147: architecture, production & animations
June 14, 2026
A large batch of work covering roughly three phases: getting the codebase
modular enough to work on in slices, overhauling the production system and
placement UX, and making turn resolution visible through an event log
and unit animations.
Server architecture & API
113 Split the monolithic api.py into per-domain Flask blueprints (auth, games, map, units, cities).
114 Server-driven sprite/asset manifest — the client no longer hardcodes sprite paths.
115 Decomposed cities.py into smaller, domain-focused modules.
116 Decomposed units.py.
122 Refactored get_game_state_summary into per-domain state contributors — the pattern that drives all animation data today.
124 Shared API endpoint helper for auth, DB connection, and error mapping.
126 Split games.py (turn cycle, player colors).
123ENGINEERING_MODEL.md reconciliation for the architecture refactors.
Client modernization
117 esbuild toolchain, ES modules, bootstrap data-island contract.
118 First extraction pass: shared foundation modules out of the monolith.
119 Render pipeline extraction — blocked after 3 QA rounds; partially resolved by 127.
139 Unit label restyle; fixed attention-badge overlap with city-banner style.
Resolution, event log & animations
140 Resolution event log persisted to DB; log console command to inspect it in-game.
141 Simple unit movement animations on turn advance.
143 Console log formatting: per-event newlines, hide raw unit IDs.
144 Full-path movement animations — units now slide along their actual Dijkstra path, not a straight line to their destination.
145 Destination legality deferred from planning to resolution, plus an iterative bounce-chain fixpoint. Units ordered onto occupied tiles or sieged cities now bounce (stay put, queue intact) rather than being blocked at the planning stage.
146 Bounce hop animation — a bounced unit plays a brief vertical hop so a failed move reads as deliberate rather than a no-op.
142 Doc pass for the resolution event log.
147 Doc pass for resolution timing, bounce rules, and animation state keys.