Skip to content

[Conformance] Cover the JSON Schema 2020-12 preservation scenario - #506

Merged
koic merged 1 commit into
modelcontextprotocol:mainfrom
koic:cover_json_schema_2020_12_preservation_scenario
Aug 12, 2026
Merged

[Conformance] Cover the JSON Schema 2020-12 preservation scenario#506
koic merged 1 commit into
modelcontextprotocol:mainfrom
koic:cover_json_schema_2020_12_preservation_scenario

Conversation

@koic

@koic koic commented Aug 11, 2026

Copy link
Copy Markdown
Member

Motivation and Context

The json-schema-2020-12-preservation client scenario (SEP-1613, SEP-2106; not scored for 2026-07-28, as it was added after the requirements anchor) failed only because the conformance client had no branch for it: an unknown scenario aborts after connecting, so the harness never observed a tools/list nor the schema echo it diffs.

The client itself already preserves the vocabulary the scenario checks ($schema, $defs with $anchor, $ref, allOf/anyOf, if/then/else, additionalProperties): Client::Tool#input_schema is the parsed tools/list response untouched, with no dereferencing, validation-time rewriting, or keyword stripping, the same fixture-echo approach the TypeScript and Python conformance clients take. The new branch lists the tools and echoes the focal tool's observed inputSchema verbatim through json_schema_echo, and the expected-failures entry is removed.

How Has This Been Tested?

The scenario passes 9/9 at its default 2025-11-25 wire. On top of the modern-lifecycle client selection (the SEP-2322 driver branch) it also passes 9/9 at --spec-version 2026-07-28, where the SEP-2106 keyword checks are failure-gated instead of skipped. bundle exec rake is green, with the conformance task passing its baseline check on both legs, and RuboCop reports no offenses.

Breaking Changes

None. The change is confined to the conformance client and its baseline; the shipped gem is untouched.

Types of changes

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to change)
  • Documentation update

Checklist

  • I have read the MCP Documentation
  • My code follows the repository's style guidelines
  • New and existing tests pass locally
  • I have added appropriate error handling
  • I have added or updated documentation as needed

## Motivation and Context

The `json-schema-2020-12-preservation` client scenario (SEP-1613, SEP-2106; not scored for
2026-07-28, as it was added after the requirements anchor) failed only because the conformance client
had no branch for it: an unknown scenario aborts after connecting, so the harness never observed
a `tools/list` nor the schema echo it diffs.

The client itself already preserves the vocabulary the scenario checks (`$schema`, `$defs` with
`$anchor`, `$ref`, `allOf`/`anyOf`, `if`/`then`/`else`, `additionalProperties`):
`Client::Tool#input_schema` is the parsed `tools/list` response untouched, with no dereferencing,
validation-time rewriting, or keyword stripping, the same fixture-echo approach
the TypeScript and Python conformance clients take. The new branch lists the tools and echoes
the focal tool's observed `inputSchema` verbatim through `json_schema_echo`,
and the expected-failures entry is removed.

## How Has This Been Tested?

The scenario passes 9/9 at its default 2025-11-25 wire. On top of the modern-lifecycle client selection
(the SEP-2322 driver branch) it also passes 9/9 at `--spec-version 2026-07-28`, where the SEP-2106 keyword checks
are failure-gated instead of skipped. `bundle exec rake` is green, with the conformance task passing its baseline check
on both legs, and RuboCop reports no offenses.

## Breaking Changes

None. The change is confined to the conformance client and its baseline; the shipped gem is untouched.
@koic
koic merged commit b195a21 into modelcontextprotocol:main Aug 12, 2026
11 checks passed
@koic
koic deleted the cover_json_schema_2020_12_preservation_scenario branch August 12, 2026 15:02
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