Files
geointel/docs/accuracy-program/09-full-data-scan.md
T
Jens f41392a415
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s
docs(accuracy): publish phase 4 benchmark evidence
2026-08-02 05:10:05 +02:00

78 lines
5.6 KiB
Markdown

# Fase 3 — Volledige datascan en quarantaine
## Resultaat
De reproduceerbare scan `scripts/run_accuracy_phase3_full_data_scan.py` is read-only uitgevoerd over de veilige lokale scope `models/`, `datasets/`, `data/`, `storage/`, `artifacts/` en `output/`. De scan schrijft uitsluitend bewijs naar `artifacts/evidence/accuracy/P3/`; bronbestanden zijn niet gewijzigd.
| Telling | Aantal |
| --- | ---: |
| Onderzochte bestanden | 295 |
| Overgeslagen bestanden | 0 |
| Onbereikbare scope-items | 3 |
| Geïnventariseerd totaal | 298 |
| Reconciliatie | groen (`295 + 0 + 3 = 298`) |
De drie expliciet onbereikbare items zijn de niet-gemounte Tower-corpora, gemounte modelvolumes en een productie-PostGIS/API-endpoint. Elk staat als `unreachable` in het volledige manifest met concrete reden; er is geen stilzwijgende skip.
De scan leverde 172 anomalieën op. Dat is geen geldigheidsclaim: 163 items zijn daarom in de logische quarantine-manifest opgenomen. De scanner promoot geen enkel foutief item tot ground truth en voert geen automatische reparatie uit. De huidige bevindingen zijn:
| Categorie | Aantal | Standaardactie |
| --- | ---: | --- |
| Onleesbare/corrupte GeoTIFF | 96 | quarantine |
| Afgeleide artefacten zonder expliciete lineage | 58 | quarantine |
| Bronlabel zonder declared freshness | 9 | requires review |
| Manifest met nul-bounding-box | 6 | quarantine |
| Niet-bereikbare externe scope | 3 | unavailable or unreadable |
De eerdere P1-splitinventaris blijft zichtbaar in `leakage-report.json`: 24 AOI-paren lagen onder 2 km en split-onafhankelijkheid was niet bewezen. De scan rapporteert dat als `attention`; bestandsnamen alleen kunnen AOI-onafhankelijkheid niet bewijzen. Er was geen toegankelijke GRB-snapshot in de lokale scope, zodat geen afgeleid resultaat als GRB-ground-truth is gemarkeerd.
## Scancontract
Iedere inventarisregel bevat een immutable padidentiteit, bestandsgrootte en SHA-256 (waar leesbaar), typecontract, bronclassificatie, lineage, schema/CRS, resolutie/eenheden, ruimtelijke en temporele dekking, freshness, geometrie- of rasterstatus, duplicaatinformatie, anomalieën, ernst en aanbevolen actie. Ondersteunde typecontracten zijn:
- `geointel.vector.geojson@1.0.0` — GeoJSON-schema, geometrievaliditeit en EPSG:4326-bounds;
- `geointel.raster.geotiff@1.0.0` — leesbaarheid, CRS, dimensies, resolutie, bounds, nodata en sample-validiteit;
- `geointel.label.yolo@1.1.0` — genormaliseerde YOLO-labelregels en expliciete achtergrondreview;
- `geointel.model.pytorch@1.0.0` — immutable modelartefact-identiteit;
- `geointel.manifest.json@1.0.0` — CRS, bounds, tile-paden en bron-ID's;
- `geointel.database.sqlite@1.0.0` en `geointel.artifact.generic@1.0.0` — veilige byte-/schema-inventaris voor runtime- en bewijsartefacten.
Er zijn vijf vaste ernstniveaus (`blocker`, `critical`, `major`, `minor`, `informational`) en zeven vaste acties (`accept`, `repairable automatically`, `requires review`, `quarantine`, `exclude from training`, `exclude from evaluation`, `unavailable or unreadable`). Een anomaly wordt nooit automatisch als waarheid gebruikt.
## Hervatbaarheid en determinisme
De scanner bouwt eerst een gesorteerde inventory-hash. Per batch wordt `scan-checkpoint.json` atomair bijgewerkt. Met dezelfde inventory en `--resume` worden onveranderde records hergebruikt; gewijzigde records worden opnieuw gelezen. De inhoudshash sluit alleen uitvoertimestamps uit. Twee opeenvolgende runs gaven dezelfde scan-ID en content-hash:
`p3-46ee3f8d3a2dc52b` / `1a219362c6cb2ac00489625f1a9b36e2fd4809ab58ee55ab1f67c3cc34773f3e`
## Bewijsartefacten
- `artifacts/evidence/accuracy/P3/full-scan-manifest.json` — volledige machineleesbare scan;
- `artifacts/evidence/accuracy/P3/anomaly-manifest.json` — alle afwijkingen;
- `artifacts/evidence/accuracy/P3/quarantine-manifest.json` — veilige logische quarantine;
- `artifacts/evidence/accuracy/P3/duplicates-report.json` — exacte en genormaliseerde near-duplicategroepen;
- `artifacts/evidence/accuracy/P3/leakage-report.json` — checksum-/splitsignalen en P1-splitinventaris;
- `artifacts/evidence/accuracy/P3/source-freshness-report.json` — bron/freshness-kruistabel;
- `artifacts/evidence/accuracy/P3/dataset-summary.json` — samenvatting per contracttype;
- `artifacts/evidence/accuracy/P3/scan-checkpoint.json` — hervatbare batchstaat.
## Reproduceerbare uitvoering
```powershell
python scripts/run_accuracy_phase3_full_data_scan.py --batch-size 40
python scripts/run_accuracy_phase3_full_data_scan.py --batch-size 40 --resume
python -m pytest backend/tests/test_accuracy_phase3_full_data_scan.py -q -p no:cacheprovider
python -m ruff check scripts/run_accuracy_phase3_full_data_scan.py backend/tests/test_accuracy_phase3_full_data_scan.py
```
De fixturetest controleert geldige en foutieve GeoJSON, corrupte rasterinput, exacte duplicaten, quarantine en identieke herhaling. Productie- of brondata wordt door deze tests niet aangeraakt.
## Fasebeslissing
Fase 3 is `done` voor de afgebakende projectomgeving: alle 295 veilige lokale bestanden zijn verwerkt en de drie niet-bereikbare externe grenzen zijn expliciet geregistreerd. Fase 4 is `ready` voor verdere beoordeling van de gevonden quarantine- en leakage-signalen. Dit is geen modelpromotie- of nationale kwaliteitsclaim; de inhoudelijke anomalieën moeten eerst door de volgende fase worden hersteld of menselijk beoordeeld.
> **Historische handoff:** `ready` beschrijft het overdrachtsmoment direct na
> de Phase-3-scan. Het Phase-4-harnas is inmiddels geïmplementeerd, maar de
> actuele productbenchmark is nog `not_evaluable`; de normatieve actuele
> status staat in `docs/accuracy-program/status.json`.