Skip to the content
GymAI News
Dev log

Dev log #8: a gym can say this is still mine

Fifty-eight commits landed on the working branch since the last entry. Nearly all of them answer one question: what happens when somebody claims a gym that already has a keeper. The answer built here is that a date never decides it, the keeper hears in time to say no, and the notice that tells them cannot go quietly missing.

A window that waits, and a person who decides

The rules that settle a re-claim were built first as pure rules, with no screen and no database near them. They answer one of three words, waiting, disputed or decidable, and never a keeper. A record changes hands because a person on the moderation side moves it, and that move is one transaction guarded by who holds the record at that instant: if the keeper changed underneath, nothing is written. The window closes at the end of the fourteenth calendar day, not after fourteen times twenty-four hours: two different moments once a clock crosses midnight.

The keeper reads the claim, and can say it is still theirs

While a proved re-claim is open, the gym’s own screen shows a band in one of four states, running, objected, closed or failed, with the dates, four rows and a single act: I object, this is still my gym. The owner then ruled two clauses that had been held open, with their reasons recorded. The keeper reads the domain the code came back from, so the band opens with a sentence naming that domain and the day, and still says nothing about who claimed the record or where the code was sent. And an objection made after the fourteenth day still counts: the closed band keeps its act and reads Saying so now still counts.

The screen was specified before it was built and passes at 360, 834 and 1180, with an accessibility scan at each width that caught a real contrast defect on its first run, fixed rather than waived.

The notice reaches the keeper, or the record does not move

A proved re-claim now mails the keeper, in Design’s own words, with no link and no path in it. The mail is retried from the store, which keeps it as an outbox of its own, so a mail server that is down when a claim is proved does not swallow the only warning anybody gets. Two attempts that overlap still send exactly once.

Every notice goes out on its own bounded send with a timeout, so a server that accepts a connection and never answers cannot hold the schedule still. And a keeper whose mailbox refuses the mail can no longer keep a record by being unreachable: the move waits for a holder who was told. A mutation sweep ran over that work until all twenty-two surviving mutants were killed.

A record can say how to get in, and the licence has an address

A gym’s address gained a thirteenth part: an access note, public, up to 120 characters, for the sentence a postal address cannot carry: the side door, the second floor, the bell to ring. It is refused rather than silently cut when it runs long, changing it is a correction rather than a move, and a record holding no note reads as holding none, not an empty one. The console draws it as its own row, and a record’s public head prints it under the country line.

Separately, the licence now has one place to live: the server answers at exactly /licence with the licence and the notices as a single plain-text document, carrying the site’s own headers. The console shell draws one line, GymAI Source-Available Licence, kept on this instance, and links it; so does the signup page.

45 checks, 9,015 unit tests and 1,142 browser tests

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

Design rounds 51, 52 and 53 were all curated in over the same period, copied byte-identical and measured by checksum before anything moved. Round 52 came with a fidelity pass across four boards, comparing what is drawn against what is built. One defect it turned up: ten rules in the console drew a border with a token defined nowhere, which makes the whole declaration invalid, so ten borders were drawing nothing at all. They use a defined token now, and the gate reads 447 token reads across 55 files, every name defined and not one dead fallback among them.

The plan reached a milestone too: every sprint from here to the launch for everyone is now written down, in order.

What comes next

A gym record can now be claimed by somebody who proves it, held by somebody who objects, and moved only by a person who saw both. The rest of the console’s rooms follow.

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