Bump the quality kit pin so the board reports a measurement, not a label - #262
Merged
Conversation
The mounted gate was pinned to a kit commit that predates the two rungs that make complexipy report its own denominator. At the old pin the aggregated board printed a bare PASS line, so a vacuous gate and a working gate were indistinguishable, and consumer config could empty the committed complexity floor. The new pin puts the floor out of the gate's own reach and makes a rotted exemption anchor say which way it rotted.
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.
Contract
The mounted quality gate was pinned to a kit commit that predates the two kit rungs that make the aggregated board carry its own denominator. One line changes: the
uses:ref in.github/workflows/quality.yml.World
At the old pin the board printed twelve bare labels and not one denominator, so a vacuous gate and a working gate printed identically. The cleanest measurement of the hazard: setting
[tool.complexipy] exclude = ["**/*.py"]made the gate report clean, printPASS complexipy, and rewrite the committed 21-file complexity floor to[].That was verified on this tree, not assumed. Same worktree, same poisoned config, two kit versions:
86c9e0b5PASS complexipy18ffbaf2FAIL complexipy — measured 0 function(s) in 0 file(s) against a 29-function committed floorAt the new pin the failure is typed
GATE_COMPLEXIPY_MEASURED_NOTHING, and the gate no longer writes the floor it is grading against.On this PR's own CI run the board now prints:
The denominator was cross-checked:
src/holds 142.pyfiles, of which exactly 114 contain adef— the gauge measured every source file that has a function in it.Failure
If the pin does not move, the gate keeps reporting a conclusion instead of an event, and the floor it defends stays writable by the tree it is supposed to be gauging.
Scope
Exactly one line, one file, one commit. No baseline was edited —
complexipy-snapshot.json,exemptions.json,no-bon-ref-exemptions.json,mypy-baseline.txtandpyproject.tomlare all unchanged (the first three proven byte-identical to base by blob SHA). No threshold relaxed, no check deleted, no test weakened.What this change does NOT do — please read before reading the green
complexipygained a denominator. The other eleven lines are still bare labels. That is structural, not cosmetic:gate_runner._structured_verdictrebuilds each subprocess gate's verdict without itsnotices, so everycf-*gate's computed counts are parsed and discarded, while_emit_humanprints notices under the docstring "a PASS must show what it measured".complexipyescapes this only because it is invoked in-process. Filed as a follow-up against the kit, not fixed here.PASSis real but unwitnessed.git/scratch.py:55S105,onboard/server.py:446and:447S101) were verified to still carry theirnoqaon the anchored line. They are reported as a notice while they still cover live code, but they are genuinely rot-graded: a digit anchor routes to_line_anchor_verdict, which raisesEXEMPTION_SUPPRESSION_GONEthe moment the anchor stops covering a live suppression. Any insertion above those lines turns the gate red. Their premise is sound —scratch.py:55is a module-level constant with no enclosing symbol, andserver.py:446/447are twoS101asserts in one method that a symbol anchor would match ambiguously — but they are a standing hazard.Note on reproducibility
github.job_workflow_shacame through empty on this run, so the kit checkout fell back to the kit default branch and the pin-honouring guard reported "already rides the declared pin" — true, but only because this pin currently is kit main's tip. The fetch-and-re-anchor path was therefore not exercised, and until kit main advances past this SHA the behaviour is indistinguishable from floating on kit main.