---
title: "Dev log #11: the queue hides nothing, and a new password is typed twice"
description: "Forty-nine commits: the moderation queue lists every waiting item at every width, registering asks who you are first, leaving is drawn twice in one wording, and a new password is typed twice everywhere."
url: https://news.gymai.coach/dev-log-11-the-queue-hides-nothing-and-a-new-password-is-typed-twice/
date: 2026-09-18
modified: 2026-09-18
author: "GymAI"
image: https://news.gymai.coach/wp-content/uploads/2026/09/dev-log-11-queue-hides-nothing-collar-scaled.jpg
categories: ["Dev log"]
type: post
lang: en
---

# Dev log #11: the queue hides nothing, and a new password is typed twice

Forty-nine commits landed on the working branch since the last entry. A new round of drawings was curated in the same day it arrived, the moderation queue now shows everything waiting on it, registering asks who you are before it asks how you will get back in, and leaving the platform is drawn twice in one wording.

## Every waiting item is on the queue

Design round 63 was curated in, three boards and the covering note copied byte-identical and measured by checksum before anything moved, and three open requests answered and closed.

An answer is now a queue item of its own, counted once in a chip of its own rather than as a badge on the thing it answers, and the six counts add to the total. A kind with nothing waiting is drawn dimmed and unpressable instead of printing a blank. And the queue cuts at no number: every waiting item is listed, oldest first, at every width. The panel’s browser suite reads **88 of 88** green with its accessibility pass, at 360, 834 and 1180.

## Registering asks who you are

The register screen takes five fields in one order: username, given name, surnames, the address, the password. The three new ones come first because they are about the person and are answered without thinking; the mechanism stays last, where the generated-password offer sits.

The username is three to thirty characters and case-insensitive, and **a capital is never refused** — it is lowered as you type, and the hint says so before you find out. Each of the five refusals is said as the rule, with the field keeping what was typed. A gym’s account is never asked its date of birth, and it is drawn as absent rather than hidden; the app asks once, in three boxes rather than a picker.

## Two ways to leave, written once and drawn twice

**Delete account** and **Close account** sit side by side and equal in every dimension: same width, same border, no fill and no red on either, no *recommended*, and *Keep my account* as a full-width peer underneath. Taking a copy first is offered above both and required by neither. The date is a real date, never a duration — *on 17 March 2027*, not *in six months*.

Either act is confirmed the same way: the profile name typed out, plus a live code where the account has a second factor. An opt-in tick box sends one mail a month before the date; it names the date, says that signing in keeps the account, and carries **no button and no link**. A closed account that signs in correctly is shown its date and three equal acts, and reopening puts everything back with no date left. A wrong sign-in gets the ordinary refusal, so it never tells a stranger that an account is closing.

The app and the gym’s console are written in one wording, string for string; the gym’s cards add one section, that the record stays on the map and stops being theirs.

## A password typed twice, and sessions ended from the console

Every surface where a password is chosen now asks for it twice: registering, *Change the password*, the first password on a passkey-only account, and the reset. The shared offer fills both fields when it makes one for you, and a mismatch is announced where you are and never reaches the server. After a save, the *Ways in* row says *set today*, confirmed at all three widths.

**Sign out everywhere else** reached the console itself. It reads the count the server owns, disables the zero state rather than hiding it, asks for the password or one of the listed passkeys, maps all five refusals to words, and keeps the session that asked. **1,210 unit tests and a 577-test browser selection** are green across it. In the same stretch, notes written for the people building the product were replaced with copy for the people using it.

## 48 checks, 9,570 unit tests and 1,276 browser tests

The gate grew to **48 checks**, up from 47, and the suites read **9,570 unit tests and 1,276 browser tests** green, up from 9,566 and 1,267 at the last entry. The standing counts, each written by the check that derives it: **55 routes**, 27 of them rate-limited; **1,749 rule citations** resolving by number; documented coverage across **239 modules**; **80 artboards**, each claimed by a specification or exempt with a reason; and Node pinned at 22.23.2.

Rounds 61 and 62 were reconciled against what was built: an unnamed passkey is labelled *Passkey* rather than given an invented device and date, the delivered advice drives the passkey-added and way-in-removed mails, and the privacy page records the map host as settled.

The geocoder behind the map is specified: a private, server-side index over the whole OpenStreetMap planet, a structured query returning a proposal, a person who confirms or moves the pin, continuous replication, limits on what a raw address leaves behind in a log, and no falling back to a public endpoint.

## What comes next

The third sprint opened on the moderation queue, and the two screens round 63 drew next, registering as a person and the two ways out, follow.

If you would rather be told when GymAI opens than keep checking, the waiting list is at [gymai.coach](https://gymai.coach/#top).
