v0.51.10 — 2-PR batch (cron profile isolation + profile switch during streams)
🐛 Fixed
- #1741 by @Michaelyklam — Isolate in-process cron scheduler profiles. Closes #1575. Defensive future-architectural fix: a future in-process scheduler tick path would otherwise run jobs with whatever process-global profile happened to be active. New
install_cron_scheduler_profile_isolation()wrapscron.scheduler.run_job()to enter the job's persisted profile context. Manual/api/crons/runflow is unchanged. - #1742 by @Michaelyklam — Allow profile switching during active streams. Closes #1700. Per-client cookie/thread-local profile switches (
process_wide=False) are no longer blocked by an active stream — only true process-global mutations remain blocked. Frontend creates a fresh session for the target profile rather than retagging the running one.
🛠 In-stage absorbed Opus follow-up
- i18n cleanup: removed 9 orphaned
profiles_busy_switchkeys (the toast was deleted by #1742; entries had no remaining consumer).
🧪 Tests
4590 → 4596 passing (+6 regression tests). 0 regressions.
✅ Pre-release verification
- Both PRs CI-green + rebased onto current
origin/masterwith sibling-rebase onapi/profiles.py(different regions). - All JS files syntax-clean (
node -c). - Browser API sanity (11/11 endpoints) — all pass.
- Startup-hook verification:
install_cron_scheduler_profile_isolation()is idempotent and crash-free. - Opus advisor: SHIP both, 5/5 verification clean, 0 MUST-FIX, 1 SHOULD-FIX absorbed (orphaned i18n keys).
🙏 Closes
- #1575 (in-process cron scheduler profile isolation)
- #1700 (profile switch blocked during active streams)
Full Changelog: v0.51.9...v0.51.10