Skip to the content
GymAI News
Dev log

Dev log #15: an account has a name at last, and one phrase stops meaning two things

· updated September 23, 2026

Thirteen commits landed on the working branch since the last entry. An account now has a name: the username, the given name and the surnames are stored, the name is claimed before the account exists, and the console header shows whose session it is. One phrase that meant two different things on two screens means one thing now, and a new check reads a form and its route and makes them agree.

An account has a name at last

The registration form has drawn five fields since the round that designed it, and the account it creates now keeps all five. The username, the given name and the surnames reach the store, and the two rules that govern them are built rather than written: a name belongs to one account, and it is shown to its owner alone, on the owner’s own session and nowhere else.

The order is where the work went. The name is claimed before the identity is created, because a username is unique across every instance we run: an account created first and named afterwards could end up sharing a name with somebody on another host. When the registry cannot answer, nothing at all is created, and the reply says so as a server fault rather than blaming the form, since nothing the person typed is wrong.

Two smaller decisions carry the same weight. A name is compared and stored in lower case, because Jose and jose are one name. And uniqueness is the store’s job rather than the code’s: an index enforces it, so two registrations arriving in the same millisecond cannot both take a name.

The console knows who is signed in

Every frame in the console draws a 44-pixel square with the person’s initials in the header. The head-and-shoulders glyph in it was always the answer to an absent name rather than the design; now that a name exists, the initials are real for the first time. A given name with no surnames is a whole name here, since the form allows one.

The username is drawn beside them, between the record and the account control, in a mono face because it is an identifier and not a name. Where an account has none the chip is absent rather than empty, since a blank chip reads as a name somebody failed to choose.

One phrase, one meaning

GymAI holds a gym’s postal address as a structured fact with thirteen parts and its own edit screen. It also asks for the address a code is sent to. Both were called the gym’s address; the screens now say the gym’s email address wherever the electronic one is meant, in five places in the build and two in the help site, whose quotes check would otherwise have gone red the moment a label moved.

The second pass is the interesting one. An ambiguity does not travel in a single phrasing, so replacing one exact string left the same idea standing elsewhere in other words. It is closed now by a test rather than by another round of hand-editing: no screen may say the gym’s address unless it is listed with the reason it means the physical one. The single listed allowance is the proof of the whole thing, since the access note really does warn that the line will be published with the street, the number and the town.

The same shape, two halves each correct alone, sits between a form and its route, since neither suite asks what the other sends. There is a check for that now, running on every gate: it reads the fields a form sends and the fields its route reads, and reports any that never meet. The registration screen also enforces its own requirement for the first time, and the tests that assert its refusals were written red.

An account that brings no gym is not kept for ever

A new rule, decided by the owner and written down with its reasoning: an account that has presented no gym within thirty days of confirming its address is deleted, and a warning always goes out first. Presenting a gym stops the clock, whatever the moderators then decide, so nobody is punished for time their record spends in our queue. A refusal restarts the thirty days, giving an honest person another month to fix a mistyped address.

It adds a retention period, and the rule that came with it is the one that matters: the privacy text is part of whatever ships it, because a deletion rule the privacy page does not mention counts here as a defect rather than an omission.

51 checks, 10,080 unit tests and 1,438 browser tests

The gate reads 51 checks, all green, and the last full run read 10,080 unit tests and 1,438 browser tests, up from 9,961 and 1,402 at the last entry. The standing counts, each written by the check that derives it: 55 routes, 27 of them rate-limited; 1,866 rule citations resolving by number, up from 1,858; documented coverage across 250 modules; 81 artboards; and Node pinned at 22.23.2.

What comes next

The legal texts take on the retention period just decided, and the work towards opening the free gym listing carries on.

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