Skip to content

v0.86 SPELLSCAN (#1515): the statistics scan reads both spellings, and a negative control found a vacuous case in its own self-test - #1530

Closed
avrabe wants to merge 1 commit into
mainfrom
v086-spellscan
Closed

avrabe wants to merge 1 commit into
mainfrom
v086-spellscan

Conversation

@avrabe

@avrabe avrabe commented Oct 14, 2026

Copy link
Copy Markdown
Contributor

v0.86 SPELLSCAN (#1515): the release-file statistics scan reads both spellings, and a negative control found a vacuous case in its own self-test

THE REFUTING COMMAND ran first over every release file in the tree. The digit
scan returns ZERO hits in all 30 files; the word-number scan returns 560 across
29 of them. They disagree in all but one file.

POSITIVE CONTROL, satisfied at the commits where the escaped figure was live:

commit "nineteen" digit-scan survivors
planning 1 0
release prep 1 0
cold review round 1 1 0
cold review round 2 0 0

Three commits where the figure was LIVE and the digit-only check read CLEAN at
every one of them.

TWO CORRECTIONS OF THIS LANE'S OWN INSTRUMENTS, both before any claim:

  1. The first positive control was VACUOUS and reported zero at every commit,
    which would have read as "the figure was never there". Cause: zsh read the
    colon in an unbraced $c:path as a parameter MODIFIER, mangling the
    revision:path argument into an absolute path; a 2>/dev/null hid the git
    error and the count came back 0. An empty positive control is the finding.
    Braced, it fires.

  2. The digit scan's identifier stripper matched only three-component versions,
    so a release file's own title line carrying a two-component version read as a
    digit survivor. Versions and issue refs are IDENTIFIERS, not statistics; the
    shipped pattern accepts both shapes.

THE SCAN IS DELIBERATELY NOT AN ORACLE, as the artifact requires. Most of the 560
hits are idioms; this release's own file carries 5, every one an idiom by hand
classification. A gate that red on a token match would be routed around the day
it landed. So the scan REPORTS and says in as many words that a token match is
not a statistic and the classification is the operator's to record.

THREE NEGATIVE CONTROLS EXECUTED, AND ONE FOUND A VACUOUS CASE IN THIS VERY
SELF-TEST - the release's theme landing on the release's own work. Disabling the
identifier stripper reds two cases; narrowing the identifier pattern reds one.
But narrowing the WORD LIST to drop the escaped figure left the self-test GREEN
at zero failures: the live-figure case asserted the word appeared in the reported
LINE, and that probe line contains ANOTHER number word, so the scan still
matched once and the word was still in the text being inspected. True about the
wrong subject. It now asserts on the TOKENS THE INSTRUMENT MATCHED, exposed for
that purpose, and the control reds.

CI gates the SELF-TEST, not the report - 8 cases, each shown to fail under
removal of its own subject.

Refs #1515

🤖 Generated with Claude Code

https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L

…spellings, and a negative control found a vacuous case in its own self-test

THE REFUTING COMMAND ran first over every release file in the tree. The digit
scan returns ZERO hits in all 30 files; the word-number scan returns 560 across
29 of them. They disagree in all but one file.

POSITIVE CONTROL, satisfied at the commits where the escaped figure was live:

  commit                   "nineteen"   digit-scan survivors
  planning                      1                 0
  release prep                  1                 0
  cold review round 1           1                 0
  cold review round 2           0                 0

Three commits where the figure was LIVE and the digit-only check read CLEAN at
every one of them.

TWO CORRECTIONS OF THIS LANE'S OWN INSTRUMENTS, both before any claim:

1. The first positive control was VACUOUS and reported zero at every commit,
   which would have read as "the figure was never there". Cause: zsh read the
   colon in an unbraced $c:path as a parameter MODIFIER, mangling the
   revision:path argument into an absolute path; a 2>/dev/null hid the git
   error and the count came back 0. An empty positive control is the finding.
   Braced, it fires.

2. The digit scan's identifier stripper matched only three-component versions,
   so a release file's own title line carrying a two-component version read as a
   digit survivor. Versions and issue refs are IDENTIFIERS, not statistics; the
   shipped pattern accepts both shapes.

THE SCAN IS DELIBERATELY NOT AN ORACLE, as the artifact requires. Most of the 560
hits are idioms; this release's own file carries 5, every one an idiom by hand
classification. A gate that red on a token match would be routed around the day
it landed. So the scan REPORTS and says in as many words that a token match is
not a statistic and the classification is the operator's to record.

THREE NEGATIVE CONTROLS EXECUTED, AND ONE FOUND A VACUOUS CASE IN THIS VERY
SELF-TEST - the release's theme landing on the release's own work. Disabling the
identifier stripper reds two cases; narrowing the identifier pattern reds one.
But narrowing the WORD LIST to drop the escaped figure left the self-test GREEN
at zero failures: the live-figure case asserted the word appeared in the reported
LINE, and that probe line contains ANOTHER number word, so the scan still
matched once and the word was still in the text being inspected. True about the
wrong subject. It now asserts on the TOKENS THE INSTRUMENT MATCHED, exposed for
that purpose, and the control reds.

CI gates the SELF-TEST, not the report - 8 cases, each shown to fail under
removal of its own subject.

Refs #1515

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YJK5LZZEkV5smCY1jKn18L
@codecov

codecov Bot commented Oct 14, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

@avrabe

avrabe commented Oct 14, 2026

Copy link
Copy Markdown
Contributor Author

Superseded by #1537, which carries this branch's content in full.

Why: a dependabot auto-merge moved main and put every lane PR behind=1. The merge gate's currency check (rev-list --count head..base must be zero) means merging any one lane PR re-stales the rest, so the six lanes were forced sequential — six rebases and six full CI cycles, with three more auto-merge-enabled dependabot PRs still queued to move main again.

The consolidation was verified by simulation before being chosen: the whole wave applied to a detached worktree off origin/main, the single ci.yml conflict resolved with both steps kept, and gated there at no CI cost — status_evidence 0 failures, claim_check 75/75, verdict_prose clean, and the window anti-vacuity guard untripped.

Nothing was dropped. The artifact records are byte-identical apart from the PR number they name, plus one correction the simulation surfaced: SPELLSCAN now carries issue-scope: outlives, because #1515's own subject is the SELFTEST2 vacuity and that lane is partial.

@avrabe avrabe closed this Oct 14, 2026
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