Skip to content

Commit 5109d18

Browse files
test(e2e): per-stub TODO markers instead of section comments
1 parent 8fdfee1 commit 5109d18

12 files changed

Lines changed: 27 additions & 13 deletions

test/e2e/requirements.ts

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2871,8 +2871,6 @@ export const REQUIREMENTS: Record<string, Requirement> = {
28712871
]
28722872
},
28732873

2874-
// === Superseding 2026-07-28 requirements (added by the supersedes round; addedInSpecVersion gates them out of the 2025-11-25 matrix until 2026 joins ALL_SPEC_VERSIONS) ===
2875-
28762874
'protocol:envelope:undeclared-capability-32003': {
28772875
addedInSpecVersion: '2026-07-28',
28782876
supersedes: ['lifecycle:capability:client-not-declared'],

test/e2e/scenarios/elicitation.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -826,10 +826,11 @@ verifies('elicitation:capability:not-declared', async ({ transport }: TestArgs)
826826
expect(tap.received.filter(m => 'method' in m && m.method === 'elicitation/create')).toEqual([]);
827827
});
828828

829-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
830829
verifies('mrtr:caps-gated-elicitation-mode', async () => {
830+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
831831
throw new Error('stub: not yet asserted — assert the server omits elicitation inputRequests for modes the client did not declare');
832832
});
833833
verifies('mrtr:url-elicitation-flow', async () => {
834+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
834835
throw new Error('stub: not yet asserted — assert URL elicitation rides inputRequests with requestState and completes on retry');
835836
});

test/e2e/scenarios/handler-context.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -166,7 +166,7 @@ verifies('hosting:context:web-request-headers', async (_args: TestArgs) => {
166166
}
167167
});
168168

169-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
170169
verifies('typescript:mcpserver:tool:extra-sessionless', async () => {
170+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
171171
throw new Error('stub: not yet asserted — assert the 2026 handler context carries no session identifier');
172172
});

test/e2e/scenarios/hosting-http.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1037,10 +1037,11 @@ verifies('hosting:http:send-no-listener-noop', async (_args: TestArgs) => {
10371037
}
10381038
});
10391039

1040-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
10411040
verifies('hosting:sessionless:delete-405', async () => {
1041+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
10421042
throw new Error('stub: not yet asserted — assert DELETE on the 2026 MCP endpoint returns 405');
10431043
});
10441044
verifies('hosting:sessionless:no-batching', async () => {
1045+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
10451046
throw new Error('stub: not yet asserted — assert a JSON-RPC batch-array POST is rejected with 400 in 2026 mode');
10461047
});

test/e2e/scenarios/lifecycle.test.ts

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -560,22 +560,27 @@ verifies('lifecycle:capability:strict-mode-throws', async ({ transport }: TestAr
560560
}
561561
});
562562

563-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
564563
verifies('discover:basic', async () => {
564+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
565565
throw new Error('stub: not yet asserted — assert server/discover returns supportedVersions, capabilities, and serverInfo');
566566
});
567567
verifies('discover:instructions-passthrough', async () => {
568+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
568569
throw new Error('stub: not yet asserted — assert DiscoverResult.instructions is exposed on the client');
569570
});
570571
verifies('discover:capabilities-match-registrations', async () => {
572+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
571573
throw new Error('stub: not yet asserted — assert DiscoverResult.capabilities matches the registered handlers');
572574
});
573575
verifies('lifecycle:version:2026-negotiable', async () => {
576+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
574577
throw new Error('stub: not yet asserted — assert both sides agree on and report the 2026 version');
575578
});
576579
verifies('lifecycle:version:client-retries-from-supported', async () => {
580+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
577581
throw new Error('stub: not yet asserted — assert the client retries with a version from supported[] on -32004');
578582
});
579583
verifies('lifecycle:version:unsupported-error', async () => {
584+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
580585
throw new Error('stub: not yet asserted — assert the server returns -32004 with data.supported[] (HTTP 400 on streamable HTTP)');
581586
});

