Skip to content

Document the full release: version bump, tag, PyPI, Hugging Face Space - #23

Merged
scosman merged 2 commits into
mainfrom
claude/exciting-davinci-mjvvcu
Oct 17, 2026
Merged

scosman merged 2 commits into
mainfrom
claude/exciting-davinci-mjvvcu

Conversation

@scosman

@scosman scosman commented Oct 17, 2026

Copy link
Copy Markdown
Contributor

Summary

.github/RELEASING.md used to cover only the Hugging Face Space push. It now walks through the whole release in seven numbered steps:

  1. Bump the version in all four places that hold it:

    • pyproject.toml and uv.lock, both set by uv version X.Y.Z
    • src/seahaven_stripe_world/world.py and openenv.yaml, both edited by hand

    The bump merges through a PR once the check list is green. Each fixture keeps the world_version it was frozen at, and the doc gives the reason (frozen_world_version, SH403).

  2. Tag the merged main commit vX.Y.Z. First, grep the two hand-edited version fields to confirm they were changed.

  3. Check the release from a fresh clone of the tag:

    • Run openenv validate.
    • Run uv build into a directory beside the clone. openenv push uploads everything except dot-files, so a dist/ inside the clone would end up on the Space.
    • List the contents of the wheel and the sdist.
    • Smoke-test the wheel in a throwaway environment, asserting that world.version matches the package version.
  4. Publish to PyPI by hand with uv build and uv publish, using a project-scoped UV_PUBLISH_TOKEN. The doc covers:

    • A PyPI version can never be uploaded again; a fix means a new version, and the bad one can be yanked.
    • --check-url for retrying an upload that stopped partway.
    • Checking the release afterwards by installing it from PyPI.
  5. to 7. Push to the Space, set the Space card, test the Space. Unchanged, except that they now run from the release clone. The Space's Dockerfile builds from the uploaded tree, not from PyPI. PyPI goes first only because it is the one step that cannot be redone.

The AGENTS.md line that points to RELEASING.md now says what it covers.

Heads-up: v0.3.0 shipped with only part of the version bump

372d2ce ("version bump for release", tagged v0.3.0) changed only pyproject.toml and uv.lock. world.py and openenv.yaml on main still say 0.2.0, so the published seahaven-stripe-world==0.3.0 wheel reports world.version == "0.2.0". This PR's post-publish check fails on 0.3.0 with AssertionError: 0.2.0. This PR does not fix that. PyPI won't accept a second 0.3.0, so the clean fix is a 0.3.1 release that follows this checklist.

Test plan

  • uv run ruff format --check && uv run ruff check, uv run ty check, uv run pytest, uv run seahaven check: all pass
  • Ran the bump procedure on a scratch clone. uv version changes only pyproject.toml and uv.lock; after the hand edits there are exactly four changed files. The suite and seahaven check pass with the fixtures left at their old world_version.
  • Ran the clone, validate, build, list-contents and wheel smoke-test commands as written against v0.3.0.
  • Ran the publish-check command against PyPI's 0.3.0; it fails with AssertionError: 0.2.0, which is how it caught the partial bump above.
  • uv publish and openenv push were not run (they publish)

Generated by Claude Code

scosman and others added 2 commits October 17, 2026 17:18
RELEASING.md now covers every step of a release, not only the Space push:

- Bump the version in all four places that carry it (pyproject.toml,
  uv.lock via `uv version`, world.py and openenv.yaml), through a PR with
  the check list green; fixtures keep the world_version they were frozen at.
- Tag the merged main commit vX.Y.Z, after checking the hand-edited
  versions, and release from a fresh clone of the tag.
- Build out of tree (openenv push uploads everything but dot-files),
  inspect the wheel and sdist, and smoke-test the wheel in a throwaway
  environment, asserting world.version matches the package version.
- Publish with `uv publish` and a project-scoped UV_PUBLISH_TOKEN, note
  that a PyPI version can never be re-uploaded, and verify the published
  package by installing it.
- Push to the Space, set its card and test it, as before. The Space's
  Dockerfile builds from the uploaded checkout, so PyPI goes first only
  because it cannot be redone.

AGENTS.md's pointer to RELEASING.md now names what it covers.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01FVqE8sQ6jvyHDJJjQ1yaWK
@scosman
scosman merged commit cbc2dba into main Oct 17, 2026
1 check passed
@scosman
scosman deleted the claude/exciting-davinci-mjvvcu branch October 17, 2026 17:30
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