docs(adr): ADR 009 makes the client pruning recipe conditional and restores the dropped-connection test (improvise-felo.4)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VdfEGXA7aJ6ftMsCc9PJze
This commit is contained in:
Claude (adr9-steward)
2026-10-09 09:45:46 -07:00
committed by Edward Langley
parent e7d9ad0d2a
commit 5923f039f7
+7 -6
View File
@@ -190,11 +190,11 @@ and dimensions. The window is never state, and a request costs O(visible).
displayed values is hidden. This replaces today's whole-grid `prune_empty`. The model
answers one restricted successor query: "the next k rows after position p with a value
in a column of S", and the same for columns. A per-column sorted index of occupied rows
answers it in O(|S| log n + k|S|), holding O(occupied cells). The client prunes its
window, fills forward with that query, and finds a new top-left when scrolling up or left
by galloping backwards in doubling jumps (about 14 to 28 probes at density 10⁻⁴). Whether
pruning runs on the client and which parameters travel are ADR 008's questions. This
design supports either answer.
answers it in O(|S| log n + k|S|), holding O(occupied cells). Whether pruning runs on
the client and which parameters travel are ADR 008's questions, and this design supports
either answer. If the client prunes, it prunes its window, fills forward with that
query, and, when scrolling up or left, finds a new top-left by galloping backwards in
doubling jumps (about 14 to 28 probes at density 10⁻⁴).
**The change notice.** After each accepted batch the host emits one notice to every
client, addressed to none. It carries:
@@ -283,7 +283,8 @@ Step 8's required tests:
- `[AddItem, SetCell]` publishes one notice, and no client refetches;
- a dropped notice is detected;
- a reconnect after a host restart refetches;
- a refused frame consumes no publication number.
- a refused frame consumes no publication number;
- a dropped connection forces a refetch.
## Open questions