From 77c7d0bae3b69dc6fccc7cfea7d30aabc1543409 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Mon, 28 Sep 2026 13:35:24 -0300 Subject: With no frontend attached, a detached session's messages go after MessageLinger A message lingers until input dismisses it, and a detached session with nobody attached has no input: its messages, and /screen, kept what was said long ago. The session now marks the core unattended while no client is attached, and the core drops a pane's messages once the newest has been up MessageLinger on the clock, checked as it is stepped or served. A pane's older lines go with its newest rather than each on its own clock; the render pipeline's clock is the place for that. Co-Authored-By: Claude Opus 5.5 --- src/panes.zig | 2 ++ 1 file changed, 2 insertions(+) (limited to 'src/panes.zig') diff --git a/src/panes.zig b/src/panes.zig index d4b336d7..888465f7 100644 --- a/src/panes.zig +++ b/src/panes.zig @@ -168,6 +168,8 @@ pub const Pane = struct { msg_len: u16 = 0, /// Where the newest message line is in its life. msg_life: MessageLife = .{}, + /// When it was said, in monotonic ms (Messages.expireUnattended). + msg_said_ms: i64 = 0, /// The row (among the notice rows) the newest line holds for its life. msg_slot: u8 = 0, /// Earlier message lines still on screen, oldest first, each running its -- cgit v1.3