Twenty-eight commits landed on the working branch since the last entry. The way out of the platform, drawn in the last round, now reaches the server: a gym can close its account, come back, or delete it, and the deletion runs on its date with nobody pressing anything. Usernames have a registry that persists, the site confirms a deletion before it believes one, and the moderation queue is drawn exactly as its board draws it.
Leaving is built, behind five doors
The leaving boundary lives inside the platform service rather than in a module of its own, where the gate, the second factor and the sessions already live; its rules are shared code, called and never copied. A closed account gets one row in a new table and an open account gets none, so absence is the open state and cannot contradict itself. The deletion date is stored as a calendar day, because a rule that fixes a day must not delete an account an hour early after a timezone move.
The schedule is wired, not merely available: the daily jobs call it, so an account is deleted on its date with no action from anybody. Order carries weight here. The username is released only after the identity is gone, and a reminder that fails to send is never recorded as sent, so the next day retries it while the deletion still runs on time.
Five routes put all of that within reach: one to read the state, and one each to close, reopen, set the reminder and delete. A refused confirmation never echoes the real profile name back, and a test asserts it, since a refusal that quoted it would hand the answer to whoever guessed wrong. A deletion clears the session cookie on the way out. 14 of 14 route tests are green.
The gym console’s controls reach the server
The console’s leaving rail, drawn a day earlier, now calls those routes from every control. The confirm button stays enabled on an empty name, because a control that switches on only once the input looks right would teach by guesswork the one rule the screen must not state. And the reminder tick shows what the server answered, never what was pressed.
The browser test at 360 px earned its place on the way: the rail was first reading the second factor from the wrong object, which would have skipped the live code on exactly the accounts that must give one. It was caught and fixed before the slice closed. The console’s unit suite reads 740 of 740, and the browser run is clean with its accessibility pass at 360, 834 and 1180 in all three states.
One registry of names, and one answer to who may get in
Usernames now have a persistent registry: three to thirty characters of lower-case letters, digits, underscores and dots, compared after the same normalisation everywhere. It claims, confirms, holds a name until a date, reopens and releases, and it never tells anybody who holds a name. Attempts are held to an hourly ceiling, and the identity asking always comes from the server, never from a browser.
The platform also gained a second kind of identity beside the gym: the person, so that a hosted app account has something to hold its date and its name against. And gymai.coach no longer treats its own successful request as the outcome of a deletion. After telling an instance to delete, it asks that instance a single question, whether this account may be used, and believes the answer. The same function answers that question for the person trying to sign in, so the two can never drift apart. The states it accepts are an allow-list, and anything unclear is a refusal. The site’s suite reads 1,296 of 1,296.
The queue, drawn as the board draws it
Ten fidelity findings on the moderation queue were closed, each re-read from the drawing’s markup, never a screenshot. Rows became flat hairlines instead of cards, the chips became small mono rectangles with a kind at zero dimmed but present, and 834 stacks its rows as the board does while 360 lets the main action fill the row. Loading placeholders now take the shape of the rows they stand in for, so nothing on the page moves when the data lands, and an empty queue is said once. The moderation spec reads 98 of 98, with accessibility and 44 px touch targets clean at all three widths.
48 checks, 9,579 unit tests and 1,280 browser tests
The gate holds at 48 checks, all green, and the suites read 9,579 unit tests and 1,280 browser tests, up from 9,570 and 1,276 at the last entry. The standing counts, each written by the check that derives it: 55 routes, 27 of them rate-limited; 1,771 rule citations resolving by number, up from 1,749; documented coverage across 240 modules, up from 239; 80 artboards, each claimed by a specification or exempt with a reason; and Node pinned at 22.23.2.
What comes next
The third sprint carries on through the gym console’s rooms, and the screens round 63 drew follow the queue.
If you would rather be told when GymAI opens than keep checking, the waiting list is on gymai.coach.
No comments yet
Nobody has written anything here. You can be the first.