Repository navigation
Say when a seal can never be checked, instead of "try again" - #42
Conversation
When verifier-core can't compute a seal because a field isn't defined by the credential's vocabulary (PARSING_ERROR), or the seal is of a kind it can't check (PROOF_UNSUPPORTED), the answer is the same every time. Both fell through to "We couldn't check this right now... Try again", which also let a forger turn red "tampered" grey with one made-up field. They now get signature_unreadable and signature_unsupported: grey, since every row beneath reads "not checked", with words that send the person to the issuer. unreadable_vocabulary shares the first's words. The consistency suite covers both seal results, and real-library tests pin the two problem types. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
Try it: https://digitalcredentials.github.io/verifier-plugin/pr-42/ Updates on every push to this PR, and goes away when it closes. The browser tests run against this copy too. |
Smoke test and merge confidenceSmoke test: live demo (94675b0) against this PR's preview (06a762c)
Merge confidence: high
Open, not blocking
|
After merge (4 November 2026)#40 closed. The live demo serves the merge 72683b8, whose code is identical to the preview tested above (06a762c): the two commits have the same tree. CI on main passed, as did the release and preview jobs. Post-merge smoke testExpectations were written before running.
The wallet picks this up at its next verifier-plugin pin bump. |
In the wallet: lcw-sandbox.org (9 November 2026)All clear. This PR has now reached the wallet. James deployed lcw-sandbox.org with lcw-front-end
|
Closes #40.
What changes
When verifier-core can't compute a credential's seal for a reason that won't go away, verifier-plugin now says so instead of "We couldn't check this right now… Try again in a little while."
PARSING_ERROR: a field the credential's@contextdoesn't define ("Safe mode validation error")signature_unreadable)PROOF_UNSUPPORTED: no seal of a kind verifier-core can check, or one made for another purposesignature_unsupported)unreadable_vocabulary(the same cause caught before the seal, red) gets the first message's words: same cause, same words. verifier-core 2.0.0-beta.1 never reaches it, so no one sees the change today.Wording, for feedback
PROOF_UNSUPPORTEDalso covers a seal made for another purpose (e.g.authentication). "A kind of digital signature we can't check" is slightly loose there, but the advice is still right. I didn't add a third message for it.Checks
Expected results were written before the change.
Unit tests: lint, typecheck, and 156,425 tests, about 13 s locally (main has 105,720; the consistency suite now covers the two new seal results).
problem-types.test.tsrun verifier-core itself, so a rename of either problem type fails here.Deliberate mistakes: each fails tests.
Side by side: main's build, byte-identical to its published release build 5622f4d, against this branch's, on 1,763 credentials. Those are Take the patched dev tools in #37: vite, undici, shell-quote, source-map-js #39's 1,711 altered ones plus ECDSA, did:web and handmade cases, each run with and without registry lookups.
signature_unreadableand 26 tosignature_unsupported: Take the patched dev tools in #37: vite, undici, shell-quote, source-map-js #39's 275 and 24, plus two handmade cases of each.Edge cases, against the real library: a seal made for another purpose; two seals, both unsupported; a good seal plus an unsupported one; a tampered seal plus an unsupported one; a tampered seal plus one that can't be computed. Each gives the result above.
Browser: in Chromium and WebKit, the demo's 12 buttons and 9 vc-test-fixtures links are identical to the live demo (66 comparisons). A seal we can't compute says "try again later", and lets a forgery soften its warning #40's example shows the new message.
Independent review: no correctness bugs. Its test gaps are closed above.
Test files type-checked (CI doesn't): the same 28 errors as main, none new.
Smoke test, live demo against this PR's preview. Expected: 0 of 21 differ. No demo button or link reaches these cases.
Result: 0 of 21 differ, in Chromium and WebKit, two rounds each. The preview is 06a762c (main 94675b0 + 930f686). A seal we can't compute says "try again later", and lets a forgery soften its warning #40's example on the preview (the live demo's tampered credential plus
"notInAnyContext": "x", opened with?vc=) shows "Couldn't check: We can't check this credential" where the live demo shows "We couldn't check this right now"; the tampered credential alone is red "tampered" on both. CI passed: unit and browser tests, build, publish, and the tests against the published preview.Not in this PR
@contextwon't load (404 or no answer) reads asINVALID_SIGNATURE, so it shows red "tampered". That's the same on main. It's going upstream.Reaching the wallet
Through the next verifier-plugin pin bump, with #31, #33 and #38.
🤖 Generated with Claude Code