syntax = "proto3"; // Package scrabble.push.v1 is the backend -> gateway live-event control channel. // The gateway opens Subscribe once at startup and keeps the stream open; the // backend pushes one Event per notification intent. The payload is an opaque // FlatBuffers message (the scrabblefb.* tables) that the gateway forwards to the // client without re-interpreting it. The transport is plain gRPC server-stream // (ARCHITECTURE.md ยง2); the client edge is Connect-RPC (gateway/proto/edge). package scrabble.push.v1; option go_package = "scrabble/pkg/proto/push/v1;pushv1"; // Push is the unidirectional live-event channel from backend to gateway. service Push { // Subscribe opens the single backend -> gateway event stream. The backend // sends every event for every user; the gateway fans them out to the active // client subscriptions by user_id. rpc Subscribe(SubscribeRequest) returns (stream Event); } // SubscribeRequest opens a push subscription. gateway_id identifies the gateway // instance for logging; the MVP backend keeps no per-gateway state. message SubscribeRequest { string gateway_id = 1; } // Event is one live-event frame. kind is the notification catalog kind // (your_turn, opponent_moved, chat_message, nudge, match_found). payload is the // FlatBuffers-encoded body for that kind. event_id is a correlation id the // gateway carries through to the client envelope. message Event { string user_id = 1; string kind = 2; bytes payload = 3; string event_id = 4; }