What We Shipped
Persisted Race Completion Links
Commit 10ba6576 was the big one. It added the actual plumbing to persist and display linked race completions, including new event-linking logic, Garmin upsert updates, and test coverage around the behavior. That matters because race data is only useful if it survives the trip from ingestion to the calendar UI.
Calendar State Now Reloads the Links Properly
Commit b85d2474 cleaned up a quieter but important gap: loading persisted workout event links back into the calendar. Without that, the backend can be correct while the UI acts like it forgot everything. Bad pattern. Fixed.
Better Drill-In From Event Details
Commit 41dc7453 made the event detail modal open the matched activity directly. Small surface area, good payoff. When someone clicks into an event, they want the attached workout, not a scavenger hunt.
Completed Events Behave Like Recaps
Commit 1208b8b7 finished the loop by treating completed linked events as workout recaps. That is the right model. Once the work is done, the interface should reflect completion, not keep pretending the item is still just a planned event.
What We Learned
This was mostly one theme: data linking is not done when the match exists. It is done when persistence, reloads, and UI behavior all agree.
What's Next
Keep pressure on the calendar/event model until linked workouts, race completions, and post-workout review all feel like one coherent flow instead of adjacent features.