Skip to content

v0.3.1 — Mojo 1.0.0b1 toolchain migration

Choose a tag to compare

@codetalcott codetalcott released this 01 May 01:18
· 334 commits to main since this release

Toolchain-only release. No public API changes.

Toolchain

  • Migrated to Mojo 1.0.0b1 (nightly dev2026043006).
  • def(...) abi(\"C\") -> X → def(...) thin abi(\"C\") -> X across 416 sites in raw.mojo, bindings.mojo, runtime.mojo. `DLHandle.get_function` and typed `bitcast` now require the `thin` effect to produce a raw `TrivialRegisterPassable` fn pointer.
  • pixi: `mojo` → `max` (same conda channel; `max` is a superset of `mojo`, no end-user-visible change). Forced because the bare `mojo` package no longer ships at `dev2026043006`.
  • Silence 143 `NapiBindings` field-init null-ptr warnings via `OpaquePointer.unsafe_dangling()`.
  • Document Mojo 1.0.0b1 breaking changes in CLAUDE.md.
  • Remove obsolete `scripts/fix-abi-c.mjs` (one-shot rewriter superseded by the `thin abi("C")` rule).

Fixes

  • Async cleanup hook leak: `async_cleanup_hook_noop` was returning without calling `napi_remove_async_cleanup_hook(handle)`, violating the N-API contract. Node fired the hook at env teardown and blocked indefinitely; Jest's force-kill timeout then SIGKILLed the worker, manifesting as `SIGSEGV` / `SIGTRAP` / `SIGABRT` on a different test each run. Reproduced 10/10 before, 0/100 after. Latent bug; only surfaced now because Linux CI hadn't been exercised in months.
  • Update nightly canary workflow to match the `mojo` → `max` package rename.

CI

  • This is the first release with Linux CI passing in months — coverage gap closed.

What's NOT in this release

The GPU addon work on `spike/gpu-fatbin` (`loadMatrixGpu` / `matmulHandle` / `searchHandle`) is intentionally excluded. It is being extracted to a separate `@qkstat/rag` package per EXTRACTION-PLAN. The GPU-addon code is preserved at the `v0.4.0` git tag for downstream pinning; `v0.4.0` will not be published to npm. After `@qkstat/rag` ships, napi-mojo `v0.5.0` will remove the GPU code path entirely.