fix(compliance): treat deprecated signed-requests specialism as universal alias#2238
fix(compliance): treat deprecated signed-requests specialism as universal alias#2238kapoost wants to merge 3 commits into
signed-requests specialism as universal alias#2238Conversation
…versal alias `resolveStoryboardsForCapabilities` was throwing `unknown_specialism` on the deprecated `signed-requests` claim because the bundle lives under `universal/signed-requests.yaml`, not `specialisms/signed-requests/`. That blocked every other storyboard from running and prevented the `signed_requests_specialism_deprecated` notice (adcontextprotocol#2082) from ever firing. Adds `DEPRECATED_SPECIALISM_UNIVERSAL_ALIASES`: when a specialism is a deprecated alias AND its universal bundle is present in the cache, resolution continues silently — the universal storyboard already runs unconditionally and the deprecation notice fires from `runner.ts:collectCapabilityNotices`. The throw is preserved when the universal bundle is absent (stale cache) so we don't silently swallow a real configuration error. Closes adcontextprotocol#2237. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
…pability Per adcontextprotocol#2237 triage: both fixes must land together. The pre-flight relaxation in the previous commit is incomplete without this — adopters dropping the deprecated specialism for the canonical `request_signing.supported: true` form would still hit the boot guard. The previous guard required the deprecated `signed-requests` specialism claim whenever `signedRequests` was configured, contradicting the universal storyboard's "drop the now-redundant specialism claim and rely solely on request_signing.supported: true" guidance. Widens the guard to accept either discovery surface (canonical 3.1+ OR back-compat). Still rejects the "config present, nothing advertised" case. JSDoc on `SignedRequestsConfig` updated to document both paths. Three new tests cover: canonical 3.1+ accepts, both failure modes still throw, error message wording. Changeset rewritten to describe both fixes. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
The automated review encountered an issue (possibly reached max turns, timed out, or failed to post the final This is an automated message from the Argus AI review workflow. |
Summary
Fixes #2237. Two coupled fixes per bokelley's triage — both must land together; either alone leaves adopters stuck.
What changed
1. Pre-flight
resolveStoryboardsForCapabilities(compliance.ts)resolveStoryboardsForCapabilitieswas throwingunknown_specialismon the deprecatedsigned-requestsclaim because the bundle lives inuniversal/signed-requests.yaml, notspecialisms/signed-requests/. That blocked every other storyboard from running and prevented thesigned_requests_specialism_deprecatednotice (#2082) from ever firing.DEPRECATED_SPECIALISM_UNIVERSAL_ALIASESmap (one entry today:signed-requests→signed-requests).runner.ts:collectCapabilityNotices.2. Boot guard
createAdcpServer(create-adcp-server.ts)The previous guard required the deprecated
signed-requestsspecialism claim wheneversignedRequestswas configured, contradicting the universal storyboard's "drop the now-redundant specialism claim and rely solely onrequest_signing.supported: true" guidance.capabilities.request_signing.supported: true, no deprecated claim.specialisms: ['signed-requests'].supported: false).SignedRequestsConfigupdated to document both paths.The companion guard at L3683 (claim +
supported !== truethrows) is unchanged — back-compat path still requires the capability flag, the canonical path doesn't need both.Test plan
node --test --test-name-pattern="resolveStoryboardsForCapabilities" test/lib/storyboard-security.test.js— 11/11 green (8 existing + 3 new for the deprecated alias path)node --test --test-name-pattern="startup validation" test/server-auto-signed-requests.test.js— 11/11 green (8 existing + 3 new for the canonical 3.1+ form + both failure modes)npm run build— clean@adcp/sdk@9.0.0-beta.27: with both fixes,adcp storyboard runno longer pre-flight aborts when the seller wiressignedRequestsconfig; whether the seller uses the canonical 3.1+ form OR the back-compat specialism claim, the boot succeeds, the verifier blocks unsigned mutating ops as expected, and the rest of the sales-non-guaranteed track grades normally.Triage compliance
bokelley's #2237 triage is implemented as specified:
compliance.tsL821:continuebefore throw when universal bundle exists (not a fall-through suppress)create-adcp-server.tsL3663: guard widened with&& capConfig?.request_signing?.supported !== trueSignedRequestsConfig("both together or neither" → 3.1+ alternative documented)Related
compliance/cache/3.1.0-rc.10/universal/signed-requests.yaml§ "Backward-compatible specialism claims"🤖 Generated with Claude Code