docs(accuracy): publish phase 4 benchmark evidence
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

This commit is contained in:
Jens
2026-08-02 05:10:05 +02:00
parent 70fb4b94e5
commit f41392a415
34 changed files with 25672 additions and 8 deletions
@@ -555,3 +555,8 @@ The source/provenance part of Fase 2 is green only when:
Until all gates are green, Fase 2 is in progress, Fase 3 is not ready and
training/promotion remains blocked by the Phase-1 execution contract.
> **Historische handoff:** deze zin legt de P2-gate vast zoals die bij oplevering
> van dit document gold. Fase 3 is nadien binnen de afgebakende lokale scope
> uitgevoerd. De actuele fasebeslissing staat uitsluitend in
> `docs/accuracy-program/status.json`.
@@ -70,3 +70,8 @@ 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.
> **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`.
@@ -0,0 +1,175 @@
# Fase 4 — Evaluatieprotocol
## Doel en huidige claimgrens
Het Phase-4-harnas maakt evaluatorgedrag, splits, ruwe voorspellingen en
releasebeslissingen reproduceerbaar. De lokale referentiecases zijn bewust
synthetisch en bewijzen uitsluitend dat het harnas correct en fail-closed
werkt. Zij zijn geen meting van productie-accuracy, België-brede
generaliseerbaarheid of menselijke aanvaardbaarheid.
De volledige workflow is:
```powershell
python scripts/run_accuracy_phase4_benchmark.py
```
De standaarduitvoering retourneert exitcode `2` zolang een productgate niet
groen is. Voor het uitsluitend regenereren en testen van lokale evidence mag:
```powershell
python scripts/run_accuracy_phase4_benchmark.py --allow-product-blocked
```
worden gebruikt. Die vlag verandert geen gate, score of beslissing. Hij maakt
alleen een succesvolle lokale harnascontrole bruikbaar in CI terwijl externe
productinput aantoonbaar ontbreekt.
## Geïmplementeerde taken
De inventaris scheidt geleerde modellen van deterministische GIS-analyse. Een
officiële of deterministische GIS-functie wordt niet kunstmatig als
machine-learningmodel voorgesteld.
De machineleesbare inventaris omvat 15 concrete platformcapabilities, gemapt
op zeven evaluatorfamilies. Een family-dekking geldt niet automatisch als een
zelfstandige benchmarkclaim voor iedere onderliggende microfunctionaliteit.
| Taakfamilie | Werkelijke implementatie | Phase-4-metrics | Huidige productstatus |
| --- | --- | --- | --- |
| Objectdetectie | `backend/app/services/detection_service.py` | precision, recall, F1, AP50, AP5095, matched IoU, ECE, Brier, coverage-risk | evaluatorcontract groen; actieve modelbenchmark lokaal niet uitvoerbaar |
| Gebouwfootprintsegmentatie | `backend/app/services/segmentation_service.py` | object-P/R/F1, IoU, Dice, boundary F1, centroidafstand, relatieve oppervlaktefout, topologie | evaluatorcontract groen; geen representatieve beschermde productset bereikbaar |
| Vectorvergelijking en detectie-QA | `backend/app/services/qa_service.py`, `backend/app/services/detection_qa_service.py` | object-P/R/F1, mean IoU, topologische geldigheid | referentie-implementatie via de golden QA-fixtures uitgevoerd |
| Veranderingsdetectie | `backend/app/services/change_detection_service.py` | event-level P/R/F1, apart voor toegevoegd en verwijderd | evaluatorcontract groen; productbaseline niet vastgesteld |
| Thematische rasterinterpretatie | `backend/app/services/thematic_raster_analysis_service.py` en rasterservices | confusion matrix, pixelaccuracy, class-P/R/F1, class-IoU, mean IoU | alleen metriekcontract voor categorische rasters; er is geen geleerd generiek rasterclassificatiemodel aangetroffen |
| Hoogte- en terreininterpretatie | terrein-, hoogte-, bathymetrie- en overstromingsservices | MAE, RMSE, bias, coverage en foutverdeling in gedeclareerde eenheid | deterministische bronanalyse; referentiedata en eenheden blijven taakgebonden |
| Geospatiale datavalidatie | `backend/app/services/data_contract_validation.py` en Phase-3-scanner | anomaly-P/R/F1, blocker/critical misses | contractfixture groen; echte bronscan blijft de Phase-3-evidence |
Vector clip/buffer/intersect, ruimtelijke aggregatie, raster inspect/reproject/
clip/tile, NDVI/NDWI/NDBI, flood hazard, bathymetrie en AOI-partitionering
vallen onder de overeenkomstige deterministische validatie-, vector-, raster-
of terreinfamilie. De geo-assistent is een orkestratie-interface en krijgt geen
misleidende zelfstandige accuracy-score; de onderliggende toolresultaten
blijven maatgevend.
## Metriccontract
Alle objectmatches zijn one-to-one en gebruiken de vooraf vastgelegde
taakconfiguratie. Er is geen data-afhankelijke threshold-, operating-point- of
modelselectie op test-, background-test- of challenge-input. Vaste diagnostische
AP- en coverage-riskcurves veranderen het vooraf geregistreerde operating point
niet. Ongedefinieerde delingen worden `null` met expliciete support, niet
kunstmatig `1.0`.
| Uitvoertype | Verplichte kernmetingen | Aanvullende controle |
| --- | --- | --- |
| Objecten | TP, FP, FN, precision, recall, F1 | IoU, AP, calibration en abstention |
| Footprints | objectmetingen, mean IoU en Dice | boundary F1, centroid, area en topologie |
| Categorische rasters | confusion matrix, per-class F1/IoU, mean IoU | pixelaccuracy en class-support |
| Changes | event-level P/R/F1 per changeklasse | globale score mag een klasse niet maskeren |
| Continue hoogte | MAE, RMSE, bias | coverage, eenheid en foutverdeling |
| Validatie | anomaly-P/R/F1 | iedere gemiste blocker/critical anomaly blokkeert |
Voor binomiale precision en recall rapporteert het harnas 95%-Wilsonintervallen.
Bij te weinig support blijft de subgroepgate `not_evaluable`; de supportreden
blijft afzonderlijk zichtbaar. Een breed interval of ontbrekende metric is geen
positief bewijs. Voor een toekomstige productbenchmark moet bij ruimtelijk
geclusterde observaties bovendien een vooraf vastgelegde AOI- of
clusterbootstrap worden gebruikt in plaats van pixels als onafhankelijke
steekproeven te behandelen.
## Splitcontract en leakage-gates
`scripts/generate_accuracy_phase4_splits.py` genereert twee afzonderlijke,
gehashte manifesten uit één versieerbare bron:
- development: `train`, `val` en `calibration`;
- protected release only: immutable `test`, `background-test` en sealed
`challenge`.
Iedere sample draagt minimaal taak, split, `sample_id`, ruimtelijke `group_id`,
`source_family`, `temporal_family`, acquisition- en parent-rasteridentiteit,
native feature- en object-ID's, bounding box, ruwe en verwerkte imagehash,
labelhash, perceptual imagehash, labelgeometriehash en een canonieke recordhash.
Bij automatische toewijzing worden gekoppelde records eerst als één component
gegroepeerd. De generator faalt wanneer:
- een identiteit, object, bron-/tijdsfamilie, acquisition of parent-raster
meerdere splits raakt;
- exacte image-, label- of recordbytes meerdere splits raken;
- perceptuele of geometrische bijna-duplicaten meerdere splits raken;
- bounding boxes uit verschillende splits dichter liggen dan de vooraf
gedeclareerde onafhankelijkheidsbuffer;
- een verplichte split ontbreekt of een record niet valideerbaar is.
Bronvolgorde heeft geen invloed op de bron- of splitmanifesthash. De huidige
fixture bevat 21 samples over alle zes normatieve rollen en gebruikt een buffer
van 2.000 meter. Zij kan alleen door een expliciete codeparameter als synthetische
fixture worden geopend en draagt altijd `production_accuracy_use_allowed=false`.
Productiemodus vereist een strikt P3-manifest, exact provenance-record, vier
toegankelijke assetpaden en herberekende bytes-hashes. Dit is dus geen bewijs dat
het historische Belgische corpus onafhankelijk is. De Phase-3-bevinding van 24
cross-splitparen onder 2 km blijft blokkerend.
## Bescherming van test en challenge
De lokale workflow bindt evaluatie aan de exacte protected-manifesthash en
accepteert alleen de `test`- en `background-test`-ID's uit dat manifest.
Challengecases en -labels worden door de evaluator geweigerd. Configuraties zijn
vooraf vast. Per case bewaart `baseline-raw-predictions.json` de exacte
referenties, pre-filter- en post-filtervoorspellingen, configuratie en lineage.
`assert_training_inputs_safe()` en de twee echte trainingsdataset-builders
weigeren beschermde rollen, paden, inhoudshashes en alle relevante identiteit-
en lineagevelden. In productiemodus worden toegankelijke bronbytes en hun P3-
en provenancebinding opnieuw gecontroleerd; een padloos of hernoemd record faalt.
De regressietests bewijzen blokkering en een geldige development-run.
Dit is logische bescherming in de repository. Fysieke isolatie met een
afzonderlijke vault, beperkte credentials en een immutable accesslog is in de
huidige projectomgeving niet bewezen. Daarom staat
`protected_storage_isolation` in de productgates op `not_evaluable`; de lokale
firewall mag niet als vervanging voor die productcontrole worden beschreven.
## Stratificatie en failure-evidence
Iedere beschermde case declareert waar relevant regio/gemeente, stedelijk of
landelijk karakter, objectgrootte, bron/sensor, resolutie, seizoen/datum,
vegetatie/occlusie, moeilijkheid en context. Het metricrapport groepeert die velden en
legt support expliciet vast. Kritieke subgroepen moeten vóór een echte baseline
worden vastgesteld; ontbrekende of te kleine groepen blokkeren een release.
`baseline-raw-predictions.json` bewaart de ongesommeerde referenties,
pre-/postfiltervoorspellingen, matches, configuratie en lineage.
`failure-gallery.json` bewaart stabiele failure-ID's, taak, fouttype, strata en
concreet machineleesbaar bewijs. Een visuele gallery van echte productbeelden
kan pas worden gemaakt wanneer de beschermde imagery rechtmatig en gecontroleerd
bereikbaar is.
## Reproduceerbaarheid
Het benchmarkmanifest bindt repositorycommit, evaluator- en workflowversie,
alle drie Phase-4-scripts, de echte QA-service, bronfixtures, protected cases,
golden QA-fixture, Phase-3-manifesten, bronmatrix, metriekcontract, runtime en
beide splitmanifesten met SHA-256. Uit `status.json` wordt uitsluitend de
gate-relevante `/runtime/active_model`-projectie canoniek gehasht. Administratieve
velden zoals `generated_at`, Phase-4/5-status, documenten en evidence-run-ID's
zijn bewust geen benchmarkinput: zo kan het schrijven van de evidenceledger niet
zijn eigen runfingerprint veranderen. Review-, authority-, leakage-, vault- en
subgroepgates kunnen daardoor niet uit losse statusvelden slagen; zij vereisen
checksumgebonden product- en Phase-3-evidence. Een productbaseline wordt alleen
geaccepteerd wanneer dezelfde evaluator alle zeven taakfamilies in-process
herberekent en exact overeenkomt met checksumgebonden raw-, review-, authority-,
leakage-, vault- en CUDA-evidence. Dynamische UUID's uit de QA-service worden uit
de canonieke referentiescore verwijderd. Iedere run krijgt een content-addressed
ID; twee gelijke uitvoeringen leveren byte-identieke inhoud op en onverwachte
bestanden of submappen maken de immutable bundle ongeldig.
```powershell
python scripts/run_accuracy_phase4_benchmark.py --allow-product-blocked
python -m pytest backend/tests/test_accuracy_phase4_evaluation.py backend/tests/test_accuracy_phase4_evaluator_hardening.py backend/tests/test_accuracy_phase4_split_hardening.py -q -p no:cacheprovider
python -m ruff check scripts/accuracy_phase4_evaluator.py scripts/generate_accuracy_phase4_splits.py scripts/run_accuracy_phase4_benchmark.py backend/tests/test_accuracy_phase4_evaluation.py backend/tests/test_accuracy_phase4_evaluator_hardening.py backend/tests/test_accuracy_phase4_split_hardening.py
```
De machineleesbare bewijsset staat onder
`artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/`. De
actuele fasebeslissing staat in `12-release-gates.md` en `status.json`.
@@ -0,0 +1,124 @@
# Fase 4 — Baselinebenchmark
## Beslissing
Het lokale evaluatieharnas is reproduceerbaar en groen. Een betrouwbare
baseline van het actieve GeoIntel-productiemodel is in deze omgeving niet
uitvoerbaar. De productbenchmark is `fail` door de bevestigde Phase-3-leakage;
andere productgates blijven `not_evaluable` zonder governed bewijs. Er wordt
daarom geen productie-accuracy-, België-brede of promotieclaim afgeleid.
| Statusveld | Waarde |
| --- | --- |
| Benchmark-ID | `geointel-p4-reference-harness-v2` |
| Lokale harnasstatus | `pass` |
| Productbenchmark | `fail` |
| Promotie toegestaan | `false` |
| Phase 4 done | `false` |
| Phase 5 ready | `false` |
## Referentie-implementatie als nulmeting
De bestaande productiecode in `backend/app/services/qa_service.py` is via
`scripts/run_golden_qa_benchmark.py` uitgevoerd op vier bevroren golden
QA-scenario's. De dynamische service-UUID wordt niet meegenomen in de
canonieke inhoudshash.
| Golden scenario | Precision | Recall | F1 | Mean matched IoU |
| --- | ---: | ---: | ---: | ---: |
| Partial match | 0,50 | 0,50 | 0,50 | 0,8339768339652592 |
| Perfect match | 1,00 | 1,00 | 1,00 | 1,00 |
| No overlap | 0,00 | 0,00 | `null` | `null` |
| Multipolygon match | 1,00 | 1,00 | 1,00 | 1,00 |
De canonieke referentiehash is
`aeb0f6510352f4e205e4fc4e8c423110ca72c2142016c7af846d758865f258c6`.
Dit bewijst de rekenkundige regressiestabiliteit van de QA-service, niet de
kwaliteit van een detector of segmentatiemodel.
## Multi-task evaluatorbaseline
Negen synthetische, deterministische `test`/`background-test`-cases oefenen
zeven evaluatorfamilies en 15 concrete capabilityrecords uit. De gecombineerde
resultaathash is
`55cdba9cce4dcdc88cee0829cd510d7e624a3472feb9d33f7e681621a792eba3`.
De cases zijn bewust klein; hun scores testen formules, null-semantiek,
raw-retentie, stratificatie en foutclassificatie, niet productkwaliteit.
| Familie | Voornaamste fixture-uitkomst | Claimgrens |
| --- | --- | --- |
| Objectdetectie | P 0,667; R 1,000; F1 0,800; AP50 1,000; AP5095 0,901 | formule-/harnastest |
| Footprintsegmentatie | mean IoU 0,799; Dice 0,888; boundary F1 1,000 | formule-/harnastest |
| Categorisch raster | accuracy 0,833; macro F1 0,822; mean IoU 0,722 | metriekcontract, geen geleerd rastermodel |
| Vectorvergelijking | P/R/F1 0,500; mean matched IoU 1,000 | formule-/harnastest |
| Change detection | globale P/R/F1 0,500; afzonderlijke added/removed metrics | eventclassificatie zichtbaar |
| Terrein | MAE 0,275 m TAW; RMSE 0,287 m TAW; coverage 0,800 | eenheids-/coveragecontract |
| Datavalidatie | P/R/F1 0,667; één critical miss | fail-closed anomaliecontract |
Alle subgroepen hebben in deze kleine fixture onvoldoende statistische support.
Hun `release_gate_status` is daarom `not_evaluable`, met de supportreden apart
geregistreerd; geen gemiddelde kan dit omzetten in releasebewijs. De
95%-Wilsonintervallen zijn overeenkomstig breed.
## Ruwe voorspellingen en fouten
De workflow bewaart exacte referenties, pre-/postfiltervoorspellingen,
configuratie en lineage vóór iedere samenvatting. De failure gallery bevat 14
deterministische voorbeelden, waaronder FP/FN, boundary- en area-bias,
rastermisclassificatie, calibratie en een gemiste critical-validatieafwijking.
De failure-ID's zijn inhoudsgebonden en kunnen in regressietests worden
hergebruikt.
Relevante evidence:
- `baseline-raw-predictions.json` — exacte raw referenties, pre-/postfilteroutputs, config en lineage;
- `metric-report.json` — taak- en subgroepmetingen met support en intervallen;
- `failure-gallery.json` — machineleesbare fouttaxonomie en voorbeelden;
- `reference-implementation-baseline.json` — werkelijke QA-service-uitvoering;
- `benchmark-manifest.json` — alle input-, split-, code- en evaluatoridentiteiten.
De canonieke benchmarkmanifesthash is
`0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642`;
de exacte bestandshash is
`868dd7eb2dfa8344e417879ed3f5dd7c7d9e5673add7e3e2294c5cbde4b75d57`.
Evidence-run `p4-2.0.1-9677d0ef37db82bcf39b` bindt uitvoerbare codecommit
`70fb4b94e5cb7c248beec5a936ce186f38cc183c`. De evidence-manifestbestandshash
is `fdc15a95ee2a0754dfa169f4b41036e084b8d8909afc37fd8ea68ee6b9210f98`;
de release-gatereportbestandshash is
`e5f1c9c43c8da22acfa5486e641c010a278431f90634f91335b039ab7bdb50a4`.
Deze hashes bewijzen reproduceerbaarheid en integriteit, niet productaccuracy.
## Waarom de productbaseline niet uitvoerbaar is
De productgates zijn bewijsgebonden en kunnen niet vanuit losse statusvelden
groen worden gemaakt:
1. de actieve modelconfiguratie verwijst naar `/app/models/...pt`, die lokaal
niet als bestand beschikbaar is;
2. er is geen governed productmanifest met in-process herberekende raw evidence
voor alle zeven taakfamilies en een actueel CUDA/GPU-receipt;
3. een volledige GRB/PICC/UrbIS/DHMV/SPW/MDK-taak-/zoneportfolio ontbreekt;
4. een checksumgebonden reviewledger ontbreekt; historisch staat V56 op 0/180;
5. een productgebonden geometrische leakage-audit ontbreekt; historisch zijn er
24 cross-splitparen onder 2 km;
6. de Phase-3-leakagestatus is bevestigd `attention` en dus `fail`;
7. vaultisolatie met hash-chained accesslog is niet bewezen;
8. representatieve support over alle 13 vereiste subgroupdimensies ontbreekt.
Door de fail-first aggregatie maakt de bevestigde Phase-3-leakage de huidige
productbenchmark `fail`; ontbrekende productartefacten blijven afzonderlijk
`not_evaluable`. Geen van beide toestanden laat promotie toe.
Daarnaast waren Tower-corpora, gemounte modelvolumes en de productie-PostGIS/API
in Phase 3 expliciet onbereikbaar. Het harnas verzint daarvoor geen vervangende
ground truth en gebruikt OSM niet automatisch als gezagsbron voor gebouwen.
## Betekenis voor volgende training
Test- en challenge-data mogen niet worden geopend voor training,
thresholdselectie, modelselectie of iteratieve foutcorrectie. Eerst moeten de
representatieve review, nieuwe onafhankelijke splits, lokale gezagsdata,
protected vault en een checksumbare incumbent-run beschikbaar zijn. Daarna
worden modelkeuzes op `val` en operating points op `calibration` vooraf
vastgelegd; pas vervolgens mag één immutable kandidaat de protected test en
background-test doorlopen. Challenge-labels blijven sealed.
+109
View File
@@ -0,0 +1,109 @@
# Fase 4 — Releasegates
## Gateprincipe
GeoIntel gebruikt een conjunctieve, fail-closed beslissing: iedere verplichte
gate moet groen zijn. Een hogere gemiddelde score compenseert nooit een
ernstige regressie, ontbrekende support of een critical miss in een vereiste
regio, bron, context of taak.
Er wordt in Phase 4 geen arbitrair hoog accuracydoel verzonnen. Numerieke
releasecriteria blijven `not_frozen_without_reviewed_representative_incumbent_baseline`.
Ze worden pas vastgesteld uit taakrisico, operationele productvereisten,
datakwaliteit en een representatieve, gereviewde incumbentbaseline, en altijd
vóór protected-testtoegang.
## Lokale harnasgates
De volgende controles zijn in `release-gate-report.json` groen:
| Gate | Status | Bewijs |
| --- | --- | --- |
| Alle gedeclareerde taakfamilies | pass | zeven families en 15 capabilities gedeclareerd en geobserveerd |
| Split leakage | pass | zes code-owned rollen; exacte/near-duplicate/identity/2-km-gates groen voor de fixture |
| Training firewall | pass | protected path/role/lineage en padloze of gewijzigde bytes worden geweigerd |
| Geen protected modelselectie | pass | vooraf geregistreerde config; diagnostische curves selecteren niets |
| Ruwe voorspellingen | pass | exacte referenties, pre-/postfilteroutputs, config en lineage behouden |
| Referentie-implementatie | pass | vier golden cases via de echte `QaService` |
| Subgroepcontract | pass | alle 13 dimensies, support, CI en worst-stratum zichtbaar |
| Null-semantiek | pass | ongedefinieerd is `null`; promotion blijft uit |
Deze gates bewijzen dat de evaluator zich lokaal correct gedraagt. Ze bewijzen
niet dat het productiemodel voldoet.
Een test-only governed-contractfixture met 70 cases bewijst dat de groene route
structureel bereikbaar is en dat tampering wordt geweigerd. De gemockte runtime
en handgemaakte cases zijn uitdrukkelijk geen productbewijs.
## Productgates
De volgende actuele gates blokkeren Phase 4:
| Gate | Status | Objectief bewijs |
| --- | --- | --- |
| Actief model bereikbaar en hashbaar | not_evaluable | geconfigureerd `/app/models`-asset is lokaal afwezig |
| Volledige gezagsportfolio | not_evaluable | geen governed GRB/PICC/UrbIS/DHMV/SPW/MDK-taak-/zonebewijs |
| Representatieve menselijke review | not_evaluable | geen checksumgebonden reviewledger; historisch 0/180 |
| Ruimtelijke split-onafhankelijkheid | not_evaluable | geen productgebonden geometrische audit; historisch 24 paren <2 km |
| Phase-3 leakage opgelost | fail | actuele status `attention` |
| Fysieke protected storage isolation | not_evaluable | geen vaultbewijs met hash-chained accesslog |
| Uitgevoerde product-incumbent | not_evaluable | geen model/raw/config/CUDA-gebonden productmanifest |
| Representatieve subgroup-support | not_evaluable | geen productmetrics over alle 13 dimensies |
Door `fail > not_evaluable > pass` is de productbenchmarkstatus `fail`. Dat is
geen gemeten accuracy failure: de bevestigde leakagegate faalt en de overige
productmetingen zijn nog niet evalueerbaar. `promotion_allowed` blijft `false`.
## Toekomstige numerieke gatefreeze
Een latere gatefreeze moet per taak minimaal vastleggen:
- exacte model-, evaluator-, preprocessing-, bron- en splitmanifesthashes;
- klasse- en matchbeleid, operating threshold en NMS-configuratie;
- globale primaire metric met betrouwbaarheidsinterval;
- vereiste regio-, gemeente-, stedelijkheids-, objectgrootte-, bron-, sensor-,
resolutie-, seizoen-, datum-, vegetatie-, occlusie-, moeilijkheids- en
contextsubgroepen;
- minimale onafhankelijke AOI-/objectsupport per groep;
- non-inferioritymarge tegenover de incumbent;
- harde maxima voor kritieke false negatives, false positives,
topologiefouten en calibration error;
- abstention/coverage-regel voor onzekere gevallen;
- runtime-, GPU-, latency- en resourcecontract waar operationeel relevant.
Een releasebeslissing is alleen positief wanneer zowel de globale gate als
iedere kritieke subgroepgate groen is. `insufficient_support`, `null`, een
ontbrekende groep, ongeldige lineage, een checksumverschil of een gemiste
blocker/critical anomaly blokkeert.
## Beschermde evaluatievolgorde
1. Herstel of excludeer Phase-3-quarantine-items traceerbaar.
2. Laat representatieve labels menselijk beoordelen en freeze een nieuwe
corpusversie; wijzig V56 niet in place.
3. Genereer onafhankelijke `train`, `val`, `calibration`, `test`,
`background-test` en sealed `challenge`-manifesten; laat alle leakage-gates
slagen.
4. Plaats test/background-test en externe challenge-labels in een afzonderlijke
vault met beperkte credentials en hash-chained immutable accesslog.
5. Voer de incumbent uit en freeze targets op `val`, operating points op
`calibration` en operationele vereisten vóór protected toegang.
6. Train uitsluitend op `train`; selecteer checkpoints alleen op `val`.
7. Pre-registreer één immutable kandidaat en open `test` en `background-test`
één keer; challenge-labels blijven sealed.
8. Bewaar raw predictions, herbereken paired/subgroepmetrics in-process en neem
één fail-closed releasebeslissing.
9. Gebruik protected resultaten nooit als feedback voor dezelfde kandidaat- of
trainingsfamilie.
## Actuele fasebeslissing
Phase 4 blijft `in_progress`: het reproduceerbare lokale harnas is klaar, maar
de echte protected productbaseline kan nog niet geldig worden uitgevoerd.
Phase 5 blijft `not_ready`. Deze status verandert pas wanneer alle productgates
in dezelfde checksumbare workflow groen zijn; documentatie of fixture-scores
kunnen die voorwaarde niet omzeilen.
Normatieve evidence-run: `p4-2.0.1-9677d0ef37db82bcf39b`, gebonden aan
codecommit `70fb4b94e5cb7c248beec5a936ce186f38cc183c` en canonieke
benchmarkmanifesthash `0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642`.
+91 -6
View File
@@ -2,7 +2,7 @@
"schema_version": 1,
"program": "GeoIntel Accuracy Improvement Program",
"phase": "P4",
"generated_at": "2026-08-02T01:04:48+02:00",
"generated_at": "2026-08-02T04:40:51+02:00",
"scope": {
"product": "Belgium and the Belgian North Sea",
"active_building_model_claim": "Mol/Kempen only, operator review required",
@@ -104,9 +104,56 @@
]
},
"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"
"status": "in_progress",
"meaning": "The content-addressed local evaluation harness passes, but the governed product benchmark fails on confirmed Phase-3 leakage and remains not evaluable for missing product evidence.",
"workflow": "scripts/run_accuracy_phase4_benchmark.py",
"workflow_version": "2.0.1",
"evaluator_version": "2.1.0",
"split_generator_version": "1.3.0",
"local_harness_status": "pass",
"product_benchmark_status": "fail",
"phase4_done": false,
"evidence_run_id": "p4-2.0.1-9677d0ef37db82bcf39b",
"evidence_root": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b",
"repository_commit": "70fb4b94e5cb7c248beec5a936ce186f38cc183c",
"benchmark_manifest_sha256": "0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642",
"benchmark_file_sha256": "868dd7eb2dfa8344e417879ed3f5dd7c7d9e5673add7e3e2294c5cbde4b75d57",
"evidence_manifest_file_sha256": "fdc15a95ee2a0754dfa169f4b41036e084b8d8909afc37fd8ea68ee6b9210f98",
"release_gate_report_file_sha256": "e5f1c9c43c8da22acfa5486e641c010a278431f90634f91335b039ab7bdb50a4",
"product_gate_evidence_sha256": "c9f5e3de3ab6d64911f8807b26caa661ccf911a5fd6b995107edda2004836e0c",
"case_count": 9,
"task_family_count": 7,
"implemented_capability_count": 15,
"failure_example_count": 14,
"split_counts": {
"background-test": 2,
"calibration": 2,
"challenge": 4,
"test": 7,
"train": 3,
"val": 3
},
"blockers": [
"configured active model bytes are not locally accessible",
"no governed seven-task product baseline manifest with current CUDA receipt exists",
"Phase-3 leakage status is attention and therefore a failing product gate",
"no checksum-bound representative human review ledger exists",
"no governed zero-under-2-km product split audit exists",
"no protected vault evidence with hash-chained access log exists",
"no complete task-zone authority portfolio exists",
"no representative support over all thirteen subgroup dimensions exists"
],
"does_not_mean": [
"Phase 4 is complete",
"production accuracy is measured",
"Phase 5 is ready",
"training or promotion is allowed"
]
},
"phase5": {
"status": "not_ready",
"meaning": "Phase 5 remains blocked until every governed Phase-4 product gate passes in the same checksum-bound workflow.",
"blocked_by": "phase4"
},
"runtime": {
"cuda_available": true,
@@ -276,6 +323,35 @@
"static_inventory": "artifacts/evidence/accuracy/P2/source-contract-inventory.json",
"claim_boundary": "This is not a production migration deployment, corpus-release, accuracy or promotion result."
},
"phase4_evaluation": {
"status": "local_pass_product_fail",
"targeted_tests": {
"passed": 60,
"duration_seconds": 22.28
},
"relevant_regression_tests": {
"passed": 103,
"duration_seconds": 27.61,
"shell_provider": "C:/Program Files/Git/bin/bash.exe",
"note": "The Windows Store WSL bash stub was unavailable; the same shell syntax test passed with the installed Git Bash provider."
},
"ruff": "pass",
"format_check": "pass",
"compileall": "pass",
"python_typecheck": "not_configured",
"alembic_head": "202608010001",
"migration_and_provenance_tests": {
"passed": 29,
"duration_seconds": 5.73
},
"workflow_reproduction": {
"allow_product_blocked_exit": 0,
"default_exit": 2,
"byte_identical": true,
"status_bookkeeping_stable": true
},
"claim_boundary": "Local harness and contract gates pass. Product accuracy is not measured; Phase-3 leakage fails and missing governed product evidence remains not evaluable."
},
"golden_qa": {
"semantic_results_stable": true,
"byte_identical": false,
@@ -311,12 +387,21 @@
"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/09-full-data-scan.md"
"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"
],
"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",
"phase3_evidence_root": "artifacts/evidence/accuracy/P3",
"phase3_manifest": "artifacts/evidence/accuracy/P3/full-scan-manifest.json"
"phase3_manifest": "artifacts/evidence/accuracy/P3/full-scan-manifest.json",
"phase4_evidence_root": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b",
"phase4_evidence_manifest": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/evidence-manifest.json",
"phase4_benchmark_manifest": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/benchmark-manifest.json",
"phase4_release_gate_report": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/release-gate-report.json",
"phase4_metric_report": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/metric-report.json",
"phase4_failure_gallery": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/failure-gallery.json"
}