Skip to content

chore(toolchain): adopt Mojo 1.2.0 stable (max 26.7.0) - #128

Merged
codetalcott merged 1 commit into
mainfrom
mojo-1.2.0
Oct 22, 2026
Merged

codetalcott merged 1 commit into
mainfrom
mojo-1.2.0

Conversation

@codetalcott

Copy link
Copy Markdown
Owner

Bumps the pin from Mojo 1.1.0 / max = "==26.6.0" to Mojo 1.2.0 / max = "==26.7.0" (stable channel, released 2026-10-22). pixi.toml and pixi.lock move together. No public Mojo signature changed, so @qkstat/retrieve and @qkstat/embed should compile unmodified once they are on 1.2.0.

What changed

  • No hard errors on any compile surface. The one new diagnostic: x^ passed to a borrowed parameter now warns that the transfer has no effect, and every CI compile is --Werror. Four captures^ arguments to JsPromise.on_settled (which borrows captures) lose the ^. One of them was reported only by the compile-coverage target. Behaviour is unchanged, since nothing was moved before either.
  • async/await → __async/__await (a warning that marks async unstable). Here they appear only in comments, which now note the new spelling.
  • tests/cleanup_hook_observed.test.js has failed under the Guard Malloc recipe since 0.17.0. libgmalloc's banner, inherited by a spawned child, landed in the stderr the test asserts empty. The test now strips only those lines.
  • Docs: the pin is updated in README, CONTRIBUTING and CLAUDE.md (plus a new spelling rule, and a regenerated docs/MOJO-RULES.md), and there is an Unreleased CHANGELOG entry. docs/toolchain-migrations.md gains a full 1.2.0 section.

Verified locally (darwin-arm64, Node 24.15.0)

  • The addon, framework_coverage.mojo, all three examples and the FFI probe are warning-clean under --Werror.
  • 850 tests and 12 GC finalizer tests pass; the full suite and async_stress (40 × 80) also pass under Guard Malloc with MALLOC_STRICT_SIZE=1 (banner confirmed).
  • Codegen drift, the kitchen sink, and the codegen example (built and run) pass. The FFI probe reports 4/4, and the --Werror and keep-alive IR counterfactuals both hold.
  • The docstring, compile-coverage, doc-sample, exports, rules-extract, platform, portability and GLIBCXX self-test gates pass.
  • CLI, tutorial and host-mode e2e pass, including the pipeline.mojo collision, build-cache identity and -I roots.
  • All 18 benchmarks are at 12–22% of ceiling. globalCacheActive() and asyncRuntimeInitOk() are both still true.

Expected CI notes

  • m0-interop (non-required) will fail its gate step. No m0 on PyPI is gated on Mojo 1.2.0 yet (0.2.0 and the latest, 0.12.0, both list ["1.1.0"]). The pinned 0.2.0 source compiles on 1.2.0 and parity.mjs passes 7/7 against it. Move M0_VERSION once the re-gated m0 is published.
  • Linux-only checks (glibc/GLIBCXX floor, ubuntu-latest tests) and the Deno and Bun 1.3.11 runtime gate can only be verified here. Locally, Bun 1.3.7 fails ownThread/ownThreadTeardown identically on main built with Mojo 1.1.0, so that comes from the old Bun.

🤖 Generated with Claude Code

Bumps the pin from Mojo 1.1.0 / `max = "==26.6.0"` to Mojo 1.2.0 /
`max = "==26.7.0"` on the stable channel. pixi.toml and pixi.lock move
together; the lock resolves max 26.7.0 / mojo-compiler 1.2.0 on all three
platforms, and `pixi install --locked` accepts it. No public Mojo signature
changed, so downstream packages that compile against `src/` need no edits
once they are on 1.2.0.

Nothing failed to compile on any surface. The release's one new diagnostic
is that `x^` passed to a borrowed parameter warns that the transfer has no
effect, which --Werror makes fatal. Four `captures^` arguments to
`JsPromise.on_settled` (which borrows `captures`) lose the `^`: three in
src/addon/host_ops.mojo, and one in tests/compile/framework_coverage.mojo
that only the coverage target reported. Nothing moved before, so behaviour
is unchanged. CLAUDE.md gains a rule for it, and docs/MOJO-RULES.md is
regenerated.

`async`/`await` became `__async`/`__await` (a warning that marks async
unstable). Here they appear only in comments, which now note the spelling.

tests/cleanup_hook_observed.test.js failed under the Guard Malloc recipe on
a clean tree since 0.17.0: the spawned child inherits DYLD_INSERT_LIBRARIES,
and libgmalloc's banner landed in the stderr the test asserts empty. The
test now strips only those banner lines.

Verified on darwin-arm64 / Node 24.15.0: the addon, the coverage target, all
three examples and the FFI probe are warning-clean under --Werror; 850 tests,
12 GC tests; the full suite and async_stress under Guard Malloc with
MALLOC_STRICT_SIZE=1; codegen drift, kitchen sink and codegen example; the
--Werror and keep-alive counterfactuals; docs, platform and self-test gates;
CLI, tutorial and host-mode e2e; 18/18 benchmarks at 12-22% of ceiling.

The non-required m0-interop job will fail its gate step until an m0 release
is gated on Mojo 1.2.0; the pinned 0.2.0 compiles on 1.2.0 and passes
parity 7/7. Full account in docs/toolchain-migrations.md.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codetalcott
codetalcott merged commit 66ed573 into main Oct 22, 2026
10 of 11 checks passed
@codetalcott codetalcott mentioned this pull request Oct 22, 2026
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