diff --git a/plans/abstractions.md b/plans/abstractions.md index 3c37946f..d68a17f9 100644 --- a/plans/abstractions.md +++ b/plans/abstractions.md @@ -12,6 +12,12 @@ Anything short → _Watching_ (what's missing) or _Rejected_ (why). ## Last scan +- **Date:** 2026-06-07 (radar loop, pass 20) +- **Pass 20 — honest empty pass.** 3 new census recurrences since p17 (normalize/index ×2, + query ×3) — all **name collisions** (same noun, domain-specific op), added to the table. + Recorded the meta-pattern: the fleet shares vocabulary, not structure. Most subsystems + quiescent (acl/mod/search/commerce static ~9-15 passes = API-stable); only events/ + identity/content/fed-sx still committing domain features. No new gate-clearer. - **Date:** 2026-06-07 (radar loop, pass 19) - **Pass 19 — honest empty pass.** Scanned 10 active subsystems. content/index.sx is a blog index/tag-cloud listing (presentation, not full-text search — no search reinvention) @@ -135,6 +141,9 @@ subsystems/modules appear. Map: | `wire` ×2 | content(SX serializer) / mod(pipe-format) | Rejected — divergent | | `schema`,`engine` ×2 | acl/mod | substrate-twin parallels (Datalog vs Prolog); only audit (W4) is liftable | | `catalog`,`batch` ×2 | commerce/persist, mod/persist | name collisions, unrelated | +| `normalize` ×2 | content(tree-prune)/feed(record-coerce) | name collision (pass 20) | +| `index` ×2 | content(listing)/search(inverted index) | name collision (pass 20) | +| `query` ×3 | content(doc-block)/search(bool AST)/persist(stream-read) | 3-way name collision (pass 20) | | `store` ×2 | content(on persist) / flow(workflow records) | related concept, divergent | | `rank` ×2 | feed/search | different domains (activities vs docs), ≤2 | **acl⇄mod are structural twins** (decision engine over a logic substrate, Datalog vs @@ -142,6 +151,13 @@ Prolog) — they parallel across engine/schema/explain/audit/fed, but only the * is substrate-agnostic and liftable (→ W4); the rest are substrate-idiomatic. Next passes: re-test gates (W2/W3/W8) as consumers mature, watch new modules — not re-census. +**Meta-pattern (pass 20):** new module names keep *recurring* but the operations keep +*colliding* — same noun, domain-specific op (normalize, index, query, catalog, batch, +notify, page, store all proved to be collisions). This is *why* genuine extraction +candidates are rare: the fleet shares vocabulary, not structure. The real shared assets +are the **substrate subsystems** (persist, flow, acl, fed-sx) that app domains *adopt* +(W1/W2/W4/W7/W8), not hand-rolled libs to extract. + **Scanning-method note (learned the hard way, passes 5/12/14/15):** a filename census for *cross-subsystem* recurrence MUST restrict to each subsystem's OWN namespace — `X/lib/X/*.sx` — never `X/lib/*/`. The merged substrate libs (`lib/prolog`, `lib/persist`,