docs(accuracy): refresh governed scan and training evidence

This commit is contained in:
Jens
2026-08-30 06:00:57 +02:00
parent c272220277
commit 0e3c1b20e9
27 changed files with 88787 additions and 318 deletions
@@ -224,6 +224,22 @@ produce map geometry or location claims.
| DHMV | Contract requires product key, DTM/DSM semantics, EPSG:31370, native/analysis resolution, one-band numeric units, nodata, TAW vertical reference and 2013-2015 period for the currently configured DHMV II source. It is elevation evidence, not building truth. |
| Bathymetry | Vertical datum/reference plane, depth versus bed-elevation semantics, survey epoch and uncertainty are mandatory. No water volume is inferred. |
### 5.4 Inference tile-manifest contract
Raster tiling emits `geointel.raster.tile-manifest@2.0.0`. The manifest binds
the source Dataset id/checksum/size, the latest DatasetVersion identity and
checksum, registry/snapshot identities and snapshot checksum, data-contract
identity, source version and—when present—the Area identity and geometry hash.
Each tile has an explicit CRS/bounds, byte size and SHA-256.
Configured detection and segmentation validate that exact binding against the
requested live Dataset before model loading. They recompute every tile hash,
normalize the tile union to EPSG:4326 and require it to remain inside the
manifest and persisted Dataset extents and intersect the bound Area. Missing,
legacy or changed evidence is not inferred from filenames: it fails closed with
a typed dataset, provenance, tile-integrity or spatial-scope error.
## 6. Vector data contract
### 6.1 Required vector fields
+36 -10
View File
@@ -6,21 +6,30 @@ De reproduceerbare scan `scripts/run_accuracy_phase3_full_data_scan.py` is read-
| Telling | Aantal |
| --- | ---: |
| Onderzochte bestanden | 295 |
| Onderzochte bestanden | 1013 |
| Overgeslagen bestanden | 0 |
| Onbereikbare scope-items | 3 |
| Geïnventariseerd totaal | 298 |
| Reconciliatie | groen (`295 + 0 + 3 = 298`) |
| Geïnventariseerd totaal | 1016 |
| Reconciliatie | groen (`1013 + 0 + 3 = 1016`) |
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 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 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:
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 | quarantine |
| Afgeleide artefacten zonder expliciete lineage | 58 | quarantine |
| Bronlabel zonder declared freshness | 9 | requires review |
| 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 |
@@ -43,7 +52,7 @@ Er zijn vijf vaste ernstniveaus (`blocker`, `critical`, `major`, `minor`, `infor
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`
`p3-eb67185e61107cc7` / `f4ea193d2bdd96a5b391cf7d9d93685cc58e98742c40e4513bcbc434907e720a`
## Bewijsartefacten
@@ -69,9 +78,26 @@ De fixturetest controleert geldige en foutieve GeoJSON, corrupte rasterinput, ex
## 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.
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.
+46 -31
View File
@@ -2,11 +2,12 @@
"schema_version": 1,
"program": "GeoIntel Accuracy Improvement Program",
"phase": "P4",
"generated_at": "2026-08-02T04:40:51+02:00",
"generated_at": "2026-08-30T05:58:29+02:00",
"scope": {
"product": "Belgium and the Belgian North Sea",
"active_building_model_claim": "Mol/Kempen only, operator review required",
"national_building_validation": false
"national_building_validation": false,
"result_authority_policy": "Task-appropriate official sources remain decisive for product results; AI output is a reviewable proposal unless a governed task-specific release gate proves otherwise."
},
"baseline": {
"branch": "codex/geointel-accuracy-program",
@@ -34,7 +35,8 @@
"promotion_allowed": false,
"scope_widening_allowed": false,
"training_allowed_now": false,
"training_unlock_gate": "P2-08 after P2-00 through P2-07 have passed",
"training_unlock_gate": "A corrected checksum-frozen corpus, independent splits, representative human acceptance and every applicable pre-registered training gate must pass before a new governed run.",
"activation_gate": "Activation requires the exact candidate key and model SHA-256 bound to a passing governed Phase-4/5 release-gate report and its benchmark-manifest SHA-256; a legacy diagnostic promotion report alone has no activation authority.",
"critical_risk_count": 8,
"high_risk_count": 17,
"medium_risk_count": 4
@@ -80,23 +82,24 @@
]
},
"phase3": {
"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.",
"status": "local_complete_production_inventory_pending",
"meaning": "All 1013 safe local files in the configured GeoIntel roots were scanned read-only; three declared external production boundaries were recorded explicitly and still require a controlled server-side inventory.",
"scanner": "scripts/run_accuracy_phase3_full_data_scan.py",
"scanner_version": "3.0.3",
"scan_id": "p3-46ee3f8d3a2dc52b",
"scanner_version": "3.1.0",
"scan_id": "p3-eb67185e61107cc7",
"evidence_root": "artifacts/evidence/accuracy/P3",
"content_hash": "1a219362c6cb2ac00489625f1a9b36e2fd4809ab58ee55ab1f67c3cc34773f3e",
"content_hash": "f4ea193d2bdd96a5b391cf7d9d93685cc58e98742c40e4513bcbc434907e720a",
"reconciliation": {
"examined": 295,
"examined": 1013,
"skipped": 0,
"unreachable": 3,
"inventory_total": 298,
"inventory_total": 1016,
"reconciles": true
},
"anomaly_count": 172,
"quarantine_item_count": 163,
"anomaly_count": 711,
"quarantine_item_count": 682,
"does_not_mean": [
"the total production inventory is complete",
"all anomalies are repaired",
"AOI split independence is proven",
"GRB ground truth is locally available",
@@ -256,21 +259,31 @@
"promotion_evidence": false
},
"protected_test_isolation": false,
"human_label_acceptance": false
"human_label_acceptance": false,
"latest_independent_ai_visual_review": {
"review_id": "20260830-independent-ai-visual-review",
"evidence": "artifacts/evidence/accuracy/model-training/20260830-independent-ai-visual-review.json",
"human_reviewer": false,
"corpus_accepted": false,
"training_gate": "blocked",
"promotion_allowed": false,
"claim_boundary": "Independent AI visual inspection is triage evidence only; it is not representative human acceptance, protected-test evidence or an accuracy measurement."
}
},
"verification": {
"backend_full_suite": {
"status": "failed",
"passed": 1282,
"failed": 17,
"duration_seconds": 116.62,
"classification": "The canonical backend test import boundary now collects. Sixteen remaining failures are historical source-text assertions for changed UI/deployment/README behavior; one full Windows run also hit an intermittent WSL-backed bash.exe host failure in a shell-wrapper syntax test. This still prevents a whole-suite-green claim."
"status": "passed",
"passed": 1702,
"skipped": 1,
"failed": 0,
"duration_seconds": 279.63,
"classification": "The complete canonical backend suite passes with deprecations promoted to errors. The single skip is the Windows-host symlink fixture; the symlink refusal path remains covered by static and Linux-targeted release checks."
},
"backend_ci_entrypoint": {
"status": "collected_with_failures",
"collected": 1299,
"result": "1282 passed, 17 failed",
"note": "The former scripts.render_operator_polygon_label_qa collection failure is resolved by the canonical backend-test import boundary."
"status": "passed",
"collected": 1703,
"result": "1702 passed, 1 skipped",
"note": "The canonical backend test import boundary, deployment contracts, guest analysis flow and governed raster handoff all collect and pass."
},
"phase1_tooling_tests": {
"status": "passed",
@@ -280,14 +293,14 @@
"status": "passed"
},
"repository_ruff": {
"status": "failed",
"finding_count": 95,
"note": "P2-changed Python paths pass their scoped Ruff check; repository-wide remediation remains an explicit P2-01 gate."
"status": "passed",
"finding_count": 0,
"note": "Repository-wide Ruff validation passes across backend, scripts and tests without policy weakening."
},
"frontend_unit": {
"status": "passed",
"test_files": 16,
"tests": 51,
"test_files": 40,
"tests": 170,
"command": "npm run test:unit"
},
"frontend_typecheck": {
@@ -302,13 +315,13 @@
},
"openapi_contract": {
"status": "passed",
"implemented_routes": 147,
"explicit_non_envelope_endpoints": 10
"implemented_routes": 155,
"explicit_non_envelope_endpoints": 12
},
"alembic": {
"status": "passed_offline_and_disposable_postgis",
"heads": [
"202608010001"
"202608230001"
],
"offline_upgrade_rendered": true,
"offline_downgrade_rendered": true,
@@ -390,10 +403,12 @@
"docs/accuracy-program/09-full-data-scan.md",
"docs/accuracy-program/10-evaluation-protocol.md",
"docs/accuracy-program/11-baseline-benchmark.md",
"docs/accuracy-program/12-release-gates.md"
"docs/accuracy-program/12-release-gates.md",
"docs/accuracy-program/13-nested-mirror-retirement.md"
],
"evidence_root": "artifacts/evidence/accuracy/P1",
"evidence_manifest": "artifacts/evidence/accuracy/P1/evidence-manifest.json",
"latest_verification_evidence_manifest": "artifacts/evidence/accuracy/P1/evidence-manifest-20260830-verification.json",
"phase2_evidence_root": "artifacts/evidence/accuracy/P2",
"phase2_evidence_manifest": "artifacts/evidence/accuracy/P2/evidence-manifest.json",
"phase3_evidence_root": "artifacts/evidence/accuracy/P3",