summaryrefslogtreecommitdiff
path: root/test
Commit message (Collapse)AuthorAge
* Round 40's doc findings: tutor 3.1 comes back with Esc from +Help, 5.2 ↵Gabriel Schneider59 min.
| | | | | | sweeps an anchored regex to Part 7's heading, 6.1 selects a name with m i W, 1.3 says a new terminal lists its directory; the guide's search row says n walks +Search and Enter moves the pane; a pane ctl's line has no newline, as acme's; a TODO(round40) on editing a tag's path Co-Authored-By: Claude Opus 5.5 <[email protected]>
* An Edit filter that can never be reaped no longer holds the Edit's answer: ↵Gabriel Schneider59 min.
| | | | | | at the limit the command's group is killed and reaped off the answer's path, the stdin writer owning its input, so a filter writing its own ctl with > or >> answers EIO at 10 s instead of hanging; a running Edit keeps its own copies of the names it reports, and the panes it changes refuse Del, delete, rmdir, Undo, Redo, Get and Zerox (busy, EBUSY); e and r say unreadable files in Get's words; the reference says both sides of a filter's own ctl write need <> Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A name typed into the tag's path survives Esc, pending, as any edit does: ↵Gabriel Schneider68 min.
| | | | | | the next Enter renames the buffer, a second Esc drops the draft, and a stray key meanwhile changes nothing but says so Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Insert on a terminal's text says it edits a copy, run with Tab or B2, that ↵Gabriel Schneider68 min.
| | | | | | the program's next drawing replaces, and that Ctrl-b types to the program Co-Authored-By: Claude Opus 5.5 <[email protected]>
* pardes --wait with no FILE says it needs one; --detach over a name another ↵Gabriel Schneider106 min.
| | | | | | session's socket holds (a plain session is named by its pid) says so plainly, and any other failure of it in words, never a Zig error trace Co-Authored-By: Claude Opus 5.5 <[email protected]>
* cloud9 re-pinned at fe9772b, whose 9ns invalidates a dead mount's entry off ↵Gabriel Schneider112 min.
| | | | | | the serving thread; selfmount kills a session under a burst of reads of it through the registry mount and checks every read returns Co-Authored-By: Claude Opus 5.5 <[email protected]>
* cloud9 re-pinned at e66b2cf, whose 9ns opens files with ↵Gabriel Schneider3 hours
| | | | | | FOPEN_PARALLEL_DIRECT_WRITES: an Edit filter writing, through a mount, the ctl its Edit came by (without truncating it) answers at once, not after 10 s; selfmount checks it Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Edit's w to a file changed on disk since read is refused once, as Save is (w ↵Gabriel Schneider4 hours
| | | | | | again to overwrite), the rest of an X/'/w written and the refused named; Edit filters get a pane command's environment ($PARDES_MOUNT, $PARDES_9P, $PARDES_PID, $winid); an Edit with no commands runs beside one whose commands run unless it touches a file that one changes, refused busy (EBUSY) as is a second Edit with commands Co-Authored-By: Claude Opus 5.5 <[email protected]>
* An Edit's held write: < | > commands no longer block their 9P connection ↵Gabriel Schneider5 hours
| | | | | | (answered like a held read, so a status read or a filter reading the session's own mount runs beside it), a Tflush or hang-up of the write kills the commands' process groups and changes nothing; e loads by Get's way (asked once, clean after, undo puts the name back); ~ in e r w f B; B checks every name first; an Edit that runs commands is a write of its own, refused up front with other lines; Edit's +Errors output keeps the keyboard where it was; X goes in pane order; a refused write open says its errno; the reference's Coming from acme rows say what Get file's undo, failure and directory refusal, Putall's answer, Zerox across Dump and Incl's directories now do Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A refused Putall is answered once the other saves have landed; a bad Tab ↵Gabriel Schneider5 hours
| | | | | | width is invalid (EINVAL), from a pane's exec too; Incl refuses a relative or missing directory and takes - only alone Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Edit runs acme's file and shell commands: < | > through the session's Shell ↵Gabriel Schneider7 hours
| | | | | | off the loop (one undo step, a failure changes nothing, its stderr in +Errors, a 9P write answered when done), X and Y over the open text panes, b B D e r f w and the "file" address; checked against sam -d, and the reference's Edit section and Coming from acme row say so Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Zerox opens a second pane on a file pane's buffer: one text, undo and ↵Gabriel Schneider7 hours
| | | | | | | | | | | | | | | | unsaved state, a scroll and a cursor each; an edit in either is spliced into both at File.setContentSpan, O(the edit) more, and what a Save, a get, the disk watch or a rename changes on one is copied to the rest after each step Twins share the content buffer, the History and, while it is one, the line index; the other twin's cursor and scroll move past the splice as acme moves a clone's q0. Del of one twin asks nothing while another holds the text, Exit lists the text once, and a closed twin keeps a copy of its own until it is torn down. Both are in the index, each its serial, one name. An event reader on one hears no edit made through another (first cut). A dump keeps the twins as two panes on the file, not linked again. perf: edit-twin, typing beside a twin of the 50k-line file, gated within 3x of edit-char in the same run; the three baselines re-recorded for it. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Incl dir ... adds directories a look at a name found nowhere else is tried ↵Gabriel Schneider7 hours
| | | | | | in, as acme's includename, <stdio.h> too; bare Incl lists them and Incl - empties them; the session's, seeded with /usr/include and /usr/local/include, kept in a dump; Indent's refusal says Enter keeps the indent always Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Enter, o and O give the new line the old one's indent as it is, tabs and ↵Gabriel Schneider7 hours
| | | | | | | | | all, as acme's autoindent does; a level more after an opening delimiter is a tab where the indent is tabs The indent was rebuilt as spaces, partial levels dropped, so a tab-indented line went on with spaces (or with one space, after Enter). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at a directory opens a pane listing it, as acme's directory window: ↵Gabriel Schneider9 hours
| | | | | | named dir/, its entries in acme's columns (bytewise, dotfiles kept, a directory's marked /), a look at an entry from there, Get or a look again reads it again, never dirty, Save refused; DirLook terminal keeps ls in a terminal Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Two scripting clips: edit-via-ctl (an Edit written to a pane's ctl from a ↵Gabriel Schneider9 hours
| | | | | | | | | | | shell, then one Undo) and wait-editor (git commit with EDITOR='pardes --wait', its message a pane, Save and Del) record_demos.py: Esc goes to the test window as CSI u (ESC [27u): a bare ESC byte waited in the stdin feed's parser and joined the next mouse event, which then typed itself into the pane. clips.toml lists both with landing = false. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The tutor opens with its title alone, and the slogan lines go: setup's ↵Gabriel Schneider11 hours
| | | | | | opening, the guide's and reference's "carry" framings, the tutor's "Two carry the rest" Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Three guide clips: columns (Newcol, a look into the new column, Alt-c), ↵Gabriel Schneider11 hours
| | | | | | | | | | search (Grep, n and N over +Search, a look at a hit) and where-commands-run (pwd from the column's tag and from a file's) record_demos.py: a clip may set its own window size (columns is 80x26, scaled to 960 wide), and col_tag_px finds a word in a column's tag. clips.toml lists the three with landing = false. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The guide answers a first session: n walks a build's errors from its command ↵Gabriel Schneider11 hours
| | | | | | pane, a finished one is already normal, why make wants the project root, opening beside, a builtin's argument by mouse, 12G, and SPC ? is Help everywhere; the tutor's tagline and button names match the site, and the cheatsheet's tree gains data, look and exec Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A chords clip for the guide: B1 sweeps and stays down, B2 cuts, B3 pastes, ↵Gabriel Schneider13 hours
| | | | | | | | | | | | B2 then B3 copies, every held button drawn record_demos.py chords: a small notes file; each chord glides, stops, presses B1 and keeps it down while B2 or B3 clicks. The pointer wears a ring per button down and a mouse whose held buttons are lit, named "left held + middle-click" and the like; B1 is drawn blue. clips.toml lists it with landing = false, for the guide to embed. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* An image's or a terminal's tag says petscii:on when it is drawn as glyph ↵Gabriel Schneider13 hours
| | | | | | | | art, as it always is with no graphics; Petscii on|off still chooses for when there are The images and tagbottomimage goldens are re-recorded for the word. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The hero clip middle-clicks make in the README's text, not a word added to ↵Gabriel Schneider13 hours
| | | | | | its tag: text in a document runs as a tag word does Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The terminal casts pin the orchard theme and show all four syntax colours, ↵Gabriel Schneider13 hours
| | | | | | | | | | | | and the petscii cast opens its pictures on camera from a README pardes colours four syntax classes (keyword, string, number, comment), so main.c gains a comment to show the fourth; types and function names stay plain in any theme. The petscii cast starts on a README naming the pictures and the manual, right-clicks each open, no longer runs Petscii, and searches 'bit 21', which first appears on the CPUID page. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The hero clip opens its output pane when make is clicked; the image clip ↵Gabriel Schneider13 hours
| | | | | | | | | | | | | | shows the Mandelbrot set and a seahorse-valley zoom, no Petscii; the landing lists the PDF and image clips first record_demos.py: text-is-the-interface starts on README and main.c alone, and the middle-click on make brings up the output pane before the right-click puts main.c on line 12. image-pane draws two PNGs, the classic view and a zoom into the seahorse valley; ls lists them, a right-click opens the set, Del closes it and a right-click opens the zoom. clips.toml and CLIPS run pdf-navigation, image-pane, pdf-tint-fit, then the hero, terminals, scripting and diff-review. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The landing's terminal casts are recorded: live text, terminals as panes, ↵Gabriel Schneider13 hours
| | | | | | | | | | | | | and images and PDFs in a plain terminal, each a tty pardes that test/record_casts.py drives in a pty of its own as a plain xterm The script answers only what an xterm answers, so images fall back to PETSCII glyph art and a PDF to its text layer. It stamps each scripted step on a virtual clock and writes the cells the step changed, as pyte saw them, so the same input makes the same file. The petscii cast generates its Mandelbrot views and reads the Intel SDM (--pdf) through a symlink. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Clicks in the site's clips stop, then click in place with a ring; the hero ↵Gabriel Schneider14 hours
| | | | | | | | | | | | | | | | | opens on all three panes; new clips show the PDF and image panes; the Themes gallery has a shot of every theme record_demos.py: a click glides to its target, stops, and presses and releases with the pointer still (a ring and the button's name on the press, a pulse after), pausing before anything moves. The hero's README, main.c and output pane are all up from its first frame. pdf-navigation and pdf-tint-fit page the Intel SDM vol. 2 (--pdf, read where it is): PdfSections to CPUID, a search stepped with n, PdfTint's three looks, PdfFit both ways and a page address. image-pane opens a Mandelbrot PNG the script draws, then Petscii. `record_demos.py themes` shoots one scene in each theme of src/themes, in the Themes order, into docs/site/media/themes with themes.toml (ready). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Builtins are written by name: each chapter and the tutor define Look and ↵Gabriel Schneider14 hours
| | | | | | Exec once and then say Look and Exec; the cheatsheet draws every mouse button as its icon; one-button clicks (Alt is B2, Super is B3) are in the guide and cheatsheet; building says how to send patches to the list Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Scripts find the session as m=\$PARDES_MOUNT, else 9p; SPC q quits; upper ↵Gabriel Schneider14 hours
| | | | | | keeps a selection's newline and its tag words once; the reference takes line files, init errors, dumps, dials and Save on +Tutor Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The documentation site's landing page has four short silent clips in ↵Gabriel Schneider14 hours
| | | | | | | | | | | | | docs/site/media, recorded from a hidden test window by test/record_demos.py text-is-the-interface, terminals-are-panes, scripting-over-9p and diff-review: each a webm (VP9), an mp4 (H.264, faststart) and a poster PNG at 960 px, with captions.txt. The script drives a PARDES_TEST session on the virtual clock through stdin mouse events, keys and 9P, keeps the settled frame after each step, draws the pointer and loops each clip with a dissolve back to its first frame. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* The docs give back the day-one lines the trim cut, the tutor becomes ↵Gabriel Schneider14 hours
| | | | | | exercises on a +Tutor copy, the README builds the GUI and says what a terminal needs, and Shift-Esc says it needs the kitty keyboard protocol Co-Authored-By: Claude Opus 5.5 <[email protected]>
* SPC q runs Exit, refused once over unsaved panes as the tag word is, as ↵Gabriel Schneider15 hours
| | | | | | helix's :q Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Every pane pardes spawns gets $PARDES_MOUNT, the session's own directory ↵Gabriel Schneider16 hours
| | | | | | | | | | | | under 9ns --mntgen ($NINE_MOUNT/pardes/<name>), unset when it is not known 9ns says --mntgen with NINE_MNTGEN=1 (cloud9). Under `9ns --unix` the mount is the server it dialled, never this session (its socket does not exist until it starts), so it stays unset there; scripts fall back to `9p -a "unix!$PARDES_9P"`. Nothing is statted: the name comes from the session's socket and the environment. selfmount checks both modes. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* `> exec` through a mount no longer hangs the editor, and a close holding a ↵Gabriel Schneider16 hours
| | | | | | | | | | | | | | | | | | last line is answered at once: the line runs at the editor's next step A shell's truncating open of exec (or look, ctl, log, pager) sends a setattr that changes nothing; it waited for the editor to be quiet, and through a 9ns mount that quiet could never come: 9ns answers nothing else on the mount while the setattr is out, and the editor's step may be out reading a pane's file through it. This was the "truncating open of exec hangs, only in selfmount" mystery. Only a truncate of a pane's file or a tag waits now. A close holding a last line with no newline hands it to the editor's step (tree.runClosedLines, beside fillClosedPagers), as a /pager close does, and is answered at once; a refusal is the log's err. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* `pardes --wait` whose $PARDES_9P no longer answers says the session is gone, ↵Gabriel Schneider16 hours
| | | | | | exit 1, instead of drawing a screen of its own in the asker's terminal Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A dump no longer embeds a picture or a PDF that is on disk: Restore reads it ↵Gabriel Schneider16 hours
| | | | | | | | | | | from there, as a clean file's text is Every Dump carried each image's and PDF's bytes in base64 (a 900 KB PDF made a 1.3 MB dump), and a Restore showed that copy however the file had changed. One on disk now goes by its path alone; one not on disk (no file behind it) still has its bytes kept. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A +Pager keeps its program's colours: the session parses what /pager is ↵Gabriel Schneider16 hours
| | | | written after its directory with ghostty-vt, SGR becomes spans drawn over the plain text, every other escape is dropped, and PagerColor off pages it plain
* A rename preview's rows are one format whichever file they are in: ↵Gabriel Schneider16 hours
| | | | | | | | | `file:L:C-E`, the range's end too, for the asked-about file as for the others The asked-about file's rows said `file:L:C` while other files' said `file:L:C-E`. lsp-rename-files is re-recorded for the one row it shows. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A look at a path not there under a peer's mount is a miss, the write ↵Gabriel Schneider16 hours
| | | | | | | | | answered, as any path to no file is It failed the write with the peer's "file does not exist". A file not found, here or through a mount, is now said and logged as a miss. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* An exec or Tty from a pane whose directory is a peer's path refuses before ↵Gabriel Schneider16 hours
| | | | | | | | | | | making any pane: `exec: <dir>: no such directory`, no `exit 127` pane left A peer's directory (`/n/peer/x`) is no directory on this host, where the shell starts, so a command there ran in a pane that could only say `(pwd) exit 127`, and a Tty made a new/del pair. missingDir now counts such a path missing, as it does a local directory that is not there. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A command line runs when its newline comes, or at its open's close, never ↵Gabriel Schneider16 hours
| | | | | | | | | | | | | | | | because a write was short: a long line cut by a mount is one line A write shorter than its message, and not a multiple of 4096, was taken as whole, its tail a line. 9ns cuts a FUSE write of up to 512 KiB into 65512-byte Twrites, the last one short, so a 600 KiB `Edit ,c/.../` arrived cut and its tail ran as an unknown control message; the 1 MiB refusal failed the same way. Each open now holds a partial line until its newline, or its release, which ends the last line; an Edit block is whole when it closes, as before. A name write with a NUL still fails its write at once. selfmount writes a 600 KiB Edit line and a 1.1 MiB line through a real 9ns mount; building.typ says how lines are cut. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Grep's miss says `Grep: text not found`: it is a literal search, and ↵Gabriel Schneider17 hours
| | | | | | | | | "pattern" suggested a regular expression Still ENOENT through a mount ("not found" is in 9ns's table, and the unit tests' errno-words check holds it so). The guide's quote follows. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Shift-Esc always backs out: in every mode and pane it goes to the previous ↵Gabriel Schneider17 hours
| | | | | | | | | | | | | | | pane, as Esc does from normal, and a raw program never sees it; Ctrl-b alone toggles raw Shift-Esc switched a terminal in normal or insert mode into raw, so the one key meant to get out of anything got a script or a person into a program instead. It is now handled before any mode: an open prompt is closed, insert mode left, a pending count dropped, and Last runs, the pane keeping its mode (a raw terminal stays raw). Ctrl-b is the only switch between raw and normal. The keymap's two chords become one, back_out; the cheatsheet row, the guide's mode table and the tutor say so, and the tty and builtins goldens are re-recorded. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* `pardes --wait FILE` with $PARDES_9P set but no pane of its own (an agent's ↵Gabriel Schneider18 hours
| | | | | | | | | | | | or a script's EDITOR) asks that session and waits there, not a screen of its own Forwarding asked for $PARDES_PID and $PARDES_PANE, which only a pane's shell has, so a client that talks to a session from outside its panes got a full editor drawn in its terminal. With --wait and $PARDES_9P alone, the file is looked at through the session's root look and the wait is for that pane's del. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A pane's ctl read says Collapse and a PDF's PdfFit and PdfTint (`collapsed`, ↵Gabriel Schneider18 hours
| | | | | | | | | | | | `fit:height tint:full`), and a Dump keeps the PDF's two Neither showed in the tag or the ctl, and a Restore brought a PDF back at width fit and the default tint. The ctl read ends with `collapsed` when it is, and a PDF's `fit:` and `tint:` in the words PdfFit and PdfTint take; the dump's image record carries pdf_fit and pdf_tint (empty in older dumps: the defaults). Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A PDF place `:P:H` whose search hit H is not on page P, or with no search, ↵Gabriel Schneider18 hours
| | | | | | | | | | | | | is a miss with an err, as a page past the last is The second number of a PDF place is a hit of the pane's search (its search rows are `file.pdf:P:H`), and one that named no hit turned to page P silently. pdf State.hitExists asks the pane's search for page P: a hit it does not have, or any hit with no search, is now `<file> has no search hit H on page P`, on the pane itself (`:P:H`) and from anywhere (`file.pdf:P:H`); a search row's hit is always there. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* Restore reads a clean file from disk, and an unsaved one whose file changed ↵Gabriel Schneider18 hours
| | | | | | | | | | | | | | | | | | | | | since the Dump is said changed, its first Save asking before overwriting it A Restore put back the dump's copy of every file pane and armed the watch with the disk as it now was, so a file changed on disk after the Dump came back as its old text, marked clean, and the next Save wrote the old text over the new without a word. A clean file pane's text is now not in the dump: Restore reads its file (an older dump's copy is read past too, and used only when the file is gone). An unsaved pane keeps its text once, base64, the plain copy beside it dropped, with the hash of the file it was read against (`disk_hash`); a Restore that finds another there says the file changed on disk, and Save asks once before overwriting it, as for a change seen while it was open. file_watch.zig's own tests were never collected (no test root imported it): main.zig's test block does now, and the restored watch test says what a clean restore now reads. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A file name with a newline is refused naming it once: `pardes: ↵Gabriel Schneider19 hours
| | | | | | | | | | two\nlines.txt: a file name is one line...`, not `a file name: a file name ...` The refusal's subject was the words "a file name", and its reason began with them again. It now names the name given, its newline shown `\n`, as /log and /index show one. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A second LookWord list look in a directory refills its +Search, as a ↵Gabriel Schneider19 hours
| | | | | | | | | | terminal's word looks already did, rather than stacking another Each word looked at with LookWord list opened a +Search of its own in the same directory. Word looks now share the directory's one, the next word refilling it; a `/` search still keeps a +Search each. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* A terminal's petscii:on survives Dump and Restore: the dump says it, and the ↵Gabriel Schneider19 hours
| | | | | | | | | | restored terminal draws its graphics as glyph art again An image pane's Petscii choice was dumped; a terminal's was not, so a Restore brought it back drawing pixels. dump.Terminal carries petscii, and a restored terminal is turned to glyph art when it was. Co-Authored-By: Claude Opus 5.5 <[email protected]>
* `:N:H` looked at on a PDF pane turns to page N, as `book.pdf:N:H` does from ↵Gabriel Schneider19 hours
| | | | | | | | | | anywhere, not a refusal that a PDF has no text A PDF's own pane took only `:N`; `:5:3` was refused as no text to address while `book.pdf:5:3` turned to page 5 (its search hit 3). lookPdfPage now reads the page before a colon and the hit after it. Co-Authored-By: Claude Opus 5.5 <[email protected]>