Acceptance traceability

Copy Markdown View Source

This ledger uses the exact requirement and test identifiers from the clean-room baseline. PASS means the named observable evidence was run locally and is complete for that row. PARTIAL means only a subset was observed. NOT RUN means no evidence is claimed. Full official conformance remains external evidence; independent SDK smoke evidence is recorded only where explicitly listed and is not treated as complete interoperability.

Requirements

IDBaseline requirementStatusEvidence
R01Package identity and license: publish as :attesto_mcp_server, license original code Apache-2.0, include LICENSE, metadata, source URL, changelog, security policy, and attribution/source ledgerPARTIALmix.exs, LICENSE, CHANGELOG.md, SECURITY.md; metadata names the intended public source URL, while repository creation and hosted verification remain pending
R02Dependencies and HTTP boundary: require compatible Attesto/AttestoMCP and Plug; use a normal Plug entry point; no production Bandit/web-server dependency; Bandit only in development/test/example scopePASSreleased attesto_mcp ~> 1.2, mix.exs, production dependency tree, auth tests, server-neutral Plug tests, and Bandit adapter tests
R03Complete server surface: public registration/handler contracts for tools, resources, templates, prompts, completion, notifications, MRTR and optional per-era tasks, with stdio and Streamable HTTP adapters and deterministic duplicate rejectionPARTIALAPI, registry, MRTR, subscription, stdio, and adapter tests; Tasks are deliberately unadvertised
R04Decode UTF-8 JSON-RPC 2.0 only; accept string or integer non-null IDs; reject batches; distinguish requests, notifications, responses, and malformed objects; validate selected dated schemas while preserving allowed extensions; default to JSON Schema 2020-12; never fetch network refsPARTIALlib/attesto_mcp_server/json_rpc.ex, lib/attesto_mcp_server/schema.ex, schema tests, and the pinned fixture's scored schema scenarios; broad message corpus remains partial
R05Support exactly 2026-07-28 and 2025-11-25 by default, selecting modern per request metadata and legacy from initialize without sharing negotiated statePASScore/legacy tests plus pinned authenticated runner: scored server scenarios pass in both eras
R06Require modern protocolVersion/clientCapabilities metadata; implement discover; return exact unsupported-version/capability errors; include resultType and server identity metadata on modern successesPASSP0/P4/P10-P13 regressions plus pinned 2026 scored runner
R07Legacy lifecycle: initialize is first non-ping interaction, negotiate 2025-11-25, return server info/capabilities/instructions, wait for initialized before server traffic, and restrict negotiated capabilitiesPARTIALlegacy core/Plug, detached-owner cancellation, newest-live same-session stream routing, stale teardown, and test/p10_p13_regression_test.exs; full stream matrix remains partial
R08Modern Streamable HTTP: one request/notification per POST, JSON/SSE Accept coverage, request-scoped SSE and empty 202 for notifications; modern GET/DELETE 405 and no sessions/resumptionPASSmodern Plug/Bandit tests, stream fixture, and pinned 2026 scored runner
R09Legacy Streamable HTTP: dated POST/GET, optional secure session IDs, 400/404 lifecycle, DELETE, multiple streams without duplicate delivery, and only advertised resumptionPARTIALlegacy Plug/Bandit tests plus deterministic same-session isolation and stale-teardown regressions; resumption is not advertised
R10HTTP mirror headers: case-insensitive protocol/method/name/parameter declarations, exact Base64 sentinel, body/header equality, and official x-mcp-header constraintsPASSplug_auth_test.exs, p4_regression_test.exs, and frozen HTTP scenarios
R11Stdio: one compact UTF-8 JSON-RPC message per stdout line, logs on stderr, interleaved IDs, modern cancellation, prompt EOF, and legacy server requests only after capability negotiationPARTIALstdio_test.exs, cold-start/live-pipe tests; broad client scripts remain partial
R12Fixed auth pipeline: every protected HTTP leg enters the approved Attesto boundary before dispatch/body work, with canonical assigns; stdio uses launcher/environment credentialsPASSreleased attesto_mcp 1.2.0; direct public ProtectResource.prepare/1, authenticate/2, and authorize/3 calls; boundary ordering, real-token audience binding, and stdio tests; no older fallback
R13Resource metadata and audience: RFC 9728 metadata, authorization server, bearer header, resource_metadata challenges, and one pinned canonical resource/audiencePARTIALmetadata and auth tests; deployment proxy matrix remains partial
R14Token and sender constraints: Authorization on every leg, no query/body tokens by default, issuer/audience/time/purpose/principal/scopes and DPoP/mTLS binding through AttestoPARTIALp3_auth_acceptance_test.exs; full deployment matrix remains partial
R15Authorization policy: documented method scopes, operation plus configured subscription/task scopes, 401/403 challenges, and reauthorization for every handle/deliveryPARTIALsubscription and auth tests; full sender/deployment matrix remains partial
R16Isolation and supervision: separately cancellable supervised work, correlated IDs, configurable global/principal limits, and handler crash isolationPARTIALcore, runtime, P5, atomic admission/ownership, nil-ID concurrency, detached-owner, same-session isolation, and exact-once terminal telemetry tests; broad stress remains partial
R17State boundaries: independently routable modern handles and principal/session-bound bounded legacy statePARTIALcursor/request-state tests; clustered two-replica evidence not run
R18Cancellation and timeout: per-method soft/absolute limits, owner-only stream close/cancel, no post-cancel output, and prompt cleanupPARTIALcore, stdio, real Bandit disconnect, detached legacy cancellation, owner detachment, and exact-once counter/telemetry cleanup tests; full disconnect matrix remains partial
R19Error taxonomy: dated JSON-RPC/HTTP separation, reserved 2026 codes, modern 400/404/405 rules, and legacy dated resource errorsPARTIALP0/P7 tests and pinned scored runner; broad malformed/error corpus remains partial
R20Tool execution errors: protocol errors for unknown/malformed calls, isError business results, and declared output-schema validationPARTIALprimitive matrix and core tests; full handler corpus remains partial
R21Server primitives: all tools/resources/templates/prompts/completion methods, dated content variants, pagination, completion cap, validation, and auth filteringPARTIALP2A primitive tests and pinned diagnostic fixture/scenarios; full local matrix remains partial
R22Streaming/progress: JSON or SSE by need, valid final response, no-buffering header, keepalive, bounded queues, monotonic active-token progress, and cancellation stopPARTIALBandit and subscription tests; broad queue/flood matrix remains partial
R23MRTR: allowed methods, capability-filtered input requests, unique keys, new retry IDs, typed response validation, bound integrity state, expiry and single usePARTIALp1a_mrtr_test.exs, core tests, and test/p10_p13_regression_test.exs
R24Subscriptions: explicit filters, first acknowledgment, owner request IDs/meta, concurrent isolation, close/cancel targeting, authorization recheck, and suppressionPARTIALstate/HTTP subscription tests and test/p10_p13_regression_test.exs
R25Legacy Tasks: disabled unless durable store/limits are configured; when enabled, advertise only negotiated dated task capabilities and implement full lifecycleNOT ADVERTISEDLegacy Tasks are hard-disabled and unadvertised
R26Modern Tasks: disabled unless durable store/limits are configured; when enabled, only tools/call task results, auth-checked lifecycle, headers, notifications, TTL and MRTR separationNOT ADVERTISEDModern Tasks are hard-disabled and unadvertised
R27Deterministic lists/pagination: stable auth-visible order, opaque integrity/auth-bound cursors, fixed limits, and invalid/expired/cross-context rejectionPARTIALcache/cursor tests; cluster and full mutation matrix remain partial
R28Cache semantics: nonnegative TTL/cache scope, no MRTR caching, private auth-varying defaults, safe public proof, stable page scopes, and invalidation notificationsPARTIALcache and subscription tests; broad cross-connection matrix remains partial
R29Security/resource controls: bounded inputs/output/schema/queues, rate limits, URI/origin safety, safe logs/telemetry, secure randomness, and fail-closed callbacks/configPARTIALschema/resource, telemetry and P5 tests; broad fuzz/stress remains partial
R30Observability/release gates: safe lifecycle telemetry, documented deployment/configuration/examples, and formatter/warnings/static/local/official gatesPARTIALlifecycle start/system-time and exact-once terminal telemetry tests; authenticated pinned runner (2026: 50 selected, 37 scored passed, raw 161/30; 2025: 33 selected, 30 scored passed, raw 80/0); exact TS 2.0.0/Python 2.1.1 clients pass both eras; local release and final package scans pass; 9 not-scored Tasks failures, hosted CI, and broad fuzz remain open

