Skip to content

Tell the marketplace when a game is released - #7

Merged
nicodes merged 1 commit into
mainfrom
publish-on-release
Aug 3, 2026
Merged

Tell the marketplace when a game is released#7
nicodes merged 1 commit into
mainfrom
publish-on-release

Conversation

@nicodes

@nicodes nicodes commented Aug 3, 2026

Copy link
Copy Markdown
Member

Cutting a release built the package, tagged it, uploaded it — and stopped. Somebody then had to run termcade publish by hand, or the catalog never learned the release existed. That is how a marketplace ends up behind its own games.

Publishing after the release, not before

Publishing is a claim that a package is at these coordinates, and the registry verifies it by fetching. Claiming first would have it fetch something not yet uploaded.

A scoped key, not a password

TERMCADE_TOKEN is a publish key scoped to the aviorstudio handle. It publishes and nothing else — it cannot read a library, mint another key, or touch an account — so a leak is bounded by one handle.

Without the secret the release still cuts and the step warns with the exact command to run by hand. A release that failed after tagging is much harder to unpick than one the registry has not been told about yet.

The secret is read into the environment and the step decides from there, rather than through a step-level if on the secrets context — that evaluates to something unhelpful instead of failing loudly, and a publish step that silently never ran is precisely the failure this exists to prevent.

A bug this surfaced

Every release note, and the README, said:

termcade add aviorstudio/<game>@<version>

Pinning was removed, so the instruction shipped with each release is one the arcade now refuses:

termcade: versions cannot be pinned — `termcade add aviorstudio/tetris` installs what aviorstudio/tetris currently ships

Fixed in both places.

To turn it on

termcade keys new termcade-games aviorstudio

then set the token as the TERMCADE_TOKEN secret on this repository.

🤖 Generated with Claude Code

Cutting a release built the package, tagged it and uploaded it, and
stopped. Somebody then had to run `termcade publish` by hand, or the
catalog never learned the release existed — which is how a marketplace
ends up behind its own games.

The workflow publishes now, after the GitHub release rather than before:
publishing is a claim that a package is at these coordinates and the
registry verifies it by fetching, so claiming first would have it fetch
something not yet uploaded.

It uses a scoped key, not a password. The key publishes as aviorstudio
and can do nothing else, so what a leak costs is bounded by one handle.
Without the secret the release still cuts and the step warns with the
command to run by hand — a release that failed after tagging is much
harder to unpick than one the registry has not been told about.

The secret is read into the environment and the step decides from there.
`secrets` in a step-level `if` evaluates to something unhelpful rather
than failing loudly, and a publish that silently never ran is exactly the
failure this exists to prevent.

Also fixes the install line in every release note and in the README. Both
said `termcade add aviorstudio/<game>@<version>`, and pinning was removed
— so the instruction shipped with each release was one the arcade now
refuses.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@nicodes
nicodes merged commit bcd94f3 into main Aug 3, 2026
1 check passed
@nicodes
nicodes deleted the publish-on-release branch August 3, 2026 18:59
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