AGENTICAMIT // GRAPH ENGINEERING an engraving of durable memory

AgenticAmit // sheet 1 of 1 // section view

The agent forgets. The graph does not.

Every run dies with its transcript. Graph engineering gives the system one durable world model: typed records, canonical nodes, edges with receipts. Each run borrows context from the graph and pays new records back in. Scroll the cycle. Then watch a week use it.

Op 01// write1 of 5

The transcript dies. The record does not.

A run's finding leaves as a typed record with fields, not as prose in a chat log. Not context dumping, not a summary: a claim you can query later.

the write-back, one structured output

{ "entity": "export_bug",
  "claim": "2.4.1 fixes the CSV drop",
  "source": "commit_8f31c",
  "confidence": 0.92,
  "run": "run_mon_0822" }
# the transcript: 41k tokens, gone

// summaries are prose too. If it matters, it becomes a record with a source on it.

Op 02// resolve2 of 5

Three names. One node.

"Bug #412", "the CSV export bug" and export_bug are the same thing. Resolution merges surface forms into one canonical node, and keeps its receipts.

the merge, reversible on purpose

canon: export_bug
  aliases: ["bug #412",
    "the csv export bug"]
  rationale: "same stack trace"
  confidence: 0.88
  reversible: true  # keep the undo

// a false merge contaminates every query downstream. Resolution without receipts is guessing.

Op 03// connect3 of 5

The graph is made of receipts.

Edges are typed, and every one carries its source. Nobody draws the structure by hand; it assembles from evidence, one edge at a time.

the edge log, provenance attached

e2 ticket_5803 MENTIONS export_bug
     src: ticket text · 08-19
e3 commit_8f31c FIXES export_bug
     src: commit message
e4 claim_112 SUPPORTED_BY commit_8f31c
e5 run_mon PRODUCED claim_112

// an edge without a source is an opinion.

Op 04// retrieve4 of 5

Borrow a subgraph, not the world.

The context builder resolves the task's entities against the graph, expands a hop or two over allowed edge types, prefers recent verified claims, and stops at the budget.

the context builder, bounded by design

q   = resolve(task.entities)  # 2 nodes
sub = expand(q, hops=2,
        edges=[MENTIONS, FIXES])
sub = rank(sub, recent, verified)
ctx = serialize(sub, max=1800)
# 5 nodes, 4 edges. not a dump.

// retrieval is per decision: this task, these hops, this budget. The graph is not the prompt.

Op 05// ground5 of 5

Evidence or it did not happen.

Before an answer ships, an evaluator walks the graph. Every claim must ride on edges; a claim with no path comes back as work to do, not as a warning.

the evaluator, edges as the bar

check("2.4.1 fixes the CSV drop")
  path: claim_112 → commit_8f31c
        → export_bug
  verdict: pass · cite [e4, e3]
no path?
  { "decision": "revise",
    "required_evidence": [...] }

// the evaluator returns instructions, not adjectives.

The question// graph or table

Most systems do not need this.

A graph earns its cost only when connection and persistence are the point. Three honest checks, then take the boring option if you can.

the gate, three checks

must facts survive the run?   [y/n]
do queries span 2+ hops?      [y/n]
does provenance matter?       [y/n]
all yes → build the graph
any no  → a table is fine
# this system: yes · yes · yes

// nobody gets credit for a graph. They get credit for answers that hold up.

That is the whole cycle.

now let three runs use it

Live// mon · wed · fri, one graph

Runs come and go. The graph keeps score.

Three sessions across a week, none sharing a transcript. Each borrows a subgraph, works, and pays records back in before it dies.

  • borrow: walk the billing subgraphmon
  • pay in: ticket_6110 is a duplicatemon
  • claim: 2.4.1 closes the complaintswed
  • ground it: included_in edge exists?wed
  • walk the four-hop pathfri
  • answer, citing e1 e2 e3 e6fri

// wednesday asserted without evidence. The graph refused it and named the missing edge. It got the edge.

Held// the world model3 runs · +8 records

Friday never met Monday.

The FRI run answered a four-hop question it could never answer alone, on edges other runs paid in. The runs are gone. The path is still there.

the answer, citing its path

Q: did 2.4.1 close what billing
   was complaining about?
A: yes.
  ticket_5803 MENTIONS export_bug
  FIXED_BY commit_8f31c
  INCLUDED_IN release_2.4.1
  cited: [e1, e2, e3, e6]

// grounded means the path exists. Ask the graph, not the vibe.

The drawing, complete

Build the part that remembers.

Models get swapped. Transcripts get truncated. The graph is the one part of the system that compounds: every run borrows from it and pays back in, and the interest is a world model any later agent can query.

Graph Engineering · an AgenticAmit engraving.