Files
geointel/docs/accuracy-program/09-full-data-scan.md
T

104 lines
6.5 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 | 1013 |
| Overgeslagen bestanden | 0 |
| Onbereikbare scope-items | 3 |
| Geïnventariseerd totaal | 1016 |
| Reconciliatie | groen (`1013 + 0 + 3 = 1016`) |
De drie expliciet onbereikbare items zijn grenzen van deze lokale
Windows-scan: de niet lokaal gemounte Tower-corpora, modelvolumes en het
productie-PostGIS/API-endpoint. Elk staat als `unreachable` in het volledige
manifest met concrete reden; er is geen stilzwijgende skip. Dit betekent niet
dat de server zelf onbereikbaar is. Een afzonderlijke gecontroleerde
productiescan moet die remote scopes beoordelen voordat een nationale
volledigheidsclaim mogelijk is.
De scan leverde 711 anomalieën op. Dat is geen geldigheidsclaim: 682 items
zijn daarom in het logische quarantainemanifest 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 | unavailable or unreadable |
| Afgeleide artefacten zonder expliciete lineage | 577 | quarantine |
| Bronlabel zonder declared freshness | 29 | 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-eb67185e61107cc7` / `f4ea193d2bdd96a5b391cf7d9d93685cc58e98742c40e4513bcbc434907e720a`
## 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
De lokale Fase-3-scan is volledig voor de afgebakende projectomgeving: alle
1013 veilige lokale bestanden zijn verwerkt en de drie niet-gemounte grenzen
zijn expliciet geregistreerd. Fase 3 blijft voor de totale operationele
omgeving `production_inventory_pending` totdat de servervolumes en database
in een gecontroleerde productiescan zijn gereconcilieerd. Fase 4 kan de lokale
quarantine- en leakage-signalen al beoordelen. Dit is geen modelpromotie- of
nationale kwaliteitsclaim; de inhoudelijke anomalieën moeten eerst worden
hersteld of representatief 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`.
## Accuracy-handoff na de scan
De onafhankelijke AI-visuele triage van 30 augustus is vastgelegd in
`artifacts/evidence/accuracy/model-training/20260830-independent-ai-visual-review.json`.
Daarin blijven `human_reviewer=false`, corpusacceptatie, training en promotie
expliciet geblokkeerd. Een model kan bovendien pas worden geactiveerd wanneer
de exacte candidate key en model-SHA-256 overeenkomen met een geslaagd governed
Phase-4/5 release-gaterapport dat ook de benchmarkmanifest-SHA-256 bindt. De
taakgeschikte officiële bron blijft doorslaggevend voor productresultaten.