Skip to content

aqua resolves wasm-pack macos-arm64 to the x86_64 asset, so the pinned attestation is the wrong architecture #811

Description

@CarlAllenn

Defect

Every org repo consuming wasm-pack through aqua resolves macos-arm64 to the x86_64 tarball although the pinned version ships a native arm64 asset. Identical in edtf's and release-lab's locks (asset id 420850460):

[tools."aqua:rustwasm/wasm-pack"."platforms.macos-arm64"]
url = ".../v0.15.0/wasm-pack-v0.15.0-x86_64-apple-darwin.tar.gz"

Cause, re-verified 2026-08-24 against aqua-registry HEAD (pkgs/wasm-bindgen/wasm-pack/registry.yaml): the current-version entry carries rosetta2: true and a single goos: linux override mapping arm64: aarch64; there is no darwin case, so on darwin/arm64 rosetta2 selects the amd64 asset. The version boundary is exact and re-measured today against the release assets: aarch64-apple-darwin first appears in v0.14.0 (absent in v0.13.1), so rosetta2 is correct through 0.13.1 and wrong from 0.14.0 on. No existing upstream issue or PR covers this (searched aquaproj/aqua-registry for wasm-pack, 2026-08-24: only version-bump and transfer PRs).

Two consequences; the second is the org's: arm64 macOS developers run wasm-pack under emulation, and the checksum + provenance pinned for the platform called macos-arm64 are those of an x86_64 binary — a pinned attestation that does not describe the declared platform is a weaker claim than it looks.

Decided build

Decided 2026-08-24, both halves:

Upstream (authorized by Carl 2026-08-24, conditions binding): file one issue on aquaproj/aqua-registry, using their template (.github/ISSUE_TEMPLATE/05-bug-report.yml is the fit), only after re-checking at filing time that (a) HEAD still lacks the darwin override and (b) no issue/PR has appeared since this search — if either changed, record that here instead of filing. Content: the fix is a version_overrides entry constrained semver(">= 0.14.0") adding a goos: darwin override arm64: aarch64 and dropping rosetta2 for those versions; include the measured asset boundary. One issue, no PR unless upstream asks — a PR is a second decision, escalate if invited.

Local, until upstream lands: the belt carries the correction so macos-arm64 resolves the aarch64 asset — delivered, never copied per repo. The mechanism is measured, not assumed: mise/aqua support local registry overrides in more than one shape (a repo-level [tools] URL/backend override, an aqua local registry entry); the build measures which shape (1) survives --locked with a real per-platform checksum entry, (2) is deliverable through the belt's existing [env]/config channel, and (3) disappears cleanly when the upstream fix arrives (pin bump makes it dead code that a comment dates). If no shape measurably expresses it, the fallback is a dated, loud exception: a comment at the pin recording that macos-arm64 runs x86_64-under-Rosetta and why, plus a belt check that reds the day the lock's macos-arm64 URL and the release's aarch64 asset can finally agree — silence is the one forbidden outcome.

The sweep: this was found by eye. Script the same check across every aqua-backed tool in the belt: for each tool with per-platform lock entries, compare each platform key's resolved asset name against the architecture the key declares; report mismatches. Run it once, record results here; if it finds a second mismatch, that is a new issue per tool, filed with the measurement. Decide at build time whether the script graduates into audit:* (network-bound: it reads release asset lists) — default yes, as audit:lock-arch, since a one-shot check is a claim that decays.

Rejected, recorded: accepting emulation silently (the attestation mismatch is the harm); per-repo overrides (the belt delivers, #445); filing upstream without the freshness re-check (Carl's condition: real, unfiled, single, templated).

Canon consequence

Whatever shape lands is belt-delivered and reaches edtf and release-lab (today's wasm consumers) at their pin bump. When upstream merges and the aqua-registry pin advances past it, the local correction is deleted in the same PR that bumps.

Done when

  • the upstream issue exists (linked here) or the freshness re-check found it fixed/filed and says so here
  • mise install --locked on an arm64 mac resolves wasm-pack to …aarch64-apple-darwin.tar.gz with a matching checksum — measured, lock diff quoted — OR the dated loud exception plus its watchdog check exist
  • the sweep has run across all aqua-backed belt tools with results recorded here; any second mismatch is its own filed issue
  • edtf and release-lab locks show the corrected platform entry at their next regeneration

Sequencing

Independent of the release path; no lab run. Not blocked (upstream filing is authorized with conditions). Shares mise/config.toml/mise.lock with other belt lanes — own PR. Refs #810, #445.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions