---
title: "Dev log #2: named colours, nine sections, and a check that bit twice"
description: "Sixty commits since the last entry: the muscle shading became three named colours, nine sections lifted a hold on the screen specifications, and a new check refused two commits on its first afternoon."
url: https://news.gymai.coach/dev-log-2-named-colours-nine-sections/
date: 2026-09-09
modified: 2026-09-09
author: "GymAI"
image: https://news.gymai.coach/wp-content/uploads/2026/09/dev-log-2-named-colours-nine-sections-2k-scaled.jpg
categories: ["Dev log"]
type: post
lang: en
---

# Dev log #2: named colours, nine sections, and a check that bit twice

Sixty commits landed on the working branch since the last entry, most of them inside a single day. Three of them are worth writing down: a design decision that turned a judgement into a count, nine sections that lifted a hold on the screen specifications, and a check that started refusing commits on the afternoon it was built.

## The muscle shading is three named colours now

GymAI needs a drawing for every exercise it can prescribe, and each drawing has to mark which muscle is doing the work. Until this week that mark was specified as a strength: the prime mover at full, the assisting muscle at about half. A strength is a proportion of whatever colour sits underneath it, which means the same instruction produces a different picture on a different background.

Round thirteen of the design handoff replaced the proportions with three fixed colours — a flat neutral slate for the body, one value for the prime mover, a lighter tint of it for the assisting muscle. Every figure in that round was re-derived on this side rather than accepted. The lightness gaps between the three came back at **0.141 and 0.175**, against the design’s 0.141 and 0.174, and the body value sits outside the accent window by construction, so an arm can never be read as a lit muscle.

The part that matters for the build is quieter. Three fixed colours in the body of a drawing are three expected values, and three expected values is a count rather than a judgement. A count is something a machine can check on every image in a catalogue that runs to thousands. An instrument that reads the lightness bands straight out of a finished image was written the same week, so the check has something to measure with.

## 7,374 unit tests and 894 browser tests

Every change still has to clear one gate before it is allowed to exist, and the gate now counts **40 checks**. Among them: a code map over 347 marked paths, coverage across 187 modules, 61 routes counted against what the documentation claims, an equipment catalogue of 204 rows where every row names a thing a gym can actually own, and the pinned build of Node the whole project runs on.

The suites read **7,374 unit tests and 894 browser tests** green. Both numbers moved this week because the work added assertions to them rather than because anything was recounted: the delivery check, the colour measurements and the new requirement sections each brought their own. The browser figure is the one the gate wrote into its own log during the run that produced it, which is the only version of that number worth quoting.

## Nine sections, and 1,311 citations that still resolve

Nine new sections landed in four screen specifications: calisthenics, the training loop, the gym console and progress. They were appended rather than inserted. **1,311 rule citations** across the documentation resolve by number, and renumbering to slot a section into the middle would have invalidated every citation into those four files in exchange for a tidier running order.

Four amendments were applied in place, in the requirement a reader actually arrives at, rather than only in the decision log where nobody reading the specification would meet them. One superseded requirement is struck through and marked withdrawn, with the replacement named. Another finally has the destination it had been describing a control for.

The effect is that nine drawn frames that were waiting on a written section now have one, and the hold that put on the round is lifted. The count as it stands: **67 specifications**, 41 of them screen specifications, and **79 artboards**, each claimed by a specification or exempted with a written reason.

## A check that fired twice on its first afternoon

A design delivery arrives as a bundle of several hundred files, and it has to be read into the repository deliberately, file by file, rather than copied in. A new check now refuses a commit while an unread bundle is sitting on disk, and it recognises one by signature rather than by location, because three deliveries have arrived under three different paths.

- It fired **twice on its first afternoon**, both times correctly, each time on a bundle that had landed mid-session. Clearing each one cost a single command.
- It was written red first, against a stub, so that the first green run meant something.
- The handoff directory now carries an index generated from the directory itself — **34 documents**, counted rather than remembered.

That index paid for itself in the minute it ran. It surfaced a decision recorded the day before which turned out to answer, in full, a question two independent readers had just spent an afternoon reaching for. The record was right and both accounts of it were behind — the second time in a day that the written artefact beat the summary of it.

## What comes next

The reference drawing gets redrawn under the three named colours and measured against them, which is the first real test of the new rule. After that, the next slices of the first sprint.

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