Found while working on tokio lane K (#11209). A compiled Perry program cannot call the perry/container / perry/compose APIs at all. It fails the same way on main and on #11209.
A probe calls getBackend(), await listImages(), and await up({...}) / down() against a stub docker on PATH. It compiles and links: auto-optimize selects features=async-bridge,container, and the archive contains the container code. But every call evaluates to undefined, and the stub docker is never invoked.
HIR lowers these calls to NativeMethodCall { module: "perry/container", method: "getBackend" }, which apparently reaches no js_container_* symbol in codegen.
Consequences:
- The JS-facing container surface is effectively dead.
- Only the stdlib FFI tests cover the bridge.
- There are no
perry/container gap tests: --filter container|compose|workload matches nothing relevant. That is why this went unnoticed.
Fix: wire the perry/container, perry/compose and perry/workloads NativeMethodCalls to the js_container_* / compose FFI exports. Add gap tests that run against a stub docker binary on PATH, so they need no real container runtime, and assert that the stub was actually invoked.
Found while working on tokio lane K (#11209). A compiled Perry program cannot call the
perry/container/perry/composeAPIs at all. It fails the same way on main and on #11209.A probe calls
getBackend(),await listImages(), andawait up({...})/down()against a stubdockeron PATH. It compiles and links: auto-optimize selectsfeatures=async-bridge,container, and the archive contains the container code. But every call evaluates toundefined, and the stubdockeris never invoked.HIR lowers these calls to
NativeMethodCall { module: "perry/container", method: "getBackend" }, which apparently reaches nojs_container_*symbol in codegen.Consequences:
perry/containergap tests:--filter container|compose|workloadmatches nothing relevant. That is why this went unnoticed.Fix: wire the
perry/container,perry/composeandperry/workloadsNativeMethodCalls to thejs_container_*/ compose FFI exports. Add gap tests that run against a stubdockerbinary on PATH, so they need no real container runtime, and assert that the stub was actually invoked.