Release 3.1.0 - #174
Merged
Merged
Release 3.1.0#174
Conversation
Everything merged since 3.0.0 shipped under a version number that said
3.0.0. PyPI has had 3.0.0 since 2026-08-04 (verified: uploaded, not yanked,
and the latest version there), so the API changes since then land on an
installed base rather than on nothing.
Version bumped to 3.1.0. Note this is a MINOR version carrying breaking
changes, which is a deliberate departure from semver: a `>=3.0,<4` or
`~=3.0` pin picks them up automatically. The CHANGELOG leads with a warning
block saying exactly that, naming `Auto3D==3.0.0` as the pin to hold while
migrating, and stating that no compatibility shims exist.
The warning also leads with the mitigating fact, because it decides whether
most users are affected at all: the TOP-LEVEL API is unchanged. `from Auto3D
import main, smiles2mols, Auto3DOptions, calc_spe, calc_thermo,
opt_geometry, create_model, ...` all still resolve, because the package root
re-exports them lazily. Only code reaching into submodules breaks.
CHANGELOG consolidated. `[Unreleased]` became `## [3.1.0] - 2026-08-20`,
with a fresh empty `[Unreleased]` above it. Seven section headings became
four: `Fixed`, `Added` and `Changed` each appeared TWICE, because two later
waves appended their own sections instead of merging into the existing ones.
Entries are preserved in document order within each merged section, and the
sections are now in Keep a Changelog's order.
THE TWO PACKAGING FIXES ARE NOW VERIFIED AGAINST A REAL ARTIFACT. Both were
made during the layer move and both are covered by no test, so this build is
the first thing that has ever checked either:
entry_points.txt auto3d = Auto3D.presentation.auto3Dcli:cli
wheel payload Auto3D/engines/models/ani2xt_no_repulsion.pt
Without them this release would have shipped a broken `auto3d` command and a
wheel with no ANI2xt checkpoint, with every gate green. `python -m build`
also confirms `Version: 3.1.0`, `py.typed` present, all six layer
directories in the wheel, and 100 layered modules in the sdist.
`publish.yml` needs no change: it builds from pyproject and publishes by
trusted publishing, with no module path anywhere in it. That closes the gap
flagged earlier -- it is the one workflow no CI run exercises, because it
triggers only on a published release.
Also updated: README's conda-forge comparison, which named 3.0.0 as the
version conda-forge lags behind.
NOT in this commit: CLAUDE.md. It is gitignored (.gitignore:135), so the
file describing the project's current version and layout is local to one
machine and cannot be updated here. Its copy on this machine now says 3.1.0
and carries the breaking-change note, but nothing propagates that -- worth
knowing before trusting it as a shared record.
Verification:
- 1771 passed, 1 skipped, 74 deselected, randomized order.
- ruff check and ruff format --check both clean.
- Wheel and sdist built and inspected; build artifacts not committed.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Why now
Everything merged since 3.0.0 has been shipping under a version number that says
3.0.0. Verified against PyPI:auto3d-3.0.0was uploaded 2026-08-04, is not yanked, and is the latest version there — so the API changes since then land on an installed base, not on nothing.The semver departure, stated up front
3.1.0 is a minor version carrying breaking changes. Strict semver would make this a major release. A
>=3.0,<4or~=3.0pin will pick it up automatically.The CHANGELOG now opens 3.1.0 with a warning block saying exactly that, naming
Auto3D==3.0.0as the pin to hold while migrating, and stating that no compatibility shims exist.It also leads with the mitigating fact, because that decides whether most users are affected at all: the top-level API is unchanged.
from Auto3D import main, smiles2mols, Auto3DOptions, calc_spe, calc_thermo, opt_geometry, create_model, ...all still resolve — the package root re-exports them lazily. Only code reaching into submodules breaks.CHANGELOG consolidation
[Unreleased]became## [3.1.0] - 2026-08-20, with a fresh empty[Unreleased]above it.Seven section headings became four.
Fixed,AddedandChangedeach appeared twice (lines 260/491, 395/483, 435/468) because two later waves appended their own sections rather than merging into the existing ones. Entries are preserved in document order within each merged section, and sections are now in Keep a Changelog's order.The two packaging fixes are verified against a real artifact
Both were made during the layer move, and neither is covered by any test — so this build is the first thing that has ever checked either:
Without them this release ships a broken
auto3dcommand and a wheel with no ANI2xt checkpoint — with every gate green, because the suite runs from the source tree where both are fine regardless.python -m buildalso confirmsVersion: 3.1.0,py.typedpresent, all six layer directories in the wheel, and 100 layered modules in the sdist. Artifacts were inspected and deleted, not committed.publish.yml needs no change
It builds from
pyproject.tomland publishes via trusted publishing, with no module path anywhere in it. That closes a gap I flagged during the layer move: it is the one workflow no CI run exercises, because it triggers only on a published release.Not in this PR: CLAUDE.md
It is gitignored (
.gitignore:135), so the file describing the project's current version and layout is local to one machine and cannot be updated here. Worth knowing before treating it as a shared record.Verification
ruff checkandruff format --checkboth clean.Not done here
Tagging and publishing. Creating the GitHub release is what triggers
publish.ymland the PyPI upload, and PyPI never accepts a version number twice. That step is deliberately left for a human.