Skip to content

feat(release): add an edge channel that follows every release - #8

Merged
daylight-00 merged 2 commits into
mainfrom
feat/edge-channel
Oct 2, 2026
Merged

daylight-00 merged 2 commits into
mainfrom
feat/edge-channel

Conversation

@daylight-00

Copy link
Copy Markdown
Owner

Why

  • A release without a device receipt reaches no catalog, so following the newest CPython meant pointing uv at a release by hand.
  • Unattended releases are now routine, so the default catalog would stay on 3.14.6 until someone finds a device.

Change

  • edge branch — moves with every release; opt-in by URL, same file names as latest-release.
  • latest-release — unchanged: moves only for a device-qualified release, so uv python install still resolves to bytes a device ran.
  • Device-qualified release — moves both, so edge is never behind.
  • Vocabulary — prose says not device-qualified instead of prerelease. GitHub's Pre-release flag stays as the mechanism that keeps such a release off its "Latest" badge and releases/latest.
  • Why not "prerelease" — it implies a stage that ends, but promotion is a new tag; and to uv it means a CPython alpha, beta, or release candidate.

Details

  • An absent branch is told from an unreachable remote: only ls-remote exit 2 means absent.
  • Release notes point at edge and are tested never to say "prerelease".
  • Documented in docs/running.md (Channels) and docs/technotes.md (Release Model, Vocabulary).

After merging

  • edge does not exist until a release runs, or I seed it from 20261002; it is one orphan branch holding that release's three catalog files.
  • The next release (CPython 3.14.8, PR chore(pins): follow CPython 3.14.8 #7) is the first to use the new step, so merge this first.

Verification

  • ./check.py: ruff, format, mypy, and 168 tests pass, including on Python 3.11.
  • tests/test_release_workflow.py runs the step against temporary git repositories: edge-only for an unqualified release, both for a qualified one, latest-release held back, a later qualified release catching up, catalogs only on each branch, a rejected push failing the step, and an unreachable remote not read as a missing branch.
  • Breaking the step on purpose (always moving latest-release, swallowing a failed push) makes those tests fail.
  • zizmor: no new findings.

Not done

  • No release has run with this step yet; the dry run skips branch updates.

- Until now a release without a device receipt reached no catalog, so nobody could follow the newest CPython without pointing uv at a release by hand
- `edge` moves with every release; `latest-release` still moves only for a device-qualified one, so `uv python install` keeps resolving to bytes a device ran
- Both branches carry the same files under the same names, so tooling reads either; a device-qualified release moves both and `edge` is never behind
- Absence of a branch is told from an unreachable remote: only `ls-remote` exit 2 means absent, so a network failure cannot start a second history under the name
- The step is run against temporary git repositories in `tests/test_release_workflow.py`, including a push the remote rejects
- Document the channels in `docs/running.md` and the vocabulary in `docs/technotes.md`
- "Prerelease" implied a stage that ends, but promotion is a new tag with new bytes
- To uv the word means a CPython alpha, beta, or release candidate, and the catalog already has a `prerelease` field with that meaning
- GitHub's Pre-release flag stays as the mechanism that keeps such a release off its "Latest" badge and `releases/latest`
- Release notes, gate output, and comments name the evidence instead; the notes point at `edge` and are tested never to say "prerelease"
Copilot AI balanced review requested due to automatic review settings October 2, 2026 05:15

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@daylight-00
daylight-00 merged commit 234fdfc into main Oct 2, 2026
7 checks passed
@daylight-00
daylight-00 deleted the feat/edge-channel branch October 2, 2026 05:34
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.

2 participants