PDF/UA-1: Slice-G-Chrome/PDFium-Nachweis

Stand: 4. September 2026. Vertrag: ADR-0065. Issues: #547 und #333.

Abnahmeumfang

Vier synthetische slice-e-1-PDFs mit je acht Seiten. Geprüft werden der echte Chrome/PDFium-Viewer, vollständige A4-Darstellung, PDFium-Text je Seite und Tier, benannte Links sowie die getrennt ausgewiesene Tag-Semantik. Keine echten Karten, keine Produktionsdatenbank und kein PDF/UA-Nutzerreport.

Implementiert

Der Chrome-Prüfer ist Teil von qa:pdf:ua-shadow und separat über qa:pdf:chrome ausführbar. Die CI verwendet denselben bestehenden Pin: Playwright 1.60.0 / Chrome for Testing 148.0.7778.96 / Revision 1223. Die Negativtests binden fehlende PDF-Wurzeln, unvollständige Seitenausschnitte, leere/schwarze Raster und die Trennung lesbaren Texts von Tag-Semantik.

Lokale Verifikation

Auf macOS lief der vollständige Standardviewer mit Chrome for Testing 148.0.7778.96. 4/4 Tiers und 32/32 Seiten bestanden Darstellung, den seitenspezifischen Textvertrag und die beiden benannten Links. Die acht Premium-Seiten wurden zusätzlich visuell geprüft: keine leeren Seiten, Überlagerungen oder abgeschnittenen Inhalte.

TierPDF-SHA-256SeitenHeuristische ÜberschriftenTabellen / Listen / Bilder
free9b078746291a23cf94115a2827d39cbb870d217d8bf20b6509024be373ce005c8/8170 / 0 / 0
standardef3df7b762cdf584fac2b70ae2a38f4a686ab9da7dc19f525822ad6f859df4ea8/8170 / 0 / 0
premium574869f5e02287d9536a41321b4019e7facb1a3f99785f751d73a6c288e1dc218/8170 / 0 / 0
planer9051b02cce72a4f7cbb7f0719deccf93f4b6ecb0244a20d19d3826564b0154948/8170 / 0 / 0

Mittlere Seitenhelligkeit: 245.00–251.75; sichtbarer Body-Ink: 2.975–7.770 %; helle Randpixel: mindestens 100.000 %. Alle Screenshot- und Baumhashes sowie Messwerte liegen im vom Prüfer erzeugten chrome-viewer-summary.json; QA-Dateien sind keine öffentlichen Produktreports. PDFium serialisiert einen Zeilenend-Trennstrich in seinem Baumdump als U+0002. Nur dieser Marker wird für den bestehenden Poppler-Textvertrag entfernt; gewöhnliche Bindestriche bleiben erhalten.

Die gesamte Vitest-Suite bestand mit 3.517 Tests (43 umgebungsgebundene Tests übersprungen); darunter 16 neue negative und positive Prüferfälle. Typecheck, ESLint und lokaler Produktionsbuild bestanden. Der Build nutzte nur eine nicht erreichbare lokale Dummy-DB-URL für die Initialisierung des bestehenden DB-Clients, keine Produktionszugangsdaten. Die neue Vertragsseite wurde lokal bei 1.440 und 390 Pixel Breite geprüft; kein horizontaler Überlauf.

Der integrierte qa:pdf:ua-shadow-Lauf bestand ebenfalls: veraPDF 1.30.2 prüfte pro Tier 106/106 Regeln, beide Poppler-Renderer waren grün, Apple PDFKit/Quartz und Chrome/PDFium prüften jeweils 32/32 Seiten. Der strikte Chrome-Lauf mit --require-tagged-semantics scheiterte erwartungsgemäß mit Exit 1; er verhindert die Freigabe trotz erfolgreicher Darstellung.

CI und Preview

Implementierung: PR #548, Commit d4764392b0bef64202687c2371bba83a647d8a74. Der vollständige PR-CI-Lauf 33913529025 bestand mit verify, PDF-UA-Feasibility und PDF-Poppler-Regression. Das Chrome-Artefakt 9952317383 ist an GitHubs geprüften PR-Mergeref 8008d6bb8f3bc8e7c5d85bfbb63b41e082f574ec gebunden und enthält 32 PNGs, vier Bäume und die Rollen-/Messzusammenfassung. Linux bestätigt denselben Semantikbefund wie macOS: je 17 heuristische Überschriften, zwei Links und keine Tabellen-, Listen- oder Bildrollen.

Der geschützte Preview dpl_CFvZwrc7YbykcWkcHf5fxq8a1DbC war READY und lieferte exakt den Implementierungscommit. Der anfangs übersprungene Build wurde einmalig ohne Ignore Build Step erneut ausgelöst; eine bloße Vercel-Erfolgsmeldung für den abgebrochenen Build zählte nicht als Abnahme. Sechs Dokuportalseiten lieferten HTTP 200 mit private, no-store, noindex und den erwarteten Chrome-/Semantik-Markern. Die neue Vertragsseite wurde auch im Browser auf dem Preview gelesen.

Die tatsächlich ausgelieferten vier PDFs bestanden Chrome/PDFium und Apple PDFKit/Quartz mit jeweils 32/32 Seiten sowie veraPDF 1.30.2 mit je 106/106 Regeln. 32/32 Chrome-Raster stimmen bytegenau mit den lokal geprüften Rastern überein. Die Dateien sind:

TierBytesPDF-SHA-256veraPDF-Checks
free1301621b8dfbbc34e09f1d81b5799670c91cef40cdd146dc072513aae77c11dc70a16424130
standard131727b70123356dd78545a1583a8d3b49ea6e8b6945009a978d76e20e081b3eaa8ee924990
premium1317421250b969e6d93617b6261577cb984b93ccd42496d5a1c4e17f4662124cef4c4e24910
planer1301611c11287ead2be8b1a415f720bafbe11e26eac43c098e9896b5d399d94d40b96724255

Alle PDF-Antworten waren privat, nicht indexierbar und ohne Cookies; GET auf die Shadow-Route blieb leer 404. Der schreibfreie öffentliche POST /api/v1/report mit {} lieferte 400 address_missing und denselben X-Deploy-Commit.

Produktion und Live-Readback

PR #548 wurde als 8ccc9fe28236c894bee69de5502ff11b98c592c0 gemergt. Main-CI 33914599076 bestand vollständig auf diesem Merge-Commit. Produktionsdeployment dpl_Y8GsNSbTzn5swXMfVsxU7Zt5QRiw war READY, trug exakt denselben Commit und belieferte www.landnutzen.at.

Der schreibfreie Readback auf dieser Produktionsdomain bestand zwölf Checks: sechs aktualisierte Dokuportalseiten mit HTTP 200, privaten No-Store- und Noindex-Headern und den erwarteten Markern; alle vier Tier-POSTs sowie ein GET auf die interne Shadow-Route mit leeren privaten 404-Antworten ohne Cookies; der öffentliche Guard mit 400 address_missing und dem exakten X-Deploy-Commit. Damit sind QA-Implementierung und Dokumentation veröffentlicht und die Produktionstrennung belegt. Das ist kein Rollout des PDF/UA-Renderers und kein Live-Readback eines echten Nutzerreports.

Offene Produktgates

Chrome-Tag-Semantik ist nicht abgenommen: der Standardviewer exponiert keine Tabellen-, Listen- oder Bildrollen. Echte Karteninhalte, kontrollierter Produktrollout und PDF/UA-Live-Readback eines echten Nutzerreports bleiben offen. Der öffentliche React-PDF-Renderer bleibt unverändert. #333 bleibt offen.