One agent, one context window. Plan, act, verify, repeat — then go round again.
Many nodes over one shared state, with the edges between them written in code.
The boxes and the arrows — and you draw both, before anything runs. The model does the work inside a box. The graph decides which box is next.
One job with one worker on it — a model with its own context, tools and permissions, or plain code. Inside, it may loop as long as it likes. Outside, it is one input and one output.
A dependency — not “and then”. This node’s output is that node’s input. The test: can you name the variable that crosses it?
Five kinds, and only five: sequential · fan-out · join · conditional · human
Fan-out and join are where the parallelism lives — it comes from the edges, not from the nodes.
One typed record every node reads and writes, so evidence accumulates in one place instead of four transcripts. Its fields merge rather than overwrite — which is what lets three nodes write in the same superstep without racing.
No vendor RCA, no backport to ask for, no one to escalate to. The path ends with us — at 2am, on the night the interface is down.
No Runtime Manager, no Anypoint Monitoring. The evidence is files on a box — logs, a pom, per-env YAML — not a dashboard that correlates them for you.
Every known error is one we wrote down ourselves. Miss that, and the next occurrence is researched from scratch by whoever is on call.
Build and application output — and, just as often, which log does not exist.
build.log · app.logHas this signature been seen before, and was it ever written down?
known-errors/*.mdFlow XML: which attributes were set, and — harder — which were quietly omitted.
src/main/mule/*.xmlConnector and runtime versions, enforcer rules, token substitution.
pom.xmlThe prod-versus-uat delta nobody diffs until something breaks.
*-prod.yaml · *-uat.yamlWhat the platform assumes when you say nothing at all.
mule-artifact.jsonA copy change, a test, an isolated function with coverage. One bad merge costs a revert.
A shared utility, a schema addition, anything a dozen callers touch.
Migrations, deletions, anything writing to production data — or a change to a live integration between SAP and the storefront.
Flow, build and config are independent sources, so they are one superstep. A loop has one cursor — and the order it picks quietly becomes a hypothesis.
FlowTrace ‖ BuildDependency ‖ ConfigConnectorA hypothesis survives only if supporting evidence was found and nothing refutes it. That is a property of the node, so it happens on every run.
Diagnosis — the 0.0s you will see liveIt sits on the only path from diagnosis to judgment. A root cause you cannot reproduce is a hypothesis, and the output says so.
Validation — a real Maven buildThe one cycle in the graph. Return the unit, not the batch — the specialists do not re-run, because nothing they saw changed.
Validation → DiagnosisThe run stops because there is no edge forward until a person acknowledges. Confidence does not unlock it.
route_after_judgment — unconditionalSupersteps are discrete, so the protected trees are re-hashed after every one. A node that edited the application stops the run.
policy.py · 127 testsOne pass. Hypothesis matrix, eliminate with evidence including absence, one surviving cause, and the smallest layer-scoped fix. Most SEV3/4 faults close here.
Opus 4.8A separate, independent RCA from the same ledger. It never sees RCA-A — no cross-talk, no anchoring. Runs only when a trigger fires.
GPT-5.5 · SEV1/2 · contested readingEvidence over eloquence. Adopts where they agree, resolves disagreement by the stronger verifiable evidence — never averages. May demote an unverified claim, or send a pass back to read a missing source.
Sonnet 4.5 · owns the final verdictcd graph-engineering
./mule-triage-command-graph/run.sh
# http://localhost:7080
cd mule-triage-command-graph # compiled nodes and edges ../.venv/bin/python runner/inspect_graph.py # LangGraph’s own checkpoints ../.venv/bin/python runner/inspect_graph.py \ --db .triage-work/graph.sqlite
Loops and Graphs — @hanakoxbt, Aug 2026. The correction edge, and gating on blast radius rather than confidence.
Loop vs Graph engineering — @Sumanth_077, Sep 2026. The loop/graph distinction, and a loop as one node inside a graph.
From Loops to Graphs — @kirillk_web3 / Kimi K3, Sep 2026. “One node does the work, another watches it.”
从 Loop 到 Graph — 15-minute walkthrough, Sep 2026. The five-layer stack.
Internal Confluence Issues & Solutions, space SYSINT.
Hash. Protected trees are content-hashed after every superstep; any change raises PolicyViolation and stickily halts the run.
Scan. The outcome is rejected if it carries an applied, merged or deployed marker, or if implementation_performed is not false.
Confine. Writes are restricted to a scratch directory; validation runs on a copy, because the archetype’s own build rewrites source in place.
Prove. A test asserts the drawn topology equals the compiled graph — that is how we found an advertised gate bypass.
The primary scenario MT-001 is a documented fallback. The originally intended primary — the last Mule 4 issue validation — could not be recovered from session memory, which returned no rows. MT-001 was chosen deliberately, not silently.