summaryrefslogtreecommitdiff
path: root/docs
diff options
context:
space:
mode:
Diffstat (limited to 'docs')
-rw-r--r--docs/design.typ5
-rw-r--r--docs/detached.md15
-rw-r--r--docs/lsp.md14
3 files changed, 16 insertions, 18 deletions
diff --git a/docs/design.typ b/docs/design.typ
index d322920a..ccb94a08 100644
--- a/docs/design.typ
+++ b/docs/design.typ
@@ -1157,8 +1157,9 @@ running in pane 3 is still running and has been scrolling into the core the whol
time.
Of the twenty-one `VTable` methods, the detached core's `Session` implements
-sixteen and leaves five null: `push_post_present`, `pull_gpio_toggle`,
-`pull_lsp`, `pull_pipe`, `push_fs_reply`.
+seventeen and leaves four null: `push_post_present`, `pull_gpio_toggle`,
+`pull_lsp`, `pull_pipe`. It mounts its own `/dev/fuse` and polls it in the same
+`poll(2)` as its frontends, so `--fs` works in a daemon and needs no thread.
Nothing blocks indefinitely, and that property is what a detached session is
*for*. Every descriptor is non-blocking; the single `poll(2)` is the only place
diff --git a/docs/detached.md b/docs/detached.md
index b4dde59c..d849c810 100644
--- a/docs/detached.md
+++ b/docs/detached.md
@@ -255,14 +255,13 @@ Stated rather than papered over:
* **The screen is shared, at the smallest common grid.** Two frontends of
different sizes converge on the smaller; the larger window letterboxes. Same
semantics as tmux.
-* **No LSP, no selection pipe, no `--fs` control filesystem** in a detached
- session. The daemon implements **sixteen** of `Host.VTable`'s **twenty-one**
- methods — FEWER than the tty and SDL shells, which install nineteen each,
- everything but `pull_gpio_toggle` and `push_detach` — and it is the only host
- that implements `push_detach` at all. The five it leaves null divide cleanly.
- Three are real losses: `pull_lsp` and `pull_pipe` want a
- worker pool this deliberately single-threaded loop has not got, and
- `push_fs_reply` wants a `/dev/fuse` this process never mounted. They fall back
+* **No LSP and no selection pipe** in a detached session. The daemon implements
+ **seventeen** of `Host.VTable`'s **twenty-one** methods — fewer than the tty
+ and SDL shells, which install nineteen each, everything but
+ `pull_gpio_toggle` and `push_detach` — and it is the only host that
+ implements `push_detach` at all. The four it leaves null divide cleanly.
+ Two are real losses: `pull_lsp` and `pull_pipe` want a worker pool this
+ deliberately single-threaded loop has not got. They fall back
to the core's in-process defaults rather than failing, so the features are
quiet rather than broken. The other two are not losses at all: there is no
moment "after the frame is on screen" for a process with no screen
diff --git a/docs/lsp.md b/docs/lsp.md
index 1adb397b..b35c8eeb 100644
--- a/docs/lsp.md
+++ b/docs/lsp.md
@@ -39,8 +39,8 @@ shell and the ESP32-P4 object: there `lsp.supports` is empty, which makes
response; a host that links a backend would add both.
**In a DETACHED session every query answers EMPTY.**
-`src/detached/server.zig`'s vtable implements sixteen of `host.zig`'s
-twenty-one methods, and `pull_lsp` is one of the five it leaves null — a
+`src/detached/server.zig`'s vtable implements seventeen of `host.zig`'s
+twenty-one methods, and `pull_lsp` is one of the four it leaves null — a
worker pool is precisely what its deliberately single-threaded loop does not
have. A null method is NOT automatically a dropped effect: `perform` decides
that per arm, and the `.lsp` arm's answer is to synthesise one on the spot —
@@ -69,16 +69,14 @@ has moved by the time the prong runs, the guard fails, and the Tab really is
eaten. The local shells have the same race over a wider window, so this is a
property of the late-indent repair rather than of detaching.
-None of the detached core's five null methods silently drops a reachable
+None of the detached core's four null methods silently drops a reachable
effect. `pull_lsp` and
`pull_pipe` have the fallbacks above; `pull_gpio_toggle` is
`orelse return Error.NoPads` (`board_memory.zig`), which lands on the message
row; `push_post_present` is a `pump` hook fired after presenting, and there is
-nothing to notify in a process with no screen; and `push_fs_reply` is the one
-`perform` arm with no fallback at all, but it is only ever emitted in answer to
-an `Event.fs_req`, which is not on the wire (`wire.zig`: it has no `ClientTag`,
-because neither half of that pair may cross an attachment) and which the
-daemon raises none of, mounting no `/dev/fuse` by its own vtable comment.
+nothing to notify in a process with no screen. `push_fs_reply` was listed here
+too until the daemon began mounting its own `/dev/fuse`; it implements that one
+now, and `--fs` works in a detached session.
Four rules make it safe: