Skip to content

fix(research): the paper's own verifier ran nowhere and finished nowhere - #728

Open
gHashTag wants to merge 1 commit into
mainfrom
fix/paper-verifier-runs-and-finishes
Open

fix(research): the paper's own verifier ran nowhere and finished nowhere#728
gHashTag wants to merge 1 commit into
mainfrom
fix/paper-verifier-runs-and-finishes

Conversation

@gHashTag

Copy link
Copy Markdown
Owner

Two ways to not be verified

research/arxiv_tnf/verify_numbers.py re-derives every headline number in the TNF
paper from the committed records. Its docstring states the purpose plainly — "so
somebody else can refute the numbers". Neither half of that was true.

Collected by nothing. The ratchet globs three role-named prefixes in research/
plus research/block/. This file is named verify_*, matching the convention, but
lives in research/arxiv_tnf/ — one directory down, outside every glob. grep -rn verify_numbers .github/workflows/ returns nothing; paper-numbers.yml runs a
different script (tools/check_paper_numbers.py). So no automation has ever
executed it, which is why nobody noticed the second defect.

A gate left out by where it happens to sit is the implicit exclusion that
gate_status_ratchet.py's own docstring refuses to have — SKIP_BLOCK_PREFIX
exists specifically so that omitting a gate is auditable.

Finished nowhere. confirm_w990.json has no die_reads_canonical field, so
line 963 raised KeyError and the run stopped there — taking the whole W991
competitor block with it. Those 27 checks had never executed. Before: 506 checks
and a traceback. After: 533 agree, 3 diverge, 0 blocks skipped.

A missing field is now a divergence, deliberately not routed through check()'s
got is None branch — that path increments neither counter and leaves the exit
code at zero, so an absent measurement would read exactly like a satisfied one.

The three divergences, which are left standing

All three are the same fact: W990's dot4 confirmation sweep was still running when
the record was written, and the script encodes the intended finished state.

check record script cites
dot4: подтверждено размещений placements_done: 1 2
dot4: обе площадки различны 1 distinct site 2
чтения канонизированы field absent 6 entries

Either the sweep finishes at two placements, or the citation drops to one. That is
a call for whoever owns W990 — adjusting the expected values here to match the
records would be moving the ruler to fit the board.

For contrast, gft_signed_mac is genuinely done: 4 placements, 3 distinct BSCAN
sites, identical word 0xa5a5337f in every build. dot4 sits at 1 and 1.

Baseline

One line added: verify_numbers.py: findings. That is what it measures today, not
an endorsement of the three divergences — the ratchet's contract is may-improve,
may-not-degrade.

--update was deliberately not run: it re-executes all 89 gates on whichever
machine invokes it and writes those answers over CI's. Six gates in this baseline
are TIMEOUT at 120 s on a two-core runner and are not TIMEOUT here; rewriting the
file from a ten-core laptop would silently record a fleet of green that CI cannot
reproduce. Half this repository's audits exist because of exactly that failure.

`research/arxiv_tnf/verify_numbers.py` re-derives every headline number in the
TNF paper from the committed records. Its own docstring says why it exists:
"so somebody else can refute the numbers". Two defects meant nobody could.

**It was collected by nothing.** The ratchet globs `research/audit_*.py`,
`research/witness_*.py`, `research/verify_*.py` and `research/block/*.py`. This
file is named for one of those three roles but sits one directory down, in
`research/arxiv_tnf/`, so the glob never saw it. Neither did gate-ratchet.yml
nor paper-numbers.yml, which runs a different script. A gate excluded by where
it happens to live is precisely the implicit exclusion `gate_status_ratchet.py`'s
docstring refuses to have -- SKIP_BLOCK_PREFIX exists so that leaving a gate out
is auditable. Discovery now includes `research/arxiv_tnf/verify_*.py`.

**It died before the end.** `confirm_w990.json` carries no `die_reads_canonical`
field, so the script raised KeyError at line 963 and stopped -- taking the entire
W991 competitor block with it. Those 27 checks had never run at all. Verifying
506 of 533 numbers and exiting on a traceback is not a partial pass; it is a
verification whose scope nobody knows.

A missing field is now reported as a divergence. It is deliberately not routed
through `check()`'s `got is None` branch: that path increments neither counter
and leaves the exit code at zero, so an absent measurement would read exactly
like a satisfied one.

The script now completes: **533 agree, 3 diverge, 0 blocks skipped**.

All three divergences say one thing -- W990's dot4 confirmation sweep was still
running when the record was written, and the script encodes the intended finish:

  * `dot4: подтверждено размещений` -- record says 1, script cites 2
  * `dot4: обе площадки различны` -- record has 1 distinct site, script cites 2
  * `чтения канонизированы` -- `die_reads_canonical` is absent from the record

Either the sweep finishes at two placements or the citation drops to one. That
is a call for whoever owns W990, not a number to quietly adjust here.

The baseline records this gate as `findings`, which is what it measures today
and not an endorsement of the three. Only that one line was added: `--update`
would re-run all 89 gates on this machine and write my environment's answers
over CI's, which is the failure mode half this repository's audits exist for.
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