Skip to content

Prepare 0.1.0 - #33

Open
Tippel-AI wants to merge 1 commit into
mainfrom
release/v0.1.0
Open

Prepare 0.1.0#33
Tippel-AI wants to merge 1 commit into
mainfrom
release/v0.1.0

Conversation

@Tippel-AI

Copy link
Copy Markdown
Owner

Everything the release workflow's guard checks, in one commit, so the tag can be
pushed against a tree that is already consistent.

What changes

pyproject.toml 0.1.0.dev00.1.0
CHANGELOG.md Unreleased folded into ## [0.1.0] - 2026-09-01
README.md pipx install markproof, status callout, action@v0.1.0

The changelog sections are merged rather than left side by side: none of that
work ever shipped, so two headings would imply a version nobody could install.
That section is what the workflow reads verbatim as the GitHub release notes.

The guards were one-directional, which was a trap

The three README guards from #23 asserted the pre-release wording and skipped
once the version was released. So they would have gone quiet at exactly the moment
the opposite mistake becomes possible: shipping a release whose front page still
tells people to install from git.

They now assert both directions, plus a new one for the status callout. Four
mutations, all caught:

Mutation Caught
released, but README installs from git
released, but action points at @main
released, but status says "unreleased"
bumped to 0.2.0.dev0 with release wording in place

They also read pyproject.toml instead of markproof.__version__. These tests
compare two files in the working tree, and the installed metadata lags a version
bump until someone reinstalls — a guard whose verdict depends on the state of a
virtualenv is worse than none.

Verified against the guard's own logic

Ran release.yml's guard script locally against a hypothetical v0.1.0:

Release-Notes: 230 Zeilen
Version      : 0.1.0
Pre-Release  : false
Guard        : würde durchlassen

476 tests, ruff + mypy strict clean.

What is left for you, after merging this

  1. GitHub: Settings → Environments → new environment named exactly pypi.
    Add yourself as a required reviewer and restrict deployment to tags v*.
  2. PyPI: account → Publishing
    GitHub → project markproof, owner Tippel-AI, repository markproof,
    workflow release.yml (the filename, not the path), environment pypi.
  3. Dry run: Actions → release → Run workflow on main. Publishes nothing —
    both publishing jobs are gated on github.ref_type == 'tag'.
  4. Tag: git tag -a v0.1.0 -m "markproof 0.1.0" && git push origin v0.1.0

There is no API token anywhere in this. A pending publisher reserves nothing,
though — the name stays free until the first successful upload.

🤖 Generated with Claude Code

Everything the release workflow's guard checks, done in one commit so the tag can
be pushed against a tree that is already consistent.

Version 0.1.0.dev0 -> 0.1.0. The changelog's Unreleased section is folded into a
dated 0.1.0 section rather than left beside it: none of that work ever shipped, so
splitting it across two headings would imply a version nobody could install. That
section is what the workflow uses verbatim as the GitHub release notes.

The README flips back the three things it deliberately said while unreleased —
`pipx install markproof` instead of installing from git, the status callout, and
the action pinned to v0.1.0 rather than @main.

The guards that kept those three honest were one-directional: they asserted the
pre-release wording and skipped once the version was released, which would have
gone quiet exactly when the opposite mistake becomes possible — shipping a release
whose front page still tells people to install from git. They now assert both
directions, and a third covers the status callout. All four mutation-tested:
flipping any one of them back, or bumping the version to a .dev0 with the release
wording in place, turns the suite red.

They also read pyproject.toml rather than `markproof.__version__`. These tests
compare two files in the working tree, and the installed metadata lags a version
bump until someone reinstalls — a guard that passed or failed depending on the
state of a virtualenv would be worse than none.

Verified locally against the guard's own logic: tag v0.1.0 matches the version,
the changelog section resolves to 230 lines of release notes, and the release is
correctly classified as not a pre-release.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
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