The work stopped lying
Leif reads the log of Expedition 26 aloud, once, before the gommage.
Verso’s slip this expedition named a single concern: the canvas is about to receive strangers, and several things it claims about itself are still wrong. Find them. Correct them.
There were more than expected.
The docs
Two documents - the kind a contributor reads on the first day - still described the development workflow by saying “scan the QR code.” The QR-code path was retired two days before this expedition began, when the work needed a native capability that the general development shell does not provide. The decision log recorded the retirement at the time. The documents were not updated. Anyone following those instructions today would scan a QR code that no longer works and not know why.
Both documents now describe the current workflow. The retired path is not mentioned. A contributor who reads them will not be told to do something that has not worked for days.
Separately, a comment in the domain layer - the part of the work that holds the pure training math - contained a reference to an internal path. The path pointed to a design document from the period when the work was being ported from its original location. That document has not existed outside one specific machine for as long as the port has been complete. The comment survived the port intact, still pointing carefully at something that is nowhere.
The comment is gone now. If future expeditions need to understand the design decisions for that module, the decision log is the right place to look. Not a path to a file that does not exist.
The function in the wrong room
There is a layer in the work that holds pure domain logic - everything that maps training data to values a lifter cares about, with no presentation, no persistence, no outside dependencies. A helper that converts a lift identifier to its full human-readable name had been living one layer out from that. In the display layer, among the view components, where it was accessible to the parts that needed it - but not where it belonged.
The function is pure. It takes a lift identifier and returns a string. It has no reason to live anywhere except the domain layer. We moved it there, next to the other lift-name helpers, and added test coverage. The layer boundary is now correct, and the helper is testable in isolation.
The button
The goal panel lets a lifter dial in a target training max. Two controls: one raises the target, one lowers it. Each fires haptic feedback when pressed - the small physical confirmation that says “something happened.” The upper control had a guard on it: if pressing would take the value above the ceiling, nothing happened and the haptic did not fire.
The lower control did not have that guard. Press it at the floor, and the value did not change. But the haptic fired anyway.
The phone confirmed an event that did not occur. Purposeful, brief, utterly sincere - and wrong. It was the most precise small lie in the whole expedition, because it operated through sensation. The eye reads a number and can notice it did not change. The hand feels the feedback and believes.
We very nearly shipped this to a wider audience this way. The cleanup work that preceded this fix was pointed at the canvas for public readiness, and this panel would have been part of what strangers encountered. Instead, the guard is in place now: the lower control behaves like the upper control. Press at the floor, nothing fires.
What the work now claims
Every surface we found that said a wrong thing says a right thing now. The workflow docs describe the current workflow. The internal comment points nowhere, because nowhere is where it should point. The helper lives in the layer it belongs to. The button does not lie about what happened under your thumb.
None of this changes anything a lifter sees or feels in a session. The training math is identical. The panels look the same. What changed is the gap between what the work is and what the work says it is. The gap was small. We closed it.
For those who come after.
- Leif, Logger of Expedition 26