-
Notifications
You must be signed in to change notification settings - Fork 1
change check cannot fail for anything CI gates on: clippy is missing from the verification command set #708
Copy link
Copy link
Open
Labels
area:ciRemote or local CI gate/workflow mismatchRemote or local CI gate/workflow mismatcharea:test-coverageTests, verification, coverage, or lint coverage gapTests, verification, coverage, or lint coverage gapimpact:developer-experienceAffects authors, maintainers, or local workflowsAffects authors, maintainers, or local workflowsimpact:maintainerPrimarily affects CI, release, or repository operatorsPrimarily affects CI, release, or repository operatorspriority:p1Highest-impact or release-blocking riskHighest-impact or release-blocking riskscope:specsync-6Applies to current SpecSync 6 behavior or release contractApplies to current SpecSync 6 behavior or release contract
Description
Activity
Metadata
Metadata
Assignees
Labels
area:ciRemote or local CI gate/workflow mismatchRemote or local CI gate/workflow mismatcharea:test-coverageTests, verification, coverage, or lint coverage gapTests, verification, coverage, or lint coverage gapimpact:developer-experienceAffects authors, maintainers, or local workflowsAffects authors, maintainers, or local workflowsimpact:maintainerPrimarily affects CI, release, or repository operatorsPrimarily affects CI, release, or repository operatorspriority:p1Highest-impact or release-blocking riskHighest-impact or release-blocking riskscope:specsync-6Applies to current SpecSync 6 behavior or release contractApplies to current SpecSync 6 behavior or release contract
specsync change checkis the local gate that decides a change is verified. It runs the project's configured verification commands. Those commands do not include clippy, but CI does:So a change can be locally
✓ verified, passchange audit --strict, get an independent review, and still be BLOCKED in CI.This is not hypothetical — it happened today
PR #705 went green locally, was pushed, and CI reported the
testjob as failed. Every test passed — 2376 and 406. The failure was a later step in that job:manual implementation of Option::map. Two costs, and the second is worse:Why it matters more than convenience
The lifecycle's claim is that
verifiedmeans something. A local gate that cannot fail for a condition the remote gate blocks on makesverifiedweaker than it reads — the same class of problem as #698 (a requirement describing a gate the code does not have) and #694 (a check that cannot fail).It also silently shifts the work: the author believes verification covered the change, and CI becomes the first place the truth appears.
What it needs
Add
cargo clippy -- -D warningsto the verification commands sochange checkfails where CI would.Two things to get right, neither optional:
cargo clippy, NOT--all-targets. The--all-targetsform currently has 21 pre-existing failures insrc/validator.rstest code, so adding that form would make every change unverifiable. This distinction has already cost time once.clippysatisfies.Worth checking at the same time whether any other CI gate is absent from the local set.
fmt --checkappears to be in the same position.Found during the independent review of #705, which noted: "This is exactly the hole that produced commit 2bd9795; the local gate still cannot catch it."