Proof, not logs. / Examination pack

The record. Its context. The proof.

When someone asks why a decision happened, hand over a pack they can inspect.

This sample brings together three synthetic security exception decisions, their source inputs and receipts from the running local ledger.

Demonstration with synthetic records. The download works today. Roadmap Hosted one-click pack generation and customer-export upload.

01 / Know what was collected.

This pack contains exactly the three submitted record IDs listed below. It is not a whole-tenant export and does not establish that all relevant decisions were captured.

Pack ID
recourse-copy-pack-v1
Tenant
demo-tenant
Issued at
2026-09-09T23:59:46.347Z
Query
Explicit record ID selection; no semantic search The exact selection that produced this population. A pack without its query is a claim, not evidence.
Filters
none None. The population was selected by explicit record ID, not by a filter.
Population
Exactly the three records submitted in source-inputs.json using request key recourse-copy-pack-v1; not the whole tenant. 3 matched, 3 included, 0 not included Matched is what the query returned. Included is what this pack ships.
Collection cutoff
2026-09-09T23:59:46.347Z The instant the population was fixed. Nothing recorded after it can be in this pack.
Ingestion watermark
sequence 7 How current the underlying data was when this pack was collected. It is not a claim that the tenant is complete.
Index version
none No search index produced this population, so there is no index version to state.
Missing evidence
Every record in the stated population is included. 3 matched the query, 3 are in this pack, 0 were left out. 5 further categories are recorded as not supplied for the included records: Policy text and policy validity dates are not supplied; only policy reference strings are recorded; Approvals, approver identity, review dates, corrections and supporting attachments are not supplied; No original external export, upstream authenticity evidence or historical custody trail is supplied; these are synthetic API inputs; Private inputs are empty objects; no hidden rationale or private attachment can be recovered from this sample; No independent time evidence, search index or complete-tenant collection is claimed.
Pack hash
e98b9e2aa30e4d3d1d76a2e706a324c93bb93e847a88a83153d639799cb93e2f SHA-256 over the canonical scope statement and the SHA-256 of every evidence file. Recompute it from the extracted bytes.
Recipients
none No recipient was recorded. This pack was not issued to a named party.
Verification
3 of 3 receipts verified. Verified · dev signer Development signer means integrity under a published dev key and no independently trusted time.
Searchable-through
Not available in this preview There is no search index here, so nothing states how far search coverage reaches. It is separate from receipt state and is never a durability state.

Semantic search cannot establish completeness. Exact selection defines this pack's scope; it cannot reveal records the source never submitted. The same rows are written into pack.json and VERIFY.txt inside the download.

How the pack hash is made. pack_hash is the SHA-256 of canonical JSON (keys sorted, no whitespace) over {format:"recourse-pack-hash-v2", pack_id, tenant_id, issued_at, scope, collection_cutoff, ingestion_watermark, index_version, missing_evidence, recipients, included_adr_ids, chain_of_custody, evidence}, where every field except evidence is copied verbatim from pack.json and evidence maps each receipt file name, trust.json, SYSTEM-DESCRIPTION.txt and CERTIFICATION-TEMPLATES.txt to the SHA-256 of its extracted bytes. Issued at and Collection cutoff are inside the bytes this hash covers, so the stated scope cannot be changed without changing the hash. It does not cover VERIFY.txt, pack.json or MANIFEST.json, which are unsigned wrapper.

Received, Durable and Sealed dates are covered by the receipt proof. Received and Durable sit inside the hashed chain entry, Sealed sits inside the signed root, so the verifier detects a change made to any of them after sealing. They are still times this service asserts from its own clock, and the development signer supplies no independently trusted time. Recorded-at is inside the hashed envelope. Seal lag is calculated from the Sealed-at inside the signed root, which is the value these pages render.

02 / Read the source records.

These are synthetic imported-history examples. Their August event dates are source claims made for the demonstration. Recourse received, recorded and sealed them later; it did not backdate their seals.

Received means acknowledged. Durable means committed to the configured persistence layer. Sealed means included in a signed root with a receipt. Acknowledged is not durable.

Download the exact submitted JSON · Download the actual acknowledgement

Decision 1: allow

Sealed

security.exception.evaluate · policy_synthetic_v1

Record ID
01M249KB1Z00Z6BNQDYVG1JZ77
Tenant sequence
5
Claimed event date
(synthetic source claim)
Received at
Recorded at
Durable at
Sealed at
Seal lag
52,477 ms from recorded-at to sealed-at, measured on the local clock

Download decision 1 receipt

Read decision 1 source input
{
  "schema_version": "1.0",
  "occurred_at": "2026-08-01T12:00:00.000Z",
  "subject_id": "copy-pack-synthetic-1",
  "actor": {
    "type": "agent",
    "id": "copy-pack-risk-agent"
  },
  "decision": {
    "action": "security.exception.evaluate",
    "outcome": "allow"
  },
  "model": {
    "provider": "synthetic",
    "name": "fixture-risk-model",
    "version": "v1"
  },
  "policy_refs": [
    "policy_synthetic_v1"
  ],
  "private_fields": {}
}

