packs: restore all environments on Retread 4.10.17 - #28
Conversation
Restores the retread pack work reverted in #27 (revert of #23, c8da1bb) and moves it onto the now-proven backend. v4.6.3 is validated end-to-end: it locks the 25-env sibling imprint workspace green with zero hand-written workaround pins, so the retreat that motivated the revert no longer applies. Restored from c8da1bb (deliberately, not a blanket checkout): - pypi-packs as top-level source packs: genesis-pack, isaac-pack, isaac-pack-latest, newton-pack-latest (each a pixi-build-retread [package]) - root pixi.toml pack/feature wiring: python 3.12, preview=pixi-build, isaac/newton/genesis features consume the packs via path deps; Humble+Jazzy ROS 2 split (humble_ws/ + jazzy_ws/ with synchros2 submodules); the isaacsim/colcon activation scripts - dropped the old source-build path the packs replace: IsaacLab / IsaacLabNewton / patches/egl_probe / ros2_ws / ros_utilities submodules and their egl_probe CMake patch step - regenerated pixi.lock (did NOT restore c8da1bb's stale 4.4.0-era lock or the per-pack retread-*.lock.json courier locks) Backend bump: - every pypi-packs/*/pixi.toml pinned EXACTLY "==4.6.3" (was ">=4.4.0"), plus the prefix.dev/pixi-build-backends channel. Pinned exact on purpose: 4.6.4-4.6.7 are published but unproven and 4.6.4 changes the PyPI-index path / shifts the closure, so a floating >= would silently pick an unproven backend on the next cold solve. - root [pypi-options].extra-index-urls now lists "https://pypi.org/simple" first: the backend's un-route fallback only searches DECLARED indexes, so without the default index transitive PyPI-only deps 404 against the private indexes. Hand-written workaround pins: NONE to delete. Unlike imprint (which shed 126 lines of retread-drop-deps / retread-keep-pypi / torch-trio retread-overrides / pyglet widen), these four packs never carried those tables, and 4.6.3 derives the whole closure without them. The revert had instead pushed the crutches up into the workspace: pre-pack main hand-wrote 32 exact "==" conda pins in [feature.isaaclab.dependencies] (to appease isaacsim-kernel) and 14 pypi-options.dependency-overrides (torch==2.7.1, triton, starlette, isaacsim-kernel, pillow, scipy, warp-lang, mujoco, ...). This restore drops all of them to zero and the closure still solves. Solve result: 13/13 active declared environments + `default` lock GREEN under a freshly-installed 4.6.3 backend (probe traces for genesis-pack / isaac-pack-latest / newton-pack-latest all report retread_version 4.6.3; the cache held no other backend version). Packs land in the lock as content-hashed conda_source entries. Lock-skip (1 pack, 3 envs) — [lock-skip:retread-4.6.3-gitclone-self-deadlock]: isaaclab-gpu, isaaclab-ros2-humble-gpu, isaaclab-ros2-jazzy-gpu consume isaac-pack (IsaacLab v3.0.0-beta @ a4a7602). Building that pack DETERMINISTICALLY deadlocks the 4.6.3 backend: the backend takes an exclusive flock WRITE on its git-clone lock file (retread-git-clones/isaac-sim_IsaacLab.git/<rev>.lock) then blocks its own worker threads waiting on the same inode via separate fds — a self-deadlock (verified in /proc/locks: holder pid == every waiter pid; wchan locks_lock_inode_wait; CPU frozen). Reproduced on two independent cold solves, once warm-clone and once freshly-purged-clone, so it is a backend concurrency bug, not a workspace dependency conflict and not clone corruption. isaac-pack-latest (same repo, rev 28a37ce) builds cleanly under the same 4.6.3, so isaaclab-gpu-latest is unaffected. The isaac-pack files + [feature.isaaclab] wiring are kept intact (and pinned ==4.6.3) so the envs re-enable once the backend git-clone lock bug is fixed. Also: gitignore .pixi/ (pixi's local env/build-metadata cache, never committed). Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Pin Pixi and Retread to validated releases and commit target-qualified solve locks so fresh checkouts replay expensive pack metadata.
Pin records to 4.10.10 so backend upgrades cannot replay stale output. Route flatdict through conda before UV inspects its undeclared build dependencies.
|
Performance/validation update after
The old bottleneck was CPU-bound repeated Resolvo work, not downloads: 195 solver calls in the original Isaac build. The optimized path uses 11 calls across both metadata/build phases and directly rejects the three singleton-unsatisfiable routes. Remaining work is CI only. The new |
|
Retread 4.10.17 update:
The previous red jobs both stopped at “lock file not up-to-date with the workspace.” That clean-checkout failure is no longer reproducible on 4.10.17. Generated |
Use Retread's built-in OpenCV and PyTorch mappings, refresh every solve record at 4.10.21, and replace the stale IsaacLab lxml metadata cap.
|
Update pushed in e9b9797:
Validation/timing on Slurm:
Remaining: hosted PR checks plus a final isolated locked-install pass. Local |
Cold locked installation passes in 6m28s. Avoid unlocked source-package rebuilds that reopen unrelated upstream dependency drift.
Use Pixi's frozen install so hosted runner platform facts cannot invalidate and rebuild the already verified source-package records.
Prevent pixi run from re-entering a workspace solve and requiring unrelated CUDA environments on CPU runners.
|
Final CI update:
Current head |
…, ABI bare-major normalize, anchor exact-pin band) Drop stale relaxation lock records; bump retread-build-number. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…quires an effective glibc per workspace target) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lab manylinux ceiling) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
… clone; one clone per parallel install) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…lel conflict localization, shared repodata) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…patch race workaround) Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Move the MuJoCo/MJX walls into exact Retread packs, split by the existing NumPy 2.5, Isaac 2.3.1, and Newton 3.8 closure families. Keep PyTorch3D feature-owned because Retread 4.10.45 rejects its sole linux_x86_64 wheel tag. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Backend bumped from 4.10.66. 4.10.70/.71 rank feature-declared channels
above inherited workspace channels and solve each environment's
transitive constraints against its own channels rather than the
per-output union. That is what genesis-ros2-jazzy-gpu needed: its
extraction previously rejected every robostack candidate under strict
channel priority ('ros2-distro-mutex 0.14.0 is excluded'), which was
silently swallowed until extraction became a hard error. The relock
resolves ros2-distro-mutex from robostack-jazzy, matching what the
real solve always did.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Summary
Restores the four Retread source packs and all 15 declared environments on an exact
pixi-build-retread ==4.10.10backend:genesis-packisaac-pack(Isaac Sim 6.0 + IsaacLab v3 beta)isaac-pack-latestnewton-pack-latestThe four target-qualified schema-12 solve JSONs are committed, contain no local path leakage, and are pinned to the exact Retread version so a backend upgrade cannot replay a stale record.
Cold-solve fix
The original Isaac cold build spent most of its time repeatedly minimizing an unsatisfiable set of conda routes: 195 Resolvo calls over roughly 120k–132k records. Retread 4.10.10 identifies the three singleton conflicts directly (
lxml,mujoco-usd-converter, andurdf-usd-converter), reducing the same build to 11 total Resolvo calls across its phases.Both Isaac manifests also route
flatdictthrough conda before UV closure. PyPI'sflatdict 4.0.1is sdist-only and imports undeclaredpkg_resources;retread-conda-depsavoids that clean-checkout failure up front.Measured performance
The 4m20s replay was measured from commit
fac6d0din a detached worktree withpixi.lockand.pixiabsent. Shared package/download caches were retained, so this measures dependency solving and committed-record replay rather than redownloading every artifact.Validation
pixi lock --check: passflatdictfailure.condafiles remain untrackedScope boundary
Isaac and ROS 2 environments are restored independently. Combined Isaac+ROS environments remain intentionally absent because the upstream stacks require incompatible TBB ABIs; this is not a Retread solve failure.