feat(renovate): verify the agent-image FOD through its own builder (RIG-3365) - #1047
Open
rigel-mintaka wants to merge 1 commit into
Conversation
rigel-mintaka
added this pull request to stack #1048
September 9, 2026 20:35
|
Compass engineering docs preview: https://dependencies-rig-3365-agent.compass-eng-docs.pages.dev Deployed from |
…IG-3365) agent-image/entrypoint.nix carries one outputHash over the installed node_modules tree, and two consumers import it with different nixpkgs revs: guest-image/default.nix with root's pkgs, agent-image/devenv.nix with the agent-image scope's. The FOD builder takes nativeBuildInputs = [ pkgs.bun ], so one hash is correct for both only while both channels' bun produce a byte-identical install tree. The refresh realised a single vehicle, guest-image/default.nix, which resolves root's pkgs. Nothing built agent-image/devenv.nix. So a channel-rev drift left the pin right for guest-image and silently wrong for the agent image, surfacing only in the OCI build. Give that consumer its own realise vehicle and check the shared pin through it: - BUILD_FILE/BUILD_TARGET move from module globals onto FodEntry, so one pin can be realised through two vehicles. - A third table row verifies rather than writes: it recomputes through the agent-image scope and compares, throwing with both SRIs, both vehicles and both channel revs on divergence. The authoritative row keeps writing. - refreshFodEntries partitions writes before verifies, so the baseline is always the refreshed pin; refreshEntry refuses a verify entry outright. - Load-time table invariants: one writer per pin, a verify entry must share its target's pin and triggers and realise a DIFFERENT vehicle, and drvFragment disjointness is scoped per vehicle (the two rows share a fragment because they are the same derivation under two channels). Co-authored-by: Matt Wilkinson <matt@rigel.build>
rigel-mintaka
force-pushed
the
dependencies/rig-3365-agent-image-fod-vehicle
branch
from
September 10, 2026 01:30
6917e89 to
2e023a0
Compare
rigel-mintaka
marked this pull request as ready for review
September 10, 2026 01:30
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.
This PR is part of a stack containing 2 PRs:
mainagent-image/entrypoint.nix carries one outputHash over the installed
node_modules tree, and two consumers import it with different nixpkgs revs:
guest-image/default.nix with root's pkgs, agent-image/devenv.nix with the
agent-image scope's. The FOD builder takes nativeBuildInputs = [ pkgs.bun ], so
one hash is correct for both only while both channels' bun produce a
byte-identical install tree.
The refresh realised a single vehicle, guest-image/default.nix, which resolves
root's pkgs. Nothing built agent-image/devenv.nix. So a channel-rev drift left
the pin right for guest-image and silently wrong for the agent image, surfacing
only in the OCI build.
Give that consumer its own realise vehicle and check the shared pin through it:
be realised through two vehicles.
agent-image scope and compares, throwing with both SRIs, both vehicles and
both channel revs on divergence. The authoritative row keeps writing.
the refreshed pin; refreshEntry refuses a verify entry outright.
target's pin and triggers and realise a DIFFERENT vehicle, and drvFragment
disjointness is scoped per vehicle (the two rows share a fragment because they
are the same derivation under two channels).
Co-authored-by: Matt Wilkinson matt@rigel.build