test(accounting): the witnesses see what the formats actually hold (M-1..M-3)
Rows 2 and 3 require the build's inventory to EQUAL the witness's, so what the witness does not count, nothing can lose visibly. An independent review put a header and a comment in a docx, measured 0 of either in the bundle, and the accounting still read "2 of 2 carried". Thirteen classes are now counted, each with a red test written first: docx header/footer, comment, endnote and text box (a box's paragraphs are its own, or the text is booked twice) - pptx speaker note and hidden slide (`show="0"`, no longer counted as an ordinary slide) - xlsx formula and hidden sheet (the state lives in `workbook.xml` and is reached through the relationship id, so the sheet part itself says nothing about it) - odt header/footer from `styles.xml` and annotation (counted as prose, it made the accounting demand a reader carry a note the author wrote to themselves) - STS `mixed-citation`, `mml:math`, `fig` and its caption, measured by the review at 4.1 % of N200's source text and 3.9 % of N100's. M-2: the two STS witnesses had ONE role map between them, so row 5 -- "two witnesses agree" -- could not see a hole in it. `_sts_role_xml` and `_sts_role_json` are written apart, each for its own delivery, and a test holds them apart. M-3: 20 of 63 element types had a count of ZERO in their only fixture. Seven hand-built documents close it, every element type now occurs at least once (a test asserts it), and ALL TWENTY documents carry a hand count read off the fixture's own bytes (four did before). `.xlsx image` -- the operator's own proposed exception -- could not be exercised at all until now. Every witness also states WHAT IT STILL DOES NOT COUNT, per file type, and the gate prints that list on every run. THE FIXTURE ROWS ARE RED NOW, AND THAT IS THE POINT. Row 2 red on .docx, .odt, .pptx, .xlsx and .xml; row 3 at u = 25, d = 2 over the new classes, including a footnote and four spreadsheet cells the build genuinely drops. `0 claimed and not found` on the same run: nothing the build DOES book as carried failed the bundle check, so the red is the build's and not the instrument's. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
parent
656cbe5d02
commit
e5dc21ec2f
14 changed files with 1542 additions and 59 deletions
33
tests/fixtures/README.md
vendored
33
tests/fixtures/README.md
vendored
|
|
@ -194,6 +194,39 @@ python3 tools/okf_witness.py tests/fixtures/accounting/corpus > tests/fixtures/a
|
|||
python3 tools/okf_witness.py tests/fixtures/accounting/rejected > tests/fixtures/accounting/rejected-inventory.json
|
||||
```
|
||||
|
||||
Seven more documents were added 2026-09-18, one per format that had element
|
||||
types it could never exercise. An independent review measured **20 of 63
|
||||
element types with a count of ZERO in their only fixture**, which is why six of
|
||||
seven witness mutants survived the suite: a witness cannot be caught being
|
||||
wrong about something it never sees. They are written part by part by
|
||||
`make_accounting_fixtures.py` in this directory, for the same reason the XML
|
||||
fixtures are hand-written:
|
||||
|
||||
```
|
||||
python3 tests/fixtures/accounting/make_accounting_fixtures.py
|
||||
```
|
||||
|
||||
| Fixture | What it carries that nothing else did |
|
||||
|---|---|
|
||||
| `topptekst-og-kommentar.docx` | A header, a footer, a comment, an endnote and a **text box** -- and a footnote, a table and a heading, three types the only other docx has at 0. The header says "Utkast - gjelder ikke etter 2026-01-01" and the comment says the requirement does NOT apply in tunnels: two statements that reverse the document's meaning and that the build carries none of. |
|
||||
| `notater-og-skjult.pptx` | A **speaker note** and a **hidden slide** (`show="0"`), plus a table and paragraphs. A hidden slide counted as an ordinary one is indistinguishable from one that is shown. |
|
||||
| `skjult-ark-og-formel.xlsx` | A **hidden sheet**, a **formula** (`<f>B2*2</f>`) and a **picture**. The picture is what makes the operator's `.xlsx image` exception exercisable at all: the old fixture had none. |
|
||||
| `liste-og-bilde.odt` | A **header and footer** (they live in `styles.xml`, so a reader of `content.xml` cannot see them), an **annotation**, a list and a picture. |
|
||||
| `bilde.rtf` | A `\pict` picture: the rtf witness's image count was 0 in its only fixture. |
|
||||
| `figur.html` | A picture and a table under `.html`; `side.htm` gained one too, so `.htm` and `.html` each exercise `image`. |
|
||||
| `sts-rikt.xml` | A **`mixed-citation`**, an **`mml:math`**, a **`fig` with a caption**, a table with a label, cells, a list item and a footnote -- six STS roles the R761 delivery does not contain at all, which is why the gate's only real corpus could not see the hole in the role map. |
|
||||
|
||||
### The hand counts
|
||||
|
||||
Row 1's fasit is the witness's own output, so a hand count is the only number
|
||||
in this loop the witness did not produce. Four of thirteen documents had one;
|
||||
**all twenty have one now**, in `HAND_COUNTS` in
|
||||
`tests/test_accounting_gate.py`, and `test_the_hand_counts_cover_every_document_of_the_corpus`
|
||||
fails if a document is added without one. Each was counted by reading the
|
||||
fixture's own bytes -- the XML parts of a zip, the control words of the rtf,
|
||||
the objects of the PDF -- never by running the witness and writing down what
|
||||
it said.
|
||||
|
||||
`witness/prosess-84-sts.twin.json` is the STS document written by hand in the
|
||||
publisher's JSON node form (`standardContent`, nodes with `e`/`t`/`x`), so the
|
||||
two STS witnesses can be compared on a fixture as well as on R761. Eight of
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue