External readers consume samples from the Source Bus by runtime source_id. The declaration source_key remains useful metadata, but it is not a read-plane route key.
service SourceReadService {
rpc Subscribe(SubscribeRequest) returns (stream SubscribeEvent);
}
message SubscribeRequest {
string source_id = 1;
string session_id = 2;
}
message SubscribeEvent {
oneof event {
Sample sample = 1;
ReadStreamStateChanged state = 2;
}
}
message ReadStreamStateChanged {
string session_id = 1;
string source_id = 2;
StreamState state = 3;
string detail = 4;
}
| Area | Current contract |
|---|---|
| Handshake | Producers send one SourceDeclared; Loop replies with RegistrationAccepted.source_id. |
| Data plane | Producers send SampleBatch.source_id; robot samples carry RobotPayload.state map entries. |
| Read plane | Consumers subscribe with SubscribeRequest.source_id and receive Sample plus ReadStreamStateChanged.source_id. |
| Metadata | source_key can be shown to users or used for server reconciliation, but runtime actions use source_id. |