Skip to content

lance: fixes from the stack review, plus the zarr-parity split and flagship recipes - #756

Draft
SaveAanchal wants to merge 8 commits into
ryanco/aria-mano-fitfrom
aanchal/lance-stack-fixes
Draft

SaveAanchal wants to merge 8 commits into
ryanco/aria-mano-fitfrom
aanchal/lance-stack-fixes

Conversation

@SaveAanchal

Copy link
Copy Markdown
Contributor

Fixes from reviewing the Lance stack, on top of #753. Includes the commits from #754, so this replaces that PR's remaining changes once merged.

Committer: replace() can no longer leave a recording half-written after a crash; a rerun of the same staged files recovers lost annotations and unstages them, while a re-export with different files still needs --replace; edit() checks every key before writing; deliveries rejected as already committed keep their videos; SQL lab and embodiment are lowercased.
Training: MLP policy heads apply the hand mask, and the loss is unchanged when no mask is given or every hand is tracked. The split no longer shifts when a recording has no samples. The flagship recipe selects episodes by hash.
Tools: the Aria Ray driver passes --mano-batch; check_zarr_to_lance reports samples lost to the training default.

Tested: unit suite at the top of this stack: 1,931 passed, 20 skipped, 1 failed. The failure, test_pi_loss_is_reduced_over_the_packed_width, also fails on the unmodified #753 tip. Flagship split on the real root is unchanged (1,346 train, 70 val).
Not tested: the checker's new report on real data, the Ray path in an actual Ray run, and a retrain on these commits. The 500-step R2 runs used an older copy of the code.

🤖 Generated with Claude Code

SaveAanchal and others added 8 commits November 4, 2026 21:12
Shuffle and order Lance recordings on their aliased zarr episode_hash, so a
recipe holds out the same episodes as on zarr, its pinned validation videos
stay in the right split, and a global index means the same frame. Zarr's
behavior does not change. Recordings with several clips or no alias still use
their recording_id.

Add the flagship HPT 6D recipe on Lance, with annotations: {} so the prompt is
empty like zarr's, and fix check_zarr_to_lance's import of the renamed
steps_columns.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit d1de490)
train_zarr_mecka_flagship_6d_rdt read through the Lance catalog. Same model,
action space, evaluators and norm stats as the zarr recipe.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 69f2306)
…deo claims

replace() takes the recordings row out first and writes it last, so a crash leaves the
recording unpublished rather than pointing at the wrong steps; append() then finishes it.
A staged delivery already committed with the same content digest is an interrupted run: its
annotations are committed and it is unstaged, not rejected. edit() checks every key before
writing. A delivery rejected only for being committed keeps its videos through cleanup,
because --replace retries it. SQL lab and embodiment are lowercased, as the planner does.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
convert reads args.mano_batch since the batched MANO fit, so the driver failed every
recording with a tracked hand. A test now compares what convert reads with what the
driver supplies.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
As the denoising head does. With no mask or an all-ones mask the loss is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A recording that passes the filters but has no eligible samples keeps its place in the split
shuffle, as it does on zarr, so it can't move other episodes across the split. percent mode
shuffles the same keys. The flagship recipe lists its 1,607 episodes, since Lance rows have no
zarr path, so it selects the same data on a root holding other Mecka recordings.

Checked on the real flagship root: 1,346 train and 70 seen-val episodes match the saved
5,000-step run exactly.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
It compared with require_hands_in_frame=none, so it could not see anchors the default drops.
It now reports anchors_dropped_by_default, and the migration gates ask to explain any loss.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ntent

A correction can change only labels or metadata, leaving steps and videos identical, so the
content digest alone took it for an interrupted run and lost the correction. Each recording's
changes row now records its staged files' digest; a run that stopped before recording falls
back to the content digest.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant