# Implementation Checklist

Target protocol version: `0.1`

## Protocol Core

- [ ] Generated protobuf bindings from the canonical schema.
- [ ] Parser map registers application messages by protocol-compatible `typeName`.
- [ ] Built-in `HeartBeat` registration is owned by the framework.
- [ ] `PacketBase.typeName`, `nonce`, `data`, and `responseNonce` semantics match `PROTOCOL.md`.
- [ ] Same `typeName` cannot be registered for both normal listener and request listener on one connection.

## Transport

- [ ] `Transport` abstraction exposes only packet write and close operations.
- [ ] `Communicator` does not know whether the connection is TCP or WS.
- [ ] TCP framing writes a 4-byte big-endian length followed by one `PacketBase` protobuf payload.
- [ ] TCP reader rejects zero-length packets as no-op and closes on invalid or oversized lengths.
- [ ] WebSocket reader/writer uses one binary frame per `PacketBase` payload.
- [ ] TLS+TCP and WSS are unsupported in this iteration and documented as deferred.

## Lifecycle

- [ ] Close is idempotent.
- [ ] Pending requests complete with an error when the connection closes.
- [ ] Writes are serialized so packet bytes cannot interleave.
- [ ] Read, write, heartbeat, and close errors converge on the same disconnect path.

## Features

- [ ] Fire-and-forget send.
- [ ] Request-response send with timeout.
- [ ] Concurrent requests route by `responseNonce`.
- [ ] Heartbeat sends after inactivity and closes after missing response.
- [ ] Server broadcast.

## Verification

- [ ] TypeScript compile passes.
- [ ] Same-language TCP tests pass.
- [ ] Same-language WS tests pass.
- [ ] Go server / TypeScript client cross-language tests pass.
