Repository navigation
chore: bump to 1.15.0 — the wheel is code-identical, the git tag is the whole point (#501) - #503
Conversation
…he whole point (#501) Not one file under src/ changed since v1.14.0, and the wheel packages only the nine src/datafactory_* trees, so a consumer installing 1.15.0 from PyPI gets exactly what 1.14.0 gave them with different version metadata. That is the point rather than a defect. The server deploys by git tag (ADR-022): refresh_pipeline.sh reads ~/.views-deploy-tag and checks out that exact tag. The two things this release carries — scripts/export_zarr.py and a set of corrected guides — reach production no other way, because the wheel does not contain them. v1.11.0 and v1.12.0 were both minor bumps with zero src/ change, so the shape is house precedent, not a judgement made here. Why now: #502 merged the only instrument that can attribute the zarr export's 5h07m to a phase, and it sits on development where the server cannot see it. The monthly cron fires 00:00 on the 21st. A tag before then gets the measurement on a run that was happening anyway; missing it means a deliberate out-of-band six-hour run or waiting until 21 November. The plan edit is not housekeeping tacked on. TestF7ProductPlanCurrency asserts the product plan's title carries the current minor version, so the version bump alone turns it red — the two edits are one atomic change. Confirmed by breaking it rather than by reading it: with the title reverted to "through v1.14" and the version at 1.15.0 the test FAILED, and went green when the title was restored. uv.lock moves too: it pins the root project version (line 1701), and uv re-synced it on the first uv run after the bump. refresh_pipeline.sh:178 does git checkout -- uv.lock before the tag checkout precisely because the server mutates it locally. Noticed, deliberately not fixed: "## Version History" in the same plan file stops at v1.6 and jumps to v2.0 — eight releases happened without it. The per-release addenda at the top have been the live record since v1.7. Repairing a section stale for eight releases inside a version bump would hide a documentation change inside a release. No tag, no GitHub Release, no deploy. Each is separately gated. Verification: full suite EXIT=0, 0 FAILED, 0 ERROR (XFAILs are documented deferrals); ruff check . clean; mypy src/ clean (89 files); validate_docs.sh PASSED; deploy_v160 + _v160_r2 + merge_readiness 10 passed 1 skipped (HEAD not on a tag, expected pre-release); main is an ancestor of development. Refs #501. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01EfeuULbPTqrx4qtNki5dy9
Full suite resultExit code captured rather than inferred from the absence of Every non-pass is an The one skip worth naming, because it is the gate this PR is a step toward:
|
What this release is for, stated before anything else
The wheel is code-identical to v1.14.0. Not one file under
src/changed:[tool.hatch.build.targets.wheel]packages only the ninesrc/datafactory_*trees, so a consumerinstalling
views-datafactory==1.15.0from PyPI gets exactly what 1.14.0 gave them, with differentversion metadata.
That is the point, not a defect. The server deploys by git tag (ADR-022):
refresh_pipeline.shreads
~/.views-deploy-tagand checks out that exact tag. The two things this release carries — ascript (
scripts/export_zarr.py) and a set of guides — reach production no other way. There is nopath by which a PyPI publish deploys a script that the wheel does not contain.
Precedent, so this is not a new shape:
v1.11.0andv1.12.0each changed zero files undersrc/and were each cut as a minor bump. v1.11.0's own commit subject says it — "a release whoseonly shipped change is a dependency floor". Minor, not patch, follows the house convention twice
over rather than a judgement made here.
Why now, and why it is time-boxed
#502 merged the only instrument that can answer #501: the zarr export's wall time broken into four
phases. It is on
developmentand therefore nowhere the server can see it.The monthly cron fires 00:00 on the 21st — two days out. A tag before then gets the measurement
on a run that was happening anyway. Missing it means either a deliberate out-of-band run of a
six-hour pipeline or waiting until 21 November: five weeks with the instrument built, merged and
idle.
What is in the diff
pyproject.tomlversion = "1.14.0"→"1.15.0"reports/product_development_plan12.mdthrough v1.14→v1.15, plus the v1.15 addendumNothing else. No code, no tests, no behaviour.
The two edits are coupled, and a drill proves it
TestF7ProductPlanCurrencyasserts the product plan's title carries the current minor version. Theversion bump alone turns it red, so the plan edit is not housekeeping tacked on — it is the other
half of one atomic change.
Confirmed by breaking it rather than by reading it:
through v1.14, version left at 1.15.0TestF7ProductPlanCurrencyFAILED —Current: 1.15.0, plan: '… through v1.14 …'What the addendum says that a reader will not find elsewhere
It records the measurement that motivated the release — 21,007s total, 18,427s in the export, 88% of
the pipeline, against ADR-041's Context figure of ~57 minutes — and it carries the #501
falsification criterion into the plan rather than leaving it only in an issue comment: if
scancomes in under ~25% of the export, the strided-memmap explanation is refuted and abandoned.
Every figure in it was checked against the repo rather than carried over from chat. The one claim
worth naming because it is load-bearing for the "not fixed" paragraph:
scripts/check_health.pyhas26 references to freshness, staleness or age and zero to duration or elapsed time, so nothing
compares run durations across runs. That gap is flagged in the addendum, not fixed here.
Noticed, deliberately not fixed
## Version Historyin the same plan file stops at v1.6 and jumps to v2.0 — eight releaseshappened without it. The per-release addenda at the top are the live record and have been since
v1.7. Repairing a section that has been stale for eight releases is not this PR's job, and doing it
inside a release bump would hide a documentation change inside a version change.
Verification
uv run ruff check .uv run mypy src/bash docs/validate_docs.shuv run pytest(full suite, exit code captured)test_falsification_deploy_v160,_v160_r2,merge_readinessgit merge-base --is-ancestor origin/main origin/developmentdevelopmentandmain; no stale branches, no open PRsWhat this PR explicitly does not do
No tag, no GitHub Release, no deploy. Each is separately gated and awaits explicit confirmation.
This PR moves a version number into
development; it publishes nothing and changes nothing on theserver.
Refs #501.
🤖 Generated with Claude Code
https://claude.ai/code/session_01EfeuULbPTqrx4qtNki5dy9