Episode schema
Coming soon
This page is a placeholder for an upcoming topic — shipping alongside the public read-API in `robotrace 0.2`. The URL is stable, so any links you write today won't rot when the real page lands. For now, the Ingest API reference covers the closest live topic.
What it'll cover
A column-by-column reference to the public.episodes table — what
each field stores, its constraints, defaults, and which SDK
parameter or ingest field populates it.
For now, the canonical source is the migration itself at
supabase/migrations/0005_episodes.sql.
The short version:
| Column | Type | Notes |
|---|---|---|
id | uuid | Primary key. |
client_id | uuid → clients(id) | Owning client. on delete cascade. |
name | text | Optional human label. |
source | enum episode_source | real / sim / replay. |
robot | text | Optional rig identifier. |
policy_version | text | Reproducibility — strongly recommended. |
env_version | text | Reproducibility — strongly recommended. |
git_sha | text | Reproducibility. |
seed | bigint | Reproducibility. |
started_at | timestamptz | Defaults to now(). |
duration_s | numeric(12,3) | Reported at finalize. |
fps | numeric(8,3) | Reported at start or finalize. |
video_url | text | Canonical R2 URL when configured. |
sensors_url | text | Canonical R2 URL when configured. |
actions_url | text | Canonical R2 URL when configured. |
metadata | jsonb | Free-form. Merged across start+finalize. |
bytes_total | bigint | Reported at finalize. |
status | enum episode_status | recording → ready / failed; admin can archived. |
created_at | timestamptz | Defaults to now(). |
updated_at | timestamptz | Updated by trigger. |