fix(install): a channel the target repo lacks keeps its packages #479

Merged
enricobuehler merged 1 commits from fix/channel-switch-missing-pkg into main 2026-08-31 18:41:32 +00:00
Owner

installer-smoke went red on main the moment the canary started carrying punktfunk-icons (#475): the smoke switches a canary box to stable, the pacman switch path reinstalls every installed punktfunk package by name on the target channel (switch_pkgs), and stable 0.34.0 predates the split —

error: target not found: punktfunk-icons

— which aborts the whole transaction and the installer with it. The packages themselves are fine; the switch logic was the gap, and it is generic: any package introduced on one channel breaks every switch toward the channel that does not have it yet, until the next release closes the gap.

The apt path has had the right contract all along — "a package the target channel does not carry keeps what it has", resolved per package via madison. The pacman path now mirrors it: after the repo swap and -Sy, each candidate is checked with pacman -Si (read-only, and by then the target channel is the only punktfunk source), kept-back packages get a printed warning, and the transaction names only what the channel can deliver. --dry-run keeps the unfiltered set — no repo is configured there, and gate 7's textual expectations stay as they were.

In the smoke scenario the three packages downgrade cleanly and the orphaned punktfunk-icons sits harmlessly at its canary version until the next stable ships it. One corner is deliberately left open, not hidden: a canary box with the client installed switching down to a pre-split stable still collides on the brand SVG (the orphan owns the path, the 0.34 client ships it). That case self-heals at the 0.35.0 stable release; forcing it now would take -Rdd ordering games that are worse than the transient corner.

dnf is untouched: no rpm split package exists (rpm shares identical files by digest), so distro-sync has nothing to trip on.

Gates: bash -n, sh -n, and scripts/ci/check-docs-drift.sh pass.

installer-smoke went red on main the moment the canary started carrying `punktfunk-icons` (#475): the smoke switches a canary box to stable, the pacman switch path reinstalls **every installed punktfunk package by name** on the target channel (`switch_pkgs`), and stable 0.34.0 predates the split — ``` error: target not found: punktfunk-icons ``` — which aborts the whole transaction and the installer with it. The packages themselves are fine; the switch logic was the gap, and it is generic: any package introduced on one channel breaks every switch toward the channel that does not have it yet, until the next release closes the gap. The apt path has had the right contract all along — *"a package the target channel does not carry keeps what it has"*, resolved per package via madison. The pacman path now mirrors it: after the repo swap and `-Sy`, each candidate is checked with `pacman -Si` (read-only, and by then the target channel is the only punktfunk source), kept-back packages get a printed warning, and the transaction names only what the channel can deliver. `--dry-run` keeps the unfiltered set — no repo is configured there, and gate 7's textual expectations stay as they were. In the smoke scenario the three packages downgrade cleanly and the orphaned `punktfunk-icons` sits harmlessly at its canary version until the next stable ships it. One corner is deliberately left open, not hidden: a canary box **with the client installed** switching down to a pre-split stable still collides on the brand SVG (the orphan owns the path, the 0.34 client ships it). That case self-heals at the 0.35.0 stable release; forcing it now would take `-Rdd` ordering games that are worse than the transient corner. dnf is untouched: no rpm split package exists (rpm shares identical files by digest), so `distro-sync` has nothing to trip on. Gates: `bash -n`, `sh -n`, and `scripts/ci/check-docs-drift.sh` pass.
enricobuehler added 1 commit 2026-08-31 18:27:26 +00:00
fix(install): a channel the target repo lacks keeps its packages
ci / bun-nix (pull_request) Successful in 24s
installer-smoke / derived defaults (pull_request) Successful in 22s
ci / docs-drift (pull_request) Successful in 47s
ci / docs-site (pull_request) Successful in 59s
ci / web (pull_request) Successful in 1m10s
ci / rust-arm64 (pull_request) Successful in 1m28s
installer-smoke / smoke (fedora-44) (pull_request) Failing after 43s
installer-smoke / smoke (arch) (pull_request) Failing after 1m17s
installer-smoke / smoke (debian-13) (pull_request) Successful in 3m18s
ci / rust (pull_request) Successful in 6m4s
2892e001c9
The pacman channel switch reinstalls every installed punktfunk
package on the target channel, verbatim — and punktfunk-icons exists
only where the icon split has shipped, so every canary→stable switch
died whole ("target not found", installer-smoke red). Filter the set
the way the apt path always has: a package the target channel does
not carry keeps what it has, with a warning. Self-heals at the next
stable release, which ships the package.
enricobuehler merged commit 8b9c488f74 into main 2026-08-31 18:41:32 +00:00
enricobuehler deleted branch fix/channel-switch-missing-pkg 2026-08-31 18:41:44 +00:00
Sign in to join this conversation.
No Reviewers
No labels
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: unom/punktfunk#479