Releasing¶
Releases are published by manually dispatching
the Release workflow.
The checked-in project.version in pyproject.toml determines the version.
The workflow creates its matching tag; no manual tagging is required.
Preparing a version bump is not authorization to publish. A maintainer chooses when to dispatch the release.
Before dispatching¶
Confirm that the intended release commit contains:
- The reviewed source and intended
project.version, using plainX.Y.Z. - The directly related documentation and migration guidance.
- Passing validation for the changed behavior, plus a strict docs build and package build.
- Evidence contracts that preserve current schema-4.0 fields and failure paths.
Use the contribution guide for the applicable source and execution checks. For docs and packaging:
Do not hand-edit saved JSON to make it match a new schema. Fix its producer and regenerate. Check that evidence loads without starting Copilot, preserves unknown values and images, and retains failed setup/cleanup outcomes.
The quickstart should match the current API. Historical examples must keep their frozen fixtures and default to offline checks; paid comparisons require explicit authorization. There is no framework companion skill or report renderer to publish.
Dispatch the release¶
Open the Release workflow, choose Run workflow, and select the branch or
tag containing the intended release commit. Verify that commit's
project.version before confirming.
This requires maintainer access. PyPI trusted publishing and GitHub Pages must already be configured.
What the workflow does¶
| Stage | Behavior |
|---|---|
| Validate source | Require plain X.Y.Z, reject version regressions, and check tag/PyPI provenance |
| Create tag | Create vX.Y.Z at the release commit if it does not already exist |
| Build | Check out that tag and build the wheel and source distribution |
| Verify artifacts | Compare source, wheel, sdist, and installed-wheel versions |
| Publish to PyPI | Use trusted publishing; skip an already published version with valid provenance |
| Create GitHub release | Create the release or refresh its attached artifacts |
| Deploy docs | Build and deploy from the same release tag |
An existing matching tag must point to the workflow commit. The workflow rejects a reused version on a different commit. Pre-release and special versions are not supported without an explicit workflow change.
Recover from a failure¶
Inspect the failed stage before rerunning. Later failures may leave a valid tag, published package, or GitHub release in place.
| Failure | Action |
|---|---|
| Version/tag mismatch | Select the intended tagged commit, or prepare a new source version for changed code |
| Build or artifact verification | Determine whether the tag was created; source fixes need a new version if the old tag is retained |
| PyPI publication | Check whether the version was actually published before retrying |
| GitHub release or docs | Retry from the same tagged source when only the downstream operation failed |
A published PyPI version cannot be replaced with different artifacts. If source must change after publication, prepare a new version. Do not delete or move a release tag merely to bypass a provenance check.