The 3D viewer locates joint signals through joint_signals (plural). #584 migrated every producer to it, but the published PhAIL v1.0 dataset has the singular joint_signal baked into its static.json, so dataset_utils._collect_signal_groups still folds the singular key in:
# TODO(#587): drop once the published PhAIL dataset carries the plural key.
That bridge is the only thing keeping the retired name alive in the reader. It goes away once the data carries the plural key.
Why the dataset has the singular key
phail_teleop_release was migrated with REAL_ROBOT_TRANSFORM applied, and ROBOT_SIGNAL_POINTERS wrote joint_signal at the time (positronic/cfg/ds/internal.py). migrate_dataset materializes static into static.json (positronic/dataset/utilities/migrate_remote.py:28), so the value is on S3, not computed at read time.
The public viewer config phail_with_started now applies ROBOT_SIGNAL_POINTERS (#584), so the PhAIL viewer itself is already correct — the bridge covers reading the released data any other way, e.g. a bare positronic-server --dataset.path=s3://….
Scope
Only the published PhAIL dataset. Internal raw datasets are read through configs that apply ROBOT_SIGNAL_POINTERS, and recordings made after #584 write the plural key directly.
Steps
- Re-publish PhAIL v1.0's static with
joint_signals. migrate_dataset with the current transform rewrites the dataset; EditedDataset.set_static appends the key per episode to an edits.jsonl beside the recordings instead, which the default load_dataset/load_all_datasets path already applies — no episode rewritten. Pick whichever fits how the release is regenerated.
- Delete the singular branch from
_collect_signal_groups and the TODO that names this issue.
- Confirm in the viewer that a released episode still shows its arm model and
joint1…joint7 legends.
The 3D viewer locates joint signals through
joint_signals(plural). #584 migrated every producer to it, but the published PhAIL v1.0 dataset has the singularjoint_signalbaked into itsstatic.json, sodataset_utils._collect_signal_groupsstill folds the singular key in:# TODO(#587): drop once the published PhAIL dataset carries the plural key.That bridge is the only thing keeping the retired name alive in the reader. It goes away once the data carries the plural key.
Why the dataset has the singular key
phail_teleop_releasewas migrated withREAL_ROBOT_TRANSFORMapplied, andROBOT_SIGNAL_POINTERSwrotejoint_signalat the time (positronic/cfg/ds/internal.py).migrate_datasetmaterializes static intostatic.json(positronic/dataset/utilities/migrate_remote.py:28), so the value is on S3, not computed at read time.The public viewer config
phail_with_startednow appliesROBOT_SIGNAL_POINTERS(#584), so the PhAIL viewer itself is already correct — the bridge covers reading the released data any other way, e.g. a barepositronic-server --dataset.path=s3://….Scope
Only the published PhAIL dataset. Internal raw datasets are read through configs that apply
ROBOT_SIGNAL_POINTERS, and recordings made after #584 write the plural key directly.Steps
joint_signals.migrate_datasetwith the current transform rewrites the dataset;EditedDataset.set_staticappends the key per episode to anedits.jsonlbeside the recordings instead, which the defaultload_dataset/load_all_datasetspath already applies — no episode rewritten. Pick whichever fits how the release is regenerated._collect_signal_groupsand the TODO that names this issue.joint1…joint7legends.