summaryrefslogtreecommitdiff
path: root/docs/design.typ
diff options
context:
space:
mode:
Diffstat (limited to 'docs/design.typ')
-rw-r--r--docs/design.typ13
1 files changed, 8 insertions, 5 deletions
diff --git a/docs/design.typ b/docs/design.typ
index ccb94a08..9a92f7ee 100644
--- a/docs/design.typ
+++ b/docs/design.typ
@@ -355,11 +355,14 @@ the pane's message row instead of quietly quitting something (the `.detach` arm
`Pardes.perform`).
The watch path, in full, because it is the ask with the most machinery behind
-it. The tty and SDL hosts and the detached daemon implement it with Linux
-inotify (`src/file_watch.zig`); the native macOS host watches both each file and
-its parent directory with debounced DispatchSources, then restats the exact path
-under a pane-generation guard. The file catches in-place writes while the parent
-follows rename-over saves. Text snapshots are filtered by their content hash;
+it. The tty and SDL hosts and the detached daemon implement it in
+`src/file_watch.zig`, with Linux inotify or a macOS kqueue behind one
+mark/reconcile transaction; the native macOS host watches with debounced
+DispatchSources instead, then restats the exact path under a pane-generation
+guard. All three macOS watchers mark the same two things for the same reason:
+the file catches in-place writes while the parent directory follows rename-over
+saves, and the file mark is re-armed once such a save has moved the inode.
+Text snapshots are filtered by their content hash;
PDFs use bounded inode/size/time identity and commit it only when equal stats
bracket a successful transactional MuPDF reopen (`file_watch.Generation`). A
mismatched transaction gets one bounded self-retry. This catches rename-over