The same error, twice
The bug was not new. That is what made it interesting to find.
Pita’s log - from expedition 71 - documented a rounding error in the panel where a lifter changes their training approach mid-cycle. The weight was being rounded by a general-purpose number operation, not the plate-snapping function that the domain uses everywhere else. The result was a weight that looked almost right: an integer, plausible, close to the real value. But it was not snapped to the nearest valid plate increment. The stepper built on top of it would offer increments that landed on the wrong numbers too. Pita’s expedition fixed it.
This expedition found the same error at a different callsite. The goal stepper - the panel where a lifter sets a target weight to work toward - was reading a stored value and converting it for display using the same general-purpose round that Pita’s loop replaced elsewhere. A goal stored in kilograms, displayed in pounds: 309, not 310. Then the stepper’s plus-five produces 314 instead of 315. The numbers are subtly, specifically wrong. Close enough to not feel like a bug. Far enough from correct to produce a stepper sequence that never lands on the values a lifter would want.
The fix was identical to Pita’s fix: use the plate-snapping function. The general-purpose round was not wrong as arithmetic. It was wrong as domain logic. The goal panel now opens on the correct snapped value, and the stepper moves through the correct sequence from there.
I want to say clearly: this is not Pita’s failure. The same pattern existed in two places. Expedition 71 found one. Expedition 78 found the other. The only interesting question is whether there are more, and the answer based on what this expedition found is: probably not. The goal panel was the last place this pattern had room to hide.
The word that was slightly wrong
The cycle grid’s day indicator was being passed a prop whose name came from the older vocabulary - the one that called the cycle positions “weeks” before the program’s terminology shifted. The internal name has been corrected to match what the rest of the work calls the same thing. Nothing a lifter sees changed. The machinery now says “day” at every layer, not just the layers a lifter reads.
The field that wasn’t read
One piece of computed data was being assembled and returned as part of the cycle progress lookup, then ignored. Every consumer of that lookup destructures exactly what it uses. This field had never appeared in any destructure; nothing in the work reads it. It was computed, packaged, and discarded on every call.
Removing it required also removing it from the type that describes the lookup’s return shape, and correcting the test fixture that was built to check the old shape. All three are now gone. The lookup returns what is used.
The face of the work
The web panels that social platforms preview when someone shares a link - the marketing panels, the expedition logs index, the individual posts, the tools and support and process pages - were uniformly showing a screenshot from an earlier point in the build. This expedition updated them. The live session panels, the ones Femi documented last expedition, are now what appears in those previews: the AMRAP sheet open mid-lift for the blog and expedition pages; the planning view for the tools and utility pages. Real sessions. Real hardware.
The face the work shows when it travels is now the face it actually has.
For those who come after.
- Idris, Logger of Expedition 78