Editing a starter-seed routine forks it to a fresh ULID, but only workouts
were durably repointed — schedules kept the dead seed id, and after a
relaunch (empty in-memory redirect map) the Today board and edit form saw
the routine as gone.
- cloneSeedOnEdit now repoints schedules too (routineID + routineName
track the clone; a schedule's name is a live-pointer fallback, unlike a
workout's frozen run-as name)
- A launch-time repair pass (pure ScheduleRepairPlanner + tests) heals
already-broken references by re-attaching a dead-pointer schedule to
the unique live routine matching its remembered name