Registry observation snapshot¶
The checked-in image catalogue is generated from canonical
container.yaml declarations without network access. A website deployment can
separately generate registry-snapshot.json with:
python -m scripts.docs_observations --output public/registry-snapshot.json \
--previous public/previous-registry-snapshot.json
--previous is optional. The command reads public GHCR tags and content-addressed
index, architecture manifest, and configuration bytes anonymously. It resolves
latest, main, and version tags, groups those pointing at the current digest
as currentAliases, and groups older version tags by digest in history.
listed includes all tags. unresolved includes auxiliary tags such as run,
source revision, signature, and attestation references; their digests are not
claimed. An optional repository-scoped GH_TOKEN or GITHUB_TOKEN is used only
for ordinary GitHub release API reads. A broad personal token or authenticated
package-list permission is not required.
latest.platforms includes labels only after the raw index, architecture
manifest, and exact GHCR config bytes pass digest checks. observedAt records
when the collector read the registry; configCreatedAt is an image build label.
publishedAt is recorded prospectively when a workflow copies at least one
maintained alias and then reads back every selected maintained alias at the
verified index digest. It is carried by the matching immutable maintenance
asset. Existing historical assets without that field remain null; an
already-current alias on a retry does not create a guessed timestamp. This
time is distinct from the initial immutable index upload and from the later
release-asset publication. buildSucceededAt is a separate build success
time and is never relabelled as publication time.
Release evidence is verified only when a published immutable maintenance
release, its Git tag, unique asset, image name, version, source revision, run
identity, index digest, architecture manifest digests, and config digests match
the observed image. The publisher's consistency gate checks attached runtime
and vulnerability scan records. These states do not claim signature or
provenance verification; those fields remain unknown. If the release cannot
be read or matched, the registry observation remains visible while evidence is
unavailable with a reason, except for the same-digest transient read failure
described below.
latest.declarationAlignment separately compares the verified live release
with the current container.yaml: image version, runnable architectures,
build arguments, and payload manifest SHA-256 where present. matched means
those declarations agree. different includes field-level published and
declared values, such as a base-image digest updated after the latest image
publication. The release evidence remains verified for its observed digest
when the declaration has advanced. unknown means no current comparison with
a verified release asset could be made.
An alignment of matched or different carries a
declarationFingerprint of the compared version, sorted architectures, and
build inputs. In a saved snapshot, the result describes declarations at the
time of collection. When a later site build uses that snapshot with different
declarations, or an older snapshot without the fingerprint, the catalogue
shows alignment as unknown. This does not change the snapshot's observed
digest, immutable release evidence, or publication timestamp.
Each image refresh succeeds or fails independently. On a registry failure, a
previous observation for the same image is kept as stale with its original
observedAt, updated ageSeconds, and refreshFailed reason. A transient
GitHub release read failure also retains the whole prior observation only
when the freshly inspected latest digest equals the prior digest and the
prior evidence was verified. The retained digest, tags, release proof, and
publishedAt retain their earlier meaning; observedAt is not advanced to
the attempted refresh time. Its declarationAlignment becomes unknown
because current declarations cannot be compared with the unavailable release
asset. A changed digest, missing release, or proof mismatch never restores
prior evidence: the fresh registry observation instead reports evidence as
unavailable. Without a prior observation, a registry failure makes the image
unavailable, while a GitHub release read failure leaves a fresh registry
observation with unavailable evidence. Consumers should show these states and
never treat a stale digest as a current registry check. The command validates
the resulting file against the snapshot schema
and does not alter the checked-in catalogue.