docs(accuracy): publish phase 4 benchmark evidence
This commit is contained in:
@@ -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, AP50–95, 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; AP50–95 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.
|
||||
@@ -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`.
|
||||
@@ -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"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user