Two normative MUSTs in the Trust Manifest section cannot be satisfied by the spec's own appendix examples, because both rules assume structure that the open formats do not guarantee.
1. Identity binding is undefined for non-URN identifiers
"Trust Manifest > Identity" says:
the identity field's authority or trust domain MUST align with the publisher domain segment of the entry's URN identifier field. ... Consumers MUST reject a Trust Manifest whose identity domain does not align with the publisher domain of the entry's identifier.
But identifier is explicitly an open text format (any URI or URN; the urn:air form is only recommended, and custom formats are expected for closed or local systems). The "Mapping to Claude Code Plugins Marketplace" appendix itself uses urn:claude-plugin:adspirer:ads-agent style identifiers, which have no domain segment at all - so a conformant consumer following the MUST would have to reject the Trust Manifests in the spec's own examples.
The binding rule needs a scoping clause: e.g. it applies when the identifier uses the urn:air form (or another domain-anchored scheme), and consumers fall back to other verification (publisher attestations, signatures) otherwise.
2. Digest rejection rule vs the appendix's sha1 examples
"Verification Procedures > Digest Format" says: "Consumers MUST reject digest values using algorithms shorter than SHA-256."
The same Claude Plugins appendix maps the marketplace's source.sha (a git commit SHA) to trustManifest.provenance[].sourceDigest as "sha1:...". Two problems:
- The examples violate the MUST: consumers are required to reject exactly the digests the appendix shows.
- A git commit SHA is a revision identifier, not a content digest of anything a consumer can fetch and hash, so mapping it to
sourceDigest is arguably a category error regardless of algorithm (related to the artifact-integrity issue).
Suggested resolution: either carve out revision identifiers from the digest rule (e.g. a separate sourceRevision field), or change the appendix mapping so sha lands in metadata rather than sourceDigest.
Two normative MUSTs in the Trust Manifest section cannot be satisfied by the spec's own appendix examples, because both rules assume structure that the open formats do not guarantee.
1. Identity binding is undefined for non-URN identifiers
"Trust Manifest > Identity" says:
But
identifieris explicitly an open text format (any URI or URN; theurn:airform is only recommended, and custom formats are expected for closed or local systems). The "Mapping to Claude Code Plugins Marketplace" appendix itself usesurn:claude-plugin:adspirer:ads-agentstyle identifiers, which have no domain segment at all - so a conformant consumer following the MUST would have to reject the Trust Manifests in the spec's own examples.The binding rule needs a scoping clause: e.g. it applies when the identifier uses the
urn:airform (or another domain-anchored scheme), and consumers fall back to other verification (publisher attestations, signatures) otherwise.2. Digest rejection rule vs the appendix's sha1 examples
"Verification Procedures > Digest Format" says: "Consumers MUST reject digest values using algorithms shorter than SHA-256."
The same Claude Plugins appendix maps the marketplace's
source.sha(a git commit SHA) totrustManifest.provenance[].sourceDigestas"sha1:...". Two problems:sourceDigestis arguably a category error regardless of algorithm (related to the artifact-integrity issue).Suggested resolution: either carve out revision identifiers from the digest rule (e.g. a separate
sourceRevisionfield), or change the appendix mapping soshalands inmetadatarather thansourceDigest.