What it buys: one slot collapse per read.
What stands: no store relation is re-scanned per call —
Store::read_context is cached by version
(crates/glossary/src/store.rs:1570-1592) and Store::history per
relation snapshot (store.rs:1402-1434). The cost is in-memory
recompute: Store::slots (store.rs:898) runs once per witness with
a detector inside raw_read (crates/session/src/reads.rs:239) plus
once in collapsed_read (store.rs:1057), each pass re-filtering
the whole history; verdicts re-reads witnesses_all()
(reads.rs:229) though ctx.witnesses holds the rows;
read_context computes the pin and the version before its cache
check (store.rs:1571-1572); each detector run builds a fresh
SessionContext (reads.rs:299-300).
Done when: the slots are computed once per read and shared across
witnesses and the collapse; the witnesses come from the context; the
cache check precedes the pin.
What it buys: one slot collapse per read.
What stands: no store relation is re-scanned per call —
Store::read_contextis cached by version(
crates/glossary/src/store.rs:1570-1592) andStore::historyperrelation snapshot (
store.rs:1402-1434). The cost is in-memoryrecompute:
Store::slots(store.rs:898) runs once per witness witha detector inside
raw_read(crates/session/src/reads.rs:239) plusonce in
collapsed_read(store.rs:1057), each pass re-filteringthe whole history;
verdictsre-readswitnesses_all()(
reads.rs:229) thoughctx.witnessesholds the rows;read_contextcomputes the pin and the version before its cachecheck (
store.rs:1571-1572); each detector run builds a freshSessionContext(reads.rs:299-300).Done when: the slots are computed once per read and shared across
witnesses and the collapse; the witnesses come from the context; the
cache check precedes the pin.