audit: seal accuracy phase 1 evidence

This commit is contained in:
Jens
2026-08-01 19:02:24 +02:00
parent 3d442ef43f
commit cebeb5f3b4
29 changed files with 11269 additions and 10990 deletions
+3 -2
View File
@@ -12,5 +12,6 @@ Dockerfile text eol=lf
*.css text eol=lf *.css text eol=lf
*.json text eol=lf *.json text eol=lf
# Retained audit exports preserve source bytes, including tool-emitted whitespace. # Retained audit exports preserve source bytes, including line endings and
artifacts/evidence/accuracy/** -whitespace # tool-emitted whitespace.
artifacts/evidence/accuracy/** -text -whitespace
@@ -1,5 +1,5 @@
command=python -m alembic heads command=python -m alembic heads
exit_code=0 exit_code=0
captured_at=2026-08-01T18:37:24.0020021+02:00 captured_at=2026-08-01T18:37:24.0020021+02:00
202607260001 (head) 202607260001 (head)
File diff suppressed because it is too large Load Diff
@@ -1,28 +1,28 @@
workdir=backend workdir=backend
command=python -m pytest -W error::DeprecationWarning command=python -m pytest -W error::DeprecationWarning
exit_code=2 exit_code=2
captured_at=2026-08-01T18:33:34.1591431+02:00 captured_at=2026-08-01T18:33:34.1591431+02:00
============================= test session starts ============================= ============================= test session starts =============================
platform win32 -- Python 3.13.2, pytest-8.4.0, pluggy-1.6.0 platform win32 -- Python 3.13.2, pytest-8.4.0, pluggy-1.6.0
rootdir: C:\Projects\geointel\backend rootdir: C:\Projects\geointel\backend
configfile: pyproject.toml configfile: pyproject.toml
plugins: asyncio-1.0.0, cov-6.3.0, anyio-4.12.1 plugins: asyncio-1.0.0, cov-6.3.0, anyio-4.12.1
asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function asyncio: mode=Mode.STRICT, asyncio_default_fixture_loop_scope=None, asyncio_default_test_loop_scope=function
collected 1194 items / 1 error collected 1194 items / 1 error
=================================== ERRORS ==================================== =================================== ERRORS ====================================
__________ ERROR collecting tests/test_operator_polygon_label_qa.py ___________ __________ ERROR collecting tests/test_operator_polygon_label_qa.py ___________
ImportError while importing test module 'C:\Projects\geointel\backend\tests\test_operator_polygon_label_qa.py'. ImportError while importing test module 'C:\Projects\geointel\backend\tests\test_operator_polygon_label_qa.py'.
Hint: make sure your test modules/packages have valid Python names. Hint: make sure your test modules/packages have valid Python names.
Traceback: Traceback:
C:\Program Files\Python313\Lib\importlib\__init__.py:88: in import_module C:\Program Files\Python313\Lib\importlib\__init__.py:88: in import_module
return _bootstrap._gcd_import(name[level:], package, level) return _bootstrap._gcd_import(name[level:], package, level)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
tests\test_operator_polygon_label_qa.py:1: in <module> tests\test_operator_polygon_label_qa.py:1: in <module>
from scripts.render_operator_polygon_label_qa import geometry_rings from scripts.render_operator_polygon_label_qa import geometry_rings
E ModuleNotFoundError: No module named 'scripts.render_operator_polygon_label_qa' E ModuleNotFoundError: No module named 'scripts.render_operator_polygon_label_qa'
=========================== short test summary info =========================== =========================== short test summary info ===========================
ERROR tests/test_operator_polygon_label_qa.py ERROR tests/test_operator_polygon_label_qa.py
!!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!! Interrupted: 1 error during collection !!!!!!!!!!!!!!!!!!!!
============================== 1 error in 5.69s =============================== ============================== 1 error in 5.69s ===============================
File diff suppressed because one or more lines are too long
@@ -1,325 +1,325 @@
command=python -m pytest backend/tests -q -p no:cacheprovider -W error::DeprecationWarning --junitxml=artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml command=python -m pytest backend/tests -q -p no:cacheprovider -W error::DeprecationWarning --junitxml=artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml
exit_code=1 exit_code=1
captured_at=2026-08-01T18:32:02.4460806+02:00 captured_at=2026-08-01T18:32:02.4460806+02:00
........................................................................ [ 6%] ........................................................................ [ 6%]
........................................................................ [ 12%] ........................................................................ [ 12%]
.........................................F..........F..................F [ 18%] .........................................F..........F..................F [ 18%]
..................F..................................................... [ 24%] ..................F..................................................... [ 24%]
.........F.............................................................. [ 30%] .........F.............................................................. [ 30%]
........................................................................ [ 36%] ........................................................................ [ 36%]
.....F.F.......................................FF....................... [ 42%] .....F.F.......................................FF....................... [ 42%]
........................................................................ [ 48%] ........................................................................ [ 48%]
..F..................................................................... [ 54%] ..F..................................................................... [ 54%]
........................................................................ [ 60%] ........................................................................ [ 60%]
.......F................................................................ [ 66%] .......F................................................................ [ 66%]
........................................................................ [ 72%] ........................................................................ [ 72%]
........................................FFFF...........F................ [ 78%] ........................................FFFF...........F................ [ 78%]
...............................................F........................ [ 84%] ...............................................F........................ [ 84%]
........................................................................ [ 90%] ........................................................................ [ 90%]
........................................................................ [ 96%] ........................................................................ [ 96%]
............................................. [100%] ............................................. [100%]
================================== FAILURES =================================== ================================== FAILURES ===================================
_ test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox _ _ test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox _
def test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox() -> None: def test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox() -> None:
root = Path(__file__).parents[2] root = Path(__file__).parents[2]
focus = (root / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(encoding="utf-8") focus = (root / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(encoding="utf-8")
workspace_hook = (root / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(encoding="utf-8") workspace_hook = (root / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(encoding="utf-8")
coverage_hook = (root / "frontend" / "src" / "hooks" / "useCoverageResolver.ts").read_text(encoding="utf-8") coverage_hook = (root / "frontend" / "src" / "hooks" / "useCoverageResolver.ts").read_text(encoding="utf-8")
map_workspace = (root / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8") map_workspace = (root / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
assert "Belgium and North Sea Workbench" in focus assert "Belgium and North Sea Workbench" in focus
assert "nationalProject" in workspace_hook assert "nationalProject" in workspace_hook
assert "return nationalProject.id" in workspace_hook assert "return nationalProject.id" in workspace_hook
assert "NATIONAL_WORKSPACE_REGION" in workspace_hook assert "NATIONAL_WORKSPACE_REGION" in workspace_hook
assert "externalApi.resolveCoverage" in coverage_hook assert "externalApi.resolveCoverage" in coverage_hook
assert "coverage.outside_supported_scope" in map_workspace assert "coverage.outside_supported_scope" in map_workspace
assert "coverageStatusLabel" in map_workspace assert "coverageStatusLabel" in map_workspace
> assert "coverageSelectionAvailable" in map_workspace > assert "coverageSelectionAvailable" in map_workspace
E assert 'coverageSelectionAvailable' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'coverageSelectionAvailable' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_rc4_national_coverage.py:432: AssertionError backend\tests\test_rc4_national_coverage.py:432: AssertionError
____ test_runtime_configuration_is_validated_before_container_replacement _____ ____ test_runtime_configuration_is_validated_before_container_replacement _____
def test_runtime_configuration_is_validated_before_container_replacement() -> None: def test_runtime_configuration_is_validated_before_container_replacement() -> None:
run_script = (ROOT / "deploy" / "unraid" / "run-dockerman-container.sh").read_text(encoding="utf-8") run_script = (ROOT / "deploy" / "unraid" / "run-dockerman-container.sh").read_text(encoding="utf-8")
validation_index = run_script.index("validate_runtime_config") validation_index = run_script.index("validate_runtime_config")
> replacement_index = run_script.index("docker compose down") > replacement_index = run_script.index("docker compose down")
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
E ValueError: substring not found E ValueError: substring not found
backend\tests\test_rc5_release_deployment.py:65: ValueError backend\tests\test_rc5_release_deployment.py:65: ValueError
___________ test_rc9_loading_and_accessibility_states_are_explicit ____________ ___________ test_rc9_loading_and_accessibility_states_are_explicit ____________
def test_rc9_loading_and_accessibility_states_are_explicit() -> None: def test_rc9_loading_and_accessibility_states_are_explicit() -> None:
app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
map_workspace = ( map_workspace = (
ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx" ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
).read_text(encoding="utf-8") ).read_text(encoding="utf-8")
geo_map = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text( geo_map = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
encoding="utf-8" encoding="utf-8"
) )
assert "workspaceDataLoading" in app assert "workspaceDataLoading" in app
assert 'role="status" aria-live="polite"' in app assert 'role="status" aria-live="polite"' in app
assert "Databronnen worden gecontroleerd" in map_workspace assert "Databronnen worden gecontroleerd" in map_workspace
> assert "Beschikbaarheid controleren" in map_workspace > assert "Beschikbaarheid controleren" in map_workspace
E assert 'Beschikbaarheid controleren' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'Beschikbaarheid controleren' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_rc9_ux_release_contract.py:33: AssertionError backend\tests\test_rc9_ux_release_contract.py:33: AssertionError
___________ test_all_in_one_deploy_embeds_immutable_build_identity ____________ ___________ test_all_in_one_deploy_embeds_immutable_build_identity ____________
def test_all_in_one_deploy_embeds_immutable_build_identity() -> None: def test_all_in_one_deploy_embeds_immutable_build_identity() -> None:
dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8") dockerfile = (ROOT / "deploy" / "unraid" / "Dockerfile.all-in-one").read_text(encoding="utf-8")
release_script = (ROOT / "deploy" / "unraid" / "deploy-release.sh").read_text(encoding="utf-8") release_script = (ROOT / "deploy" / "unraid" / "deploy-release.sh").read_text(encoding="utf-8")
deploy_powershell = (ROOT / "scripts" / "deploy_tower.ps1").read_text(encoding="utf-8") deploy_powershell = (ROOT / "scripts" / "deploy_tower.ps1").read_text(encoding="utf-8")
deploy_shell = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8") deploy_shell = (ROOT / "scripts" / "deploy_tower.sh").read_text(encoding="utf-8")
assert "ARG GEOINTEL_BUILD_SHA=unknown" in dockerfile assert "ARG GEOINTEL_BUILD_SHA=unknown" in dockerfile
assert 'GEOINTEL_BUILD_SHA="${GEOINTEL_BUILD_SHA}"' in dockerfile assert 'GEOINTEL_BUILD_SHA="${GEOINTEL_BUILD_SHA}"' in dockerfile
assert 'GEOINTEL_BUILD_TIME="${GEOINTEL_BUILD_TIME}"' in dockerfile assert 'GEOINTEL_BUILD_TIME="${GEOINTEL_BUILD_TIME}"' in dockerfile
assert 'org.opencontainers.image.revision="${GEOINTEL_BUILD_SHA}"' in dockerfile assert 'org.opencontainers.image.revision="${GEOINTEL_BUILD_SHA}"' in dockerfile
> assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in release_script > assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in release_script
E assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in '#!/usr/bin/env bash\nset -euo pipefail\n\nROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"\ncd "$ROOT"\n\nG...ge.revision"}} created={{index .Config.Labels "org.opencontainers.image.created"}}\' \\\n "$GEOINTEL_RELEASE_IMAGE"\n' E assert 'GEOINTEL_BUILD_SHA="$(git rev-parse HEAD)"' in '#!/usr/bin/env bash\nset -euo pipefail\n\nROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/../.." && pwd)"\ncd "$ROOT"\n\nG...ge.revision"}} created={{index .Config.Labels "org.opencontainers.image.created"}}\' \\\n "$GEOINTEL_RELEASE_IMAGE"\n'
backend\tests\test_rc_runtime_observability.py:47: AssertionError backend\tests\test_rc_runtime_observability.py:47: AssertionError
_____________ test_frontend_exposes_map_bbox_selection_contracts ______________ _____________ test_frontend_exposes_map_bbox_selection_contracts ______________
def test_frontend_exposes_map_bbox_selection_contracts() -> None: def test_frontend_exposes_map_bbox_selection_contracts() -> None:
api_client = (ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts").read_text(encoding="utf-8") api_client = (ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts").read_text(encoding="utf-8")
map_workspace = (ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8") map_workspace = (ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx").read_text(encoding="utf-8")
geomap = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8") geomap = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(encoding="utf-8")
app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
extract_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapSelectionExtract.ts").read_text(encoding="utf-8") extract_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapSelectionExtract.ts").read_text(encoding="utf-8")
theme_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts").read_text(encoding="utf-8") theme_hook = (ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
assert "selectVectorFeatures" in api_client assert "selectVectorFeatures" in api_client
assert "Area selection" in map_workspace assert "Area selection" in map_workspace
assert "Teken rechthoek" in map_workspace assert "Teken rechthoek" in map_workspace
assert "Objecten in gebied ophalen" in map_workspace assert "Objecten in gebied ophalen" in map_workspace
assert "Gebiedsdownload bewaren" in map_workspace assert "Gebiedsdownload bewaren" in map_workspace
assert "bboxSelectionMode" in geomap assert "bboxSelectionMode" in geomap
assert "selection-bbox" in geomap assert "selection-bbox" in geomap
assert "selection-result" in geomap assert "selection-result" in geomap
assert "useMapSelectionExtract" in app assert "useMapSelectionExtract" in app
assert "area_id: areaId" in extract_hook assert "area_id: areaId" in extract_hook
assert "area_id: areaId" in theme_hook assert "area_id: areaId" in theme_hook
> assert "analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in map_workspace > assert "analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in map_workspace
E assert 'analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint106_map_bbox_extract.py:356: AssertionError backend\tests\test_sprint106_map_bbox_extract.py:356: AssertionError
______ test_frontend_declares_national_scope_as_primary_operating_focus _______ ______ test_frontend_declares_national_scope_as_primary_operating_focus _______
def test_frontend_declares_national_scope_as_primary_operating_focus() -> None: def test_frontend_declares_national_scope_as_primary_operating_focus() -> None:
focus = (ROOT / "frontend" / "src" / "config" / "primaryFocus.ts").read_text( focus = (ROOT / "frontend" / "src" / "config" / "primaryFocus.ts").read_text(
encoding="utf-8" encoding="utf-8"
) )
project_hook = (ROOT / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text( project_hook = (ROOT / "frontend" / "src" / "hooks" / "useProjectWorkspace.ts").read_text(
encoding="utf-8" encoding="utf-8"
) )
map_source = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text( map_source = (ROOT / "frontend" / "src" / "components" / "GeoMap.tsx").read_text(
encoding="utf-8" encoding="utf-8"
) )
navigation = ( navigation = (
ROOT ROOT
/ "frontend" / "frontend"
/ "src" / "src"
/ "components" / "components"
/ "shell" / "shell"
/ "WorkbenchNavigation.tsx" / "WorkbenchNavigation.tsx"
).read_text(encoding="utf-8") ).read_text(encoding="utf-8")
assert "NATIONAL_WORKSPACE_PROJECT_NAME = 'Belgium and North Sea Workbench'" in focus assert "NATIONAL_WORKSPACE_PROJECT_NAME = 'Belgium and North Sea Workbench'" in focus
assert "NATIONAL_WORKSPACE_REGION = 'Belgie en Belgische Noordzee'" in focus assert "NATIONAL_WORKSPACE_REGION = 'Belgie en Belgische Noordzee'" in focus
assert "NATIONAL_MAP_CENTER" in focus assert "NATIONAL_MAP_CENTER" in focus
assert "return nationalProject.id" in project_hook assert "return nationalProject.id" in project_hook
assert "hasMappedAnalysisContext(data)" in project_hook assert "hasMappedAnalysisContext(data)" in project_hook
assert "dataset.dataset_type === 'raster'" in project_hook assert "dataset.dataset_type === 'raster'" in project_hook
assert "dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson'" in project_hook assert "dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson'" in project_hook
assert "PRIMARY_FOCUS_AREA_NAME" not in project_hook assert "PRIMARY_FOCUS_AREA_NAME" not in project_hook
assert "PRIMARY_FOCUS_AREA_GEOJSON" not in project_hook assert "PRIMARY_FOCUS_AREA_GEOJSON" not in project_hook
assert "center: NATIONAL_MAP_CENTER" in map_source assert "center: NATIONAL_MAP_CENTER" in map_source
assert "zoom: NATIONAL_MAP_ZOOM" in map_source assert "zoom: NATIONAL_MAP_ZOOM" in map_source
assert "GeoIntel" in navigation assert "GeoIntel" in navigation
> assert "Atlas Workbench" in navigation > assert "Atlas Workbench" in navigation
E AssertionError: assert 'Atlas Workbench' in 'import {\n Activity,\n Bot,\n Database,\n Download,\n Map,\n ScanSearch,\n Settings,\n ShieldCheck,\n type L... )\n })}\n </div>\n ))}\n </nav>\n <ItWorxSignature />\n </aside>\n )\n}\n' E AssertionError: assert 'Atlas Workbench' in 'import {\n Activity,\n Bot,\n Database,\n Download,\n Map,\n ScanSearch,\n Settings,\n ShieldCheck,\n type L... )\n })}\n </div>\n ))}\n </nav>\n <ItWorxSignature />\n </aside>\n )\n}\n'
backend\tests\test_sprint177_mol_primary_focus.py:38: AssertionError backend\tests\test_sprint177_mol_primary_focus.py:38: AssertionError
______ test_product_docs_record_national_scope_and_mol_regression_focus _______ ______ test_product_docs_record_national_scope_and_mol_regression_focus _______
def test_product_docs_record_national_scope_and_mol_regression_focus() -> None: def test_product_docs_record_national_scope_and_mol_regression_focus() -> None:
readme = (ROOT / "README.md").read_text(encoding="utf-8") readme = (ROOT / "README.md").read_text(encoding="utf-8")
vision = (ROOT / "docs" / "PRODUCT_VISION.md").read_text(encoding="utf-8") vision = (ROOT / "docs" / "PRODUCT_VISION.md").read_text(encoding="utf-8")
> assert "Belgium and the Belgian North Sea" in readme > assert "Belgium and the Belgian North Sea" in readme
E assert 'Belgium and the Belgian North Sea' in '# GeoIntel\n\n<p align="center">\n <img src="frontend/public/geointel-icon.png" width="92" alt="GeoIntel logo">\n</p...\n\nActieve mijlpaal: **v1.0.0 Belgium and Belgian North Sea**.\n\nGeoIntel is een project van Jens / ITWorx.tech.\n' E assert 'Belgium and the Belgian North Sea' in '# GeoIntel\n\n<p align="center">\n <img src="frontend/public/geointel-icon.png" width="92" alt="GeoIntel logo">\n</p...\n\nActieve mijlpaal: **v1.0.0 Belgium and Belgian North Sea**.\n\nGeoIntel is een project van Jens / ITWorx.tech.\n'
backend\tests\test_sprint177_mol_primary_focus.py:62: AssertionError backend\tests\test_sprint177_mol_primary_focus.py:62: AssertionError
_____________ test_map_first_explorer_is_the_default_product_flow _____________ _____________ test_map_first_explorer_is_the_default_product_flow _____________
def test_map_first_explorer_is_the_default_product_flow() -> None: def test_map_first_explorer_is_the_default_product_flow() -> None:
app = read("frontend/src/App.tsx") app = read("frontend/src/App.tsx")
workspace = read("frontend/src/components/map/MapWorkspace.tsx") workspace = read("frontend/src/components/map/MapWorkspace.tsx")
assert "useState<WorkspaceKey>('map')" in app assert "useState<WorkspaceKey>('map')" in app
assert "Gebied analyseren" in workspace assert "Gebied analyseren" in workspace
> assert "<h3>Focus op de kaart <small>optioneel</small></h3>" in workspace > assert "<h3>Focus op de kaart <small>optioneel</small></h3>" in workspace
E assert '<h3>Focus op de kaart <small>optioneel</small></h3>' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert '<h3>Focus op de kaart <small>optioneel</small></h3>' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint186_map_first_geographic_explorer.py:19: AssertionError backend\tests\test_sprint186_map_first_geographic_explorer.py:19: AssertionError
___________ test_map_rectangle_drag_is_wired_to_automatic_analysis ____________ ___________ test_map_rectangle_drag_is_wired_to_automatic_analysis ____________
def test_map_rectangle_drag_is_wired_to_automatic_analysis() -> None: def test_map_rectangle_drag_is_wired_to_automatic_analysis() -> None:
workspace = read("frontend/src/components/map/MapWorkspace.tsx") workspace = read("frontend/src/components/map/MapWorkspace.tsx")
geomap = read("frontend/src/components/GeoMap.tsx") geomap = read("frontend/src/components/GeoMap.tsx")
styles = read("frontend/src/styles/app.css") styles = read("frontend/src/styles/app.css")
assert "onMapBboxPreview={handleMapBboxPreview}" in workspace assert "onMapBboxPreview={handleMapBboxPreview}" in workspace
assert "onMapBboxSelect={handleMapBboxSelect}" in workspace assert "onMapBboxSelect={handleMapBboxSelect}" in workspace
assert "void analyzeSelection(bbox, areaIdForSelection(bbox))" in workspace assert "void analyzeSelection(bbox, areaIdForSelection(bbox))" in workspace
assert "const areaIdForSelection" in workspace assert "const areaIdForSelection" in workspace
assert "bbox && selectedMapArea ? selectedMapArea.id : undefined" in workspace assert "bbox && selectedMapArea ? selectedMapArea.id : undefined" in workspace
> assert "void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in workspace > assert "void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)" in workspace
E assert 'void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'void analyzeSelection(selectedAreaBbox, selectedMapArea?.id)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint186_map_first_geographic_explorer.py:44: AssertionError backend\tests\test_sprint186_map_first_geographic_explorer.py:44: AssertionError
__ test_evolution_theme_catalog_distinguishes_history_from_current_only_data __ __ test_evolution_theme_catalog_distinguishes_history_from_current_only_data __
def test_evolution_theme_catalog_distinguishes_history_from_current_only_data() -> None: def test_evolution_theme_catalog_distinguishes_history_from_current_only_data() -> None:
workspace = read("frontend/src/components/map/MapWorkspace.tsx") workspace = read("frontend/src/components/map/MapWorkspace.tsx")
assert "analysisMode === 'current'" in workspace assert "analysisMode === 'current'" in workspace
> assert "Boolean(dataset || onDemandProduct)" in workspace > assert "Boolean(dataset || onDemandProduct)" in workspace
E assert 'Boolean(dataset || onDemandProduct)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'Boolean(dataset || onDemandProduct)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint200_temporal_explorer_handoff.py:25: AssertionError backend\tests\test_sprint200_temporal_explorer_handoff.py:25: AssertionError
_____ test_regional_map_uses_logical_partition_groups_and_exact_analysis ______ _____ test_regional_map_uses_logical_partition_groups_and_exact_analysis ______
def test_regional_map_uses_logical_partition_groups_and_exact_analysis() -> None: def test_regional_map_uses_logical_partition_groups_and_exact_analysis() -> None:
app = (ROOT / "frontend/src/App.tsx").read_text(encoding="utf-8") app = (ROOT / "frontend/src/App.tsx").read_text(encoding="utf-8")
workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8") workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8") hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
api = (ROOT / "frontend/src/services/api/datasets.ts").read_text(encoding="utf-8") api = (ROOT / "frontend/src/services/api/datasets.ts").read_text(encoding="utf-8")
assert "regionalScopeSelected" in workspace assert "regionalScopeSelected" in workspace
assert "rasterPartitionsForDataset" in workspace assert "rasterPartitionsForDataset" in workspace
assert "imageOverlays={activeImageOverlays}" in workspace assert "imageOverlays={activeImageOverlays}" in workspace
> assert "de juiste gemeentelijke rasters worden automatisch gecombineerd" in workspace > assert "de juiste gemeentelijke rasters worden automatisch gecombineerd" in workspace
E assert 'de juiste gemeentelijke rasters worden automatisch gecombineerd' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'de juiste gemeentelijke rasters worden automatisch gecombineerd' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint219_regional_raster_explorer.py:30: AssertionError backend\tests\test_sprint219_regional_raster_explorer.py:30: AssertionError
___ test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope ____ ___ test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope ____
def test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope() -> None: def test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope() -> None:
app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8") app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
index = (ROOT / "frontend" / "index.html").read_text(encoding="utf-8") index = (ROOT / "frontend" / "index.html").read_text(encoding="utf-8")
focus = ( focus = (
ROOT / "frontend" / "src" / "config" / "primaryFocus.ts" ROOT / "frontend" / "src" / "config" / "primaryFocus.ts"
).read_text(encoding="utf-8") ).read_text(encoding="utf-8")
map_workspace = ( map_workspace = (
ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx" ROOT / "frontend" / "src" / "components" / "map" / "MapWorkspace.tsx"
).read_text(encoding="utf-8") ).read_text(encoding="utf-8")
theme_hook = ( theme_hook = (
ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts" ROOT / "frontend" / "src" / "hooks" / "useMapThemeSelectionInsights.ts"
).read_text(encoding="utf-8") ).read_text(encoding="utf-8")
dataset_api = ( dataset_api = (
ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts" ROOT / "frontend" / "src" / "services" / "api" / "datasets.ts"
).read_text(encoding="utf-8") ).read_text(encoding="utf-8")
assert "isPartitionedBathymetry" in map_workspace assert "isPartitionedBathymetry" in map_workspace
assert "regionalPartitionedThemeActive" in map_workspace assert "regionalPartitionedThemeActive" in map_workspace
> assert "datasetAvailabilityLabel(dataset, partitions)" in map_workspace > assert "datasetAvailabilityLabel(dataset, partitions)" in map_workspace
E assert 'datasetAvailabilityLabel(dataset, partitions)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'datasetAvailabilityLabel(dataset, partitions)' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint236_bathymetry_expansion.py:478: AssertionError backend\tests\test_sprint236_bathymetry_expansion.py:478: AssertionError
____ test_flanders_workspace_exposes_governed_thematic_products_on_demand _____ ____ test_flanders_workspace_exposes_governed_thematic_products_on_demand _____
def test_flanders_workspace_exposes_governed_thematic_products_on_demand() -> None: def test_flanders_workspace_exposes_governed_thematic_products_on_demand() -> None:
workspace = read("frontend/src/components/map/MapWorkspace.tsx") workspace = read("frontend/src/components/map/MapWorkspace.tsx")
product_hook = read("frontend/src/hooks/useOfficialMapProducts.ts") product_hook = read("frontend/src/hooks/useOfficialMapProducts.ts")
selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts") selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
api = read("frontend/src/services/api/datasets.ts") api = read("frontend/src/services/api/datasets.ts")
assert "activeScopeProject?.name === FLANDERS_WORKSPACE_PROJECT_NAME" in workspace assert "activeScopeProject?.name === FLANDERS_WORKSPACE_PROJECT_NAME" in workspace
assert "new Map<DataThemeId, OnDemandMapProduct>" in workspace assert "new Map<DataThemeId, OnDemandMapProduct>" in workspace
> assert "'Automatisch'" in workspace > assert "'Automatisch'" in workspace
E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint237_flanders_thematic_on_demand.py:19: AssertionError backend\tests\test_sprint237_flanders_thematic_on_demand.py:19: AssertionError
________ test_selection_reads_and_bounded_acquires_all_relevant_themes ________ ________ test_selection_reads_and_bounded_acquires_all_relevant_themes ________
def test_selection_reads_and_bounded_acquires_all_relevant_themes() -> None: def test_selection_reads_and_bounded_acquires_all_relevant_themes() -> None:
workspace = read("frontend/src/components/map/MapWorkspace.tsx") workspace = read("frontend/src/components/map/MapWorkspace.tsx")
app = read("frontend/src/App.tsx") app = read("frontend/src/App.tsx")
selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts") selection_hook = read("frontend/src/hooks/useMapThemeSelectionInsights.ts")
> assert "for (const theme of [activeTheme])" in workspace > assert "for (const theme of [activeTheme])" in workspace
E assert 'for (const theme of [activeTheme])' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'for (const theme of [activeTheme])' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint237_flanders_thematic_on_demand.py:37: AssertionError backend\tests\test_sprint237_flanders_thematic_on_demand.py:37: AssertionError
______ test_regional_on_demand_sources_require_a_bounded_drawn_selection ______ ______ test_regional_on_demand_sources_require_a_bounded_drawn_selection ______
def test_regional_on_demand_sources_require_a_bounded_drawn_selection() -> None: def test_regional_on_demand_sources_require_a_bounded_drawn_selection() -> None:
workspace = read("frontend/src/components/map/MapWorkspace.tsx") workspace = read("frontend/src/components/map/MapWorkspace.tsx")
assert "regionalOnDemandThemeActive" in workspace assert "regionalOnDemandThemeActive" in workspace
> assert "regionalRasterThemeActive || regionalOnDemandThemeActive" in workspace > assert "regionalRasterThemeActive || regionalOnDemandThemeActive" in workspace
E assert 'regionalRasterThemeActive || regionalOnDemandThemeActive' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert 'regionalRasterThemeActive || regionalOnDemandThemeActive' in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint237_flanders_thematic_on_demand.py:56: AssertionError backend\tests\test_sprint237_flanders_thematic_on_demand.py:56: AssertionError
_____ test_grb_frontend_and_contracts_use_only_the_governed_backend_path ______ _____ test_grb_frontend_and_contracts_use_only_the_governed_backend_path ______
def test_grb_frontend_and_contracts_use_only_the_governed_backend_path() -> None: def test_grb_frontend_and_contracts_use_only_the_governed_backend_path() -> None:
selection_hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8") selection_hook = (ROOT / "frontend/src/hooks/useMapThemeSelectionInsights.ts").read_text(encoding="utf-8")
catalog_hook = (ROOT / "frontend/src/hooks/useOfficialMapProducts.ts").read_text(encoding="utf-8") catalog_hook = (ROOT / "frontend/src/hooks/useOfficialMapProducts.ts").read_text(encoding="utf-8")
workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8") workspace = (ROOT / "frontend/src/components/map/MapWorkspace.tsx").read_text(encoding="utf-8")
contracts = (ROOT / "docs/API_CONTRACTS.md").read_text(encoding="utf-8") contracts = (ROOT / "docs/API_CONTRACTS.md").read_text(encoding="utf-8")
assert "datasetsApi.acquireGrb" in selection_hook assert "datasetsApi.acquireGrb" in selection_hook
assert "datasetsApi.listGrbProducts" in catalog_hook assert "datasetsApi.listGrbProducts" in catalog_hook
assert "officialMapProducts.grb" in workspace assert "officialMapProducts.grb" in workspace
assert "result[product.key] = null" in workspace assert "result[product.key] = null" in workspace
assert ": onDemandThemeActive\n ? null\n : mapFeatureCollection" in workspace assert ": onDemandThemeActive\n ? null\n : mapFeatureCollection" in workspace
assert "onSetContextLayerLabel" in workspace assert "onSetContextLayerLabel" in workspace
> assert "'Automatisch'" in workspace > assert "'Automatisch'" in workspace
E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n" E assert "'Automatisch'" in "import { useCallback, useEffect, useMemo, useRef, useState, type KeyboardEvent } from 'react'\nimport { BoxSelect, Ch...ijken.</p>\n )}\n </div>\n </div>\n </details>\n </div>\n </section>\n )\n}\n"
backend\tests\test_sprint239_bounded_grb_acquisition.py:394: AssertionError backend\tests\test_sprint239_bounded_grb_acquisition.py:394: AssertionError
__________ test_app_entrypoint_has_clean_encoding_and_react_imports ___________ __________ test_app_entrypoint_has_clean_encoding_and_react_imports ___________
def test_app_entrypoint_has_clean_encoding_and_react_imports() -> None: def test_app_entrypoint_has_clean_encoding_and_react_imports() -> None:
app_path = ROOT / "frontend" / "src" / "App.tsx" app_path = ROOT / "frontend" / "src" / "App.tsx"
app_bytes = app_path.read_bytes() app_bytes = app_path.read_bytes()
app = app_path.read_text(encoding="utf-8") app = app_path.read_text(encoding="utf-8")
assert not app_bytes.startswith(b"\xef\xbb\xbf") assert not app_bytes.startswith(b"\xef\xbb\xbf")
assert "import { useEffect, useMemo, useRef, useState } from 'react'" in app assert "import { useEffect, useMemo, useRef, useState } from 'react'" in app
assert "FormEvent" not in app assert "FormEvent" not in app
> assert app.count("useEffect(") == 1 > assert app.count("useEffect(") == 1
E assert 3 == 1 E assert 3 == 1
E + where 3 = <built-in method count of str object at 0x000001FED98D8C30>('useEffect(') E + where 3 = <built-in method count of str object at 0x000001FED98D8C30>('useEffect(')
E + where <built-in method count of str object at 0x000001FED98D8C30> = "import { useEffect, useMemo, useRef, useState } from 'react'\nimport { CircleAlert, LogOut, ShieldCheck, UserRound } ...ator' : 'open')}\n loggingOut={loggingOut}\n onLogout={handleLogout}\n />\n )\n}\n\nexport default App\n".count E + where <built-in method count of str object at 0x000001FED98D8C30> = "import { useEffect, useMemo, useRef, useState } from 'react'\nimport { CircleAlert, LogOut, ShieldCheck, UserRound } ...ator' : 'open')}\n loggingOut={loggingOut}\n onLogout={handleLogout}\n />\n )\n}\n\nexport default App\n".count
backend\tests\test_sprint39_frontend_orchestration_hooks.py:40: AssertionError backend\tests\test_sprint39_frontend_orchestration_hooks.py:40: AssertionError
- generated xml file: C:\Projects\geointel\artifacts\evidence\accuracy\P1\backend-full-suite.junit.xml - - generated xml file: C:\Projects\geointel\artifacts\evidence\accuracy\P1\backend-full-suite.junit.xml -
=========================== short test summary info =========================== =========================== short test summary info ===========================
FAILED backend\tests\test_rc4_national_coverage.py::test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox FAILED backend\tests\test_rc4_national_coverage.py::test_frontend_prefers_materialized_national_workspace_and_resolves_drawn_bbox
FAILED backend\tests\test_rc5_release_deployment.py::test_runtime_configuration_is_validated_before_container_replacement FAILED backend\tests\test_rc5_release_deployment.py::test_runtime_configuration_is_validated_before_container_replacement
FAILED backend\tests\test_rc9_ux_release_contract.py::test_rc9_loading_and_accessibility_states_are_explicit FAILED backend\tests\test_rc9_ux_release_contract.py::test_rc9_loading_and_accessibility_states_are_explicit
FAILED backend\tests\test_rc_runtime_observability.py::test_all_in_one_deploy_embeds_immutable_build_identity FAILED backend\tests\test_rc_runtime_observability.py::test_all_in_one_deploy_embeds_immutable_build_identity
FAILED backend\tests\test_sprint106_map_bbox_extract.py::test_frontend_exposes_map_bbox_selection_contracts FAILED backend\tests\test_sprint106_map_bbox_extract.py::test_frontend_exposes_map_bbox_selection_contracts
FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_frontend_declares_national_scope_as_primary_operating_focus FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_frontend_declares_national_scope_as_primary_operating_focus
FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_product_docs_record_national_scope_and_mol_regression_focus FAILED backend\tests\test_sprint177_mol_primary_focus.py::test_product_docs_record_national_scope_and_mol_regression_focus
FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_first_explorer_is_the_default_product_flow FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_first_explorer_is_the_default_product_flow
FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_rectangle_drag_is_wired_to_automatic_analysis FAILED backend\tests\test_sprint186_map_first_geographic_explorer.py::test_map_rectangle_drag_is_wired_to_automatic_analysis
FAILED backend\tests\test_sprint200_temporal_explorer_handoff.py::test_evolution_theme_catalog_distinguishes_history_from_current_only_data FAILED backend\tests\test_sprint200_temporal_explorer_handoff.py::test_evolution_theme_catalog_distinguishes_history_from_current_only_data
FAILED backend\tests\test_sprint219_regional_raster_explorer.py::test_regional_map_uses_logical_partition_groups_and_exact_analysis FAILED backend\tests\test_sprint219_regional_raster_explorer.py::test_regional_map_uses_logical_partition_groups_and_exact_analysis
FAILED backend\tests\test_sprint236_bathymetry_expansion.py::test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope FAILED backend\tests\test_sprint236_bathymetry_expansion.py::test_frontend_uses_partitioned_bathymetry_selection_for_regional_scope
FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_flanders_workspace_exposes_governed_thematic_products_on_demand FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_flanders_workspace_exposes_governed_thematic_products_on_demand
FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_selection_reads_and_bounded_acquires_all_relevant_themes FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_selection_reads_and_bounded_acquires_all_relevant_themes
FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_regional_on_demand_sources_require_a_bounded_drawn_selection FAILED backend\tests\test_sprint237_flanders_thematic_on_demand.py::test_regional_on_demand_sources_require_a_bounded_drawn_selection
FAILED backend\tests\test_sprint239_bounded_grb_acquisition.py::test_grb_frontend_and_contracts_use_only_the_governed_backend_path FAILED backend\tests\test_sprint239_bounded_grb_acquisition.py::test_grb_frontend_and_contracts_use_only_the_governed_backend_path
FAILED backend\tests\test_sprint39_frontend_orchestration_hooks.py::test_app_entrypoint_has_clean_encoding_and_react_imports FAILED backend\tests\test_sprint39_frontend_orchestration_hooks.py::test_app_entrypoint_has_clean_encoding_and_react_imports
17 failed, 1180 passed in 70.63s (0:01:10) 17 failed, 1180 passed in 70.63s (0:01:10)
@@ -0,0 +1,278 @@
{
"audited_repository_head": "3d442ef43fac0fdf1b86f3149c9b4c512830a39d",
"claim_boundary": "This manifest proves retained-file identity and completeness. It does not establish model accuracy, human label acceptance, split independence or release readiness.",
"evidence_file_count": 28,
"evidence_files": [
{
"path": "artifacts/evidence/accuracy/P1/alembic-heads.txt",
"role": "execution_log",
"sha256": "da4521233c6718fc7a5865c53904e73685fbdce65a1449b19cd0dc2e40d037ed",
"size_bytes": 116
},
{
"path": "artifacts/evidence/accuracy/P1/alembic-offline-upgrade.sql",
"role": "migration_evidence",
"sha256": "e8905b881890cf95885a7515e3d9dcf2a7a0a24c4edbc57e98a363edcb22dd0e",
"size_bytes": 20199
},
{
"path": "artifacts/evidence/accuracy/P1/backend-ci-entrypoint.txt",
"role": "execution_log",
"sha256": "0ac774ec19b4ff0a15142aab5f1db68c2592a230401d794ae7d040320e3ac0c0",
"size_bytes": 1601
},
{
"path": "artifacts/evidence/accuracy/P1/backend-full-suite.junit.xml",
"role": "test_report",
"sha256": "a01d0b5b6974d7ed184f46e8e35ac3b06c9a5db565e45e140b5f799819396b08",
"size_bytes": 207086
},
{
"path": "artifacts/evidence/accuracy/P1/backend-full-suite.txt",
"role": "execution_log",
"sha256": "8521ed48b17b382752418750b3ea374831958fb063e83ef87048212e0fd5ea69",
"size_bytes": 23972
},
{
"path": "artifacts/evidence/accuracy/P1/commands-and-results.md",
"role": "execution_log",
"sha256": "451d4cfc2d6d67937411b23192d9418ef6721af678aed1b0d5cb82113d82efc5",
"size_bytes": 8427
},
{
"path": "artifacts/evidence/accuracy/P1/forensic-reproductions.json",
"role": "defect_reproduction",
"sha256": "f6349199a15ae789092d3d65c17a39a9b32ea3ed557571c0c228c4be3cf7235e",
"size_bytes": 3533
},
{
"path": "artifacts/evidence/accuracy/P1/frontend-build.txt",
"role": "execution_log",
"sha256": "c3b8e10ef177ac1c2dc045bd710df1caeb46f8922a721291be431b304abbc079",
"size_bytes": 2356
},
{
"path": "artifacts/evidence/accuracy/P1/frontend-lint.txt",
"role": "lint_evidence",
"sha256": "1115b013515c753e2dfb73abdad9024aec7b4c2337d117c7e1181341fef15c7f",
"size_bytes": 418
},
{
"path": "artifacts/evidence/accuracy/P1/frontend-typecheck.txt",
"role": "execution_log",
"sha256": "3891c85c77b5ff50a1eb6d27a2a65d40c2c05423768734efd9d980f3784d68fa",
"size_bytes": 163
},
{
"path": "artifacts/evidence/accuracy/P1/frontend-vitest-unit.txt",
"role": "test_evidence",
"sha256": "6341bfa51ca3f4fe5ec7d4af7239c3c5e1a29e6bfe8bdfae85e824a2a6482ad0",
"size_bytes": 2774
},
{
"path": "artifacts/evidence/accuracy/P1/frontend-vitest.txt",
"role": "test_evidence",
"sha256": "8a84afa48cc59e473725ed105a3f88da24f001cdcb794d942ede2ab8f0d48e48",
"size_bytes": 333
},
{
"path": "artifacts/evidence/accuracy/P1/golden-qa-reproducibility.json",
"role": "test_evidence",
"sha256": "576e5667a989c34086db3a2bc57003115a8a61b14e9f49f5407ee380baf0829d",
"size_bytes": 505
},
{
"path": "artifacts/evidence/accuracy/P1/golden-qa-run-1.json",
"role": "test_evidence",
"sha256": "ec96862b024987b59e56579920361582e718126b07885732335ac1b4d51b61bc",
"size_bytes": 5242
},
{
"path": "artifacts/evidence/accuracy/P1/golden-qa-run-2.json",
"role": "test_evidence",
"sha256": "4f900711a706dd56dd16b368e261761051f6d52a38bfd421e7d1c5f66ee51e49",
"size_bytes": 5242
},
{
"path": "artifacts/evidence/accuracy/P1/local-artifact-inventory.json",
"role": "structured_inventory",
"sha256": "0e187dbf3e91ee8e35567d6c8cd6e1cadfa6275d5908b829253491f3804adf7d",
"size_bytes": 75535
},
{
"path": "artifacts/evidence/accuracy/P1/openapi-contract-audit.txt",
"role": "execution_log",
"sha256": "5af3d8f00be3f57fc309bc198fa3995d1eae7270a5f210b3e94d1aeeb653119d",
"size_bytes": 212
},
{
"path": "artifacts/evidence/accuracy/P1/phase1-baseline-summary.json",
"role": "structured_inventory",
"sha256": "7d5960df64bdd4fb9b9d9d7a93de5f9cfd770f4dcf21454899345afe3ab12342",
"size_bytes": 1143
},
{
"path": "artifacts/evidence/accuracy/P1/phase1-tooling-tests.txt",
"role": "test_evidence",
"sha256": "a9bf261e1a811ad3e8bfa8edc439a11f00b46bc157f9ab6fc970033a87f45748",
"size_bytes": 250
},
{
"path": "artifacts/evidence/accuracy/P1/repository-inventory.json",
"role": "structured_inventory",
"sha256": "07fa9356f298f9fe360e2e362ce9f3d558a9a66544fed3a5567cd9a5666451c7",
"size_bytes": 27695
},
{
"path": "artifacts/evidence/accuracy/P1/repository-ruff-baseline.json",
"role": "lint_evidence",
"sha256": "de6617f030e49550e714c49b6e14bf291bf85016fd58086e9ca38b33a52252e9",
"size_bytes": 59359
},
{
"path": "artifacts/evidence/accuracy/P1/repository-ruff-baseline.txt",
"role": "lint_evidence",
"sha256": "cd654cea65710167beff8307cb71533fb645f25247ef46e7adc421bd520c9191",
"size_bytes": 57870
},
{
"path": "artifacts/evidence/accuracy/P1/static-risk-signals.json",
"role": "structured_inventory",
"sha256": "729f0a5d3eece61be8e26d44b5dfa29c6cbf21eb16b8694a2d4dc45c94720757",
"size_bytes": 22467
},
{
"path": "artifacts/evidence/accuracy/P1/tower-gpu-inference-smoke.json",
"role": "runtime_evidence",
"sha256": "692a9fa193d589123b042110d7e80755f0c6634854f3134c291fc6083adb7b77",
"size_bytes": 5675
},
{
"path": "artifacts/evidence/accuracy/P1/tower-key-artifact-hashes.json",
"role": "structured_inventory",
"sha256": "4d88d350604b377682da4d928c37ffb00ea1a32d2690d9b2bd54117363930414",
"size_bytes": 949
},
{
"path": "artifacts/evidence/accuracy/P1/tower-ml-data-lineage-snapshot.json",
"role": "lineage_evidence",
"sha256": "d80275e8198ce63366d2a2d44eb8fba1f27c29d85aaaaedb94991d8c56febfb6",
"size_bytes": 71659
},
{
"path": "artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot-detailed.json",
"role": "runtime_evidence",
"sha256": "744389b6c384a9fb3a9e16e56f1477f3b752e11a5b98e1fad7df47b4703a9ca1",
"size_bytes": 14946
},
{
"path": "artifacts/evidence/accuracy/P1/tower-runtime-database-snapshot.json",
"role": "runtime_evidence",
"sha256": "aa7681d4a19ca20b7b442c509b3f56cb97bf239b2b5cc6a1fb1ca140d5320e9e",
"size_bytes": 10127
}
],
"evidence_root": "artifacts/evidence/accuracy/P1",
"evidence_total_bytes": 629854,
"generated_at": "2026-08-01T17:00:31.742672+00:00",
"program_file_count": 16,
"program_files": [
{
"path": "docs/accuracy-program/00-execution-contract.md",
"role": "phase1_program",
"sha256": "d6c71dbccbb1e1f3bda2835cf9f53c3a5a92c173e9136d5cfccf007ec2c28684",
"size_bytes": 8720
},
{
"path": "docs/accuracy-program/01-system-inventory.md",
"role": "phase1_program",
"sha256": "2b27c28ca06ab8e8a36f12cccc8df23d5e83894e39b8e33406e6a6c05092cf22",
"size_bytes": 15708
},
{
"path": "docs/accuracy-program/02-data-lineage.md",
"role": "phase1_program",
"sha256": "8af25f30d43863438678b3e867c9bf0a318cdac78e12c891254fb2570e2d9d1d",
"size_bytes": 20409
},
{
"path": "docs/accuracy-program/03-baseline-and-gaps.md",
"role": "phase1_program",
"sha256": "ad3c2aae2944443d0f5d09b5c415b6202109071a6f194bb8b09b7df30332e3b3",
"size_bytes": 21253
},
{
"path": "docs/accuracy-program/04-risk-register.md",
"role": "phase1_program",
"sha256": "f3c0d35b95fd180a391950c2a6c9339aa3e4ace0e8512affbd242d159ca1e574",
"size_bytes": 23851
},
{
"path": "docs/accuracy-program/05-metric-framework.md",
"role": "phase1_program",
"sha256": "18abfc21964b7d98848d8ae513afce242184980c9517c9184d40efd9165ea00d",
"size_bytes": 28053
},
{
"path": "docs/accuracy-program/06-implementation-roadmap.md",
"role": "phase1_program",
"sha256": "c76ffebee4a23796ff221e6d4c5b5138f99d55a8b1422e897058b12a78a29ad9",
"size_bytes": 23695
},
{
"path": "docs/accuracy-program/status.json",
"role": "phase1_program",
"sha256": "5841cde783c7d8d4a54b126ed4120c83a553c9dec9a31e6ce45703ce3ab731c4",
"size_bytes": 7953
},
{
"path": "scripts/build_accuracy_phase1_evidence_manifest.py",
"role": "phase1_program",
"sha256": "882a935b29f787fc11a9f7b528392c1727463be24adcb0cac47a09fdb69a8382",
"size_bytes": 5523
},
{
"path": "scripts/collect_accuracy_phase1_inference_smoke.py",
"role": "phase1_program",
"sha256": "6d81541b7aa83f3c03ba5320a8075892eee658905ee981ba727e59f3b1dc792a",
"size_bytes": 6756
},
{
"path": "scripts/collect_accuracy_phase1_ml_lineage.py",
"role": "phase1_program",
"sha256": "3b1d3e45d45f1d4ca1211d1b2c70d9d93e15abc3b3ecfbd2e8302f645d6db7e1",
"size_bytes": 14080
},
{
"path": "scripts/collect_accuracy_phase1_runtime.py",
"role": "phase1_program",
"sha256": "a907779306076dccdf7fcf45f554e4778f5fab0e59d6af55673322775a1f5b4f",
"size_bytes": 13387
},
{
"path": "scripts/reproduce_accuracy_phase1_findings.py",
"role": "phase1_program",
"sha256": "c0f34e6bcaf73dcdada6e5b529a2e8e2177b1e97ee039c586d6ae51bb743015f",
"size_bytes": 9447
},
{
"path": "scripts/run_accuracy_phase1_baseline.py",
"role": "phase1_program",
"sha256": "fcbd280245ccc598cab7ec5ca6448fbb350f7fa59aecc20177fdb0069c416643",
"size_bytes": 14498
},
{
"path": "scripts/verify_accuracy_phase1_evidence.py",
"role": "phase1_program",
"sha256": "fc72c315d26b8b7542fe01666aef56a8538d09090f2c0c877c4dd8a33c93e556",
"size_bytes": 4925
},
{
"path": "tests/test_accuracy_phase1_baseline.py",
"role": "phase1_program",
"sha256": "868f433b7de61e9ab3cd7aa9ad5bb2d29e8286afdcd68274ed290909ec605c7f",
"size_bytes": 3009
}
],
"schema_version": 1
}
@@ -1,116 +1,116 @@
{ {
"findings": [ "findings": [
{ {
"expected": "A small buildings partition remains partial; a roads bbox cannot complete buildings coverage.", "expected": "A small buildings partition remains partial; a roads bbox cannot complete buildings coverage.",
"id": "P1-COV-001", "id": "P1-COV-001",
"observed": { "observed": {
"fully_covered": true, "fully_covered": true,
"matched_dataset_ids": [ "matched_dataset_ids": [
"00000000-0000-4000-8000-000000000001" "00000000-0000-4000-8000-000000000001"
] ]
}, },
"reproduced": true, "reproduced": true,
"severity": "critical", "severity": "critical",
"source": "backend/app/services/coverage_registry_service.py:481-505" "source": "backend/app/services/coverage_registry_service.py:481-505"
}, },
{ {
"expected": "A 100 metre buffer is projected to a metric CRS and spans roughly hundreds of metres.", "expected": "A 100 metre buffer is projected to a metric CRS and spans roughly hundreds of metres.",
"id": "P1-CRS-001", "id": "P1-CRS-001",
"observed": { "observed": {
"bounds_epsg4326": [ "bounds_epsg4326": [
-95.0, -95.0,
-49.0, -49.0,
105.0, 105.0,
151.0 151.0
], ],
"longitude_span_degrees": 200.0 "longitude_span_degrees": 200.0
}, },
"reproduced": true, "reproduced": true,
"severity": "critical", "severity": "critical",
"source": "backend/app/services/vector_operations_service.py:179-203" "source": "backend/app/services/vector_operations_service.py:179-203"
}, },
{ {
"expected": "Non-WGS84 input is transformed to EPSG:4326 or rejected before persistence.", "expected": "Non-WGS84 input is transformed to EPSG:4326 or rejected before persistence.",
"id": "P1-CRS-002", "id": "P1-CRS-002",
"observed": { "observed": {
"stored_coordinates": [ "stored_coordinates": [
150000.0, 150000.0,
210000.0 210000.0
], ],
"stored_srid": 4326 "stored_srid": 4326
}, },
"reproduced": true, "reproduced": true,
"severity": "critical", "severity": "critical",
"source": "backend/app/services/vector_feature_service.py:271-299" "source": "backend/app/services/vector_feature_service.py:271-299"
}, },
{ {
"expected": "Only server-attested source identities can produce authoritative operational coverage.", "expected": "Only server-attested source identities can produce authoritative operational coverage.",
"id": "P1-AUTH-001", "id": "P1-AUTH-001",
"observed": { "observed": {
"caller_controlled_source_name": "grb", "caller_controlled_source_name": "grb",
"coverage_status": "operational", "coverage_status": "operational",
"reported_authority": "authoritative" "reported_authority": "authoritative"
}, },
"reproduced": true, "reproduced": true,
"severity": "critical", "severity": "critical",
"source": "backend/app/api/routes/datasets.py:142-163; backend/app/services/coverage_registry_service.py:463-559" "source": "backend/app/api/routes/datasets.py:142-163; backend/app/services/coverage_registry_service.py:463-559"
}, },
{ {
"expected": "Validation scope is bound to immutable geometry/source/checksum evidence.", "expected": "Validation scope is bound to immutable geometry/source/checksum evidence.",
"id": "P1-AI-001", "id": "P1-AI-001",
"observed": { "observed": {
"accepted": true, "accepted": true,
"area_name": "Mol validation bypass", "area_name": "Mol validation bypass",
"geometry_bounds": [ "geometry_bounds": [
-75.0, -75.0,
35.0, 35.0,
-74.9, -74.9,
35.1 35.1
] ]
}, },
"reproduced": true, "reproduced": true,
"severity": "critical", "severity": "critical",
"source": "backend/app/services/detection_service.py:223-232" "source": "backend/app/services/detection_service.py:223-232"
}, },
{ {
"expected": "Renaming an Area cannot change its legal coverage-zone identity.", "expected": "Renaming an Area cannot change its legal coverage-zone identity.",
"id": "P1-COV-002", "id": "P1-COV-002",
"observed": { "observed": {
"canonical": { "canonical": {
"outside": false, "outside": false,
"zones": [ "zones": [
"flanders" "flanders"
] ]
}, },
"renamed_same_geometry": { "renamed_same_geometry": {
"outside": true, "outside": true,
"zones": [] "zones": []
} }
}, },
"reproduced": true, "reproduced": true,
"severity": "high", "severity": "high",
"source": "backend/app/services/coverage_registry_service.py:56-65,425-447" "source": "backend/app/services/coverage_registry_service.py:56-65,425-447"
}, },
{ {
"expected": "PATCH /areas/{area_id} either validates and applies geometry or rejects the field.", "expected": "PATCH /areas/{area_id} either validates and applies geometry or rejects the field.",
"id": "P1-API-001", "id": "P1-API-001",
"observed": { "observed": {
"geometry_silently_ignored": true, "geometry_silently_ignored": true,
"parsed_payload": { "parsed_payload": {
"crs": null, "crs": null,
"name": "Renamed" "name": "Renamed"
} }
}, },
"reproduced": true, "reproduced": true,
"severity": "high", "severity": "high",
"source": "backend/app/schemas/area.py:15-17; backend/app/services/area_service.py:154-171" "source": "backend/app/schemas/area.py:15-17; backend/app/services/area_service.py:154-171"
} }
], ],
"purpose": "Read-only deterministic reproductions of Phase-1 contract violations.", "purpose": "Read-only deterministic reproductions of Phase-1 contract violations.",
"schema_version": 1, "schema_version": 1,
"summary": { "summary": {
"all_reproduced": true, "all_reproduced": true,
"reproduced": 7, "reproduced": 7,
"total": 7 "total": 7
} }
} }
@@ -1,31 +1,31 @@
command=npm run build command=npm run build
exit_code=0 exit_code=0
captured_at=2026-08-01T18:34:50.3212385+02:00 captured_at=2026-08-01T18:34:50.3212385+02:00
> geointel-frontend@1.0.0 build > geointel-frontend@1.0.0 build
> tsc -b && vite build > tsc -b && vite build
vite v7.3.6 building client environment for production... vite v7.3.6 building client environment for production...
transforming... transforming...
✓ 1896 modules transformed. ✓ 1896 modules transformed.
rendering chunks... rendering chunks...
computing gzip size... computing gzip size...
dist/index.html  0.98 kB │ gzip: 0.49 kB dist/index.html  0.98 kB │ gzip: 0.49 kB
dist/assets/manrope-latin-500-normal-BYYD-dBL.woff2  14.04 kB dist/assets/manrope-latin-500-normal-BYYD-dBL.woff2  14.04 kB
dist/assets/manrope-latin-600-normal-4f0koTD-.woff2  14.17 kB dist/assets/manrope-latin-600-normal-4f0koTD-.woff2  14.17 kB
dist/assets/manrope-latin-700-normal-BZp_XxE4.woff2  14.21 kB dist/assets/manrope-latin-700-normal-BZp_XxE4.woff2  14.21 kB
dist/assets/public-sans-latin-600-normal-Fru-LXNs.woff2  14.59 kB dist/assets/public-sans-latin-600-normal-Fru-LXNs.woff2  14.59 kB
dist/assets/public-sans-latin-400-normal-8Rpg0ruU.woff2  14.63 kB dist/assets/public-sans-latin-400-normal-8Rpg0ruU.woff2  14.63 kB
dist/assets/public-sans-latin-500-normal-NlrCPXnF.woff2  14.66 kB dist/assets/public-sans-latin-500-normal-NlrCPXnF.woff2  14.66 kB
dist/assets/manrope-latin-500-normal-DMZssgOp.woff  18.24 kB dist/assets/manrope-latin-500-normal-DMZssgOp.woff  18.24 kB
dist/assets/manrope-latin-600-normal-BqgrALkZ.woff  18.38 kB dist/assets/manrope-latin-600-normal-BqgrALkZ.woff  18.38 kB
dist/assets/manrope-latin-700-normal-DGRFkw-m.woff  18.41 kB dist/assets/manrope-latin-700-normal-DGRFkw-m.woff  18.41 kB
dist/assets/public-sans-latin-400-normal-SBbinRkI.woff  18.49 kB dist/assets/public-sans-latin-400-normal-SBbinRkI.woff  18.49 kB
dist/assets/public-sans-latin-500-normal-vCxiVFAq.woff  18.52 kB dist/assets/public-sans-latin-500-normal-vCxiVFAq.woff  18.52 kB
dist/assets/public-sans-latin-600-normal-BR59oU-I.woff  18.56 kB dist/assets/public-sans-latin-600-normal-BR59oU-I.woff  18.56 kB
dist/assets/index-BNS8Tp4f.css 426.59 kB │ gzip: 69.40 kB dist/assets/index-BNS8Tp4f.css 426.59 kB │ gzip: 69.40 kB
dist/assets/vendor-CrqJdhs-.js 140.80 kB │ gzip: 45.27 kB dist/assets/vendor-CrqJdhs-.js 140.80 kB │ gzip: 45.27 kB
dist/assets/index-DR8RUeAl.js 457.16 kB │ gzip: 119.71 kB dist/assets/index-DR8RUeAl.js 457.16 kB │ gzip: 119.71 kB
dist/assets/maplibre-DEBTaTl_.js 802.71 kB │ gzip: 217.71 kB dist/assets/maplibre-DEBTaTl_.js 802.71 kB │ gzip: 217.71 kB
✓ built in 9.80s ✓ built in 9.80s
@@ -1,12 +1,12 @@
command=npm run lint command=npm run lint
exit_code=1 exit_code=1
captured_at=2026-08-01T18:36:26.6162306+02:00 captured_at=2026-08-01T18:36:26.6162306+02:00
npm error Missing script: "lint" npm error Missing script: "lint"
npm error npm error
npm error Did you mean this? npm error Did you mean this?
npm error npm link # Symlink a package folder npm error npm link # Symlink a package folder
npm error npm error
npm error To see a list of scripts, run: npm error To see a list of scripts, run:
npm error npm run npm error npm run
npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_36_25_353Z-debug-0.log npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_36_25_353Z-debug-0.log
@@ -1,8 +1,8 @@
command=npm run typecheck command=npm run typecheck
exit_code=0 exit_code=0
captured_at=2026-08-01T18:34:27.3623155+02:00 captured_at=2026-08-01T18:34:27.3623155+02:00
> geointel-frontend@1.0.0 typecheck > geointel-frontend@1.0.0 typecheck
> tsc -p tsconfig.json --noEmit > tsc -p tsconfig.json --noEmit
@@ -1,35 +1,35 @@
command=npm run test:unit command=npm run test:unit
exit_code=0 exit_code=0
captured_at=2026-08-01T18:35:24.4298867+02:00 captured_at=2026-08-01T18:35:24.4298867+02:00
> geointel-frontend@1.0.0 test:unit > geointel-frontend@1.0.0 test:unit
> vitest run > vitest run
 RUN  v3.2.6 C:/Projects/geointel/frontend  RUN  v3.2.6 C:/Projects/geointel/frontend
✓ src/lib/datasetCapabilities.test.ts (2 tests) 5ms ✓ src/lib/datasetCapabilities.test.ts (2 tests) 5ms
✓ src/lib/performanceBudget.test.ts (3 tests) 41ms ✓ src/lib/performanceBudget.test.ts (3 tests) 41ms
✓ src/components/map/mapWorkspaceUtils.test.ts (14 tests) 36ms ✓ src/components/map/mapWorkspaceUtils.test.ts (14 tests) 36ms
✓ src/hooks/useMapThemeSelectionInsights.test.ts (2 tests) 43ms ✓ src/hooks/useMapThemeSelectionInsights.test.ts (2 tests) 43ms
✓ src/hooks/useCoverageResolver.test.tsx (4 tests) 47ms ✓ src/hooks/useCoverageResolver.test.tsx (4 tests) 47ms
✓ src/hooks/useTemporalComparison.test.tsx (3 tests) 36ms ✓ src/hooks/useTemporalComparison.test.tsx (3 tests) 36ms
✓ src/components/WorkbenchStatusStrip.test.tsx (2 tests) 151ms ✓ src/components/WorkbenchStatusStrip.test.tsx (2 tests) 151ms
✓ src/hooks/useWorkbenchBootstrap.test.tsx (3 tests) 60ms ✓ src/hooks/useWorkbenchBootstrap.test.tsx (3 tests) 60ms
✓ src/components/map/LiveAnalysisJourney.test.tsx (3 tests) 59ms ✓ src/components/map/LiveAnalysisJourney.test.tsx (3 tests) 59ms
✓ src/components/overview/ProjectAtlasIllustration.test.tsx (2 tests) 267ms ✓ src/components/overview/ProjectAtlasIllustration.test.tsx (2 tests) 267ms
✓ src/components/models/ModelSelector.test.tsx (2 tests) 342ms ✓ src/components/models/ModelSelector.test.tsx (2 tests) 342ms
✓ src/components/detection/AiPipelineIllustration.test.tsx (1 test) 296ms ✓ src/components/detection/AiPipelineIllustration.test.tsx (1 test) 296ms
✓ src/components/auth/LandingProjectStory.test.tsx (2 tests) 332ms ✓ src/components/auth/LandingProjectStory.test.tsx (2 tests) 332ms
✓ src/components/map/MunicipalitySearch.test.tsx (2 tests) 483ms ✓ src/components/map/MunicipalitySearch.test.tsx (2 tests) 483ms
✓ MunicipalitySearch > searches the official municipality catalog and activates a result  468ms ✓ MunicipalitySearch > searches the official municipality catalog and activates a result  468ms
✓ src/components/auth/LandingPage.test.tsx (4 tests) 825ms ✓ src/components/auth/LandingPage.test.tsx (4 tests) 825ms
✓ LandingPage > presents the professionalised landing page and submits the operator login  471ms ✓ LandingPage > presents the professionalised landing page and submits the operator login  471ms
✓ src/lib/bathymetryRaster.test.ts (2 tests) 3ms ✓ src/lib/bathymetryRaster.test.ts (2 tests) 3ms
 Test Files  16 passed (16)  Test Files  16 passed (16)
 Tests  51 passed (51)  Tests  51 passed (51)
 Start at  18:35:16  Start at  18:35:16
 Duration  7.37s (transform 2.45s, setup 0ms, collect 14.66s, tests 3.03s, environment 45.46s, prepare 8.07s)  Duration  7.37s (transform 2.45s, setup 0ms, collect 14.66s, tests 3.03s, environment 45.46s, prepare 8.07s)
@@ -1,9 +1,9 @@
command=npm test -- --run command=npm test -- --run
exit_code=1 exit_code=1
captured_at=2026-08-01T18:34:11.9904224+02:00 captured_at=2026-08-01T18:34:11.9904224+02:00
npm error Missing script: "test" npm error Missing script: "test"
npm error npm error
npm error To see a list of scripts, run: npm error To see a list of scripts, run:
npm error npm run npm error npm run
npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_34_11_785Z-debug-0.log npm error A complete log of this run can be found in: C:\Users\Jens\AppData\Local\npm-cache\_logs\2026-08-01T16_34_11_785Z-debug-0.log
@@ -1,11 +1,11 @@
{ {
"schema_version": 1, "schema_version": 1,
"command": "python scripts/run_golden_qa_benchmark.py --json", "command": "python scripts/run_golden_qa_benchmark.py --json",
"run_1_exit_code": 0, "run_1_exit_code": 0,
"run_2_exit_code": 0, "run_2_exit_code": 0,
"run_1_sha256": "ec96862b024987b59e56579920361582e718126b07885732335ac1b4d51b61bc", "run_1_sha256": "ec96862b024987b59e56579920361582e718126b07885732335ac1b4d51b61bc",
"run_2_sha256": "4f900711a706dd56dd16b368e261761051f6d52a38bfd421e7d1c5f66ee51e49", "run_2_sha256": "4f900711a706dd56dd16b368e261761051f6d52a38bfd421e7d1c5f66ee51e49",
"byte_identical": false, "byte_identical": false,
"semantic_results_equal": true, "semantic_results_equal": true,
"interpretation": "Metric values are stable, but UUID4-backed run identity makes retained JSON byte-nondeterministic." "interpretation": "Metric values are stable, but UUID4-backed run identity makes retained JSON byte-nondeterministic."
} }
@@ -1,177 +1,177 @@
{ {
"benchmark_id": "golden-buildings-partial-match-v1", "benchmark_id": "golden-buildings-partial-match-v1",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings.geojson", "candidate": "fixtures/golden/predicted_buildings.geojson",
"reference": "fixtures/golden/reference_buildings.geojson" "reference": "fixtures/golden/reference_buildings.geojson"
}, },
"metrics": { "metrics": {
"f1": 0.5, "f1": 0.5,
"false_negative_count": 1, "false_negative_count": 1,
"false_positive_count": 1, "false_positive_count": 1,
"mean_iou": 0.8339768339652592, "mean_iou": 0.8339768339652592,
"precision": 0.5, "precision": 0.5,
"recall": 0.5 "recall": 0.5
}, },
"persistence": { "persistence": {
"commit_count": 4, "commit_count": 4,
"metric_count": 24, "metric_count": 24,
"metric_keys": [ "metric_keys": [
"f1", "f1",
"false_negative_count", "false_negative_count",
"false_positive_count", "false_positive_count",
"mean_iou", "mean_iou",
"precision", "precision",
"recall" "recall"
], ],
"quality_check_count": 4 "quality_check_count": 4
}, },
"scenario_count": 4, "scenario_count": 4,
"scenarios": [ "scenarios": [
{ {
"benchmark_id": "golden-buildings-partial-match-v1", "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.", "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": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings.geojson", "candidate": "fixtures/golden/predicted_buildings.geojson",
"reference": "fixtures/golden/reference_buildings.geojson" "reference": "fixtures/golden/reference_buildings.geojson"
}, },
"metrics": { "metrics": {
"f1": 0.5, "f1": 0.5,
"false_negative_count": 1, "false_negative_count": 1,
"false_positive_count": 1, "false_positive_count": 1,
"mean_iou": 0.8339768339652592, "mean_iou": 0.8339768339652592,
"precision": 0.5, "precision": 0.5,
"recall": 0.5 "recall": 0.5
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "5fe92da9-2d8d-46a4-9992-2de89e3cf511", "quality_check_id": "5fe92da9-2d8d-46a4-9992-2de89e3cf511",
"result_counts": { "result_counts": {
"candidate_feature_count": 2, "candidate_feature_count": 2,
"matches": 1, "matches": 1,
"reference_feature_count": 2 "reference_feature_count": 2
}, },
"status": "passed" "status": "passed"
}, },
{ {
"benchmark_id": "golden-buildings-perfect-match-v1", "benchmark_id": "golden-buildings-perfect-match-v1",
"description": "One candidate building polygon exactly matches one reference polygon.", "description": "One candidate building polygon exactly matches one reference polygon.",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings_perfect.geojson", "candidate": "fixtures/golden/predicted_buildings_perfect.geojson",
"reference": "fixtures/golden/reference_buildings_perfect.geojson" "reference": "fixtures/golden/reference_buildings_perfect.geojson"
}, },
"metrics": { "metrics": {
"f1": 1.0, "f1": 1.0,
"false_negative_count": 0, "false_negative_count": 0,
"false_positive_count": 0, "false_positive_count": 0,
"mean_iou": 1.0, "mean_iou": 1.0,
"precision": 1.0, "precision": 1.0,
"recall": 1.0 "recall": 1.0
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "7b8c1444-31e6-4780-92cb-f2060f4a4048", "quality_check_id": "7b8c1444-31e6-4780-92cb-f2060f4a4048",
"result_counts": { "result_counts": {
"candidate_feature_count": 1, "candidate_feature_count": 1,
"matches": 1, "matches": 1,
"reference_feature_count": 1 "reference_feature_count": 1
}, },
"status": "passed" "status": "passed"
}, },
{ {
"benchmark_id": "golden-buildings-no-overlap-v1", "benchmark_id": "golden-buildings-no-overlap-v1",
"description": "One candidate polygon and one reference polygon do not overlap.", "description": "One candidate polygon and one reference polygon do not overlap.",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson", "candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson",
"reference": "fixtures/golden/reference_buildings_no_overlap.geojson" "reference": "fixtures/golden/reference_buildings_no_overlap.geojson"
}, },
"metrics": { "metrics": {
"f1": null, "f1": null,
"false_negative_count": 1, "false_negative_count": 1,
"false_positive_count": 1, "false_positive_count": 1,
"mean_iou": null, "mean_iou": null,
"precision": 0.0, "precision": 0.0,
"recall": 0.0 "recall": 0.0
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "1ffb1817-b237-4ca8-aad7-ff3312ac7e03", "quality_check_id": "1ffb1817-b237-4ca8-aad7-ff3312ac7e03",
"result_counts": { "result_counts": {
"candidate_feature_count": 1, "candidate_feature_count": 1,
"matches": 0, "matches": 0,
"reference_feature_count": 1 "reference_feature_count": 1
}, },
"status": "passed" "status": "passed"
}, },
{ {
"benchmark_id": "golden-buildings-multipolygon-match-v1", "benchmark_id": "golden-buildings-multipolygon-match-v1",
"description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.", "description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson", "candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson",
"reference": "fixtures/golden/reference_buildings_multipolygon.geojson" "reference": "fixtures/golden/reference_buildings_multipolygon.geojson"
}, },
"metrics": { "metrics": {
"f1": 1.0, "f1": 1.0,
"false_negative_count": 0, "false_negative_count": 0,
"false_positive_count": 0, "false_positive_count": 0,
"mean_iou": 1.0, "mean_iou": 1.0,
"precision": 1.0, "precision": 1.0,
"recall": 1.0 "recall": 1.0
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "60e6a321-2aaf-467b-9281-f30dd4179333", "quality_check_id": "60e6a321-2aaf-467b-9281-f30dd4179333",
"result_counts": { "result_counts": {
"candidate_feature_count": 1, "candidate_feature_count": 1,
"matches": 1, "matches": 1,
"reference_feature_count": 1 "reference_feature_count": 1
}, },
"status": "passed" "status": "passed"
} }
], ],
"status": "passed", "status": "passed",
"version": 1 "version": 1
} }
@@ -1,177 +1,177 @@
{ {
"benchmark_id": "golden-buildings-partial-match-v1", "benchmark_id": "golden-buildings-partial-match-v1",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings.geojson", "candidate": "fixtures/golden/predicted_buildings.geojson",
"reference": "fixtures/golden/reference_buildings.geojson" "reference": "fixtures/golden/reference_buildings.geojson"
}, },
"metrics": { "metrics": {
"f1": 0.5, "f1": 0.5,
"false_negative_count": 1, "false_negative_count": 1,
"false_positive_count": 1, "false_positive_count": 1,
"mean_iou": 0.8339768339652592, "mean_iou": 0.8339768339652592,
"precision": 0.5, "precision": 0.5,
"recall": 0.5 "recall": 0.5
}, },
"persistence": { "persistence": {
"commit_count": 4, "commit_count": 4,
"metric_count": 24, "metric_count": 24,
"metric_keys": [ "metric_keys": [
"f1", "f1",
"false_negative_count", "false_negative_count",
"false_positive_count", "false_positive_count",
"mean_iou", "mean_iou",
"precision", "precision",
"recall" "recall"
], ],
"quality_check_count": 4 "quality_check_count": 4
}, },
"scenario_count": 4, "scenario_count": 4,
"scenarios": [ "scenarios": [
{ {
"benchmark_id": "golden-buildings-partial-match-v1", "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.", "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": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings.geojson", "candidate": "fixtures/golden/predicted_buildings.geojson",
"reference": "fixtures/golden/reference_buildings.geojson" "reference": "fixtures/golden/reference_buildings.geojson"
}, },
"metrics": { "metrics": {
"f1": 0.5, "f1": 0.5,
"false_negative_count": 1, "false_negative_count": 1,
"false_positive_count": 1, "false_positive_count": 1,
"mean_iou": 0.8339768339652592, "mean_iou": 0.8339768339652592,
"precision": 0.5, "precision": 0.5,
"recall": 0.5 "recall": 0.5
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "8d030591-a701-46ee-ae59-7f529db053d3", "quality_check_id": "8d030591-a701-46ee-ae59-7f529db053d3",
"result_counts": { "result_counts": {
"candidate_feature_count": 2, "candidate_feature_count": 2,
"matches": 1, "matches": 1,
"reference_feature_count": 2 "reference_feature_count": 2
}, },
"status": "passed" "status": "passed"
}, },
{ {
"benchmark_id": "golden-buildings-perfect-match-v1", "benchmark_id": "golden-buildings-perfect-match-v1",
"description": "One candidate building polygon exactly matches one reference polygon.", "description": "One candidate building polygon exactly matches one reference polygon.",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings_perfect.geojson", "candidate": "fixtures/golden/predicted_buildings_perfect.geojson",
"reference": "fixtures/golden/reference_buildings_perfect.geojson" "reference": "fixtures/golden/reference_buildings_perfect.geojson"
}, },
"metrics": { "metrics": {
"f1": 1.0, "f1": 1.0,
"false_negative_count": 0, "false_negative_count": 0,
"false_positive_count": 0, "false_positive_count": 0,
"mean_iou": 1.0, "mean_iou": 1.0,
"precision": 1.0, "precision": 1.0,
"recall": 1.0 "recall": 1.0
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "bc99f243-ee42-40bf-ad71-22da29e5278f", "quality_check_id": "bc99f243-ee42-40bf-ad71-22da29e5278f",
"result_counts": { "result_counts": {
"candidate_feature_count": 1, "candidate_feature_count": 1,
"matches": 1, "matches": 1,
"reference_feature_count": 1 "reference_feature_count": 1
}, },
"status": "passed" "status": "passed"
}, },
{ {
"benchmark_id": "golden-buildings-no-overlap-v1", "benchmark_id": "golden-buildings-no-overlap-v1",
"description": "One candidate polygon and one reference polygon do not overlap.", "description": "One candidate polygon and one reference polygon do not overlap.",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson", "candidate": "fixtures/golden/predicted_buildings_no_overlap.geojson",
"reference": "fixtures/golden/reference_buildings_no_overlap.geojson" "reference": "fixtures/golden/reference_buildings_no_overlap.geojson"
}, },
"metrics": { "metrics": {
"f1": null, "f1": null,
"false_negative_count": 1, "false_negative_count": 1,
"false_positive_count": 1, "false_positive_count": 1,
"mean_iou": null, "mean_iou": null,
"precision": 0.0, "precision": 0.0,
"recall": 0.0 "recall": 0.0
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "b12249f0-24e3-4bbf-837a-e4a962d1bca9", "quality_check_id": "b12249f0-24e3-4bbf-837a-e4a962d1bca9",
"result_counts": { "result_counts": {
"candidate_feature_count": 1, "candidate_feature_count": 1,
"matches": 0, "matches": 0,
"reference_feature_count": 1 "reference_feature_count": 1
}, },
"status": "passed" "status": "passed"
}, },
{ {
"benchmark_id": "golden-buildings-multipolygon-match-v1", "benchmark_id": "golden-buildings-multipolygon-match-v1",
"description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.", "description": "One candidate MultiPolygon exactly matches one reference MultiPolygon.",
"fixtures": { "fixtures": {
"candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson", "candidate": "fixtures/golden/predicted_buildings_multipolygon.geojson",
"reference": "fixtures/golden/reference_buildings_multipolygon.geojson" "reference": "fixtures/golden/reference_buildings_multipolygon.geojson"
}, },
"metrics": { "metrics": {
"f1": 1.0, "f1": 1.0,
"false_negative_count": 0, "false_negative_count": 0,
"false_positive_count": 0, "false_positive_count": 0,
"mean_iou": 1.0, "mean_iou": 1.0,
"precision": 1.0, "precision": 1.0,
"recall": 1.0 "recall": 1.0
}, },
"persistence": { "persistence": {
"commit_count": 1, "commit_count": 1,
"metric_count": 6, "metric_count": 6,
"metric_keys": [ "metric_keys": [
"precision", "precision",
"recall", "recall",
"f1", "f1",
"mean_iou", "mean_iou",
"false_positive_count", "false_positive_count",
"false_negative_count" "false_negative_count"
], ],
"quality_check_count": 1 "quality_check_count": 1
}, },
"quality_check_id": "4dabce04-4c65-4dac-807d-9f9cbaa8c72f", "quality_check_id": "4dabce04-4c65-4dac-807d-9f9cbaa8c72f",
"result_counts": { "result_counts": {
"candidate_feature_count": 1, "candidate_feature_count": 1,
"matches": 1, "matches": 1,
"reference_feature_count": 1 "reference_feature_count": 1
}, },
"status": "passed" "status": "passed"
} }
], ],
"status": "passed", "status": "passed",
"version": 1 "version": 1
} }
File diff suppressed because it is too large Load Diff
@@ -1,5 +1,5 @@
command=python scripts/audit_api_contracts.py command=python scripts/audit_api_contracts.py
exit_code=0 exit_code=0
captured_at=2026-08-01T18:37:24.4984309+02:00 captured_at=2026-08-01T18:37:24.4984309+02:00
API contract audit OK: 147 implemented routes match docs; 10 explicit non-envelope endpoints tracked. API contract audit OK: 147 implemented routes match docs; 10 explicit non-envelope endpoints tracked.
@@ -1,36 +1,36 @@
{ {
"baseline_scope": [ "baseline_scope": [
"tracked repository state", "tracked repository state",
"static code/test/migration inventory", "static code/test/migration inventory",
"tracked mirror comparison", "tracked mirror comparison",
"local artifact inventory", "local artifact inventory",
"mock/fixture/placeholder/fallback triage signals" "mock/fixture/placeholder/fallback triage signals"
], ],
"finding_count": 2, "finding_count": 2,
"findings": [ "findings": [
{ {
"evidence": { "evidence": {
"paired_different_file_count": 68, "paired_different_file_count": 68,
"tracked_mirror_file_count": 1153 "tracked_mirror_file_count": 1153
}, },
"id": "P1-REPO-001", "id": "P1-REPO-001",
"severity": "high", "severity": "high",
"title": "Tracked nested repository mirror creates ambiguous source state" "title": "Tracked nested repository mirror creates ambiguous source state"
}, },
{ {
"id": "P1-ML-LOCAL-001", "id": "P1-ML-LOCAL-001",
"interpretation": "Production model truth must be verified on the mounted Tower volume.", "interpretation": "Production model truth must be verified on the mounted Tower volume.",
"severity": "info", "severity": "info",
"title": "No local checkpoint is available in the repository checkout" "title": "No local checkpoint is available in the repository checkout"
} }
], ],
"generated_at": "2026-08-01T15:53:53.482303+00:00", "generated_at": "2026-08-01T15:53:53.482303+00:00",
"schema_version": 1, "schema_version": 1,
"separate_required_evidence": [ "separate_required_evidence": [
"Tower database/storage audit", "Tower database/storage audit",
"Tower CUDA/model preflight and representative inference", "Tower CUDA/model preflight and representative inference",
"corpus leakage/duplicate/label/time review", "corpus leakage/duplicate/label/time review",
"independent human visual review" "independent human visual review"
], ],
"status": "findings_present" "status": "findings_present"
} }
@@ -1,6 +1,6 @@
command=python -m pytest tests/test_accuracy_phase1_baseline.py -q -p no:cacheprovider command=python -m pytest tests/test_accuracy_phase1_baseline.py -q -p no:cacheprovider
exit_code=0 exit_code=0
captured_at=2026-08-01T18:33:32.0526074+02:00 captured_at=2026-08-01T18:33:32.0526074+02:00
.... [100%] .... [100%]
4 passed in 1.24s 4 passed in 1.24s
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,215 +1,215 @@
{ {
"captured_at": "2026-08-01T18:13:54.6553+02:00", "captured_at": "2026-08-01T18:13:54.6553+02:00",
"claim_boundary": "One production-adapter inference completed on one existing tile. No accuracy, calibration, geographic-generalization, or release claim follows from this smoke.", "claim_boundary": "One production-adapter inference completed on one existing tile. No accuracy, calibration, geographic-generalization, or release claim follows from this smoke.",
"configuration": { "configuration": {
"confidence": 0.5, "confidence": 0.5,
"deterministic_algorithms": true, "deterministic_algorithms": true,
"device": "cuda:0", "device": "cuda:0",
"image_size": 640, "image_size": 640,
"max_detections": 1000, "max_detections": 1000,
"seed": 20260801 "seed": 20260801
}, },
"input": { "input": {
"manifest_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/manifest.json", "manifest_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/manifest.json",
"manifest_sha256": "6ab8a96bf2a1405e224932afb90255311a09bbeaed4e9a2fdcdf8b1bc2230abd", "manifest_sha256": "6ab8a96bf2a1405e224932afb90255311a09bbeaed4e9a2fdcdf8b1bc2230abd",
"raster": { "raster": {
"available": true, "available": true,
"bounds": [ "bounds": [
193277.53584918313, 193277.53584918313,
205708.27443503588, 205708.27443503588,
193777.53584918313, 193777.53584918313,
206208.27443503588 206208.27443503588
], ],
"count": 3, "count": 3,
"crs": "EPSG:31370", "crs": "EPSG:31370",
"dtypes": [ "dtypes": [
"uint8", "uint8",
"uint8", "uint8",
"uint8" "uint8"
], ],
"height": 512, "height": 512,
"nodata": null, "nodata": null,
"transform": [ "transform": [
0.9765625, 0.9765625,
0.0, 0.0,
193277.53584918313, 193277.53584918313,
0.0, 0.0,
-0.9765625, -0.9765625,
206208.27443503588, 206208.27443503588,
0.0, 0.0,
0.0, 0.0,
1.0 1.0
], ],
"width": 512 "width": 512
}, },
"tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif", "tile_path": "/app/storage/tiles/cb80638d-dbef-48ac-b19c-cec7c3efc96e/ae0ff76d-70c0-404f-b777-54d14517179a/b191c968-7d56-4e0d-afbb-8b5baaa62470/tile_0000.tif",
"tile_sha256": "134a9e86850c92c577c73bc6ee57a9df7d4c1c513ae6450263e800b6dd47b6ee", "tile_sha256": "134a9e86850c92c577c73bc6ee57a9df7d4c1c513ae6450263e800b6dd47b6ee",
"tile_size_bytes": 669227 "tile_size_bytes": 669227
}, },
"model": { "model": {
"path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt", "path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1", "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"size_bytes": 22516074 "size_bytes": 22516074
}, },
"output": { "output": {
"class_counts": { "class_counts": {
"building": 17 "building": 17
}, },
"confidence": { "confidence": {
"maximum": 0.8144345879554749, "maximum": 0.8144345879554749,
"mean": 0.5594814244438621, "mean": 0.5594814244438621,
"minimum": 0.5008771419525146 "minimum": 0.5008771419525146
}, },
"count": 17, "count": 17,
"sample": [ "sample": [
{ {
"bbox": [ "bbox": [
125.5418930053711, 125.5418930053711,
157.9995880126953, 157.9995880126953,
187.2771453857422, 187.2771453857422,
232.72903442382812 232.72903442382812
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.8144345879554749, "confidence": 0.8144345879554749,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
38.20725631713867, 38.20725631713867,
487.8446350097656, 487.8446350097656,
56.458614349365234, 56.458614349365234,
510.8298034667969 510.8298034667969
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.6531882286071777, "confidence": 0.6531882286071777,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
177.36990356445312, 177.36990356445312,
229.9929656982422, 229.9929656982422,
248.5861053466797, 248.5861053466797,
267.96173095703125 267.96173095703125
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.6213690638542175, "confidence": 0.6213690638542175,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
367.4935607910156, 367.4935607910156,
474.3263244628906, 474.3263244628906,
407.673828125, 407.673828125,
498.2358093261719 498.2358093261719
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.6148342490196228, "confidence": 0.6148342490196228,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
435.2783203125, 435.2783203125,
131.2145233154297, 131.2145233154297,
453.61016845703125, 453.61016845703125,
166.76919555664062 166.76919555664062
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.5637134313583374, "confidence": 0.5637134313583374,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
407.32525634765625, 407.32525634765625,
317.380126953125, 317.380126953125,
416.885009765625, 416.885009765625,
326.8919982910156 326.8919982910156
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.547556459903717, "confidence": 0.547556459903717,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
395.66558837890625, 395.66558837890625,
356.8952331542969, 356.8952331542969,
413.51416015625, 413.51416015625,
377.1672668457031 377.1672668457031
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.5378748774528503, "confidence": 0.5378748774528503,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
394.0309143066406, 394.0309143066406,
143.1604461669922, 143.1604461669922,
408.4023132324219, 408.4023132324219,
167.8805389404297 167.8805389404297
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.5360639095306396, "confidence": 0.5360639095306396,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
125.3250503540039, 125.3250503540039,
56.1500358581543, 56.1500358581543,
157.87998962402344, 157.87998962402344,
68.70291900634766 68.70291900634766
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.5342658162117004, "confidence": 0.5342658162117004,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
}, },
{ {
"bbox": [ "bbox": [
213.7998504638672, 213.7998504638672,
77.86518859863281, 77.86518859863281,
230.8061065673828, 230.8061065673828,
90.1888198852539 90.1888198852539
], ],
"class_name": "building", "class_name": "building",
"confidence": 0.5319290161132812, "confidence": 0.5319290161132812,
"properties": { "properties": {
"class_id": 0 "class_id": 0
} }
} }
] ]
}, },
"read_only": true, "read_only": true,
"runtime": { "runtime": {
"cuda_available": true, "cuda_available": true,
"cuda_device_index": 0, "cuda_device_index": 0,
"cuda_device_name": "NVIDIA GeForce RTX 4080 SUPER", "cuda_device_name": "NVIDIA GeForce RTX 4080 SUPER",
"cuda_peak_memory_bytes": 82307072, "cuda_peak_memory_bytes": 82307072,
"cuda_runtime": "12.8", "cuda_runtime": "12.8",
"python": "3.11.2 (main, May 12 2026, 05:17:27) [GCC 12.2.0]", "python": "3.11.2 (main, May 12 2026, 05:17:27) [GCC 12.2.0]",
"torch": "2.11.0+cu128", "torch": "2.11.0+cu128",
"ultralytics": "8.4.99" "ultralytics": "8.4.99"
}, },
"schema_version": 1, "schema_version": 1,
"status": "passed", "status": "passed",
"timing_seconds": { "timing_seconds": {
"inference": 0.8836944859940559, "inference": 0.8836944859940559,
"model_load": 0.48524460900807753, "model_load": 0.48524460900807753,
"total": 1.3689390950021334 "total": 1.3689390950021334
} }
} }
@@ -1,25 +1,25 @@
{ {
"schema_version": 1, "schema_version": 1,
"captured_at": "2026-08-01T18:46:19.288288+02:00", "captured_at": "2026-08-01T18:46:19.288288+02:00",
"read_only": true, "read_only": true,
"artifacts": [ "artifacts": [
{ {
"path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/best.pt", "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/best.pt",
"exists": true, "exists": true,
"size_bytes": 456136473, "size_bytes": 456136473,
"sha256": "889ee5b3bfe722803542d15a53a51a716872cf0e8516da5e8291e0a2605adbdb" "sha256": "889ee5b3bfe722803542d15a53a51a716872cf0e8516da5e8291e0a2605adbdb"
}, },
{ {
"path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/last.pt", "path": "/app/storage/training/building-be-v62-v58-flanders-balanced-transfer-r1/runs/flanders/weights/last.pt",
"exists": true, "exists": true,
"size_bytes": 456136985, "size_bytes": 456136985,
"sha256": "08d12061f017c45c123c824ffa043bc07794beef251c903299eb1e0954636c8b" "sha256": "08d12061f017c45c123c824ffa043bc07794beef251c903299eb1e0954636c8b"
}, },
{ {
"path": "/app/storage/training/building-be-v56-rotated-quality-audit-r1/operator_yolo_dataset_quality_audit.json", "path": "/app/storage/training/building-be-v56-rotated-quality-audit-r1/operator_yolo_dataset_quality_audit.json",
"exists": true, "exists": true,
"size_bytes": 153659, "size_bytes": 153659,
"sha256": "da0d4648ee2365ab949f1b00518ddba0a17cb722a41cb228525b4d2e7657ce36" "sha256": "da0d4648ee2365ab949f1b00518ddba0a17cb722a41cb228525b4d2e7657ce36"
} }
] ]
} }
File diff suppressed because it is too large Load Diff
File diff suppressed because it is too large Load Diff
@@ -1,397 +1,397 @@
{ {
"active_model": { "active_model": {
"classes": "building", "classes": "building",
"configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt", "configured_path": "/app/models/geointel-building-yolov8s-smallbld-minpx3-img640-ft30.pt",
"device": "cuda:0", "device": "cuda:0",
"exists": true, "exists": true,
"model_id": "yolo-configured", "model_id": "yolo-configured",
"model_version": "", "model_version": "",
"require_cuda": "true", "require_cuda": "true",
"sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1", "sha256": "a9088b8491dfae36694b53e9e9406cb4e3511d334a5712fa34f75078a47759c1",
"size_bytes": 22516074, "size_bytes": 22516074,
"validated_area_names": "Mol,Kempen", "validated_area_names": "Mol,Kempen",
"validation_scope_enforced": "true" "validation_scope_enforced": "true"
}, },
"database": { "database": {
"analysis_statuses": [ "analysis_statuses": [
{ {
"count": 2, "count": 2,
"status": "failed" "status": "failed"
}, },
{ {
"count": 1144, "count": 1144,
"status": "success" "status": "success"
} }
], ],
"confidence_integrity": [ "confidence_integrity": [
{ {
"detections_outside_unit_interval": 0, "detections_outside_unit_interval": 0,
"segmentations_outside_unit_interval": 0 "segmentations_outside_unit_interval": 0
} }
], ],
"dataset_lineage_gaps": [ "dataset_lineage_gaps": [
{ {
"missing_checksum": 0, "missing_checksum": 0,
"missing_crs": 0, "missing_crs": 0,
"missing_imported_at": 0, "missing_imported_at": 0,
"missing_observed_at": 2377, "missing_observed_at": 2377,
"missing_provenance_metadata": 0, "missing_provenance_metadata": 0,
"missing_source_metadata": 0, "missing_source_metadata": 0,
"missing_source_version": 1761, "missing_source_version": 1761,
"total": 3377 "total": 3377
} }
], ],
"dataset_statuses": [ "dataset_statuses": [
{ {
"count": 3377, "count": 3377,
"status": "ready" "status": "ready"
} }
], ],
"dataset_version_gaps": [ "dataset_version_gaps": [
{ {
"missing_checksum": 0, "missing_checksum": 0,
"missing_provenance_metadata": 0, "missing_provenance_metadata": 0,
"missing_source_metadata": 0, "missing_source_metadata": 0,
"missing_storage_path": 0, "missing_storage_path": 0,
"total": 1671 "total": 1671
} }
], ],
"geometry_integrity": { "geometry_integrity": {
"areas": { "areas": {
"rows": [ "rows": [
{ {
"empty": 0, "empty": 0,
"invalid": 0, "invalid": 0,
"outside_epsg4326_domain": 0, "outside_epsg4326_domain": 0,
"populated": 387, "populated": 387,
"wrong_srid": 0 "wrong_srid": 0
} }
], ],
"status": "ok" "status": "ok"
}, },
"detections": { "detections": {
"rows": [ "rows": [
{ {
"empty": 0, "empty": 0,
"invalid": 0, "invalid": 0,
"outside_epsg4326_domain": 4, "outside_epsg4326_domain": 4,
"populated": 299233, "populated": 299233,
"wrong_srid": 0 "wrong_srid": 0
} }
], ],
"status": "ok" "status": "ok"
}, },
"segmentations": { "segmentations": {
"rows": [ "rows": [
{ {
"empty": 0, "empty": 0,
"invalid": 0, "invalid": 0,
"outside_epsg4326_domain": 0, "outside_epsg4326_domain": 0,
"populated": 0, "populated": 0,
"wrong_srid": 0 "wrong_srid": 0
} }
], ],
"status": "ok" "status": "ok"
}, },
"vector_features": { "vector_features": {
"rows": [ "rows": [
{ {
"empty": 0, "empty": 0,
"invalid": 0, "invalid": 0,
"outside_epsg4326_domain": 0, "outside_epsg4326_domain": 0,
"populated": 6689447, "populated": 6689447,
"wrong_srid": 0 "wrong_srid": 0
} }
], ],
"status": "ok" "status": "ok"
} }
}, },
"job_statuses": [ "job_statuses": [
{ {
"count": 135, "count": 135,
"status": "failed" "status": "failed"
}, },
{ {
"count": 4325, "count": 4325,
"status": "success" "status": "success"
} }
], ],
"metric_nulls": [ "metric_nulls": [
{ {
"metric_key": "f1", "metric_key": "f1",
"null_values": 58, "null_values": 58,
"total": 697 "total": 697
}, },
{ {
"metric_key": "false_negative_count", "metric_key": "false_negative_count",
"null_values": 0, "null_values": 0,
"total": 697 "total": 697
}, },
{ {
"metric_key": "false_positive_count", "metric_key": "false_positive_count",
"null_values": 0, "null_values": 0,
"total": 697 "total": 697
}, },
{ {
"metric_key": "mean_iou", "metric_key": "mean_iou",
"null_values": 90, "null_values": 90,
"total": 697 "total": 697
}, },
{ {
"metric_key": "precision", "metric_key": "precision",
"null_values": 58, "null_values": 58,
"total": 697 "total": 697
}, },
{ {
"metric_key": "recall", "metric_key": "recall",
"null_values": 1, "null_values": 1,
"total": 697 "total": 697
} }
], ],
"migration_heads": [ "migration_heads": [
"202607260001" "202607260001"
], ],
"model_run_summary": [ "model_run_summary": [
{ {
"analysis_type": "detection", "analysis_type": "detection",
"count": 1144, "count": 1144,
"model_name": "yolo-configured", "model_name": "yolo-configured",
"model_version": "", "model_version": "",
"status": "success" "status": "success"
}, },
{ {
"analysis_type": "detection", "analysis_type": "detection",
"count": 2, "count": 2,
"model_name": "yolo-configured", "model_name": "yolo-configured",
"model_version": "", "model_version": "",
"status": "failed" "status": "failed"
} }
], ],
"postgis_version": "POSTGIS=\"3.6.4 94d984b\" [EXTENSION] PGSQL=\"160\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\" (core procs from \"3.4.3 e365945\" need upgrade) TOPOLOGY (topology procs from \"3.4.3 e365945\" need upgrade)", "postgis_version": "POSTGIS=\"3.6.4 94d984b\" [EXTENSION] PGSQL=\"160\" GEOS=\"3.11.1-CAPI-1.17.1\" PROJ=\"9.1.1 NETWORK_ENABLED=OFF URL_ENDPOINT=https://cdn.proj.org USER_WRITABLE_DIRECTORY=/tmp/proj DATABASE_PATH=/usr/share/proj/proj.db\" LIBXML=\"2.9.14\" LIBJSON=\"0.16\" LIBPROTOBUF=\"1.4.1\" WAGYU=\"0.5.0 (Internal)\" (core procs from \"3.4.3 e365945\" need upgrade) TOPOLOGY (topology procs from \"3.4.3 e365945\" need upgrade)",
"source_summary": [ "source_summary": [
{ {
"count": 1751, "count": 1751,
"reference_count": 660, "reference_count": 660,
"source_name": "manual", "source_name": "manual",
"status": "ready" "status": "ready"
}, },
{ {
"count": 339, "count": 339,
"reference_count": 0, "reference_count": 0,
"source_name": "vmm_flood_hazard", "source_name": "vmm_flood_hazard",
"status": "ready" "status": "ready"
}, },
{ {
"count": 273, "count": 273,
"reference_count": 273, "reference_count": 273,
"source_name": "vmm_vha_bathymetry_profiles", "source_name": "vmm_vha_bathymetry_profiles",
"status": "ready" "status": "ready"
}, },
{ {
"count": 210, "count": 210,
"reference_count": 0, "reference_count": 0,
"source_name": "department_omgeving_thematic_raster", "source_name": "department_omgeving_thematic_raster",
"status": "ready" "status": "ready"
}, },
{ {
"count": 179, "count": 179,
"reference_count": 179, "reference_count": 179,
"source_name": "grb", "source_name": "grb",
"status": "ready" "status": "ready"
}, },
{ {
"count": 168, "count": 168,
"reference_count": 0, "reference_count": 0,
"source_name": "digitaal_vlaanderen_orthophoto", "source_name": "digitaal_vlaanderen_orthophoto",
"status": "ready" "status": "ready"
}, },
{ {
"count": 107, "count": 107,
"reference_count": 0, "reference_count": 0,
"source_name": "spw_orthophoto", "source_name": "spw_orthophoto",
"status": "ready" "status": "ready"
}, },
{ {
"count": 68, "count": 68,
"reference_count": 68, "reference_count": 68,
"source_name": "spw_picc", "source_name": "spw_picc",
"status": "ready" "status": "ready"
}, },
{ {
"count": 60, "count": 60,
"reference_count": 0, "reference_count": 0,
"source_name": "digitaal_vlaanderen_dhmv", "source_name": "digitaal_vlaanderen_dhmv",
"status": "ready" "status": "ready"
}, },
{ {
"count": 36, "count": 36,
"reference_count": 36, "reference_count": 36,
"source_name": "urbis", "source_name": "urbis",
"status": "ready" "status": "ready"
}, },
{ {
"count": 26, "count": 26,
"reference_count": 0, "reference_count": 0,
"source_name": "urbis_orthophoto", "source_name": "urbis_orthophoto",
"status": "ready" "status": "ready"
}, },
{ {
"count": 26, "count": 26,
"reference_count": 26, "reference_count": 26,
"source_name": "waterinfo", "source_name": "waterinfo",
"status": "ready" "status": "ready"
}, },
{ {
"count": 25, "count": 25,
"reference_count": 25, "reference_count": 25,
"source_name": "department_omgeving_land_use", "source_name": "department_omgeving_land_use",
"status": "ready" "status": "ready"
}, },
{ {
"count": 21, "count": 21,
"reference_count": 21, "reference_count": 21,
"source_name": "historical_landuse", "source_name": "historical_landuse",
"status": "ready" "status": "ready"
}, },
{ {
"count": 18, "count": 18,
"reference_count": 18, "reference_count": 18,
"source_name": "agentschap_landbouw_zeevisserij_agricultural_parcels", "source_name": "agentschap_landbouw_zeevisserij_agricultural_parcels",
"status": "ready" "status": "ready"
}, },
{ {
"count": 15, "count": 15,
"reference_count": 15, "reference_count": 15,
"source_name": "statbel", "source_name": "statbel",
"status": "ready" "status": "ready"
}, },
{ {
"count": 13, "count": 13,
"reference_count": 13, "reference_count": 13,
"source_name": "dov_soil_map", "source_name": "dov_soil_map",
"status": "ready" "status": "ready"
}, },
{ {
"count": 12, "count": 12,
"reference_count": 12, "reference_count": 12,
"source_name": "inbo_bwk_natura2000", "source_name": "inbo_bwk_natura2000",
"status": "ready" "status": "ready"
}, },
{ {
"count": 7, "count": 7,
"reference_count": 0, "reference_count": 0,
"source_name": "spw_walous_land_cover", "source_name": "spw_walous_land_cover",
"status": "ready" "status": "ready"
}, },
{ {
"count": 6, "count": 6,
"reference_count": 0, "reference_count": 0,
"source_name": "vrbg", "source_name": "vrbg",
"status": "ready" "status": "ready"
}, },
{ {
"count": 5, "count": 5,
"reference_count": 1, "reference_count": 1,
"source_name": "fixture", "source_name": "fixture",
"status": "ready" "status": "ready"
}, },
{ {
"count": 4, "count": 4,
"reference_count": 4, "reference_count": 4,
"source_name": "ngi_adminvector", "source_name": "ngi_adminvector",
"status": "ready" "status": "ready"
}, },
{ {
"count": 3, "count": 3,
"reference_count": 0, "reference_count": 0,
"source_name": "map_selection", "source_name": "map_selection",
"status": "ready" "status": "ready"
}, },
{ {
"count": 1, "count": 1,
"reference_count": 1, "reference_count": 1,
"source_name": "digitaal_vlaanderen_buildings_addresses_register", "source_name": "digitaal_vlaanderen_buildings_addresses_register",
"status": "ready" "status": "ready"
}, },
{ {
"count": 1, "count": 1,
"reference_count": 1, "reference_count": 1,
"source_name": "rbins_marine_reporting_units", "source_name": "rbins_marine_reporting_units",
"status": "ready" "status": "ready"
}, },
{ {
"count": 1, "count": 1,
"reference_count": 1, "reference_count": 1,
"source_name": "rbins_msp_2026", "source_name": "rbins_msp_2026",
"status": "ready" "status": "ready"
}, },
{ {
"count": 1, "count": 1,
"reference_count": 0, "reference_count": 0,
"source_name": "spw_bathymetry", "source_name": "spw_bathymetry",
"status": "ready" "status": "ready"
}, },
{ {
"count": 1, "count": 1,
"reference_count": 0, "reference_count": 0,
"source_name": "spw_terrain", "source_name": "spw_terrain",
"status": "ready" "status": "ready"
} }
], ],
"table_counts": { "table_counts": {
"analysis_runs": 1146, "analysis_runs": 1146,
"aoi_operation_partitions": 61, "aoi_operation_partitions": 61,
"aoi_operations": 4, "aoi_operations": 4,
"areas": 387, "areas": 387,
"dataset_versions": 1671, "dataset_versions": 1671,
"datasets": 3377, "datasets": 3377,
"detection_reviews": 0, "detection_reviews": 0,
"detections": 299233, "detections": 299233,
"exports": 768, "exports": 768,
"jobs": 4460, "jobs": 4460,
"metrics": 4182, "metrics": 4182,
"projects": 1097, "projects": 1097,
"quality_checks": 697, "quality_checks": 697,
"segmentations": 0, "segmentations": 0,
"vector_features": 6689447 "vector_features": 6689447
}, },
"version": "PostgreSQL 16.14 (Debian 16.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit" "version": "PostgreSQL 16.14 (Debian 16.14-1.pgdg12+1) on x86_64-pc-linux-gnu, compiled by gcc (Debian 12.2.0-14+deb12u1) 12.2.0, 64-bit"
}, },
"generated_at": "2026-08-01T16:03:11.003029+00:00", "generated_at": "2026-08-01T16:03:11.003029+00:00",
"mode": "read_only", "mode": "read_only",
"runtime": { "runtime": {
"cuda": { "cuda": {
"available": true, "available": true,
"device_count": 1, "device_count": 1,
"device_names": [ "device_names": [
"NVIDIA GeForce RTX 4080 SUPER" "NVIDIA GeForce RTX 4080 SUPER"
], ],
"runtime_version": "12.8" "runtime_version": "12.8"
}, },
"packages": { "packages": {
"fastapi": "0.139.2", "fastapi": "0.139.2",
"geoalchemy2": "0.20.0", "geoalchemy2": "0.20.0",
"geointel-backend": "0.1.0", "geointel-backend": "0.1.0",
"geopandas": "1.1.4", "geopandas": "1.1.4",
"pyproj": "3.7.2", "pyproj": "3.7.2",
"rasterio": "1.4.4", "rasterio": "1.4.4",
"shapely": "2.1.2", "shapely": "2.1.2",
"sqlalchemy": "2.0.51", "sqlalchemy": "2.0.51",
"torch": "2.11.0+cu128", "torch": "2.11.0+cu128",
"torchvision": "0.26.0+cu128", "torchvision": "0.26.0+cu128",
"ultralytics": "8.4.99" "ultralytics": "8.4.99"
}, },
"platform": "Linux-6.12.54-Unraid-x86_64-with-glibc2.36", "platform": "Linux-6.12.54-Unraid-x86_64-with-glibc2.36",
"python": "3.11.2" "python": "3.11.2"
}, },
"schema_version": 1, "schema_version": 1,
"statement_timeout_ms": 30000, "statement_timeout_ms": 30000,
"storage_references": { "storage_references": {
"checked_count": 5816, "checked_count": 5816,
"missing_count": 0, "missing_count": 0,
"missing_records": [], "missing_records": [],
"records_truncated": false, "records_truncated": false,
"scope": "direct datasets, dataset_versions and exports storage_path columns" "scope": "direct datasets, dataset_versions and exports storage_path columns"
}, },
"storage_root": "/app/storage" "storage_root": "/app/storage"
} }