Skip to content

tri gates mutate: give the boundary operator a flag (Refs #2161) - #2612

Merged
gHashTag merged 1 commit into
masterfrom
feat/mutate-boundary-flag
Aug 23, 2026
Merged

tri gates mutate: give the boundary operator a flag (Refs #2161)#2612
gHashTag merged 1 commit into
masterfrom
feat/mutate-boundary-flag

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Recomputed the full five-operator table with the repaired cache:

operator killed sites rate
silent 47 52 90%
loud 28 32 88%
invert 72 78 92%
boundary 26 77 34%
assert 2 16 12%
total 175 255 69% — 80 survivors

Previously 157/244 with 87. The verdict-reaching operators sit near 90%; the whole weakness is two columns, and 40 of the 80 survivors are in one file.

Reading the survivors changes what they mean

invert_sites keeps only conditions whose body carries a verdict — hence 92%. boundary_sites mutates every comparison, and its survivors are while len(v) < N, if len(out) > 6, while j < len(src): loop bounds and display cutoffs. Moving those cannot make a gate stop failing. A 34% rate over sites that reach no verdict is a finding about the operator, not about the gates.

The assert survivors are thresholds with margin: floor int(0.9*60) = 54, measured 58 56 59 59 55 55. Two sit one point above the line — so the threshold is doing real work, and the boundary operator survives because 55 satisfies both >= 54 and > 54.

"Survivor" means "defect" for the return operators and does not for the other two, and this campaign had been reading one number across all five.

The flag

--loud, --invert and --assert each select one operator. Boundary was reachable only through --all. The one operator you cannot iterate on alone was the one with the worst rate — and no measurement would have found that, because the gap was in the argument parser, where none of these instruments look. It surfaced when the CLI refused a single-column run.

Added, with a test that every operator has a flag and that a misspelling is refused. The negative control earned its place at once: my first version built the wrong argv and reported every flag unaccepted, including three that worked. --loud failing was the tell that the harness was wrong rather than the parser.

Restricting boundary_sites to verdict-bearing comparisons is the fix for the 34%, and deserves its own measurement rather than being folded into the tick that found it.

193 tests pass.

Refs #2161

Recomputed the full five-operator table with the repaired cache:

  silent    47/52   90%
  loud      28/32   88%
  invert    72/78   92%
  boundary  26/77   34%
  assert     2/16   12%
  total    175/255  69%   80 survivors

Previously 157/244 with 87. The verdict-reaching operators sit near
90%; the whole weakness is two columns, and 40 of the 80 survivors are
in one file.

READING the survivors changes what they mean. `invert_sites` keeps only
conditions whose body carries a verdict -- hence 92%. `boundary_sites`
mutates EVERY comparison, and its survivors are `while len(v) < N`,
`if len(out) > 6`, `while j < len(src)`: loop bounds and display
cutoffs. Moving those cannot make a gate stop failing, so they were
never the question. A 34% rate over sites that reach no verdict is a
finding about the operator, not about the gates.

The assert survivors are thresholds with margin: floor 54, measured 58
56 59 59 55 55. Two sit ONE point above the line, so the threshold is
doing real work and the boundary operator survives because 55 satisfies
both `>= 54` and `> 54`.

So: "survivor" means "defect" for the return operators and does not for
the other two, and this campaign had been reading one number across all
five.

The flag. `--loud`, `--invert` and `--assert` each select one operator;
boundary was reachable only through `--all`, which runs all five over
every gate. The one operator you cannot iterate on alone was the one
with the worst rate. No measurement would have found that -- the gap
was in the argument parser, where none of these instruments look. It
surfaced because the CLI refused a single-column run.

Added, with a test that every operator has a flag and that a
misspelling is refused. The negative control earned its place at once:
my first version built the wrong argv and reported every flag
unaccepted, including three that worked, and `--loud` failing was the
tell that the harness was wrong rather than the parser.

Restricting boundary_sites to verdict-bearing comparisons is the fix
for the 34%, and it is a change to the instrument that deserves its own
measurement rather than being folded into the tick that found it.

Refs #2161
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-23 21:40:32 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 422bf7f into master Aug 23, 2026
31 of 32 checks passed
@gHashTag
gHashTag deleted the feat/mutate-boundary-flag branch August 23, 2026 21:48
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