diff options
| author | Gabriel Schneider <[email protected]> | 2026-09-29 01:50:05 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-10-01 00:12:15 -0300 |
| commit | b29de1d4e78466a15f5d3dc0916410cba1445c5f (patch) | |
| tree | 27c606018a7084a3636a974064d1205d64f31c86 /.agents | |
| parent | 5b11fc35b961eb03c8816bf957bbf8e27a22ae3e (diff) | |
| download | pardes-b29de1d4e78466a15f5d3dc0916410cba1445c5f.tar.gz pardes-b29de1d4e78466a15f5d3dc0916410cba1445c5f.zip | |
The docs say the errno that fits, Joincol's order, the pane cap, the paste's second Enter, a follower across Restore, and why wc waits
Dogfood round 9's doc findings: ENOENT for a missing pane, file or dump is
right, so the skill says EIO or an errno that fits; Joincol folds into the
column on the right, the joined panes below its own; the skill gives the
64-pane cap; Python's second \r is needed only when the paste lacks a
trailing newline; a log follower loses nothing within a session, but a
Restore hangs it up; and a tag word gets no file argument, as in acme, so
bare wc waits on stdin (pardes has no $%).
Co-Authored-By: Claude Opus 5.5 <[email protected]>
Diffstat (limited to '.agents')
| -rw-r--r-- | .agents/skills/pardes-9p/SKILL.md | 18 |
1 files changed, 11 insertions, 7 deletions
diff --git a/.agents/skills/pardes-9p/SKILL.md b/.agents/skills/pardes-9p/SKILL.md index 01be232d..9ec46084 100644 --- a/.agents/skills/pardes-9p/SKILL.md +++ b/.agents/skills/pardes-9p/SKILL.md @@ -66,7 +66,8 @@ $m/log recent events, then EOF: new|del|rename|save <serial> <name>, msg run <serial> <line>, exit <serial> <N|?>, send <from> <to> <repl-id>, dump|restore <path>, err <serial|-> <file>: <why> (exec 3<>$m/log; echo follow >&3; cat <&3 waits for new ones; tail -f does not; - while read -r line <&3; do ...; done loses nothing) + while read -r line <&3; do ...; done loses nothing within a session: a Restore + hangs every connection up, so dial again, and restart a 9ns mount) $m/screen the rendered screen as JSON, frozen per open $m/listeners this session's dial addresses $m/focus the serial of the pane with the keyboard (empty while a column/workspace tag has it); @@ -79,7 +80,8 @@ $m/ctl the settings, one a line as a write takes them; write a setting or word again DISCARDS that text -- not a retry, unlike lock's `file in use`; Kill stops a command pane's whole line, `&` jobs included; of a line typed into a shell only the foreground job, and the shell decides the rest (of `sleep 30; echo done` - fish runs the echo, bash abandons the line); Joincol needs a column to the right of the keyboard's); + fish runs the echo, bash abandons the line); Joincol folds the keyboard's column into the one + on its right, its panes going below that column's own, in order, and needs such a column); a pane's builtins (Del, Save f, Collapse, which folds that pane, and the column word Delcol, which closes that pane's column) go to $m/pane/<n>/ctl $m/commands every builtin: `Word`, `Word arg`, then `root` or `pane` (which ctl takes it) @@ -91,7 +93,8 @@ $m/col/<serial>/ctl Delcol, Joincol, New, Tty on that column; col/<serial>/exec $m/pane/new open it to make a pane (a scratch named <dir>/+New), read names it; it goes in the ACTIVE column (the one last typed or clicked in, or Newcol's), filling it if empty, else taking the bottom half of its last pane (ctl `Placement pardes`: the old rules); - rmdir $m/pane/<n> closes it; a column's last pane leaves the column EMPTY + a session holds 64 panes (16 on the board): past that, every route that opens one + fails with `no pane slots: 64 max`; rmdir $m/pane/<n> closes it; a column's last pane leaves the column EMPTY (focus reads empty, the log says only del), and the session's LAST pane QUITS it $m/pane/<n>/errors write-only: text appended to the +Errors pane of the pane's directory $m/os/ the host filesystem @@ -158,9 +161,10 @@ REPLs bound for a language an exec asks which, logged `ask <serial> repl a b` `echo 'answer a' > $m/pane/<serial>/ctl`, or `answer -` to send nothing (the log says `answer <serial> a|-`). Multi-line code written to `pty/data` should be a bracketed paste, `\e[200~<code>\e[201~`, then, in a separate write once the REPL has echoed the paste (Python 3.13+ -takes a `\r` read with the paste as part of it, even for one line), `\r`, -and a second `\r` when the code's last line is indented (a `def` or `for` -body): one Enter leaves such a block open. Sent line by line, a blank line ends a Python block, and Python +takes a `\r` read with the paste as part of it, even for one line), `\r`. +End the pasted code with a newline and that one `\r` runs it; without one, a +code whose last line is indented (a `def` or `for` body) needs a second +`\r`, as one Enter leaves such a block open. Sent line by line, a blank line ends a Python block, and Python 3.14's REPL auto-indents each line it is typed. Every refused 9P write adds an `err <serial|-> <file>: <why>` record to `$m/log`; through a mount the write itself only says `Invalid argument`. @@ -255,7 +259,7 @@ back every setting in the syntax it takes. A ctl write is checked whole first and refused as `unknown control message "X"` (EINVAL) and the like, a required argument missing included (`wrong #args ... "Mount"`); then a line whose builtin reports an error fails the write with that error and the line -(EIO), after the lines before it took effect. A `Save` on a scratch fails +(EIO, or an errno that fits: ENOENT for a missing pane, file or dump), after the lines before it took effect. A `Save` on a scratch fails rather than prompt. The lock binds only clients that take it, and is held by the open that wrote it, so a shell holds an fd across the edit: `exec 3>$pane/ctl; echo lock >&3; ...; exec 3>&-`. |
