Skip to content

fix(testing): backport served-release capability validation and compliance_testing cross-check for SDK 15.9.2 - #3287

Merged
bokelley merged 3 commits into
15.9.xfrom
bokelley/backport-capabilities-15.9
Oct 15, 2026
Merged

bokelley merged 3 commits into
15.9.xfrom
bokelley/backport-capabilities-15.9

Conversation

@bokelley

@bokelley bokelley commented Oct 15, 2026 •

Copy link
Copy Markdown
Contributor

Summary

Backports #3280 to the 15.9.x maintenance line so it ships as @adcp/sdk@15.9.2 on npm latest. SDK 16 is beta-only, and adcontextprotocol/adcp depends on 15.8.1.

Backport notes

  • The three commits from fix(testing): validate capabilities against the served release; key compliance_testing in the cross-check #3280 cherry-pick cleanly. The touched code (testing/client.ts, core/TaskExecutor.ts, testing/scenarios/capabilities.ts, validation/schema-loader.ts) is identical on 15.9.x apart from line offsets.
  • The helper lives in schema-loader.ts rather than a new module. That keeps the client/core eager graph and the packed file count inside their budgets.
  • No release plumbing changes. 15.9.x's release.yml already publishes stable 15.9.x patches to latest.
  • Both changesets are patch for @adcp/sdk.

Test plan

  • test/lib/capabilities-served-release-validation.test.js (17 tests) passes on 15.9.x.
  • npm test locally. Every non-Postgres suite passes, including the eslint-plugin and reference-renderers workspaces. The only failures are Postgres-backed tests (ECONNREFUSED, no local database), the same set as on main. CI's Postgres-backed unit tests are green.
  • typecheck, lint (0 errors), format:check, verify:package, check:package-size (6565 files)

Fixes #3278 and #3279 on the 15.x line.

🤖 Generated with Claude Code

bokelley and others added 3 commits October 15, 2026 18:15
…ompliance_testing in the cross-check

Capability discovery strictly validated get_adcp_capabilities against the
caller's pin. A 3.0 pin sends only adcp_major_version: 3, so the seller
serves and echoes its highest 3.x release, and the SDK reported that
release's shapes as false capabilities_schema_issues (and failed
getAdcpCapabilities() in strict mode). discoverAgentProfile and
TaskExecutor now validate against the echoed adcp_version when it is a
same-major release the SDK bundles, falling back to the pin otherwise,
per the versioning spec ("Server echoes"). Validation stays strict.

The testCapabilityDiscovery protocol/tool cross-check keyed
comply_test_controller as "compliance" while the capabilities parser
reports "compliance_testing", so every agent declaring the block failed
with "Tools suggest unreported protocols: compliance". The key is now
compliance_testing and the table's keys are type-checked against
AdcpProtocol.

Fixes #3278
Fixes #3279

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…he echo; cover prerelease and major-only pins

Matches the storyboard runner's response_schema precedence. Documents the
deliberate downshift acceptance and tightens the cross-check changeset.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…oader

A separate module grew the @adcp/sdk/client/core eager graph past its
210-module budget and the packed file count past 6630.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>

@aao-secretariat aao-secretariat Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ladon verdict: Approve

Approve.

Two correct, well-tested bug fixes with no findings at Medium or above.

  1. src/lib/testing/scenarios/capabilities.ts:321 — re-keys the cross-check map compliance→compliance_testing to match parseCapabilitiesResponse output and the COMPLIANCE_TOOLS→compliance_testing TOOL_PROTOCOL_MAP entry; type-checked via satisfies Partial<Record<AdcpProtocol,...>>.
  2. src/lib/validation/schema-loader.ts:1258 — resolveServedValidationVersion selects the seller's echoed release per the versioning spec, failing closed to the pin on every ambiguous case and regex-gated against path traversal. Strict validation preserved, not loosened. No witness-not-translator concern: only the schema-version selector changes; no data fabricated or reshaped.

Changesets present and correctly typed patch for bug fixes; no public export removed/renamed. No new external I/O or timeout surface. Test coverage sound (major-only envelope + external-schema-root precedence cases; reuses established MCP scaffolding pattern).

No high-risk flag, no gated paths, no author team gate, no prior decision. Decision table falls through rows 1–8 to row 9.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant