From 5492da0ba1d5f1c1cc0a880f82107961627c9ba6 Mon Sep 17 00:00:00 2001 From: Gabriel Schneider Date: Tue, 29 Sep 2026 02:14:54 -0300 Subject: Addresses snap to runes, not grapheme clusters sam and acme address runes; pardes snapped #n, line:col, dot and data's reads to grapheme clusters, so a lone combining mark or a CRLF's \r could not be addressed. #n, line:col, a search's match, dot (both ways) and data now land on rune boundaries (modal.runeStart and friends), and the tty's cell drawing is untouched. The README, fs.md and the skill say so. Co-Authored-By: Claude Opus 5.5 --- .agents/skills/pardes-9p/SKILL.md | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) (limited to '.agents/skills') diff --git a/.agents/skills/pardes-9p/SKILL.md b/.agents/skills/pardes-9p/SKILL.md index 1142efa9..cc129d5c 100644 --- a/.agents/skills/pardes-9p/SKILL.md +++ b/.agents/skills/pardes-9p/SKILL.md @@ -311,7 +311,10 @@ as read acts on its text when the range is empty (the only way for a record at `0 0`). Chord reports need explicit handling. A record is ` \n` and its text may hold newlines: read `n` bytes of text, never up to the next newline (acme counts -runes; pardes counts bytes, as all its offsets are). +runes; pardes counts bytes, as all its offsets are). Every address lands on a +rune boundary, never inside one and never widened to a grapheme cluster: `#n` +or `line:col` inside a rune snaps back to its start, a match covers the runes +it touches, and a combining mark or a CRLF's `\r` is addressable alone. A Restore puts a new editor under every client: the Restore write is answered, then every connection is hung up (their fids name the old editor's panes); dial again, and the new log names the restored panes then -- cgit v1.3