Skip to content

Check the chain has not been changed

Machine verified A machine ran this on our install and checked the result against the CLI. A test report is linked. CLI 0.3.1, checked 2026-10-15.

Has the record been tampered with?

Walk the witness chain link by link and prove, from your own terminal, that nothing was changed after the fact.

What you get: confidence that the record itself is intact. One receipt proves one event; this proves nobody rewrote the history around it.

Ask how the witness is doing, in your own words:

quox · talking to Quox

Is the evidence witness healthy? How many entries are in the chain and how many witnessing errors are there?

▤ AOCL │ L1 identity complete · allowed · 0ms

▤ AOCL │ L3 policy gate complete · proceed · 6ms

◐ WARD │ status ✔ WARD │ status │ 4761452 org entries · 5.6s

⛓ AEE │ envelope opened · stream_success

Yes, the witness looks healthy. It reports 0 witnessing errors, it is enabled, and it
last witnessed something at 14:19:11 UTC today, just now.

• Entries: the chain holds 4,802,143 entries across 3 chains, with 47,545 signed tips.
  4,761,452 of those entries belong to this org.
• Witness counters: the collector ( ward:collector ) has witnessed 28,747 events and
  skipped 142 duplicates. Duplicates are repeat submissions it ignored, not failures. I
  can't tell from this read what period those two counters cover. They are much smaller
  than the chain total, so they may only cover the time since the collector last
  started.

This was a status read only. I haven't run a full integrity check on the chain, so I
can't say there are no gaps or tampering. I can run that check if you'd like.

23.4s · 1 tool · 0 approvals

A real turn on our own install (CLI 0.3.0, 16 Oct 2026), replayed at speed. Names changed. Type the same words into quox.
✔ Machine verified against the CLI on 16 Oct 2026 · test report mvb1zr

Quox read the witness status and gave you the totals: how many entries the chain holds and how many witnessing errors there are. It read the counts only. Verifying a stretch of the chain is what the steps below do.

the witness at a glance
quox governance ward statusWARD Status─────────────────────chains            3entries           4221418tips              41796enabled           yesissuerId          ward:collectorduplicates        0errors            0lastWitnessedAt   2026-10-13T20:34:00.763Zquox governance ward chainsChain ID                                Createdward:meta/quox-global                   2026-03-17T13:41:11.595Zward:org/quox/env/production            2026-03-14T08:02:22.509Z
From a real run on our own install. One plugin chain and two counters left out.

A chain can hold millions of entries, so you verify it in slices. This slice covers the receipt from Check a receipt yourself:

verify a slice
quox governance ward verify --chain ward:org/quox/env/production --from-seq 4171150 --up-to-seq 4171210WARD Verify: ward:org/quox/env/production──────────────────────────────────────────────────status                PARTIALentry_count           4179789head_seq              4171210head_chain_hash       564b09878663d3ee5596097c4e161628ba64a332d50d4edc0d138d03e...genesis_verified      noverified_range  from: 4171150  to: 4171210tips_verified         1signatures_verified   1warnings              []reason                WINDOWEDChain status: verified bounded (seq 4171150..4171210 of 4179789); page with --from-seq/--up-to-seq for full coverage.
From a real run on our own install. Hashes shortened by the CLI.

PARTIAL with reason WINDOWED is a pass for the slice you asked for: every link from 4171150 to 4171210 re-hashed correctly, and the one signed tip inside it verified. It is called partial because the rest of the chain was not part of this check, and the CLI says so rather than rounding up to “verified”.

To check from the very first entry, start at 1. genesis_verified: yes then tells you the chain’s first link is the real one:

Terminal window
quox governance ward verify --chain ward:meta/quox-global --from-seq 1 --up-to-seq 50

You re-computed the chain’s hashes yourself and checked its signatures. If anyone had edited, removed or reordered an entry in that range, a hash would not match and the status would say so.

Page through a whole chain by moving the window: --from-seq 1 --up-to-seq 50000, then --from-seq 50000 --up-to-seq 100000, and so on. Each call is bounded so it stays quick.

Nothing to undo: verifying only reads.