Loading

Verifying the Chain and Reading Gaps

A chain is only useful if it is checked. Verification walks the entries, recomputes the hashes and confirms they still agree.

Where to find it

Architect Panel → Activity:

  • Audit Chain — the head, last verified time, state and message for each datastore
  • Activity Log — the entries themselves
  • Error Log — where a failed verification run is likely to surface

What the chain head records

  • Datastore — which chain this is.
  • Head sequence and head hash — the current end of the chain.
  • Last sealed — when the head was last advanced.
  • Last verified — when it was last checked.
  • Verify state and message — the result, and what it was.

Reading the state

A good state means the entries recomputed to the hashes they carry, and the head matches. That is a positive statement about the whole history, not just the recent part.

A failure means the recomputation disagreed somewhere. The message identifies where, which is the starting point for everything that follows.

Check last-verified, not just the state

A chain showing a good state but last verified eight months ago is telling you about the world as it was in December. The state and the date have to be read together — this is the single most common misreading of the screen.

Gaps

Detected gaps are recorded rather than glossed over. A gap means the sequence skips, which is what deletion looks like from inside the chain.

Not every gap is sinister — a restore from backup that replayed part of a table, or a maintenance operation done outside the application, can produce one. But every gap needs an explanation that somebody wrote down at the time, because an unexplained gap is indistinguishable from a covered track.

When verification fails

  1. Do not correct anything. Repairing the chain destroys the evidence of what happened to it.
  2. Record the state, the message and the timestamp as you found them.
  3. Establish what has direct database access, and check whether a restore, migration or manual operation happened around that sequence.
  4. Escalate — a genuine chain failure is a security incident, not a maintenance task.

The instinct to tidy it up is strong and it is exactly wrong. A broken chain that has been repaired tells you nothing at all.

Verify on a schedule

Regular verification narrows the window in which a problem could have arisen. Verified monthly, a failure is localised to a month; verified once a year, it is localised to a year — and a year is usually long enough that nobody can reconstruct what happened.

Operations outside the application break chains

This is the practical warning. A bulk update run directly against the database, a partial restore, a data migration executed in SQL — all legitimate operations, all capable of breaking a chain.

Plan for it: do such work through the application where possible, and where it is not, record what you did and when, so the resulting gap has a contemporaneous explanation rather than a reconstructed one.

Worked example

A monthly verification returns a failure on one datastore. Nothing is touched. The message points at a sequence range matching a weekend when a partial restore was performed after a storage incident, and the change record for that work confirms it. The explanation is attached to the incident record, verification is re-run to establish a new clean baseline, and the event is closed as understood rather than as unexplained.

Recommendations

  • Verify monthly and read the last-verified date, not only the state.
  • Never repair a broken chain.
  • Document any operation done outside the application, at the time.
  • Treat an unexplained gap as an incident until it is explained.