microsoft/typescript-go · critical · Error
Expected positive fixint or uint8 marker, received: 0x${tb.t
Error message
Expected positive fixint or uint8 marker, received: 0x${tb.toString(16)} What it means
The message-type element inside a tuple did not start with a positive-fixint (<=0x7f) or the uint8 marker (0xcc). Like error 83 this is a framing desynchronization: bytes are being interpreted at the wrong offset.
Source
Thrown at _packages/native-preview/src/api/syncChannel.ts:460
private readTuple(): void {
// Fixed 3-element array marker
const marker = this.readByte();
if (marker !== MSGPACK_FIXARRAY3) {
throw new Error(
`Expected fixed 3-element array (0x93), received: 0x${marker.toString(16)}`,
);
}
// Message type – positive fixint or uint8
const tb = this.readByte();
if (tb <= 0x7f) {
this._msgType = tb;
}
else if (tb === MSGPACK_UINT8) {
this._msgType = this.readByte();
}
else {
throw new Error(
`Expected positive fixint or uint8 marker, received: 0x${tb.toString(16)}`,
);
}
this._msgName = this.readBin();
this._msgPayload = this.readBin();
}
/**
* Read a MessagePack bin field.
*/
private readBin(): Buffer {
const marker = this.readByte();
let size: number;
switch (marker) {
case MSGPACK_BIN8:
size = this.readByte();
break;
View on GitHub (pinned to 1bcfa18d79)
Solutions
- Same remediation as the fixarray error: eliminate non-protocol writes on the child's stdout
- Restart the child and re-establish the channel; do not attempt to resync mid-stream
- Pin host and child to identical versions
- Enable child stderr logging to find what it printed right before the corruption
Defensive patterns
Strategy: fallback
Try / catch
try { /* channel request */ } catch (e) { if (/positive fixint or uint8 marker/.test(e.message)) { /* unrecoverable desync: respawn child and retry once */ } throw e; } Prevention
- Keep child stdout protocol-only
- Match binary versions after every upgrade
- Monitor child stderr for prints that preceded the desync
When it happens
Trigger: Stream misalignment caused by stray stdout output, a length-prefix bug, or reading garbage after a child crash; the parser lands mid-payload and reads a non-int marker byte where the type was expected.
Common situations: Same class as 0x93 mismatch: unlogged child prints to stdout, mismatched binary versions, or a partially-written frame observed after OOM/kill of the child process.
Related errors
- Expected fixed 3-element array (0x93), received: 0x${marker.
- Invalid message type from child: ${this._msgType}
- Expected binary data (0xc4-0xc6), received: 0x${marker.toStr
- no callback named `${name}` found
- Expected ${pkgName} to declare exactly one bin entry named $
AI-assisted analysis of microsoft/typescript-go@1bcfa18d79 (2026-08-16).
Data as JSON: /api/errors/4d1863cbaa1c9359.
Report an issue: GitHub.