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.
| Tier | PDF-SHA-256 | Seiten | Heuristische Überschriften | Tabellen / Listen / Bilder |
|---|---|---|---|---|
| free | 9b078746291a23cf94115a2827d39cbb870d217d8bf20b6509024be373ce005c | 8/8 | 17 | 0 / 0 / 0 |
| standard | ef3df7b762cdf584fac2b70ae2a38f4a686ab9da7dc19f525822ad6f859df4ea | 8/8 | 17 | 0 / 0 / 0 |
| premium | 574869f5e02287d9536a41321b4019e7facb1a3f99785f751d73a6c288e1dc21 | 8/8 | 17 | 0 / 0 / 0 |
| planer | 9051b02cce72a4f7cbb7f0719deccf93f4b6ecb0244a20d19d3826564b015494 | 8/8 | 17 | 0 / 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:
| Tier | Bytes | PDF-SHA-256 | veraPDF-Checks |
|---|---|---|---|
| free | 130162 | 1b8dfbbc34e09f1d81b5799670c91cef40cdd146dc072513aae77c11dc70a164 | 24130 |
| standard | 131727 | b70123356dd78545a1583a8d3b49ea6e8b6945009a978d76e20e081b3eaa8ee9 | 24990 |
| premium | 131742 | 1250b969e6d93617b6261577cb984b93ccd42496d5a1c4e17f4662124cef4c4e | 24910 |
| planer | 130161 | 1c11287ead2be8b1a415f720bafbe11e26eac43c098e9896b5d399d94d40b967 | 24255 |
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.