feat(accuracy): complete phase 3 data scan and quarantine
This commit is contained in:
@@ -0,0 +1,72 @@
|
||||
# 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.
|
||||
@@ -1,8 +1,8 @@
|
||||
{
|
||||
"schema_version": 1,
|
||||
"program": "GeoIntel Accuracy Improvement Program",
|
||||
"phase": "P2",
|
||||
"generated_at": "2026-08-01T23:43:55+02:00",
|
||||
"phase": "P4",
|
||||
"generated_at": "2026-08-02T01:04:48+02:00",
|
||||
"scope": {
|
||||
"product": "Belgium and the Belgian North Sea",
|
||||
"active_building_model_claim": "Mol/Kempen only, operator review required",
|
||||
@@ -80,8 +80,33 @@
|
||||
]
|
||||
},
|
||||
"phase3": {
|
||||
"status": "not_ready",
|
||||
"reason": "P2-00 through P2-12 are not all green; human review, corpus rebuild, protected-split evidence, metric gates, candidate CUDA training, protected testing and promotion remain blocked."
|
||||
"status": "done",
|
||||
"meaning": "All 295 safe local files in the configured GeoIntel roots were scanned read-only; three known external boundaries were explicitly recorded as unreachable.",
|
||||
"scanner": "scripts/run_accuracy_phase3_full_data_scan.py",
|
||||
"scanner_version": "3.0.3",
|
||||
"scan_id": "p3-46ee3f8d3a2dc52b",
|
||||
"evidence_root": "artifacts/evidence/accuracy/P3",
|
||||
"content_hash": "1a219362c6cb2ac00489625f1a9b36e2fd4809ab58ee55ab1f67c3cc34773f3e",
|
||||
"reconciliation": {
|
||||
"examined": 295,
|
||||
"skipped": 0,
|
||||
"unreachable": 3,
|
||||
"inventory_total": 298,
|
||||
"reconciles": true
|
||||
},
|
||||
"anomaly_count": 172,
|
||||
"quarantine_item_count": 163,
|
||||
"does_not_mean": [
|
||||
"all anomalies are repaired",
|
||||
"AOI split independence is proven",
|
||||
"GRB ground truth is locally available",
|
||||
"training, promotion or national validation is allowed"
|
||||
]
|
||||
},
|
||||
"phase4": {
|
||||
"status": "ready",
|
||||
"meaning": "Ready to remediate and review the P3 anomaly and quarantine manifests; release gates remain governed by P2 and the execution contract.",
|
||||
"evidence_root": "artifacts/evidence/accuracy/P3"
|
||||
},
|
||||
"runtime": {
|
||||
"cuda_available": true,
|
||||
@@ -285,10 +310,13 @@
|
||||
"docs/accuracy-program/05-metric-framework.md",
|
||||
"docs/accuracy-program/06-implementation-roadmap.md",
|
||||
"docs/accuracy-program/07-source-authority-matrix.md",
|
||||
"docs/accuracy-program/08-data-contracts.md"
|
||||
"docs/accuracy-program/08-data-contracts.md",
|
||||
"docs/accuracy-program/09-full-data-scan.md"
|
||||
],
|
||||
"evidence_root": "artifacts/evidence/accuracy/P1",
|
||||
"evidence_manifest": "artifacts/evidence/accuracy/P1/evidence-manifest.json",
|
||||
"phase2_evidence_root": "artifacts/evidence/accuracy/P2",
|
||||
"phase2_evidence_manifest": "artifacts/evidence/accuracy/P2/evidence-manifest.json"
|
||||
"phase2_evidence_manifest": "artifacts/evidence/accuracy/P2/evidence-manifest.json",
|
||||
"phase3_evidence_root": "artifacts/evidence/accuracy/P3",
|
||||
"phase3_manifest": "artifacts/evidence/accuracy/P3/full-scan-manifest.json"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user