tri gates mutate: show the boundary survivors, do not rate them (Refs #2161) - #2634
Merged
Conversation
#2630 established that the boundary column's denominator holds two populations -- comparisons that decide a verdict, and loop bounds and display cutoffs that cannot -- and that no line-local filter separates them, because a kill is the only proof of verdict-reachability and the filter removed proven kills. That leaves the column unreadable rather than wrong. `SURVIVED at boundary lines 45, 91, 214, 223, 226, 409` gives a reader nothing to act on. Two changes, neither touching the measurement. Print the source beside the line number, for this operator only: 91 `if len(out) > 6:` a display cutoff 214 `while len(v) < N:` a loop bound 226 `while j < len(src):` a scan bound 223 `if b < 0:` the only one worth reading Five of six classify themselves at a glance. The reader does the separation the tool cannot, in seconds rather than by opening the file. And say what the denominator is, in the summary, only when this operator ran -- so killed/total is not read as a rate. The rule: when a metric mixes populations you cannot separate, do not report a ratio; report the members. A rate over a mixed denominator invites exactly the conclusion this command exists to prevent, and invites it most from whoever computed it. The killed count keeps its meaning: a LOWER BOUND, established after the fact, on how many comparisons reach a verdict. Smaller than a percentage, and true. 194 tests pass. Refs #2161
Contributor
PR DashboardGenerated at: 2026-08-23 23:56:50 UTC
Summary
Seal Status
|
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
gHashTag
added a commit
that referenced
this pull request
Aug 24, 2026
* gft encoder: pin the smallest normal binade `if off < 0: return 0` survived the boundary operator. Printing the source beside the line number (#2634, yesterday) showed it is not a loop bound. `off = e + 40` is ZERO in the smallest normal binade, [2^-40, 2^-39). With `<=`, every value there encodes as 0 -- which is the ZERO SENTINEL. A non-zero magnitude silently reported as zero, in the encoder every trained weight passes through. The exact power 2^-40 is NOT a witness: its mantissa is 0, so it already encodes as 0 and the mutant changes nothing there. A witness needs a non-zero mantissa in that binade, so the pin is 1.5*2^-40, which encodes 256 and would become 0. Three assertions: the magnitude, the sign, and the value one binade below which IS legitimately zero. Negative control: with `<=` planted the tool exits 1 on the new assertion naming it; restored, 0. Nothing else in this file reaches that binade -- every value the training self-tests encode sits many binades higher, which is why the mutant lived. This also corrects a generalization I made yesterday. Of the four `if x < 0:` sites across the tools, only the `find()` idiom in verify_igla_race is equivalent (find returns -1 or an index, and every caller passes a match start whose first character is a keyword). The other three -- this one, `d < 0` in _magsub, and `end < 0` after rfind in diffbin -- are real boundaries where 0 is a valid value. "Boundary survivors are loop bounds" was too broad. Refs #2161 * skill: a surviving boundary was real, and the boundary value was not its witness (Refs #2161)
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.
#2630 established that the boundary column's denominator holds two populations — comparisons that decide a verdict, and loop bounds and display cutoffs that cannot — and that no line-local filter separates them, because a kill is the only proof of verdict-reachability and the filter removed proven kills.
That leaves the column unreadable rather than wrong.
SURVIVED at boundary lines 45, 91, 214, 223, 226, 409gives a reader nothing to act on.Two changes, neither touching the measurement
Print the source beside the line number, for this operator only:
Five of six classify themselves at a glance. The reader does the separation the tool cannot, in seconds rather than by opening the file.
Say what the denominator is, in the summary, only when this operator ran — so
killed/totalis not read as a rate.The rule
When a metric mixes populations you cannot separate, do not report a ratio — report the members. A rate over a mixed denominator invites exactly the conclusion this command exists to prevent, and invites it most from whoever computed it.
The killed count keeps its meaning either way: a lower bound, established after the fact, on how many comparisons reach a verdict. Smaller than a percentage, and true.
194 tests pass. §109.
Refs #2161