Add backward-compatible CLAS proof signature union support#26
Merged
GsCommand merged 1 commit intoMay 22, 2026
Merged
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Motivation
metadata.proofcompatible with CLAS trust schemas that allow either legacy single-signature objects or multi-signature arrays, and avoid crashes whenproof.signatureis not an object.erc8211.merkle.v1without silently accepting them as cryptographically verified.Description
CommandLayerProofSignature,CommandLayerProofSignatureRole,CommandLayerProofSignatureWithRole, andCommandLayerProofSignatureField, and updateCommandLayerProof.signatureto use the union type. (src/compat.ts)isSingleSignature,isMultiSignature, andgetPrimarySignature(proof, preferredRole?)which selects a concrete signature with priorityruntime→agent→verifier→ first valid. (src/compat.ts)verifyCommandLayerReceiptto select and validate a single concrete signature entry before accessing.value/.kid/.alg, return structured errors for malformed signatures instead of throwing, and verify only the selected signature. (src/compat.ts)erc8211.merkle.v1and add a clear fail-closed resultERR_UNSUPPORTED_MERKLE_VERIFICATIONwhen Merkle verification is recognized but not implemented. (src/compat.ts)isSignedCommandLayerReceiptto accept either a single signature object or a multi-signature array with at least one valid entry, and ensure metadata likemetadata.tracedoes not cause false negatives. (src/compat.ts)metadata.trace. (test/compat.test.ts)Testing
npm install,npm test,npm run build, andnpm run typecheck; all commands completed successfully.test/compat.test.tspassed; existing single-signature verification tests continue to pass.INVALIDwithERR_MALFORMED_SIGNATURE_ARRAY, anderc8211.merkle.v1is recognized but results inERR_UNSUPPORTED_MERKLE_VERIFICATIONuntil full Merkle verification is implemented.src/compat.ts,src/index.ts,test/compat.test.ts.Codex Task