{
  "slug": "skopeo-copy-adds-manifest-list-signature-removal-and-sparse-list-stripping-77d75cf2356a",
  "title": "skopeo copy adds manifest-list signature removal and sparse-list stripping",
  "tools": [
    "skopeo"
  ],
  "tags": [
    "agent"
  ],
  "introduced_at": "2026-07-30T18:21:45.000Z",
  "announced_at": "2026-07-30T18:21:45.000Z",
  "effective_at": null,
  "date_basis": "source-publication",
  "status": "unknown",
  "how": {
    "incantation": "When copying only selected platforms from a multi-architecture image to a registry that rejects sparse lists, use `--strip-removed-platforms` and explicitly remove signatures. Use `--remove-list-signatures` to preserve per-instance signatures, or `--remove-signatures` to remove all signatures.",
    "examples": [
      "skopeo copy --multi-arch=linux/amd64,linux/arm64 --strip-removed-platforms --remove-list-signatures docker://quay.io/skopeo/stable:latest docker://registry.example.com/skopeo:latest"
    ],
    "gotchas": [
      "Version: v1.24.0",
      "--multi-arch=<platform-list> (required): Select specific platforms using a comma-separated list of OS/architecture pairs; all compression variants and other variations for each platform are copied.",
      "--strip-removed-platforms (required): Write a manifest list containing only copied platforms. Requires explicit signature removal because stripping changes the list digest and invalidates its signature.",
      "--remove-list-signatures (required): Do not copy the manifest list signature while preserving per-instance signatures. It is an alternative to `--remove-signatures`; the documentation does not state that the two flags are mutually exclusive or describe precedence.",
      "--remove-signatures: Do not copy any source signatures. Use instead of `--remove-list-signatures` when all signatures should be removed; the documentation does not state that the two flags are mutually exclusive or describe precedence.",
      "source-image (required): Image name to copy from, using Skopeo's image-name format.",
      "destination-image (required): Image name to copy to, using Skopeo's image-name format.",
      "`--strip-removed-platforms` requires signatures to be removed using either `--remove-signatures` or `--remove-list-signatures`; the operation fails if signatures are present and not explicitly removed.",
      "If both signature-removal flags are specified, `--remove-signatures` takes precedence.",
      "`--strip-removed-platforms` applies when copying only a subset of platforms from a multi-architecture image using `--multi-arch` with a platform list."
    ]
  },
  "why_it_matters": "Copy selected platforms from a multi-architecture image to a registry that rejects manifest lists referencing missing images.",
  "before": "Use `--remove-signatures` to remove both manifest-list and per-instance signatures; sparse manifest lists may contain entries for images not copied to the destination.",
  "sources": [
    "https://github.com/podman-container-tools/skopeo/releases/tag/v1.24.0",
    "https://github.com/podman-container-tools/skopeo/pull/2892",
    "https://github.com/podman-container-tools/skopeo/blob/v1.24.0/docs/skopeo-copy.1.md"
  ],
  "rank": 0.94027,
  "judge": {
    "publish": true,
    "judge_model": "codex-cli/gpt-6-luna+typesafe/jev-1.13.0",
    "prompt_version": "extract-v7+enrich-v2+judge-v2x3+jev-publish-v1"
  },
  "review_state": "approved",
  "provenance": {
    "run_id": "wave1-20261014",
    "verdict_id": "wave1-20261014:wave1-20261014-e1fd57a6e8190801-0:gate",
    "evidence_hash": "44b826d36a9ad719c8dde117243982d8ccac3f067e7f37e7aab89e9e04ce50a5"
  },
  "review": {
    "draft_hash": "73e72abc1ae9a8dcc03f421cd30df4a7368fe478f7b136292347b67f7093aad0",
    "reviewer": "publication-gate",
    "reviewed_at": "2026-10-07T00:00:00.000Z",
    "decision": "wave1-20261014:gate",
    "reason": "2 of 3 judge runs approved with p_yes >= 0.9 (mean 0.94 >= 0.9; 2 needed) and Jev gave 0.71 (>= 0.6 needed)."
  }
}
