warden 0.3.0
warden 0.3.0 — session kill, login-shell terminals, and DPI/robustness fixes.
Features
kill— a companion session-kill command. New cascading optional config field (global → window → tab,""opts a level out). Triggered by a two-step confirm on a tab's cyan presence dot: a full-row red confirmation with destructive iconography (✓/✗, no timeout, disarms on ⌘W). Runs fire-and-forget, severs the session without unloading warden's terminal surface (you're left at a live shell prompt), then re-probes to drop the dot.- Default shell is now your login shell, run as login — warden behaves like a terminal. When no
shellis set, warden spawns$SHELL -l(absolute path from launchd), so GUI-launched tabs find their shell without the minimal-PATH trap. Login PATH is imported at startup. - Hot-reloaded tab metadata applied in place. A kept tab's
group/probe/killchange is now detected (set_meta) and applied live — sidebar re-section, new probe/kill picked up on the next poll — without respawning the terminal.
Fixes
- Terminal no longer mis-scaled after a DPI/monitor change. The render layer's
contentsScalenow tracks the backing scale (the deadrespawn_on_scale_changepath was removed in favour of the real fix). Verified on hardware. - A surface that fails to spawn degrades to a cold tab instead of panicking the whole app out of startup; the reason surfaces in the chrome error banner.
- Window-state is scoped per config, so the example/test config (
just run) no longer inherits your production window sizes/positions.
Docs
- README/CLAUDE.md reconciled (sign+notarize when Apple env present; probe/kill PATH guidance); CLAUDE.md footguns trimmed of past-facing narration.
Full changelog: v0.2.1...v0.3.0