Skip to content

Make the verification result docs match what the code does - #72

Merged
ottonomy merged 1 commit into
nightshift/50-include-the-recognised-entity-for-vc-recognitionfrom
nightshift/44-make-the-verification-result-docs-match-what-the
Oct 20, 2026
Merged

ottonomy merged 1 commit into
nightshift/50-include-the-recognised-entity-for-vc-recognitionfrom
nightshift/44-make-the-verification-result-docs-match-what-the

Conversation

@ottonomy

Copy link
Copy Markdown
Contributor

Closes #44

Stacked on #71 — review and merge that first (or merge the stack together).

Departures

None. All four doc defects named in the ticket are fixed, and the acceptance
test is in place.

Decisions not in the issue

  • Where the test lives. test/verify-credential.spec.ts, in a new
    advisory (non-fatal) failures describe block. It drives the public
    verifyCredential with a fake HTTP service returning an empty
    dcc-legacy registry, so trust.registry.issuer is the only failing
    check; it asserts the failure list is exactly that one id, that the check
    is not fatal, that verified is true, and that the trust.registry
    summary has status: 'failure' and hasFailures: true.

  • How the API guide's examples were made truthful. The ticket says the
    UI recipe and the worked example must stop showing a registry-only failure
    as verified: false, but not which way to resolve it. Rather than delete
    the failing-verdict illustration, both now show both cases side by side:
    credential 1 fails only advisory checks (registry, and an Open Badges
    semantic check in the recipe) and stays verified: true with
    hasFailures: true on those suites; credential 2 fails
    cryptographic.proof.signature fatally, which is what makes a verdict
    false. The appendix JSON for credential 2 therefore gained the realistic
    "Not run after fatal" skip rows and matching summary entries. A reviewer
    who would rather see a single simpler example can cut credential 2.

  • A new ### The top-level verdict subsection was added near the top of
    docs/api/verification-results.md (and linked from the table of contents)
    so the advisory list is stated once and referred to from the recipe and
    the appendix, instead of being repeated three times in full.

  • Advisory checks are named by their full ids in the README and API
    guide (trust.registry.issuer, cryptographic.status.list-issuer, …)
    and by their short ids in the TSDoc, matching how each surface already
    refers to checks.

  • Two extra timing-guide ids. Besides the
    cryptographic.parsing.parsing.envelope → cryptographic.parsing.envelope
    fix the ticket names, the prose in the TimeService section referred to
    proof.signature and status.bitstring; those are now the full ids the
    code produces, so "every id in the guide is a real one" holds without
    having to argue about prose-vs-example.

  • Left alone, deliberately: VerifyCredentialOptions.credential /
    VerifyPresentationOptions.presentation still say "parsed internally via
    Zod". That describes the input and what the verifier does with it (it
    does parse, as a gate), not the returned object, so it is accurate and
    outside the ticket's "nothing calls the returned credential parsed".

Agent-Run: 96643ad2-b7e6-44b0-a51f-a8f6831d5132

…does

`verified` means no *fatal* check failed, but the type comments, the
README and the verification-results guide described it as "no check
returned a failure" and showed a registry-only failure as a failed
verdict. Say what the code does, and name the advisory (non-fatal)
checks — `registry.issuer`, `recognition.profile`,
`status.list-issuer`, the Open Badges checks, and any caller check
without `fatal` — everywhere the verdict is described. The UI recipe
and the prompt-ready appendix now show an advisory failure inside a
verified result and a fatal one beside it.

Also: `SuiteSummary.status` is `'failure'`, not `'mixed'`, for failures
plus skips; the returned credential and presentation are the caller's
original objects rather than anything "parsed"; and the timing guide's
parse-failure example uses the id the code emits,
`cryptographic.parsing.envelope`.

A new test pins the policy through the verifier: a credential whose
only failing check is `registry.issuer` is `verified: true` with a
`trust.registry` summary of status `'failure'`.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ottonomy
ottonomy force-pushed the nightshift/44-make-the-verification-result-docs-match-what-the branch from d70f0ab to 9c5ef80 Compare October 20, 2026 19:23
@ottonomy
ottonomy merged commit 546f3f7 into main Oct 20, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

agent-authored Opened by an unattended agent — review before trusting

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Make the verification result docs match what the code does

1 participant