250faa69fb
RoutinesPane resolved its cron owner from a bare $lastRoster.get() snapshot. BotsHomeView owns the roster fetch, so whenever the pane mounted before that fetch landed (fresh boot ordering, renderer reload resetting the atoms) it captured an empty roster forever: the pane stayed pinned on "Cronjobs are unavailable until this agent appears in the roster." and Create Cronjob silently no-oped until some unrelated atom happened to re-render it (#94483). Subscribe via useValue($lastRoster) instead, matching every other consumer of the shared roster. Scoping intent is unchanged: a complete focused owner without an exact roster row still fails closed rather than routing cron reads/mutations through a stale selection or an unscoped profile name (contracts in routines-selected-bot.test.mjs). The source contract in focused-bot-highlight.test.mjs pinned the bare .get() shape; it now pins the subscription form while keeping the socket-home-atom prohibition that motivated it. Fixes #94483