Build1 distinct publisher3 min readUpdated
A dev.to design note argues memory services must ship the reason a fact passed reuse alongside the fact. The posted SDK snippet shows why that is harder than the argument.
The Engineer · Build desk
Compiled by The EngineerSomething wrong?How this is made
A dev.to design note argues that a memory service should hand back the reason a remembered fact passed its reuse check inside the same object as the fact, rather than leaving the explanation in a log line to be found afterwards [2]. The failure it names is the quiet kind: an old preference gets reused, the answer still reads clean, and nobody can later reconstruct why that detail was admitted [1].
The author's implementation is HLM, or Holographic, Law-Bound Memory, described as a stand-alone memory brain sitting outside application code [3]. Public routes live under /api/brain/*, with internal /api/v1/* services behind them [4], and the external surface is deliberately small: register an agent, write a fact, build a capsule [5]. The Python SDK posts to /api/brain/agents/register, /api/brain/memory/facts and /api/brain/context/capsule, with build_capsule defaulting to a 2048-token budget [6]; the Node client exposes the same three calls as registerAgent, writeFact and buildCapsule [7]. Two clients means a compatibility surface to maintain at the gateway, a cost the author accepts on the grounds that admission policy copied into every consumer drifts: one caller skips a selector, another copies an old threshold, a third treats a nearby match as good enough [8]. Centralising the decision gives one place to say yes or rebuild before the application acts [9].
The write path is what makes a receipt possible at all. Facts arrive as text plus tags, selectors and an optional tenant id [11], land in a brain_facts row, and trigger two further writes against the same fact id for facets and predicates, with the response returning the new id and both sets attached [12]. That is the argument in miniature: retrieval later has axes it can test instead of a blob of prose [10].
Those axes are thin in the current scaffold, and the author says so plainly. generate_facets emits a specific facet for a known selector value, and otherwise falls back to a general facet built from the first 256 characters of the text with token count capped at 64, constants the author flags as code constants rather than performance claims [13]. generate_predicates converts selector strings into a single AND-joined predicate by swapping the first colon for an equals sign, which the author calls rough [14]. The cost lands on the writer: a caller sending empty selectors can still store text, but leaves later selection fewer axes to test [15].
The reuse service, Conformal-Causal Reuse, accepts a cache key, an artifact type defaulting to resume_kit, selectors, and optional similarity and tau values [16]. Its rule requires similarity above tau plus the selector kinds stakeholder, time and channel to be present [17]. That is a checkable admission record, and it is exactly the sort of thing a post-hoc log cannot reconstruct. Whether the capsule response actually carries it back to the caller is where the published excerpt stops [17].
One detail undercuts the demonstration more than the rough predicates do. In the posted Python client, r.raise_for_status and r.json are referenced without call parentheses [19]. As written, no HTTP error is ever raised and each method hands back a bound method object rather than parsed JSON [20], so a caller of build_capsule receives nothing inspectable at all [21]. An argument about carrying receipts is weakened by a client that discards the response.
The service is versioned 0.1.0 [18], and the post reports no evaluation of reuse quality [13]. Worth watching: whether the capsule schema names the tau value and selector kinds that admitted each fact, or merely records that it passed; whether generate_predicates moves past equality on a single selector [14]; and whether the two SDKs stay in step once admission policy at the gateway starts changing [8].
Follow any of these and your For You feed starts watching them — no settings page required.
Ranked by verification strength, evidence, and original report placement.
The author argues that when a system returns remembered material the caller needs the text plus the reason it passed the reuse check, that a log line found after the action is weak evidence, and that the object leaving the memory service must carry the admission record with it.
The HLM README describes public API routes under /api/brain/*, with internal /api/v1/* services behind that layer.
The outside shape of the API is intentionally thin: register an agent, write a fact, build a capsule.
The author describes the failure mode as a stored fact being wrong in a quiet way: a preference from an old exchange gets reused, the answer reads clean, and later nobody can tell why that detail was allowed back into the result.
The pattern is implemented in Holographic, Law-Bound Memory (HLM), described as a stand-alone memory brain outside application code.
The Python SDK at sdks/python/hlm_sdk/client.py defines register_agent, write_fact and build_capsule, posting to /api/brain/agents/register, /api/brain/memory/facts and /api/brain/context/capsule, with build_capsule taking budget_tokens defaulting to 2048.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Real code excerpts, unverified internals, one self-defeating snippet
The post is a primary artifact and publishes four verifiable code excerpts (HLMClient, FactIn, CCRRequest, the FastAPI 0.1.0 instantiation), which is more than a typical design essay. But the load-bearing behavioral claims - create_fact's write fan-out, generate_facets, generate_predicates and the reuse_or_rebuild admission rule - appear only as author description with no code, tests, output samples or repository reference in the supplied material, and the one runnable-looking excerpt is defective as printed. Everything is single-source and self-reported by the builder.
Pre-production scaffold, no reported users
The only adoption-relevant facts in the supplied source are negative: version 0.1.0, an explicitly unfinished branch, and a placeholder 'merkle:demo' receipt. No installs, downloads, stars, deployments, tenants or third-party integrations are disclosed, so adoption is measurable as effectively absent rather than merely unknown.
Receipt thesis runs ahead of the shipped mechanics
The framing - signed context, a context object that carries its receipt, an admission record travelling with the answer - is meaningfully stronger than what the source demonstrates: the receipt value is the literal string 'merkle:demo', thresholds are function defaults the author himself declines to call calibration, and the published client returns a bound method instead of the capsule. The gap is moderate rather than severe because the author repeatedly discloses the scaffold status and explicitly refuses to present constants as performance claims, which is the opposite of hype behavior.
Builder promoting his own unreleased project
The author is describing a system he built, on a self-publishing developer platform, using the post to establish the pattern and the project's naming (HLM, CCR, capsules, receipts). That is a clear promotional incentive with no editorial layer and no disclosure of funding, employer or commercial intent in the supplied source. It is tempered - not eliminated - by unusually candid caveats: constants labelled as constants, defaults labelled as not-calibration, and the scaffold and demo receipt stated outright.
High confidence in the argument, low in the implementation
What the article argues and what its published snippets contain are established with near certainty from the primary text, so descriptive and design-intent claims are solid. Confidence drops sharply for the repository behaviour behind those snippets - one self-reporting source, no code for the decision path, no tests, no external verification - and for any inference about whether the pattern works in production.
build
Force the tool call, then hand Lightsail a long-lived key1 distinct publisher
build
Your 90% Cache Hit Ratio Is a Lagging Indicator. Alert on Cold Misses Per Key1 distinct publisher
build
The third answer: a dead-code tool allowed to say "not traced yet"1 distinct publisher
build
263 green tests, every value undefined: the schema mirror that agreed with itself1 distinct publisher
Distinct publishers with included, body-backed reporting in this cluster.
dev.to
1 article · August 15, 2026