
Veritasacta Verify
io.github.tomjwxfPublished by GitHub account tomjwxfv0.11.1Updated Oct 25, 2026
Offline receipt verifier. Ed25519 signature verification without contacting any server.
Overview
Offline verifier for signed Acta receipts: checks Ed25519 signatures against a public key you supply, without contacting the issuing service.
- What you can do
- Verify individual Ed25519 envelopes, v2 structured receipts, v1 flat receipts and historical website receipts against an externally supplied public key.
- Check audit bundles, chains, proof packs, context packs, gate records and governed-run manifests, which require the CLI rather than the browser engine.
- Apply key windows and selective-disclosure commitments covered by the signature.
- Report outcomes as verified (exit 0), failed (exit 1) or not checked (exit 2), with profile-specific output and error codes.
- Run a self-check that recomputes monitored source hashes against a bundled integrity commitment, and produce a local self-signed attestation.
- When to use it
- Use it when you receive a signed receipt, audit bundle or evidence artifact and want to confirm its signature yourself, with a key obtained through a separate trusted channel, rather than trusting the issuing service. It suits audit, compliance and evidence-review workflows where offline, reproducible checking matters.
- Requirements
- A local Node.js runtime to install the npm package (global install shown in the README). A receipt file and a 64-hex-character public key obtained independently. Verification runs offline once installed; installation and explicitly requested URL or JWKS lookups use the network. No account, proxy or signing daemon is needed.
Installation
In SourceWeft
- Open Veritasacta Verify in the dashboard and add it to a workspace.
- Enable the server for the chats that should use its tools.
Desktop only via STDIO. STDIO servers start a local process, so they need the SourceWeft desktop host.
Other MCP clients
Follow the launch instructions in the repository.
README
@veritasacta/verify
Check signed records yourself, without contacting the issuing service.
An offline CLI and a shared browser receipt engine. Supply a receipt and a public key obtained through a separate trusted channel, then apply your own trust policy. No account, proxy, signing daemon or onboarding step is required to verify a receipt.
Try the browser sample · Receipt specification · Conformance evidence
Verify an existing receipt
The key is 64 hexadecimal characters. Do not treat a key supplied with an unknown receipt as an independent trust pin. This verification path runs offline once the package is installed; installation and explicitly requested URL/JWKS lookups use the network.
An Acta receipt or audit bundle is never checked with a key taken from the file
being checked. A receipt whose signed bytes carry a key (public_key,
verification_key, verification_jwk) other than the one you supply fails with
key_mismatch, and an envelope whose payload names an issuer_id other than its
signature's kid fails with issuer_kid_mismatch. An audit bundle's own
verification.signing_keys are used only if you pass --trust-bundle-keys, and a
valid result then shows only that the receipts match keys in the same file. Gate
records, macro track records, governed receipts, proof packs, context packs,
repository evidence, standard files and run manifests carry their own key; checked
without --key, the result is undecidable (exit 2). --allow-carried-key accepts
it (exit 0) and says the signature proves nothing about who signed; --strict
refuses it even then. Key windows apply to the issued_at the
signature covers, and disclosures are checked against the commitments the signature
covers; a disclosure that cannot be applied is not checked (exit 2).
To try the public example, download this receipt and use its demonstration-only key:
A valid signature is not proof of claim truth, complete action coverage, signer authority or recipient acceptance. A signed timestamp is an issuer assertion, not an independent timestamp.
Read the outcome correctly
Exit 1 does not prove tampering. Supplying the wrong expected key can produce
the same result. Some legacy JSON error categories use the name tampered for
compatibility; it denotes failed verification, not a forensic conclusion.
See error codes and the profile-specific output.
Browser and CLI
Both use src/detect.js, src/engines/ed25519-receipt.js and the same canonicalizer.
The browser bundle is published in browser/, with a SHA-256 build manifest.
The browser accepts individual Ed25519 envelopes, v2 structured receipts, v1 flat
receipts and historical website receipt_version: "1.0" receipts. That historical
profile excluded public_key from signing and is explicitly labelled; it is not
silently promoted to draft-03 conformance. All browser profiles require an external
key. Unsupported formats are not checked, not reported as bad signatures.
Both entry points reject duplicate JSON members before parsing. The browser limits input to 1 MiB and depth 64; the CLI file parser allows 50 MiB and depth 128. Bundles and specialist profiles, including selective disclosure, VOPRF, Knowledge Units, Gate evidence and governed-run manifests, require the CLI. Profile success only establishes the checks named in that output, not universal completeness.
Choose a guide
Release integrity, not publisher authentication
verify --self-check recomputes monitored source hashes against a bundled integrity
commitment (the Sigil). It detects drift from that commitment. Someone replacing
both the code and commitment can create a new internally consistent package.
It does not independently authenticate the publisher or establish a canonical
release. Pin a reference obtained independently and inspect release provenance.
--attest is a local, self-signed integrity statement; separately pin its key before
relying on it.
Release and standards status
Verifier: 0.11.1. Status reviewed 2026-10-25.
- draft-farley-acta-signed-receipts-03: active individual Internet-Draft.
- draft-farley-acta-knowledge-units-00: expired individual Internet-Draft (expired 2026-10-08).
Internet-Drafts are proposals, not adopted IETF standards or endorsements.
release-manifest.json is the source for version/status
blocks in this README, the website, the organisation profile and draft index.
node scripts/sync-public-metadata.mjs --check checks sibling repository copies.
No draft is revised or resubmitted by this synchronization.
Development and maintainership
Maintained by Tom Farley / ScopeBlind. Independent verification does not imply independent organizational governance. Contributions should include reproducible fixtures and negative cases. The contribution guide covers a clean checkout, package checks and useful first contributions. See the public project evidence for reproducible interoperability results and their limits.
Apache-2.0. See LICENSE and PATENTS.md for the actual terms. The Acta public record is a separate reference application. ScopeBlind's commercial applications are not prerequisites for verification.
Source: README.md at commit b5bc8c1
Tools
0Version history
7- v0.11.1LatestOct 25, 2026
- v0.11.0Oct 24, 2026
- v0.10.27Oct 22, 2026
- v0.10.26Oct 20, 2026
- v0.10.25Oct 20, 2026
- v0.10.23Oct 12, 2026
- v0.9.2Sep 16, 2026
Score
50% of the applicable checks met
How complete this listing is, computed from the registry entry, the endpoint and public sources. Not a rating of the server and not a statement that it is safe or working today: reachability is a dated check, and no installs or reviews go into the score.
- Reached in the last 30 days25 pts
Keep the endpoint answering the MCP handshake; SourceWeft probes it every 30 days.
- Auth declared10 pts
Declare the credential headers in the registry entry, or keep the endpoint answering the probe so its auth can be classified.
- Tools listed15 pts
Answer tools/list without a credential, or ship a package that starts in a sandbox without one.
- DescriptionRequired15 pts
- Logo10 pts
- Documentation15 pts
- License10 pts