All checks were successful
PR Checks / android-build (pull_request) Successful in 9m53s
A fifth tab on the Rust server screen, between Online and Wipes, shown when the site's module declares `map` under the app's one capability rule (D122). `?tab=map` opens it; on a site without a map it opens the feed. The phone draws the map itself (D121): Coil loads the picture once per map as RGB_565, and a Compose Canvas draws the grid and the markers, with pinch, pan and double tap. The frame is §30.3's transform, ported from the web's mapGeometry.js with its test cases. Markers keep their size on screen; a zone is drawn on the ground. Nothing here gates a layer: map/live is projected per viewer on the server, and the app draws what it is sent. - The legend: a switch per layer the viewer was sent, and who can see each one they were not (with the D113 line). The mates row offers the Steam link to a signed-in, unlinked viewer. - The tap card: what a marker is, its grid square, and what its layer carried. A site-event marker whose run core's public calendar lists (D125) has Open event, which opens the app's own event page on that run (D123). A rehearsal's or unlisted event's marker says only "Site event". - The poll: map/live every pollMs (10 s) while RESUMED on the Map tab (D124), and not at all for a viewer sent nothing that moves. A new mapKey re-reads the map, so a new seed's picture follows in place. - Per account: the map's state is dropped and re-asked on a change of signed-in account, and an answer asked for the previous account is discarded when it lands. Found on the emulator walk and fixed here: the reader's zoom was lost on the way back from the event page, and again whenever the status line under the map changed length (a resize was treated as a rotation). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01E14m6SuuY6i1vASFeGDBeY