Repository navigation
chore(release): prepare 0.3.0 - #80
Merged
Merged
Conversation
Set the version to 0.3.0 in pyproject.toml, rowspec.__version__ and the action's default install pin, and point the README's action example at v0.3.0. Date the unreleased changelog section and add the user-facing changes it was missing. Re-measure the roadmap's figures.
The 0.3.0 changelog said #74 left the licence split unchanged. It relicensed conformance/reserved/ and docs/ci/rowspec-check.yml to CC0-1.0 and gave action.yml, .github/workflows/ and the justfile a licence; say so. Say that dev and CI changes are omitted too. The roadmap's mutant-count command matched only lowercase verdicts, so a SURVIVED, STALE, BROKEN or BOGUS line would have been left out of the count. Match case-insensitively and include bogus.
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.
What
Prepares the 0.3.0 release. No code changes.
0.3.0inpyproject.toml, inreference/rowspec/__init__.py's__version__, and in the action's default install pin (rowspec==0.3.0).uv.lockchanges only rowspec's own version line.@v0.3.0.[0.3.0] — 2026-10-08, with compare links and an empty[Unreleased]above it.Not tagged. The tag is the owner's call after review.
Why 0.3.0
Under SemVer's pre-1.0 convention a minor bump carries behaviour changes, and this release has three that a consumer can observe:
rowspec checkoutput changes on CSV input: a loneCRnow produces a warning, and--strictrefuses it (CSV mode warns on CRLF, which §3 allows, and ignores a lone CR, which §13 says to warn on #59). A pipeline running--stricton a file with a loneCRgoes from green to red.eval-outcome(ci: exercise the action's default install path after each release #72).conformance/run_cases.pyexits 2, not 1, when the implementation will not import (fix(conformance): exit 2 when the implementation will not import #62). Anyone scripting against the runner's exit code sees a different value.A patch release (0.2.1) would claim no observable behaviour changed, which is not true here.
The changelog against
git log v0.2.0..origin/mainAll 19 commits in
git log --oneline v0.2.0..origin/mainwere checked against the section. The existing entries covered #52/#72, #68, #78, #77, #64, #60, #76 and #57. I added these, which consumers can see but the section did not mention:eval-outcomeoutput (ci: exercise the action's default install path after each release #72). It came in with the post-release workflow and was missing from the changelog.setup-pythonpinned to a commit (ci: pin every action to a commit, and test that it stays pinned #71); the release gate runningjust test/just test-xlsxand checking__version__(ci(release): fail the build when __version__ disagrees with metadata #69, ci(release): run just test and just test-xlsx in the release gate #70); SPDX headers and the newtests/andconformance/reserved/LICENSEfiles (chore(license): add spdx headers and tests/LICENSE, and check both #74); thereference/boundary check seeing dynamic imports (test(boundary): see __import__ and import_module with a constant name #65).conformance/reserved/(was MIT, fromconformance/LICENSE) anddocs/ci/rowspec-check.yml(was CC-BY-4.0) are now CC0-1.0. The rootLICENSEnow names Apache-2.0 OR MIT foraction.yml,.github/workflows/and thejustfile, which it did not list before. Both relicensings move to more permissive terms.git diff 228b61e~1 228b61e -- LICENSE docs/LICENSEshows all three.The section's opening note says what is left out. #58 and #75 are documentation-only, and the note covers them as 0.2.0's did. #66, #67 and #73 are dev and CI changes with no effect outside this repository, and the note now names them.
I checked the new claims before writing them:
cd conformance && uv run python run_cases.py no_such_implprints theHARD FAILURE:line and exits2.grep -rhn 'uses:' .github/workflows action.yml | grep -vE '@[0-9a-f]{40}'matches only local./refs and comments.Re-measured figures
Run on this branch, in the order listed. Each ROADMAP figure now has the command that produced it beside it.
All checks passed!just checkfind conformance/cases -name expect.json | wc -l0 failure(s) across 410 case(s)just conform0 failure(s) across 410 case(s)(second impl)just conform-alt73 killed, 0 survived, 2 equivalent, 0 stale, 0 brokenjust mutantsjust mutants | grep -ciE '^ (killed|equiv|survived|stale|broken|bogus) '73 passed, 1 skippedjust test9 passedjust test-xlsxTwo ROADMAP rows changed:
just testwent from 52 passed to 73 passed. The new tests aretest_pins.py,test_licensing.pyandtest_tooling.py, plus additions to existing files since v0.2.0.The
just test-xlsxrow is new.The count command matches case-insensitively and includes
bogus, because kindkit prints the failing verdicts in uppercase (SURVIVED,STALE,BROKEN,BOGUS). It was checked against a sample of all six per-mutant line shapes and kindkit's summary lines:It still gives
75on this tree.Dry run of
release.yml's build jobI built from
git archive HEADof this commit, unpacked into an empty directory, so the build saw only tracked files. The commands are the workflow's.uv buildproducedrowspec-0.3.0.tar.gzandrowspec-0.3.0-py3-none-any.whl.GITHUB_REF_NAME=v0.3.0:tag v0.3.0 matches built version 0.3.0, exit 0. WithGITHUB_REF_NAME=v0.2.0as a negative control:::error::tag v0.2.0 does not match built version 0.3.0, exit 1.action.yml pins rowspec==0.3.0, matching the release.run:script from the YAML withyaml.safe_loadand ran it withbash -efrom the build directory.rowspec.__file__is under uv's ephemeral environment, not the checkout. The version assertion therefore ran against the wheel.Version: 0.3.0,License-Expression: Apache-2.0 OR MIT,Requires-Python: >=3.11,Provides-Extra: xlsx,Requires-Dist: openpyxl>=3.1; extra == 'xlsx'. Besides its.dist-info, the wheel contains onlyrowspec/androwspec_xlsx/.uv venv+uv pip install <wheel>):rowspec evalon a table whose total is#REF!(/0)exits 1.rowspec checkon the same table exits 0 (0 refused). That is the reason the action runs both commands.rowspec eval docs/exampleexits 0 (grand = 133.5);rowspec check docs/exampleexits 0.CRgives a warning and exits 0 undercheck, and is refused with exit 1 undercheck --strict.<wheel>[xlsx]:rowspec_xlsximports from the venv, with openpyxl 3.1.5.After merge
Tag
v0.3.0on the squash commit.release.ymlthen runs the gate, builds, publishes through the trusted publisher, and runsaction-published.ymlagainst the published wheel. This is the first release in which that job runs (#52); before now it has only run on branches pushed to probe it. If it goes red, the tag and the upload are already final, and the fix is a patch release.