<feed xmlns='http://www.w3.org/2005/Atom'>
<title>pardes.git/src/Layer.zig, branch main</title>
<subtitle>Pardes</subtitle>
<id>https://git.0x4200.cafe/pardes.git/atom?h=main</id>
<link rel='self' href='https://git.0x4200.cafe/pardes.git/atom?h=main'/>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/'/>
<updated>2026-10-01T03:12:17Z</updated>
<entry>
<title>tag_layer.zig folds into Layer.zig, whose TagHit its two functions work on</title>
<updated>2026-10-01T03:12:17Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-29T23:26:51Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=ab0bd455004c0b7374a6183d45e42b85877f370e'/>
<id>urn:sha1:ab0bd455004c0b7374a6183d45e42b85877f370e</id>
<content type='text'>
Two functions (sameCell, columnAt) on Layer.TagHit, 32 lines with their imports, used by edit.zig, mouse.zig and look.zig: they sit with the type now, called Layer.sameCell and Layer.columnAt. docs/design.typ names Layer.zig in its place. No behaviour changes.

Co-Authored-By: Claude Opus 5.5 &lt;noreply@anthropic.com&gt;
</content>
</entry>
<entry>
<title>No panic from a notice wider than its band, or from the rest of its class</title>
<updated>2026-10-01T03:12:15Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-28T19:47:26Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=2663a4d1b3170cb2a4dca5e6f1f3535f44b30e44'/>
<id>urn:sha1:2663a4d1b3170cb2a4dca5e6f1f3535f44b30e44</id>
<content type='text'>
The showcase GUI died in joinNotice on a long shader-error notice: with
the tagline narrower than the body, the band hides more columns (skip) than
a long message has padding (pad), and `skip..@min(pad, ..)` ran backwards.
An audit of draw.zig, Layer.zig, Presentation.zig and animation.zig found
the same class elsewhere, all fixed:
- a multi-row pane tag or header scrolled for its caret's line sliced a
  shorter row past its end (paintPaneTag, renderHeaderLayer);
- a zero-width column tag kept an earlier frame's viewport, and a column
  move's clip took it below zero (now saturating, and the early return
  resets the viewport and caret);
- a tag line past 65535 columns overflowed tag_scroll's u16;
- a hover left over from a bigger window dashed past the grid;
- a border drag over a column that went away, a move preview past a
  shrunken grid, a column-move rail at zero columns;
- Layer.pointAt cast a host's unchecked float metrics (web) to u16;
- Text.insertVerticalCursor read past its lines for a cursor whose text
  changed under it.

Regressions: a test of a notice wider than its band through Msg and
through setMessage (the Post.zig compile-error path), which panics without
the fix; and a monkey over the core at a gui's metrics (random resizes to
a cell, long notices, prompts, multi-row tags, clicks, keys), 400 steps in
the suite, PARDES_FUZZ_SEED/STEPS for longer runs; 60 seeds x 3000 steps
clean.

Shared files touched: none of the list (draw.zig, Layer.zig, Text.zig).
</content>
</entry>
<entry>
<title>One Layer for tags, notices, headers and bodies; a taller tag is one layer of rows; wire v8</title>
<updated>2026-10-01T03:12:15Z</updated>
<author>
<name>Gabriel Schneider</name>
<email>gbrls@0x4200.cafe</email>
</author>
<published>2026-09-28T17:37:29Z</published>
<link rel='alternate' type='text/html' href='https://git.0x4200.cafe/pardes.git/commit/?id=d88e381793c6505bf3f2af43705bd2fa32f55ef6'/>
<id>urn:sha1:d88e381793c6505bf3f2af43705bd2fa32f55ef6</id>
<content type='text'>
src/Layer.zig merges TagLayer and BodyLayer. `rows` (0 = no layer) and a
cursor at {x, y}. A tag of N rows is ONE layer of N grid rows: tagHit answers
the row as `line`, bodyHit keeps its meaning, and the per-line layer bases
(TAG_LINE_LAYER_BASE, HEADER_LINE_LAYER_BASE) are gone, not aliased.

Wire v8, the one bump: tag layers carry rows and cursor y, and the frame
carries the placed region list. v7 and v9 peers are refused in both
directions (server test over both, a new frontend test over both).

web: tag_layer_value 11 = rows, 12 = cursor y; app.mjs lays every row.
macOS: the Zig side compiles against Layer; pardes.h still sees one row
per tag layer (accepted, the macOS shell is ignored for now).

No visual change: snapshot goldens and the 17 GUI goldens byte-identical.

Shared files touched: pardes.zig, Messages.zig, gui.zig, macos.zig,
detached/client.zig, detached/server.zig, detached/wire.zig (plus web.zig,
app.mjs, edit.zig, look.zig). Not touched: mouse.zig, tagline.zig,
colors.zig, tty.zig, dump.zig, exec.zig, host_io.zig, panes.zig.
</content>
</entry>
</feed>
