<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pardes.git/src/detached/server.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-01T06:07:15Z</updated>
<entry>
<title>A detached session's pty is sized in pixels too, at the last frontend's cell size or a nominal 8x16 before one attached</title>
<updated>2026-10-01T06:07:15Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T06:06:32Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=f4d6af40a89e65ec63b250bf76d1bd1021777dd8'/>
<id>urn:sha1:f4d6af40a89e65ec63b250bf76d1bd1021777dd8</id>
<content type='text'>
forkShell sized a new pty in pixels (ptyWinsize), but the detached
server's resize set xpixel and ypixel to 0, and a pane is resized as it
is placed, so a program in a detached session with no frontend (yazi)
saw a pty with no pixels and drew no images. CSI 14/16/18 t were
already answered at the nominal 8x16 cell.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A second pardes --detach=NAME while NAME runs says "a session named NAME is already running" and exits 1, with no error trace</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T02:00:16Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=1ab1d412e2768d9fe56a9e97ab60716a6d31063a'/>
<id>urn:sha1:1ab1d412e2768d9fe56a9e97ab60716a6d31063a</id>
<content type='text'>
The second session built its whole core before its bind failed, then
returned an error that main printed with a Zig error-return trace. The
name is now checked first: a live session's socket is said, and the
process exits 1 having made nothing.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A link looked at in a detached session with no frontend attached opens no browser and says so in a msg</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T00:58:22Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=ad7781f065ba3bbda1041d187c53f220da243131'/>
<id>urn:sha1:ad7781f065ba3bbda1041d187c53f220da243131</id>
<content type='text'>
With no frontend to send it to, the link was kept and nothing said,
so a script could not tell the look had landed or why nothing opened.
It still opens nothing on the session's own desktop, and now leaves
"look: &lt;url&gt;: no frontend attached to open it in a browser", logged
as a msg.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>Attach in a detached session is refused with words: bare is wrong #args, a name no session has is "no such session"</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-10-01T00:25:52Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=237071bd4865f0220c35c8c37895c8dba48aed84'/>
<id>urn:sha1:237071bd4865f0220c35c8c37895c8dba48aed84</id>
<content type='text'>
A detached session's core has no frontend loop to take an Attach, so
the word was asked and never answered: a ctl write of it succeeded
and nothing happened. The core now knows it is a detached session's,
and Attach there says why: bare names no session but itself, a name
with no session behind it is said so, and one that is a session is
told to be attached from a frontend.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>A detached session no client watches draws no frames: yes | head -c 50M through pty/run goes from over 30 s to 11 s</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T17:25:52Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=1d0f8cd158bb47941c0187d32422787c92e8feeb'/>
<id>urn:sha1:1d0f8cd158bb47941c0187d32422787c92e8feeb</id>
<content type='text'>
Profiling the 50 MB run showed 70% of its time in draw.render,
recolorAnsi alone 43%, walking cells through PageList.pin. The detached
session drew a frame after every pty read, with no client attached to
see it. A host now says whether anyone watches (Host.VTable.watched). The
detached server answers whether a client is attached, and while none is
the core keeps the frame owed instead of drawing it. A /screen read draws
its own, and a client attaching gets one (hello sets needs_frame).

Debug, 80x24: 10 MB went from 7.36 s to 2.10 s, and 50 MB from over the
30 s client timeout (about 37 s by rate) to 11.08 s. What is left is the
terminal's own parsing and scrollback growth. A session a frontend shows
still draws after every read. Pacing those frames is the next step if
that case matters.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>The hosts' Save, Dump and DumpThemes writes and their shell reaper are host_io's, once, where the tty, the gui and the detached session each had a copy</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-30T01:38:16Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=6f42f51cd652e189408eace598f99ec25b9542f8'/>
<id>urn:sha1:6f42f51cd652e189408eace598f99ec25b9542f8</id>
<content type='text'>
writeFile, writeDump and dumpThemes were byte-for-byte the same in tty.zig, gui.zig and detached/server.zig but for how each reaches its core, and the gui's and the session's reapers the same but for a pid &lt;= 0 against == 0 (a pid is never negative there). Each vtable entry is now a line calling host_io's. ttyTaken, fgName, killJob and ptyResize stay each shell's: they are already one call to host_io each, and what differs is how a shell reaches its pty (an optional with a file, an optional with an fd, a bounds-checked array). macos.zig keeps its copies (no macOS build here to check it). No behaviour changes.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>shader_build.zig is ShaderBuild.zig: a file that is a struct (its fields are the post chain's builds) takes a type's name</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T23:24:56Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=7d2178022e721f3eac023f3e3be56c1bb1e49927'/>
<id>urn:sha1:7d2178022e721f3eac023f3e3be56c1bb1e49927</id>
<content type='text'>
The naming the split agreed on: a file with fields is a type, TitleCase, as Messages.zig and Layer.zig are. Its importers bind it as ShaderBuild; comments and docs/render-pipeline.md name the new file. No behaviour changes.

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>Merge: 9P rounds 18-20 + Recent + renames + render G11-G14, tty track, cursor + faithful themes</title>
<updated>2026-10-01T03:12:16Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T13:45:44Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=95551301ba9807bc907c6d9ff2aa28ded189deb3'/>
<id>urn:sha1:95551301ba9807bc907c6d9ff2aa28ded189deb3</id>
<content type='text'>
</content>
</entry>
</feed>
