Nothing you paste leaves this browser. The page loads no font, no script and no data from anywhere, makes no request after it loads, sends nothing, stores nothing and logs nothing. Measured against the page as it is served, not against the file: on 20 August 2026 it carried three scripts, all three its own and nothing else, and pasting a record and checking it produced no network request at all. The check runs on your machine, against a key recovered from the record's own identifier: the decider's for a determination, the enforcement point's for a refusal. You do not need an account and you are not our customer.
Load the published example fills the box with ppp-determination-refused-outcome.json, served from this domain
and checked in CI on every build. It is a refusal determination: an agent declining a claim, which is the case a
disputing party actually arrives with. Try the tool on it before you have an artifact of your own.
Load a refusal record fills it with an enforcement refusal instead, from a card-dispute demonstration against Banxico Circular 34/2010 numeral 3.6. A reversal of a credited amount was requested, the decider found it did not proceed, and the mandate refused the payment because that outcome is not one it treats as authorising. The figures and the parties are constructed and the regulation is real; nothing in it is a client record and it is an authorisation for nothing.
It is the record a service actually sent, not one written for this page. It was taken unmodified from
a GET /v1/refusals response, which is the shape a console's copy button puts on your clipboard, and it is
signed under op.enforcement.refusal.v3. So the example here is the same thing you would be holding, in the
same shape, under the construction the enforcement point issues today.
It cites a determination, which is what makes the panel below the verdict worth reading. The refusal's signature covers four fields of that citation and not the rest of it, and the page derives that boundary by rebuilding the payload without each field rather than by consulting a list.
An attestation document runs the same sequence as verifyDecisionAttestation: the document is
canonicalised, the decider's key is recovered from its did:key, and an Ed25519 signature is checked over those
bytes with your browser's own WebCrypto.
A refusal record runs the same sequence as signableFromRefusal and refusalPayload: the
signed payload is rebuilt from the record's own fields, under the construction the record itself states rather than
whichever version this page ships, and the signature is checked against the key the record names.
Both are the constructions @observer-protocol/policy-engine exports at
1.0.0-rc.21, the version npm's latest tag serves a reader today.
This page loads nothing, so it cannot import the package; it carries its own copy of those constructions and CI asserts,
on every build, that the bytes it produces are identical to the package's own over every refusal this repository publishes.
A divergence turns the build red rather than turning a verdict here wrong.
The same checks, run from npm on your own machine ↗
This page checks a decision attestation and an enforcement refusal record. A delegation credential
verifies against the published engine already, on a reader's own machine, by the route
/verify sets out. What is not built is its box
on this page, and that is the only thing missing: a delegation credential resolves a did:web issuer over the
network, which is the one thing this page will not do.