Skip to content

perry/container & perry/compose calls compile to undefined — NativeMethodCall reaches no js_container_* symbol (JS surface dead) #11211

Description

@proggeramlug

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.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions