Rows, editing and conflicts
Browse the grid, edit a row, add one by hand, change row status, and what happens when two people edit the same row.
After this page you can fix a wrong target and add a missing case without leaving the grid, know exactly which runs that invalidates, and know what the platform does — and does not yet do — when a colleague edits the same row at the same time.
The grid
Columns: # · input · target · output · model · score · human · status (draft · finalized · golden · archived) · source (a link to the trace, run or playground entry the row came from). A column chooser, row search, and filters such as no target, no output, failed in run #n or by status. Selecting rows shows a bulk bar: mark finalized · mark golden · archive · delete. Rows are paged.
Edit a row
Click a cell to open the drawer: input and target (editable), a golden toggle for a verified expected output, output · model · latency · tokens (read-only, from generation), the scores and reasons from the last run (tri-state), human feedback, the source link, Save and Delete row. Saving updates that one row. A target or input change moves the dataset hash and the page says so: Dataset changed — runs #1–#4 are no longer comparable to new runs · snapshot before editing next time; an output change does not. Add row takes input (required), target (optional, with mark golden), system prompt and extra columns, and appends after the last row.
Row status
draft is where imported, generated, trace-built and playground-promoted rows start. finalized is your own mark that the row is ready. golden means a person verified the expected output: it requires a non-empty target and records who verified it and when — see Curate and maintain a golden dataset. archived rows drop out of reads, exports, the hash and snapshots while staying restorable. A status flip does not move the content hash.
Two people, one row
The API protects edits with two tags. Reading one row returns a strong tag hashing its content (input, target, output, system instructions, turns, status and extra columns — not bookkeeping); reading the row list returns a weak tag for the whole collection, a counter that moves on every write because the content hash ignores status. A write that sends its tag in If-Match is refused with 412 when the row (or the set) has changed since it was read, and the answer carries the current tag so the client can show theirs / yours and retry without a second read. Bulk status changes and archive are conditioned on the collection tag and apply to every selected row or to none. Re-applying an identical edit is not a conflict, and appending or deleting a row takes no condition — two people adding at once both succeed.
If-Match is optional by design (the SDK and older clients keep working); the server side is complete and the conflict dialog is specified, not shipped. There is also no presence indicator and no field-level merge.Health
The Health tab shows the row count by status, age buckets by when rows were added, and duplicates: exact matches and near-duplicates (three-word shingles, Jaccard ≥ 0.85) as groups of row ids, compared over the first 5,000 active rows and flagged when truncated. Last run time is not reported here.