Source ingest — sequence diagram

Time flows downward. Solid = a call/request; dashed = a reply. marks server→client commands. Yellow notes = what happens inside an actor. Every message is from the real loop/module/foundation + SDK code.

control plane (Connect) data plane (StreamSamples) stop (Close / Shutdown) dashed line = reply/return
CONTROL PLANE — Connect (bidirectional stream): register the client, discover & open its sources (once)DATA PLANE — StreamSamples (client-streaming): one flat vector per tick, fanned out to subscribersSTOP — recorder ends the session or the linkloopevery tick, for the whole sessionTeleop SDK(client process)gRPC inbound(server · connection · connector)Source Bus(service · session)Recorder(consumer)holds the schema; answers Describe; runs the control loopConnect() + ClientEvent{ ClientReady }first ready → create GrpcConnection + GrpcSourceConnectorSourceService.register(connector)connector stored in _connectors ▸ SDK is now a source providerscan()connector.get_info()◀ RecorderCommand{ Describe }ClientEvent{ SourceDiscovered{ RobotLayout{joints[]} } } ×NClientEvent{ ScanCompleted }list[SourceInfo]_source_owner[source_id] recorded ▸ sources known to the busscan result (SourceInfo[])open(source_id)connector.open(source_id, params)◀ RecorderCommand{ OpenCommand{ session_id } }build GrpcRobotSource ; route source_id → connectionSource (broadcast run loop started)StreamSamples() + SampleBatch{ session_id, source_id, Sample{ ts, seq, values[] } }route by source_id → submit_batch → per-source queueSample → SourceSample (run loop)subscribe(source_id) ▸ SourceSamplepersist episode → parquet / S3◀ Close → SDK stops sender, KEEPS control connectionStreamSamplesResponse{ session_id, accepted_samples }◀ Shutdown → SDK tears the connection down

Grounded in grpc_source_server.py, grpc_connection.py, grpc_source_connector.py, source_service.py, in_memory_source_session.py, grpc_source.py (loop/module/foundation) and the SDK grpc_source_client.py. Close handling reflects the just-applied fix (SDK stops the sender, keeps the control connection).