chore: release 0.1.0rc1 - #1752
Merged
Merged
Conversation
Merging this PR will not alter performance
Comparing Footnotes
|
FBumann
added this pull request to stack #1753
September 25, 2026 10:59
FBumann
removed this pull request from stack #1753
September 25, 2026 11:41
FBumann
force-pushed
the
claude/release-0.1.0rc1
branch
from
September 25, 2026 11:48
49eb258 to
2457bb1
Compare
The release candidate for 0.1.0, the first release on PyPI. `## Upcoming version` becomes `## 0.1.0rc1 (2026-09-25)`, and the compatibility rule in AGENTS.md and CONTRIBUTING.md covers every version before 1.0. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_016Pv7LzSgzt7Yn2K3ioyJXw
FBumann
force-pushed
the
claude/release-0.1.0rc1
branch
from
September 25, 2026 11:53
2457bb1 to
606d0c8
Compare
FBumann
marked this pull request as ready for review
September 25, 2026 11:57
FBumann
added a commit
that referenced
this pull request
Sep 25, 2026
…saved answer says the layout moves before 1.0 (#1763) > **Prompt:** Also do this It came with the four items of section 3 of #1752's checklist, "Before this PR merges: what the PyPI page shows", pasted below it. > [!NOTE] > The following content was generated by AI. The four items in section 3 of #1752's checklist. The PyPI page gets links to the docs, issues and changelog. The README's links resolve there. Two error messages drop "0.0.1aN". RELEASING.md stops promising tighter CI by 0.1.0. <details><summary>What changed, gates, departures</summary> **Changes** - `pyproject.toml`: `[project.urls]` names `Documentation`, `Repository`, `Issues` and `Changelog`, as energy-models/mathspec#707 did. It used to name only `repository`. - `README.md`: the links to `CONTRIBUTING.md` and `docs/about/prior-art.md` are now absolute: GitHub for the first, Read the Docs for the second. - `src/specsolve/relational/parquet.py`: both `LayoutError` messages say "The layout moves before 1.0" instead of "while the package is on 0.0.1aN". The docstring of `test_an_answer_in_another_layout_is_refused_by_name` follows. The test matches on the rewrite ("solve the model again and save it"), not on this clause. - `RELEASING.md`, "Relaxed while in early development": it said "Tighten these before 0.1.0". It now says a Python matrix behind a gate job is the first thing to add back when CI is tightened, without a date. I changed the sentence rather than add the matrix. The interpreter is pinned once in `[tool.pixi.dependencies]`, so a matrix needs a pixi feature per Python version. That is its own PR. - `CHANGELOG.md`: this PR's line under `## Upcoming version`. **Gates**, run in a `uv` environment (dev + docs groups, `gurobi` and `xpress` extras), because pixi cannot be installed here: - `ruff check .` and `ruff format --check .` pass. - `pytest -n auto`: 4139 passed, 250 skipped, 1 xfailed. - `zensical build --strict`: no issues. - `uv build`, then `twine check`: passed. The wheel's metadata has the four `Project-URL` lines and no direct reference. - `python -m tools.changelog check` and `entry` pass. **Departure from Part 2:** one PR for four checklist items rather than one each. They are small, all serve the first PyPI page, and the checklist groups them. The type is `fix`, the topmost row, because of the messages in `src/`. </details> 🤖 Generated with [Claude Code](https://claude.com/claude-code) https://claude.ai/code/session_016Pv7LzSgzt7Yn2K3ioyJXw --------- Co-authored-by: Claude <noreply@anthropic.com>
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.
Note
The following content was generated by AI.
This is the release PR for
0.1.0rc1, the release candidate for the first PyPI upload. It is stacked on #1751. It stays a draft until PyPI can take the package. One direct reference is left, thelinopyextra, and #1755 removes it (step 1).The first PyPI release, step by step
1. What blocks the upload
PyPI refuses a distribution that names a git URL in its metadata.
pyproject.tomldepends onmathspec>=0.1.0(build(deps): specsolve depends on the mathspec 0.1.0 release from PyPI rather than a git tag #1754). The parity job reads the corpus tag from that floor.linopy @ git+…@masterreference moves to thedevgroup, which PyPI never sees. It also deletesallow-direct-references, so hatchling refuses a direct reference at build time, before PyPI would.2. One-time setup
PyPI
specsolvefluxoptspecsolverelease.yamlpypiGitHub, under fluxopt/specsolve Settings
pypi. Under "Deployment branches and tags", choose "Selected branches and tags" and addmain. Add the people who may approve a release as required reviewers.mainruleset. Requireci,Conventional commit subjectandChangelog line. A required check must run onmainonce before you can require it.no changelog.Clean-up that the release does not need
AUTO_RELEASEandPUBLISH_TO_PYPIif they exist. Turn off "Allow auto-merge" unless you want it for other PRs.specsolvefrom the release app's (fluxopt-release-bot) repository access. If no other repository uses the app, uninstall it and delete the secretsAPP_CLIENT_IDandAPP_PRIVATE_KEY.release-please--branches--main--components--farkasandrelease-please--branches--main--components--linopy-yaml.from_spec) conflicts with refactor(api): specsolve no longer builds a linopy model, and its linopy extra and LaneError are gone #1755; close it or rebase it.3. Before this PR merges: what the PyPI page shows
[project.urls]has onlyrepository. AddDocumentation,IssuesandChangelog, as docs: the installation page and the PyPI project page say pip install mathspec, and the README's links resolve on PyPI energy-models/mathspec#707 did.CONTRIBUTING.mdanddocs/about/prior-art.md. On PyPI they do not resolve. Make them absolute.src/specsolve/relational/parquet.pyhas two error messages that say "while the package is on 0.0.1aN".tests/test_archive.pyasserts the same. Reword them to "before 1.0".4. This PR
main. GitHub retargets it when ci: a release is a merged changelog heading, rather than a release-please PR merged automatically #1751's branch is deleted; if the branch stays, retarget by hand.## 0.1.0rc1 (2026-09-25)to the day you merge, if that is not the 25th.ciis green. Its step "Check the changelog headings" printsreleases 0.1.0rc1 on merge.5. After the merge
Tag the version the changelog namescreated the tagv0.1.0rc1and the GitHub release0.1.0rc1, marked as a pre-release.Buildpassed, and its check printedspecsolve-0.1.0rc1.Publish to PyPIwaits for approval: "Review deployments" →pypi→ Approve.0.1.0rc1reached PyPI broken, release0.1.0rc2.6. Then 0.1.0
chore: release 0.1.0. It renames the next## Upcoming versionto## 0.1.0 (date), with notes that say this is the first release on PyPI. Merge it and approve the upload as above.pip install specsolvewithout a version. It should install0.1.0.7. Follow-ups
math-spec.readthedocs.io. The redirect keeps them working. Point them atmathspec.readthedocs.io.What this PR changes, what merging does, gates
The changes:
CHANGELOG.md: an empty## Upcoming version, then## 0.1.0rc1 (2026-09-25), with a paragraph and docs: the solve example archives its run and reads it back, with annotations that name the other options #1748's line.AGENTS.md: "The project is0.0.1aNand holds no compatibility promise" becomes "The project holds no compatibility promise before 1.0". One sentence is added: a release that breaks a model file or an import raises the minor version, and its notes name the break.CONTRIBUTING.md: the same rule, in the same words.Why a release candidate: it goes through the same tag, GitHub release, build, approval and trusted-publishing upload as
0.1.0. The only addition is--prereleaseon the GitHub release. pip skips it unless someone asks for it, so a broken first upload reaches no user. The version sorts after0.0.1a358and before0.1.0.What merging does:
release.yamlfinds0.1.0rc1with no tag. It createsv0.1.0rc1and a GitHub pre-release, builds from the tag, checks that the wheel and the sdist are0.1.0rc1, and waits for approval onpypibefore the upload.Gates:
python -m tools.changelog checkprints "releases 0.1.0rc1 on merge", andnotes 0.1.0rc1prints the section above. The suite on #1751's commit is in that PR. This commit changes only prose and the changelog.Not verified: the name
specsolveon PyPI. The PyPI API cannot be reached from this container, so check that the name is free when you add the pending publisher.The type is
chore, which owes no changelog line.🤖 Generated with Claude Code
https://claude.ai/code/session_016Pv7LzSgzt7Yn2K3ioyJXw