Skip to content

fix(image): relocate backbone toolchain under /usr for exod confined execution - #226

Merged
rhCat merged 1 commit into
mainfrom
fix/backbone-toolchain-under-usr
Jul 10, 2026
Merged

fix(image): relocate backbone toolchain under /usr for exod confined execution#226
rhCat merged 1 commit into
mainfrom
fix/backbone-toolchain-under-usr

Conversation

@rhCat

@rhCat rhCat commented Jul 10, 2026

Copy link
Copy Markdown
Owner

The bug

backbone was verified + blessable on the fleet, but every confined delegated step failed ModuleNotFoundError: lpp. exod's confined sandbox binds only /usr /bin /lib* /etc + workspace + cargo, with env {PATH,SNIP,RECORD_STORE} (no PYTHONPATH). The toolchain was under /opt (lpp on PYTHONPATH, tla2tools.jar, tlapm) — unbound, invisible confined. Cooperative/in-container runs saw /opt and passed, masking it; the fleet uses the confined path.

The fix

lpp → /usr/local/lib/lpp + a .pth in site-packages (works confined, no PYTHONPATH); tla2tools.jar/usr/local/lib; tlapm → /usr/local/lib/tlaps with a bound-target symlink. Everything the snippet needs is now under the bound /usr.

Proof

amd64 body image, all 3 perks inside exod's real confined sandbox (materialize_workspace + run_confined): validate ok · tlc ok · tlaps ok (17 obligations). Confined channel itself confirmed healthy separately (compute:smoke RC 0).

Merge → dispatch-verify the body build → tag v1.7.4.

🤖 Generated with Claude Code

… exod's confined sandbox

backbone was catalog-verified and blessable on the fleet, but every confined
delegated step failed ModuleNotFoundError: lpp. exod's confined step
(infra/exec/sandbox.py) binds ONLY /usr /bin /lib* /etc + workspace + cargo,
and its env is the fixed {PATH,SNIP,RECORD_STORE} — no PYTHONPATH. The
toolchain lived under /opt (lpp on PYTHONPATH, tla2tools.jar, tlapm) = NOT
bound = invisible confined. Cooperative/in-container runs saw /opt and passed,
masking it; the FLEET uses the delegated confined path, which didn't.

Fix (body + modelcheck): lpp -> /usr/local/lib/lpp, imported via a .pth in
site-packages (read by site.py, works confined, no PYTHONPATH); tla2tools.jar
-> /usr/local/lib; tlapm -> /usr/local/lib/tlaps with the /usr/local/bin
symlink at a bound target. Everything the snippet needs is now under the
bound /usr.

Proven in an amd64 body image, all 3 perks inside exod's REAL confined sandbox
(delegate.materialize_workspace + sandbox.run_confined): validate ok / tlc ok /
tlaps ok (17 obligations). Also proven the confined channel itself is healthy
(compute:smoke RC 0) — the earlier 'everything fails' was per-skill causes.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@rhCat
rhCat merged commit 1838455 into main Jul 10, 2026
3 checks passed
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