Skip to content

chore: Release 0.5.0 - #96

Merged
ApGa merged 1 commit into
mainfrom
apga/release-0.5.0
Oct 29, 2026
Merged

ApGa merged 1 commit into
mainfrom
apga/release-0.5.0

Conversation

@ApGa

@ApGa ApGa commented Oct 29, 2026

Copy link
Copy Markdown
Owner

This pull request releases platoon 0.5.0, following CONTRIBUTING.md's "Cut a release", and readies the TextCraft
extension's release for it, platoon-textcraft 0.4.0. It holds the release commit alone, on main after every pull
request of 0.5.0 has merged. Once it merges, the tag v0.5.0 on its merge commit publishes platoon 0.5.0 to PyPI.

What 0.5.0 contains

What merged since 0.4.0, as CHANGELOG.md's 0.5.0 section lists it:

What changes

  • pyproject.toml and uv.lock: version 0.5.0. The lock records platoon-textcraft 0.4.0 too; nothing else in it
    moves.
  • CHANGELOG.md: ## 0.5.0 (unreleased) becomes ## 0.5.0 (2026-10-29), the day (UTC) the tag is to land (should
    the merge slip past that day, date it again first: the Release workflow checks only that the heading has a date).
    The section gains install and upgrade notes: the upgrade commands, moving a pinned range to 0.5 (and how to load an
    extension that does not admit 0.5 yet), the hpc extra's move to hpc-sandbox 0.5.1, the fetch that now locks
    multi-container tasks as runnable (and how to keep them refused), the training code's move out of
    platoon.train.tinker, a restart of a run that is training, and the TextCraft extension's release for 0.5. The
    intro's example range names 0.5.
  • CHANGELOG.md, entries brought up to what 0.5.0 ships, where later pull requests overtook them: a compose file
    with services besides main runs as a stack, where the entry said such stacks stay refused; the defaults of
    TrainerNeeds are told once, in the new feature, instead of as a change to 0.4.0's trainer API, which did not
    exist; the Changes no longer name methods that 0.4.0 never had (TrainStep.advance, _new_stats_logger); entries
    that said a 0.5.0 API "gains" or "now" does something say what it does; the FrontierSmith entry is reworded and
    rewrapped; and blank lines no longer split the list of new features.
  • Ranges: a minor release moves every range that names the previous one, so these now name 0.5 (>=0.5,<0.6):
    README.md's install line, CHANGELOG.md's intro, CONTRIBUTING.md's sections on extensions, versions and the TextCraft
    extension, the install guide, the extension guides (docs/extending/index.md and publish-a-package.md), the two
    example packages, the TextCraft extension and its README, and the fake extensions of the tests
    (tests/extension_site.py and three tests), which platoon 0.5 would otherwise refuse. The changelog's earlier
    sections keep their ranges.
  • Docs: the listings of platoon harness list and platoon extensions list show 0.5.0; the FrontierSmith recipe
    names platoon 0.5.0 without "(unreleased)"; the RAO recipe's requirements name platoon 0.5 and platoon-textcraft
    0.4; and CONTRIBUTING.md's example of the extension's release names 0.4.0. No docs say "the next release".
  • Deprecations: no form is due for removal in 0.5.0, since 0.4.0 deprecated nothing (grep -rn 'removed_in="0.5.0"' platoon finds none). The module paths that 0.5.0 moved out of platoon.train.tinker go in 0.6.0, and so does the
    warning of a GroupRolloutWorkflow subclass that defines a method of its startup gate under its name before 0.5.0;
    CONTRIBUTING.md's check now lists the forms due in 0.6.0 and names that warning.
  • The TextCraft extension, platoon-textcraft 0.4.0: its platoon extra requires platoon[ors]>=0.5,<0.6, so that
    platoon-textcraft[platoon] installs beside platoon 0.5. Its code and data are those of 0.3.0, which stays the
    release for platoon 0.4; its README says how to install the release for platoon 0.4, 0.3 or 0.2. It is 0.4.0, not
    0.3.1, because a patch release only fixes bugs and this one moves the platoon it installs to a new minor release.

