Background
There are currently two independent code paths that both claim to serve "the public view" of a passport: the resolver (renders from the signed publicJwsSignature payload) and the vault's public_read_handler (renders a redacted live row). See #27 for the divergence this causes. Nothing currently asserts these two outputs agree.
Proposal
Add a test (in the spirit of the existing port-inventory-style structural tests) that, for a given published passport fixture, asserts the vault's /public/dpp/{id} response and the resolver's /dpp/{id} response are byte-identical (modulo any fields explicitly expected to differ, if any). This closes the frozen-proof/live-row divergence mechanically and prevents it regressing silently in future — cheaper than remembering to check by hand every time either handler changes.
Found during a 2026-07-18 full-codebase review; filed as a follow-up to #27.
Background
There are currently two independent code paths that both claim to serve "the public view" of a passport: the resolver (renders from the signed
publicJwsSignaturepayload) and the vault'spublic_read_handler(renders a redacted live row). See #27 for the divergence this causes. Nothing currently asserts these two outputs agree.Proposal
Add a test (in the spirit of the existing port-inventory-style structural tests) that, for a given published passport fixture, asserts the vault's
/public/dpp/{id}response and the resolver's/dpp/{id}response are byte-identical (modulo any fields explicitly expected to differ, if any). This closes the frozen-proof/live-row divergence mechanically and prevents it regressing silently in future — cheaper than remembering to check by hand every time either handler changes.Found during a 2026-07-18 full-codebase review; filed as a follow-up to #27.