ADR-001: Paket Layanan
Status: Diterima
Tanggal: 2025-09-22
Mengapa
Kita membutuhkan sinyal control-plane (misalnya, reset sesi) yang jelas, zero-alloc saat parsing, dan kompatibel mundur.
Keputusan
Dua encoding hidup berdampingan:
-
Legacy:
[type] // 1 byteDipertahankan untuk kompatibilitas mundur (saat ini hanya
SessionReset). -
V1 framed:
0xFF 0x01 [type] // 3 byte: prefix, versi, tipeMenyediakan versioning untuk evolusi masa depan.
Deteksi (ketat)
Sebuah paket adalah paket layanan jika dan hanya jika:
len==1dantypedikenal (legacy), ataulen==3dan byte-nya adalah0xFF 0x01 <tipe-dikenal>(v1). Semua yang lain bukan paket layanan.
API
package service
type PacketType uint8
const (
Unknown PacketType = iota
SessionReset
)
type PacketHandler interface {
TryParseType(pkt []byte) (PacketType, bool) // zero-alloc
EncodeLegacy(t PacketType, buffer []byte) ([]byte, error) // zero-alloc: buffer sudah dialokasikan
EncodeV1(t PacketType, buffer []byte) ([]byte, error) // zero-alloc: buffer sudah dialokasikan
}
Kompatibilitas & Peluncuran
- Terima: selalu terima baik legacy maupun v1.
- Kirim: default ke legacy. Setelah feature flag handshake (
ServicePacketsV1=true), kirim v1 ke klien tersebut; jika tidak tetap legacy.