Finding
crates/tfs/src/context.rs::mount_is_home (the spec 22 §6 whole-tree
exec-cache materialization trigger) reads the LITERAL key
identity.annotations.java_home from the mounted image's manifest. The
mechanism is runtime-neutral — "the mounted tree is an interpreter home,
materialize it whole" — but the key name is java-specific.
Why it matters now
The truffleruby feedstock (tebako-packages/truffleruby,
TODO.truffleruby/02) ships a RUBY home whose only working visibility is
exec-cache (the native launcher resolves its home exe-relative and dies
materialized alone — "Loading libjli failed", rc 255; no -Xhome /
--home / TRUFFLERUBY_HOME override exists, probed 2026-09-06). To get
the whole-tree trigger it must declare annotations: {java_home: "/"}
on a ruby home — a lying L1 key, documented as a deviation in the
feedstock's manifest template.
jruby (TODO.jruby/02) and every future interpreter-home runtime hit the
same key.
Proposal
Generalize the trigger to a neutral annotation — e.g.
identity.annotations.home: "/" — keeping java_home as a back-compat
alias (already-shipped openjdk images carry it; spec 18's evolution law
applies). One match arm in mount_is_home, the schema note in
docs/spec/schemas/payload-manifest.yaml, a spec 22 §6 sentence, parity
tests.
Until this lands, interpreter-home runtimes declare java_home and
document the deviation (the truffleruby feedstock's
manifests/runtime.yaml does).
Finding
crates/tfs/src/context.rs::mount_is_home(the spec 22 §6 whole-treeexec-cache materialization trigger) reads the LITERAL key
identity.annotations.java_homefrom the mounted image's manifest. Themechanism is runtime-neutral — "the mounted tree is an interpreter home,
materialize it whole" — but the key name is java-specific.
Why it matters now
The truffleruby feedstock (tebako-packages/truffleruby,
TODO.truffleruby/02) ships a RUBY home whose only working visibility is
exec-cache (the native launcher resolves its home exe-relative and dies
materialized alone — "Loading libjli failed", rc 255; no -Xhome /
--home / TRUFFLERUBY_HOME override exists, probed 2026-09-06). To get
the whole-tree trigger it must declare
annotations: {java_home: "/"}on a ruby home — a lying L1 key, documented as a deviation in the
feedstock's manifest template.
jruby (TODO.jruby/02) and every future interpreter-home runtime hit the
same key.
Proposal
Generalize the trigger to a neutral annotation — e.g.
identity.annotations.home: "/"— keepingjava_homeas a back-compatalias (already-shipped openjdk images carry it; spec 18's evolution law
applies). One match arm in
mount_is_home, the schema note indocs/spec/schemas/payload-manifest.yaml, a spec 22 §6 sentence, paritytests.
Until this lands, interpreter-home runtimes declare
java_homeanddocument the deviation (the truffleruby feedstock's
manifests/runtime.yaml does).