ReviewOS

zig-utils/zig-js

Build: audit Zig 0.18 API migrations and shipped/test parity

#1112
Closed glennmichael123 opened this 9 days ago ·
9 days ago

Audit zig-js against Zig 0.18.0-dev.146+35accc0 and keep the migration evidence on main.

Scope:

  • inventory std.crypto error-union signature changes and preserve checks for operations that still return attacker-input validation errors;
  • identify any std.Io signature migration gaps;
  • classify OptimizeMode spelling changes versus semantic changes;
  • verify tests and shipped artifacts use the same libc/link/runtime configuration;
  • add only evidence-backed compatibility fixes and focused regressions;
  • run serialized Debug, ReleaseSafe, unsuppressed TSan, conformance, and shipped-artifact gates before closing.

Initial read-only baseline on 2026-10-14:

  • current main already builds with Zig 0.18.0-dev.146+35accc0;
  • dependency-audit passed: 16 classified edges, 0 migration targets, 65 classified repository tools;
  • production zig build exited 0;
  • no X25519 generateDeterministic/recoverPublicKey/scalarmult call sites were found;
  • repository OptimizeMode uses qualified lowercase .debug/.fast tags; no legacy .ReleaseFast/.ReleaseSafe enum literals were found;
  • the shipped static library and primary unit test root both explicitly use link_libc = false.

Keep this issue open until the shipped-artifact gates and any remaining audit findings are evidenced.

9 days ago

Zig 0.18 audit complete on main with no source patch required.

Toolchain:

  • Zig 0.18.0-dev.146+35accc0
  • build.zig.zon minimum_zig_version = 0.18.0-dev
  • CI pins the same compiler revision

Findings:

  • std.crypto: no X25519 generateDeterministic, recoverPublicKey, or scalarmult call sites exist in this repository, so no error-union removal or attacker-input validation was changed.
  • std.Io: the migration is already complete across runtime_threads, agent, worker, parallel_lock, and conformance code. The repository-owned Condition.waitTimeout compatibility shim remains necessary for this pinned std and its focused runtime tests pass 17/17.
  • OptimizeMode: live source uses qualified lowercase .debug/.fast tags and contains no legacy .ReleaseFast/.ReleaseSafe enum literals.
  • shipped/test parity: the shipped static library and primary unit root both explicitly use link_libc = false.

Evidence:

  • dependency-audit: 16 classified edges, 0 migration targets, 65 classified tools
  • production zig build: exit 0
  • Debug public C/C++ shipped-artifact gate: 117/117 declarations, 117/117 public symbols, 26 extensions, 460 private-profile exports; runtime fixtures passed
  • ReleaseFast public C/C++ shipped-artifact gate: same audit and runtime fixture evidence passed
  • focused runtime-thread/std.Io tests: 17/17 passed

Historical 0.17 version strings remain only in dated benchmark/evidence records and fixture metadata; changing them would rewrite historical provenance, not fix a live 0.18 compatibility issue.

Sign in to comment on this issue.