- auth: when a background poll or save returns 401 (session expired
while the UI is still open), the api() helpers now prompt for the
password instead of letting the save fail silently. Concurrent 401s
collapse onto a single dialog via a shared reauthPromise, and each
caller retries its original request once after login. /api/auth/* is
excluded from the retry path. Extracts promptLogin() in app.js and
exposes it as window._reauth so both the core util.js api() and the
plugin-SDK hyprcrd.js api() can share the flow.
- tests: the "open-switches-bucket" detail test assumed buckets[0] was
a plain top-level bucket, but the bar renders super-bucket parents
with data-bucket-super and hides child buckets entirely, so the
.bucket-tab.active[data-bucket] selector found nothing on setups
with nested layouts. Test now picks two plain top-level buckets or
skips.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>