ci: expose extension conformance gaps (#1019)
This commit is contained in:
parent
9bf459962e
commit
a8308dc943
4 changed files with 95 additions and 11 deletions
42
.github/workflows/conformance.yml
vendored
42
.github/workflows/conformance.yml
vendored
|
|
@ -85,7 +85,7 @@ jobs:
|
||||||
echo "draft conformance server did not become ready" >&2
|
echo "draft conformance server did not become ready" >&2
|
||||||
exit 1
|
exit 1
|
||||||
|
|
||||||
- name: Run 2026-07-28 server suite
|
- name: Run 2026-07-28 versioned-spec server suite
|
||||||
run: |
|
run: |
|
||||||
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" server \
|
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" server \
|
||||||
--url http://127.0.0.1:8002/mcp \
|
--url http://127.0.0.1:8002/mcp \
|
||||||
|
|
@ -94,6 +94,32 @@ jobs:
|
||||||
--expected-failures conformance/expected-failures-2026-07-28.yaml \
|
--expected-failures conformance/expected-failures-2026-07-28.yaml \
|
||||||
-o conformance-results
|
-o conformance-results
|
||||||
|
|
||||||
|
# Extension scenarios are excluded by the --spec-version filter and
|
||||||
|
# are informational for tiering. Run them explicitly so their gaps remain
|
||||||
|
# visible and newly passing scenarios make the strict baseline fail stale.
|
||||||
|
- name: Run Tasks extension server suite (informational)
|
||||||
|
run: |
|
||||||
|
scenarios=(
|
||||||
|
tasks-lifecycle
|
||||||
|
tasks-capability-negotiation
|
||||||
|
tasks-wire-fields
|
||||||
|
tasks-request-state-removal
|
||||||
|
tasks-mrtr-input
|
||||||
|
tasks-request-headers
|
||||||
|
tasks-dispatch-and-envelope
|
||||||
|
tasks-status-notifications
|
||||||
|
tasks-required-task-error
|
||||||
|
tasks-mrtr-composition
|
||||||
|
)
|
||||||
|
|
||||||
|
for scenario in "${scenarios[@]}"; do
|
||||||
|
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" server \
|
||||||
|
--url http://127.0.0.1:8002/mcp \
|
||||||
|
--scenario "$scenario" \
|
||||||
|
--expected-failures conformance/expected-failures-extensions.yaml \
|
||||||
|
-o conformance-extension-results
|
||||||
|
done
|
||||||
|
|
||||||
- name: Stop conformance servers
|
- name: Stop conformance servers
|
||||||
if: always()
|
if: always()
|
||||||
run: |
|
run: |
|
||||||
|
|
@ -105,7 +131,9 @@ jobs:
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
with:
|
with:
|
||||||
name: conformance-server-results
|
name: conformance-server-results
|
||||||
path: conformance-results
|
path: |
|
||||||
|
conformance-results
|
||||||
|
conformance-extension-results
|
||||||
|
|
||||||
client:
|
client:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
|
|
@ -131,7 +159,7 @@ jobs:
|
||||||
--spec-version 2025-11-25 \
|
--spec-version 2025-11-25 \
|
||||||
-o conformance-client-results/full
|
-o conformance-client-results/full
|
||||||
|
|
||||||
- name: Run 2026-07-28 client suite
|
- name: Run 2026-07-28 versioned-spec client suite
|
||||||
run: |
|
run: |
|
||||||
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" client \
|
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" client \
|
||||||
--command "$(pwd)/target/debug/conformance-client" \
|
--command "$(pwd)/target/debug/conformance-client" \
|
||||||
|
|
@ -140,6 +168,14 @@ jobs:
|
||||||
--expected-failures conformance/expected-failures-2026-07-28.yaml \
|
--expected-failures conformance/expected-failures-2026-07-28.yaml \
|
||||||
-o conformance-client-results/draft
|
-o conformance-client-results/draft
|
||||||
|
|
||||||
|
- name: Run extension client suite (informational)
|
||||||
|
run: |
|
||||||
|
npx -y "@modelcontextprotocol/conformance@${DRAFT_CONFORMANCE_VERSION}" client \
|
||||||
|
--command "$(pwd)/target/debug/conformance-client" \
|
||||||
|
--suite extensions \
|
||||||
|
--expected-failures conformance/expected-failures-extensions.yaml \
|
||||||
|
-o conformance-client-results/extensions
|
||||||
|
|
||||||
- name: Upload results
|
- name: Upload results
|
||||||
if: always()
|
if: always()
|
||||||
uses: actions/upload-artifact@v7
|
uses: actions/upload-artifact@v7
|
||||||
|
|
|
||||||
26
ROADMAP.md
26
ROADMAP.md
|
|
@ -3,7 +3,10 @@
|
||||||
This roadmap tracks the path to SEP-1730 Tier 1 for the Rust MCP SDK.
|
This roadmap tracks the path to SEP-1730 Tier 1 for the Rust MCP SDK.
|
||||||
|
|
||||||
Spec 2025-11-25 (suite 0.1.16): Server 100% (30/30) · Client 100% (18/18)
|
Spec 2025-11-25 (suite 0.1.16): Server 100% (30/30) · Client 100% (18/18)
|
||||||
Spec 2026-07-28 (suite 0.2.0-alpha.9): Server 92.5% (37/40) · Client 75.0% (24/32)
|
Spec 2026-07-28 (suite 0.2.0-alpha.9): Server 97.5% (39/40) · Client 90.6% (29/32)
|
||||||
|
|
||||||
|
Extension scenarios are reported separately below because they are
|
||||||
|
informational and do not count toward SDK tiering.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -14,11 +17,20 @@ All 2026-07-28 work carries the `2026-07-28` label and the
|
||||||
Per-scenario conformance status is tracked in the epic issue:
|
Per-scenario conformance status is tracked in the epic issue:
|
||||||
[#977 — Tracking: 2026-07-28 spec conformance](https://github.com/modelcontextprotocol/rust-sdk/issues/977).
|
[#977 — Tracking: 2026-07-28 spec conformance](https://github.com/modelcontextprotocol/rust-sdk/issues/977).
|
||||||
|
|
||||||
### Conformance (baseline 2026-07-13, suite `0.2.0-alpha.9`)
|
### Versioned-spec conformance (baseline 2026-07-21, suite `0.2.0-alpha.9`)
|
||||||
|
|
||||||
- Server: 3 scenarios (`tools-call-with-progress` stateless behavior, SEP-2243 server-side custom headers, and `server-stateless` — the SEP-2575 discovery/negotiation suite at 2/28 checks)
|
- Server: 1 expected failure: `json-schema-2020-12`
|
||||||
- Client: 8 scenarios (SEP-2243 headers ×3, `request-metadata`, and 4 single-check auth failures: SEP-2350 step-up, pre-registration, SEP-2352 AS migration, SEP-2468 issuer validation); fixes for SEP-2350 (#888) and SEP-2352 (#965) are already in review
|
- Client: 3 expected failures: `tools_call`, `auth/scope-step-up`, and `auth/authorization-server-migration`
|
||||||
- CI: run the full `--spec-version 2026-07-28` suites (stateless server) instead of hand-picked scenario lists; re-baseline on each draft-suite bump
|
- CI: runs the complete `2026-07-28` versioned-spec suites with a strict baseline; an unlisted failure or a listed scenario that starts passing fails the build
|
||||||
|
|
||||||
|
### Extension conformance (informational)
|
||||||
|
|
||||||
|
Extension-tagged scenarios are excluded by `--spec-version` filters, so CI
|
||||||
|
runs them in separate server and client steps with
|
||||||
|
`conformance/expected-failures-extensions.yaml`.
|
||||||
|
|
||||||
|
- SEP-2663 Tasks server: 9 expected failures; `tasks-status-notifications` is currently skipped by the upstream harness; tracked in #868
|
||||||
|
- Client extensions: `auth/client-credentials-basic` passes; `auth/client-credentials-jwt` and `auth/enterprise-managed-authorization` are expected failures
|
||||||
|
|
||||||
### Spec features without conformance scenarios
|
### Spec features without conformance scenarios
|
||||||
|
|
||||||
|
|
@ -100,5 +112,5 @@ These extension scenarios are tracked but do not count toward tier advancement:
|
||||||
|---|---|---|
|
|---|---|---|
|
||||||
| `auth/client-credentials-jwt` | extension | ❌ Failed — JWT `aud` claim verification error |
|
| `auth/client-credentials-jwt` | extension | ❌ Failed — JWT `aud` claim verification error |
|
||||||
| `auth/client-credentials-basic` | extension | ✅ Passed |
|
| `auth/client-credentials-basic` | extension | ✅ Passed |
|
||||||
| `auth/cross-app-access-complete-flow` | extension | ❌ Failed — sends `authorization_code` grant instead of `jwt-bearer` |
|
| `auth/enterprise-managed-authorization` | extension | ❌ Failed — scenario is not implemented by the conformance client |
|
||||||
| `tasks-*` | extension | Not yet attempted |
|
| `tasks-*` | extension | ❌ 9 expected failures · ⏭️ 1 upstream-skipped scenario |
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,11 @@
|
||||||
# Known failures for the pinned 2026-07-28 draft conformance suite
|
# Known failures for the pinned 2026-07-28 draft conformance suite
|
||||||
# (@modelcontextprotocol/conformance DRAFT_CONFORMANCE_VERSION).
|
# (@modelcontextprotocol/conformance DRAFT_CONFORMANCE_VERSION).
|
||||||
#
|
#
|
||||||
# The full suites run in CI with `--expected-failures` pointing at this file:
|
# The full versioned-spec suites run in CI with `--expected-failures` pointing
|
||||||
|
# at this file. Extension scenarios are filtered out by `--spec-version` and
|
||||||
|
# tracked separately in `expected-failures-extensions.yaml`.
|
||||||
|
#
|
||||||
|
# Within the versioned-spec suites:
|
||||||
# - a scenario failing that is NOT listed here fails the build
|
# - a scenario failing that is NOT listed here fails the build
|
||||||
# - a scenario listed here that starts passing also fails the build (stale entry),
|
# - a scenario listed here that starts passing also fails the build (stale entry),
|
||||||
# so remove it from this list when the underlying issue is fixed.
|
# so remove it from this list when the underlying issue is fixed.
|
||||||
|
|
|
||||||
32
conformance/expected-failures-extensions.yaml
Normal file
32
conformance/expected-failures-extensions.yaml
Normal file
|
|
@ -0,0 +1,32 @@
|
||||||
|
# Known failures for informational extension scenarios in
|
||||||
|
# @modelcontextprotocol/conformance DRAFT_CONFORMANCE_VERSION.
|
||||||
|
#
|
||||||
|
# Extensions are not selected by a `--spec-version` run and do not count toward
|
||||||
|
# SDK tiering. CI runs them separately so a green versioned-spec suite does not
|
||||||
|
# hide extension gaps.
|
||||||
|
#
|
||||||
|
# This is a strict baseline:
|
||||||
|
# - an unlisted failure fails the build
|
||||||
|
# - a listed scenario that starts passing fails the build as a stale entry
|
||||||
|
#
|
||||||
|
# When bumping DRAFT_CONFORMANCE_VERSION, review the available extension and
|
||||||
|
# pending scenarios and update this file deliberately.
|
||||||
|
|
||||||
|
server:
|
||||||
|
# SEP-2663 Tasks Extension, tracked in #868.
|
||||||
|
# `tasks-status-notifications` is intentionally absent: the upstream check is
|
||||||
|
# currently skipped, and CI should fail if it becomes active but does not pass.
|
||||||
|
- tasks-lifecycle
|
||||||
|
- tasks-capability-negotiation
|
||||||
|
- tasks-wire-fields
|
||||||
|
- tasks-request-state-removal
|
||||||
|
- tasks-mrtr-input
|
||||||
|
- tasks-request-headers
|
||||||
|
- tasks-dispatch-and-envelope
|
||||||
|
- tasks-required-task-error
|
||||||
|
- tasks-mrtr-composition
|
||||||
|
|
||||||
|
client:
|
||||||
|
# Informational OAuth extension scenarios.
|
||||||
|
- auth/client-credentials-jwt
|
||||||
|
- auth/enterprise-managed-authorization
|
||||||
Loading…
Reference in a new issue