feat!: 1.0.0 — so a caret range can finally do its job - #46
Merged
Conversation
Eleven repos depend on this package and they sit on five different versions, from 0.6.2 to 0.15.0, while the registry serves 0.16.0 to none of them. That is not neglect and the automation is not broken. A caret range on a pre-1.0 version does not cross a minor: `^0.13.0` means at least 0.13.0 and below 0.14.0, because semver treats a 0.x minor as breaking. Dependabot runs weekly in every one of those repos, correctly classifies each 0.x minor as a breaking change, and correctly routes it to its own pull request for a human to read. That is the right policy for a breaking change and the wrong outcome for a package whose minors have been additive in practice. The version numbering defeated the process. 1.0.0 ends it by construction. Afterwards `^1.x` admits every later minor, Dependabot groups them with the routine bumps, and CI is the gate that makes taking them safe rather than brave. No code changes. The surface is byte-identical to 0.16.0 — this release exists to change what a range means, and bundling behaviour into it would make the one upgrade everybody must eyeball harder to eyeball. The upgrade TO 1.0.0 is a real one for old consumers: coming from 0.6.x crosses ten minors of a package that was permitted to break at each. Each repo runs its own suite. That cost is paid once. README gains a Versioning section stating the promise from here (minors additive, majors carry a migration note) and the rule that keeps drift uninteresting: perishable data — model ids rot in weeks — stays in the environment and in live catalogue fetches, never in a release. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01CAfKwM1oUSA9tU9fgdhfdf
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.
Eleven repos depend on this package and sit on five different versions, from
0.6.2to0.15.0, while the registry serves0.16.0to none of them.That is not neglect, and the automation is not broken.
The cause
A caret range on a pre-1.0 version does not cross a minor.
^0.13.0means at least 0.13.0 and below 0.14.0, because semver treats a0.xminor as a breaking change.Dependabot runs weekly in all ten consuming repos. It correctly classifies each
0.xminor as breaking, and correctly routes it to its own PR for a human to read — the right policy for a breaking change, and the wrong outcome for a package whose minors have been additive in practice. The version numbering defeated the process.^0.6.2^0.8.0^0.12.0^0.13.0^0.15.0What this changes
1.0.0 ends it by construction. Afterwards
^1.xadmits every later minor, Dependabot groups them with the routine bumps, and CI is the gate that makes taking them safe rather than brave.No code changes. The surface is byte-identical to 0.16.0. This release exists to change what a range means, and bundling behaviour into it would make the one upgrade everybody has to eyeball harder to eyeball.
The cost, stated plainly
The upgrade to 1.0.0 is a real one for old consumers: coming from
0.6.xcrosses ten minors of a package that was permitted to break at each. Every repo runs its own suite on the way. That cost is paid once, and it is the last time.Also
The README gains a Versioning section stating the promise from here — minors additive, majors carry a migration note — and the rule that keeps drift uninteresting:
So the package ships the logic and keeps perishable data in the environment and in live catalogue fetches. That is what makes being a version behind uninteresting, which is a better property than being always current.
Verify green locally: lint, typecheck, build, 162 tests.
🤖 Generated with Claude Code
https://claude.ai/code/session_01CAfKwM1oUSA9tU9fgdhfdf