After the merge

  1. The tag v0.5.0 on the merge commit, on the day the changelog dates (2026-10-29, UTC). The Release workflow checks
    that the commit is on main and that CHANGELOG.md dates 0.5.0, builds and checks both distributions, and uploads
    platoon.
  2. Once platoon 0.5.0 is on PyPI, and promptly then, the tag platoon-textcraft-v0.4.0 on the same commit publishes
    platoon-textcraft 0.4.0. Not earlier: its platoon extra cannot be installed until platoon 0.5.0 is there. Not
    much later either: until it is on PyPI, the changelog's second upgrade command, which names
    platoon-textcraft[platoon], does not resolve.
  3. The GitHub releases for both tags: v0.5.0's from the changelog's 0.5.0 section, with its links pinned to the tag,
    as v0.4.0's.

Checks

  • CI's jobs, run on this commit as CI runs them (fresh checkouts, no secrets, an empty Hugging Face cache), on main
    with every pull request of 0.5.0: lint; the tests on Python 3.12, 3.13 and 3.14 (8765 passed and 253 skipped on
    each, and the 2 serial tests), with uv lock --check, the generated reference, the public API snapshot and a clean
    tree after the tests on 3.12; the TextCraft extension's tests (38 passed, 6 skipped); the recipes (33 passed); and
    the release workflow's build and checks: the sdist and the wheel of platoon 0.5.0 and of platoon-textcraft 0.4.0
    pass twine check --strict, the wheel's platoon --version prints 0.5.0, its platoon harness list matches the
    docs' listing, and the TextCraft wheel serves its environments alone, without platoon. All pass.
  • The built wheel, installed with [tinker,ors,hpc] into a fresh virtual environment outside the checkout (which
    resolves hpc-sandbox 0.5.1): platoon --version prints 0.5.0, import platoon, platoon.experimental imports from
    the installed package, and platoon config validate passes on the number-search example's train.yaml and
    eval.yaml.
  • The training loop's golden trace (tests/train/parity): 27 passed.
  • uv lock moved only platoon (0.4.0 to 0.5.0) and platoon-textcraft (0.3.0 to 0.4.0).
  • main before this commit passed CI with all of 0.5.0's pull requests merged.

Set the version to 0.5.0 in pyproject.toml and the lock, and date the
0.5.0 section of CHANGELOG.md, as CONTRIBUTING.md's "Cut a release"
says. The section gains install and upgrade notes: the range to pin,
the hpc extra's move to hpc-sandbox 0.5.1, the fetch that now locks
multi-container Harbor tasks as runnable stacks, the training code's
move out of platoon.train.tinker, and the TextCraft extension's release
for platoon 0.5.

Some entries had fallen behind the work that followed them, and now say
what 0.5.0 ships: a compose file with services besides main runs as a
stack instead of staying refused; the defaults of TrainerNeeds are told
once, in the new feature, since 0.4.0 had no trainer API whose behavior
they could change; and the Changes no longer name methods that 0.4.0
never had (TrainStep.advance, _new_stats_logger). Where an entry said
that a 0.5.0 API "gains" or "now" does something, it says what the API
does, and the blank lines that split the list of new features are gone.

The listings that show platoon's version show 0.5.0, the FrontierSmith
recipe no longer calls 0.5.0 unreleased, the RAO recipe's requirements
name platoon 0.5 and platoon-textcraft 0.4, and CONTRIBUTING.md's
example of the extension's release names 0.4.0. No docs mark what is
new with "the next release".

A minor release also moves every range that names the previous one: the
docs, the examples, the first-party extension and the tests' fake
extensions now require platoon within 0.5 (>=0.5,<0.6), since platoon
0.5 refuses an extension whose requirement stops below it.

No deprecated form is due for removal in 0.5.0, since 0.4.0 deprecated
nothing. The module paths that 0.5.0 moved out of platoon.train.tinker
go in 0.6.0, and so does the warning of a GroupRolloutWorkflow subclass
that defines a method of its startup gate under its name before 0.5.0:
CONTRIBUTING.md's check now lists the forms due in 0.6.0, and names
that warning.

The TextCraft extension needs a release of its own for platoon 0.5:
platoon-textcraft 0.4.0, whose platoon extra requires
platoon[ors]>=0.5,<0.6. Its code and data are those of 0.3.0, which
stays the release for platoon 0.4, as its README now says. It is a
minor release, since it moves the platoon it installs to a new minor
release. Its tag follows platoon's once platoon 0.5.0 is on PyPI.
@ApGa
ApGa merged commit efe3b27 into main Oct 29, 2026
11 checks passed
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