Local black-box matrix

IDStatusEvidence
T01PASSAPI tests and examples/consumer compile/run
T02PARTIALtest/conformance_fixture_test.exs, examples/conformance_server.exs, and scripts/run_conformance_fixture.sh; CI lane not run
T03PARTIALprimitive matrix
T04PARTIALJSON-RPC and P4 tests
T05PASScore discovery test and pinned 2026 fixture
T06PASSP0 version test
T07PASSP0/P4 metadata and capability tests
T08PASSPlug auth/header tests
T09PARTIALPlug and stdio tests
T10PARTIALBandit streaming test plus official progress/stream fixture scenarios; complete local matrix remains partial
T11PASSmodern method/session-header tests
T12PARTIALlegacy lifecycle tests
T13PARTIALlegacy session matrix
T14NOT ADVERTISEDLegacy resumption is not advertised
T15PARTIALstdio and cold-start tests
T16PASSmetadata/auth tests
T17PASSAttesto context test
T18PARTIALtoken failure matrix
T19PASSscope and subscription tests
T20PASSDPoP test
T21PASSmTLS test
T22PARTIALruntime/core concurrency tests
T23PARTIALcancellation tests
T24PARTIALerror taxonomy tests
T25PARTIALtool/content tests and official fixture diagnostics; full local matrix remains partial
T26PARTIALresource tests, test/p15_uri_template_test.exs, and official fixture resource diagnostics; static/template edge matrix remains partial
T27PARTIALprompt/completion tests and test/p10_p13_regression_test.exs
T28PARTIALbounded schema tests and pinned 2026 JSON-Schema scenarios; broad hostile matrix remains partial
T29PARTIALprogress/telemetry tests
T30PASSMRTR protocol tests and test/p10_p13_regression_test.exs
T31PARTIALMRTR binding tests
T32PASSsubscription acknowledgment/filter tests and test/p10_p13_regression_test.exs
T33PARTIALsubscription auth/close tests
T34NOT ADVERTISEDLegacy Tasks disabled
T35NOT ADVERTISEDLegacy Tasks disabled
T36NOT ADVERTISEDModern Tasks disabled
T37NOT ADVERTISEDModern Tasks disabled
T38NOT ADVERTISEDModern Tasks disabled
T39PARTIALcache/cursor tests
T40PARTIALlocal telemetry/hostile cases, pinned scored suites, and exact TS 2.0.0/Python 2.1.1 authenticated smoke gates in both eras; broad fuzz and the not-scored optional Tasks extension remain outside the passing surface

