Found by fresh-install verification of the released 0.9.0 binary: astrid init --distro sage --principal claude-code installs 8/9 capsules — the sage supervisor fails with:
lifecycle dispatch failed: Unsupported entry point: Failed to instantiate WASM component for lifecycle: component imports instance `astrid:process/host@1.0.0`, but a matching implementation was not found in the linker
astrid-capsule-shell v0.2.0 fails to load with the same signature ('Unsupported entry point').
Root cause: wit #15 mutated the frozen astrid:process@1.0.0 in place (spawn-request gained file-injections). The component-model linker matches structurally per exact package version, so capsules built against the published contract (astrid-sys 0.7.1 embeds the pre-#15 shape — verified by extracting the crates.io artifact) cannot link against the 0.9.0 host. This is the #890 frozen-WIT-mutation class, recurring.
Fix: the http 1.0/1.1 dual-version pattern the codebase already implements: restore process@1.0.0 to the published shape, introduce process@1.1.0 with file-injections, stage and bind BOTH versions in bindings.rs/build.rs, host impls map both to the same internals (1.0.0 spawn = no injections). Ships as 0.9.1: shell v0.2.0 and sage v0.2.0 then work with no capsule rebuilds.
WIT-side restore tracked in the wit repo (cross-linked: astrid-runtime/wit#19).
Found by fresh-install verification of the released 0.9.0 binary:
astrid init --distro sage --principal claude-codeinstalls 8/9 capsules — thesagesupervisor fails with:astrid-capsule-shellv0.2.0 fails to load with the same signature ('Unsupported entry point').Root cause: wit #15 mutated the frozen
astrid:process@1.0.0in place (spawn-requestgainedfile-injections). The component-model linker matches structurally per exact package version, so capsules built against the published contract (astrid-sys 0.7.1embeds the pre-#15 shape — verified by extracting the crates.io artifact) cannot link against the 0.9.0 host. This is the #890 frozen-WIT-mutation class, recurring.Fix: the http 1.0/1.1 dual-version pattern the codebase already implements: restore process@1.0.0 to the published shape, introduce process@1.1.0 with file-injections, stage and bind BOTH versions in
bindings.rs/build.rs, host impls map both to the same internals (1.0.0 spawn = no injections). Ships as 0.9.1: shell v0.2.0 and sage v0.2.0 then work with no capsule rebuilds.WIT-side restore tracked in the wit repo (cross-linked: astrid-runtime/wit#19).