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
+4 -2
View File
@@ -29,8 +29,10 @@ build/
!/artifacts/evidence/accuracy/P3/** !/artifacts/evidence/accuracy/P3/**
!/artifacts/evidence/accuracy/P4/ !/artifacts/evidence/accuracy/P4/
/artifacts/evidence/accuracy/P4/* /artifacts/evidence/accuracy/P4/*
!/artifacts/evidence/accuracy/P4/reference-harness-v2/ !/artifacts/evidence/accuracy/P4/runs/
!/artifacts/evidence/accuracy/P4/reference-harness-v2/** /artifacts/evidence/accuracy/P4/runs/*
!/artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/
!/artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b/**
!/artifacts/evidence/accuracy/P2/ !/artifacts/evidence/accuracy/P2/
!/artifacts/evidence/accuracy/P2/** !/artifacts/evidence/accuracy/P2/**
/.cache/ /.cache/
@@ -0,0 +1,157 @@
{
"benchmark_manifest_sha256": "0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642",
"critical_subgroup_policy": "Any required subgroup with insufficient support, missing metrics, a failed non-inferiority comparison or regression blocks promotion; averages cannot override it.",
"decision": "At least one mandatory Phase 4 gate failed; Phase 5 remains blocked.",
"gate_policy": "geointel-p4-evaluation-harness-v2",
"invalid_gate_states": {},
"local_gates": {
"all_declared_evaluator_families_exercised": {
"declared": [
"change_detection",
"footprint_segmentation",
"geospatial_data_validation",
"object_detection",
"raster_classification",
"terrain_interpretation",
"vector_comparison"
],
"observed": [
"change_detection",
"footprint_segmentation",
"geospatial_data_validation",
"object_detection",
"raster_classification",
"terrain_interpretation",
"vector_comparison"
],
"status": "pass"
},
"complete_raw_predictions_retained": {
"status": "pass",
"violating_samples": []
},
"implemented_capability_inventory": {
"capability_count": 15,
"status": "pass"
},
"manifest_training_firewall_contract": {
"checks": {
"clean_train_allowed": true,
"non_train_role_blocked": true,
"protected_path_blocked": true,
"renamed_protected_lineage_blocked": true
},
"status": "pass"
},
"normative_split_roles_and_leakage": {
"leakage_status": "pass",
"observed_roles": [
"background-test",
"calibration",
"challenge",
"test",
"train",
"val"
],
"required_roles": [
"background-test",
"calibration",
"challenge",
"test",
"train",
"val"
],
"status": "pass"
},
"protected_operating_point_contract": {
"evidence": "Protected cases carry pre-registered configurations. Fixed AP/risk-coverage diagnostics cannot select an operating point or feed back into training.",
"status": "pass"
},
"reference_implementation_baseline": {
"status": "pass"
},
"stratified_metric_contract": {
"observed_overall_status": "not_evaluable",
"status": "pass"
},
"undefined_metric_truth_table": {
"sample_id": "background-test-pure-empty",
"status": "pass"
}
},
"local_harness_status": "pass",
"missing_gate_names": {
"local": [],
"product": []
},
"numeric_model_release_targets": "not_frozen_without_reviewed_representative_incumbent_baseline",
"phase_decision": "blocked",
"product_benchmark_status": "fail",
"product_gates": {
"active_model_available_and_hash_verified": {
"configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"configured_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"reason": "Configured active model is not locally accessible.",
"status": "not_evaluable"
},
"authoritative_reference_portfolio_available": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"executed_product_incumbent_baseline": {
"checked_artifacts": [],
"derived_gates": {
"authoritative_reference_portfolio_available": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"human_review_complete": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"protected_storage_isolation": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"representative_product_subgroup_support": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"split_independence": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
}
},
"expected_path": "artifacts/evidence/accuracy/P4/product-baseline-manifest.json",
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"human_review_complete": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"phase3_leakage_resolved": {
"observed": "attention",
"status": "fail"
},
"protected_storage_isolation": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"representative_product_subgroup_support": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"split_independence": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
}
},
"promotion_allowed": false,
"schema_version": 2,
"status": "fail",
"unexpected_gate_names": {
"local": [],
"product": []
}
}
@@ -0,0 +1,11 @@
{
"reason": "Synthetic single-case fixtures do not provide independent product AOI clusters. AOI micro/macro and cluster-bootstrap evidence requires the protected product corpus.",
"required_future_outputs": [
"per-AOI primary metrics",
"micro and macro aggregation",
"paired candidate-minus-incumbent deltas",
"cluster-bootstrap confidence intervals"
],
"schema_version": 2,
"status": "not_evaluable"
}
@@ -0,0 +1,105 @@
{
"benchmark_id": "geointel-p4-reference-harness-v2",
"claim_boundary": "Synthetic deterministic reference cases validate evaluator behavior, not production model accuracy.",
"code": [
{
"path": "scripts/accuracy_phase4_evaluator.py",
"sha256": "d2e40f7978d3ff4ce7025eaaaefb06ccc76c269d6874f8b0f528739d535a1da1",
"size_bytes": 93353
},
{
"path": "scripts/generate_accuracy_phase4_splits.py",
"sha256": "d12842922bcd99b1672176df15a9cef250128e7d7fc662ab15e16f1c084ba570",
"size_bytes": 75923
},
{
"path": "scripts/run_accuracy_phase4_benchmark.py",
"sha256": "003ecb4babc7f56a6d13e9e1c08dda902b9b26203cc7d53476d4d5e083b8b85b",
"size_bytes": 123717
},
{
"path": "scripts/run_golden_qa_benchmark.py",
"sha256": "2c8a19fd92db8f07f491b8f7b34d9736384f81e02a6b83019fac71b101ebdaa0",
"size_bytes": 10856
},
{
"path": "backend/app/services/qa_service.py",
"sha256": "2d4f645410fbf2972e55dddbf5a85db5368b2b1932792cd522ec51c483339244",
"size_bytes": 15206
}
],
"evaluation_results_canonical_json_sha256": "55cdba9cce4dcdc88cee0829cd510d7e624a3472feb9d33f7e681621a792eba3",
"evaluator_version": "2.1.0",
"evidence_run_id": "p4-2.0.1-9677d0ef37db82bcf39b",
"inference_and_selection": {
"background_test_used_for_selection": false,
"challenge_labels_available": false,
"production_model_inference_executed": false,
"raw_predictions_retained": true,
"synthetic_reference_harness": true,
"test_used_for_selection": false,
"threshold_source": "pre_registered_configuration_only"
},
"input_manifest": {
"path": "input-manifest.json",
"sha256": "44f1c81d76baf4dc965afc2cd109ac165ae8fe0308f202018ea21bac786bcd0b"
},
"inputs": {
"golden_qa_manifest": {
"path": "fixtures/golden/golden_qa_benchmarks.json",
"sha256": "d60576ff7048ca3a048dc166e8977f3a31e9f8fa352be5ad222a017260e179e2",
"size_bytes": 2758
},
"phase3_full_scan": {
"path": "artifacts/evidence/accuracy/P3/full-scan-manifest.json",
"sha256": "28c1022d125f30bfb4aa362b57d8a90cf8c88270b2a9ac6582b86b6a44a08038",
"size_bytes": 755527
},
"phase3_leakage": {
"path": "artifacts/evidence/accuracy/P3/leakage-report.json",
"sha256": "8e1b7a24a840549d442bc03132ee1f21c6d50f8714cbb8d33430391a3769cd4e",
"size_bytes": 580
},
"protected_cases": {
"path": "fixtures/accuracy/p4/protected-baseline-cases.json",
"sha256": "c49a9c8d74cae2062552b012d9c275f65156c81d75b3e453860f5b859c1c5473",
"size_bytes": 20091
},
"split_source": {
"path": "fixtures/accuracy/p4/split-source-manifest.json",
"sha256": "27ec60406ac57a02f1335013ee344a43d4e0093e7ee1329ec22876da623f5bfc",
"size_bytes": 17331
}
},
"manifest_sha256": "0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642",
"product_baseline": {
"artifacts": [],
"manifest": null,
"product_gate_evidence_sha256": "c9f5e3de3ab6d64911f8807b26caa661ccf911a5fd6b995107edda2004836e0c",
"requested_path": "artifacts/evidence/accuracy/P4/product-baseline-manifest.json",
"validation_status": "not_evaluable"
},
"product_gate_evidence_sha256": "c9f5e3de3ab6d64911f8807b26caa661ccf911a5fd6b995107edda2004836e0c",
"reference_baseline_sha256": "aeb0f6510352f4e205e4fc4e8c423110ca72c2142016c7af846d758865f258c6",
"repository_commit": "70fb4b94e5cb7c248beec5a936ce186f38cc183c",
"runtime": {
"cuda_used_for_reference_harness": false,
"dependencies": {
"numpy": "2.2.2",
"pyproj": "3.7.2",
"shapely": "2.1.2"
},
"execution_device": "CPU deterministic evaluator arithmetic; no production model inference",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.13.2",
"python_implementation": "CPython"
},
"schema_version": 2,
"split_generator_version": "1.3.0",
"split_manifests": {
"development_sha256": "64e4fc986c2390bedfbe100062d4b06e1098689f4d4a9a9da13a7f67357c0493",
"leakage_status": "pass",
"protected_sha256": "e57ca1529654ef1c2527e84122ff26ec3533e7c70658250983968fbc5d4af410"
},
"workflow_version": "2.0.1"
}
@@ -0,0 +1,274 @@
{
"items": [
{
"calibration": {
"binning": "five fixed equal-width bins",
"bins": [
{
"accuracy": null,
"count": 0,
"lower": 0.0,
"mean_confidence": null,
"upper": 0.2
},
{
"accuracy": null,
"count": 0,
"lower": 0.2,
"mean_confidence": null,
"upper": 0.4
},
{
"accuracy": null,
"count": 0,
"lower": 0.4,
"mean_confidence": null,
"upper": 0.6
},
{
"accuracy": null,
"count": 0,
"lower": 0.6,
"mean_confidence": null,
"upper": 0.8
},
{
"accuracy": 0,
"count": 1,
"lower": 0.8,
"mean_confidence": 0.92,
"upper": 1.0
}
],
"brier": 0.8464,
"ece": 0.92,
"status": "computed"
},
"coverage_risk": [
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.0,
"total_prediction_count": 1
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.5,
"total_prediction_count": 1
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.7,
"total_prediction_count": 1
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.9,
"total_prediction_count": 1
}
],
"sample_id": "background-test-hard-negative",
"task": "object_detection"
},
{
"calibration": {
"bins": [],
"brier": null,
"ece": null,
"status": "undefined"
},
"coverage_risk": [
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.0,
"total_prediction_count": 0
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.5,
"total_prediction_count": 0
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.7,
"total_prediction_count": 0
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.9,
"total_prediction_count": 0
}
],
"sample_id": "background-test-pure-empty",
"task": "object_detection"
},
{
"calibration": {
"binning": "five fixed equal-width bins",
"bins": [
{
"accuracy": null,
"count": 0,
"lower": 0.0,
"mean_confidence": null,
"upper": 0.2
},
{
"accuracy": null,
"count": 0,
"lower": 0.2,
"mean_confidence": null,
"upper": 0.4
},
{
"accuracy": null,
"count": 0,
"lower": 0.4,
"mean_confidence": null,
"upper": 0.6
},
{
"accuracy": 0.5,
"count": 2,
"lower": 0.6,
"mean_confidence": 0.6499999999999999,
"upper": 0.8
},
{
"accuracy": 1,
"count": 1,
"lower": 0.8,
"mean_confidence": 0.9,
"upper": 1.0
}
],
"brier": 0.15333333333333332,
"ece": 0.13333333333333325,
"status": "computed"
},
"coverage_risk": [
{
"false_negative_count": 0,
"false_positive_count": 2,
"matched_reference_count": 2,
"reference_count": 2,
"reference_coverage": 1.0,
"retained_prediction_count": 4,
"retained_prediction_coverage": 1.0,
"risk": 0.5,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.0,
"total_prediction_count": 4
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 2,
"reference_count": 2,
"reference_coverage": 1.0,
"retained_prediction_count": 3,
"retained_prediction_coverage": 0.75,
"risk": 0.3333333333333333,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.5,
"total_prediction_count": 4
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 2,
"reference_count": 2,
"reference_coverage": 1.0,
"retained_prediction_count": 2,
"retained_prediction_coverage": 0.5,
"risk": 0.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.7,
"total_prediction_count": 4
},
{
"false_negative_count": 1,
"false_positive_count": 0,
"matched_reference_count": 1,
"reference_count": 2,
"reference_coverage": 0.5,
"retained_prediction_count": 1,
"retained_prediction_coverage": 0.25,
"risk": 0.5,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.9,
"total_prediction_count": 4
}
],
"sample_id": "det-test-flanders-urban",
"task": "object_detection"
}
],
"note": "Fixed diagnostic bins and risk thresholds test metric arithmetic; they do not select or change any operating point.",
"schema_version": 2,
"selection_allowed": false,
"status": "fixture_diagnostic_only"
}
@@ -0,0 +1,12 @@
{
"future_gate_contract": {
"aggregate_improvement_may_mask_subgroup_regression": false,
"global_and_critical_subgroups_required": true,
"missing_or_insufficient_support": "not_evaluable",
"numeric_margin": "to_be_frozen_before_protected_access",
"unit": "paired independent AOI"
},
"reason": "Phase 4 has no valid real incumbent product baseline and no pre-registered candidate; synthetic fixture values cannot define non-inferiority.",
"schema_version": 2,
"status": "not_evaluable"
}
@@ -0,0 +1,334 @@
{
"allowed_splits": [
"calibration",
"train",
"val"
],
"assignment_algorithm": "group-before-split-deficit-balancer-v1",
"assignment_mode": "preassigned",
"assignment_seed": "geointel-p4-group-split-v1",
"claim_boundary": "Synthetic contract fixtures for evaluator regression only; never production accuracy evidence.",
"crs": "EPSG:31370",
"dataset_version": "geointel-p4-harness-fixture-v2",
"generator_version": "1.3.0",
"independence_buffer_m": 2000.0,
"label_geometry_hamming_threshold": 2,
"mandatory_split_roles": [
"train",
"val",
"calibration",
"test",
"background-test",
"challenge"
],
"manifest_role": "development_and_calibration",
"manifest_sha256": "64e4fc986c2390bedfbe100062d4b06e1098689f4d4a9a9da13a7f67357c0493",
"perceptual_hamming_threshold": 4,
"samples": [
{
"acquisition_date": "2025-01-07",
"acquisition_id": "acquisition-07",
"bbox": [
70000.0,
30000.0,
70100.0,
30100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g07",
"label_geometry_fingerprint": "dba609f34cb9826b",
"label_geometry_hash": "6767676767676767676767676767676767676767676767676767676767676767",
"label_sha256": "4747474747474747474747474747474747474747474747474747474747474747",
"native_feature_ids": [
"native-07-1"
],
"object_ids": [
"o21"
],
"parent_raster_id": "parent-raster-07",
"perceptual_image_hash": "c4316514fed98f6b",
"processed_image_sha256": "2727272727272727272727272727272727272727272727272727272727272727",
"raw_image_sha256": "0707070707070707070707070707070707070707070707070707070707070707",
"record_sha256": "3f04e62eb97c0a067a4742084a9665607beab43a5c0392a89c77bc10cb472136",
"sample_id": "calibration-det-a",
"source_family": "scene-07",
"split": "calibration",
"task": "object_detection",
"temporal_family": "temporal-07"
},
{
"acquisition_date": "2025-01-08",
"acquisition_id": "acquisition-08",
"bbox": [
90000.0,
30000.0,
90100.0,
30100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g08",
"label_geometry_fingerprint": "627df87eea48aec0",
"label_geometry_hash": "6868686868686868686868686868686868686868686868686868686868686868",
"label_sha256": "4848484848484848484848484848484848484848484848484848484848484848",
"native_feature_ids": [
"native-08-1"
],
"object_ids": [
"o22"
],
"parent_raster_id": "parent-raster-08",
"perceptual_image_hash": "518ba3145333c08c",
"processed_image_sha256": "2828282828282828282828282828282828282828282828282828282828282828",
"raw_image_sha256": "0808080808080808080808080808080808080808080808080808080808080808",
"record_sha256": "d3cec9ed2d1a4c7380958a960ac24d1dbc5a729ccb81cc0f22016ee348137a07",
"sample_id": "calibration-seg-b",
"source_family": "scene-08",
"split": "calibration",
"task": "footprint_segmentation",
"temporal_family": "temporal-08"
},
{
"acquisition_date": "2025-01-01",
"acquisition_id": "acquisition-01",
"bbox": [
10000.0,
10000.0,
10100.0,
10100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g01",
"label_geometry_fingerprint": "c0f62e16b4033ee9",
"label_geometry_hash": "6161616161616161616161616161616161616161616161616161616161616161",
"label_sha256": "4141414141414141414141414141414141414141414141414141414141414141",
"native_feature_ids": [
"native-01-1"
],
"object_ids": [
"o01"
],
"parent_raster_id": "parent-raster-01",
"perceptual_image_hash": "dcef24412401d4f9",
"processed_image_sha256": "2121212121212121212121212121212121212121212121212121212121212121",
"raw_image_sha256": "0101010101010101010101010101010101010101010101010101010101010101",
"record_sha256": "16142e63a8e93d20d1fcfb66cfd8aeeebc6cbe7784f5ce8c403cd4b2f6e5dcac",
"sample_id": "det-train-a",
"source_family": "scene-01",
"split": "train",
"task": "object_detection",
"temporal_family": "temporal-01"
},
{
"acquisition_date": "2025-01-03",
"acquisition_id": "acquisition-03",
"bbox": [
30000.0,
10000.0,
30100.0,
10100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g03",
"label_geometry_fingerprint": "30820f2c124a3ff0",
"label_geometry_hash": "6363636363636363636363636363636363636363636363636363636363636363",
"label_sha256": "4343434343434343434343434343434343434343434343434343434343434343",
"native_feature_ids": [
"native-03-1"
],
"object_ids": [
"o03"
],
"parent_raster_id": "parent-raster-03",
"perceptual_image_hash": "75e36e008b4a6702",
"processed_image_sha256": "2323232323232323232323232323232323232323232323232323232323232323",
"raw_image_sha256": "0303030303030303030303030303030303030303030303030303030303030303",
"record_sha256": "60c78f7f4cb086681fa38d3a2e160824003cb646890faf6ddde142eab585adc8",
"sample_id": "raster-train-a",
"source_family": "scene-03",
"split": "train",
"task": "raster_classification",
"temporal_family": "temporal-03"
},
{
"acquisition_date": "2025-01-02",
"acquisition_id": "acquisition-02",
"bbox": [
20000.0,
10000.0,
20100.0,
10100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g02",
"label_geometry_fingerprint": "666a0fc2d26265ee",
"label_geometry_hash": "6262626262626262626262626262626262626262626262626262626262626262",
"label_sha256": "4242424242424242424242424242424242424242424242424242424242424242",
"native_feature_ids": [
"native-02-1"
],
"object_ids": [
"o02"
],
"parent_raster_id": "parent-raster-02",
"perceptual_image_hash": "030bcdd3bc87412e",
"processed_image_sha256": "2222222222222222222222222222222222222222222222222222222222222222",
"raw_image_sha256": "0202020202020202020202020202020202020202020202020202020202020202",
"record_sha256": "b92bff2d0e039441711100b95178a6bebab0052db1b7e35259dcbcb227d50448",
"sample_id": "seg-train-a",
"source_family": "scene-02",
"split": "train",
"task": "footprint_segmentation",
"temporal_family": "temporal-02"
},
{
"acquisition_date": "2025-01-05",
"acquisition_id": "acquisition-05",
"bbox": [
30000.0,
30000.0,
30100.0,
30100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g05",
"label_geometry_fingerprint": "14ceff3640a013eb",
"label_geometry_hash": "6565656565656565656565656565656565656565656565656565656565656565",
"label_sha256": "4545454545454545454545454545454545454545454545454545454545454545",
"native_feature_ids": [
"native-05-1"
],
"object_ids": [
"o05"
],
"parent_raster_id": "parent-raster-05",
"perceptual_image_hash": "828b99671c3f2f39",
"processed_image_sha256": "2525252525252525252525252525252525252525252525252525252525252525",
"raw_image_sha256": "0505050505050505050505050505050505050505050505050505050505050505",
"record_sha256": "bc142eb7eb7ed86621984ff89184b1b79cfaa13e1011832c8b8175312761ea91",
"sample_id": "val-change-b",
"source_family": "scene-05",
"split": "val",
"task": "change_detection",
"temporal_family": "temporal-05"
},
{
"acquisition_date": "2025-01-06",
"acquisition_id": "acquisition-06",
"bbox": [
50000.0,
30000.0,
50100.0,
30100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g06",
"label_geometry_fingerprint": "a1d9bbb93ba6d6da",
"label_geometry_hash": "6666666666666666666666666666666666666666666666666666666666666666",
"label_sha256": "4646464646464646464646464646464646464646464646464646464646464646",
"native_feature_ids": [
"native-06-1"
],
"object_ids": [
"o06"
],
"parent_raster_id": "parent-raster-06",
"perceptual_image_hash": "11c11105b0d10635",
"processed_image_sha256": "2626262626262626262626262626262626262626262626262626262626262626",
"raw_image_sha256": "0606060606060606060606060606060606060606060606060606060606060606",
"record_sha256": "a861ffb75dba0e50e4082232620521465acecdbc0cf1f6dee9b7509d9c0d480e",
"sample_id": "val-terrain-c",
"source_family": "scene-06",
"split": "val",
"task": "terrain_interpretation",
"temporal_family": "temporal-06"
},
{
"acquisition_date": "2025-01-04",
"acquisition_id": "acquisition-04",
"bbox": [
10000.0,
30000.0,
10100.0,
30100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g04",
"label_geometry_fingerprint": "a559b46cba64e501",
"label_geometry_hash": "6464646464646464646464646464646464646464646464646464646464646464",
"label_sha256": "4444444444444444444444444444444444444444444444444444444444444444",
"native_feature_ids": [
"native-04-1"
],
"object_ids": [
"o04"
],
"parent_raster_id": "parent-raster-04",
"perceptual_image_hash": "2e3b331cc01536c9",
"processed_image_sha256": "2424242424242424242424242424242424242424242424242424242424242424",
"raw_image_sha256": "0404040404040404040404040404040404040404040404040404040404040404",
"record_sha256": "e2a931aa255519d0bd87655d92132164923b369a31e12583c8aa499610044a30",
"sample_id": "val-vector-a",
"source_family": "scene-04",
"split": "val",
"task": "vector_comparison",
"temporal_family": "temporal-04"
}
],
"schema_version": 1,
"selection_access_allowed_by_split": {
"calibration": true,
"train": false,
"val": true
},
"source_manifest_sha256": "1c75c875d4c297d046117bb9393ba5e648f13d3358ea92cb65374869c8f5fc01",
"source_trust": {
"mode": "synthetic_fixture",
"policy_id": "geointel-p4-synthetic-fixture-v2",
"production_accuracy_use_allowed": false
},
"training_access_allowed_by_split": {
"calibration": false,
"train": true,
"val": false
}
}
@@ -0,0 +1,48 @@
{
"claim_boundary": "Synthetic deterministic reference cases validate evaluator behavior, not production model accuracy.",
"observed_codes": [
{
"error_code": "D-VALIDATION-FN",
"kind": "validation_false_negative"
},
{
"error_code": "D-VALIDATION-FP",
"kind": "validation_false_positive"
},
{
"error_code": "M-AREA-BIAS",
"kind": "area_bias"
},
{
"error_code": "M-CLASS",
"kind": "raster_misclassification"
},
{
"error_code": "M-FN-MISSED",
"kind": "event_false_negative"
},
{
"error_code": "M-FN-MISSED",
"kind": "false_negative"
},
{
"error_code": "M-FP-CONFUSER",
"kind": "event_false_positive"
},
{
"error_code": "M-FP-CONFUSER",
"kind": "false_positive"
},
{
"error_code": "M-MISCALIBRATED",
"kind": "miscalibrated"
},
{
"error_code": "P-PARTIAL",
"kind": "terrain_missing"
}
],
"observed_failure_count": 14,
"schema_version": 2,
"source": "docs/accuracy-program/05-metric-framework.md section 4"
}
@@ -0,0 +1,300 @@
{
"benchmark_id": "geointel-p4-reference-harness-v2",
"claim_boundary": "Synthetic deterministic reference cases validate evaluator behavior, not production model accuracy.",
"evaluator_families": [
"change_detection",
"footprint_segmentation",
"geospatial_data_validation",
"object_detection",
"raster_classification",
"terrain_interpretation",
"vector_comparison"
],
"evaluator_version": "2.1.0",
"gate_states": [
"fail",
"not_evaluable",
"pass"
],
"implemented_capabilities": [
{
"capability_id": "model_object_detection",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "synthetic_contract_case_only",
"implementation_kind": "model_inference_pipeline",
"implementation_paths": [
"backend/app/services/detection_service.py"
],
"suitable_metrics": [
"precision",
"recall",
"F1",
"AP50",
"AP50-95",
"IoU",
"ECE",
"Brier",
"coverage-risk"
],
"task": "object_detection"
},
{
"capability_id": "building_proposal_filtering",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "not_separately_benchmarked",
"implementation_kind": "supporting_candidate_classifier",
"implementation_paths": [
"scripts/train_building_proposal_classifier.py",
"scripts/evaluate_belgium_building_candidate.py"
],
"suitable_metrics": [
"candidate precision",
"candidate recall",
"F1",
"calibration"
],
"task": "object_detection"
},
{
"capability_id": "footprint_segmentation",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "synthetic_contract_case_only",
"implementation_kind": "model_inference_pipeline",
"implementation_paths": [
"backend/app/services/segmentation_service.py",
"backend/app/services/segmentation_adapter.py"
],
"suitable_metrics": [
"object precision",
"object recall",
"F1",
"IoU",
"Dice",
"boundary F1",
"centroid distance",
"area error",
"topology"
],
"task": "footprint_segmentation"
},
{
"capability_id": "detection_and_vector_qa",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "synthetic_contract_case_only",
"implementation_kind": "deterministic_geospatial_comparison",
"implementation_paths": [
"backend/app/services/qa_service.py",
"backend/app/services/detection_qa_service.py",
"backend/app/services/quality_check_service.py"
],
"suitable_metrics": [
"precision",
"recall",
"F1",
"IoU",
"topology",
"coverage"
],
"task": "vector_comparison"
},
{
"capability_id": "vector_clip_buffer_intersect",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "covered_by_family_not_separately_benchmarked",
"implementation_kind": "deterministic_vector_processing",
"implementation_paths": [
"backend/app/services/vector_operations_service.py",
"backend/app/services/vector_feature_service.py"
],
"suitable_metrics": [
"geometry validity",
"CRS correctness",
"area conservation",
"feature counts",
"topology"
],
"task": "vector_comparison"
},
{
"capability_id": "temporal_vector_change",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "synthetic_contract_case_only",
"implementation_kind": "deterministic_change_detection",
"implementation_paths": [
"backend/app/services/change_detection_service.py"
],
"suitable_metrics": [
"event precision",
"event recall",
"event F1",
"IoU"
],
"task": "change_detection"
},
{
"capability_id": "thematic_raster_interpretation",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "synthetic_metric_contract_only_no_generic_learned_classifier_claim",
"implementation_kind": "deterministic_source_interpretation",
"implementation_paths": [
"backend/app/services/thematic_raster_analysis_service.py"
],
"suitable_metrics": [
"pixel accuracy",
"per-class F1",
"per-class IoU",
"mean IoU"
],
"task": "raster_classification"
},
{
"capability_id": "raster_clip_reproject_indices",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "covered_by_family_not_separately_benchmarked",
"implementation_kind": "deterministic_raster_processing",
"implementation_paths": [
"backend/app/services/raster_service.py",
"backend/app/services/raster_operations_service.py"
],
"suitable_metrics": [
"CRS/transform preservation",
"pixel alignment",
"nodata",
"numeric tolerance"
],
"task": "raster_classification"
},
{
"capability_id": "raster_partition_mosaic",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "not_separately_benchmarked",
"implementation_kind": "deterministic_raster_partitioning",
"implementation_paths": [
"backend/app/services/raster_partition_analysis_service.py"
],
"suitable_metrics": [
"seam equality",
"coverage completeness",
"resolution consistency"
],
"task": "raster_classification"
},
{
"capability_id": "terrain_height_interpretation",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "synthetic_contract_case_only",
"implementation_kind": "deterministic_continuous_raster_analysis",
"implementation_paths": [
"backend/app/services/terrain_analysis_service.py",
"backend/app/services/spw_terrain_service.py"
],
"suitable_metrics": [
"MAE",
"RMSE",
"bias",
"coverage",
"unit integrity"
],
"task": "terrain_interpretation"
},
{
"capability_id": "flood_hazard_interpretation",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "covered_by_family_not_separately_benchmarked",
"implementation_kind": "deterministic_scenario_raster_analysis",
"implementation_paths": [
"backend/app/services/flood_hazard_analysis_service.py"
],
"suitable_metrics": [
"depth MAE/RMSE",
"hazard-class IoU",
"coverage",
"scenario identity"
],
"task": "terrain_interpretation"
},
{
"capability_id": "bathymetry_interpretation",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "covered_by_family_not_separately_benchmarked",
"implementation_kind": "deterministic_vertical_reference_analysis",
"implementation_paths": [
"backend/app/services/bathymetry_raster_analysis_service.py",
"backend/app/services/mdk_bathymetry_probe_service.py"
],
"suitable_metrics": [
"MAE",
"RMSE",
"bias",
"coverage",
"vertical-datum integrity"
],
"task": "terrain_interpretation"
},
{
"capability_id": "data_contract_validation_and_scan",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "synthetic_contract_case_only",
"implementation_kind": "deterministic_validation",
"implementation_paths": [
"backend/app/services/data_contract_validation.py",
"scripts/run_accuracy_phase3_full_data_scan.py"
],
"suitable_metrics": [
"anomaly precision",
"anomaly recall",
"anomaly F1",
"critical misses"
],
"task": "geospatial_data_validation"
},
{
"capability_id": "aoi_partition_orchestration",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "not_separately_benchmarked",
"implementation_kind": "deterministic_orchestration",
"implementation_paths": [
"backend/app/services/aoi_operation_service.py",
"backend/app/services/aoi_operation_executor.py",
"backend/app/services/aoi_operation_worker.py"
],
"suitable_metrics": [
"partition completeness",
"overlap/gap",
"idempotency",
"resume correctness"
],
"task": "geospatial_data_validation"
},
{
"capability_id": "geo_assistant_orchestration",
"claim_boundary": "A family mapping is not evidence that this capability has a separate representative product benchmark.",
"evaluation_status": "no_independent_accuracy_score_underlying_tool_results_are_authoritative",
"implementation_kind": "tool_orchestration_interface",
"implementation_paths": [
"backend/app/services/geo_assistant_service.py"
],
"suitable_metrics": [
"tool-selection correctness",
"grounding",
"unsupported-claim rate"
],
"task": "geospatial_data_validation"
}
],
"metric_contract": {
"path": "docs/accuracy-program/05-metric-framework.md",
"sha256": "18abfc21964b7d98848d8ae513afce242184980c9517c9184d40efd9165ea00d",
"size_bytes": 28053
},
"protected_policy": {
"diagnostic_curves_select_operating_point": false,
"operating_point_selection_allowed": false,
"test_feedback_allowed": false,
"threshold_selection_source": "pre_registered_configuration_only"
},
"schema_version": 2,
"split_generator_version": "1.3.0",
"undefined_value_policy": "Undefined denominators are null with numerator, denominator and support; they are never coerced to a perfect score.",
"workflow_version": "2.0.1"
}
@@ -0,0 +1,129 @@
{
"artifact_count": 24,
"artifacts": [
{
"path": "acceptance-gates.json",
"sha256": "e5f1c9c43c8da22acfa5486e641c010a278431f90634f91335b039ab7bdb50a4",
"size_bytes": 5517
},
{
"path": "aoi-metrics.json",
"sha256": "2f5424c4a624316d0c8e71696440080d535ec0682831a80d664694f7cc198e94",
"size_bytes": 430
},
{
"path": "baseline-raw-predictions.json",
"sha256": "d03ec665fcb3efb9546c1e5a42888cd2775307e3c7ba90d225389caca7e1140f",
"size_bytes": 42170
},
{
"path": "benchmark-manifest.json",
"sha256": "868dd7eb2dfa8344e417879ed3f5dd7c7d9e5673add7e3e2294c5cbde4b75d57",
"size_bytes": 4212
},
{
"path": "calibration-metrics.json",
"sha256": "ad54f924512529deba6d869736ca3f72dde8651227943c0b9e8695912e7a0c3d",
"size_bytes": 8858
},
{
"path": "candidate-vs-incumbent.json",
"sha256": "7ee6fb5722b43fa0dc0a8e966547c954c62c7401b10e6f727e21d332b34f077f",
"size_bytes": 517
},
{
"path": "development-split-manifest.json",
"sha256": "636b1d38695ade99ee3896a2d870fcaf0635168e8e25657353ac51a7bfba2248",
"size_bytes": 12424
},
{
"path": "error-taxonomy.json",
"sha256": "acf2804e482dfdca1df05ef2c6e40701b82877466761b880b314e46699f470dc",
"size_bytes": 1116
},
{
"path": "evaluation-contract.json",
"sha256": "797598cf3060cffb30f352ed022459c3be2e656c19b190c38b66fb99dbe54bd2",
"size_bytes": 11057
},
{
"path": "failure-gallery.json",
"sha256": "eaf19cbad22a44fc2b6420ff0591536a61560815f472bf7fb54ed0179bd93986",
"size_bytes": 14852
},
{
"path": "generation-status.json",
"sha256": "3311ae1ddf622f94c1a2e596b24454e0c033428b5d767d8cc3c67ee4e33a1a63",
"size_bytes": 374
},
{
"path": "human-review-summary.json",
"sha256": "1ff22096bccb03ca5188d53bfe5f5d4a8ac937fdb43265c20b676f9211d1abbd",
"size_bytes": 201
},
{
"path": "input-manifest.json",
"sha256": "44f1c81d76baf4dc965afc2cd109ac165ae8fe0308f202018ea21bac786bcd0b",
"size_bytes": 6092
},
{
"path": "latency-and-reliability.json",
"sha256": "7c89bc0562b99565f6b1c54eac562f129192481ac61571ab48fb69a1f8553f95",
"size_bytes": 263
},
{
"path": "leakage-gate-report.json",
"sha256": "ea532fc95b4e3be30299b6ec1939a42166c8107214b4264208c1a10c2abc0ff8",
"size_bytes": 1221
},
{
"path": "metric-report.json",
"sha256": "6c92f31c1b0363d031e03968a50985e4e27075dc33ef03e9ce5e6a7fbb30c4f0",
"size_bytes": 403544
},
{
"path": "object-metrics.json",
"sha256": "30cb52b1ee18a75bb68304ec6b88f54455a53e68052392232dec370ac3a68a10",
"size_bytes": 24826
},
{
"path": "protected-split-manifest.json",
"sha256": "f294af0b2957af7de6ec533e4495d9d0d75da86cc0d29e265ed6998104829c64",
"size_bytes": 20986
},
{
"path": "reference-implementation-baseline.json",
"sha256": "1c8fd9970d91449842922ba38f733da9d99142ce5f2a03736d14f9f61ad849a6",
"size_bytes": 4710
},
{
"path": "release-gate-report.json",
"sha256": "e5f1c9c43c8da22acfa5486e641c010a278431f90634f91335b039ab7bdb50a4",
"size_bytes": 5517
},
{
"path": "split-and-leakage-audit.json",
"sha256": "ea532fc95b4e3be30299b6ec1939a42166c8107214b4264208c1a10c2abc0ff8",
"size_bytes": 1221
},
{
"path": "stratified-metrics.json",
"sha256": "66f7b7ed639cef400e52cada5d2274f8c185616b4beb6b44bcc89a8aa9929048",
"size_bytes": 326587
},
{
"path": "tile-metrics.json",
"sha256": "0920c5d0b2076ed1ebcc06144f4cf786c3a18d1d67f9e388314f7f9ccb857256",
"size_bytes": 6344
},
{
"path": "workflow-summary.json",
"sha256": "bcb4469fcaf4c360ed716037484117edf4e93c6b79bbdcf7f75cd3f79ca093a6",
"size_bytes": 1035
}
],
"benchmark_id": "geointel-p4-reference-harness-v2",
"claim_boundary": "Immutable local reference-harness evidence only; product accuracy and release remain blocked while product gates are not evaluable or fail.",
"phase": "P4",
"schema_version": 2
}
@@ -0,0 +1,537 @@
{
"failure_count": 14,
"items": [
{
"contexts": [],
"error_code": "P-PARTIAL",
"evidence": {
"missing_index": 3
},
"failure_id": "1397377fd37cd400f01a",
"kind": "terrain_missing",
"metadata": {
"context": "terrain_profile",
"date": "2023-01-01",
"difficulty": "normal",
"label_review_state": "fixture_reviewed",
"municipality": "Hasselt",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "flanders",
"resolution_m": 5,
"season": "not_applicable",
"sensor": "elevation-raster",
"source": "fixture-dhmv",
"tile_edge": false,
"urbanity": "rural",
"vegetation": "moderate"
},
"sample_id": "terrain-test-flanders-rural",
"secondary_error_codes": [],
"task": "terrain_interpretation"
},
{
"contexts": [],
"error_code": "M-FN-MISSED",
"evidence": {
"bbox": [
10,
0,
15,
5
],
"class": "removed",
"id": "r2"
},
"failure_id": "28a0be1f9d4960036f3a",
"kind": "event_false_negative",
"metadata": {
"context": "industrial_change",
"date": "2024-05-01/2025-05-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Liège",
"object_size": "mixed",
"occlusion": "none",
"ood": false,
"region": "wallonia",
"resolution_m": 0.5,
"season": "multi-date",
"sensor": "vector",
"source": "fixture-picc-temporal",
"tile_edge": false,
"urbanity": "industrial",
"vegetation": "low"
},
"sample_id": "change-test-wallonia-industrial",
"secondary_error_codes": [],
"task": "change_detection"
},
{
"contexts": [],
"error_code": "M-AREA-BIAS",
"evidence": {
"prediction_id": "p1",
"reference_id": "r1",
"relative_area_error": -0.1
},
"failure_id": "2d53b69d95b17bf49580",
"kind": "area_bias",
"metadata": {
"context": "rural_buildings",
"date": "2025-04-20",
"difficulty": "normal",
"label_review_state": "fixture_reviewed",
"municipality": "Namur",
"object_size": "large",
"occlusion": "none",
"ood": false,
"region": "wallonia",
"resolution_m": 0.5,
"season": "spring",
"sensor": "synthetic-rgb",
"source": "fixture-picc",
"tile_edge": false,
"urbanity": "rural",
"vegetation": "low"
},
"sample_id": "seg-test-wallonia-rural",
"secondary_error_codes": [],
"task": "footprint_segmentation"
},
{
"contexts": [
"tile_edge"
],
"error_code": "M-CLASS",
"evidence": {
"column": 1,
"pixel_index": 9,
"prediction": 1,
"reason": "class_mismatch",
"reference": 2,
"row": 2
},
"failure_id": "2fabc83865f9e1f49efc",
"kind": "raster_misclassification",
"metadata": {
"context": "dense_urban_raster",
"date": "2025-10-05",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Brussel",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "brussels",
"resolution_m": 1,
"season": "autumn",
"sensor": "synthetic-multispectral",
"source": "fixture-thematic-raster",
"tile_edge": true,
"urbanity": "urban",
"vegetation": "moderate"
},
"sample_id": "raster-test-brussels-urban",
"secondary_error_codes": [],
"task": "raster_classification"
},
{
"contexts": [
"high_confidence",
"tile_edge"
],
"error_code": "M-FP-CONFUSER",
"evidence": {
"bbox": [
20,
20,
35,
35
],
"class": "building",
"confidence": 0.92,
"id": "p-hard-fp"
},
"failure_id": "39eae35c6660b1ac1bcd",
"kind": "false_positive",
"metadata": {
"context": "coastal_hard_negative",
"date": "2025-07-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Oostende",
"object_size": "empty",
"occlusion": "none",
"ood": false,
"region": "flanders",
"resolution_m": 0.25,
"season": "summer",
"sensor": "synthetic-rgb",
"source": "fixture-orthophoto",
"tile_edge": true,
"urbanity": "urban",
"vegetation": "moderate"
},
"sample_id": "background-test-hard-negative",
"secondary_error_codes": [
"M-MISCALIBRATED"
],
"task": "object_detection"
},
{
"contexts": [],
"error_code": "D-VALIDATION-FN",
"evidence": {
"anomaly": "D-MISSING-PROVENANCE",
"severity": "critical"
},
"failure_id": "40e33e21c399cc657f26",
"kind": "validation_false_negative",
"metadata": {
"context": "data_contract",
"date": "2025-01-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "not_applicable",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "national",
"resolution_m": null,
"season": "not_applicable",
"sensor": "mixed",
"source": "fixture-contracts",
"tile_edge": false,
"urbanity": "mixed",
"vegetation": "mixed"
},
"sample_id": "validation-test-national",
"secondary_error_codes": [],
"task": "geospatial_data_validation"
},
{
"contexts": [],
"error_code": "M-FP-CONFUSER",
"evidence": {
"bbox": [
20,
0,
25,
5
],
"class": "removed",
"confidence": 0.65,
"id": "p2"
},
"failure_id": "49560fb2dcb347c4cff5",
"kind": "event_false_positive",
"metadata": {
"context": "industrial_change",
"date": "2024-05-01/2025-05-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Liège",
"object_size": "mixed",
"occlusion": "none",
"ood": false,
"region": "wallonia",
"resolution_m": 0.5,
"season": "multi-date",
"sensor": "vector",
"source": "fixture-picc-temporal",
"tile_edge": false,
"urbanity": "industrial",
"vegetation": "low"
},
"sample_id": "change-test-wallonia-industrial",
"secondary_error_codes": [],
"task": "change_detection"
},
{
"contexts": [],
"error_code": "M-MISCALIBRATED",
"evidence": {
"brier": 0.15333333333333332,
"claim_boundary": "diagnostic deviation only; not a representative population-calibration claim",
"ece": 0.13333333333333325,
"prediction_support": 3
},
"failure_id": "8d4113e9688207b68f98",
"kind": "miscalibrated",
"metadata": {
"context": "dense_urban",
"date": "2025-06-15",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Antwerpen",
"object_size": "mixed",
"occlusion": "partial",
"ood": false,
"region": "flanders",
"resolution_m": 0.25,
"season": "summer",
"sensor": "synthetic-rgb",
"source": "fixture-orthophoto",
"tile_edge": false,
"urbanity": "urban",
"vegetation": "moderate"
},
"sample_id": "det-test-flanders-urban",
"secondary_error_codes": [],
"task": "object_detection"
},
{
"contexts": [
"tile_edge"
],
"error_code": "M-CLASS",
"evidence": {
"column": 3,
"pixel_index": 3,
"prediction": 2,
"reason": "class_mismatch",
"reference": 1,
"row": 0
},
"failure_id": "a7c91430a7766b02755e",
"kind": "raster_misclassification",
"metadata": {
"context": "dense_urban_raster",
"date": "2025-10-05",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Brussel",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "brussels",
"resolution_m": 1,
"season": "autumn",
"sensor": "synthetic-multispectral",
"source": "fixture-thematic-raster",
"tile_edge": true,
"urbanity": "urban",
"vegetation": "moderate"
},
"sample_id": "raster-test-brussels-urban",
"secondary_error_codes": [],
"task": "raster_classification"
},
{
"contexts": [],
"error_code": "M-FP-CONFUSER",
"evidence": {
"bbox": [
85,
85,
95,
95
],
"class": "building",
"confidence": 0.6,
"id": "p3"
},
"failure_id": "b7e154a0f6ddb9d8653f",
"kind": "false_positive",
"metadata": {
"context": "dense_urban",
"date": "2025-06-15",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Antwerpen",
"object_size": "mixed",
"occlusion": "partial",
"ood": false,
"region": "flanders",
"resolution_m": 0.25,
"season": "summer",
"sensor": "synthetic-rgb",
"source": "fixture-orthophoto",
"tile_edge": false,
"urbanity": "urban",
"vegetation": "moderate"
},
"sample_id": "det-test-flanders-urban",
"secondary_error_codes": [],
"task": "object_detection"
},
{
"contexts": [],
"error_code": "M-FP-CONFUSER",
"evidence": {
"class": "building",
"id": "p2",
"polygon": [
[
20,
0
],
[
24,
0
],
[
24,
4
],
[
20,
4
],
[
20,
0
]
]
},
"failure_id": "bf43633497be5101cddb",
"kind": "false_positive",
"metadata": {
"context": "suburban_buildings",
"date": "2025-01-15",
"difficulty": "normal",
"label_review_state": "fixture_reviewed",
"municipality": "Mol",
"object_size": "mixed",
"occlusion": "not_applicable",
"ood": false,
"region": "flanders",
"resolution_m": 0.1,
"season": "not_applicable",
"sensor": "vector",
"source": "fixture-grb",
"tile_edge": false,
"urbanity": "suburban",
"vegetation": "low"
},
"sample_id": "vector-test-flanders-suburban",
"secondary_error_codes": [],
"task": "vector_comparison"
},
{
"contexts": [],
"error_code": "M-FN-MISSED",
"evidence": {
"class": "building",
"id": "r2",
"polygon": [
[
10,
0
],
[
14,
0
],
[
14,
4
],
[
10,
4
],
[
10,
0
]
]
},
"failure_id": "c9a80d5bb196dc7113e2",
"kind": "false_negative",
"metadata": {
"context": "suburban_buildings",
"date": "2025-01-15",
"difficulty": "normal",
"label_review_state": "fixture_reviewed",
"municipality": "Mol",
"object_size": "mixed",
"occlusion": "not_applicable",
"ood": false,
"region": "flanders",
"resolution_m": 0.1,
"season": "not_applicable",
"sensor": "vector",
"source": "fixture-grb",
"tile_edge": false,
"urbanity": "suburban",
"vegetation": "low"
},
"sample_id": "vector-test-flanders-suburban",
"secondary_error_codes": [],
"task": "vector_comparison"
},
{
"contexts": [],
"error_code": "D-VALIDATION-FP",
"evidence": {
"anomaly": "D-RESOLUTION",
"severity": "major"
},
"failure_id": "e00a10875bea399c62c3",
"kind": "validation_false_positive",
"metadata": {
"context": "data_contract",
"date": "2025-01-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "not_applicable",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "national",
"resolution_m": null,
"season": "not_applicable",
"sensor": "mixed",
"source": "fixture-contracts",
"tile_edge": false,
"urbanity": "mixed",
"vegetation": "mixed"
},
"sample_id": "validation-test-national",
"secondary_error_codes": [],
"task": "geospatial_data_validation"
},
{
"contexts": [
"tile_edge"
],
"error_code": "M-MISCALIBRATED",
"evidence": {
"brier": 0.8464,
"claim_boundary": "diagnostic deviation only; not a representative population-calibration claim",
"ece": 0.92,
"prediction_support": 1
},
"failure_id": "edae8689bdec601bca2b",
"kind": "miscalibrated",
"metadata": {
"context": "coastal_hard_negative",
"date": "2025-07-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Oostende",
"object_size": "empty",
"occlusion": "none",
"ood": false,
"region": "flanders",
"resolution_m": 0.25,
"season": "summer",
"sensor": "synthetic-rgb",
"source": "fixture-orthophoto",
"tile_edge": true,
"urbanity": "urban",
"vegetation": "moderate"
},
"sample_id": "background-test-hard-negative",
"secondary_error_codes": [],
"task": "object_detection"
}
],
"items_canonical_json_sha256": "2002025055588195db73e20017882e412e988f3c55dedc89a1fd0c1dcd7a7e3e",
"rendering_status": "machine_readable_examples_retained; a visual production gallery requires controlled access to protected imagery",
"schema_version": 2,
"taxonomy": "docs/accuracy-program/05-metric-framework.md section 4"
}
@@ -0,0 +1,8 @@
{
"development_manifest_sha256": "64e4fc986c2390bedfbe100062d4b06e1098689f4d4a9a9da13a7f67357c0493",
"generator_version": "1.3.0",
"protected_manifest_sha256": "e57ca1529654ef1c2527e84122ff26ec3533e7c70658250983968fbc5d4af410",
"schema_version": 1,
"source_manifest_sha256": "1c75c875d4c297d046117bb9393ba5e648f13d3358ea92cb65374869c8f5fc01",
"status": "pass"
}
@@ -0,0 +1,8 @@
{
"ai_review_is_human_signoff": false,
"required": null,
"reviewed": null,
"schema_version": 2,
"source": "readiness-snapshot.json bound to Phase-1/3 evidence",
"status": "not_evaluable"
}
@@ -0,0 +1,185 @@
{
"code": [
{
"path": "scripts/accuracy_phase4_evaluator.py",
"sha256": "d2e40f7978d3ff4ce7025eaaaefb06ccc76c269d6874f8b0f528739d535a1da1",
"size_bytes": 93353
},
{
"path": "scripts/generate_accuracy_phase4_splits.py",
"sha256": "d12842922bcd99b1672176df15a9cef250128e7d7fc662ab15e16f1c084ba570",
"size_bytes": 75923
},
{
"path": "scripts/run_accuracy_phase4_benchmark.py",
"sha256": "003ecb4babc7f56a6d13e9e1c08dda902b9b26203cc7d53476d4d5e083b8b85b",
"size_bytes": 123717
},
{
"path": "scripts/run_golden_qa_benchmark.py",
"sha256": "2c8a19fd92db8f07f491b8f7b34d9736384f81e02a6b83019fac71b101ebdaa0",
"size_bytes": 10856
},
{
"path": "backend/app/services/qa_service.py",
"sha256": "2d4f645410fbf2972e55dddbf5a85db5368b2b1932792cd522ec51c483339244",
"size_bytes": 15206
}
],
"inputs": [
{
"path": "fixtures/accuracy/p4/split-source-manifest.json",
"sha256": "27ec60406ac57a02f1335013ee344a43d4e0093e7ee1329ec22876da623f5bfc",
"size_bytes": 17331
},
{
"path": "fixtures/accuracy/p4/protected-baseline-cases.json",
"sha256": "c49a9c8d74cae2062552b012d9c275f65156c81d75b3e453860f5b859c1c5473",
"size_bytes": 20091
},
{
"path": "fixtures/golden/golden_qa_benchmarks.json",
"sha256": "d60576ff7048ca3a048dc166e8977f3a31e9f8fa352be5ad222a017260e179e2",
"size_bytes": 2758
},
{
"path": "docs/accuracy-program/05-metric-framework.md",
"sha256": "18abfc21964b7d98848d8ae513afce242184980c9517c9184d40efd9165ea00d",
"size_bytes": 28053
},
{
"path": "docs/accuracy-program/07-source-authority-matrix.md",
"sha256": "42fc59ec012b3d4eff5674ba347b11fb418a42b0178a12c9de16eac873ef6a9c",
"size_bytes": 30807
},
{
"path": "artifacts/evidence/accuracy/P3/full-scan-manifest.json",
"sha256": "28c1022d125f30bfb4aa362b57d8a90cf8c88270b2a9ac6582b86b6a44a08038",
"size_bytes": 755527
},
{
"path": "artifacts/evidence/accuracy/P3/leakage-report.json",
"sha256": "8e1b7a24a840549d442bc03132ee1f21c6d50f8714cbb8d33430391a3769cd4e",
"size_bytes": 580
}
],
"model_execution": {
"configured_active_model": {
"model_id": "yolo-configured",
"model_version": "",
"nationally_validated": false,
"path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"size_bytes": 22516074,
"validated_area_names": [
"Mol",
"Kempen"
]
},
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"product_baseline": {
"artifacts": [],
"manifest": null,
"product_gate_evidence_sha256": "c9f5e3de3ab6d64911f8807b26caa661ccf911a5fd6b995107edda2004836e0c",
"requested_path": "artifacts/evidence/accuracy/P4/product-baseline-manifest.json",
"validation_status": "not_evaluable"
},
"readiness_snapshot": {
"active_model": {
"model_id": "yolo-configured",
"model_version": "",
"nationally_validated": false,
"path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"size_bytes": 22516074,
"validated_area_names": [
"Mol",
"Kempen"
]
},
"authority_requirements": [
{
"primary": "grb",
"task": "building_validation",
"zone": "flanders"
},
{
"primary": "picc",
"task": "building_validation",
"zone": "wallonia"
},
{
"primary": "urbis",
"task": "building_validation",
"zone": "brussels"
},
{
"primary": "dhmv",
"task": "terrain_height",
"zone": "flanders"
},
{
"primary": "spw_terrain",
"task": "terrain_height",
"zone": "wallonia"
},
{
"primary": "mdk",
"task": "north_sea_bathymetry",
"zone": "belgian_north_sea"
},
{
"contextual": "sentinel-2",
"primary": "official_orthophoto",
"task": "imagery_corroboration",
"zone": "belgium"
}
],
"phase3_leakage_status": "attention",
"phase3_scan": {
"content_hash": null,
"grb_consistency": {
"reason": "No authoritative GRB snapshot was accessible in the configured local roots; no derived result was marked as GRB ground truth.",
"status": "unavailable"
},
"scan_id": "p3-46ee3f8d3a2dc52b"
},
"schema_version": 1,
"source_paths": {
"accuracy_status_projection": {
"path": "docs/accuracy-program/status.json",
"selected_json_pointers": [
"/runtime/active_model"
],
"sha256": "441dc0302156d8a1293fc330318bed5a39a6e6c558ee52dc9ada4965a5a516f6"
},
"phase3_full_scan": {
"path": "artifacts/evidence/accuracy/P3/full-scan-manifest.json",
"sha256": "28c1022d125f30bfb4aa362b57d8a90cf8c88270b2a9ac6582b86b6a44a08038",
"size_bytes": 755527
},
"phase3_leakage": {
"path": "artifacts/evidence/accuracy/P3/leakage-report.json",
"sha256": "8e1b7a24a840549d442bc03132ee1f21c6d50f8714cbb8d33430391a3769cd4e",
"size_bytes": 580
}
}
},
"readiness_snapshot_sha256": "5fab098e77e8537d95d83adeda5ec081106fea760b4b476d3517079c33d1cd9f",
"repository_commit": "70fb4b94e5cb7c248beec5a936ce186f38cc183c",
"runtime": {
"cuda_used_for_reference_harness": false,
"dependencies": {
"numpy": "2.2.2",
"pyproj": "3.7.2",
"shapely": "2.1.2"
},
"execution_device": "CPU deterministic evaluator arithmetic; no production model inference",
"platform": "Windows-11-10.0.26200-SP0",
"python": "3.13.2",
"python_implementation": "CPython"
},
"schema_version": 2
}
@@ -0,0 +1,6 @@
{
"model_inference_executed": false,
"reason": "The reference harness performs deterministic evaluator arithmetic only. GPU latency, VRAM, throughput and failure-rate gates require the real active model.",
"schema_version": 2,
"status": "not_evaluable"
}
@@ -0,0 +1,46 @@
{
"checked_identity_fields": [
"sample_id",
"group_id",
"source_family",
"acquisition_date",
"temporal_family",
"object_ids",
"native_feature_ids",
"raw_image_sha256",
"processed_image_sha256",
"label_sha256",
"record_sha256",
"perceptual_image_hash",
"label_geometry_hash",
"label_geometry_fingerprint",
"parent_raster_id",
"acquisition_id",
"bbox_distance"
],
"crs_validation": {
"crs": "EPSG:31370",
"distance_units": "m",
"status": "pass"
},
"development_manifest_sha256": "64e4fc986c2390bedfbe100062d4b06e1098689f4d4a9a9da13a7f67357c0493",
"finding_count": 0,
"findings": [],
"generator_version": "1.3.0",
"independence_buffer_m": 2000.0,
"inventory_total": 21,
"label_geometry_hamming_threshold": 2,
"perceptual_hamming_threshold": 4,
"protected_manifest_sha256": "e57ca1529654ef1c2527e84122ff26ec3533e7c70658250983968fbc5d4af410",
"schema_version": 1,
"source_manifest_sha256": "1c75c875d4c297d046117bb9393ba5e648f13d3358ea92cb65374869c8f5fc01",
"split_counts": {
"background-test": 2,
"calibration": 2,
"challenge": 4,
"test": 7,
"train": 3,
"val": 3
},
"status": "pass"
}
@@ -0,0 +1,806 @@
{
"results": [
{
"metadata": {
"context": "coastal_hard_negative",
"date": "2025-07-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Oostende",
"object_size": "empty",
"occlusion": "none",
"ood": false,
"region": "flanders",
"resolution_m": 0.25,
"season": "summer",
"sensor": "synthetic-rgb",
"source": "fixture-orthophoto",
"tile_edge": true,
"urbanity": "urban",
"vegetation": "moderate"
},
"metrics": {
"ap50": null,
"ap50_95": null,
"calibration": {
"binning": "five fixed equal-width bins",
"bins": [
{
"accuracy": null,
"count": 0,
"lower": 0.0,
"mean_confidence": null,
"upper": 0.2
},
{
"accuracy": null,
"count": 0,
"lower": 0.2,
"mean_confidence": null,
"upper": 0.4
},
{
"accuracy": null,
"count": 0,
"lower": 0.4,
"mean_confidence": null,
"upper": 0.6
},
{
"accuracy": null,
"count": 0,
"lower": 0.6,
"mean_confidence": null,
"upper": 0.8
},
{
"accuracy": 0,
"count": 1,
"lower": 0.8,
"mean_confidence": 0.92,
"upper": 1.0
}
],
"brier": 0.8464,
"ece": 0.92,
"status": "computed"
},
"coverage_risk": [
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.0,
"total_prediction_count": 1
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.5,
"total_prediction_count": 1
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.7,
"total_prediction_count": 1
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 1,
"retained_prediction_coverage": 1.0,
"risk": 1.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.9,
"total_prediction_count": 1
}
],
"f1": null,
"false_discovery_rate": 1.0,
"false_negative": 0,
"false_positive": 1,
"map50": null,
"map50_95": null,
"match_iou": 0.5,
"matched_iou": {
"count": 0,
"max": null,
"mean": null,
"median": null,
"min": null
},
"miss_rate": null,
"operating_confidence": 0.5,
"per_class": {
"building": {
"ap50": null,
"ap50_95": null,
"f1": null,
"false_discovery_rate": 1.0,
"false_negative": 0,
"false_positive": 1,
"miss_rate": null,
"precision": 0.0,
"precision_ci95_wilson": {
"lower": 0.0,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 0.7934506856227626
},
"prediction_count": 1,
"recall": null,
"recall_ci95_wilson": {
"lower": null,
"status": "undefined",
"support": 0,
"upper": null
},
"reference_count": 0,
"true_positive": 0
}
},
"precision": 0.0,
"precision_ci95_wilson": {
"lower": 0.0,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 0.7934506856227626
},
"prediction_count": 1,
"recall": null,
"recall_ci95_wilson": {
"lower": null,
"status": "undefined",
"support": 0,
"upper": null
},
"reference_count": 0,
"true_positive": 0
},
"sample_id": "background-test-hard-negative",
"task": "object_detection"
},
{
"metadata": {
"context": "pure_background",
"date": "2025-02-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Brussel",
"object_size": "empty",
"occlusion": "none",
"ood": false,
"region": "brussels",
"resolution_m": 0.25,
"season": "winter",
"sensor": "synthetic-rgb",
"source": "fixture-orthophoto",
"tile_edge": false,
"urbanity": "urban",
"vegetation": "low"
},
"metrics": {
"ap50": null,
"ap50_95": null,
"calibration": {
"bins": [],
"brier": null,
"ece": null,
"status": "undefined"
},
"coverage_risk": [
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.0,
"total_prediction_count": 0
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.5,
"total_prediction_count": 0
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.7,
"total_prediction_count": 0
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 0,
"reference_count": 0,
"reference_coverage": null,
"retained_prediction_count": 0,
"retained_prediction_coverage": null,
"risk": null,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.9,
"total_prediction_count": 0
}
],
"f1": null,
"false_discovery_rate": null,
"false_negative": 0,
"false_positive": 0,
"map50": null,
"map50_95": null,
"match_iou": 0.5,
"matched_iou": {
"count": 0,
"max": null,
"mean": null,
"median": null,
"min": null
},
"miss_rate": null,
"operating_confidence": 0.5,
"per_class": {
"building": {
"ap50": null,
"ap50_95": null,
"f1": null,
"false_discovery_rate": null,
"false_negative": 0,
"false_positive": 0,
"miss_rate": null,
"precision": null,
"precision_ci95_wilson": {
"lower": null,
"status": "undefined",
"support": 0,
"upper": null
},
"prediction_count": 0,
"recall": null,
"recall_ci95_wilson": {
"lower": null,
"status": "undefined",
"support": 0,
"upper": null
},
"reference_count": 0,
"true_positive": 0
}
},
"precision": null,
"precision_ci95_wilson": {
"lower": null,
"status": "undefined",
"support": 0,
"upper": null
},
"prediction_count": 0,
"recall": null,
"recall_ci95_wilson": {
"lower": null,
"status": "undefined",
"support": 0,
"upper": null
},
"reference_count": 0,
"true_positive": 0
},
"sample_id": "background-test-pure-empty",
"task": "object_detection"
},
{
"metadata": {
"context": "industrial_change",
"date": "2024-05-01/2025-05-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Liège",
"object_size": "mixed",
"occlusion": "none",
"ood": false,
"region": "wallonia",
"resolution_m": 0.5,
"season": "multi-date",
"sensor": "vector",
"source": "fixture-picc-temporal",
"tile_edge": false,
"urbanity": "industrial",
"vegetation": "low"
},
"metrics": {
"event_metrics": {
"added": {
"f1": 1.0,
"false_discovery_rate": 0.0,
"false_negative": 0,
"false_positive": 0,
"miss_rate": 0.0,
"precision": 1.0,
"precision_ci95_wilson": {
"lower": 0.20654931437723745,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 1.0
},
"prediction_count": 1,
"recall": 1.0,
"recall_ci95_wilson": {
"lower": 0.20654931437723745,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 1.0
},
"reference_count": 1,
"true_positive": 1
},
"removed": {
"f1": null,
"false_discovery_rate": 1.0,
"false_negative": 1,
"false_positive": 1,
"miss_rate": 1.0,
"precision": 0.0,
"precision_ci95_wilson": {
"lower": 0.0,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 0.7934506856227626
},
"prediction_count": 1,
"recall": 0.0,
"recall_ci95_wilson": {
"lower": 0.0,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 0.7934506856227626
},
"reference_count": 1,
"true_positive": 0
}
},
"f1": 0.5,
"false_discovery_rate": 0.5,
"false_negative": 1,
"false_positive": 1,
"miss_rate": 0.5,
"precision": 0.5,
"precision_ci95_wilson": {
"lower": 0.09453120573423074,
"method": "Wilson score interval",
"status": "computed",
"support": 2,
"upper": 0.9054687942657693
},
"prediction_count": 2,
"recall": 0.5,
"recall_ci95_wilson": {
"lower": 0.09453120573423074,
"method": "Wilson score interval",
"status": "computed",
"support": 2,
"upper": 0.9054687942657693
},
"reference_count": 2,
"true_positive": 1
},
"sample_id": "change-test-wallonia-industrial",
"task": "change_detection"
},
{
"metadata": {
"context": "dense_urban",
"date": "2025-06-15",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Antwerpen",
"object_size": "mixed",
"occlusion": "partial",
"ood": false,
"region": "flanders",
"resolution_m": 0.25,
"season": "summer",
"sensor": "synthetic-rgb",
"source": "fixture-orthophoto",
"tile_edge": false,
"urbanity": "urban",
"vegetation": "moderate"
},
"metrics": {
"ap50": 1.0,
"ap50_95": 0.900990099009901,
"calibration": {
"binning": "five fixed equal-width bins",
"bins": [
{
"accuracy": null,
"count": 0,
"lower": 0.0,
"mean_confidence": null,
"upper": 0.2
},
{
"accuracy": null,
"count": 0,
"lower": 0.2,
"mean_confidence": null,
"upper": 0.4
},
{
"accuracy": null,
"count": 0,
"lower": 0.4,
"mean_confidence": null,
"upper": 0.6
},
{
"accuracy": 0.5,
"count": 2,
"lower": 0.6,
"mean_confidence": 0.6499999999999999,
"upper": 0.8
},
{
"accuracy": 1,
"count": 1,
"lower": 0.8,
"mean_confidence": 0.9,
"upper": 1.0
}
],
"brier": 0.15333333333333332,
"ece": 0.13333333333333325,
"status": "computed"
},
"coverage_risk": [
{
"false_negative_count": 0,
"false_positive_count": 2,
"matched_reference_count": 2,
"reference_count": 2,
"reference_coverage": 1.0,
"retained_prediction_count": 4,
"retained_prediction_coverage": 1.0,
"risk": 0.5,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.0,
"total_prediction_count": 4
},
{
"false_negative_count": 0,
"false_positive_count": 1,
"matched_reference_count": 2,
"reference_count": 2,
"reference_coverage": 1.0,
"retained_prediction_count": 3,
"retained_prediction_coverage": 0.75,
"risk": 0.3333333333333333,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.5,
"total_prediction_count": 4
},
{
"false_negative_count": 0,
"false_positive_count": 0,
"matched_reference_count": 2,
"reference_count": 2,
"reference_coverage": 1.0,
"retained_prediction_count": 2,
"retained_prediction_coverage": 0.5,
"risk": 0.0,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.7,
"total_prediction_count": 4
},
{
"false_negative_count": 1,
"false_positive_count": 0,
"matched_reference_count": 1,
"reference_count": 2,
"reference_coverage": 0.5,
"retained_prediction_count": 1,
"retained_prediction_coverage": 0.25,
"risk": 0.5,
"risk_definition": "(false_positive + false_negative) / (true_positive + false_positive + false_negative)",
"threshold": 0.9,
"total_prediction_count": 4
}
],
"f1": 0.8,
"false_discovery_rate": 0.3333333333333333,
"false_negative": 0,
"false_positive": 1,
"map50": 1.0,
"map50_95": 0.900990099009901,
"match_iou": 0.5,
"matched_iou": {
"count": 2,
"max": 1.0,
"mean": 0.9355555555555555,
"median": 0.9355555555555555,
"min": 0.8711111111111111
},
"miss_rate": 0.0,
"operating_confidence": 0.5,
"per_class": {
"building": {
"ap50": 1.0,
"ap50_95": 0.900990099009901,
"f1": 0.8,
"false_discovery_rate": 0.3333333333333333,
"false_negative": 0,
"false_positive": 1,
"miss_rate": 0.0,
"precision": 0.6666666666666666,
"precision_ci95_wilson": {
"lower": 0.2076596008020477,
"method": "Wilson score interval",
"status": "computed",
"support": 3,
"upper": 0.9385080552796037
},
"prediction_count": 3,
"recall": 1.0,
"recall_ci95_wilson": {
"lower": 0.34238022750665303,
"method": "Wilson score interval",
"status": "computed",
"support": 2,
"upper": 1.0
},
"reference_count": 2,
"true_positive": 2
}
},
"precision": 0.6666666666666666,
"precision_ci95_wilson": {
"lower": 0.2076596008020477,
"method": "Wilson score interval",
"status": "computed",
"support": 3,
"upper": 0.9385080552796037
},
"prediction_count": 3,
"recall": 1.0,
"recall_ci95_wilson": {
"lower": 0.34238022750665303,
"method": "Wilson score interval",
"status": "computed",
"support": 2,
"upper": 1.0
},
"reference_count": 2,
"true_positive": 2
},
"sample_id": "det-test-flanders-urban",
"task": "object_detection"
},
{
"metadata": {
"context": "rural_buildings",
"date": "2025-04-20",
"difficulty": "normal",
"label_review_state": "fixture_reviewed",
"municipality": "Namur",
"object_size": "large",
"occlusion": "none",
"ood": false,
"region": "wallonia",
"resolution_m": 0.5,
"season": "spring",
"sensor": "synthetic-rgb",
"source": "fixture-picc",
"tile_edge": false,
"urbanity": "rural",
"vegetation": "low"
},
"metrics": {
"centroid_distance_m": {
"count": 1,
"max": 0.5,
"mean": 0.5,
"median": 0.5,
"min": 0.5
},
"f1": 1.0,
"false_discovery_rate": 0.0,
"false_negative": 0,
"false_positive": 0,
"mean_boundary_f1": 1.0,
"mean_dice": 0.8881578947368421,
"mean_iou": 0.7988165680473372,
"miss_rate": 0.0,
"precision": 1.0,
"precision_ci95_wilson": {
"lower": 0.20654931437723745,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 1.0
},
"prediction_count": 1,
"recall": 1.0,
"recall_ci95_wilson": {
"lower": 0.20654931437723745,
"method": "Wilson score interval",
"status": "computed",
"support": 1,
"upper": 1.0
},
"reference_count": 1,
"relative_area_error": {
"count": 1,
"max": -0.1,
"mean": -0.1,
"median": -0.1,
"min": -0.1
},
"spatial_context_validated": true,
"topologically_invalid_predictions": 0,
"topologically_valid_predictions": 1,
"true_positive": 1
},
"sample_id": "seg-test-wallonia-rural",
"task": "footprint_segmentation"
},
{
"metadata": {
"context": "data_contract",
"date": "2025-01-01",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "not_applicable",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "national",
"resolution_m": null,
"season": "not_applicable",
"sensor": "mixed",
"source": "fixture-contracts",
"tile_edge": false,
"urbanity": "mixed",
"vegetation": "mixed"
},
"metrics": {
"blocker_or_critical_miss_count": 1,
"f1": 0.6666666666666666,
"false_discovery_rate": 0.3333333333333333,
"false_negative": 1,
"false_positive": 1,
"miss_rate": 0.3333333333333333,
"misses_by_severity": {
"blocker": 0,
"critical": 1,
"informational": 0,
"major": 0,
"minor": 0
},
"precision": 0.6666666666666666,
"precision_ci95_wilson": {
"lower": 0.2076596008020477,
"method": "Wilson score interval",
"status": "computed",
"support": 3,
"upper": 0.9385080552796037
},
"prediction_count": 3,
"recall": 0.6666666666666666,
"recall_ci95_wilson": {
"lower": 0.2076596008020477,
"method": "Wilson score interval",
"status": "computed",
"support": 3,
"upper": 0.9385080552796037
},
"reference_count": 3,
"severity_mismatch_count": 0,
"severity_mismatches": [],
"true_positive": 2
},
"sample_id": "validation-test-national",
"task": "geospatial_data_validation"
},
{
"metadata": {
"context": "suburban_buildings",
"date": "2025-01-15",
"difficulty": "normal",
"label_review_state": "fixture_reviewed",
"municipality": "Mol",
"object_size": "mixed",
"occlusion": "not_applicable",
"ood": false,
"region": "flanders",
"resolution_m": 0.1,
"season": "not_applicable",
"sensor": "vector",
"source": "fixture-grb",
"tile_edge": false,
"urbanity": "suburban",
"vegetation": "low"
},
"metrics": {
"f1": 0.5,
"false_discovery_rate": 0.5,
"false_negative": 1,
"false_positive": 1,
"mean_iou": 1.0,
"miss_rate": 0.5,
"precision": 0.5,
"precision_ci95_wilson": {
"lower": 0.09453120573423074,
"method": "Wilson score interval",
"status": "computed",
"support": 2,
"upper": 0.9054687942657693
},
"prediction_count": 2,
"recall": 0.5,
"recall_ci95_wilson": {
"lower": 0.09453120573423074,
"method": "Wilson score interval",
"status": "computed",
"support": 2,
"upper": 0.9054687942657693
},
"reference_count": 2,
"spatial_context_validated": true,
"topologically_valid": true,
"true_positive": 1
},
"sample_id": "vector-test-flanders-suburban",
"task": "vector_comparison"
}
],
"schema_version": 2,
"status": "fixture_contract_only"
}
@@ -0,0 +1,589 @@
{
"access_policy": "Only the frozen release evaluator may consume test/background-test labels; challenge labels remain external/sealed.",
"allowed_splits": [
"background-test",
"challenge",
"test"
],
"assignment_algorithm": "group-before-split-deficit-balancer-v1",
"assignment_mode": "preassigned",
"assignment_seed": "geointel-p4-group-split-v1",
"claim_boundary": "Synthetic contract fixtures for evaluator regression only; never production accuracy evidence.",
"crs": "EPSG:31370",
"dataset_version": "geointel-p4-harness-fixture-v2",
"generator_version": "1.3.0",
"implemented_tasks": [
"change_detection",
"footprint_segmentation",
"geospatial_data_validation",
"object_detection",
"raster_classification",
"terrain_interpretation",
"vector_comparison"
],
"independence_buffer_m": 2000.0,
"label_geometry_hamming_threshold": 2,
"labels_available_by_split": {
"background-test": "frozen_evaluator_only",
"challenge": "sealed_external",
"test": "frozen_evaluator_only"
},
"mandatory_split_roles": [
"train",
"val",
"calibration",
"test",
"background-test",
"challenge"
],
"manifest_role": "protected_release_only",
"manifest_sha256": "e57ca1529654ef1c2527e84122ff26ec3533e7c70658250983968fbc5d4af410",
"perceptual_hamming_threshold": 4,
"protected_task_coverage": [
{
"background_test_count": 0,
"exemption_reason": null,
"sealed_challenge_count": 0,
"status": "covered",
"task": "change_detection",
"test_count": 1
},
{
"background_test_count": 0,
"exemption_reason": null,
"sealed_challenge_count": 1,
"status": "covered",
"task": "footprint_segmentation",
"test_count": 1
},
{
"background_test_count": 0,
"exemption_reason": null,
"sealed_challenge_count": 1,
"status": "covered",
"task": "geospatial_data_validation",
"test_count": 1
},
{
"background_test_count": 2,
"exemption_reason": null,
"sealed_challenge_count": 1,
"status": "covered",
"task": "object_detection",
"test_count": 1
},
{
"background_test_count": 0,
"exemption_reason": null,
"sealed_challenge_count": 1,
"status": "covered",
"task": "raster_classification",
"test_count": 1
},
{
"background_test_count": 0,
"exemption_reason": null,
"sealed_challenge_count": 0,
"status": "covered",
"task": "terrain_interpretation",
"test_count": 1
},
{
"background_test_count": 0,
"exemption_reason": null,
"sealed_challenge_count": 0,
"status": "covered",
"task": "vector_comparison",
"test_count": 1
}
],
"samples": [
{
"acquisition_date": "2025-01-17",
"acquisition_id": "acquisition-17",
"bbox": [
60000.0,
70000.0,
60100.0,
70100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g17",
"label_geometry_fingerprint": "2b405bcc9c95acfb",
"label_geometry_hash": "7171717171717171717171717171717171717171717171717171717171717171",
"label_sha256": "5151515151515151515151515151515151515151515151515151515151515151",
"native_feature_ids": [],
"object_ids": [],
"parent_raster_id": "parent-raster-17",
"perceptual_image_hash": "6ada1b5aa46cc261",
"processed_image_sha256": "3131313131313131313131313131313131313131313131313131313131313131",
"raw_image_sha256": "1111111111111111111111111111111111111111111111111111111111111111",
"record_sha256": "330f67df045e915670260db85cd399b7abb0a5277ca857e2b9483274dfd561c9",
"sample_id": "background-test-hard-negative",
"source_family": "scene-17",
"split": "background-test",
"task": "object_detection",
"temporal_family": "temporal-17"
},
{
"acquisition_date": "2025-01-16",
"acquisition_id": "acquisition-16",
"bbox": [
20000.0,
70000.0,
20100.0,
70100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g16",
"label_geometry_fingerprint": "004e762f898c4fad",
"label_geometry_hash": "7070707070707070707070707070707070707070707070707070707070707070",
"label_sha256": "5050505050505050505050505050505050505050505050505050505050505050",
"native_feature_ids": [],
"object_ids": [],
"parent_raster_id": "parent-raster-16",
"perceptual_image_hash": "be4078e1ef9fa296",
"processed_image_sha256": "3030303030303030303030303030303030303030303030303030303030303030",
"raw_image_sha256": "1010101010101010101010101010101010101010101010101010101010101010",
"record_sha256": "3e8066639f58f5230faea2b2964c532148f9fc6d891a1d04a127c1fac1cdb826",
"sample_id": "background-test-pure-empty",
"source_family": "scene-16",
"split": "background-test",
"task": "object_detection",
"temporal_family": "temporal-16"
},
{
"acquisition_date": "2025-01-13",
"acquisition_id": "acquisition-13",
"bbox": [
50000.0,
50000.0,
50100.0,
50100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g13",
"label_geometry_fingerprint": "6c5b5f9db0d73c31",
"label_geometry_hash": "6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d6d",
"label_sha256": "4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d4d",
"native_feature_ids": [
"native-13-1",
"native-13-2"
],
"object_ids": [
"o13",
"o14"
],
"parent_raster_id": "parent-raster-13",
"perceptual_image_hash": "14e347040ef16eac",
"processed_image_sha256": "2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d2d",
"raw_image_sha256": "0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d0d",
"record_sha256": "0550facfe80b78f11414cd578d3808fab503382f15c9e6e1f8fd4801ce3ab365",
"sample_id": "change-test-wallonia-industrial",
"source_family": "scene-13",
"split": "test",
"task": "change_detection",
"temporal_family": "temporal-13"
},
{
"acquisition_date": "2025-01-18",
"acquisition_id": "acquisition-18",
"bbox": [
10000.0,
90000.0,
10100.0,
90100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g18",
"parent_raster_id": "parent-raster-18",
"perceptual_image_hash": "15910b3a2d056648",
"processed_image_sha256": "3232323232323232323232323232323232323232323232323232323232323232",
"raw_image_sha256": "1212121212121212121212121212121212121212121212121212121212121212",
"sample_id": "det-challenge-coast",
"sealed": true,
"source_family": "scene-18",
"split": "challenge",
"task": "object_detection",
"temporal_family": "temporal-18",
"withheld_fields": [
"content_path_bindings",
"governance_binding",
"label_geometry_fingerprint",
"label_geometry_hash",
"label_geometry_path",
"label_path",
"label_sha256",
"native_feature_ids",
"object_ids",
"record_sha256"
]
},
{
"acquisition_date": "2025-01-09",
"acquisition_id": "acquisition-09",
"bbox": [
10000.0,
50000.0,
10100.0,
50100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g09",
"label_geometry_fingerprint": "7ed221e11cc6828d",
"label_geometry_hash": "6969696969696969696969696969696969696969696969696969696969696969",
"label_sha256": "4949494949494949494949494949494949494949494949494949494949494949",
"native_feature_ids": [
"native-09-1",
"native-09-2"
],
"object_ids": [
"o07",
"o08"
],
"parent_raster_id": "parent-raster-09",
"perceptual_image_hash": "d6d20ed34050b89e",
"processed_image_sha256": "2929292929292929292929292929292929292929292929292929292929292929",
"raw_image_sha256": "0909090909090909090909090909090909090909090909090909090909090909",
"record_sha256": "a551408577ce3494c75160c1c4fe90fbbc79a9f37bd151d7df8095d1cd35bc8b",
"sample_id": "det-test-flanders-urban",
"source_family": "scene-09",
"split": "test",
"task": "object_detection",
"temporal_family": "temporal-09"
},
{
"acquisition_date": "2025-01-20",
"acquisition_id": "acquisition-20",
"bbox": [
50000.0,
90000.0,
50100.0,
90100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g20",
"parent_raster_id": "parent-raster-20",
"perceptual_image_hash": "85f82f2f8eb2c2f5",
"processed_image_sha256": "3434343434343434343434343434343434343434343434343434343434343434",
"raw_image_sha256": "1414141414141414141414141414141414141414141414141414141414141414",
"sample_id": "raster-challenge-seasonal",
"sealed": true,
"source_family": "scene-20",
"split": "challenge",
"task": "raster_classification",
"temporal_family": "temporal-20",
"withheld_fields": [
"content_path_bindings",
"governance_binding",
"label_geometry_fingerprint",
"label_geometry_hash",
"label_geometry_path",
"label_path",
"label_sha256",
"native_feature_ids",
"object_ids",
"record_sha256"
]
},
{
"acquisition_date": "2025-01-11",
"acquisition_id": "acquisition-11",
"bbox": [
30000.0,
50000.0,
30100.0,
50100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g11",
"label_geometry_fingerprint": "f4269ac17b100571",
"label_geometry_hash": "6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b6b",
"label_sha256": "4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b4b",
"native_feature_ids": [
"native-11-1"
],
"object_ids": [
"o10"
],
"parent_raster_id": "parent-raster-11",
"perceptual_image_hash": "4383fa06c328f326",
"processed_image_sha256": "2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b2b",
"raw_image_sha256": "0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b0b",
"record_sha256": "d66076d5cb479670bc8716334f526ddcbab07a2aacab28d7a5d6893795618d56",
"sample_id": "raster-test-brussels-urban",
"source_family": "scene-11",
"split": "test",
"task": "raster_classification",
"temporal_family": "temporal-11"
},
{
"acquisition_date": "2025-01-19",
"acquisition_id": "acquisition-19",
"bbox": [
30000.0,
90000.0,
30100.0,
90100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g19",
"parent_raster_id": "parent-raster-19",
"perceptual_image_hash": "b5c6e201d687cf9e",
"processed_image_sha256": "3333333333333333333333333333333333333333333333333333333333333333",
"raw_image_sha256": "1313131313131313131313131313131313131313131313131313131313131313",
"sample_id": "seg-challenge-brussels",
"sealed": true,
"source_family": "scene-19",
"split": "challenge",
"task": "footprint_segmentation",
"temporal_family": "temporal-19",
"withheld_fields": [
"content_path_bindings",
"governance_binding",
"label_geometry_fingerprint",
"label_geometry_hash",
"label_geometry_path",
"label_path",
"label_sha256",
"native_feature_ids",
"object_ids",
"record_sha256"
]
},
{
"acquisition_date": "2025-01-10",
"acquisition_id": "acquisition-10",
"bbox": [
20000.0,
50000.0,
20100.0,
50100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g10",
"label_geometry_fingerprint": "e9fb3c93de82d0be",
"label_geometry_hash": "6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a6a",
"label_sha256": "4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a4a",
"native_feature_ids": [
"native-10-1"
],
"object_ids": [
"o09"
],
"parent_raster_id": "parent-raster-10",
"perceptual_image_hash": "6c476d18e0539687",
"processed_image_sha256": "2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a2a",
"raw_image_sha256": "0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a0a",
"record_sha256": "7d0f9ee51cdf98e7f3acdc8117d48ce16d4d97538ba8179949a2c87dbbe5a526",
"sample_id": "seg-test-wallonia-rural",
"source_family": "scene-10",
"split": "test",
"task": "footprint_segmentation",
"temporal_family": "temporal-10"
},
{
"acquisition_date": "2025-01-14",
"acquisition_id": "acquisition-14",
"bbox": [
60000.0,
50000.0,
60100.0,
50100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g14",
"label_geometry_fingerprint": "4ec9f1dd6c799ec7",
"label_geometry_hash": "6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e6e",
"label_sha256": "4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e4e",
"native_feature_ids": [
"native-14-1"
],
"object_ids": [
"o15"
],
"parent_raster_id": "parent-raster-14",
"perceptual_image_hash": "c808940b0a325e9c",
"processed_image_sha256": "2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e2e",
"raw_image_sha256": "0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e0e",
"record_sha256": "4a47d90297a8325bb8257d7ca76b3281df8312d385715745a1a1fb74ba89efcd",
"sample_id": "terrain-test-flanders-rural",
"source_family": "scene-14",
"split": "test",
"task": "terrain_interpretation",
"temporal_family": "temporal-14"
},
{
"acquisition_date": "2025-01-21",
"acquisition_id": "acquisition-21",
"bbox": [
70000.0,
90000.0,
70100.0,
90100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g21",
"parent_raster_id": "parent-raster-21",
"perceptual_image_hash": "c71055ef6baeee8b",
"processed_image_sha256": "3535353535353535353535353535353535353535353535353535353535353535",
"raw_image_sha256": "1515151515151515151515151515151515151515151515151515151515151515",
"sample_id": "validation-challenge-corrupt",
"sealed": true,
"source_family": "scene-21",
"split": "challenge",
"task": "geospatial_data_validation",
"temporal_family": "temporal-21",
"withheld_fields": [
"content_path_bindings",
"governance_binding",
"label_geometry_fingerprint",
"label_geometry_hash",
"label_geometry_path",
"label_path",
"label_sha256",
"native_feature_ids",
"object_ids",
"record_sha256"
]
},
{
"acquisition_date": "2025-01-15",
"acquisition_id": "acquisition-15",
"bbox": [
70000.0,
50000.0,
70100.0,
50100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g15",
"label_geometry_fingerprint": "616691796f62dbbb",
"label_geometry_hash": "6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f6f",
"label_sha256": "4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f4f",
"native_feature_ids": [
"native-15-1"
],
"object_ids": [
"o16"
],
"parent_raster_id": "parent-raster-15",
"perceptual_image_hash": "4365e6b7df6acf3d",
"processed_image_sha256": "2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f2f",
"raw_image_sha256": "0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f0f",
"record_sha256": "0ff60414da05655b19c1717a27d8ba09aa8539a2b6c143e7a1a72b634fca397a",
"sample_id": "validation-test-national",
"source_family": "scene-15",
"split": "test",
"task": "geospatial_data_validation",
"temporal_family": "temporal-15"
},
{
"acquisition_date": "2025-01-12",
"acquisition_id": "acquisition-12",
"bbox": [
40000.0,
50000.0,
40100.0,
50100.0
],
"content_hash_verification": {
"label_geometry_hash": "synthetic_fixture_bound",
"label_sha256": "synthetic_fixture_bound",
"processed_image_sha256": "synthetic_fixture_bound",
"raw_image_sha256": "synthetic_fixture_bound"
},
"group_id": "g12",
"label_geometry_fingerprint": "2db7d069691934ed",
"label_geometry_hash": "6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c6c",
"label_sha256": "4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c4c",
"native_feature_ids": [
"native-12-1",
"native-12-2"
],
"object_ids": [
"o11",
"o12"
],
"parent_raster_id": "parent-raster-12",
"perceptual_image_hash": "1236e1aa148c25d5",
"processed_image_sha256": "2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c2c",
"raw_image_sha256": "0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c0c",
"record_sha256": "63f561268e24208db0dcb4321cd66624188f2f66016338dac504d52051dae34a",
"sample_id": "vector-test-flanders-suburban",
"source_family": "scene-12",
"split": "test",
"task": "vector_comparison",
"temporal_family": "temporal-12"
}
],
"schema_version": 1,
"selection_use_allowed": false,
"source_manifest_sha256": "1c75c875d4c297d046117bb9393ba5e648f13d3358ea92cb65374869c8f5fc01",
"source_trust": {
"mode": "synthetic_fixture",
"policy_id": "geointel-p4-synthetic-fixture-v2",
"production_accuracy_use_allowed": false
},
"training_access_allowed": false
}
@@ -0,0 +1,163 @@
{
"claim_boundary": "Reference implementation regression evidence; not production model accuracy.",
"content_sha256": "aeb0f6510352f4e205e4fc4e8c423110ca72c2142016c7af846d758865f258c6",
"implementation": "backend/app/services/qa_service.py via scripts/run_golden_qa_benchmark.py",
"persistence": {
"commit_count": 4,
"metric_count": 24,
"metric_keys": [
"f1",
"false_negative_count",
"false_positive_count",
"mean_iou",
"precision",
"recall"
],
"quality_check_count": 4
},
"scenario_count": 4,
"scenarios": [
{
"benchmark_id": "golden-buildings-partial-match-v1",
"description": "Two reference building polygons and two candidate building polygons: one candidate matches ref-1, one candidate is a false positive, and ref-2 is a false negative.",
"fixtures": {
"candidate": "fixtures/golden/predicted_buildings.geojson",
"reference": "fixtures/golden/reference_buildings.geojson"
},
"metrics": {
"f1": 0.5,
"false_negative_count": 1,
"false_positive_count": 1,
"mean_iou": 0.8339768339652592,
"precision": 0.5,
"recall": 0.5
},
"persistence": {
"commit_count": 1,
"metric_count": 6,
"metric_keys": [
"precision",
"recall",
"f1",
"mean_iou",
"false_positive_count",
"false_negative_count"
],
"quality_check_count": 1
},
"result_counts": {
"candidate_feature_count": 2,
"matches": 1,
"reference_feature_count": 2
},
"status": "passed"
},
{
"benchmark_id": "golden-buildings-perfect-match-v1",
"description": "One candidate building polygon exactly matches one reference polygon.",
"fixtures": {
"candidate": "fixtures/golden/predicted_buildings_perfect.geojson",
"reference": "fixtures/golden/reference_buildings_perfect.geojson"
},
"metrics": {
"f1": 1.0,
"false_negative_count": 0,
"false_positive_count": 0,
"mean_iou": 1.0,
"precision": 1.0,
"recall": 1.0
},
"persistence": {
"commit_count": 1,
"metric_count": 6,
"metric_keys": [
"precision",
"recall",
"f1",
"mean_iou",
"false_positive_count",
"false_negative_count"
],
"quality_check_count": 1
},
"result_counts": {
"candidate_feature_count": 1,
"matches": 1,
"reference_feature_count": 1
},
"status": "passed"
},
{
"benchmark_id": "golden-buildings-no-overlap-v1",
"description": "One candidate polygon and one reference polygon do not overlap.",
"fixtures": {
"candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson",
"reference": "fixtures/golden/reference_buildings_no_overlap.geojson"
},
"metrics": {
"f1": null,
"false_negative_count": 1,
"false_positive_count": 1,
"mean_iou": null,
"precision": 0.0,
"recall": 0.0
},
"persistence": {
"commit_count": 1,
"metric_count": 6,
"metric_keys": [
"precision",
"recall",
"f1",
"mean_iou",
"false_positive_count",
"false_negative_count"
],
"quality_check_count": 1
},
"result_counts": {
"candidate_feature_count": 1,
"matches": 0,
"reference_feature_count": 1
},
"status": "passed"
},
{
"benchmark_id": "golden-buildings-multipolygon-match-v1",
"description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.",
"fixtures": {
"candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson",
"reference": "fixtures/golden/reference_buildings_multipolygon.geojson"
},
"metrics": {
"f1": 1.0,
"false_negative_count": 0,
"false_positive_count": 0,
"mean_iou": 1.0,
"precision": 1.0,
"recall": 1.0
},
"persistence": {
"commit_count": 1,
"metric_count": 6,
"metric_keys": [
"precision",
"recall",
"f1",
"mean_iou",
"false_positive_count",
"false_negative_count"
],
"quality_check_count": 1
},
"result_counts": {
"candidate_feature_count": 1,
"matches": 1,
"reference_feature_count": 1
},
"status": "passed"
}
],
"status": "passed",
"version": 1
}
@@ -0,0 +1,157 @@
{
"benchmark_manifest_sha256": "0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642",
"critical_subgroup_policy": "Any required subgroup with insufficient support, missing metrics, a failed non-inferiority comparison or regression blocks promotion; averages cannot override it.",
"decision": "At least one mandatory Phase 4 gate failed; Phase 5 remains blocked.",
"gate_policy": "geointel-p4-evaluation-harness-v2",
"invalid_gate_states": {},
"local_gates": {
"all_declared_evaluator_families_exercised": {
"declared": [
"change_detection",
"footprint_segmentation",
"geospatial_data_validation",
"object_detection",
"raster_classification",
"terrain_interpretation",
"vector_comparison"
],
"observed": [
"change_detection",
"footprint_segmentation",
"geospatial_data_validation",
"object_detection",
"raster_classification",
"terrain_interpretation",
"vector_comparison"
],
"status": "pass"
},
"complete_raw_predictions_retained": {
"status": "pass",
"violating_samples": []
},
"implemented_capability_inventory": {
"capability_count": 15,
"status": "pass"
},
"manifest_training_firewall_contract": {
"checks": {
"clean_train_allowed": true,
"non_train_role_blocked": true,
"protected_path_blocked": true,
"renamed_protected_lineage_blocked": true
},
"status": "pass"
},
"normative_split_roles_and_leakage": {
"leakage_status": "pass",
"observed_roles": [
"background-test",
"calibration",
"challenge",
"test",
"train",
"val"
],
"required_roles": [
"background-test",
"calibration",
"challenge",
"test",
"train",
"val"
],
"status": "pass"
},
"protected_operating_point_contract": {
"evidence": "Protected cases carry pre-registered configurations. Fixed AP/risk-coverage diagnostics cannot select an operating point or feed back into training.",
"status": "pass"
},
"reference_implementation_baseline": {
"status": "pass"
},
"stratified_metric_contract": {
"observed_overall_status": "not_evaluable",
"status": "pass"
},
"undefined_metric_truth_table": {
"sample_id": "background-test-pure-empty",
"status": "pass"
}
},
"local_harness_status": "pass",
"missing_gate_names": {
"local": [],
"product": []
},
"numeric_model_release_targets": "not_frozen_without_reviewed_representative_incumbent_baseline",
"phase_decision": "blocked",
"product_benchmark_status": "fail",
"product_gates": {
"active_model_available_and_hash_verified": {
"configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"configured_sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"reason": "Configured active model is not locally accessible.",
"status": "not_evaluable"
},
"authoritative_reference_portfolio_available": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"executed_product_incumbent_baseline": {
"checked_artifacts": [],
"derived_gates": {
"authoritative_reference_portfolio_available": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"human_review_complete": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"protected_storage_isolation": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"representative_product_subgroup_support": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"split_independence": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
}
},
"expected_path": "artifacts/evidence/accuracy/P4/product-baseline-manifest.json",
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"human_review_complete": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"phase3_leakage_resolved": {
"observed": "attention",
"status": "fail"
},
"protected_storage_isolation": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"representative_product_subgroup_support": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
},
"split_independence": {
"reason": "No executed, hash-bound product incumbent baseline manifest is available.",
"status": "not_evaluable"
}
},
"promotion_allowed": false,
"schema_version": 2,
"status": "fail",
"unexpected_gate_names": {
"local": [],
"product": []
}
}
@@ -0,0 +1,46 @@
{
"checked_identity_fields": [
"sample_id",
"group_id",
"source_family",
"acquisition_date",
"temporal_family",
"object_ids",
"native_feature_ids",
"raw_image_sha256",
"processed_image_sha256",
"label_sha256",
"record_sha256",
"perceptual_image_hash",
"label_geometry_hash",
"label_geometry_fingerprint",
"parent_raster_id",
"acquisition_id",
"bbox_distance"
],
"crs_validation": {
"crs": "EPSG:31370",
"distance_units": "m",
"status": "pass"
},
"development_manifest_sha256": "64e4fc986c2390bedfbe100062d4b06e1098689f4d4a9a9da13a7f67357c0493",
"finding_count": 0,
"findings": [],
"generator_version": "1.3.0",
"independence_buffer_m": 2000.0,
"inventory_total": 21,
"label_geometry_hamming_threshold": 2,
"perceptual_hamming_threshold": 4,
"protected_manifest_sha256": "e57ca1529654ef1c2527e84122ff26ec3533e7c70658250983968fbc5d4af410",
"schema_version": 1,
"source_manifest_sha256": "1c75c875d4c297d046117bb9393ba5e648f13d3358ea92cb65374869c8f5fc01",
"split_counts": {
"background-test": 2,
"calibration": 2,
"challenge": 4,
"test": 7,
"train": 3,
"val": 3
},
"status": "pass"
}
@@ -0,0 +1,207 @@
{
"results": [
{
"metadata": {
"context": "dense_urban_raster",
"date": "2025-10-05",
"difficulty": "hard",
"label_review_state": "fixture_reviewed",
"municipality": "Brussel",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "brussels",
"resolution_m": 1,
"season": "autumn",
"sensor": "synthetic-multispectral",
"source": "fixture-thematic-raster",
"tile_edge": true,
"urbanity": "urban",
"vegetation": "moderate"
},
"metrics": {
"accuracy": 0.8333333333333334,
"accuracy_ci95_wilson": {
"lower": 0.5519691377470266,
"method": "Wilson score interval",
"status": "computed",
"support": 12,
"upper": 0.9530348578161463
},
"alignment_validated": true,
"confusion_matrix": {
"0": {
"0": 4,
"1": 0,
"2": 0,
"__prediction_nodata__": 0
},
"1": {
"0": 0,
"1": 4,
"2": 1,
"__prediction_nodata__": 0
},
"2": {
"0": 0,
"1": 1,
"2": 2,
"__prediction_nodata__": 0
}
},
"correct_pixel_count": 10,
"evaluated_reference_pixel_count": 12,
"ignored_reference_pixel_count": 0,
"macro_f1": 0.8222222222222223,
"mean_iou": 0.7222222222222222,
"per_class": {
"0": {
"f1": 1.0,
"false_discovery_rate": 0.0,
"false_negative": 0,
"false_positive": 0,
"iou": 1.0,
"miss_rate": 0.0,
"precision": 1.0,
"precision_ci95_wilson": {
"lower": 0.5101091635454027,
"method": "Wilson score interval",
"status": "computed",
"support": 4,
"upper": 1.0
},
"prediction_count": 4,
"recall": 1.0,
"recall_ci95_wilson": {
"lower": 0.5101091635454027,
"method": "Wilson score interval",
"status": "computed",
"support": 4,
"upper": 1.0
},
"reference_count": 4,
"true_positive": 4
},
"1": {
"f1": 0.8000000000000002,
"false_discovery_rate": 0.2,
"false_negative": 1,
"false_positive": 1,
"iou": 0.6666666666666666,
"miss_rate": 0.2,
"precision": 0.8,
"precision_ci95_wilson": {
"lower": 0.37553462976252533,
"method": "Wilson score interval",
"status": "computed",
"support": 5,
"upper": 0.9637758913675698
},
"prediction_count": 5,
"recall": 0.8,
"recall_ci95_wilson": {
"lower": 0.37553462976252533,
"method": "Wilson score interval",
"status": "computed",
"support": 5,
"upper": 0.9637758913675698
},
"reference_count": 5,
"true_positive": 4
},
"2": {
"f1": 0.6666666666666666,
"false_discovery_rate": 0.3333333333333333,
"false_negative": 1,
"false_positive": 1,
"iou": 0.5,
"miss_rate": 0.3333333333333333,
"precision": 0.6666666666666666,
"precision_ci95_wilson": {
"lower": 0.2076596008020477,
"method": "Wilson score interval",
"status": "computed",
"support": 3,
"upper": 0.9385080552796037
},
"prediction_count": 3,
"recall": 0.6666666666666666,
"recall_ci95_wilson": {
"lower": 0.2076596008020477,
"method": "Wilson score interval",
"status": "computed",
"support": 3,
"upper": 0.9385080552796037
},
"reference_count": 3,
"true_positive": 2
}
},
"pixel_count": 12,
"prediction_coverage": 1.0,
"prediction_coverage_ci95_wilson": {
"lower": 0.7575059933447592,
"method": "Wilson score interval",
"status": "computed",
"support": 12,
"upper": 1.0
},
"prediction_outside_reference_count": 0,
"prediction_present_pixel_count": 12
},
"sample_id": "raster-test-brussels-urban",
"task": "raster_classification"
},
{
"metadata": {
"context": "terrain_profile",
"date": "2023-01-01",
"difficulty": "normal",
"label_review_state": "fixture_reviewed",
"municipality": "Hasselt",
"object_size": "not_applicable",
"occlusion": "not_applicable",
"ood": false,
"region": "flanders",
"resolution_m": 5,
"season": "not_applicable",
"sensor": "elevation-raster",
"source": "fixture-dhmv",
"tile_edge": false,
"urbanity": "rural",
"vegetation": "moderate"
},
"metrics": {
"absolute_error_sum": 1.0999999999999996,
"bias": 0.02499999999999991,
"coverage": 0.8,
"coverage_ci95_wilson": {
"lower": 0.37553462976252533,
"method": "Wilson score interval",
"status": "computed",
"support": 5,
"upper": 0.9637758913675698
},
"error_distribution": {
"count": 4,
"max": 0.40000000000000036,
"mean": 0.02499999999999991,
"median": 0.0,
"min": -0.3000000000000007
},
"error_sum": 0.09999999999999964,
"evaluated_count": 4,
"mae": 0.2749999999999999,
"missing_count": 1,
"reference_count": 5,
"rmse": 0.2872281323269015,
"squared_error_sum": 0.3300000000000001,
"units": "m_TAW"
},
"sample_id": "terrain-test-flanders-rural",
"task": "terrain_interpretation"
}
],
"schema_version": 2,
"status": "fixture_contract_only"
}
@@ -0,0 +1,28 @@
{
"benchmark_manifest_sha256": "0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642",
"case_count": 9,
"evaluation_results_canonical_json_sha256": "55cdba9cce4dcdc88cee0829cd510d7e624a3472feb9d33f7e681621a792eba3",
"evidence_path": "artifacts/evidence/accuracy/P4/runs/p4-2.0.1-9677d0ef37db82bcf39b",
"evidence_run_id": "p4-2.0.1-9677d0ef37db82bcf39b",
"failure_example_count": 14,
"implemented_capability_count": 15,
"local_harness_status": "pass",
"phase4_done": false,
"phase5_ready": false,
"phase_decision": "blocked",
"product_benchmark_status": "fail",
"product_gate_evidence_sha256": "c9f5e3de3ab6d64911f8807b26caa661ccf911a5fd6b995107edda2004836e0c",
"promotion_allowed": false,
"reference_baseline_sha256": "aeb0f6510352f4e205e4fc4e8c423110ca72c2142016c7af846d758865f258c6",
"schema_version": 2,
"split_counts": {
"background-test": 2,
"calibration": 2,
"challenge": 4,
"test": 7,
"train": 3,
"val": 3
},
"status": "fail",
"task_family_count": 7
}
+53
View File
@@ -12391,3 +12391,56 @@ Open:
**ready** for remediation/review. This does not unlock training, promotion, **ready** for remediation/review. This does not unlock training, promotion,
national validation or production release; those gates remain governed by national validation or production release; those gates remain governed by
the execution contract and the incomplete Phase 2 gates. the execution contract and the incomplete Phase 2 gates.
## 2026-08-02 - Accuracy Improvement Program Phase 4 evaluation harness
### Implemented and verified scope
- Added a deterministic evaluator for object detection, building-footprint
segmentation, categorical raster interpretation, vector comparison, change
detection, terrain/height interpretation and geospatial data validation. It
retains exact references, pre-/post-filter predictions, config and lineage,
and reports task metrics, Wilson intervals, calibration, abstention,
subgroup support and a stable failure taxonomy.
- Added a six-role split generator for `train`, `val`, `calibration`, `test`,
`background-test` and sealed `challenge`, with exact/near-duplicate,
identity, acquisition, object, geometry and 2-km spatial leakage gates.
Product mode requires strict P3/provenance records and rehashes four physical
asset types; protected roles are rejected by the training firewall.
- Added a fail-closed governed product-baseline validator. It recomputes all
seven task families in-process and verifies current active-model bytes,
CUDA/GPU identity, authority, human review, leakage, vault and all thirteen
subgroup dimensions. Loose status fields cannot turn a productgate green.
- Fixed an evidence-ledger self-reference in workflow v2.0.1: only the
gate-relevant `/runtime/active_model` projection from `status.json` is
canonically hashed. Updating timestamps, Phase-4/5 bookkeeping, documents or
evidence IDs therefore leaves the run fingerprint stable; changing the
active model changes it.
### Evidence and verification
- Normative run `p4-2.0.1-9677d0ef37db82bcf39b` is bound to source commit
`70fb4b94e5cb7c248beec5a936ce186f38cc183c`. Its canonical benchmark hash is
`0ea5ab07f46c509a7a24943b31d5e9bfd6368920609227bc47613e18e52c4642` and
its evidence-manifest file hash is
`fdc15a95ee2a0754dfa169f4b41036e084b8d8909afc37fd8ea68ee6b9210f98`.
- The targeted Phase-4 suite passed 60 tests. The broader contracts,
provenance, Phase-3/4, golden-QA, runtime-model and migration suite passed
103 tests with the installed Git Bash provider; the Windows Store WSL stub
was unavailable and is not a code failure. The focused migration/provenance
subset passed 29 tests and Alembic has one head, `202608010001`.
- Ruff, Ruff format check, compileall and diff check passed on all Phase-4
paths. No Python mypy/pyright typecheck is configured in this repository.
- Repeated workflow execution produced the same run ID and byte-identical
immutable bundle. `--allow-product-blocked` returned 0; standard fail-closed
execution returned 2.
### Decision
- The local harness is `pass`, but the governed product benchmark is `fail`
because Phase-3 leakage remains `attention`. Active model execution,
authority coverage, representative review, independent product splits,
physical vault isolation and thirteen-dimension subgroup support remain
`not_evaluable` without governed evidence. Phase 4 remains **in progress**,
Phase 5 remains **not ready**, and promotion/training feedback from protected
data is not authorized.
+28
View File
@@ -16,6 +16,34 @@ Uitvoeringsbord: `docs/PYTORCH_TRAINING_ROADMAP_BELGIUM.md`.
- [ ] Train en evalueer een Belgische gebouwchallenger onafhankelijk; promoveer alleen zonder achtergrondregressie. - [ ] Train en evalueer een Belgische gebouwchallenger onafhankelijk; promoveer alleen zonder achtergrondregressie.
- [ ] Houd zonnepanelen en segmentatie `not_configured` tot gereviewde taaklabels en hold-outs bestaan. - [ ] Houd zonnepanelen en segmentatie `not_configured` tot gereviewde taaklabels en hold-outs bestaan.
## Accuracy-programma — fase 4
Normatieve protocollen: `docs/accuracy-program/10-evaluation-protocol.md`,
`11-baseline-benchmark.md` en `12-release-gates.md`.
- [x] Inventariseer 15 geïmplementeerde capabilities in zeven afzonderlijke
evaluatorfamilies zonder deterministische GIS als geleerd model voor te stellen.
- [x] Implementeer taakgebonden metrics, raw prediction-retentie,
betrouwbaarheidsintervallen, subgroepsupport en een machineleesbare
failure-taxonomie.
- [x] Genereer zes code-owned splitrollen (`train`, `val`, `calibration`,
`test`, `background-test`, sealed `challenge`) met exacte, near-duplicate-,
identiteit-, tijd- en 2-km-leakagegates.
- [x] Bescherm test/background-test/challenge tegen training, thresholdselectie,
modelselectie, gewijzigde bytes en onbewezen provenance.
- [x] Voer de bestaande `QaService` als referentienulmeting uit en leg alle
Phase-4-evidence content-addressed en immutable vast.
- [x] Maak statusboekhouding zelfreferentievrij: alleen de actieve-modelprojectie
beïnvloedt de benchmarkfingerprint; productgates vereisen governed evidence.
- [ ] Los de bevestigde Phase-3-leakagebevinding op en freeze nieuwe onafhankelijke
product-splits zonder cross-splitparen onder 2 km.
- [ ] Lever één governed zeven-taken productbaseline met actuele modelbytes,
CUDA/GPU-receipt, authorityportfolio en in-process herberekende raw metrics.
- [ ] Lever checksumgebonden menselijke review, fysieke protected vault en
representatieve support voor alle 13 kritieke subgroepdimensies.
- [ ] Markeer fase 4 pas `done` en fase 5 pas `ready` wanneer alle productgates
in dezelfde workflow `pass` zijn; huidige status is local `pass`, product `fail`.
## Actieve post-RC datadekkingsfase ## Actieve post-RC datadekkingsfase
Professionaliseringspass (2026-07-27): Professionaliseringspass (2026-07-27):
@@ -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 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. 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 ## 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. 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, "schema_version": 1,
"program": "GeoIntel Accuracy Improvement Program", "program": "GeoIntel Accuracy Improvement Program",
"phase": "P4", "phase": "P4",
"generated_at": "2026-08-02T01:04:48+02:00", "generated_at": "2026-08-02T04:40:51+02:00",
"scope": { "scope": {
"product": "Belgium and the Belgian North Sea", "product": "Belgium and the Belgian North Sea",
"active_building_model_claim": "Mol/Kempen only, operator review required", "active_building_model_claim": "Mol/Kempen only, operator review required",
@@ -104,9 +104,56 @@
] ]
}, },
"phase4": { "phase4": {
"status": "ready", "status": "in_progress",
"meaning": "Ready to remediate and review the P3 anomaly and quarantine manifests; release gates remain governed by P2 and the execution contract.", "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.",
"evidence_root": "artifacts/evidence/accuracy/P3" "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": { "runtime": {
"cuda_available": true, "cuda_available": true,
@@ -276,6 +323,35 @@
"static_inventory": "artifacts/evidence/accuracy/P2/source-contract-inventory.json", "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." "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": { "golden_qa": {
"semantic_results_stable": true, "semantic_results_stable": true,
"byte_identical": false, "byte_identical": false,
@@ -311,12 +387,21 @@
"docs/accuracy-program/06-implementation-roadmap.md", "docs/accuracy-program/06-implementation-roadmap.md",
"docs/accuracy-program/07-source-authority-matrix.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" "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_root": "artifacts/evidence/accuracy/P1",
"evidence_manifest": "artifacts/evidence/accuracy/P1/evidence-manifest.json", "evidence_manifest": "artifacts/evidence/accuracy/P1/evidence-manifest.json",
"phase2_evidence_root": "artifacts/evidence/accuracy/P2", "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_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"
} }