Skip to content
DOCUMENT / STATEMIRROR

StateMirror Evidence Workbench

Change example evidence and compare it with a fixed StateMirror receipt. Verification runs locally in your browser; evidence is not transmitted.

10 seats allowed. 10 seats occupied. The application denied another seat for customer_123 and submitted the evidence below. StateMirror preserved the submitted JSON and returned a receipt.

Now alter a local copy and compare it with that same receipt.

FIG 01 / JSONTX_EVIDENCE
{
  "subject": "customer_123",
  "inputs": {
    "plan_status": "active",
    "seats_used": 10,
    "seat_limit": 10,
    "read_at": "2026-06-15T18:22:30.000Z"
  },
  "rule_version": "access-rules@2026.06.12",
  "decision": "deny",
  "reason": "seat_limit_reached",
  "correlation_id": "request_001"
}
Original application-submitted state_payload. Its shape is an example, not a required schema.
FIG 02 / JSONRX_RECEIPT
{
  "snapshot_id": "71be5886-a779-4c28-ae90-c389165c90a2",
  "sequence_num": 1,
  "received_at": "2026-06-15T18:22:31.120Z",
  "payload_hash": "PbQTKH7/sGHUg+GjB0acqsNluk4DuU42HAZaHUwQ5r4=",
  "chain_hash": "NZpNkbVJ5z7OzkbmqpiGM89RqzAA9A0+eUVvAyUPkOg="
}
Fixed, abbreviated receipt. ID and time are illustrative; hashes are computed from Core. Edits never replace these values. The service interface exposes no snapshot update or delete operation.

Change one part of the evidence.

Example state_payload fields

Choose 9 seats or change deny to allow. The stored receipt stays fixed.

TEST 03 / BROWSER-LOCAL / SEQUENCE 001INTEGRITY_VERIFY
LOCAL CHECK /PASS
PAYLOAD HASH
MATCH
CHAIN HASH
VALID
RESULT
PASS
STORED / payload_hash
PbQTKH7/sGHUg+GjB0acqsNluk4DuU42HAZaHUwQ5r4=
CURRENT / recomputed payload hash
PbQTKH7/sGHUg+GjB0acqsNluk4DuU42HAZaHUwQ5r4=

The displayed payload matches the fixed receipt. The first record’s chain hash also matches after recomputation using a null predecessor.

Local demonstration of the sequence-1 checks, not a StateMirror API response or a history-wide verification. Hashes cover state_payload, not the complete request envelope.

Inspect the difference.

No differences. The displayed evidence matches the original example.

These edits do not reevaluate the decision or change other fields. Integrity verification checks what was preserved, not whether the application’s decision makes sense.

Inspect the canonical JSON being hashed
{"correlation_id":"request_001","decision":"deny","inputs":{"plan_status":"active","read_at":"2026-06-15T18:22:30.000Z","seat_limit":10,"seats_used":10},"reason":"seat_limit_reached","rule_version":"access-rules@2026.06.12","subject":"customer_123"}

What this check establishes.

#

The displayed payload either matches the stored payload hash or it does not. On a match, this example also recomputes the first record’s chain hash: sequence 1, its payload hash and 32 zero bytes for the null predecessor.

See how later records link to this chain →

What it does not establish.

#

This does not establish independent historical truth, correct input facts or a correct application decision. A privileged database administrator able to rewrite records and recompute integrity metadata remains inside StateMirror’s documented trust boundary. Stored hashes alone do not detect every chain-suffix deletion.

Security & Operations →

Run the real thing.

#

Use Core’s Quickstart to submit, retrieve and verify evidence in your own environment.

Run StateMirror locally