Repository navigation
feat(pins): sidecar pins + pinned-sweep CLI sweeping Hydra status - #260
Merged
Merged
Conversation
Replace the # pin: comment format with a single source of truth in modules/pins.nix (flake.pins), applied by one sidecar overlay wired in system-minimal so modules never mention pins. New pinned-sweep Go CLI (packages/pinned-sweep): - check: Hydra status per pin + optional host-closure gate - apply: drops green pins, pins red closure packages at last good version, optionally opens an automerge PR update-flake.yml gains sweep/fallback/apply jobs running alongside the lockfile job; build.yml's eval job gates the build matrix on Hydra-failed closure packages. pinned-sweep.yml and sweep-comment.js are deleted. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Everything after -- goes to the tool, so --option access-tokens landed in the tool's flag parser and exited 2. Verified ordering locally. Generated by Mistral Vibe. Co-Authored-By: Mistral Vibe <vibe@mistral.ai>
Contributor
homelab2Build homelab2
Closures difference |
Contributor
macbookBuild macbook
Closures difference |
Contributor
strongholdBuild stronghold
Closures difference |
This was referenced Oct 21, 2026
Closed
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.
What
Replaces the
# pin:comment format with a single source of truth and automates the whole pin lifecycle against Hydra.Pins sidecar
modules/pins.nix—flake.pinswithdarwin/nixosclasses, each pin{ version, tracker, reason }. Machine-managed by the tool.system-minimal(darwin/nixos classes) feeds the pins tomultiverse.lib.pinOverlay; modules just usepkgs.<pkg>and never mention pins. Home-manager follows viauseGlobalPkgs.desktop-apps.nixloses its pinOverlay blocks and pin comments.pinned-sweepGo CLI (packages/pinned-sweep, stdlib only)check— Hydra status (nixpkgs/unstable) per pin on the platform its class needs;--closure host=attrdry-runs a host closure and Hydra-checks the packages it would actually build (cache misses);--jsonverdict;--build-unknownfallback builds pins Hydra has no data on.apply— drops pins green on every needed platform, pins red closure packages at their last good version (Hydra history walk), regeneratesmodules/pins.nix;--prpushespinned-sweep/sweepand opens/updates an automerge PR;--previewfor a dry run.Workflows
update-flake.ymlgainssweep(Hydra check, parallel to the lockfile job) → conditionalfallback(macOS runner only when Hydra-unknown pins exist) →apply(automerge PR, report to step summary). Runs on the same daily schedule/dispatch as the lock update.build.ymleval job gates the build matrix: hard-fails before any host build when a cache-miss package is already failing on Hydra.pinned-sweep.ymlandsweep-comment.jsdeleted.The loop
red on Hydra → gate blocks the wasted build, sweep auto-pins last-good → automerge → green. Later Hydra goes green → sweep auto-unpins → automerge.
Verified
go test(parser, emitter, merge, apply logic) — passnix flake check --all-systems— passnix eval .#darwinConfigurations.macbook.system.drvPath— passapplycorrectly regeneratesmodules/pins.nixand unpins (tested locally, reverted — first CI run will open the real unpin PR)Known limits