docs: the reach clause was true of U+00AD alone, and the CHANGELOG says so

"0 across `tests/fixtures`, `examples`, `skills`, `docs`, `src`, README and
CHANGELOG" was published for all SIX characters and is false. Counted here
over `git ls-files` in those seven places, with a planted known-positive
proving the scanner can find one:

    TRACKED in the seven places: 257 | readable: 230 | binary: 27
    files carrying ANY of the six: 2
        tests/fixtures/accounting/rejected-inventory.json {'200B': 1}
        tests/fixtures/accounting/rejected/avvist.html    {'200B': 1}
    files carrying U+00AD: 0 []
    KNOWN-POSITIVE planted file: {'00AD': 1, '2060': 1}

The two are this repo's own known-negative fixture for a carrier the door
refuses to remove. For U+00AD -- the character the door actually removes, and
the one the reach argument needs -- the figure is 0 of 230. (PM measured 229
on `43331fc`; the tree has gained one readable tracked file since.)

CHANGELOG under the untagged [0.10.1]: the three now-held sentences, the log's
stated provenance, and both corrected numbers.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-19 08:43:17 +02:00
commit 28f879849c
Signed by: ktg
SSH key fingerprint: SHA256:JakMjO6FTBBzN0Bhfj9saOoEjaFxlSdYuZQQpM/lF9Q
3 changed files with 44 additions and 5 deletions

View file

@ -289,6 +289,32 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
corpus differed — breaking the bit-exact rebuild invariant. Such an image is
now named from its position on the page.
- **Three sentences this release publishes are now held by tests.** PM's
checkpoint on `43331fc` found three mutants surviving the entire suite: a
normalisation door that ALSO removes U+00A0 NBSP — which would have eaten
all 6 633 of them in R761 while `log.md` went on saying "No other character
is touched" — and row 3 of the accounting gate losing either its
`refused={n}` column or its "N element(s) lost with R of D document(s)
refused whole" clause. Each is killed now by a test that counts its own
numbers: ten characters the door must leave exactly where they were
(compared against a filter written in the test, so ORDER is pinned as well
as multiset), and R, D and the element total counted over the units the test
builds.
- **`log.md` says where the soft-hyphen count comes from.** The
`**Normalisation**` bullet now ends "The count is the door's own, read off
the run and not recounted from the source." Chosen over adding a second,
independent counter: the door acts on the EXTRACTED text, so a counter over
the source bytes would disagree by construction on every type extraction
does not carry verbatim, and the gate would have to decide which difference
was a loss.
- **Two published numbers were wrong and are corrected.** N101 ships **568**
`tbx:` tags, not 574 — three independent counts agree (raw substring, regex
over the JSON `tag` field, node traversal), and a test now counts them over
the delivery instead of repeating the number in a fourth docstring. And the
reach clause "0 across `tests/fixtures`, `examples`, …" was true only of
U+00AD: **2 of 230** readable tracked files carry U+200B, this repo's own
known-negative fixture, which the door is built not to touch.
### Documented, not changed
- `images: N` in a concept counts POINTER BLOCKS, not unique pictures (12

View file

@ -1102,8 +1102,13 @@ and fixtures, never code.
line-indexed rule downstream is unmoved by construction. **Reach measured
rather than argued: 0 of the 78** readable documents of the K2 reference
corpus carry any of the six characters, 0 in the pinned bundle's concept
bodies and 0 across `tests/fixtures`, `examples`, `skills`, `docs`, `src`,
README and CHANGELOG -- the door cannot have moved a byte measured here.
bodies, and U+00AD is **0 of the 230** readable tracked files across
`tests/fixtures`, `examples`, `skills`, `docs`, `src`, README and
CHANGELOG -- the door cannot have moved a byte measured here. That last
figure said "0" of ALL SIX until 2026-09-19 and was wrong: **2 of the
230** carry U+200B (`tests/fixtures/accounting/rejected/avvist.html` and
`rejected-inventory.json`), this repo's own known-negative, which the door
is built not to touch.
- **A DOCUMENT REFUSED WHOLE IS NEVER CLEAN, AND A PARTIAL REFUSAL IS NEVER
SILENT (H1, 2026-09-19).** `refused_whole` asked its question only when a
corpus persisted NOTHING, and a refused document's own unit balances by

View file

@ -74,9 +74,17 @@ LOG: * **Normalisation**: 71 soft hyphen(s) (U+00AD) removed from 1 of 1
**Reach, measured rather than argued.** 0 of the **78** readable documents of
the K2 reference corpus carry U+00AD or any of the five other characters (the 8
unreadable ones raise before extraction, so the denominator is 78 of 86); 0 in
the pinned K2 bundle's concept bodies; 0 across `tests/fixtures`, `examples`,
`skills`, `docs`, `src`, README and CHANGELOG. The door cannot have moved a byte
anyone here has measured.
the pinned K2 bundle's concept bodies; U+00AD is 0 of the **230** readable
tracked files across `tests/fixtures`, `examples`, `skills`, `docs`, `src`,
README and CHANGELOG. The door cannot have moved a byte anyone here has
measured.
**Corrected 2026-09-19.** That last clause first read "0 across" for all SIX
characters, and that is false: **2 of the 230** carry U+200B --
`tests/fixtures/accounting/rejected/avvist.html` and its inventory twin, this
repo's own known-negative for a carrier the door refuses to remove. For
U+00AD, the character the door actually removes, the figure is 0, and that is
the one the reach argument needs.
**Known-negative, in the suite.** A source carrying U+200B is still
`fail_secure`, still exits 1, and the character is still in the extracted text.