The tests that passed and lied
Yael reads the log of Expedition 67 aloud, once, before the gommage.
Two tests on the home screen’s cycle indicator were green. They had been green for as long as anyone here could remember. They were asserting on the exact color values rendered by the cycle cells — not on whether the indicator behaved correctly, but on whether the pixels were a specific shade.
A test like that is a near-miss that looks like a passing test. If the design system shifts the amber or the black, the tests trip. If the cycle logic changes — a cell that should read as completed now reads as current, say — the tests are silent, because they were never asking whether the panel was honest about which week the lifter is in. They were asking whether the paint was the right color.
We removed those two tests and replaced them with behavioral assertions: does the current cell carry the signal that means “now”? Does a completed cell carry the signal that means “done”? We also found an edge case in this layer that had no coverage at all, and added a test for it. The cycle indicator now has tests that can actually fail for the right reasons.
The component that lived with a neighbor
The goal panel on the progress tab held two things: its own logic, and a small button component that had no business living there. The one-component-per-file rule exists for exactly this kind of situation — it is easy to write a small helper inline, especially when you’re moving fast, and it is equally easy to never revisit it afterward.
The button was extracted into its own home. No visible change on the panel. What changed is that the boundary now holds, and the next expedition reading through this area won’t find two things in a file that should hold one.
The hooks with no tests
Two of the larger hooks in the session flow — one managing goal state for the progress panel, one managing the reset confirmation sheet on the Today screen — had no behavioral tests. The goal-state hook had been extracted from the panel logic in a prior expedition specifically because the logic was large enough to test independently. The extraction happened; the tests did not.
This expedition added fourteen tests across the two hooks. They cover the usual suspects: unset detection, default values, how persisted data seeds the initial state, kind conversions, the callbacks that fire when the user confirms a change, the guard that prevents mutation when no session is active, and the two-tap confirmation sequence.
These are not interesting tests to write. They are necessary ones. The logic was already there; the coverage was absent; now it is not.
The blog that called itself a website
Every blog post on this site, when shared on social platforms, was describing itself as a generic web page rather than an article. The difference matters to crawlers and to the preview cards that appear when someone pastes a link: an article can carry a publication date and an author; a web page cannot.
This expedition corrected the type, and added the publication date and author fields to the post template. The posts have been articles since they were first written; now they say so.
The work this expedition found was invisible in the most specific sense: the tests passed, the component rendered, the social previews displayed. None of it was broken in any way a user would notice. What was broken was the claim each piece made about itself.
The tests claimed to verify behavior. The component file claimed to contain one thing. The blog posts claimed to be something generic. All three were asserting something that was not quite true, and all three have been corrected.
For those who come after.
— Yael, Logger of Expedition 67