Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
cb0f5af
feat(events): server conformance for the merged Events design sketch,…
panyam Sep 15, 2026
1207bf8
fix(events): score a server whose schemas require arguments, and grad…
panyam Sep 17, 2026
14457c1
feat(events): events-push, server conformance for push delivery
panyam Sep 20, 2026
0adb7ce
feat(events): events-webhook, server conformance for subscription man…
panyam Sep 20, 2026
6d76f93
feat(events): events-webhook-delivery, the fifth and last phase-1 sce…
panyam Sep 20, 2026
0ed9009
docs(events): record the five-scenario results and what each fixture …
panyam Sep 20, 2026
c465929
docs(events): correct the SSRF finding and record why mcpkit diverges
panyam Sep 20, 2026
b7fcf3f
fix(events): grade the rows webhook and webhook-delivery were dropping
panyam Sep 22, 2026
d77741d
test(events): negative controls for push, webhook and webhook delivery
panyam Sep 22, 2026
0ffd1ce
test(events): run the push and delivery controls concurrently
panyam Sep 22, 2026
d3d26e0
fix(events): the capability declares through the extensions map
panyam Sep 23, 2026
5befc60
feat(events): drive the fixture's diagnostic controls where they exist
panyam Sep 24, 2026
f9eb9a4
feat(events): grade the three rows that need a server-ended stream
panyam Sep 24, 2026
6be2ca1
feat(events): grade cross-tenant isolation via the fixture's tenant c…
panyam Sep 24, 2026
80d6528
fix(events): probes answer the verification challenge, and grade a fa…
panyam Sep 24, 2026
77c10e0
feat(events): grade the TTL durability rows through a restart control
panyam Sep 24, 2026
3089d62
fix(events): recognise every consent path, not just the handshake
panyam Sep 24, 2026
5aceffa
feat(events): claim four rows the probes already reach
panyam Sep 24, 2026
3051ea2
docs(events): correct the counts, and name the PR the capability rows…
panyam Sep 24, 2026
e18b608
docs(events): keep a check slug out of the file that does not emit it
panyam Sep 24, 2026
51f85d7
fix(events): emit every row on every path, which a real run caught
panyam Sep 24, 2026
07890dc
feat(events): grade delivery against a hardened server, one origin at…
panyam Sep 24, 2026
8edc0cc
feat(runner): say how much of a red run was never checked
panyam Sep 24, 2026
df035e5
fix(events): grade reject-non-routable on a probe the scheme rule can…
panyam Sep 24, 2026
863b20b
feat(events): probe the -32013 row on the type a server says is capped
panyam Sep 24, 2026
45e4ede
feat(events): ask for the gap and terminated envelopes on the scenari…
panyam Sep 24, 2026
2323122
feat(events): grade truncated-false-when-no-replay on push
panyam Sep 24, 2026
02271a0
Merge branch 'main' into feat/events-conformance-suite
panyam Oct 2, 2026
a293f4e
feat(events): client conformance scenarios (#540)
panyam Oct 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
27 changes: 27 additions & 0 deletions examples/clients/typescript/events-broken-clients.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
/**
* Deliberately broken Events clients for the negative tests in
* src/scenarios/client/events/events.test.ts. Each one is the conformant
* client from events-client.ts with exactly one behaviour switched off, so a
* flipped check names the rule it caught.
*/

import {
CONFORMANT,
EventsClientOptions,
makeEventsClient
} from './events-client.js';

function broken(change: Partial<EventsClientOptions>) {
return makeEventsClient({ ...CONFORMANT, ...change });
}

export const ignoresExtensionGate = broken({ gateOnExtension: false });
export const noDrainOnHasMore = broken({ drainOnHasMore: false });
export const ignoresNextPollMs = broken({ respectNextPollMs: false });
export const noPollFloor = broken({ pollFloorMs: 0 });
export const dropsTruncatedCursor = broken({ persistTruncatedCursor: false });
export const replaysNullCursor = broken({ replayNullCursor: true });
export const failsOnAbsentCursor = broken({ tolerateAbsentCursor: false });
export const ignoresListChanged = broken({ relistOnListChanged: false });
export const refreshesAfterExpiry = broken({ refreshBeforeExpiry: false });
export const neverReconnects = broken({ reconnectDeadStream: false });
Loading
Loading