Two eras of numbers, kept apart on purpose.

brainbox was rebuilt in September 2026. The benchmarks from the old deployment are not the fresh runtime, and a tiny synthetic retrieval baseline is not a judged answer-accuracy score. So this page has two clearly separated halves: a frozen synthetic baseline for the fresh rebuild (30 September 2026, local harness), and archived results from the July 2026 Neo4j deployment — root-inspected on 30 September 2026, not rerun. Raw counts, dates and environments throughout; what was not tested is listed next to what was.

Compiled 30 September 2026 · Fresh section: local synthetic baseline, run 2026-09-30 · Historical section: archived July 2026 artifacts from the previous deployment · Independent review and native visual checks pending before publication.

Fresh rebuild — synthetic baseline · 30 September 2026

A frozen synthetic retrieval baseline, with the warts in the headline.

Scope first: this is a retrieval-only benchmark of the fresh rebuild on a frozen synthetic corpus of 30 fictitious memories — real cached bge-m3 vectors, the actual PostgreSQL retrieval verbs, running against a local Docker harness. It is not a generated-answer evaluation, not hosted-service latency, not real user data, and not comparable to the archived judged-answer scores further down this page.

26/40 recall@5
Relevant items retrieved in the top 5, across 30 known-answer queries with 40 relevant items in total (65% by item). Uncertainty not computed — the set is tiny.
22/30 queries hit
Queries where at least one relevant item appeared in the top 5. 2 of 30 came back abstained (empty) instead of guessing.
7/10 unknowns returned
Unanswerable queries that still returned results — every one flagged weak/partial. Only 3 of 10 came back cleanly empty.
17/17 lifecycle checks
Correction, deletion, tombstone, restore and tenant-isolation assertions passed, plus one unscored observation (disclosed below).

Known-answer queries, raw counts

Known-answer retrieval, top-5, by query type — run 2026-09-30, local harness
Query typeQueriesRelevant itemsRetrieved@5Item recall@5Queries with ≥1 hitMRR
Exact wording6666/66/61.000
Time / “who now, who before”6666/66/60.806
Paraphrase121277/127/120.454
Multi-source (combine several)61677/163/60.417
Overall30402626/40 (65%)22/300.626

“Retrieved@5” counts relevant items present in the top 5. Exact and temporal queries did well; paraphrase and multi-source queries are where this baseline is weak — none of the three-item multi-source questions surfaced all three items.

Unknowns: a related memory is not a missing attribute

Ten unanswerable questions were asked (five near-topic, five out-of-domain). Seven still returned results — e.g. asking for gym opening hours at a building returns other memories about that building. All seven carried weak/partial flags, but the strict lesson stands: retrieving a related memory about an entity does not establish the missing attribute. Only the three out-of-domain questions came back truly empty. Abstention flags and empty result sets are different measures, and this baseline scores them separately.

Lifecycle and isolation — 17 assertions, one unscored observation

Correction replaces stored text (old unique wording stops being the only path; new wording retrieves it). Forgetting hard-deletes rows, re-remembering tombstoned text is rejected, and a stale-snapshot restore does not resurrect corrected-away or forgotten content — while untouched items restore intact, vectors included. Cross-tenant connections are rejected in both directions. 17 of 17 assertions passed.

One observation is deliberately not scored: after a correction, the old-wording query still ranked the item first via vector similarity — semantic drift, reported as an observation rather than a pass/fail.

Latency is local, and that is a hard limit

Recall p50 ≈ 2.0 ms, p95 ≈ 3.1 ms (n=47); writes p50 ≈ 2.7 ms, p95 ≈ 6.9 ms (n=33). These are local cached-vector database executions — embeddings were pre-fetched into a cache and resolved in-process. Hosted latency (network inference plus cloud transport) is unmeasured here and will be slower. Treat these as plumbing numbers, not product numbers.

Method and artefact

Frozen thresholds (vector floor 0.68, RRF k=60, 48 vector candidates, top-5) inherited from the legacy calibration — no tuning was performed on this benchmark, and the held-out improvement work is still open: this baseline must not be re-labelled as a tuned score. An independent Python pass re-derived the headline counts from the raw cases and matched. The full stripped summary — method, counts, assertions, environment, provenance hashes and limits — is downloadable: brainbox-synthetic-v1-summary.json.

Historical Neo4j deployment — archived results · July 2026

The old pipeline’s numbers, kept — and kept honest.

These results come from the previous brainbox deployment (Neo4j era, July 2026). They are archived artifacts, inspected on 30 September 2026 and not rerun since — they are not claims about the fresh runtime. Every available same-turn artifact is listed, not just the best one: later runs exist beyond the one the old page published, and one early cold run is shown at its unflattering actual value.

Same-turn experiment, as published at the time: 150 gold facts with unique canary tokens, each given a near-twin distractor; every gold probed keyed (contains the canary) and semantic (paraphrase); tiers = fresh write, interference after the full corpus, and a later cold session. 30 negative probes asked for combinations that don’t exist.

All nine recorded artifacts, raw counts

