Skip to content

tools: pin the corpus figures with their instrument - #3506

Merged
gHashTag merged 1 commit into
masterfrom
c/corpus-figures
Sep 8, 2026
Merged

gHashTag merged 1 commit into
masterfrom
c/corpus-figures

Conversation

@gHashTag

@gHashTag gHashTag commented Sep 8, 2026

Copy link
Copy Markdown
Owner

tools: pin the corpus figures with their instrument

Closes #3505

published_figures.py pins the spec-side populations. This pins the
other side, and it is the side both of that audit's unit conflations
came from: len(x) was published as 142 -- a DIAGNOSTIC count in the
generated C -- inside a sentence about the specs, and pub const OP_*
as 20, a count of list SITES rather than of declarations.

IT REFUSES TO COMPARE ACROSS INSTRUMENTS. The same command gives 20
diagnostics on Apple clang and 50 on ubuntu's gcc for the same input
(#3450), and 141 corpus files hit clang's default cap, which made every
total measured without the uncap flag a floor (#3448). The pin records
the compiler that produced it and --check exits 3, CANNOT TELL, rather
than reporting a machine difference as a drift.

positive control 1: the pin's instrument line set to a gcc string
-> exit 3, "CANNOT TELL"
positive control 2: a wrong value under the same instrument
-> exit 1, and the row is named

EVERY ROW CARRIES ITS UNIT -- units, errors, lines -- and each class is
pinned by BOTH its diagnostic count and its distinct-line count, because
the ratio between them is what says whether a population is real or
partly a cascade:

expected expression 750 errors / 668 lines
cannot use '__auto_type' 385 / 385
use of undeclared identifier 'POS' 412 / 314
use of undeclared identifier 'NEG' 319 / 242
call to undeclared function 'len' 142 / 142
redefinition of 66 / 66
incompatible int-to-pointer 6 / 6

specs seen 651, generating 582, compiling clean 309, errors 10 802

AND THE READER WAS ONE COMMAND FROM PINNING A COLUMN THAT MEASURED
NOTHING. The first version keyed distinct lines on the diagnostic's byte
offset in the output, so every diagnostic received its own key and the
lines column came out EXACTLY EQUAL to errors on every row --
750/750, 385/385, 412/412. A column that always equals its neighbour
measures nothing, and it was one --bless from being recorded as a
fact. The line number is captured from the diagnostic now, and the
self-check asserts the case that distinguishes them: two errors on one
line must count as two errors and ONE line.

A reader with a pin, not a fast gate: it rebuilds the corpus, which is
minutes. Not wired into Spec Guards for that reason.

🤖 Generated with Claude Code

Closes #3505

`published_figures.py` pins the spec-side populations. This pins the
other side, and it is the side both of that audit's unit conflations
came from: `len(x)` was published as 142 -- a DIAGNOSTIC count in the
generated C -- inside a sentence about the specs, and `pub const OP_*`
as 20, a count of list SITES rather than of declarations.

IT REFUSES TO COMPARE ACROSS INSTRUMENTS. The same command gives 20
diagnostics on Apple clang and 50 on ubuntu's gcc for the same input
(#3450), and 141 corpus files hit clang's default cap, which made every
total measured without the uncap flag a floor (#3448). The pin records
the compiler that produced it and `--check` exits 3, CANNOT TELL, rather
than reporting a machine difference as a drift.

  positive control 1: the pin's instrument line set to a gcc string
                      -> exit 3, "CANNOT TELL"
  positive control 2: a wrong value under the same instrument
                      -> exit 1, and the row is named

EVERY ROW CARRIES ITS UNIT -- units, errors, lines -- and each class is
pinned by BOTH its diagnostic count and its distinct-line count, because
the ratio between them is what says whether a population is real or
partly a cascade:

  expected expression                750 errors / 668 lines
  cannot use '__auto_type'           385 / 385
  use of undeclared identifier 'POS' 412 / 314
  use of undeclared identifier 'NEG' 319 / 242
  call to undeclared function 'len'  142 / 142
  redefinition of                     66 / 66
  incompatible int-to-pointer          6 / 6

  specs seen 651, generating 582, compiling clean 309, errors 10 802

AND THE READER WAS ONE COMMAND FROM PINNING A COLUMN THAT MEASURED
NOTHING. The first version keyed distinct lines on the diagnostic's byte
offset in the output, so every diagnostic received its own key and the
`lines` column came out EXACTLY EQUAL to `errors` on every row --
750/750, 385/385, 412/412. A column that always equals its neighbour
measures nothing, and it was one `--bless` from being recorded as a
fact. The line number is captured from the diagnostic now, and the
self-check asserts the case that distinguishes them: two errors on one
line must count as two errors and ONE line.

A reader with a pin, not a fast gate: it rebuilds the corpus, which is
minutes. Not wired into Spec Guards for that reason.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@gHashTag
gHashTag enabled auto-merge (squash) September 8, 2026 14:49
@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

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

@github-actions

github-actions Bot commented Sep 8, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-09-08 14:49:17 UTC

Summary

Status Count
Total Open PRs 16
PRs with Failing Checks 14
PRs with All Checks Green 2
READY 2
FAILING 14
PENDING 0
NO CHECKS YET 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=d4c5b22b471e != 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).

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.

tools: pin the corpus figures with their instrument, and refuse to compare across compilers

1 participant