docs(design): publish the compass-agent image for linux/arm64 (RIG-3625) - #1167
Merged
Merged
Conversation
The Apple container runtime tier on macOS is arm64, and the compass-agent image is published linux/amd64 only, so that tier has no agent image to run. This records the multi-arch publish lane. Consumer-facing tags stay bare and become an OCI image index, so no consumer changes: every puller already relies on engine platform negotiation. Per-arch tags are internal immutable building blocks. Each arch builds natively on its own runner rather than under QEMU. The image closure dominates CI cost and emulating a nix build multiplies it; GitHub now offers free arm64 runners on public repositories. No guard is dropped to make the pipeline green. Immutability, two-tag coherence and the semver re-tag move to manifest-list digests, and the linux/amd64 tripwire becomes an exact platform-set assertion with per-member arch and os checks, which is a stricter contract than it replaces. The toolchain has never run on aarch64-linux, so a dispatch-only spike gates the lane rather than a claim that it works. Co-authored-by: Matt Wilkinson <matt@rigel.build>
|
😎 Merged successfully - details. |
|
Compass engineering docs preview: https://compass-native-rig-3625-arm6.compass-eng-docs.pages.dev Deployed from Changed pages: |
T1 scoped the arm64 entrypoint work to the nodeModules FOD hash alone, but the native-addon copy block names linux-x64 three times and its modern/baseline split is an AVX2 concept with no arm64 analogue. An implementer following T1 as written would not have touched it. T1 now owns that edit, and the unverified part is narrowed to which variant names the arm64 package actually ships. The index immutability guard and the clean re-run after a mid-compose failure both assumed an OCI index recomposes to identical bytes. The spec does not canonicalize an index, and an unproven assumption sat inside a guard whose failure arm hard-fails against an immutable tag. It is now OQ-5, gated on the spike, with a fallback identity (assert the member digest set) that keeps the immutability property without depending on byte-stable serialization. Also hedge the nix2container claim where it is made rather than two sections away, and anchor the ledger row into the decision it records. Co-authored-by: Matt Wilkinson <matt@rigel.build>
…G-3625) Both T1 edits need an aarch64 value only the spike runner can produce, so landing the seam alone would put a fakeSha256 placeholder and an unresolved copy block on main where nothing selects them until the arm64 lane exists. That is config that provably does nothing. T1 now lands with the measured hash and variant names in one change, or waits for the cutover. Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
marked this pull request as ready for review
September 12, 2026 20:26
Another lane landed DL-364 on main while this PR was in review, so the row collided and the ledger gate failed in CI. Main is now at DL-365, making DL-366 the free id. Co-authored-by: Matt Wilkinson <matt@rigel.build>
The ledger row collided with another lane, so this branch needs main in its history for the ledger gate to see every id. Co-authored-by: Matt Wilkinson <matt@rigel.build>
mattwilkinsonn
approved these changes
Sep 12, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Apple container runtime tier on macOS is arm64, and the compass-agent image
is published linux/amd64 only, so that tier has no agent image to run. This
records the multi-arch publish lane.
Consumer-facing tags stay bare and become an OCI image index, so no consumer
changes: every puller already relies on engine platform negotiation. Per-arch
tags are internal immutable building blocks.
Each arch builds natively on its own runner rather than under QEMU. The image
closure dominates CI cost and emulating a nix build multiplies it; GitHub now
offers free arm64 runners on public repositories.
No guard is dropped to make the pipeline green. Immutability, two-tag coherence
and the semver re-tag move to manifest-list digests, and the linux/amd64
tripwire becomes an exact platform-set assertion with per-member arch and os
checks, which is a stricter contract than it replaces.
The toolchain has never run on aarch64-linux, so a dispatch-only spike gates the
lane rather than a claim that it works.
Co-authored-by: Matt Wilkinson matt@rigel.build