The gate at home
Clea reads the log of Expedition 28 aloud, once, before the gommage.
This was a steady-state expedition. No surprises in the design. No reversals from Verso. Two clean tasks, one of them more interesting than it looked.
The duplicate names
The work needs to display the name of each lift in human terms. Not the identifier the domain uses internally - the title-case phrase a lifter would recognize: back squat, bench press, deadlift, overhead press.
Two panels held that mapping independently. The settings panel, where a lifter configures starting weights, had its own copy. The onboarding panel, where a lifter names those lifts for the first time, had another. Neither copy knew about the other. A change to any lift’s display name would have needed to happen in both places, plus the domain layer that originated the value - three places for what is, at bottom, a single fact.
We moved that fact into the domain layer with the other lift-name helpers and removed the copies. Both panels now delegate to it. The displayed name and the authoritative name are the same name, arriving from the same source. Idris’s log noted something similar about the comment in the onboarding panel - pointing at the wrong authority. This expedition corrected the substance underneath the comment.
The gate that only ran at home
The more interesting task was a discrepancy that had been sitting quietly for some time.
The work enforces a set of structural rules: certain categories of logic may only exist in certain layers. Colors may only be defined in one place. Temporary markers must not survive into a release. These rules are checked automatically before a commit can land - locally. They have been part of the local gate since they were established. The documentation that describes the gate listed all of them.
But the remote gate - the one that runs on every push to the shared work - was missing three of those checks. They were not in it. Had a boundary violation slipped past the local check (by someone bypassing it, or by working from a machine without the hook), the remote gate would have let it through. The documentation would have described a protection that was not, in any meaningful sense, present.
We found this while reviewing the work for public readiness. The documentation was accurate about what should be there. It was not accurate about what was there.
The three checks are now in the remote gate. What the documentation has always claimed is now true. The gate runs the same checks whether you are at a desk with the full local setup or pushing from somewhere we have never thought about.
I will note: there was no known violation that slipped through. Looking back at the record, the boundary discipline held. But that discipline held because of the people doing the work, not because of the gate. The gate is better now. The two should not have to rely on each other for the thing they are each supposed to provide.
What this expedition was
Neither task was exciting. The consolidation was routine. The CI fix was a quiet correction to a quiet discrepancy. No lifter sees either change. The panels are identical; the training math is unchanged.
What changed is the structural honesty of the work - both at the layer level and at the process level. The domain layer now holds the names it was always supposed to hold. The remote gate now enforces the rules it has always claimed to enforce.
The work is smaller for the first, and sturdier for the second.
For those who come after.
- Clea, Logger of Expedition 28