Twenty-one commits landed on the working branch since the last entry, across a day and a half. Four are worth writing down: a decision about what GymAI draws at all, the first picture under the colour rule described last time, a check that keeps a decision in one place, and corrections that made the measuring instruments harder to fool.
Every exercise in the catalogue gets a drawing
GymAI needs a drawing for every exercise it can prescribe, and until this week a row with no muscle to point at was refused outright. A yoga posture or a breathing drill produced nothing at all, treated as an incomplete entry rather than a different kind of one.
The owner’s decision reverses that: GymAI is not only a gym. A row whose target is not a muscle is drawn — same figure, same ground, same camera — with no muscle highlight at all. A posture drawn well and without an accent is a correct and complete image, not one missing something. The catalogue now names three kinds of exercise, strength, mobility and posture, and only the first has a muscle to point at.
Measured on the real catalogue: refused rows went from 772 to none, and the drawings the catalogue asks for rose from 16,711 to 17,876. The same change retired a fallback that had 156 rows lighting a region nobody had named.
The first drawing under three named colours
The last entry ended with the shading rule and the redraw that would be its first real test. It ran: one row, the first image this project has produced with its fills named rather than described as strengths.
The model holds them. Two clean populations came back — the prime mover specified at a lightness of 0.339 and rendered at 0.315, the assisting muscle specified at 0.247 and rendered at 0.242.
The useful part is the shape of the error rather than its size. The prime renders low by a consistent 0.024, and its own spread is ±0.0087, three times tighter than the band pencilled in for it. Precise and slightly off is a far better problem than imprecise and centred: a bias can be corrected in one place; noise cannot be corrected at all. Sixty images followed under the same prompt, every accented one carrying the clause that keeps the accent colours on muscle and nothing else.
One place for a decision, and a check that keeps it there
A decision that lives in two files drifts: comparing two copies cannot see a decision that reached neither of them.
The design record and the file the drawing pipeline actually reads are reconciled, and the reconciliation is a gate check rather than a habit. It compares only the fields whose text reaches a prompt, and a deliberate divergence has to be named with the decision that made it one — two ported fields compared and agreeing, one named divergence.
Then the inventory: every place in the repository that holds a copy of a decision, and what each is checked against. It paid before the table was finished. A constant nobody had thought of as a decision was making sixteen correct rows read as sixteen defects; it was fixed by changing the marker’s shape rather than its value. A second copy with no readers was deleted.
Three measurements that agreed with themselves
Three corrections landed on the instruments, all of one family. The first: every gate here measures a value against a threshold, and a run of cases turned out to be ones where the values were fine and the relation between them was not. The rule built from it sets a minimum separation between the two tiers, derived from the tolerance’s own half-width rather than chosen by eye.
The second went the other way. Five rows the instrument had been flagging were correct pictures: their prompts asked for one tier, and one tier is what the model drew. The reading now checks what was requested before judging what came back.
The third is a tolerance wide enough for two bands to touch, tiling the whole interval so that every stray pixel lands inside a valid band. It is now a quarter of that width.
44 checks, 7,458 unit tests and 894 browser tests
The gate every change has to clear grew from 40 checks to 44. The new ones share a shape: the port comparison above, a refusal to run an image queue that no longer matches the file it was built from, and a rule for the exercises whose scene text asked for clothing the global instruction forbids — nine drawings adjusted, 18,028 untouched.
The standing counts, each written by the check that derives it: a code map over 347 marked paths, coverage across 187 modules, 1,306 rule citations resolving by number, and the pinned build of Node at 22.23.2.
The suites read 7,458 unit tests and 894 browser tests green, the unit figure up by 84 since the last entry — assertions this week’s work brought with it rather than a recount.
What comes next
The colour rule now has an instrument that reads relations rather than isolated values, and a queue that checks itself against the record before it runs. Next is the wider drawing pass.
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.