Closed bug report

pkg update sweep aborts on the first batch-resolve error, and hardware-type deps are resolved as installable packages

Drew Owens · 1mo ago ·closed by Colby Knox

Two related defects, observed on adom-wiki-cli 1.7.22 on 2026-09-02. Together they froze every non-core package on a container for days while the auto-update hook bannered a failure on every prompt.

1. The no-arg pkg update sweep aborts on the first batch-resolve error

pkg update --help says the empty-args form is "tolerant: skips and warns on per-package failures". It is not. The sweep sends one batch resolve for every installed root, and a single 400 from the registry aborts the whole run with exit 1 before any package is updated:

{ "http_status": 400, "response": { "error": "No version of adom/cr0402-fx-1002glf satisfies * (available for linux: (none))" } }
error [REQUEST_REJECTED]: No version of adom/cr0402-fx-1002glf satisfies * (available for linux: (none))
hint [NOT_AN_INSTALLABLE_PACKAGE]: adom/cr0402-fx-1002glf is a hardware page shipping page-layer content ...

Meanwhile pkg update <ref> for each of the same 59 roots, one at a time, succeeds, and pkg outdated correctly lists the four that were behind. So the per-package path is fine; only the sweep is brittle.

Expected: the sweep resolves and updates every root it can, reports the ones it could not (name + reason) as warnings, and exits non-zero only if nothing could be applied, or with a distinct exit code that means "partial". The help text already promises this.

2. Hardware-type dependencies are resolved as installable packages

The trigger was adom/feeder-reader (a hardware page that also shipped an installable build). Its manifest depends on adom/feeder-reader-library: *, which is a BOM page whose dependencies are eight component hardware pages (aravk/cr0402-fx-1002glf and friends). Those dependencies are correct and useful: they are the board to library to components graph that adom-project-manager reads to build a BOM panel. The resolver, however, tries to install them, finds no Linux build, and fails hard.

The hint text (NOT_AN_INSTALLABLE_PACKAGE ... its files come via the repo, not install) shows the CLI already knows the right answer. It should act on it: skip hardware-type dependencies during install/update resolution (or resolve them through the repo layer) instead of failing. Alternatively, refuse to install a hardware page as a package in the first place so it never lands in installed state.

Repro on a clean prefix:

ADOMPKG_PREFIX=/tmp/x adom-wiki pkg install adom/feeder-reader   # exit 1, error above

Related: adom/feeder-reader discussion #2 (barrett-land, 2026-08-12) describes the same failure from the page side. Workaround we applied: uninstall the hardware page on the affected container, and move its software to a separate app page with no hardware dependencies.

1 Reply

Colby Knox · 1mo ago

Shipped in 1.7.25.

Defect 1 (sweep aborts): the failure class had no degrade arm. The resolve loop already shrinks and retries on missing (STALE_INSTALL), forbidden (ACCESS_SKIPPED), conflicts (CONFLICT_SKIPPED) and cycles (CYCLE_SKIPPED), but a "No version of X satisfies ..." 400 carries none of those structured fields, so it fell through to the strict failure and killed the run. There is now a fifth arm, update mode only: parse the unresolvable ref, strip every installed root that transitively declares it (feeder-reader falls out through feeder-reader-library), warn, and keep sweeping. Two codes: NOT_INSTALLABLE_SKIPPED when the ref is a page-layer hardware/project page (your case), UNRESOLVABLE_SKIPPED for a software dep genuinely missing a build. Declarer matching also matches by trailing slug, because your library declares aravk/cr0402-fx-1002glf while the resolver errors with adom/cr0402-fx-1002glf (the Basic-parts pages were transferred).

Reproduced and verified live against your exact chain: fabricated installed state with feeder-reader + feeder-reader-library + an outdated adom/prose-lint. On 1.7.24 the sweep exits 1 with your error and updates nothing. On 1.7.25 it exits 0, updates prose-lint 0.1.2 -> 0.1.3 (changelog reveal included), and the summary warns NOT_INSTALLABLE_SKIPPED naming both skipped declarers.

Bonus fix your report flushed out: CONFLICT_SKIPPED and CYCLE_SKIPPED warnings were being dropped whenever the shrunk retry succeeded (they only survived total failure), so tolerant sweeps were quietly leaving packages behind with no trace. All degrade warnings now ride the success summary.

Defect 2 (hardware deps treated as installable): the sweep no longer dies on them, but making pkg install adom/feeder-reader succeed requires the resolver to stop expanding page-layer deps as install closure, which is server-side. Filed as adom/wiki#177 with two asks: skip or mark page-layer deps during expansion, and give this rejection a structured code (it is the only resolver failure that is prose-only, so the CLI currently parses the message). Strict install/add/ci still refuse with the NOT_AN_INSTALLABLE_PACKAGE category hint until that lands. Your workaround (software on a separate app page) remains the right shape today.

Log in to reply.