docs(readme): one file-type table, not two

`### Binary extraction` carried its own six-row Format/Reader/Evidence table
over the same rows the pinned table now holds. It was true when written and
reachable by exactly the failure this module exists for: three evidence classes
copied into prose no test reads. That section now points at the pinned table
and keeps its prose about the extra.

A fifth assertion in `tests/test_docs_promises.py` holds the duplicate gone.
Known-positive: the same query finds 8 table lines in that section on the
previous commit, so it can go red.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kjell Tore Guttormsen 2026-09-12 21:36:28 +02:00
commit d310dbb34e
3 changed files with 26 additions and 11 deletions

View file

@ -21,9 +21,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
is absent (`.doc`, `.epub`, `.eml`/`.msg`, image files, source files, is absent (`.doc`, `.epub`, `.eml`/`.msg`, image files, source files,
`.one`/`.vsd`) as facts rather than as a queue. Four new assertions in `.one`/`.vsd`) as facts rather than as a queue. Four new assertions in
`tests/test_docs_promises.py` pin the table's row set, its evidence cells and `tests/test_docs_promises.py` pin the table's row set, its evidence cells and
its core/extra split to the registry, and the opening to the table. No change its core/extra split to the registry, and the opening to the table. The
to `extract.py`: nothing about what is read moved, only what the README says six-row Format/Reader/Evidence table that `### Binary extraction` carried is
about it. gone with them: it duplicated three evidence classes in prose no test read,
and that section now points at the pinned table. A fifth assertion holds it
gone -- the same query finds 8 table lines in that section before the change.
No change to `extract.py`: nothing about what is read moved, only what the
README says about it.
## [0.8.5] — 2026-09-12 ## [0.8.5] — 2026-09-12

View file

@ -1057,14 +1057,11 @@ rather than found on `PATH`, with its version asserted against a pin. A host
carrying a different converter is refused, not silently used: extraction is carrying a different converter is refused, not silently used: extraction is
deterministic within a converter version and not across one. deterministic within a converter version and not across one.
| Format | Reader | Evidence | These six rows have their reader and their evidence class in the one table
|---|---|---| this README carries: [Supported file types](#supported-file-types), which is
| `pdf` | `pdfplumber` | measured | pinned to the extraction registry cell by cell. A second table here would be a
| `docx` | converter | measured | copy nothing checks, and a copy of an evidence class is exactly the thing that
| `xlsx` | converter | measured | goes false quietly.
| `pptx` | converter | **constructed** |
| `odt` | converter | **constructed** |
| `rtf` | converter | **constructed** |
**`constructed` means what it says, and it is a weaker word than `measured` **`constructed` means what it says, and it is a weaker word than `measured`
on purpose.** The corpus this work was measured on contains **zero** `pptx`, on purpose.** The corpus this work was measured on contains **zero** `pptx`,

View file

@ -193,3 +193,17 @@ def test_the_readme_opening_does_not_name_five_of_thirteen() -> None:
every = set(_CORE_EXTRACTORS) | set(_OPTIONAL_EXTRACTORS) every = set(_CORE_EXTRACTORS) | set(_OPTIONAL_EXTRACTORS)
named = {s for s in every if re.search(rf"\b{s.lstrip('.')}\b", intro, re.IGNORECASE)} named = {s for s in every if re.search(rf"\b{s.lstrip('.')}\b", intro, re.IGNORECASE)}
assert named == every, f"the opening names {sorted(named)}, not all of {sorted(every)}" assert named == every, f"the opening names {sorted(named)}, not all of {sorted(every)}"
def test_the_readme_carries_only_one_file_type_table() -> None:
"""A second table over the same rows is a copy nothing checks.
`### Binary extraction` carried its own six-row Format/Reader/Evidence
table until 2026-09-12. It was true when written, and it was reachable by
exactly the failure this module exists for: an evidence class copied into
prose that no test reads. Its rows now live in the pinned table alone.
"""
text = README.read_text(encoding="utf-8")
section = text.split("### Binary extraction", 1)[1].split("\n## ", 1)[0]
rows = [line for line in section.splitlines() if line.strip().startswith("|")]
assert not rows, f"a second file-type table is back under Binary extraction: {rows}"