Same-turn runs — semantic (paraphrase) mode; hit counts are rank-1 / top-5 out of n
Artifact (UTC)Recorded commit†Tiernhit@1hit@5MRRMedian sp95 s*
2026-07-12 21:54 runf8e32bffresh7561750.8901.422.09
2026-07-12 21:54 runf8e32bfinterference150581500.6341.371.93
2026-07-13 03:24 runf8e32bffresh7561750.8901.432.08
2026-07-13 03:24 runf8e32bfinterference150591500.6331.451.98
2026-07-13 04:17 runf8e32bffresh7570750.9671.361.96
2026-07-13 04:17 runpublished thenf8e32bfinterference1501351500.9501.341.76
2026-07-14 18:41 run7b9a003fresh7568740.9473.075.38
2026-07-14 18:41 run7b9a003interference1501321490.9343.215.11
2026-07-15 06:49 run34d941cfresh7569750.9602.612.99
2026-07-15 06:49 run34d941cinterference1501341500.9472.102.67
2026-07-13 03:03 cold—cold150341500.5251.422.01
2026-07-13 05:39 coldpublished then—cold1501351500.9501.041.15
2026-07-14 19:38 cold—cold1501341490.9432.313.51
2026-07-15 07:35 cold—cold1501371500.9572.162.79

† Recorded commit metadata is not verified as the deployed worker revision. Three early runs share the same recorded commit despite changing results — no causal claim is made from this field. “Cold” artifacts were recorded in separate later sessions against the then-deployed pipeline.

* Latency is recorded wall-clock seconds at run time, through the then-live pipeline. p95 here is the nearest-rank recomputation from the 2026-09-30 inspection; the original harness interpolated percentiles. The two methods are not silently substituted.

Keyed mode (query contains the memory’s unique token) scored 148–150 of 150 hit@1 across all nine artifacts; the 14 July run is the only sub-perfect one (148/150 hit@1, 149/150 hit@5, with two fresh-tier abstentions). Across dates, interference-tier semantic rank-1 moved from 58/150 (12 July) to 135/150 (13 July) and stayed 132–137/150 in the later runs — recorded outcomes only; the artifacts do not establish why.

Abstain flags versus empty results, per run

Negative probes — 30 per run, asking for combinations absent from the corpus
Run (UTC)QueriesAbstain flag setReturned context
2026-07-12 21:5430030
2026-07-13 03:2430030
2026-07-13 04:1730030
2026-07-14 18:4130030
2026-07-15 06:49303030

The 15 July run sets the abstain flag on all 30 negatives while still returning context in all 30 — abstention flags and empty result sets are different measures, and no archived run shows empty-result abstention on negatives. The old page’s “0 of 30 abstain” disclosure described the July 12–14 runs; it is kept here in its full timeline instead of being quietly updated.

A historical judge artifact, not a fresh score

One archived LongMemEval-S result exists from the old deployment: a saved judge artifact scored by gpt-4o-2024-08-06. 326 of 499 questions correct (65.33%). One of the 500 dataset questions was never scored. It was not rerun or rejudged on 30 September, and the original online calls were not independently witnessed — this is the recorded artifact, nothing more.

Archived LongMemEval-S by recorded category — counts as recorded, not an exact proportional sample
CategoryScoredCorrectRate
single-session-assistant565394.6%
single-session-user705781.4%
knowledge-update775571.4%
temporal-reasoning1338866.2%
multi-session1336951.9%
single-session-preference30413.3%
Overall (499 of 500 scored)49932665.33%

Preference was, and remains, the weak category — 4 of 30. Category counts are as recorded in the artifact; they are not an exact proportional sample of the suite. This is a judged answer-accuracy score on the old pipeline; it cannot be compared to the fresh baseline’s retrieval counts above, nor to vendor headline numbers without matched dataset, reader, retrieval and judge protocols — so no vendor comparison is shown. The earlier published page’s competitor table was removed on 30 September 2026 for exactly that reason.

What is not measured yet — kept in plain sight.

Benchmarking is not “complete”, and this page will not pretend otherwise. Open items, in the order the work is planned:

Held-out retrieval improvement

The 30 September baseline is frozen at its original scores. Improvement work runs against a held-out set and will be published only as root-reviewed results — no self-upgraded numbers.

Real cross-client behaviour

Same-turn write→recall, round-trips and multi-client choreography through actual connected clients — the fresh baseline measures retrieval in one local harness, and the archived runs measured one pipeline end to end; neither is a cross-client measurement.

A new LongMemEval run, if approved

The archived 65.33% belongs to the old deployment. A fresh run on the rebuilt system needs approval and budget for judge calls; until then the archived number stays archived.

Hosted latency and cost

Everything current on this page that smells like latency is local cached-vector execution. Hosted end-to-end latency and cost per call are unmeasured.

30-day staleness

How retrieval behaves when memories age a month — untested in both eras, and on the list.

Watch the numbers, not the adjectives.

brainbox is a personal preview today; invitations open gradually. Register interest if you want to be part of the next stage — and hold every future number on this page to the standard this one sets: raw counts, dates, environment, and limits in the open.

Register interest What is brainbox?