Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,12 @@ Notable changes to this project are documented in this file. The format is based
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).

## [Unreleased]
### Changed

- **The release protocol now treats `uv` as a required tool and uses a `uv`-managed Python 3.13 environment for public install verification.**
The maintainer runbook no longer assumes a host `python3.13` binary is present on PATH during
the final release smoke test; it now verifies the published package in a seeded
`uv venv --python 3.13` environment, which matches the project's actual Python management model.

## [0.164.0] - 2026-04-23
### Changed
Expand Down
16 changes: 11 additions & 5 deletions docs/RELEASE_PROTOCOL.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,25 +11,27 @@ route:
# Release Protocol

**Purpose**: Publish a tagged FTLLexEngine release through GitHub CLI and verify the GitHub Release and PyPI handoff.
**Prerequisites**: `gh` installed and authenticated, the target release version chosen, and a checkout topology that can produce a clean release payload.
**Prerequisites**: `gh` installed and authenticated, `uv` installed, the target release version chosen, and a checkout topology that can produce a clean release payload.

## Overview

The release flow is `gh`-first and branch-based. Do not push release commits directly to `main`.
Use a release branch, open a PR, merge it, verify the merged `main` commit is green, tag that
commit, and then verify the GitHub Release and published artifacts directly.

## Step 0: Verify GitHub CLI Readiness
## Step 0: Verify Tooling Readiness

Before doing anything else, run:

```bash
gh --version
gh auth status
uv --version
```

If either command fails, stop immediately. Do not continue with release work until `gh` is both
installed and authenticated for the target repository.
If any command fails, stop immediately. Do not continue with release work until `gh` is both
installed and authenticated for the target repository and `uv` is available for managed Python
and packaging operations.

## Step 1: Choose The Authoritative Checkout

Expand Down Expand Up @@ -302,12 +304,16 @@ gh release download vX.Y.Z \
shasum -a 256 -c "ftllexengine-X.Y.Z.sha256"
)

python3.13 -m venv "$TMP_DIR/py313"
uv venv --python 3.13 --seed "$TMP_DIR/py313"
"$TMP_DIR/py313/bin/pip" install --no-cache-dir "ftllexengine==X.Y.Z"
"$TMP_DIR/py313/bin/python" -c "import ftllexengine as pkg; print(pkg.__version__)"
rm -rf "$TMP_DIR"
```

Use `uv` for this installability check even if the host shell does not expose a direct
`python3.13` binary. The release verifier must exercise a real Python 3.13 environment, but it
does not need to come from the system PATH.

The release is not complete until the release object, assets, and real install test all succeed.

## Step 8: Branch And Checkout Hygiene
Expand Down