From 4b7ab8a91defb73006d58abd9f6e7cb3d690d669 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Mon, 28 Sep 2026 16:00:17 -0300 Subject: A 9P request that fills a stillborn scratch's column replaces the scratch before it is answered A pane that joins a column holding only an empty +New takes the column, but that replacement ran at the end of the editor's next update, not of a 9P request: a look answered 19 while index still listed the +New 18, whose del came later. serveFs, a step of its own, now runs it too before answering. Co-Authored-By: Claude Opus 5.5 --- src/pardes.zig | 4 ++++ 1 file changed, 4 insertions(+) (limited to 'src/pardes.zig') diff --git a/src/pardes.zig b/src/pardes.zig index 43d8e94d..12de47fa 100644 --- a/src/pardes.zig +++ b/src/pardes.zig @@ -4999,6 +4999,10 @@ pub const Pardes = struct { look.cancelLookHover(p); const reply = ctlfs.handle(p, req); if (reply.status == .err and (req.op == .write or req.op == .setattr)) ctlfs.events.noteError(p, req, reply); + // A pane that joined a column holding only a stillborn scratch takes + // it now, before the answer: one read of index after the look shows + // the replacement done, and the log has its del with the new. + exec.replaceStillborn(p); // The request was a whole step of its own, so it settles the way a // step does: the cursor and scroll reconciled, the scripted panes // told, and the panes it made announced to /log now rather than at -- cgit v1.3