This is the record of an abcd-managed repository

abcdBetav0.16.2 · 2026-11-06

Development record

abcd update verifies a downloaded binary only against the checksums.txt published in the same GitHub release (internal/core/update/update.go), so it catches corruption in transit but not a release page whose binary and checksums.txt were both replaced; the binary needs an independent check next cycle, such as a digest committed in the repository's history the way the plugin catalog now pins the plugin archive (adr-2609231048308186), or verification of the release's signed build-provenance attestation (a new verification dependency needs sign-off first). Ruled by the product thinker on 2026-09-23 (E5, 10:27Z): harden next cycle; this release keeps the same-page check.

issueresolvedmajoriss-2609231050273096

abcd update verifies a downloaded binary only against the checksums.txt published in the same GitHub release (internal/core/update/update.go), so it catches corruption in transit but not a release page whose binary and checksums.txt were both replaced; the binary needs an independent check next cycle, such as a digest committed in the repository's history the way the plugin catalog now pins the plugin archive (adr-2609231048308186), or verification of the release's signed build-provenance attestation (a new verification dependency needs sign-off first). Ruled by the product thinker on 2026-09-23 (E5, 10:27Z): harden next cycle; this release keeps the same-page check.

Deferral 2026-09-29

Deferred past v0.11.1: ruling still owed to the product thinker (re-deferred at v0.11.1 by run A's major-triage lane): ruling E5 (2026-09-23) asks for a check independent of the release page and leaves the mechanism open. The release already publishes SLSA build-provenance attestations over the binaries and checksums.txt (release.yml, actions/attest), so the candidates are verifying that attestation (a sigstore verification dependency needing sign-off, or a runtime dependency on gh attestation verify) or a digest committed in the repository's history (no new Go dependency, but the release chain must first commit per-binary digests; the catalog pins only the plugin archive, adr-2609231048308186). Owed: that choice, then a lane of its own.

Remedy grounds (2026-09-29)

  • The threat is a release page whose binary and checksums.txt are replaced together; both candidate routes break that because neither reads its trust from the same page. gh attestation verify checks a signed attestation against --repo and --signer-workflow and works offline with --bundle: https://cli.github.com/manual/gh_attestation_verify (consulted 2026-09-29); sigstore-go describes itself as stable and passing the sigstore-conformance suite: https://github.com/sigstore/sigstore-go (consulted 2026-09-29).
  • No route is picked: the choice and the dependency sign-off are owed rulings (rulings-owed C). Rejected: an offline signing key (minisign, itd-108), which adds key custody rather than removing the same-origin trust.

Grounds

  • pursued: a replaced binary with a matching replaced checksums.txt is now refused before the swap because no provenance signed by release.yml names its bytes; shown wrong if a binary that release.yml did not build, or one signed by another repository or workflow, is ever swapped in

Frontmatter

idiss-2609231050273096
typeissue
lifecycleresolved
severitymajor

mentions6