01 — État des lieux (mesuré, 2026-09-14, HEAD 782f231)
1. Ce qui existe et est prouvé
| Mesure | Valeur |
|---|---|
Crates sur Kellnr (chaque .crate retéléchargé et comparé octet à octet) |
16 : apdf 0.1.0 (façade), apdf-cli 0.1.0, apdf-object 0.2.0, apdf-parse 0.2.0, apdf-filter 0.1.1, apdf-crypt 0.2.0, apdf-font/-write/-layout/-doc/-content/-conform/-render/-sign 0.1.0, apdf-fonts-std14 0.1.1, apdf-icc-profiles 0.1.1 |
Registre de couverture ISO 32000-2 (docs/COUVERTURE-ISO32000.toml) |
293 lignes : 252 implémentées, 30 partielles, 11 hors périmètre ; aucune ligne à verified = false — chaque clause relue dans le texte sponsorisé ISO 32000-2:2020 EC3, 21 numéros de clause corrigés |
| Porte de preuve | cargo xtask prove all --include-ignored : 1 295 tests, 1 295 prouvés, 0 SKIPPED, sans variable d'environnement (le corpus se résout par défaut sur tests/corpus), depuis un worktree propre, ≈3 h à opt-level 3 |
| Preuve de consommation | projet neuf ~/apdf-smoke sur big-1 : apdf = { registry = "kellnr" } seul, zéro path, 172 paquets résolus depuis Kellnr ; ouvre, extrait (= pdftotext), rend, valide le PDF/A (règles = veraPDF) |
Textes de référence enregistrés (docs/REFERENCES.toml, 124 entrées, 0 défaut) |
ISO 32000-1:2008, ISO 32000-2:2020 + Errata Collection 3, ISO/TS 32001–32005, ISO 14289-1/-2, ISO/IEC 14496-22:2019, XFA 3.3, ITU-T T.4/T.6/T.81/T.88/T.800, ICC.1:2022, RFC 1951/7932, Adobe TN 5014/5099/5176/5177/5411, suppléments Adobe ExtLevel 3/5, PDF 2.0 AN 001–003, TechNotes PDF/A 0001–0010, Matterhorn 1.1, WTPDF 1.0, PDF Declarations, EA-PDF 1.0, extension Brotli, PRC WD (SC2 N570), ECMA-363, XFDF 3.0 + XSD, FDF, OGC GeoPDF, Arlington PDF Model, profils + sources veraPDF, aperçus iTeh des 19005-1..4, 15930-1..9, 16612-2/3, 24517-1, 19444-1, 16684-1/2/4, 14739-1, IEC 61966-2-1, 12647-2 |
| Corpus de test (hors dépôt, jamais publiés) | épinglé 1 949 (qpdf, pdfium, pdf.js, mutool) + PDFBox 193 + pdfcpu 511 + veraPDF 2 908 + Isartor 205 + Ghent Output Suite 98 + Cal Poly PDF/VT 12 + PDF/UA Reference Suite 16 + conformité OpenJPEG + UBC JBIG2 + vecteurs ITU T.88 + PngSuite + zlib infcover + UCD BidiTest |
| Oracles indépendants branchés | qpdf 12.4, mutool 1.28, poppler 26.08 (pdftotext/pdftoppm/pdfimages/pdfinfo/pdffonts/pdfsig/pdfdetach), pdf.js 6.3 (pdfjs-dist épinglé), veraPDF 1.30.2, Ghostscript 10.08, LittleCMS transicc, OpenJPEG 2.5, libjpeg-turbo, jbig2dec, libtiff, fontTools/ttx, CPython (zlib, stringprep, xml), OpenSSL 3.6 (cms/ts/pkcs12), pyHanko 0.37, pypdfium2 5.13, Arlington TestGrammar, fribidi, brotli(1), pdftk 3.3.3, xmllint |
| Amont corrigé par ce programme (Kellnr) | russl-codec-jpeg2000 0.9.3 (23/23 ISO/IEC 15444-4), russl-codec-jbig2 0.9.3 (96/96 fixtures pdf.js, UBC 65/65), russl-entropy-mq 0.9.1, russl-pkcs12 0.1.3 (lecture RC2-40/3DES), russl-rsa 0.1.7 (*_allow_legacy), russl-pades 0.1.2 (FieldMDP, mises à jour de flux xref), russl-pdf 0.1.1, russl-cades 0.1.4 (attributs non signés), russl-brotli 0.9.0 consommé |
2. Où l'on dépasse déjà une référence (mesuré, nommé)
- JBIG2 : poppler faux sur 10 des 96 fixtures pdf.js
bitmap-*, jbig2dec faux sur 1 ; nous 96/96 (le PBM de l'auteur comme vérité terrain,jbig2.wasmde pdf.js comme second témoin). - CCITT G4
testfax4: poppler et mupdf échouent à la même ligne ; nous bit-exact (libtiff d'accord). - JPEG 2000 : 23/23 codestreams de conformité ISO/IEC 15444-4 (15 bit-exacts, 8 dans les tables C.6/C.7) ; aucun visualiseur ne revendique cela.
- Brotli : le prototype pdf.js dont les flux xref et d'objets sont eux-mêmes en Brotli s'ouvre chez nous ; qpdf, poppler et mutool le refusent.
- Bidi : UAX #9 BidiCharacterTest 91 707/91 707, BidiTest 770 241/770 241 (UCD 17.0) ; fribidi 442/442 sur les lignes du corpus. Aucun extracteur de texte concurrent n'a cette preuve.
- PDF/UA au niveau glyphe : 8 règles que veraPDF ne peut pas déclencher (ex. 8.10.3.5-1 — son analyseur ne construit jamais d'éléments sémantiques pour les apparences d'annotation) sont vérifiées avec des contrôles négatifs.
- ISO/TS 32005 : Table 5 générée depuis le texte (1 190 paires, errata pdf-issues #440/#336 appliqués) ; 59 paires où veraPDF diverge du texte, listées.
- Pages géantes : page de 12 608×16 806 pt rendue en 936 Mo / 30 s (pdftoppm 5,0 Go, mutool 6,9 Go).
- Prépresse : PDF/X-5g, X-5pg, PDF/VT-2 écrits et vérifiés ; suite Cal Poly PDF/VT 12/12 ; XObjects de référence (§8.10.4) rendus avec substitution (poppler et mupdf ignorent
/Ref). - Chiffrement : R2–R6, AES-GCM (TS 32003), clé publique avec coffres PKCS#12 RC2-40/3DES lus et dégradation nommée (
KeyStrength::Legacy{bits}) là où les autres lecteurs restent silencieux ; TS 32004/AttachedToSigvérifié (pyHanko d'accord). - Couleur : espaces
/Default*et intentions de sortie appliqués (poppler n'applique jamais l'intention ; gs-dUsePDFX3Profiled'accord avec nous au pixel près) ; DeviceCMYK→RVB selon §10.4.2.5 (1−min(1,c+k)) là où le code porté avait(1−c)(1−k); 67 profils ICC libres livrés, 804 conversions à Δ1 maximum face à LittleCMS.
3. Ce qui manque (honnête)
- Lignes du registre à
absent:fdf,xfdf,pdf-declarations,pdfraster,ea-pdf;partial(30) : pdfa-2/3/4, pdfx-1a/3/4/5/6, pdfvt-1-2/3, crypt-public-key (ECDH, contenu 3DES/RC2), filter-brotli (fenêtre large RFC 9841), associated-files, transparency-colour-issues, ts-32001/32002/32004 (écriture, bloquée sur russl-pades), conformance-processors, damaged-file-recovery, filter-predictors, layout-hyphenation, xfa-forms. - Aucune liaison hors Rust. Aucun chiffre de performance publié (lane interrompue). Pas encore de fuzzing guidé par la couverture (lane interrompue). CJK sans police incorporée non dessiné (décision Noto/Source Han en attente). DCT tronqué non peint (poppler/mupdf peignent le préfixe). Pas d'OCR. Pas de conversion Office. Aucun chemin de signature par carte à puce/jeton exposé dans
apdf-sign(RUSSL/libcps-rs existent en amont ; rien de générique ici). - Textes ISO payants non acquis (≈18 documents, ~150–260 € chacun) : 19005-1/2/3/4, 15930-1/3/4/6/7/8/9, 16612-2/3, 24517-1, 19444-1, 16684-1/2, 14739-1, IEC 61966-2-1, 12647-2 — voir
06-decisions.mdD-2. - Branches amont non fusionnées (arbres partagés occupés par d'autres sessions) : RUSSL
fix/cms-interop-and-crl-signing(lane G),lane-r-pkcs12-rsa(lane R) ; CODECSlaneM-jbig2-2026-09-13,laneY-jpx-2026-09-13, commits jpeg2000 de la lane F surargon-full-corpus-2026-08-16. - Checkout partagé sur big-1 : assaini le 2026-09-14 (index périmé remis sur HEAD, 59 fichiers périmés restaurés, 9 fichiers de churn rustfmt restaurés) ; 34 fichiers de travail non commité mêlés à d'anciennes bases subsistent — les worktrees des lanes font foi (voir
05-battle-order.mdPhase 0), pas l'arbre partagé. - L'arbre n'est pas propre au sens rustfmt à HEAD (3 774 blocs) : à formater en un seul commit quand aucune lane n'est active.