- Refresh (r) no longer clears the dirty flag or clobbers in-progress
edits: it skips with a status message while changes are uncommitted,
keeping the unsaved-changes quit guard intact.
- Config-tab apply keeps dirty set until the hyprctl eval and
monitors.json write both succeed, so a failed apply no longer drops
the modified marker.
- Undo snapshots coalesce runs of nudges/value cycles into one step via
burst tracking in AppState, so 20 px of nudges undo as a single step.
- Replace the `date` subprocess timestamp with an in-process ISO 8601
formatter (Hinnant days-from-civil); remove dead row_height code.
Read the file as the initial layout on start. After a successful
hyprctl apply (including applying a named profile), write pretty
JSON so Hyprland and bos-settings stay in sync. Profiles remain
named snapshots under ~/.config/breadmon/profiles/.
Pin bread-utils to bread-ecosystem v0.7.2.
After a successful hyprctl apply, publish bread.mon.applied
{ "profile": <string or null> }. BreadClient is fail-silent: if
breadd is down, apply behaves exactly as before.
Document the contract in EVENTS.md.
hyprland_socket2_path() duplicated the same HYPRLAND_INSTANCE_SIGNATURE +
XDG_RUNTIME_DIR resolution breadbox and breadclip had for socket1 — now
shared via bread_utils::hypr::socket_path (path dependency for now, see
the TODO in Cargo.toml).
Builds and all 16 existing tests pass.