Decision 2: deny

Sealed

security.exception.evaluate · policy_synthetic_v1

Record ID
01M249KB1Z67RB2AG6CGG3C9G0
Tenant sequence
6
Claimed event date
(synthetic source claim)
Received at
Recorded at
Durable at
Sealed at
Seal lag
52,477 ms from recorded-at to sealed-at, measured on the local clock

Download decision 2 receipt

Read decision 2 source input
{
  "schema_version": "1.0",
  "occurred_at": "2026-08-02T12:00:00.000Z",
  "subject_id": "copy-pack-synthetic-2",
  "actor": {
    "type": "agent",
    "id": "copy-pack-risk-agent"
  },
  "decision": {
    "action": "security.exception.evaluate",
    "outcome": "deny"
  },
  "model": {
    "provider": "synthetic",
    "name": "fixture-risk-model",
    "version": "v1"
  },
  "policy_refs": [
    "policy_synthetic_v1"
  ],
  "private_fields": {}
}

Decision 3: defer

Sealed

security.exception.evaluate · policy_synthetic_v2

Record ID
01M249KB1ZTDS9NYGKJ2AW2XFJ
Tenant sequence
7
Claimed event date
(synthetic source claim)
Received at
Recorded at
Durable at
Sealed at
Seal lag
52,477 ms from recorded-at to sealed-at, measured on the local clock

Download decision 3 receipt

Read decision 3 source input
{
  "schema_version": "1.0",
  "occurred_at": "2026-08-03T12:00:00.000Z",
  "subject_id": "copy-pack-synthetic-3",
  "actor": {
    "type": "agent",
    "id": "copy-pack-risk-agent"
  },
  "decision": {
    "action": "security.exception.evaluate",
    "outcome": "defer"
  },
  "model": {
    "provider": "synthetic",
    "name": "fixture-risk-model",
    "version": "v1"
  },
  "policy_refs": [
    "policy_synthetic_v2"
  ],
  "private_fields": {}
}

Development signer means integrity under a published dev key and no independently trusted time. Sealing binds what was recorded; it does not establish that the claimed event happened.

03 / Keep the gaps visible.

Missing evidence stays in the pack. An outcome code is not an approval, and a policy reference is not the policy itself.

Every record in the stated population is included. 3 matched the query, 3 are in this pack, 0 were left out. 5 further categories are recorded as not supplied for the included records: Policy text and policy validity dates are not supplied; only policy reference strings are recorded; Approvals, approver identity, review dates, corrections and supporting attachments are not supplied; No original external export, upstream authenticity evidence or historical custody trail is supplied; these are synthetic API inputs; Private inputs are empty objects; no hidden rationale or private attachment can be recovered from this sample; No independent time evidence, search index or complete-tenant collection is claimed.

Approvals: not supplied. Corrections: not supplied. Review dates and decision rationale: not supplied. They have not been inferred from an allow, deny or defer outcome.

04 / Separate facts from interpretation.

The record tells you what the sender submitted and what the ledger recorded. It does not tell you whether the sender was right.

Recorded facts

The three inputs record one allow, one deny and one defer outcome for security.exception.evaluate. The allow and deny records cite policy_synthetic_v1; the defer record cites policy_synthetic_v2.

Record IDs, sequences, receipt hashes and ledger timestamps come from the actual local responses. Displayed seal lag is arithmetic on recorded-at and sealed-at.

Generated interpretation

None. No generated explanation or recommendation is included. The sample does not infer causality, human approval, policy adherence or why the outcomes differ.

The pack wrapper and explanatory text are not separately signed. Check the individual receipts and compare the public fields.

05 / Verify outside the page.

Download the pack, extract its three receipts and run the offline verifier. You can also download each receipt above. Verification is free; no reviewer seat is charged.

  1. Obtain the expected public development fingerprint separately from the producer. This fixture's pin was fetched from authenticated local status before the receipts, not trusted because it appeared inside them.
  2. Run the verifier with that expected pin. It checks the envelope, chain link, inclusion proof, timestamp signature and trust match.
  3. Compare the source public fields and dates, then review the cutoff and missing-evidence list. Individual receipts do not prove collection completeness or the full tenant chain.

Same-service pin distribution demonstrates consistency under the development key. It is not an independent trust authority. Development signer means integrity under a published dev key and no independently trusted time.

Linux x64 standalone verifier / receipt 1
./recourse-verify receipt-1.json --dev-pin 1243d4dabe0c7218105918b3fd94be21d6a25973c4f1b4d4eb777a7543a4c9a1

The pack statement · File manifest and SHA-256 hashes · System description · Certification templates for counsel · Capture record, outside the pack · Download verification instructions · Captured public trust metadata · Actual verification results · Get the offline verifier

Expected result for each sample receipt: verified: true, trust: dev-pinned, trusted_time: false. A different expected pin fails trust.

Bring three questions from your workflow.

Scope a paid pilot around one integration, one mock examination and one usable pack.

Read the pilot brief