Skip to the content
GymAI News
Dev log

Dev log #7: the map arrives, and a gym can say where it is

Fifty-seven commits landed on the working branch since the last entry, across a day. Most of them are one thing arriving: the map. A gym can now be placed on a real map, added with a pin, and moved to another building with the pin moving with it, and the rules about where a gym can be were gathered into one place on the way.

The map is here, vendored byte for byte

The map library is MapLibre 6.9.0, and it lives in the repository rather than being fetched at build time: three modules, the stylesheet and the BSD-3 licence, each with its checksum and the published package’s own hash beside it. The console build copies that directory whole and ships all six files identical.

A real defect surfaced on the way in. The site served .mjs as a generic binary type, and a browser refuses to run that as a module, so the file-type table now serves it as JavaScript.

Where the tiles come from is a policy rather than an accident. Everything the console build serves carries the site’s strict content policy plus exactly one added source, the tile server, and workers from this origin. No blob:, nothing unsafe, no wildcard. The site’s own pages keep the strict policy untouched and reach nothing at all.

A gym’s position, in one place, with the world’s edges held

The rule for what counts as a position on Earth had been written in three places, and the record itself took any two finite numbers. There is one copy now, and the record calls it. Both bounds are inclusive, the 5-metre keyboard nudge that moves a pin by arrow key is clamped at the poles and carried across the antimeridian, and a pair that is not a position has one sentence rather than three. A record whose position falls outside the world is refused with that sentence, and the create route answers with it too.

Adding a gym is a screen now: the form, the pin, one save

The add path was built as values first and a page second. The map component draws a proposed pin and a placed one, the credit on every state, and the zoom pair and keyboard pad only on a map that actually drew; it opens on the world, and the first press places the pin. The form and the pin step sit on top, and one write carries the whole record. Nothing on screen claims a record exists before that write.

The browser tests found a defect no unit test could: the library’s own stylesheet, linked later, beat the canvas rule and the map drew with no height. The canvas is sized by its frame now. The path passes at 360, 834 and 1180, with an automated accessibility scan at each width.

Three doors in the console that used to answer a press with “that screen is not built yet” now lead to the claim screen, as their own recorded rule said they should once it had an address.

A gym can move, and the pin moves with it

The owner ruled that a keeper who moves the gym to another building places the pin again before leaving, so the new address and the pin are one save. The record stores a move with its new pin in one write or not at all; a correction to the wording of an address saves alone; the pin can be moved by itself; an identical address writes nothing. What was replaced is kept in the record’s history and never published.

The edit is on screen at the three widths, with its act disabled while it saves and the address read back under the title. The accessibility scan caught a real contrast defect on the map’s line against the console’s ground, and it was fixed rather than waived. Registering a gym’s account is built alongside it: the address and the password reach one route and nothing else, and each refusal is kept as its own state.

45 checks, 8,805 unit tests and 1,112 browser tests

The gate every change has to clear holds at 45 checks, and the suites read 8,805 unit tests and 1,112 browser tests green, up from 8,538 and 1,067 at the last entry. The standing counts, each written by the check that derives it: 55 routes, 27 of them rate-limited; 1,604 rule citations resolving by number, up from 1,555; documented coverage across 220 modules, up from 211; 79 artboards, each claimed by a specification or exempt with a stated reason; and Node pinned at 22.23.2.

Design’s forty-ninth round was curated in the same day, measured by checksum before anything moved: 13 of 274 files differ, every one named by the round and copied in byte-identical. The console board grew from 14 frames to 19, and the map gained the credit strip its tiles are owed, on its bottom edge in every state.

What comes next

A gym can now be registered, added with a pin on a real map, found, claimed and moved when it moves, with a screen for each. What follows is the rest of the console’s rooms on top of that.

If you would rather be told when GymAI opens than keep checking, the waiting list is on gymai.coach.

GymAI


Related

No comments yet

Nobody has written anything here. You can be the first.

Leave a comment

Your name and comment are published. Your email is not, and is never sent anywhere else. How we handle data