Skip to content

gft: the counterpart is the spec, not a path that never existed (Refs #2161) - #2659

Merged
gHashTag merged 1 commit into
masterfrom
w699-exponent-coverage
Aug 24, 2026
Merged

gft: the counterpart is the spec, not a path that never existed (Refs #2161)#2659
gHashTag merged 1 commit into
masterfrom
w699-exponent-coverage

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Closing the sticky finding I wrote, in a merged pull request:

reported, not changed — this mirrors board/bpseq.v, and I have not measured the RTL

git log --all -- board/bpseq.v is empty. That path has never existed in this repository. I repeated a pointer out of the file's own docstring without checking it resolved, and then used it as the reason not to fix a rule I had just shown to be wrong.

A wrong pointer is worse than a missing one. A missing one sends a reader looking; a wrong one makes them stop — and it stopped me at exactly the moment I was deciding whether a defect was real.

What the counterpart actually is

specs/ternary/gft_sadd.t27. Measured this tick:

question answer
does the spec carry the same rule? yes, line for line
how many specs carry a copy? 30 under specs/ternary/
is the arm dead there too? yes — exhaustive over every (hm, lm, d) for six ho
do the two normalisations agree? yes — bit-for-bit over 2,193,075 points

The spec's barrel shift (8/4/2/1, capped) and this file's 12-step loop are different code reaching identical results. So the generated Verilog, C and Rust all carry the same dormant wrong rule.

The bit-exactness suite cannot see this, by construction

verify_multitarget and verify_emit_bitexact prove Verilog, C and Rust agree with the Python model. They prove the compiler faithful to the spec; they can never say the spec is right. A defect written in the spec propagates to every target and the suite stays green — that is the suite working, not failing.

ALL TARGETS BIT-EXACT is a true sentence that reads as "the arithmetic is verified". It is worth exactly what it says.

One narrowness that was fixable

The suite's operands were uniform(-4, 4) — measured, that is off 35..41, six of the format's 81 exponents. A divergence that only appears when operands are decades apart had never been in front of it.

Widened to 16 of 81 across the full range, appending pairs rather than reseeding so the existing 600 stay byte-identical — trading coverage for coverage is not adding it. 1744 pairs, still green, and the negative control confirms it still reddens: 12 mismatches on a mutated model.

I had also guessed the suite was blind to rounding ties. Measured: 20 of 256 pairs land on rem == half. The guess was wrong and the measurement was cheap — the blind spot was one dimension over from where I expected it.

New: tri pointers

The obvious version — check every path-shaped string — was measured first: 873 mentions, 409 unresolved, dominated by paths a program creates and fixture names inside unit tests. A report that is 95% noise gets switched off, and the 5% goes with it.

Narrowing to a prose pointer (see X, cf. X, documented in X): 193 mentions, 16 unresolved — a list a person can read, each row written on purpose. The narrowing was chosen by measuring both, not by taste. Against the pre-fix commit it flags the pointer that occasioned it.

It caught its own docstring

The first run reported the new tool's own docstring, which quoted "see board/bpseq.v" while explaining the bug. Second time in two days that a checker read its own documentation as data.

A special case for the tool's own file would have hidden the same thing in the next document that discusses pointers, so the fix went where it belongs: the docstring no longer spells the path after a cue word, and it says why. Both times the tell was a count one higher than it should have been — not the list.

Refs #2161

…2161)

Closing the sticky finding I cited `board/bpseq.v` as the reason not to
change a rounding rule I had just shown to be wrong. `git log --all` for
that path is empty -- it has never existed in this repository. The
pointer came out of the file's own docstring and I repeated it without
checking it resolved.

The counterpart is `specs/ternary/gft_sadd.t27`. Measured: it carries the
rule line for line, 30 specs carry a copy, the arm is dead there too
(exhaustive over every (hm, lm, d) for six ho), and the spec's barrel
shift agrees with this file's 12-step loop bit-for-bit over 2_193_075
points. The generated Verilog, C and Rust all carry the same dormant rule,
and the bit-exactness gates cannot see it: they prove the compiler
faithful to the spec, never the spec correct.

verify_multitarget's operands were `uniform(-4, 4)` -- off 35..41, six of
81 exponents. Widened to 16 of 81 across the full range by APPENDING
pairs, so the existing 600 stay byte-identical: 1744 pairs, still green;
negative control gives 12 mismatches on a mutated model.

New `tri pointers`: prose pointers ("see X", "cf. X") that do not
resolve. Every path-shaped string was measured first -- 873 mentions, 409
unresolved, mostly paths a program creates -- and discarded as noise. The
narrow form gives 193 and 16. Its first run flagged its own docstring;
the docstring was reworded rather than the tool special-cased.
@github-actions

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-08-24 03:51:48 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 2f3af98 into master Aug 24, 2026
24 of 25 checks passed
@gHashTag
gHashTag deleted the w699-exponent-coverage branch August 24, 2026 04:03
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