0036. ichor images list cannot resolve catalogs or schematics, and says so
Status: Superseded by ADR 0090 (the command was removed) · Date: 2026-10-26 · Design section: Monitoring and registry mirrors
Decided: ichor images list prints the five fixed Image Factory images (version-gated) plus an unconditional warning naming the two catalogs, instead of trying to resolve a schematic's extensions/overlays into images
Context
architecture.md's "Monitoring and registry mirrors" section names what ichor images list has to print -- siderolabs/imager, siderolabs/installer-base
(siderolabs/installer below Talos 1.10.0), siderolabs/extensions,
siderolabs/overlays, siderolabs/talosctl-all (1.11.0 and up) -- and
names the trap explicitly: "extensions and overlays are catalogs ...
every extension and overlay image they reference has to be mirrored too
... A mirror that holds the five images above and nothing else looks
complete and fails at the first schematic that asks for an extension."
This unit's own acceptance criteria required answering, not assuming, whether Ichor can resolve a catalog's or a schematic's contents into concrete image references -- and forbade solving it by connecting to anything: "実際にレジストリへ接続しないこと ... 接続が必要な設計になるな ら、それは差し戻し案件です" (never connect to a registry; a design that needs to is grounds for rejection).
Research
Checked against the siderolabs/image-factory repository directly
(docs/api.md, docs/sources.md, docs/air-gapped.md,
hack/copy-artifacts.sh, 2026-10-26):
- The schematic itself is opaque to Ichor.
TalosClusterSchematic(api/v1alpha1/taloscluster_types.go) stores only Image Factory's schematic ID -- a content hash, not the customization that produced it. Recovering what extensions/overlays a schematic names requiresGET /schematics/:id, a call to Image Factory's own HTTP API. - There is no endpoint that resolves a schematic ID straight to image
references.
GET /schematics/:idreturns the schematic's YAML body (extension/overlay names);GET /version/:version/extensions/officialand.../overlays/officiallist what each Talos version makes available, also by name. Nothing in the documented API turns a name into the image reference Ichor would need to print. - The catalogs (
siderolabs/extensions,siderolabs/overlays) are themselves OCI images, not an HTTP-fetchable manifest.hack/copy-artifacts.shresolves them by pulling the catalog image and reading a YAML manifest out of its filesystem; there is no documented way to get that mapping without pulling the image.
So resolving "what does this schematic actually need mirrored" needs at least one network call no matter which path is taken -- Image Factory's API, or pulling a catalog image -- and this command's acceptance criteria rule out both.
Decision
buildImageList (internal/cli/images_list.go) only ever returns the
five version-keyed names architecture.md already settled, computed
entirely offline from a Talos version string (golang.org/x/mod/semver,
already a direct dependency via pkg/upgrade, handles the two version
boundaries -- 1.10.0 for installer/installer-base, 1.11.0 for
talosctl-all -- so this adds no new version-comparison code). --schematic
is accepted as a flag (matching the design's "a given version set" of
Talos version plus schematic) but is never read by buildImageList: it
exists so a future resolving implementation has a place to land, not as
a currently-functional input. Its doc comment
(imagesListOptions.Schematic) records why, pointing here.
Every result carries a fixed Warning field (catalogWarning) naming
siderolabs/extensions/siderolabs/overlays as catalogs and stating
plainly that mirroring them does not mirror what they reference --
unconditionally, whether or not --schematic was given, since a bare
--talos-version call gives no way to know whether some other cluster's
schematic will need an extension this list doesn't name. Silently
printing five images and nothing else is exactly the failure mode this
command exists to prevent (architecture.md's own framing); the command
would rather over-warn on every call than risk an operator reading five
images as a complete mirror.
Consequences
- An operator whose schematic customizes extensions or overlays still has
to resolve those manually today (e.g.
hack/copy-artifacts.sh, which already does this by pulling the catalogs) --ichor images listtells them this is necessary but does not do it for them. - If Image Factory's API grows a schematic-resolving endpoint later, or
running one locally against a pulled catalog becomes acceptable for
this command (a deliberate scope change, not an oversight), extending
buildImageListto useimagesListOptions.Schematicis additive: no existing output shape needs to change, only theWarningnarrowing once resolution is possible. - Not built here: mirror reachability pre-checks (architecture.md calls
these out as a separate, later feature) and any change to
hack/copy-artifacts.shitself (not vendored into this repository).