A source connection declares one source, Loop accepts it with a runtime source_id, and every post-registration data/read/open path uses that id.
Sends one declaration and then emits lifecycle/data messages for the accepted source.
Reconciles declaration metadata, owns connectors, and routes samples by source_id.
Opens and subscribes using runtime ids returned by the source list.
source_key is declaration/reconciliation/display metadata only.RobotPayload.state is a map from robot signal key to typed RobotValue. The data plane does not route by the declaration key.ReadStreamStateChanged.source_id carries lifecycle/error state for read subscribers.SourceDeclared.source_key is registration metadata; RegistrationAccepted.source_id is the runtime identity; SampleBatch.source_id, SubscribeRequest.source_id, and ReadStreamStateChanged.source_id are the post-registration routing contract.