From b4f45632debe6b8dc2f44ca6cc1b003d9093ad33 Mon Sep 17 00:00:00 2001 From: Igor Soarez Date: Fri, 23 Oct 2026 18:45:06 +0300 Subject: session groups: list each pane once, save each group once a pane in several sessions (a session group, `new-session -t`, or a linked window) was listed once per session: every agent of a group showed twice in the menu, panel, search, `dingger status`, and the counts. and snapshots saved each session of a group with its own copy of the windows, so restore would have rebuilt them twice and resumed each agent twice on one session file. - a pane keeps its first listing (tmux lists sessions by name) and is attended if the user looks at it through any session of the group. - snapshots keep the first session of each group; the others are not restored. e2e step 19 covers both; the previous binaries fail it. two checks (step 11's and this one) waited for idle after a turn that started from idle, which passed before the turn was even processed: they now wait for working first, and the negative control for group attendance fails as it should. step 18 now waits for the snapshot it later restores from. --- crates/dinggerd/src/watcher.rs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) (limited to 'crates/dinggerd/src/watcher.rs') diff --git a/crates/dinggerd/src/watcher.rs b/crates/dinggerd/src/watcher.rs index 8951623..9198f60 100644 --- a/crates/dinggerd/src/watcher.rs +++ b/crates/dinggerd/src/watcher.rs @@ -267,7 +267,7 @@ impl Watcher { // finished between two ticks is still a completion. let mut alerts = Vec::new(); for observed in observations { - let next = advance(track, observed, pane.attended(), acked, now); + let next = advance(track, observed, pane.attended, acked, now); if next.state != track.state { info!( target = %pane.display_target, @@ -338,7 +338,7 @@ impl Watcher { fn notify(&self, pane: &tmux::Pane, kind: NotificationKind) { // herdr: a blocked pane plays the alert even when the user is looking // at it; a finished pane stays silent when they already are. - let watching = pane.attended(); + let watching = pane.attended; if matches!(kind, NotificationKind::Finished) && watching { return; } -- cgit v1.2.3