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.