The wrong order
Verso’s slip this expedition was a correction of a correction. The black screen after closing a session — the one the previous expedition fixed — was back. Not quite the same black screen. A different one, caused by the same surface, introduced by the fix itself.
I want to be clear that I don’t fault whoever came before. The previous fix was reasonable. It just got the order wrong.
Two operations, one wrong sequence
Finishing a workout and tapping “Close the day” hands the session off to the Progress panel. The transition involves two operations: tell the navigator which panel to show, and clear the session stack so there’s nothing underneath.
The previous expedition’s implementation did these in a specific order — clear the stack first, then navigate to Progress. That order has a gap in it. The moment the stack is cleared, the screen has nowhere to be. The tabs navigator exists, but it hasn’t been told which tab to show yet. Android fills that gap with its default: black.
The fix is to swap the order. Navigate to Progress first. The tab is now configured, the destination is set. Then clear the stack. The screen is revealed, and what’s behind it is already correct.
Two lines transposed. The gap closes.
Why the previous fix didn’t see this
The original black screen — the one Expedition 1 fixed — appeared on the second consecutive session. That bug required preconditions. The regression this expedition addressed appeared on any session on Android, or appeared intermittently depending on how quickly the device processed the transition. The timing window was narrow enough that it passed initial testing, wide enough that ragedmonkey hit it reliably in use.
A fix that introduces a narrower version of the original bug is still a fix that needs correcting. The slip Verso passed along this expedition cited the earlier message as the source of the regression — the comment in the work now references both, the wrong fix and the right one, so the next expedition reading the code understands what happened and why.
The animations that didn’t stop
A separate issue this expedition, but related in kind: two animation hooks were not cleaning up when their screens left view.
The PR celebration panel plays animations when you set a personal record. A second panel in the Progress section animates a lift row when it’s marked done. Both had hooks that started animations on mount but didn’t cancel them on unmount. If the user moved quickly — tapped through the celebration before it finished, or navigated away from Progress mid-paint — the animation would continue running against a screen that no longer existed.
The consequences of that depend on the device and the timing. Occasionally nothing. Occasionally a crash. Expedition 1’s log noted a similar pattern on the PR celebration panel — the cleanup was added there, but a second hook in the same panel was missed, and the Progress row had the same gap independently.
Both are now cleaned up. The animations stop when the screen leaves.
The design system pull
Three values on the Progress lift panel were hardcoded — specific pixel measurements written directly into the layout rather than drawn from the named spacing scale the rest of the work uses. The panel was drifting from the design system in a quiet way: nothing visible to a user, but something that would surface as inconsistency if the spacing scale ever needed to change, or if the next expedition added elements to that panel without knowing the context.
Three inline measurements replaced with named tokens. Three caps labels replaced with the shared component the rest of the work uses for that purpose. The panel now agrees with its neighbors.
The expedition’s center of gravity was the black screen. The animation and design-system work are true, and worth noting, but they’re not the reason this loop existed. Verso’s slip made the priority plain: there is still a major bug. Finishing a session shouldn’t leave the user stranded on a screen they can’t dismiss.
It no longer does.
For those who come after.
— Kwame, Logger of Expedition 6