Durable Truth
Problem
Section titled “Problem”Agent applications need a source of truth that survives retries, process eviction, UI disconnects, and provider failures.
The ledger is durable truth. Triggers append terminal facts. Projections fold ledger facts and never write shadow truth. Transport frames, provider material, and local UI state are not truth unless a handler commits them as facts.
Each ledger fact has structured identity:
scopeRefis the truth scope.effectAuthorityRefis the effect/capability authority. Authority version is part of the key.factOwnerRefis the package owner for the event kind.
factOwnerRef and effectAuthorityRef are deliberately separate. Effect
authority says which capability is allowed to do work; fact ownership says which
package is allowed to write a durable event kind. A submit path may return a
SubmitResult, but that return value is derived from terminal ledger facts and
is not a second durable record.
Old scope:string ledger rows are not a compatibility format. Backends must
fail fast on legacy schema rather than infer new identity from old rows.
Non-Goals
Section titled “Non-Goals”This concept does not define live streaming, provider credentials, or application authorization.