Summary
The conformance runner (src/conformance.ts, feat/parity-runner) can connect to any adapter over stdio but currently runs only four schema/introspection checks. It does not verify the spec's CRUDE endpoint-binding MUST — that an operation invoked via the wrong mcp_aql_* endpoint is rejected, not executed (spec/docs/operations.md:494, crude-pattern.md:269, endpoint-modes.md:151). This gap let a hand-built adapter ship the violation (MCPAQL/makerperks-adapter#93) with a green build.
This realizes the slice of the existing TODO: add live CRUD proxy operation exercises (conformance.ts:~69) that covers endpoint binding.
Why this is the highest-leverage fix
The generator already emits an endpoint check, but hand-built adapters bypass it. A conformance check catches the violation regardless of how the adapter was built — generated, hand-rolled, or reference. It's also small, because the harness already introspects and connects.
What to build
Add an endpoint-binding check category to the runner, driven by introspection (no static vectors needed for this check):
- Call
introspect to learn every operation and its semantic category / endpoint.
- Determine the set of registered CRUDE endpoints. If only one endpoint is registered (e.g. a read-only adapter), record the check as
n/a (single endpoint) — not pass (don't imply coverage that wasn't exercised).
- Pick a READ operation (side-effect-free even if wrongly executed) and invoke it through every other registered endpoint. For each:
- Control: assert the same READ op via its correct endpoint succeeds.
Acceptance criteria
Dependencies / sequencing
Context
Triggered by MCPAQL/makerperks-adapter#93 (CRUDE endpoint enforcement missing). Current-state finding: the runner exists and is pointable at any adapter, but no existing check (conformance.ts, parity-runner.ts) ever issues a cross-endpoint call.
Summary
The conformance runner (
src/conformance.ts,feat/parity-runner) can connect to any adapter over stdio but currently runs only four schema/introspection checks. It does not verify the spec's CRUDE endpoint-bindingMUST— that an operation invoked via the wrongmcp_aql_*endpoint is rejected, not executed (spec/docs/operations.md:494,crude-pattern.md:269,endpoint-modes.md:151). This gap let a hand-built adapter ship the violation (MCPAQL/makerperks-adapter#93) with a green build.This realizes the slice of the existing
TODO: add live CRUD proxy operation exercises(conformance.ts:~69) that covers endpoint binding.Why this is the highest-leverage fix
The generator already emits an endpoint check, but hand-built adapters bypass it. A conformance check catches the violation regardless of how the adapter was built — generated, hand-rolled, or reference. It's also small, because the harness already introspects and connects.
What to build
Add an
endpoint-bindingcheck category to the runner, driven by introspection (no static vectors needed for this check):introspectto learn every operation and its semantic category / endpoint.n/a (single endpoint)— notpass(don't imply coverage that wasn't exercised).{ success: false }witherror.code === "VALIDATION_ENDPOINT_MISMATCH"(the canonical code — see [docs] Endpoint-mismatch: tighten SHOULD→MUST (operations.md §6.3) and register VALIDATION_ENDPOINT_MISMATCH in error-codes.md spec#263; note the generator currently emits the non-canonicalVALIDATION_WRONG_ENDPOINT, tracked in MCPAQL/adapter-generator — the check asserting the canonical code is what forces convergence).Acceptance criteria
endpoint-bindingcheck inconformance.ts+ surfaced inconformance-cli.tsoutput andconformance-report.json.makerperks-adapter@main) fails this check; the fixed version (PR #94 /fix/crude-endpoint-enforcement) and the generated example adapters pass (after the generator code-name is aligned).n/a, notpass.VALIDATION_ENDPOINT_MISMATCH.Dependencies / sequencing
conformance-testing.md).Context
Triggered by MCPAQL/makerperks-adapter#93 (CRUDE endpoint enforcement missing). Current-state finding: the runner exists and is pointable at any adapter, but no existing check (
conformance.ts,parity-runner.ts) ever issues a cross-endpoint call.