Produktionsaktivierung und Consumer-Abnahme: Altlastenportal-WFS
- Datum: 26. August 2026
- Issue: #351
- Infrastruktur-PRs: #523, #524
- Consumer-PRs: #525, #526
- Produktionscommits:
5e2767c03f77330d08f7a8e4045ce4b2ecc75424,092543b9ac3b4d0fba94ef5d70748bc7bb01939e - Quelle / Kanal:
altlasten/public - Distribution / Capability:
altlastenportal-wfs-kontaminierte-flaechen/report_lookup - Release:
8ed8d136-f3f8-5a78-946b-4b419a050269 - Release-Key:
0d0a6bf2-11f7-54af-be08-77a9d8369f63 - Pointer-Version:
1 - Status: Quellenrelease und Consumer produktiv aktiviert; API-Hit und No-Hit, Web, PDF, Headless-Ausgabe, Provenienz und öffentliche Dokumentation getrennt rückgelesen.
Aussage dieses Nachweises
Der Altlastenportal-WFS wurde als unveränderlicher, rechte- und
qualitätsgebundener Snapshot aktiviert. Der neue Report-Consumer liest
ausschließlich den aktiven Release und dessen exakten erfolgreichen
Ingest-Lauf aus source_snapshot_runs_current und altlasten_current.
Die historische Tabelle altlasten bleibt unverändert und ist kein
Fallback.
Quellenaktivierung, Consumer-Deployment und öffentliche Produktabnahme sind getrennte Beweise. Dieser Nachweis verbindet sie, ohne sie gleichzusetzen: Publisher-/PostGIS-Tests belegen den Datenvertrag, CI und Deployment den ausgerollten Build, und die unten dokumentierten öffentlichen Antworten den tatsächlich sichtbaren Produktionszustand.
Reproduzierbarer WFS- und Scope-Vertrag
Der schreibfreie Dry-run 32924190845 las den WFS dreimal vollständig und erhielt drei identische Resultate:
| Stufe | Anzahl |
|---|---|
| WFS-Features gesamt | 1.794 |
| Veröffentlichte Altlastengeometrien im Produktscope | 372 |
STATUS=Altlast vorgeschlagen ausgeschlossen | 19 |
Andere FL_TYP außerhalb des Produktscopes | 1.403 |
Die unveränderlichen Manifeste lauten:
| Bindung | SHA-256 |
|---|---|
| Composite | 05026d1639b247240303fa9fa5e703df447e57e05867e80e0f2a7d143ebb7fdb |
| Source | fb0cf929c3f1f4b54e791caf6da42dea1d3e7019b2831ce7b0517afa54c4ee50 |
| Published | 515e51e5bb1dcc55ea055433cd3b280d5cb95c192cd3347688d4d5792efaa605 |
| Excluded | d8e20b751b274d55a5ab5d9c6144bada7eddc1580a0607ab96a56f27a2a78e9b |
| Scope | bf94beba8963123b7a7dd4801e76aafb4040faa79074fcadb0fe57f966628af6 |
Die Geometrie bleibt vom Abruf bis zur versionierten Speicherung im nativen
EPSG:31287. Der Consumer transformiert nur den WGS-84-Adresspunkt und
verwendet ST_Covers sowie metrische Entfernung bis 1.000 Meter. UBAID
ist die stabile Identität; doppelte ALTNR sind ausdrücklich zulässig.
Candidate, Recovery und Aktivierung
Der erste produktive Candidate-Versuch 32924306822 brach während Migration Statement 4 ab. Statements 1 bis 3 waren bereits additiv angewandt; Candidate, Geometriezeilen und Active Pointer existierten zu diesem Zeitpunkt noch nicht. Die korrigierte idempotente Migration bewahrte diesen Zwischenstand und mutierte den Legacy-Spiegel nicht.
Der erfolgreiche
Candidate-Lauf 32925774398
und der explizite
Resume-Readback 32925898356
banden dieselbe Release-ID und denselben Release-Key. Der technische Abruf
war 2026-08-26T03:16:54.083Z, das Frischefenster lief bis
2026-08-28T03:16:54.083Z. source_vintage ist absichtlich NULL,
weil der WFS keinen fachlichen Datenstand nennt.
Der manuell bestätigte
Aktivierungslauf 32926014904
setzte den Expected-Current-CAS von keinem Pointer auf Release
8ed8d136-f3f8-5a78-946b-4b419a050269, Pointer-Version 1. Der anschließende
Renewal-Lauf 32926111534
las denselben Pointer zurück und blieb wegen ausreichender Frischereserve
schreibfrei.
Rechte- und Ausgabevertrag
Der Release ist an den Review-Digest
98369790d461e11c011db19b6fdc5106f52cf9093674fcdc4a7f6c9181beb0a4
und den semantischen Rights-State-Digest
1c4add9f2d3fc0405d71d719729124045b5717551c6d11f852f871c14a57132f
gebunden. Freigegeben ist ausschließlich
public_display/report_lookup für Österreich.
Jede neue sichtbare Ausgabe trägt:
- „Datenquelle: Umweltbundesamt“ mit amtlichem Quelllink;
- die bedingte Weiterverwendung gemäß UBA-Bestätigung vom 11. August 2026;
- den technischen WFS-Abruf als solchen, nicht als fachlichen Stand;
- den Änderungs- und Scope-Hinweis;
- „Nicht-Listung garantiert keine Schadstofffreiheit“.
Rohgeometrieexport, Weiterverteilung, Derivate, ML-/AI-Nutzung und eine allgemeine kommerzielle Lizenzbehauptung sind nicht geöffnet.
Lokale Consumer-Gegenprobe
Die fokussierte Abnahme umfasst Unit-, Contract-, OpenAPI-, Web-, PDF- und
Legacy-Kompatibilitätstests. Zusätzlich führt
tests/integration/altlasten-publisher-postgres.e2e.mjs den tatsächlichen
Consumer-SQL-Pfad gegen PostgreSQL 16 / PostGIS aus und belegt:
- vor Aktivierung keine sichtbare Consumerzeile;
- Innen- und exakten Randtreffer über
ST_Covers; - metrisch nächsten Treffer innerhalb 1 km;
- getrennte
UBAIDtrotz doppelterALTNR; - echten No-Hit als aktive Provenienzzeile ohne räumlichen Kandidaten;
- sofortiges fail-closed bei Rights-Drift;
- unveränderten Legacy-Spiegel.
Fehlender, abgelaufener oder rechtegedrifteter Active Release wird im Report
als degraded ausgegeben und niemals als grüner Nullbefund. Technische
Fehlerlogs enthalten weder SQL-Parameter noch Koordinaten.
Der für PR #525 gepushte Ausgangscommit 377bd94 bestand lokal die
vollständige Vitest-Suite mit 259 grünen Testdateien und 3.328 bestandenen
Tests bei 25 bewusst übersprungenen Fällen. Zusätzlich waren ESLint,
TypeScript, Content-/SEO-Audit, der Next.js-Produktionsbuild, die
Österreich-Adapter-QA mit 19/19 ausführbaren Regionen sowie der echte
PostGIS-E2E grün.
Der live gefundene Darstellungsrandfall eines reinen Nähetreffers wurde in
PR #526 geschlossen. Der grüne
CI-Lauf 32930236281
bestand in 11:42 Minuten unter anderem 259 Testdateien mit 3.332 bestandenen
und 25 bewusst übersprungenen Tests, TypeScript, ESLint sowie die vorhandenen
FND-, Export- und PostGIS-Verträge. Die neuen Gegenproben zeigen zugleich,
dass eine historische Near-Referenz ohne amtliche UBAID nicht zur UBAID
aufgewertet wird.
Öffentlicher Consumer-Readback
PR #525 wurde als Commit
5e2767c03f77330d08f7a8e4045ce4b2ecc75424 produktiv ausgerollt. Der
Main-CI-Lauf 32929693278
und der Vercel-Produktionsstatus
7edf6eYsDdFgHyGVUpaf8ERDeujV
waren grün. Öffentliche Readbacks bestätigten:
GET /api/v1/data-sources/altlasten/provenanceliefert Release, Release-Key, Pointer-Version 1,report_lookup,source_vintage=null, den technischen Abruf2026-08-26T03:16:54.083Zund einen frischen Zustand;Tanklager Lobau, 1220 Wienliefert einen gültigen Nähetreffer in 703 m mitUBAID 72113, exakter Release-Provenienz und ohne Altlasten-Degradation;Rathausplatz 1, 2230 Gänserndorfliefert einen gültigen No-Hit mit derselben aktiven Provenienz und ebenfalls ohne Altlasten-Degradation;- beide nicht persistierenden API-Antworten waren
200undCache-Control: private, no-store; der API-Pfad trug den jeweiligen exaktenX-Deploy-Commit; - die öffentliche Coverage-Matrix lieferte Version
2026-08-26.altlasten-report-exclusion-v1, 34 Lanes, 306 Zellen und die Verteilung 54/11/18/16/207. Altlasten blieb korrekt report-only und erzeugte keinesite-check-Lane.
Für den Web-/PDF-Nachweis wurde genau ein nicht personenbezogener,
industrieller Pilotreport im normalen anonymen 90-Tage-Lifecycle gespeichert:
uTyjyJYlZbOh1GDPxLdB37.
Sein gespeichertes JSON enthält den 703-m-Treffer, UBAID 72113, den exakten
Release und die vollständige UBA-Attribution. Web und PDF zeigten zunächst
Entfernung und Provenienz; dabei wurde entdeckt, dass die UBAID bei einem
reinen Nähetreffer in diesen Präsentationspfaden fehlte.
PR #526 korrigierte Web, PDF-Risikotabelle, Steckbrief und Headless-Skill und
wurde als Commit 092543b9ac3b4d0fba94ef5d70748bc7bb01939e ausgerollt. Das
erfolgreiche GitHub-Produktionsdeployment 6097219763 verweist auf den
Vercel-Status HDZTgos4ch7eVmGC9kRW3VpksoYd.
Der anschließende öffentliche Gegencheck bestätigte:
- ein frischer, nicht persistierender API-Hit mit
X-Deploy-Commit: 092543b9ac3b4d0fba94ef5d70748bc7bb01939e,private, no-store, 703 m,UBAID 72113und dem exakten Release; - Web: „Keine Altlast am Adresspunkt — nächste veröffentlichte Altlast ca. 703 m entfernt (UBAID 72113)“;
- PDF:
application/pdf,private, no-store, 225.209 Bytes, gültiger%PDF--Header sowie „Veröffentlichte Altlast ~703 m entfernt (UBAID 72113)“, UBA-Attribution und exakte Release-ID im extrahierten Text; - Headless-Skill: „Keine Altlast am Punkt; nächste ~703 m (UBAID 72113)“ zusammen mit technischem WFS-Abruf, Release und amtlichem Quelllink.
Gespeicherter Report und PDF senden bewusst keinen eigenen
X-Deploy-Commit-Header; ihre Prüfung wird daher nicht fälschlich über diesen
Header behauptet. Die Zuordnung zum ausgerollten Fix stützt sich auf das
erfolgreiche Produktionsdeployment, den exakten Commit des frischen API-Hits
und die erst durch #526 mögliche sichtbare Near-Hit-Zeichenfolge. Für den
Nachzug wurde kein zweiter Report gespeichert.
Die öffentlichen Seiten /docs/feature-altlasten,
/docs/altlasten-produktionsnachweis-2026-08-26, /methodik und /briefing
lieferten 200 und die erwarteten Scope-, Release-, Quellen- und
Matrixangaben. Damit sind Quellenrelease, Consumer, Ausgaben und Dokumentation
produktiv abgenommen; die dokumentierten fachlichen und rechtlichen Grenzen
bleiben unverändert.