59e1dd4e99
The status-toast bus already typed Info/Success/Warning/Error with configurable per-toast TTL, a 24-bounded queue, and a sync adapter that migrates legacy `app.status_message` writes — what was missing was visibility when several events arrive in quick succession. The footer showed only the most recent and the rest expired silently. * New `App::active_status_toasts(limit)` returns up to `limit` currently active toasts (sticky pinned first, then queued newest-last so a stack reads chronologically). Drains expired toasts off the front as a side effect — same cleanup as the single-toast path. * New `render_toast_stack_overlay` renders up to 2 *additional* toasts as a 1-2 line strip directly above the footer when the queue has 2+ entries. Doesn't touch the layout chunk constraints — it's an absolute-position overlay, so the chat area never reflows when toasts arrive or expire. Older entries render dimmed in the level color so the freshest still draws the eye in the footer line itself. * `TOAST_STACK_MAX_VISIBLE = 3` (footer line + up to 2 overlay rows). Anything beyond that ages out silently as before. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>