<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pardes.git/src/ninep/pty.zig, branch release-0.24</title>
<subtitle>Pardes</subtitle>
<id>https://git.0x4200.cafe/pardes.git/atom?h=release-0.24</id>
<link rel='self' href='https://git.0x4200.cafe/pardes.git/atom?h=release-0.24'/>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/'/>
<updated>2026-10-01T07:57:43Z</updated>
<entry>
<title>A shell's prompt drawn on the alternate screen is a prompt: a terminal whose program was killed there is no longer busy for ever</title>
<updated>2026-10-01T07:57:43Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T07:57:43Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=0c3cf0628adf9e22270b09d9c451b08ac07f558a'/>
<id>urn:sha1:0c3cf0628adf9e22270b09d9c451b08ac07f558a</id>
<content type='text'>
htop killed with `sig KILL` leaves the emulator on its alternate screen;
bash comes back and draws its prompt there, marks and all, but
promptInputReady refused any prompt on the alternate screen, so
pty/status said busy 1 and pty/run answered a bare `busy` for good.
A prompt mark there now counts. A run sent at such a prompt leaves the
alternate screen in the emulator first, as a reused command pane does,
so its output lands on the primary screen and is read whole, not
`exit 0 cut` with nothing. Busy there with no prompt drawn, and no
program name to give, a run is told `busy alternate screen`.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>pty/run after a clear answers what the command printed from the clear on, whole; cut only when its start really scrolled away</title>
<updated>2026-10-01T05:47:36Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T05:47:36Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=bc4987d2294c9b9cf641b0f9686392611682cc0e'/>
<id>urn:sha1:bc4987d2294c9b9cf641b0f9686392611682cc0e</id>
<content type='text'>
A clear (ED 2, ED 3, a reset) under a running command marked its output
lost, so `clear; ls` answered only "exit 0 cut". The output's start is
now pinned again at the screen's top after the erase: what the command
prints from there is its answer, whole, and a cut is said only when
that start leaves the scrollback.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>winsize refuses fewer than 2 rows, saying so, and its range reads 1x2 to 4096x4096 as the docs say</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T16:52:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=a33fc226c32d97a053bafdb13d6ec3bf8b537f35'/>
<id>urn:sha1:a33fc226c32d97a053bafdb13d6ec3bf8b537f35</id>
<content type='text'>
`winsize 20 1` was taken and quietly raised to 2 rows, so the write
succeeded with a size other than the one asked for. The range refusal
also said "1x1 to 4096x4096", although fs.md says at least 2 rows. One row
is now refused with "invalid winsize: at least 2 rows", and the range
text starts at 1x2. size already refused anything under 20x6 with a text
that names it.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A run whose output a redraw moved above its start answers cut, never an empty whole</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T16:48:53Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=0fb5881520884691c395ef1ce4b9d1d902434bd6'/>
<id>urn:sha1:0fb5881520884691c395ef1ce4b9d1d902434bd6</id>
<content type='text'>
pty/run reads a command's output between its C and D marks. When the
end landed at or before the start, it answered `exit 0` with no output,
as if nothing was printed. That happens when the shell redraws its prompt
over the output, as it can in a window two rows high (winsize 10 2). Now
only equal marks mean nothing was printed. An end at the top-left cell
or above the start says `cut`, since how much was printed is not known.

bash, fish, long lines and 3000-line outputs at winsize 10 2 all came
back whole on this build, so the dogfood's loss could not be reproduced
directly. The test drives the marks into the inverted case the loss
needs.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Terminal.zig is terminal.zig: a file of functions and no fields takes a namespace's lowercase name</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T23:56:14Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=04b047fb366ea2c595708fb62467f690fce4b9ec'/>
<id>urn:sha1:04b047fb366ea2c595708fb62467f690fce4b9ec</id>
<content type='text'>
The last of the deferred renames, now that the tty and theme agents have landed: panes.terminal at its importers, the alias lines in Text.zig and File.zig and panes.zig's own uses following. dump.zig's Terminal struct, a dump record, is not this. The served sources list and docs/design.typ name the new file. test/perf.zig's references change, so the three perf baselines take its new harness id with their numbers as recorded. No behaviour changes.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>pty/run takes one line a run, its answer read before the next</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T19:23:11Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=77c535a4f5acb99e55ad8312063f65cc85a3bcd9'/>
<id>urn:sha1:77c535a4f5acb99e55ad8312063f65cc85a3bcd9</id>
<content type='text'>
Two lines -- in one write, or as bash writes them, a line at a time on one open -- each ran, and the first's answer was lost under the second's. A write with more than one line, or a next line before the last answer is read, is now refused, EINVAL.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>pty/ctl exec on a command pane is refused: a command pane does not restart</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T19:20:57Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=db12ca703dd2acbeee2d7b6acc03dd8a93909755'/>
<id>urn:sha1:db12ca703dd2acbeee2d7b6acc03dd8a93909755</id>
<content type='text'>
exec on a finished command pane ran its line again, silently, with no header, footer or records. It is now refused, EINVAL, invalid exec: a command pane does not restart.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Every catch unreachable, orelse unreachable and syscall assert outside tests is a real refusal or says why it cannot fire</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T17:37:21Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=d678a63e0abf2ba8994225a9f0fd0047fee4025a'/>
<id>urn:sha1:d678a63e0abf2ba8994225a9f0fd0047fee4025a</id>
<content type='text'>
A sweep for round 23's crash: a run's answer (pty/run) was bufPrint'd into 48 bytes with catch unreachable, so a foreground program's long name (macOS gives up to 32 bytes) panicked; it now cuts at the room, keeping its newline, in 96 bytes. The rest were numbers into buffers sized for them, a braille codepoint, pthread calls on the queue's own mutex, and pdf_view's resolved outline entries: each now carries a one-line comment saying why it cannot fire.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A pty/ctl exec that cannot start its shell keeps the one running</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T14:26:42Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=0e6501ce210481c095e6f70a27e7f125f7af3761'/>
<id>urn:sha1:0e6501ce210481c095e6f70a27e7f125f7af3761</id>
<content type='text'>
Each host closed the running shell before it forked the new one, so an exec whose shell failed left the pane with none and later runs answered error shell gone. A shell not there is now refused up front, and every host starts the new shell first, replacing the old only once the close-on-exec pipe says it ran; a failure there is only said (restartFailed).

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>pty/ctl exec fails the write when the shell cannot start; a directory removed under a shell leaves its name</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T12:09:47Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=4d4818f7baf356866d323e4b337a64a3dddd8adb'/>
<id>urn:sha1:4d4818f7baf356866d323e4b337a64a3dddd8adb</id>
<content type='text'>
`exec` on pty/ctl restarted a shell in a directory that was gone, the
write succeeding and the pane dead; and the pane was then renamed
`&lt;dir&gt; (deleted)` from /proc, so a restart failed even once the directory
was back. `exec` is now refused up front, ENOENT, where the directory is
gone; a shell the host cannot start fails the waiting write (late
failure, as a Save's); and a `(deleted)` cwd is no name to take.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
</feed>