Compatibility and robustness ledger

IDBaseline definitionStatusEvidence
G01Progress has a live caller route and truthful delivery outcomePARTIALcore progress test; delivery acknowledgement remains limited
G02Every identified request, including unknown methods, terminates correlatedPARTIALcore/Plug/stdio tests and real Bandit disconnect coverage; every-transport unknown-method matrix remains incomplete
G03Legacy later legs obey negotiated version headersPASSlegacy Plug tests
G04Selected initialization revision governs later behaviorPARTIALlegacy lifecycle tests
G05SSE survives split points and legal line endingsPARTIALSSE parser tests
G06Supervised sibling restart is ownership-safe under active workPARTIALruntime restart tests; full stress not run
G07Replicated legacy sessions have one authoritative routeNOT RUNReplication is not advertised
G08Standing streams deliver incrementallyPASSlegacy and modern Bandit tests
G09Server-originated traffic is owner isolatedPASSsubscription/legacy stream tests
G10Decode categories and recoverable IDs remain privatePARTIALJSON-RPC/P4 tests; full secret-marker fuzz not run
G11Every applicable legacy HTTP leg reauthenticatesPASSlegacy Plug/Bandit tests
G12Initialization/recovery rejection is correlated and encodablePASSlegacy rejection tests
G13Initialized/request race does not cause avoidable failurePASS100-schedule legacy race
G14Invalid session identifiers remain boundedPARTIALbounded lookup tests; full flood not run
G15Every POST negotiates JSON and event-stream mediaPASSstrict parser regressions plus modern request/notification and legacy initialize/request/notification HTTP tests

Observed gate

The current direct dependency resolution uses released attesto_mcp 1.2.0. The current-runtime mix test.all gate passed 205 total (one doctest plus 204 tests), 79.39% coverage, zero-error/zero-skip Dialyzer, package unpack, and Hex advisory audit. Thirty randomized focused lifecycle/transport runs passed after atomic admission and terminal telemetry were corrected. The installed Elixir 1.18.3/OTP 27.3 floor ran the same mix test.all gate with 205/205 checks, 79.30% coverage, zero-error/zero-skip Dialyzer, package unpack, and Hex advisory audit. Both Elixir 1.18 and 1.20 formatters accept the final source.

The pinned runner 0.2.0-alpha.11 at commit 74edef34d674f563537be8c6587cebaa58e830ca selected 50 scenarios for 2026-07-28 (37 scored passed; raw 161 passed/30 failed, with 9 failing Tasks and both pending header scenarios passing) and 33 scenarios for 2025-11-25 (30 scored passed; raw 80 passed/0 failed across ten consecutive complete post-fix runs). No expected-failure baseline was used. Exact TypeScript 2.0.0 and Python 2.1.1 clients passed authenticated list/call gates in both eras. Docs, a clean unpacked-package compile and 205-check run, production dependency/license review, outdated/unused checks, stdio cold install, consumer compile/run, and source-neutral/secret/path scans passed. Independent Fable review returned GO; its follow-up documentation and regression recommendations were fixed and verified. Hosted CI passed the Elixir 1.18.3/OTP 27.3 and Elixir 1.20.3/OTP 29.0.5 verification matrix plus official interoperability before release.