Payload for RunFinishS3: data was already uploaded to S3 in batches.
Used when at least one S3 batch was successfully uploaded.
The final remaining samples must have been flushed to S3 before calling
close_run (the BatchUploader performs this flush on shutdown).
Field names match the live Sentinel API response (Python reference:
sentinel_api.pyregister_run docstring).
expiration is the documented Python name; expires_at is accepted as an
alias in case the live API uses a different casing. The field is optional
so a missing value does not abort the run โ it falls back to a far-future
timestamp (credentials treated as always-fresh).