← 1.0.0 backlogs ISS-3

The fixture covers 8 of 13 frame types

Type
Debt
Found while
SAPE-13
Triage
Defer
Status
Open
Severity
Medium — the uncovered five include the whole handshake

Description

fixtures/frames.json is what a third-party client builds against. It holds 10 cases covering 8 distinct frame types out of the 13 the protocol defines. Five types have no case at all.

Evidence

Counted from the two files themselves, not from either one's prose.

The 13 types, internal/protocol/frame.go:37-57:

#TypeIn the fixture?
1hellono
2welcomeno
3pingyes — "ping, no payload"
4pongno
5invokeyes — "invoke with JSON"
6resultyes — "largest id", "payload with every byte value"
7failureyes — "utf-8 in JSON"
8subscribeno
9eventyes — "event, id 0 — nobody asked for it"
10goodbyeno
11elevateyes — the proof answering the welcome's challenge
12exploreyes — two cases, a typed get and a catalogue
13declareyes — an operation stored on a running server

8 of 13, from 10 cases. Note what the five missing ones are: hello and welcome are the whole handshake, goodbye is how a connection ends cleanly, and subscribe is the entry to the only asynchronous part of the protocol — whose answering frame, event, is covered.

The suites are honest about the number without stating it. The TypeScript guard asserts fixture.cases.length >= 8 (tests/frames.test.mjs:41) — a floor, not a coverage claim — while asserting that the fixture's types table matches FrameType exactly. So the table of 13 is pinned and the cases are not.

Triage

Does it lose data, break a promise on a public surface, or stop somebody installing and running? No. The frame numbers 1…13 are frozen by the types table, which is pinned on both sides, and the types with no case are all exercised by real tests in both repositories — a handshake that did not work would fail every live test there is. What is missing is a byte-level example a stranger can build against without running either implementation.

So this blocks nobody from installing or running, and it breaks no promise that was made: the fixture never claimed to be complete. It is a gap in what the specification teaches, which is real and is not a release gate. Defer.

If deferred, what it costs to wait