Add DatasetVersion/DatasetVersionFrame/DatasetVersionLabel and a
promote endpoint (POST /sets/{id}/dataset-versions) that freezes a
set's currently-reviewed frames (or an explicit frame_ids selection)
into a named, immutable snapshot: it copies each label's data at
promotion time rather than referencing the live rows, so later edits
or deletes to those labels can't retroactively change an already
-promoted version. GET /dataset-versions/{id} returns the frozen
frames+labels - this is what the training pipeline will eventually
pull from.
This was the labeling backend's last deliberately-deferred piece from
the original data model (needed its own design pass for snapshot
semantics). 31/31 backend tests pass, including one that promotes a
version, edits and deletes the live label afterward, and asserts the
snapshot is untouched.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Web-Based Labeling Tool
Bounding-box labeling tool for training frames, with a hierarchical ad-hoc class
system (Main → Sub, e.g. Enemy → Bat), multiple independent label sets (Enemy,
Items, Traps, ...), multi-user support, versioned datasets, and an active-learning
workflow (seed-label → train → auto-label → review → promote).
See CLAUDE.md §3.2 for full requirements.
Status: not yet implemented.