From 4fb966cd189ed5590675a4110a6122e4dc1a0dc8 Mon Sep 17 00:00:00 2001 From: tannevaled Date: Sun, 11 Oct 2026 10:44:31 +0200 Subject: [PATCH] Three refusals became verbs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit divide-pages, remove-blank-pages and repair-pdf are claimed. Each of the first two was written down in this table as "not covered" WITH ITS REASON, and each time the reason turned out to be the specification: - divide-pages said "Poster MAGNIFIES; divide-pages cuts a page into halves that stay half-size". go-pdfkit/ops v0.13.0 has Divide. - remove-blank-pages said "it needs a blank DETECTOR over rendered pixels, and a detector is a measurement, not a wiring job". It is one now, and the measurement moved the default resolution from 50 DPI to 150: at 50 an eight-point full stop covers exactly ONE pixel, which is the mark a speck of dust makes, so no threshold there can tell punctuation from dirt. That is three in two days, counting duplex-collate. ⛔ Writing down WHY a thing cannot be claimed is what got all three built — an argument for the practice and not just for the entries. repair-pdf is reader's repair, given a name. The claim is the VERB and not reader's symbol, because the repair itself was always there and silent: every ops verb has been repairing files for as long as reader has, and a claim on the symbol would have been true and useless. What this table can now show is a tool that SAYS so and keeps the result. ⛔ compare-pdfs is NOT claimed, and the reason is kept. conformance/compare already renders two pages, reduces both to grey, blurs them and counts the pixels that differ — which is the measurement that tool needs. But it compares OUR drawing against poppler's, to judge us; it needs poppler installed, and it pairs page i with page i rather than "intelligently". A claim on it would be a claim that we can diff two files a caller brings, and we cannot. Pasted from the tool's own output: covered 76 not covered 38 parity 66.7% (76/114), every claim verified Measured 2026-10-11 against BentoPDF 3a5f146 (v2.8.8, 114 tools), pdfops and ops at a376bb2 (= v0.13.0), odf 3d1deee (= v0.7.0), convert 45fbb5d (= v0.4.0 + x/net), render 3bb5dcf, app 1feda5d, rtf 6bc4897, markdown eafebfd, data 128b6c7. Co-Authored-By: Claude Opus 5 --- README.md | 6 +++--- parity/table.go | 42 +++++++++++++++++++++++++++++++++--------- 2 files changed, 36 insertions(+), 12 deletions(-) diff --git a/README.md b/README.md index 2f04120..a25e6a6 100644 --- a/README.md +++ b/README.md @@ -766,9 +766,9 @@ bentoparity -tools ~/src/bentopdf/docs/tools -pdfops ./pdfops -src ~/src/go-pdfk ``` ``` -covered 73 -not covered 41 -parity 64.0% (73/114), every claim verified +covered 76 +not covered 38 +parity 66.7% (76/114), every claim verified ``` ⛔ **It refuses to report a figure if a single claim cannot be checked.** A diff --git a/parity/table.go b/parity/table.go index 2dc8370..b04dbbc 100644 --- a/parity/table.go +++ b/parity/table.go @@ -143,14 +143,38 @@ var BentoPDF = []Claim{ // verb, so the claim asks the binary. {Tool: "duplex-collate", Claim: "verb:duplex"}, - // ⛔ TWO that look close and are not, each for a different reason. They - // are written down because "not covered" with no reason invites the next - // person to re-derive the same wrong claim: + // ⛔⛔ THREE REFUSALS BECAME VERBS. Each of these was written down here as + // "not covered", with the reason — and each time the reason turned out to + // be the SPECIFICATION. Writing down why a thing cannot be claimed is what + // got all three built, which is an argument for the practice and not just + // for the entries: // - // - divide-pages. Poster(across, down) divides a page into a grid, but - // "every sheet is the size of the page it came from" — it MAGNIFIES. - // divide-pages cuts a page into halves that stay half-size. Same - // grid, different output, and only the commit message says so. - // - remove-blank-pages. It needs a blank DETECTOR over rendered pixels, - // and a detector is a measurement, not a wiring job. + // - divide-pages said "Poster MAGNIFIES; divide-pages cuts a page into + // halves that stay half-size". go-pdfkit/ops v0.13.0 has Divide. + // - remove-blank-pages said "it needs a blank DETECTOR over rendered + // pixels, and a detector is a measurement, not a wiring job". It is + // now one, and the measurement moved the default resolution from 50 + // DPI to 150: at 50 an eight-point full stop covers exactly ONE pixel, + // which is the mark a speck of dust makes. + // - duplex-collate said "no single entry point does the job". It has one. + {Tool: "divide-pages", Claim: "verb:divide"}, + {Tool: "remove-blank-pages", Claim: "verb:deblank"}, + + // repair-pdf is reader's repair, given a name. ⛔ The claim is the VERB + // and not reader's symbol, because the repair itself was always there and + // silent: every ops verb has been repairing files for as long as reader + // has, and a claim on the symbol would have been true and useless. What + // this table can now show is a tool that SAYS so and keeps the result. + {Tool: "repair-pdf", Claim: "verb:repair"}, + + // ⛔ ONE that looks close and is not, kept with its reason so that "not + // covered" does not invite the next person to re-derive it: + // + // - compare-pdfs. conformance/compare already renders two pages, reduces + // both to grey, blurs them and counts the pixels that differ — which + // is the measurement this tool needs. But it compares OUR drawing + // against poppler's, to judge us; it needs poppler installed, and it + // pairs page i with page i rather than "intelligently". A claim on it + // would be a claim that we can diff two files a caller brings, and we + // cannot. Generalising it is real work, not a table entry. }