← 1.0.0 backlogs ISS-16

The TypeScript client ignores the product version the daemon now sends

Type
Debt — a field received and dropped
Found while
SAPE-1
Triage
Defer
Status
Open
Severity
Low — nothing breaks; the new capability is simply unavailable in TypeScript

Description

SAPE-1 added productVersion to the welcome frame, so a connected client can record which build of the server answered — as opposed to version, which is the protocol version and is a constant.

The Go client reads it: wire.Welcome.ProductVersion (internal/wire/wire.go:107), surfaced by the shell at internal/cli/shell.go:469.

The TypeScript client does not have the field. Its welcome handler decodes the frame into a type that names one key and discards everything else:

// packages/ecosy-sapedb/src/client/index.ts:831-833
} else if (frame.type === FrameType.welcome) {
  const body = decodeJsonPayload<{ challenge?: string }>(frame);
  if (body?.challenge) entry.resolveChallenge(body.challenge);
}

So the bytes arrive, are parsed, and are thrown away — there is nowhere in the client to put them and nothing a caller can ask.

Evidence

Triage

Does it lose data, break a promise on a public surface, or stop somebody installing and running? No, no, and no — and the first two were checked rather than assumed.

Nothing is lost: the field is informational and the server keeps a copy of what it sent. Nothing on a public surface is broken: the wire rule for 1.0.0 is that fields may be added and never renamed or removed, this is an addition, and an old client meeting a new daemon connects and runs normally — measured in both directions, not reasoned about. Nothing blocks installing or running.

Defer. This is the mildest kind of gap: a capability that exists on one side and has not yet been picked up on the other. It is the mirror of ISS-12 and it is triaged the opposite way for a reason worth stating — ISS-12 makes an operation uncallable from a client, while this one makes a field unreadable. One blocks work; the other withholds a convenience.

If deferred, what it costs to wait