summaryrefslogtreecommitdiff
path: root/src/Messages.zig
diff options
context:
space:
mode:
authorGabriel Schneider <[email protected]>2026-09-29 03:08:56 -0300
committerGabriel Schneider <[email protected]>2026-10-01 00:12:15 -0300
commitcf2415cc6527cb92898694aae88fd84d54aac28c (patch)
tree115e40da5efd3041754a6c10a2790f3868b14c39 /src/Messages.zig
parent80ed1bf997117a36b9d0e10744de736e84d96e7f (diff)
downloadpardes-cf2415cc6527cb92898694aae88fd84d54aac28c.tar.gz
pardes-cf2415cc6527cb92898694aae88fd84d54aac28c.zip
A failed builtin's err replaces its msg, and (xN) is a running total
A builtin failing a ctl write logged its Verbose announcement, its words as a msg, and the write's err, so the same failure again never repeated the newest record and never collapsed. Its err alone is logged now (the msg is still shown and kept in +Messages). A repeat of a record a follower has read is a new line with the running total, (xN) being N in all. fs.md states both rules. Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to 'src/Messages.zig')
-rw-r--r--src/Messages.zig15
1 files changed, 12 insertions, 3 deletions
diff --git a/src/Messages.zig b/src/Messages.zig
index daf195bb..7970908e 100644
--- a/src/Messages.zig
+++ b/src/Messages.zig
@@ -412,9 +412,8 @@ fn logMessage(p: *Pardes, id: usize, text: []const u8) void {
if (text.len == 0) return;
const serial: u32 = if (p.fs.session_write) 0 else if (id < MAX_PANES) if (p.panes[id]) |pane| pane.serial else 0 else 0;
const kept = text[0..@min(text.len, LoggedMessage.cap)];
- // /log hears every one: a client that retried and failed the same way
- // is waiting on that second line. Only the +Messages view collapses.
- ctlfs.events.noteMessage(p, serial, kept);
+ // /log hears every one (a failure of a ctl write as its err record).
+ if (!p.fs.unlogged) ctlfs.events.noteMessage(p, serial, kept);
if (p.messages.len > 0) {
const last = &p.messages.log[(p.messages.head + limits.message_log - 1) % limits.message_log];
if (last.serial == serial and
@@ -498,6 +497,16 @@ pub fn reportFailure(p: *Pardes, id: usize, text: []const u8) void {
}
p.fs.failure_len = @intCast(n);
}
+ // The write fails with it, and its err record says it: no msg for it,
+ // and no Verbose announcement before that, so the same failure again is
+ // the same record again, counted (events.pushCounting).
+ if (p.fs.no_prompt) {
+ const serial: u32 = if (p.fs.session_write) 0 else if (id < MAX_PANES) if (p.panes[id]) |pane| pane.serial else 0 else 0;
+ ctlfs.events.dropAnnouncement(p, serial, text);
+ p.fs.unlogged = true;
+ defer p.fs.unlogged = false;
+ return setMessage(p, id, text);
+ }
setMessage(p, id, text);
}