Repository navigation
v0.3.1 — Mojo 1.0.0b1 toolchain migration
Toolchain-only release. No public API changes.
Toolchain
- Migrated to Mojo 1.0.0b1 (nightly
dev2026043006). def(...) abi(\"C\") -> X→def(...) thin abi(\"C\") -> Xacross 416 sites inraw.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.