ADR-001: Service-Pakete
Status: Akzeptiert
Datum: 2025-09-22
Warum
Wir benötigen Control-Plane-Signale (z.B. Session-Reset), die eindeutig, beim Parsen allokationsfrei und abwärtskompatibel sind.
Entscheidung
Zwei Kodierungen koexistieren:
-
Legacy:
[type] // 1 ByteBeibehalten für Abwärtskompatibilität (derzeit nur
SessionReset). -
V1 gerahmt:
0xFF 0x01 [type] // 3 Bytes: Präfix, Version, TypBietet Versionierung für zukünftige Evolution.
Erkennung (strikt)
Ein Paket ist ein Service-Paket genau dann, wenn:
len==1undtypebekannt ist (legacy), oderlen==3und die Bytes0xFF 0x01 <bekannter-typ>sind (v1). Alles andere ist kein Service-Paket.
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 ist vorab allokiert
EncodeV1(t PacketType, buffer []byte) ([]byte, error) // zero-alloc: buffer ist vorab allokiert
}
Kompatibilität & Rollout
- Empfangen: immer sowohl legacy als auch v1 akzeptieren.
- Senden: Standard ist legacy. Nach Handshake-Feature-Flag (
ServicePacketsV1=true) v1 an diesen Client senden; ansonsten legacy beibehalten.