From 3aac6aae98b751576676fa4fba3a924ede24e1bd Mon Sep 17 00:00:00 2001 From: giles Date: Sat, 6 Jun 2026 21:12:09 +0000 Subject: [PATCH] =?UTF-8?q?radar:=20pass=203=20=E2=80=94=20offset/limit=20?= =?UTF-8?q?pagination=20(feed+search,=202=20consumers,=201-liner)=20folded?= =?UTF-8?q?=20into=20W3=20=E2=86=92=20substrate?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 4.8 (1M context) --- plans/abstractions.md | 22 ++++++++++++++++++---- 1 file changed, 18 insertions(+), 4 deletions(-) diff --git a/plans/abstractions.md b/plans/abstractions.md index 5e43ff81..c7d7c525 100644 --- a/plans/abstractions.md +++ b/plans/abstractions.md @@ -12,7 +12,11 @@ Anything short → _Watching_ (what's missing) or _Rejected_ (why). ## Last scan -- **Date:** 2026-06-06 (radar loop, pass 2) +- **Date:** 2026-06-06 (radar loop, pass 3) +- **Pass 3:** subsystem set + tmux + A1 adopters (4) all unchanged vs pass 2. Loops + advanced: acl shipped Phase 4 federation; search shipped Phase 4 + pagination; feed + shipped pagination/threading; mod at Ext 19 (capstone); persist did a worked acl-grants + migration (W4). New shape found: offset/limit pagination → folded into W3. - **Subsystem set discovered:** loop worktrees `acl, erlang, fed-prims, fed-sx-m1, feed, flow, go, kernel, mod, ocaml, persist, radar, ruby, search, sx-vm-extensions`; main-repo `lib/*` incl. merged `feed` + substrates (`apl, @@ -103,11 +107,21 @@ Anything short → _Watching_ (what's missing) or _Rejected_ (why). - **Home when ripe:** delegate `permit?` to `acl-on-sx`; do NOT extract the filter. Re-check if a 3rd genuine per-viewer read filter ships (e.g. events/commerce). -### W3 · Collection helpers (group-by, dedupe-by-key, stable top-N, distinct-order) +### W3 · Collection helpers (group-by, dedupe-by-key, stable top-N, distinct-order, offset/limit page) - feed built all of these on APL primitives. search/commerce/events will want group-by / top-N. -- **Missing:** ≥3 stable consumers; and these likely belong in the **substrate** - (APL/Haskell already expose grade/sort/unique) rather than a shared lib. Watch. +- **NEW (2026-06-06): offset/limit pagination shipped in 2 subsystems, identical shape** + `take limit (drop offset xs)`: + - `feed/lib/feed/page.sx:9` `feed/page` (offset/limit window over a stream). + - `search/lib/search/page.sx:9` `paginate off lim docs = take lim (drop off docs)`. + - NOT a 3rd: `persist/lib/persist/query.sx:5` has a *since-cursor* for incremental log + consumption — resumable-stream semantics, not result windowing. Different shape. + - feed *also* has cursor-by-`:at` recency pagination (`page.sx:21-44`); search has no + cursor. So only the plain offset/limit window is shared, and it is a literal 1-liner. +- **Missing:** ≥3 stable consumers; AND every item here is collection math that belongs + in the **substrate** (APL/Haskell already expose grade/sort/unique/take/drop), not a + shared lib. A 1-line `take/drop` window is far below the extraction threshold. Watch; + revisit only if a non-substrate subsystem needs the same windowing without take/drop. ### W4 · In-memory store fakes → `persist-on-sx` - Not an abstraction to extract — a migration target. Every subsystem fakes its