diff options
| author | Gabriel Schneider <[email protected]> | 2026-08-12 13:32:43 -0300 |
|---|---|---|
| committer | Gabriel Schneider <[email protected]> | 2026-08-12 16:07:33 -0300 |
| commit | bc89f57cb576e23a58572ec35f96db068367f1b4 (patch) | |
| tree | 06f1ea2b7e95f229c10b316214ae904b9d43e343 /docs/web.md | |
| parent | b424164922842796619cb6894ec46d729a8a6826 (diff) | |
| download | pardes-bc89f57cb576e23a58572ec35f96db068367f1b4.tar.gz pardes-bc89f57cb576e23a58572ec35f96db068367f1b4.zip | |
docs: the tutor taught three keystrokes wrong, and the rest had drifted
The documentation had gone stale in the ordinary way -- claims that were true
when they were written and that nothing since had been obliged to re-read.
Some of them were load-bearing.
THE TUTOR. It still said there is no multi-cursor, that NextColor cycles three
themes, and that its practice blocks "are also run as unit tests (generated
from this file by tutor_gen)" -- a tool that appears nowhere in the tree, and
nothing anywhere parses a `# keys:` block. Left alone, that claim is what
makes the next wrong block survive.
Three of those blocks WERE wrong, and all three for one reason: since the
helix motion model landed, w/e/f/t SELECT the range they cross, so `i` after
one inserts at the SELECTION'S START. `w i Z esc` on "foo bar" gives
"Zfoo bar", not the "foo Zbar" the file promised. They were written against a
vim reading of the same keys. Every block in the file has now been run through
`zig build hxdiff` against the real core and matches byte for byte, and the
trap itself is written down in 3.3 rather than left to be rediscovered.
The tutor gains a PART 4 for everything added since it was written -- PDF
panes, the in-process ZLS backend, themes and fonts, the startup file -- and
PART 3 gains counts (and which keys ignore one), f/F/t/T, the whole g table
(bare `G` is a no-op; `ge` is the START of the last line), multiple cursors
and the s/S regex pair, `m`, `]`/`[`, `|`, insert mode, and all fifty leader
paths.
THE REST. design.typ's line table claimed 7,626 lines against a real 38,048,
and its rows did not sum to its own total; its Event/Effect boundary contract
-- the part a shell author writes against -- named four variants that do not
exist and omitted fourteen that do. lsp.md's probe count. config.md's
theme-name rules, which as written could not reach a zed theme at all.
helix-keys.md's Skipped section, holding five families that have since landed.
macos.md's menu bar, undocumented, along with sixteen other claims. web.md on
what the browser build can actually do.
SOURCE COMMENTS that had rotted alongside them: `tag_normal` is a space, not
the `•` its own comment describes; Wrap is ON by default, not off; a FontSel
row is SELECTED by n and RUN by Tab, not run by n; the SPC paths in lsp.zig
lost their `l` group prefix when the language group moved; and the
differential suites are 481 and 561 cases, not 360 and 440.
TWO THINGS FOUND BY DOCUMENTING THEM, both left standing and written down
rather than papered over. Typing `[^\n]` at an s/S prompt panics: the live
preview compiles every prefix, and `[^\` indexes an empty slice in mvzr's
parseCharSet. Both the tutor and a waiver recommended that pattern as the
workaround for `.` matching a newline; they now say what it costs and what
would make it sayable. And `Exec` is a builtin, so an `Exec` line in the
startup config types that command into a shell before the first frame -- the
tutor said nothing in that file is ever sent to one.
Nine adversarial reviews over two rounds, each with the hxdiff harness to
execute what it doubted. The second round exists because the first round's
fixes needed checking too, and it caught three regressions of my own -- one of
them a probe count I had "corrected" away from the truth.
Verified: unit-test, snap 87/87, hxdiff 481/0, hxparity 561/0, mupdf-check.
docs/design.pdf regenerated. The tutor's first seventeen lines are byte-
identical, which is what tutor.golden pins.
Diffstat (limited to 'docs/web.md')
| -rw-r--r-- | docs/web.md | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/docs/web.md b/docs/web.md index 339509d2..ddc09d35 100644 --- a/docs/web.md +++ b/docs/web.md @@ -31,6 +31,30 @@ zig build web \ The output is in `zig-out/web`. Serve that directory over HTTP; browsers do not allow a useful WASM module load from `file:` URLs. +The browser shell has no argv: every command-line flag `src/main.zig` parses — +`--tty`, `--tty-toggle`, `-n`, `-l`, `--nested`, `-h`, and the positional +file-or-directory — is native-only, because the wasm module roots at +`src/web.zig` and never links `main.zig`. State comes from the embedded dump +instead. + +What is genuinely absent is narrower than "no IO". The module has no threads +and no host filesystem, so there is no startup config file, LOOK resolves +against the build-generated source archive rather than disk, and no language +BACKEND is compiled in (`zls_backend` is off for wasm — which also means +`lsp.supports` is empty, so the core never even raises a language query there; +`web.zig`'s prong for it is waiting for a host that links one). + +The EFFECTS themselves are all still emitted, each as a numbered code across +the ABI: `spawn` 1, `write` 2, `resize_pty` 3, `open_link` 4, `save_file` 5, +`write_dump` 6, `set_clipboard` 7, `lsp` 8, `watch` 9, `quit` 10, `new_file` +11, `pipe` 12, `read_clipboard` 13. Inbound, `pardes_output`, +`pardes_set_cwd`, `pardes_eof`, `pardes_paste` and `pardes_lsp_response` +exist to answer them. A plain page ignores most of those and gets a replay +viewer; a +process-capable host (the `pardes-io` events above) answers them and gets +terminals. The core does not know the difference — that is the point of the +seam. + Two dependency-free test layers cover the boundary: ```sh |
