← Back to docs

State over time · what fasten records that observability doesn't

Metrics, logs, and traces answer "what is my system doing right now, and what did it do recently?" fasten answers a different question: "what did my system commit to at timestamp T, and can I reconstruct that state exactly?" This is the temporal anchor of the positioning triangle.

Audience. Compliance officers, platform architects, and engineering leads evaluating whether "state over time" is a real capability or a marketing phrase. This page shows the primitives, the query, and when you actually need it.

Three questions observability cannot answer

Every observability stack answers point-in-time or windowed signal. None reconstruct state.

  1. "What did entity acct_042 believe about field risk_tier at 09:14 UTC?" Metrics are aggregate counts; they don't carry the field value at an entity. Logs are lines; they capture writes but not the derived belief. Traces are spans; a trace shows a request, not a stored fact.
  2. "Between 09:00 and 10:00, what was the ordered sequence of state commits to entity X?" A trace shows spans within one request. A log query returns matching lines but no guaranteed order across services or across languages. fasten's monotonic_seq is the total order per chain.
  3. "Has any row committed before now been altered since it was written?" The single question tamper-evident audit exists to answer. Metrics and logs offer no answer. Traces have no answer. fasten's hash chain answers deterministically.

The four primitives that make state replayable

Every fasten audit row carries four fields whose only job is making state queryable across time.

PrimitiveWhat it isQuestion it answers
monotonic_seqPer-chain total order counter; strictly increasing, no gaps."In what order did commits land?"
prev_hash + hashSHA-256 chain over the canonical row form."Was this row altered since it was written?"
canonical_form_idVersion identifier for the row's semantic schema."How do I decode a row written by an older SDK?"
last_verifiedTimestamp of the last time the chain was checked from this row backward."When did we last prove integrity?"

Together they give the reader a way to ask what state existed at any prior timestamp, and the auditor a way to prove that state was not rewritten.

A worked question

A regulator asks: "On the morning of 2026-08-14, what was your credit-scoring service's belief about applicant acct_042's risk tier when it decided to reject the loan?"

Against a metrics-and-logs stack, the answer is a reconstruction: pull logs for that request_id, hope the belief was logged verbatim, correlate with a metric time series, tell a story. Against fasten, the answer is a query:

GET /logs/audit?target=acct_042&as_of=2026-08-14T09:14:00Z&field=risk_tier

The reader returns the belief row that was current at that timestamp, plus its prev_hash so the auditor can verify no row between then and now has been rewritten. The reconstruction is a query, not a narrative.

The ?as_of= parameter requires membrane's bitemporal view (issue P1-32). fasten's audit rows carry the primitives; membrane exposes the state-at-time query surface built on them.

When you need this

When you don't

fasten

The audit substrate for distributed systems, and the belief layer for the AI agents on top of them.

Products
fastenmembranefasten fleet
Resources
DocsHow It WorksWhy fastenContact
© 2026 fasten · nerdAppLabs Software Solutions Pvt. Ltd.SDK Apache-2.0 · membrane & fleet commercial