Docs menuThe graph

smalltalk pre-release

The graph

The graph is smalltalk's memory: an append-only log of immutable claims. A claim is a typed fact about a subject, such as agent/example/worker, mission-run/example/first-note/1 or person/ada.

Everything smalltalk knows is a claim: that a seat was declared, a run started, a step was claimed, a gate passed, a person approved.

State is a projection

What you see in st missions ls or st work ls isn't stored as rows that get updated. It's a projection: current state computed from the claims. A run's status, a seat's queue and your attention inbox can all be rebuilt from the log.

That's why nothing depends on a particular process staying up. A harness can crash, the daemon can restart, the machine can reboot, and the state is still there.

st missions show mission-run/example/first-note/1
st subject show agent/example/worker

History is never edited

  • Claims are immutable. Nothing rewrites history.
  • A repair adds a replacement fact, and the original stays for inspection.
  • Invalid data stays visible, but only affects its own subject. One bad record can't stop unrelated reads, writes or replication.

Across machines

Each machine keeps its own graph and is a complete system on its own. Machines in a fleet converge by exchanging authenticated claims, carried over fabric. The order in which claims arrive can't change the result: every machine settles on the same current state.

Two meanings of "claim"

The word does double duty. A claim in the graph is a fact. An agent claiming a step is taking a lease on work, which is itself recorded as claims. Context usually makes it clear which one is meant.

Results belong in the graph too. A step completes with its result, or cites a stored document. A report sent as a message is conversation, and the graph can't check it.