v0.10.0
Changed
- Dashboard UX-clarity pass. A consistency pass across the whole dashboard so actions explain themselves and outcomes are always visible — prompted by a real confusion where the Notifications "add channel" form looked saved but wasn't. Highlights:
- Disabled buttons now say why they're disabled (hover tooltip) instead of greying out silently.
- Form fields gained required markers and inline hints — e.g. the channel name is now clearly distinct from the bot token.
- Empty lists show guidance instead of blank space.
- Success/error feedback is consistent and self-clearing.
- Notifications "add channel"/"add rule" buttons relabelled, with an empty state.
- Destructive file actions (delete/rename/new file) use proper in-app dialogs instead of the browser's `confirm`/`prompt`.
- Process control buttons no longer silently cancel a pending confirmation after 3 seconds.
- Login re-enables and refocuses after a failed attempt.
Added
- Shared UI primitives for consistent dashboard clarity: `EmptyState`, `StatusMessage`/`useStatus`, and `ConfirmDialog`/`PromptDialog`, plus `disabledReason` on `Button` and `required`/`hint`/`error` on `Field`. A `web/src/components/README.md` documents the conventions for future pages.
No backend or API changes.
Full changelog: v0.9.0...v0.10.0