Home is preparing to move from the Pantry-pinned Zig 0.17 dev toolchain to 0.18/master. A source and compile audit against 0.18.0-dev.146 found three distinct classes that must be handled independently rather than by blanket rewrites.
Confirmed work:
- Remove only the obsolete error handling around
std.crypto.dh.X25519.recoverPublicKey; retainX25519.scalarmulterror propagation because it rejects attacker-controlled identity/small-order public inputs. Ed25519 deterministic generation and the visible AEAD/KDF checks remain fallible. - Complete the
std.Iomigration. The tree already has broadstd.Ioadoption, butpackages/io/src/async_io.zigstill calls one-argumentThreaded.initand the removedstd.fs.cwd()surface. Many other legacy filesystem call sites require separate measured slices. - Rename bare old optimize tags such as
.ReleaseFastto lowercase tags where the contextual type isstd.lang.Optimize. Qualified deprecated aliases still compile through 0.18, so this is mechanical rather than semantic.
Coverage findings:
zig build --help,home-tool, andhome-tscbuild successfully with 0.18.0-dev.146.- Direct compilation of the real
packages/ioandpackages/buildsources exposes failures that the top-level filtered tests do not compile. - Main compiler/runtime production and test modules both link libc; no libltvpn-style test-only libc mismatch was found.
- Current Pantry, CI, and release workflows still pin 0.17.0-dev.2163, so green CI does not yet establish 0.18 compatibility.
Acceptance:
- Migrate in small independently verified slices that compile under both the current pinned compiler and the selected 0.18 baseline while dual support is required.
- Add real coverage for migrated package sources rather than placeholder tests.
- Preserve all meaningful cryptographic validation paths.
- Add an actual 0.18 CI lane before changing the project-wide pin, then move Pantry/release CI and documented commands together.