Skip to content

[release engineering] Validate schema PR bundles against both SDK generators #6984

Description

@bokelley

Summary

Protocol schema PRs cannot currently be validated reproducibly against the Python and TypeScript SDK generators before the protocol bundle is published. The reporting RFC exposed this: both SDKs normally download /protocol/{version}.tgz, so testing an unmerged protocol worktree required manual schema copying/overlays and produced SDK branches whose source provenance was easy to lose as the RFC continued changing.

Concrete failure mode

While validating #6953:

  1. The SDK branches were generated from a local snapshot of the protocol PR.
  2. The protocol PR then added required reporting coverage fields.
  3. The dependent SDK branches were immediately stale, but neither their generated artifacts nor CI had a machine-readable assertion identifying the exact protocol commit/bundle digest they represented.
  4. Full regeneration also mixed the intended RFC delta with unrelated latest drift, producing thousands of noisy generated changes.

This is exactly the point at which we want generator incompatibilities and semantic drift to fail before the protocol PR merges.

Proposed release-engineering contract

  • Build a deterministic protocol bundle artifact for every schema-changing PR, using the same layout and integrity metadata as a release bundle.
  • Record the protocol commit SHA and bundle SHA-256 in generated SDK artifacts/metadata.
  • Provide a supported local input in each SDK (--bundle, --schema-dir, or equivalent) rather than requiring an HTTP publication or manual overlay.
  • Run both SDK generators and focused contract tests against the PR artifact as a required/visible protocol PR check.
  • Fail when generated output is based on a different protocol commit than the declared artifact.
  • Offer a scoped generation/diff mode so an RFC can be reviewed without unrelated latest drift.
  • Document how a protocol author creates dependent SDK PRs and refreshes them after a protocol force-push/rebase.

Acceptance signal

A contributor should be able to point both SDK repos at the artifact for #6953, regenerate, and prove which protocol commit they consumed without publishing a fake version or copying individual files.

Related implementation PRs: adcontextprotocol/adcp-client#2726 and adcontextprotocol/adcp-client-python#1095.

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingclaude-triagedIssue has been triaged by the Claude Code triage routine. Remove to re-triage.github_actionsPull requests that update GitHub Actions codepriority:P1High priority: important bug or follow-up, not immediate P0schemaJSON Schema source-of-truth: definitions, codegen artifacts, validation, hygiene

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions