OpSink consumes operation execution traces emitted by TracingTensorOps. Kept in core so it can be used without depending on graph/tape implementations.