July 19, 2026
Phone game-chrome and map clarity
Hands-on phone review exposed a mismatch between the amount of interface chrome and the space needed for the route atlas. At the 32rem vertical-map breakpoint, the active HUD now keeps only Time, Moves, the complete wrapping Target, and an available Back action. Score, the separate round identity, the map prompt row, and the floating zoom/navigation toolbar no longer compete with the first node. The horizontal hint dock is one 44px row of icons and numeric penalties; its complete names, costs, availability, and state remain in accessible labels.
The initial phone camera uses the same upper-stage anchor as subsequent moves, placing You are here close beneath the HUD without hiding the complete frontier. A hidden toolbar can no longer contribute a stale safe-area offset when the selected-route detail tray is revealed. After a move, the existing full-frontier fitting still keeps Back, current, and every new choice reachable.
Phone choice pins are reduced from 44px to 40px while their surrounding controls remain at least 44px. Decorative WebGL and SVG tokens receive the matching 90% phone-only scale; desktop geometry is unchanged. The distant target card no longer inherits the artwork column when the compact artwork is absent, so long targets wrap completely and remain horizontally centered. Row-based choice labels continue to use the tallest measured label in each row and vertically center shorter neighbors.
Reachable-target heartbeat
The reachable target was too easy to mistake for an ordinary route. Its phone pin and desktop goal card now share a continuous 1.05-second two-beat size heartbeat. Phone peaks are intentionally stronger because the marker is small; the larger desktop card uses the same rhythm with restrained scale. Both the system preference and Webwoven's in-app reduced-motion setting stop the animation while preserving the static Ochre goal treatment.
Focused browser coverage locks the unclipped phone HUD, hidden mobile toolbar and prompt row, compact hint controls, 40px visible pin with a larger touch target, centered multi-line goal, initial camera anchor, complete post-move frontier, and shared mobile/desktop heartbeat name. The changes were reviewed interactively from a physical phone over the LAN Vite hot-reload surface before release.
Desktop opening-stage containment
A production follow-up exposed that the opening desktop fit included the start and active choices but omitted a distant goal. Closing the endpoint introduction then applied ordinary stage-follow panning and could move that goal partly or completely outside the clipped map viewport. The initial desktop bounds now include the distant goal, and the transition from introduction to active play refits the opening stage instead of treating it as a completed move. A 1341×868 browser regression measures both complete endpoint cards inside the real map viewport after the introduction closes.
Mobile dead-end Back containment
Visual acceptance of the all-terminal recovery exposed that its intentionally stationary Back
camera could replace a compact history marker with the taller current card partly above the clipped
phone viewport. Vertical dead-end recovery now preserves the current zoom and continuity while
nudging the recovered current card and active choices just far enough inside the map. Desktop keeps
the existing stationary collapse. The exhausted-branch browser flow measures the complete recovered
current card against the real mobile map viewport and retains the unchanged-camera assertion on
desktop. Canonical Compose replayed bird → Ornithurae → Back at 390×844 and left the complete
returned bird card 17px below the map's clipped top edge while both choices and the goal remained
visible.
All-terminal frontier recovery
Production lobby 90PSJ6 exposed a route state where Ornithurae offered Ornithuromorpha and
evolution of birds, although both destinations had no route-safe edge except the blocked return to
Ornithurae. The existing safeguard only examined a frontier with exactly one destination, so two
equivalent terminal choices bypassed it. Frontier projection now follows the forced continuation
through one shared route-aware search and treats the current node as exhausted when no path can reach
the target without revisiting the active route. A dead-end decoy remains playable when at least one
real alternative exists, and that safe first move is guaranteed to survive the six-choice display
cap. Compass and frontier projection now share the same reachability owner. The fix is derived from
the pinned graph and active route; no entity blacklist or graph-data edit is involved.
A full current-bundle sweep followed the retained safe move through all 100 published rounds and
reached every target across 301 frontier projections. On the local SQLite adapter, projection took
4.05ms on average, 18.62ms at the 95th percentile, and 34.24ms at maximum.
Canonical Compose acceptance rebuilt the API against graph build
bcef5c35ef4725305ba3e71124f0925383fdebd26e0c70d33c9af9f0253b62d1 and replayed the exact
round-b99863c778102356 state through the real HTTP session contract. Following bird to
Ornithurae produced zero visible targets while retaining bird in the navigation stack, so the
client presents the existing Back recovery instead of either false continuation.
Release validation
The complete quality gate passes 163 web tests, 363 Python tests, both Remotion composition checks, formatting, lint, Svelte and Python type checks, file-size and color-policy checks, and the strict documentation build. All 44 Playwright flows pass across desktop and mobile, including both reduced-motion paths for the reachable-goal heartbeat. Layout-focused browser coverage was split into its own responsibility-owned spec so the modified test files remain below 600 lines.
Canonical Compose acceptance rebuilt Caddy at http://localhost against the active real Wikidata
bundle. A fresh 390×844 galaxy → Sun round placed the current card 61px below the map viewport edge,
kept the 40px choice pins inside their larger controls, wrapped the Target in full, hid Score, the map
header, and the floating toolbar, and produced no horizontal document overflow. At 1341×868 the same
compiled bundle returned to the horizontal card layout with Score, map header, and utility rail
visible. The emitted production CSS contains the shared reachable-goal-heartbeat animation, and
the local UI and readiness endpoints both return HTTP 200.