fix(deps): raise the crucible floor to 0.6.0, and guard the floor itself - #19
Merged
Conversation
--arl0-years builds Thresholds(monitor_arl0_years=...), added in crucible 0.6.0, but it merged while the pin still read crucible>=0.5.0. 0.5.0's Thresholds has no such field, so a fresh `pip install crucible-stack` could resolve a crucible that raises TypeError the first time anyone passes the flag. It resolves, it installs, and it fails at the call site. Nothing caught it, and nothing could have. A floor is only ever exercised by the version you do NOT have, and every checkout in this workspace already ran 0.6.0. The existing compat tests run against whatever is installed, which is normally the newest thing, so they confirm the API exists without saying anything about the oldest version the pin still admits. So this adds a test that reads the declared floor out of pyproject.toml and compares it against a constant naming the newest crucible feature the package touches. Verified it actually fires: reverting the pin to 0.5.0 fails it. A guard that cannot fail is the thing this whole class of bug is made of. Also adds a compat check for Thresholds.monitor_arl0_years in the existing style, so the failure names its own cause rather than surfacing as a TypeError from a dataclass constructor, and corrects a stale comment that still warned the 0.5.0 constraint was aspirational. 407 tests pass, ruff clean. Co-Authored-By: Claude Opus 5 <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.
--arl0-yearsbuildsThresholds(monitor_arl0_years=...), added in crucible 0.6.0, but it merged while the pin still readcrucible>=0.5.0. 0.5.0'sThresholdshas no such field, so a freshpip install crucible-stackcould resolve a crucible that raisesTypeErrorthe first time anyone passes the flag. It resolves, it installs, and it fails at the call site.Why nothing caught it
Nothing could have. A floor is only ever exercised by the version you do NOT have, and every checkout in this workspace already runs 0.6.0. The existing compat tests run against whatever is installed, which is normally the newest thing, so they confirm the API exists while saying nothing about the oldest version the pin still admits.
What this adds
A test that reads the declared floor out of
pyproject.tomland compares it against a constant naming the newest crucible feature the package touches. Verified it actually fires — reverting the pin to 0.5.0 fails it. A guard that cannot fail is what this whole class of bug is made of.Also a compat check for
Thresholds.monitor_arl0_yearsin the existing style, so the failure names its own cause rather than surfacing as aTypeErrorfrom a dataclass constructor, and a correction to a stale comment that still warned the 0.5.0 constraint was aspirational.407 tests pass, ruff clean.
🤖 Generated with Claude Code