test/e2e/scenarios/logging.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ verifies('logging:out-of-band:basic', async ({ transport }: TestArgs) => {
227227
expect(received).toEqual([{ level: 'info', logger: 'job-runner', data: 'nightly index rebuild started' }]);
228228
});
229229

230-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
231230
verifies('logging:per-request:level-respected', async () => {
231+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
232232
throw new Error('stub: not yet asserted — assert per-request _meta logLevel filters the emitted log notifications for that request');
233233
});

test/e2e/scenarios/protocol.test.ts

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1679,20 +1679,23 @@ verifies('protocol:transport-callbacks:wrappable-after-connect', async ({ transp
16791679
}
16801680
});
16811681

1682-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
16831682
verifies('protocol:envelope:undeclared-capability-32003', async () => {
1683+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
16841684
throw new Error(
16851685
'stub: not yet asserted — assert -32003 MissingRequiredClientCapabilityError when a required capability is absent from _meta'
16861686
);
16871687
});
16881688
verifies('protocol:envelope:ctx-capabilities-readable', async () => {
1689+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
16891690
throw new Error('stub: not yet asserted — assert a handler reads the per-request client capabilities from its context');
16901691
});
16911692
verifies('protocol:request-id:outstanding-scope', async () => {
1693+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
16921694
throw new Error(
16931695
'stub: not yet asserted — assert an id may be reused once its response arrived; collisions among in-flight requests are rejected'
16941696
);
16951697
});
16961698
verifies('protocol:cancel:sse-close-cancels', async () => {
1699+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
16971700
throw new Error('stub: not yet asserted — assert closing the SSE response stream mid-request fires the handler abort signal');
16981701
});

test/e2e/scenarios/resources.test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -746,10 +746,11 @@ verifies('mcpserver:resource:metadata-override', async ({ transport }: TestArgs)
746746
});
747747
});
748748

749-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
750749
verifies('subscriptions:resource-updates-via-listen', async () => {
750+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
751751
throw new Error('stub: not yet asserted — assert a resourceSubscriptions filter on subscriptions/listen delivers resources/updated');
752752
});
753753
verifies('subscriptions:cancel-stops-delivery', async () => {
754+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
754755
throw new Error('stub: not yet asserted — assert no further notifications are delivered after the subscription is cancelled');
755756
});

test/e2e/scenarios/roots.test.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -170,7 +170,7 @@ verifies('roots:list-changed', async ({ transport }: TestArgs) => {
170170
expect(refetched[1]?.roots).toEqual(roots);
171171
});
172172

173-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
174173
verifies('mrtr:roots-via-input-required', async () => {
174+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
175175
throw new Error('stub: not yet asserted — assert roots are requested via a ListRootsRequest inside an InputRequiredResult');
176176
});

test/e2e/scenarios/sampling.test.ts

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -578,18 +578,20 @@ verifies('sampling:create:not-supported', async ({ transport }: TestArgs) => {
578578
expect(tap.received.filter(m => 'method' in m && m.method === 'sampling/createMessage')).toEqual([]);
579579
});
580580

581-
// --- 2026-07-28 superseding requirement stubs (register zero cells until 2026 joins ALL_SPEC_VERSIONS) ---
582581
verifies('mrtr:input-request:sampling', async () => {
582+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
583583
throw new Error(
584584
'stub: not yet asserted — assert a CreateMessageRequest inside an InputRequiredResult routes to the sampling callback and keys the retry'
585585
);
586586
});
587587
verifies('mrtr:caps-gated-sampling-tools', async () => {
588+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
588589
throw new Error(
589590
'stub: not yet asserted — assert the server omits tool-enabled sampling inputRequests for clients without the sampling.tools capability'
590591
);
591592
});
592593
verifies('mrtr:caps-gated-inputrequests', async () => {
594+
// TODO(2026-07-28, @felixweinberger): to be implemented for 2026-07-28 spec release
593595
throw new Error(
594596
'stub: not yet asserted — assert the server never sends inputRequests for capabilities the client did not declare in _meta'
595597
);

0 commit comments

Comments
 (0)