Skip to content

tri gates mutate: show the boundary survivors, do not rate them (Refs #2161) - #2634

Merged
gHashTag merged 1 commit into
masterfrom
feat/boundary-two-populations
Aug 24, 2026
Merged

tri gates mutate: show the boundary survivors, do not rate them (Refs #2161)#2634
gHashTag merged 1 commit into
masterfrom
feat/boundary-two-populations

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

#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.

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 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

#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
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-23 23:56:50 UTC

Summary

Status Count
Total Open PRs 2
PRs with Failing Checks 1
PRs with All Checks Green 1
READY 0
FAILING 1
PENDING 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=e6333575ec10 != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@gHashTag
gHashTag merged commit 14ad2f1 into master Aug 24, 2026
32 of 33 checks passed
@gHashTag
gHashTag deleted the feat/boundary-two-populations branch August 24, 2026 00:08
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)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant