Skip to content

CH-001: Publish container image to GHCR on tagged releases - #17

Merged
flemming-n-larsen merged 5 commits into
mainfrom
ch-001-publish-container-image
Sep 12, 2026
Merged

CH-001: Publish container image to GHCR on tagged releases#17
flemming-n-larsen merged 5 commits into
mainfrom
ch-001-publish-container-image

Conversation

@flemming-n-larsen

@flemming-n-larsen flemming-n-larsen commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

Acceptance brief

Plan item: none — this change is explicitly plan-less (proposal.md declared it so; no docs/plans/ entry exists for release/distribution work).

Vision: proceeds under VIS-001 ("Enable community-run ranked Tank Royale battles"), whose success statement already names "the documented container workflow"; this change makes that workflow obtainable without a local build.

Criteria added/changed (docs/capabilities/CAP-001-published-container-image/criteria.md):

  • @AC-001 Tagging a release publishes a pullable versioned image — Test-type: Human. Proof: this brief, corroborated by publish.yml's own anonymous-pull confirmation step. Verified by pushing a real vX.Y.Z tag after merge; on the very first release the confirmation step is expected to fail once (GitHub has no API to set package visibility — see below) until a maintainer sets the package public by hand.
  • @AC-002 Ordinary commits to main never publish an image — Test-type: Human. Proof: this brief; publish.yml's trigger is push: tags: ['v*.*.*'] only.
  • @AC-003 Every published version has a changelog entry — Test-type: Human. Proof: this brief and RELEASING.md's process, enforced by convention, not CI.

What this merge binds: CAP-001 (published container image), G-001 (proposed goal), and ADR-001 (GHCR + tag-trigger + manual-versioning decision, status: inferred; merging makes it binding per Decision records, though verified still needs an explicit human approval statement). No unmerged base is depended on.

Verification

  • clue validate: OK (7 artifacts, 1 inferred decision awaiting verification — ADR-001).
  • Local checks: workflow YAML parses; publish.yml cross-checked against build.yml's existing docker job and scripts/verify-container.sh.
  • Agentic review, context-isolated, 3 passes total on this change:
    1. Commit dd86a67 — no blocking findings; two advisories (stale "development image" README wording; GHCR package-visibility gap that could make AC-001 silently fail).
    2. Commit 9c57e30 (repair attempt for the visibility advisory) — blocking finding: the repair called gh api PATCH .../packages/container/.../visibility=public, an endpoint GitHub's REST API does not expose, so the step would 404 every run and the commit/docs falsely claimed automation that doesn't exist.
    3. Commit c7df0c9 (current HEAD) — repairs that finding honestly: removes the nonexistent API call, keeps the anonymous-pull confirmation step as a loud, actionable failure (::error:: + exit 1 naming the real one-time manual fix), and corrects RELEASING.md/design.md to describe it accurately. Clean pass, no blocking findings, no new advisories.
  • Advisory left open from pass 1, not repaired against a clean-reviewed commit per the review-boundary rule: README.md:54 still says "development image" after this PR renamed that section — cosmetic, worth a follow-up.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Hma5K774H256sXrcqshaff

flemming-n-larsen and others added 3 commits September 13, 2026 00:35
Seeds the identity ledger (MIG-008) and opens CH-001, proposing to
publish a versioned container image so contributors no longer have to
build it themselves before running a battle.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hma5K774H256sXrcqshaff
Adds CAP-001 (goal, criteria, design), ADR-001 for the GHCR/tag-trigger/
manual-versioning decision, CHANGELOG.md, RELEASING.md, the publish.yml
workflow, and README/architecture updates.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hma5K774H256sXrcqshaff
Regenerates README indexes and deletes the CH-001 change workspace
now that every task is done; docs/capabilities/CAP-001-published-container-image,
docs/goals/G-001, and docs/decisions/ADR-001 carry the durable record.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hma5K774H256sXrcqshaff
@flemming-n-larsen
flemming-n-larsen marked this pull request as ready for review September 12, 2026 22:48
@flemming-n-larsen
flemming-n-larsen marked this pull request as draft September 12, 2026 22:52
flemming-n-larsen and others added 2 commits September 13, 2026 00:53
Closes the review's advisory gap: a package GITHUB_TOKEN creates on
GHCR is not guaranteed public, which would silently defeat AC-001.
publish.yml now sets visibility to public after pushing and fails the
run if an anonymous pull of the just-pushed tag doesn't work. Also
moves the tag/push step's version interpolation into an env var
instead of the run: script body.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hma5K774H256sXrcqshaff
Review found that GitHub's API has no operation to change a package's
visibility, so the prior fix's "Set the GHCR package to public" step
would 404 on every run. Remove it; the pull-confirmation step now
fails loudly and names the real, one-time manual fix (GHCR package
settings), and RELEASING.md/design.md describe that honestly instead
of claiming automation that doesn't exist.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Hma5K774H256sXrcqshaff
@flemming-n-larsen
flemming-n-larsen marked this pull request as ready for review September 12, 2026 22:59
@flemming-n-larsen
flemming-n-larsen merged commit 8741f34 into main Sep 12, 2026
7 checks passed
@flemming-n-larsen
flemming-n-larsen deleted the ch-001-publish-container-image branch September 12, 2026 23:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant