Changelog

format_version-keyed history of the wire format served at /config.json. Every entry here documents a change to the URL shapes or field semantics in Wire Format and Entry Schema; it does not track this documentation site or /data/catalog/**, neither of which is wire contract.

format_version 1 — 2026-07-17

Initial locked wire format.

  • /config.json{"format_version": 1}, nothing else.
  • /p/<namespace>/<package>.json — package root: human-governed fields (name, repository, owners, status, deprecated_message, created, upstream) plus bot-regenerated desc (nullable) and tags (map from every observed tag to {content, observed, yanked?}).
  • /p/<namespace>/<package>/o/sha256/<hex>.json — the OCI image index the tag resolved to, stored verbatim as the registry served it; <hex> is the sha256 of those bytes, which is the registry's own manifest digest. Immutable.
  • Lock unit is the image-index digest — the per-platform manifest digests live inside the locked bytes, in manifests[].
  • No aliases field — aliasing is emergent from equal content digests.
  • Yank is a per-tag-row fact (tags[tag].yanked), not a package-level status; index objects are never deleted, only pruned by render-time reachability when no tag references them.

Additive, same format_version:

  • /c/index.json — enumeration index: a sorted map from every published bare <namespace>/<package> name to the exact-bytes digest of its package root, for whole-catalog sync via conditional GET + digest diff. A fourth frozen URL shape; names and digests only, never metadata. See Wire Format.
  • /p/<namespace>/<package>.json gains an optional superseded_by field: bare <namespace>/<package> naming a successor package, human-governed, omitted or null when unset. Existing consumers already ignore unknown fields per the additive-evolution rule, so this costs nothing to add.
  • /p/<namespace>/<package>.json gains an optional source field: the https:// repository whose CI produced the builds, bot-read from the latest version's org.opencontainers.image.source annotation, omitted when that annotation is absent. Distinct from upstream.repository_url (vendor attribution) — see Entry Schema. Also additive; every root published before it stays valid.

No prior format_version was ever served to a real client, so this entry carries no migration notes. Three deltas exist against the placeholder config.json/flat-pointer shape that predated it (config.json dropped a packages prefix and note field; /p/<ns>/<pkg>.json changed from a flat pointer to the root+CAS split; the o/ object changed from a bot-authored projection of an image index to the registry's verbatim image index, byte-for-byte) — all three cost nothing, since no ocx client had shipped against any of them yet. See adr_locked_observation_index_format.md D10 and adr_oci_index_only_dispatch.md for the full record.