Skip to content

Open the 2.2 cycle's version: 2.2.0dev - #362

Merged
derek73 merged 1 commit into
masterfrom
claude/bump-2.2.0dev
Aug 9, 2026
Merged

Open the 2.2 cycle's version: 2.2.0dev#362
derek73 merged 1 commit into
masterfrom
claude/bump-2.2.0dev

Conversation

@derek73

@derek73 derek73 commented Aug 9, 2026

Copy link
Copy Markdown
Owner

The tree has said 2.1.0 all cycle. Two costs, one of which prompted this and one which is arguably the bigger.

Read the Docs "latest" was stuck on the last release

docs/conf.py:66 reads nameparser.__version__ directly, and .readthedocs.yaml installs path: . from the default branch — so "latest" rendered the version we shipped rather than the one we are building.

The differential harness's version tell was running on one cylinder

The tell exists so a worker that silently resolved to the checkout cannot pass as the baseline. With the tree and the 2.1.0 baseline wheel both reporting 2.1.0, only the __file__ path told them apart — which is exactly the weak state test_tell_rejects_a_module_loaded_from_the_checkout records in its own docstring:

"when the tree and the baseline share a version the version half of the tell agrees and only the path gives it away"

That is the condition the worker_v1.py invocation trap exploited. A bare run now reads:

tree:     nameparser 2.2.0dev (.../nameparser/__init__.py)
baseline: nameparser 2.1.0    (.../uv/environments-v2/baseline-worker-.../nameparser/__init__.py)
corpus: 751 names; intentional diffs: 0; unexplained: 0

Both halves discriminate again.

dev, not a bare bump

PRE_RELEASE = "dev" rather than VERSION = (2, 2, 0) with PRE_RELEASE = "", because master must not claim to be a release that does not exist on PyPI. Verified:

2.2.0dev  ->  normalizes 2.2.0.dev0   > 2.1.0 ✓   < 2.2.0 ✓   is_prerelease ✓

So pip install git+… gets something that sorts below any real 2.2.0.

Known cost

VERSION is a pure numeric tuple by design — its docstring invites nameparser.VERSION >= (2, 0, 0) — so it cannot carry the dev marker, and VERSION >= (2, 2, 0) is now true while 2.2.0 is unreleased. The constant says so and points at __version__ for callers who need the distinction. Nothing in-repo gates on the tuple.

CITATION.cff deliberately holds at 2.1.0

It names the last citable released artifact, so it is the one version string that does not track the tree. It lags for the whole cycle and catches up at release. Nothing enforces that — no test, no CI — so the checklist now states it rather than implying the two are kept equal.

Checklist

Release step 2 becomes "clear PRE_RELEASE" instead of "bump VERSION", and a new step 9 opens the next cycle's version next to step 8's ledger. Both are cycle-open work, and pairing them is what stops the tree and the docs drifting apart again.

Full suite 3096 passed; mypy and ruff clean; harness clean at 0 unexplained.

🤖 Generated with Claude Code

The tree said 2.1.0 for the whole cycle, which had two costs.

docs/conf.py reads __version__ directly and Read the Docs installs the
default branch, so "latest" rendered 2.1.0 -- the release we shipped,
not the one we are building. That is what prompted this.

The second is the differential harness. Its version tell exists so a
worker that silently resolved to the checkout cannot pass as the
baseline, and with the tree and the 2.1.0 baseline wheel BOTH reporting
2.1.0 only the __file__ path told them apart -- the weak state
test_tell_rejects_a_module_loaded_from_the_checkout documents in its
own docstring, and the condition the worker_v1.py invocation trap
exploited. A bare run now reads:

  tree:     nameparser 2.2.0dev (.../nameparser/__init__.py)
  baseline: nameparser 2.1.0    (.../uv/environments-v2/...)

Both halves discriminate again.

PRE_RELEASE = 'dev' rather than a bare bump, because master must not
claim to BE a release that does not exist. It normalizes to 2.2.0.dev0,
which sorts above 2.1.0 and below 2.2.0, so an install from git can
never masquerade as the release it precedes.

The cost is on the tuple: VERSION is numeric by design, so it cannot
carry the marker and `VERSION >= (2, 2, 0)` is already true here. It is
public and its docstring invites that comparison, so the constant now
says to use __version__ where the distinction matters.

CITATION.cff deliberately stays at 2.1.0. It names the last citable
released artifact, so it is the one version string that does not track
the tree, and it lags on purpose until the next release. Nothing checks
that -- no test, no CI -- so the checklist now says it outright rather
than implying the two are kept equal.

Release step 2 becomes "clear PRE_RELEASE" instead of "bump VERSION",
and a new step 9 opens the next cycle's version alongside step 8's
ledger. Both are cycle-open work; doing them together is what stops the
tree and the docs drifting apart again.
@derek73 derek73 added the tooling label Aug 9, 2026
@derek73 derek73 self-assigned this Aug 9, 2026
@derek73 derek73 added this to the v2.2 milestone Aug 9, 2026
@codecov

codecov Bot commented Aug 9, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 98.50%. Comparing base (d910709) to head (e30c1cd).
⚠️ Report is 2 commits behind head on master.

Additional details and impacted files
@@           Coverage Diff           @@
##           master     #362   +/-   ##
=======================================
  Coverage   98.50%   98.50%           
=======================================
  Files          44       44           
  Lines        2883     2883           
=======================================
  Hits         2840     2840           
  Misses         43       43           

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@derek73
derek73 merged commit fe4fc8d into master Aug 9, 2026
11 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant