200 ms to pick 20k tokens. Graph is wiring; SPARQL is the spinal cord.
An employee asks a question. The answer exists, split across systems that were never designed to be read together. The model will accept roughly 20,000 tokens of that answer. The retrieval path has about 200 milliseconds to decide which 20,000. Pick the wrong slice and the model hallucinates. Pick the right slice too slowly and nobody uses it. Pick the right slice fast and expensive and the CFO has a problem.
Dan McCreary's thesis is that the knowledge graph is not the context layer. It is the wiring inside the context layer: a compact, versioned, acyclic, typed dependency graph whose grain is 100 to 600 concepts, distilled before runtime so the agent never walks it at execution time. Andrew Lentz drew that line first. OpenLink's agent-rdf-memory agrees on the authoring side and disagrees on the runtime side: the agent does query RDF at session start, via a mandatory SPARQL protocol that loads core plus ontology plus a sparse preferences index, classifies the prompt, and SELECTs exactly one HowTo. That SPARQL hop is the 200-millisecond spinal cord, not a contradiction of distillation.
This graph maps McCreary's dual budget, four-layer decision traces, modeling choices, plumbing, and failure modes onto nine explicit agent-rdf-memory mechanisms. The disagreement is a first-class claim, not a footnote.
View this analysis as a KG entity“Your model will accept roughly 20,000 tokens of it. Your retrieval path has about 200-milliseconds to decide which twenty thousand.”
| Dimension | McCreary — distillation at runtimeAuthoring / distillation | OpenLink — SPARQL at session startRuntime retrieval protocol |
|---|---|---|
| Does the agent query the graph at runtime?disagrees withThe first-class tension. McCreary says never. OpenLink says SPARQL at session start. | never at execution timeAuthoring versus runtime query are separate. The agent never touches the graph. | SPARQL at session startMandatory protocol queries RDF before the model answers. Bounded SELECT, not a walk. |
| Fallback when the preferred path failscompared toRebuild the artifact versus AGENTS.md step 8 file-read. | rebuild the versioned artifactIf the compact graph is stale, rebuild it. Do not let the agent walk a live second database. | AGENTS.md step 8 file-readWhen SPARQL is unavailable, read Turtle from disk. Degraded, not preferred. |
| Grain of the compact graphaligned withAgreement: 100-600 concepts; 9 HowTos / 105 steps sit in band. | 100 to 600 conceptsCoarse enough to reason over, fine enough to be useful. | 9 HowTos / 105 stepspreferences.ttl already sits in that grain band. |
| How the 20,000 tokens are chosencompared toPrecomputed bounded subgraph versus ontology-routed SPARQL. | precomputed bounded subgraphPersonalised PageRank, centrality, typed deps, stopping rule against context poisoning. | PromptIntent plus RetrievalPolicyClassify intent, apply policy, requiresHowTo, preferredContextSource. |
| Persist why, not just whataligned withAgreement: decision traces and MemoryWriteTrigger. | four-layer decision traceException, precedent, cross-system synthesis, out-of-band approval. | sessions/*.ttl plus MemoryWriteTriggerWrite the why when the trigger fires. Episodic memory is the trace store. |
| Typed edges versus RELATED_TOaligned withAgreement: both reject generic RELATED_TO. | PREREQUISITE_OF / DEPENDS_ON / PART_OFTyped edges. The type is the instruction. RELATED_TO is a shrug. | requiresHowTo / preferredContextSource / MemoryWriteTriggerOntology properties are typed instructions, never generic related-to. |
| What the agent actually readscompared toDistilled artifact versus SELECT-bounded HowTo Turtle. | a distillationThe compact graph is distilled out; the agent reads that artifact. | one HowTo after SELECTThe agent reads core + ontology + index, then exactly one howto/*.ttl. |
| Where the spinal cord livescompared toBuilt entirely upstream, or built upstream and fired as a SPARQL reflex. | upstream wiring onlyBiology analogy: spinal cord built in advance. Runtime does not invent a path. | SPARQL reflex over prebuilt wiringWiring is still built in advance (ontology + preferences). The reflex is the SELECT. |
The employee asks. The answer exists. The window is 20,000 tokens. The clock is 200 milliseconds. Latency and cost are a dual budget.
McCreary's modeling grain: coarse enough to reason over, fine enough to be useful.
The number CRM knows, without the four-layer decision trace behind it.
Hold loosely: Reasoning Density Score compression claimed for the clinical-trial corpus.
Sparse hub in preferences.ttl; full specs live in howto/*.ttl via rdfs:seeAlso.
Hold loosely: source corpus size in the still-in-preprint Yarmoluk/McCreary benchmark.
Wrong 20,000: hallucination. Right but four seconds: unused. Right, fast, and expensive: the CFO has a problem.
The retrieval path selected a slice that looks similar but is not the decision. The model fills the gaps. That is hallucination dressed as synthesis.
Correct tokens arrived after the conversation had moved on. Unused is a product failure even when the graph is right.
The compact graph McCreary wants costs about a tenth of a cent per query. Unbounded context stuffing does not. The CFO notices.
Vector search asks what looks like this. Business asks what is connected, how, who approved, and the last three times. The spinal cord is built in advance.
Hub-and-spoke: sparse index in memory, full HowTo loaded only after SPARQL SELECT.
Vector search answers what looks like this. Business questions ask what is connected, how, who approved, and the last three times. Biology analogy: spinal cord wiring is built in advance so the signal does not have to invent a path.
The atomic unit is not a document, a table, or a metric. It is a decision: exception logic, historical precedent, cross-system synthesis, out-of-band approval.
Why this case left the default rule. Typed RDF, never RELATED_TO: the exception is a first-class edge with a reason.
The last three times this exception happened. sessions/*.ttl episodic memory is where agent-rdf-memory persists those traces.
Facts that only exist when CRM, ERP, tickets, and a hallway conversation are read together. Virtuoso UDA/ODBC plus named graphs is the plumbing.
The VP in the hallway. MemoryWriteTrigger says persist the why, not just the what, when an approval leaves the system of record.
Acyclic dependency graph. Typed edges rather than RELATED_TO. Grain of 100 to 600 concepts.
A DAG so retrieval can walk prerequisites without looping. Cycles are context poisoning waiting to happen.
PREREQUISITE_OF, DEPENDS_ON, PART_OF. The type is the instruction. A generic edge is a shrug. agent-rdf-memory uses requiresHowTo, preferredContextSource, MemoryWriteTrigger.
Coarse enough to reason over, fine enough to be useful. Nine HowTo themes and 105 steps sit in that band.
Hold loosely: 2.68 million tokens of clinical-trial corpus became a 2,614-token compact KG, roughly 1000x. Reasoning Density Score is F1 over tokens.
Measure the tokens. Hold the 2.68M → 2,614 preprint loosely.
Hold loosely: a still-in-preprint clinical-trial corpus of 2.68 million tokens encoded as a compact knowledge graph of 2,614 tokens, roughly a thousandfold compression, co-authored with Daniel Yarmoluk.
Semantic layers, ISO 11179 definitions, process mining, lineage, provenance, bitemporal modeling. Not new infrastructure.
Business meaning already modeled above the warehouses. The graph should consume that layer, not replace it.
Precise, non-circular definitions. The highest-compression token in the building.
Where the number came from, which job produced it, who signed it. Named graphs plus SPARQL provenance patterns.
Valid time versus transaction time. The hallway approval entered a week later is a bitemporal fact, not a bug.
Single-hop lookup. Corpora without a dependency lattice. Content that churns faster than the graph can be rebuilt.
Already served by a database. Do not pay graph tax for a primary key.
Support tickets and news items are similar, not prerequisite. Vector search is the honest tool.
If the graph cannot be rebuilt before the facts rotate, the compact artifact is a lie about yesterday.
McCreary, with Lentz: the agent reads a distillation and never touches the graph at execution time. OpenLink: the agent SPARQL-queries RDF at session start. Both can be true if the SPARQL SELECT is itself the distillation.
agent-rdf-memory's mandatory retrieval protocol: load core.ttl, load preferences.ttl, overlay private preferences if present, load ontology.ttl, load index.ttl, classify the prompt against PromptIntent, SPARQL SELECT the matching HowTo, load that one howto/*.ttl. File-read fallback is AGENTS.md step 8, not the happy path. The SPARQL hop is the 200-millisecond spinal cord.
Agreeing with Andrew Lentz: authoring the graph and querying it at runtime are separate decisions. Everything below the distillation is authoring. The compact graph is a versioned build artifact, not a second database the agent walks.
Nine steps from core.ttl to one HowTo. That sequence is the 200-millisecond spinal cord: wiring built in advance so the signal does not invent a path.
Load identity and path routing from core.ttl. Do not copy secrets into public graphs.
Load the sparse hub: 9 HowTo themes, 105 schema:step pointers. This is the wiring index, not the full specs.
If a private preferences graph exists, overlay it. Local policy wins without forking the shared hub.
Load PromptIntent, RetrievalPolicy, requiresHowTo, preferredContextSource, MemoryWriteTrigger. This is the router, not the content.
Load the HowTo index so SPARQL can SELECT without opening every howto/*.ttl.
Map the user prompt onto a PromptIntent. Classification is the 200 ms decision of which 20k, expressed as a typed intent rather than a vector nearest-neighbor.
Bounded SELECT: one intent, one HowTo IRI, optional preferredContextSource. Not a graph walk. The result is the distillation.
Load the single selected HowTo. If SPARQL is unavailable, AGENTS.md step 8 permits reading the Turtle from disk. Fallback is degraded mode.
If MemoryWriteTrigger fires, persist why not just what into sessions/*.ttl: exception, precedent, synthesis, out-of-band approval.
The disagreement is real and should stay visible. The synthesis is that ontology-routed SPARQL is the distillation step, not a contradiction of it.
Nine explicit schema:Claim / how-to mappings. Not a slide dump: each step names the problem, the OpenLink mechanism, and the RDF types that carry it.
PromptIntent, RetrievalPolicy, requiresHowTo, preferredContextSource. Topological retrieval, not similarity.
Hub-and-spoke: sparse index in memory, full HowTo loaded only after SPARQL SELECT.
Atomic unit is the decision, encoded as RDF session traces.
Typed edges: exception, precedent, synthesis, approval.
Right grain, DAG, typed deps. Not a vector soup.
Measure the tokens. Hold the 2.68M → 2,614 preprint loosely.
Not new infrastructure. Virtuoso is the existing spinal cord hardware.
First-class disagreement. Both claims stay in the graph, linked by disagreesWith.
Degraded mode. Do not confuse file-read with the protocol.
Mandatory retrieval sequence from README, AGENTS.md, and SESSION-START-HOOK.md. SPARQL preferred; file-read is step 8 only.
Load identity and path routing from core.ttl. Do not copy secrets into public graphs.
Load the sparse hub: 9 HowTo themes, 105 schema:step pointers. This is the wiring index, not the full specs.
If a private preferences graph exists, overlay it. Local policy wins without forking the shared hub.
Load PromptIntent, RetrievalPolicy, requiresHowTo, preferredContextSource, MemoryWriteTrigger. This is the router, not the content.
Load the HowTo index so SPARQL can SELECT without opening every howto/*.ttl.
Map the user prompt onto a PromptIntent. Classification is the 200 ms decision of which 20k, expressed as a typed intent rather than a vector nearest-neighbor.
Bounded SELECT: one intent, one HowTo IRI, optional preferredContextSource. Not a graph walk. The result is the distillation.
Load the single selected HowTo. If SPARQL is unavailable, AGENTS.md step 8 permits reading the Turtle from disk. Fallback is degraded mode.
If MemoryWriteTrigger fires, persist why not just what into sessions/*.ttl: exception, precedent, synthesis, out-of-band approval.
An employee asks a question whose answer is split across systems never designed to be read together. The model accepts roughly 20,000 tokens. The retrieval path has about 200 milliseconds to choose which 20,000. Latency and cost are a dual budget.
Wrong 20,000 tokens: the model hallucinates. Right tokens in four seconds: unused. Right, fast, and expensive: the CFO has a problem.
No. McCreary: the graph is wiring inside a context layer, not the context layer itself. Vector search asks what looks like this. Business asks what is connected, how, who approved, and the last three times.
A decision trace, not a document, table, or metric. Four layers: exception logic, historical precedent, cross-system synthesis, out-of-band approval. CRM knows the 22 percent discount; it does not know the hallway approval.
An acyclic dependency graph, typed edges (PREREQUISITE_OF, DEPENDS_ON, PART_OF) rather than RELATED_TO, and a grain of 100 to 600 concepts.
F1 over tokens. Hold loosely: a still-in-preprint clinical-trial corpus of 2.68 million tokens encoded as a 2,614-token compact knowledge graph, roughly 1000x, co-authored with Daniel Yarmoluk.
No. Semantic layers, ISO 11179, process mining, lineage, provenance, bitemporal modeling. OpenLink maps them onto Virtuoso named graphs, SPARQL, and UDA/ODBC. Prukalpa Sankar: a graph on ungoverned content is a semantic-layer failure with better response times.
Single-hop lookup already served by a database. Corpora without a dependency lattice, such as support tickets or news. Content that churns faster than the graph can be rebuilt.
No. That disagreement is first-class. McCreary, with Andrew Lentz: the agent reads a distillation and never touches the graph at execution time. OpenLink agent-rdf-memory: mandatory SPARQL at session start (core, preferences, ontology, SELECT one HowTo). The SELECT is a bounded distillation; that hop is the 200-millisecond spinal cord.
Ontology-routed SPARQL. Classify the prompt as a PromptIntent, apply RetrievalPolicy, follow requiresHowTo and preferredContextSource, SELECT one HowTo. Topological, not cosine-similar.
A sparse index of 9 HowTo themes and 105 schema:step pointers. Full specifications live in howto/*.ttl behind rdfs:seeAlso. Progressive disclosure is the distillation the agent actually walks.
AGENTS.md step 8: read the HowTo Turtle from disk. Fallback is a degraded spinal reflex, not the architecture. Happy path remains ontology-routed SELECT.
sessions/*.ttl episodic memory plus ontology MemoryWriteTrigger. Persist why, not just what, when exception logic, precedent, cross-system synthesis, or out-of-band approval fires.
Andrew Lentz, in Your Agent Doesn't Need to Walk the Graph. Lentz: storing context in a graph can be right; hooking that graph up to the agent almost never is. McCreary agrees on the authoring side. OpenLink still queries RDF at session start, but as a bounded SELECT rather than a walk.
RDF query language. In agent-rdf-memory it is the 200-millisecond spinal cord: ontology-routed SELECT against named graphs after prompt-intent classification.
McCreary's retrieval ranking: personalised PageRank seeded on entities in the question ranks which related records bear on this query rather than on the graph as a whole.
Metadata registry standard McCreary cites for precise, non-circular definitions — the highest-compression token in the building.
McCreary: the graph is wiring inside a context layer, not the context layer itself. OpenLink: a queryable RDF memory the agent SPARQL-selects at session start.
W3C graph data model. agent-rdf-memory encodes the behavioral contract, preferences, ontology, and session traces as RDF-Turtle.
RDF serialization used as the compact, versioned build artifact. McCreary's reasoning-density argument: Turtle over stuffed markdown.
McCreary's atomic unit of useful context: exception logic, historical precedent, cross-system synthesis, and out-of-band approval. Not a document, table, or metric.
F1 divided by tokens. Hold loosely: 2.68 million tokens of clinical-trial corpus to a 2,614-token compact KG, roughly 1000x, in the still-in-preprint Yarmoluk/McCreary benchmark.
agent-rdf-memory ontology class. Classifying the user prompt against PromptIntent is how the 200-millisecond token choice is made without vector similarity.
preferences.ttl holds sparse schema:step pointers (9 themes, 105 steps). howto/*.ttl holds full specs via rdfs:seeAlso. Progressive disclosure is the distillation.
Ontology signal to persist why, not just what, into sessions/*.ttl when a decision-trace layer fires.
McCreary: personalised PageRank, centrality, typed dependencies, and a stopping rule against context poisoning. OpenLink: SPARQL SELECT of one HowTo.
Valid time versus transaction time. The hallway approval entered a week later is a bitemporal fact, not a bug.
What happens without a stopping rule: the model drowns in related-but-not-bearing records. A bounded retrieval is a bounded token count.
McCreary's biology analogy: wiring built in advance so the signal does not invent a path. OpenLink: the 9-step SPARQL retrieval protocol is that reflex over prebuilt wiring.
Interactive graph visualization derived from the companion RDF. Click nodes to resolve, drag to explore. Graph data embedded from companion RDF at generation time.
Query this knowledge graph on URIBurner. The editor opens on the canonical SAMPLE entity-type summary (DAV named graph). Pick a recipe, edit freely, then run live or copy.
Reproduced verbatim from the companion RDF. Execute loads the query into the workbench below and runs it live.
PREFIX : <https://contextandchaos.substack.com/p/enterprise-ais-200-millisecond-problem#>
PREFIX schema: <http://schema.org/>
SELECT ?claimIri ?claim ?mappingIri ?mapping
FROM <https://linkeddata.uriburner.com/DAV/demos/daas/enterprise-ais-200-millisecond-problem-agent-rdf-memory-grok-1.ttl>
WHERE {
?claimIri a :ThesisClaim ;
schema:name ?claim ;
:mapsProblemTo ?mappingIri .
?mappingIri schema:name ?mapping .
}
ORDER BY ?claim
PREFIX : <https://contextandchaos.substack.com/p/enterprise-ais-200-millisecond-problem#>
PREFIX schema: <http://schema.org/>
SELECT ?leftIri ?left ?rightIri ?right
FROM <https://linkeddata.uriburner.com/DAV/demos/daas/enterprise-ais-200-millisecond-problem-agent-rdf-memory-grok-1.ttl>
WHERE {
?leftIri :disagreesWith ?rightIri ;
schema:name ?left ;
schema:description ?leftDesc .
?rightIri schema:name ?right .
FILTER(STR(?leftIri) < STR(?rightIri))
}
PREFIX : <https://contextandchaos.substack.com/p/enterprise-ais-200-millisecond-problem#>
PREFIX schema: <http://schema.org/>
SELECT ?stepIri ?position ?name
FROM <https://linkeddata.uriburner.com/DAV/demos/daas/enterprise-ais-200-millisecond-problem-agent-rdf-memory-grok-1.ttl>
WHERE {
?stepIri a :RetrievalProtocolStep ;
schema:position ?position ;
schema:name ?name .
}
ORDER BY ?position
PREFIX : <https://contextandchaos.substack.com/p/enterprise-ais-200-millisecond-problem#>
PREFIX schema: <http://schema.org/>
SELECT ?dimIri ?dimension ?subjectIri ?subject ?stance
FROM <https://linkeddata.uriburner.com/DAV/demos/daas/enterprise-ais-200-millisecond-problem-agent-rdf-memory-grok-1.ttl>
WHERE {
?pos a :ComparisonPosition ;
:ofDimension ?dimIri ;
:ofSubject ?subjectIri ;
:stance ?stance .
?dimIri schema:name ?dimension .
?subjectIri schema:name ?subject .
}
ORDER BY ?dimension ?subject
DESCRIBE <https://contextandchaos.substack.com/p/enterprise-ais-200-millisecond-problem>
FROM <https://linkeddata.uriburner.com/DAV/demos/daas/enterprise-ais-200-millisecond-problem-agent-rdf-memory-grok-1.ttl>