Skip to content

release v0.8.1 — strict PIC instantiate-assert#36

Merged
colinrozzi merged 1 commit into
mainfrom
release-v0.8.1
Jul 11, 2026
Merged

release v0.8.1 — strict PIC instantiate-assert#36
colinrozzi merged 1 commit into
mainfrom
release-v0.8.1

Conversation

@colinrozzi

Copy link
Copy Markdown
Owner

release v0.8.1 — strict PIC instantiate-assert (fail-loud on a non-PIC child)

HELD for Colin's go on the publish (merging publishes 0.8.1 to crates.io). Colin approved the hardening + the test updates; this is prepped and awaiting the explicit cut.

What

The PIC loader now rejects a non-PIC module at instantiate (checks it imports env.__memory_base) instead of instantiating it and trapping on the first host-fn call. A forgotten-to-rebuild (pre-0.8/non-PIC) actor goes from silent-until-first-call to a legible failure at boot — the fail-loud property the rollout wants, most of all for the mail spine (a mis-flipped mail actor fails at startup, not on the first inbound email).

  • runtime: assert_pic_module() gates both PIC instantiate paths (sync pic_link + the async theater path); non-PIC → a clear error naming the fix. Regression test pic_loader_rejects_nonpic_guest_at_instantiate.
  • tests: the host-fn/interceptor unit tests instantiate inline non-PIC WAT on the async path as a convenience — added an (unused) env.__memory_base import so they satisfy the assert with no behavior change.

Impact

  • Non-breaking for real consumers. PIC guests are unaffected; a non-PIC guest was already broken (trapped on first call) — it now fails earlier and legibly.
  • theater just re-pins to 0.8.1 (no code change) and gets the boot-time rejection automatically — pairs with theater-dev's error-surfacing (#135) so the journal shows the real cause.

Full workspace green (26 suites), clippy + fmt clean.

🤖 Generated with Claude Code

…C child)

The PIC loader now REJECTS a non-PIC module at instantiate (checks it imports
env.__memory_base) instead of instantiating it and trapping on the first host-fn
call. This turns a forgotten-to-rebuild (pre-0.8/non-PIC) actor from a silent-
until-first-call failure into a legible failure at boot — the fail-loud property
the fleet-lockstep rollout wants, most of all for the mail spine (a mis-flipped
mail actor now fails at startup, not on the first inbound email).

- runtime: assert_pic_module() gates both PIC instantiate paths (sync pic_link +
  async theater path). Non-PIC -> clear error naming the fix (rebuild with the
  0.8.x PIC recipe). Regression: pic_loader_rejects_nonpic_guest_at_instantiate.
- tests: the host-fn / interceptor unit tests instantiate inline non-PIC WAT on
  the async path as a convenience; add an (unused) env.__memory_base import so
  they satisfy the assert with no behavior change.

Non-breaking for real consumers: PIC guests are unaffected; a non-PIC guest was
already broken (trapped on first call) — it now fails earlier and legibly.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@colinrozzi colinrozzi merged commit d184aae into main Jul 11, 2026
2 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