From 0d6a9b1e4d4d8da13561ac0993dc6cebcacd3903 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 3 Jul 2026 23:15:09 +0000 Subject: [PATCH] docs(quartz): record strfry head-to-head for the live negentropy index MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Same container, 50k corpus, geode --no-search, strfry built from source: identical-set reconcile 41.4 ms (geode) vs 30.1 ms (strfry) — down to ~1.4x from the campaign-opening full-scan-per-open; cold reconcile 177 vs 112 ms (geode's first open pays the lazy rebuild); ingest at parity in this container; storage 72.8 vs 106 MiB. Notes the zero-copy IStorage follow-up that would close the remaining ~11 ms. Co-Authored-By: Claude Fable 5 Claude-Session: https://claude.ai/code/session_01TtDNpayEYvJH7QuPswND3A --- ...026-07-03-incremental-negentropy-storage.md | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/quartz/plans/2026-07-03-incremental-negentropy-storage.md b/quartz/plans/2026-07-03-incremental-negentropy-storage.md index 9e4a2ef643..ca10f6b091 100644 --- a/quartz/plans/2026-07-03-incremental-negentropy-storage.md +++ b/quartz/plans/2026-07-03-incremental-negentropy-storage.md @@ -24,6 +24,24 @@ relayBench run controls container noise better than alternating runs, but per-phase run-order bias is real (~100 ms on initial reconcile, ~10% on ingest) — always repeat with the order reversed. +**strfry head-to-head** (same container, 50k corpus, `--geode-no-search`, +strfry built from source, single run): identical-set reconcile geode +41.4 ms vs strfry 30.1 ms — the always-current-tree gap is down to +~1.4× from the campaign-opening "full scan + seal per open". Initial +(cold) reconcile 177 vs 112 ms: strfry keeps its tree across the whole +run while geode's first open pays the lazy rebuild. Ingest measured at +parity in this container (7,972 vs 7,860 ev/s — treat as ±noise, the +earlier 1.59× gap was measured on different hardware); storage 72.8 vs +106.0 MiB. + +**Possible follow-up** if the residual matters: the per-open cost is now +the O(n) copy + re-seal into a `StorageVector` (~16 ms at 50k). A custom +immutable `IStorage` view over the live entries (copy-on-write chunks, +no re-seal) would make an open O(1), matching strfry's zero-copy read of +its tree — that is the "interesting part" the original backlog item +anticipated, deferred until a benchmark says the remaining ~11 ms is +worth it. + ## Problem A cold NEG-OPEN pays a full scan + O(n log n) seal: `snapshotIdsForNegentropy`