fix(deps): the hvac cap the comment described was never in the specifier - #125
Merged
Conversation
The [vault] extra read `hvac>=2.3.0` while its own comment said "a bare `>=` would silently jump a major on re-lock, so keep the floor pinned to the 2.x series". A bare `>=` is exactly what it was, so the intent was documented and unenforced — the prose was a compensating control resting on a false premise. That matters more here than for a typical dep: hvac fronts the store DEK (ADR 0019 §3 Vault Transit envelope decryption), and CI never installs the [vault] extra, so a major arriving through a re-lock would reach a release without one test exercising it. `hvac>=2.3.0,<3`. hvac stays at 2.4.0, so this is a no-op for the resolution: `uv lock` moves one specifier line and all SIX exported locks re-export byte-identically (verified with the CI-pinned uv 0.12.0 — requirements.lock, constraints.lock, both docker/locks, both ci/locks). DEP-1 sees no churn. No Dependabot ignore entry to match it, deliberately: auto-merge already routes majors to manual review, and an ignore would suppress hvac's security track for no gain.
wshallwshall
enabled auto-merge (squash)
August 1, 2026 15:18
wshallwshall
added a commit
that referenced
this pull request
Aug 2, 2026
…ly usage) #130 merged (851c849); only #125 outstanding. Records two retractions with corrected forms, including that my pooled W25 table is defective: gh run list truncates to 20 rows, and filtering by JOB conclusion while measuring STEP durations drops the tightest cases. Rule and pool recorded separately so the rule does not inherit the defect.
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.
Two lines of specifier, zero lock churn. Found during the Dependabot audit in #121; split out because
it touches
uv.lockand that PR deliberately touches no lock.The defect
pyproject.tomldeclared the Vault extra ashvac>=2.3.0, directly under a comment reading:A bare
>=is exactly whathvac>=2.3.0is. The 2.x hold was documented and unenforced — prose actingas a compensating control on a false premise, which is the specific failure mode
Secure_Development_Standards§3 warns about.Why it is worth fixing rather than just rewording
hvacfronts the store DEK — ADR 0019 §3, Vault Transit envelope decryption. And CI never installsthe
[vault]extra, so nothing in the matrix would exercise an hvac 3.x arriving through a routinere-lock. It would reach a release unexercised.
Rewording the comment instead was the alternative and I rejected it: any rewording that said "a major
is adjudicated by CI on its own Dependabot PR" would itself be false, for the same
extra-never-installed reason.
The change
hvac>=2.3.0→hvac>=2.3.0,<3, and the comment now describes what the specifier does.Zero resolution impact. hvac stays at 2.4.0, so
uv lockrewrites exactly one specifier line andnothing else moves.
Verification
Run with the CI-pinned
uv==0.12.0, because a different resolver version can re-export differentlyand red the DEP-1 byte-diff for an unrelated reason:
main→ byte-identical, so any diffbelow is attributable to this change and not to local drift.
uv lock→ 1 line inuv.lock. All six exports re-run → byte-identical(
requirements.lock,constraints.lock,docker/locks/requirements-{core,sqlserver}.lock,ci/locks/ci-{scanners,quality}.lock).git diff --exit-codeover the six is clean, so DEP-1 passeswith no churn.
uv lock --check(the drift guard) passes.key provider and the crypto inventory scanner: all pass.
Deliberately not done
No Dependabot
ignoreentry to match this cap — unlike theannotated-types/ruffcaps in #121.Those exist because Dependabot kept widening them and reddening CI. Here, auto-merge already routes
majors to manual review, so the cap is not load-bearing against automation; adding an ignore would
suppress hvac's security track for no gain. If a future Dependabot PR is seen widening this cap, that
judgement should be revisited.
🤖 Generated with Claude Code