feat: simplify regional end user workbench
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-14 21:40:32 +02:00
parent 1693e4ca1f
commit b5bcd9b041
52 changed files with 1183 additions and 617 deletions
@@ -16,11 +16,11 @@ def test_detection_lab_exposes_run_readiness_contract() -> None:
assert "detectionTileManifestPath.trim().length > 0" in lab
assert "detectionRunReady" in lab
assert 'aria-label="Detection run readiness"' in lab
assert "Run readiness" in lab
assert "Raster dataset" in lab
assert "Model availability" in lab
assert "Tile manifest" in lab
assert "Ready to submit" in lab
assert "Wat is nog nodig?" in lab
assert "Luchtbeeld" in lab
assert "Analysemodel" in lab
assert "Beeldtegels" in lab
assert "Klaar om te starten" in lab
def test_segmentation_lab_exposes_run_readiness_contract() -> None:
@@ -14,8 +14,8 @@ def test_detection_lab_distinguishes_configured_model_from_ui_runnable_action()
assert "detectionModelUiRunnable" in lab
assert "selectedDetectionModelId !== 'manual-fixture-detector'" in lab
assert "detectionRunBlockedReason" in lab
assert "Fixture model is explicit test/demo-only" in lab
assert "Run action" in lab
assert "Het fixturemodel is alleen bedoeld voor expliciete tests" in lab
assert "Klaar om gebouwen te zoeken" in lab
assert "disabled={runningDetection || !detectionRunReady}" in lab
@@ -19,9 +19,9 @@ def test_qa_feature_evidence_contract_is_documented_and_rendered() -> None:
assert field_name in api_contracts
assert "Feature-level QA/QC evidence" in quality_panel
assert "Matched feature ids" in quality_panel
assert "False positive feature ids" in quality_panel
assert "False negative feature ids" in quality_panel
assert "Overeenkomende object-ID's" in quality_panel
assert "ID's van onterecht gevonden objecten" in quality_panel
assert "ID's van gemiste objecten" in quality_panel
assert "evidenceLabel" in quality_panel
@@ -47,5 +47,5 @@ def test_detection_lab_surfaces_local_model_asset_selection() -> None:
assert "Local model assets" in lab
assert "onSelectModelAsset" in lab
assert "modelAssets={modelAssets}" in app
assert "Official reference sources" in provider_panel
assert "not AI model choices" in provider_panel
assert "Officiële referentiebronnen" in provider_panel
assert "live GRB- en OSM-koppelingen staan uit" in provider_panel
@@ -4,13 +4,15 @@ from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def test_detection_workflow_does_not_auto_select_runtime_model_assets() -> None:
def test_detection_workflow_selects_only_the_active_runtime_model_asset_automatically() -> None:
hook = (ROOT / "frontend" / "src" / "hooks" / "useDetectionWorkflow.ts").read_text(encoding="utf-8")
assert "const activeAsset = assetResponse.items.find" not in hook
assert "setSelectedModelAssetId(activeAsset?.model_asset_id ?? '')" not in hook
assert "const activeAsset = assetResponse.items.find((asset) => asset.active) ?? null" in hook
assert "const selectedAssetStillAvailable" in hook
assert "activeAsset?.model_asset_id ?? ''" in hook
assert "setSelectedModelAssetId(nextAssetId)" in hook
assert "setSelectedModelAssetId(assetResponse.items[0]" not in hook
assert "setSelectedModelAssetId('')" in hook
assert "getYoloPreflight({ model_asset_id: nextAssetId || null })" in hook
def test_detection_lab_explains_explicit_model_asset_and_threshold_selection() -> None:
@@ -18,11 +20,11 @@ def test_detection_lab_explains_explicit_model_asset_and_threshold_selection() -
encoding="utf-8"
)
assert "Explicit model asset" in lab
assert "No model file is selected automatically" in lab
assert "Operator profiles" in lab
assert "Lokaal modelbestand" in lab
assert "GeoIntel kiest automatisch het actieve lokale model" in lab
assert "Gevalideerde profielen" in lab
assert "DETECTION_OPERATOR_PROFILES" in lab
assert "Candidate only - not default-approved" in lab
assert "kandidaat · extra controle vereist" in lab
assert "will_download_models" in lab
@@ -32,5 +34,5 @@ def test_detection_run_readiness_requires_explicit_asset_when_local_assets_exist
)
assert "detectionHasExplicitModelAsset" in lab
assert "Select a local model asset deliberately" in lab
assert "local model asset" in lab
assert "Kies een lokaal modelbestand onder beheer" in lab
assert "Lokale modelkeuze" in lab
@@ -40,7 +40,7 @@ def test_detection_handoff_opens_ai_lab_preflights_manifest_and_keeps_asset_expl
assert "setDetectionConfidenceThreshold(0.25)" in app
assert "loadYoloPreflight(manifestPath).catch(() => null)" in app
assert "setSelectedModelAssetId(" not in app[app.index("const useRasterTileManifestForDetection"):app.index("const {", app.index("const useRasterTileManifestForDetection"))]
assert "Linked tile manifest" in lab
assert "Gekoppelde beeldtegels" in lab
assert "Tile manifest validation" in lab
assert "Tile count" in lab
assert "will_run_inference" in lab
@@ -34,17 +34,17 @@ def test_detection_lab_surfaces_profiles_as_deliberate_operator_actions() -> Non
)
assert "DETECTION_OPERATOR_PROFILES" in lab
assert "Operator profiles" in lab
assert "Gevalideerde profielen" in lab
assert "profile.displayName" in lab
assert "profile.confidenceThreshold" in lab
assert "Candidate only - not default-approved" in lab
assert "default-approved" in lab
assert "Apply profile" in lab
assert "kandidaat · extra controle vereist" in lab
assert "standaardprofiel" in lab
assert "Profiel gebruiken" in lab
assert "onApplyOperatorProfile(profile)" in lab
assert "Recommended starting threshold: 0.25" not in lab
def test_detection_workflow_applies_profiles_without_auto_selecting_assets() -> None:
def test_detection_workflow_applies_profiles_without_selecting_the_first_arbitrary_asset() -> None:
hook = (ROOT / "frontend" / "src" / "hooks" / "useDetectionWorkflow.ts").read_text(encoding="utf-8")
app = (ROOT / "frontend" / "src" / "App.tsx").read_text(encoding="utf-8")
@@ -13,8 +13,9 @@ def test_long_context_names_remain_compact_and_inspectable() -> None:
encoding="utf-8"
)
assert "const projectContextLabel = selectedProject?.name ?? 'No project'" in app
assert "const datasetContextLabel = selectedDataset?.name ?? (datasets.length > 0 ? 'Select dataset' : 'No dataset')" in app
assert "selectedProject?.name === REGIONAL_WORKSPACE_PROJECT_NAME" in app
assert "? REGIONAL_WORKSPACE_LABEL" in app
assert "const datasetContextLabel = selectedDataset ? getDatasetDisplayName(selectedDataset)" in app
assert "<strong title={projectContextLabel}>{projectContextLabel}</strong>" in app
assert "<strong title={datasetContextLabel}>{datasetContextLabel}</strong>" in app
assert "<strong title={item.value}>{item.value}</strong>" in status
@@ -29,7 +29,7 @@ def test_frontend_declares_mol_as_primary_operating_focus() -> None:
assert "PRIMARY_FOCUS_AREA_GEOJSON" in project_hook
assert "4.35,51.28" not in project_hook
assert "center: PRIMARY_FOCUS_CENTER" in map_source
assert "GeoAI Workbench · Mol / Kempen" in app
assert "GeoAI-werkruimte · Mol en de Kempen" in app
def test_operator_workflows_put_mol_first_and_name_future_projects() -> None:
@@ -16,8 +16,9 @@ def test_workbench_uses_grouped_navigation_and_optional_inspector() -> None:
assert "import './styles/premium.css'" in app
assert "const workspaceNavGroups" in app
assert "['overview', 'data', 'map']" in app
assert "['map', 'data']" in app
assert "['analysis', 'ai']" in app
assert "['overview', 'system']" in app
assert "const [inspectorOpen, setInspectorOpen] = useState(false)" in app
assert "{inspectorOpen ? (" in app
assert 'id="workbench-inspector"' in app
@@ -31,12 +32,12 @@ def test_data_creation_forms_are_progressively_disclosed() -> None:
dataset = read("frontend/src/components/datasets/DatasetPanel.tsx")
css = read("frontend/src/styles/premium.css")
assert '<details className="data-panel-form-block">' in project
assert '<summary>Create project</summary>' in project
assert '<details className="data-panel-form-block technical-management-block">' in project
assert '<summary>Geavanceerd projectbeheer</summary>' in project
assert '<details className="data-panel-form-block">' in area
assert '<summary>Create spatial scope</summary>' in area
assert '<summary>Eigen gebied toevoegen (GeoJSON)</summary>' in area
assert '<details className="dataset-upload-block data-panel-form-block">' in dataset
assert '<summary>Upload source data</summary>' in dataset
assert '<summary>Eigen bronbestand toevoegen</summary>' in dataset
assert "details.data-panel-form-block > summary" in css
assert ".workspace-grid-data > section:nth-child(n)" in css
assert "max-height: calc(100dvh - 10.5rem);" in css
+6 -2
View File
@@ -129,9 +129,12 @@ def test_kempen_scope_operator_is_packaged_and_exposed_in_map_flow() -> None:
assert "py_compile scripts/provision_geographic_scope.py" in readiness
assert "Immutable scope dataset" in (ROOT / "scripts/provision_geographic_scope.py").read_text(encoding="utf-8")
assert "Kempen (28 gemeenten)" in workspace
assert 'aria-label="Regio"' in workspace
assert 'aria-label="Regio"' not in workspace
assert 'aria-label="Ingeladen regiobereik"' in workspace
assert "Gemeente of volledige regio" in workspace
assert "projects={projects}" in app
assert "onSelectProject={selectProject}" in app
map_props = app.split("<MapWorkspace", maxsplit=1)[1].split("/>", maxsplit=1)[0]
assert "onSelectProject={selectProject}" not in map_props
def test_project_switches_reset_scoped_state_and_prefer_the_regional_context() -> None:
@@ -144,5 +147,6 @@ def test_project_switches_reset_scoped_state_and_prefer_the_regional_context() -
assert "resetProjectData()" in selected_project_branch
assert "resetDatasetForProject()" in selected_project_branch
assert "projectDataRequestSequence" in project_workspace
assert "REGIONAL_WORKSPACE_PROJECT_NAME" in project_workspace
assert "vervoerregio|operationele grens" in map_state
assert "datasets.find(isOperationalScopeBoundaryDataset)" in dataset_workflow
@@ -0,0 +1,55 @@
from pathlib import Path
ROOT = Path(__file__).resolve().parents[2]
def read(path: str) -> str:
return (ROOT / path).read_text(encoding="utf-8")
def test_regional_workspace_is_automatic_and_map_has_one_scope_selector() -> None:
project_hook = read("frontend/src/hooks/useProjectWorkspace.ts")
map_workspace = read("frontend/src/components/map/MapWorkspace.tsx")
regional_check = project_hook.index("const regionalProject")
municipality_check = project_hook.index("const municipalityProject")
assert regional_check < municipality_check
assert 'aria-label="Regio"' not in map_workspace
assert 'aria-label="Ingeladen regiobereik"' in map_workspace
assert "Gemeente of volledige regio" in map_workspace
assert 'aria-label="Werkgebied"' in map_workspace
def test_primary_navigation_uses_end_user_language_and_keeps_management_secondary() -> None:
app = read("frontend/src/App.tsx")
for label in ("Kaart", "Bronnen", "Kwaliteit", "Beeldanalyse", "Downloads"):
assert f"label: '{label}'" in app
assert "{ label: 'Beheer', keys: ['overview', 'system'] }" in app
assert 'className="secondary-analysis-disclosure segmentation-disclosure"' in app
def test_technical_projects_and_metadata_are_progressively_disclosed() -> None:
projects = read("frontend/src/components/project/ProjectPanel.tsx")
areas = read("frontend/src/components/project/AreaPanel.tsx")
datasets = read("frontend/src/components/datasets/DatasetPanel.tsx")
assert "TECHNICAL_PROJECT_PATTERN" in projects
assert "technische test- en benchmarkruns" in projects
assert "area-catalog-disclosure" in areas
assert "dataset-technical-details" in datasets
assert "getDatasetDisplayName" in datasets
def test_configured_yolo_and_active_asset_are_selected_without_hiding_limitations() -> None:
hook = read("frontend/src/hooks/useDetectionWorkflow.ts")
lab = read("frontend/src/components/detection/DetectionLab.tsx")
assert "useState('yolo-configured')" in hook
assert "useState(0.15)" in hook
assert "asset.active" in hook
assert "getYoloPreflight" in hook
assert 'aria-label="Status gebouwdetectie"' in lab
assert "resultaten blijven controleplichtig" in lab
assert "Modelkalibratie voor beheerders" in lab
@@ -58,4 +58,4 @@ def test_frontend_wires_selected_area_map_overlay_contract() -> None:
assert "area-fill" in geomap
assert "area-line" in geomap
assert "onSelectMapArea" in area_panel
assert "Show on map" in area_panel
assert "Toon op kaart" in area_panel
@@ -16,9 +16,9 @@ def test_frontend_wires_v1_workbench_status_strip() -> None:
assert "qualityChecks={qualityChecks}" in app
assert "activeLayerFeatureCount={mapFeatureCount}" in app
assert "selectedAreaHasGeometry={Boolean(areaFeatureCollection)}" in app
assert "V1 readiness" in component
assert "Workbench status" in component
assert "Workbench has the core V1 loop populated." in component
assert "Platformstatus" in component
assert "Workbench status:" in component
assert "Kaartwerkruimte is gebruiksklaar" in component
assert "workbench-status-strip" in css
assert "status-tile-ready" in css
@@ -47,7 +47,7 @@ def test_app_still_wires_quality_results_and_export_center() -> None:
assert "<QualityResultsPanel" in app
assert "onRefresh={() => loadQualityChecks()}" in app
assert "Refresh QA/QC results" in quality_panel
assert "Kwaliteitsresultaten vernieuwen" in quality_panel
assert "onClick={onRefresh}" in quality_panel
assert "<ExportCenter" in app
assert "onExportDataset={exportSelectedDatasetGeoJson}" in app
@@ -26,9 +26,9 @@ def test_app_uses_dataset_presentational_components() -> None:
def test_dataset_panel_owns_upload_and_list_markup() -> None:
panel = (ROOT / "frontend" / "src" / "components" / "datasets" / "DatasetPanel.tsx").read_text(encoding="utf-8")
assert "Upload dataset" in panel
assert "Refresh metadata" in panel
assert "Select / details" in panel
assert "Eigen bronbestand toevoegen" in panel
assert "Metadata vernieuwen" in panel
assert "Details en acties" in panel
assert "onLoadDatasetDetails" in panel
assert "onRefreshMetadata" in panel
@@ -38,8 +38,8 @@ def test_quality_results_panel_owns_persisted_quality_check_markup() -> None:
).read_text(encoding="utf-8")
assert "QualityCheckRead" in quality_panel
assert "Refresh QA/QC results" in quality_panel
assert "No persisted QA/QC results yet" in quality_panel
assert "Kwaliteitsresultaten vernieuwen" in quality_panel
assert "Nog geen bewaarde kwaliteitsresultaten" in quality_panel
assert "check.metrics.map" in quality_panel
assert "fetch(" not in quality_panel
assert "api" not in quality_panel.lower()
@@ -19,7 +19,7 @@ def test_data_workspace_panels_use_operator_friendly_cards_and_forms() -> None:
assert "compact-form" in project_panel
assert "entity-card-active" in project_panel
assert "AOI manager" in area_panel
assert "<h2>Gebieden</h2>" in area_panel
assert "compact-form" in area_panel
assert "entity-card-active" in area_panel
assert "dataset-upload-form" in dataset_panel
@@ -9,11 +9,11 @@ def test_quality_panel_uses_workbench_summary_and_cards() -> None:
ROOT / "frontend" / "src" / "components" / "quality" / "QualityResultsPanel.tsx"
).read_text(encoding="utf-8")
assert 'className="quality-results-panel"' in quality_panel
assert "'quality-results-panel quality-results-panel-empty' : 'quality-results-panel'" in quality_panel
assert 'className="quality-summary-grid"' in quality_panel
assert 'className="quality-check-list"' in quality_panel
assert 'className="quality-check-card"' in quality_panel
assert "No persisted QA/QC results yet" in quality_panel
assert "Nog geen bewaarde kwaliteitsresultaten" in quality_panel
assert "check.metrics.map" in quality_panel
assert "fetch(" not in quality_panel
@@ -13,8 +13,8 @@ def test_dataset_panel_exposes_map_and_export_quick_actions() -> None:
assert "dataset-card-active" in panel
assert "onOpenDatasetInMap" in panel
assert "onOpenDatasetExport" in panel
assert "Open in map" in panel
assert "Export / QA" in panel
assert "Open op kaart" in panel
assert "Downloaden" in panel
assert "disabled={!(dataset.dataset_type === 'vector' || dataset.dataset_type === 'geojson')}" in panel
@@ -13,12 +13,12 @@ def test_export_center_surfaces_handoff_readiness_context() -> None:
assert 'className="handoff-readiness-grid"' in export_center
assert 'className="handoff-action-grid"' in export_center
assert 'className="export-type-badge"' in export_center
assert "Latest handoff artifact" in export_center
assert "Project report" in export_center
assert "Detection run" in export_center
assert "Segmentation run" in export_center
assert "selectedDetectionRunId || 'none'" in export_center
assert "selectedSegmentationRunId || 'none'" in export_center
assert "Laatste bestand" in export_center
assert "Leesbaar rapport" in export_center
assert "Gebouwanalyse" in export_center
assert "Segmentatieanalyse" in export_center
assert "selectedDetectionRunId || 'geen'" in export_center
assert "selectedSegmentationRunId || 'geen'" in export_center
def test_export_handoff_polish_has_responsive_styles() -> None:
@@ -11,10 +11,10 @@ def test_dataset_panel_surfaces_role_summary_and_badges() -> None:
assert "roleSummaries" in dataset_panel
assert "dataset-role-summary-grid" in dataset_panel
assert "Selected" in dataset_panel
assert "Reference" in dataset_panel
assert "Candidate" in dataset_panel
assert "Source" in dataset_panel
assert "Geselecteerd" in dataset_panel
assert "Referentie" in dataset_panel
assert "Resultaat" in dataset_panel
assert "Eigen bron" in dataset_panel
assert "dataset-role-badge" in dataset_panel
assert "dataset-role-selected" in dataset_panel
assert "dataset-role-reference" in dataset_panel
@@ -28,9 +28,9 @@ def test_dataset_cards_expose_scan_friendly_source_and_crs_context() -> None:
)
assert "dataset-card-kicker" in dataset_panel
assert "Source: {dataset.source_name ?? dataset.source}" in dataset_panel
assert "Layer: {dataset.reference_layer_name}" in dataset_panel
assert "CRS: {dataset.crs ?? dataset.vector_summary?.crs ?? 'n/a'}" in dataset_panel
assert "Bron: {dataset.source_name ?? dataset.source}" in dataset_panel
assert "Laag: {dataset.reference_layer_name}" in dataset_panel
assert "CRS: {dataset.crs ?? dataset.vector_summary?.crs ?? 'onbekend'}" in dataset_panel
assert "dataset-card-title" in dataset_panel
@@ -11,9 +11,9 @@ def test_dataset_panel_explains_recommended_actions() -> None:
assert "datasetActionHint" in dataset_panel
assert "dataset-action-hint" in dataset_panel
assert "QA reference layer" in dataset_panel
assert "QA candidate layer" in dataset_panel
assert "Open on the map or send to Export / QA." in dataset_panel
assert "Officiële laag voor kaartanalyse en kwaliteitscontrole." in dataset_panel
assert "Bewaard resultaat dat opnieuw op de kaart" in dataset_panel
assert "Ingeladen gegevensbron voor verdere analyse." in dataset_panel
def test_dataset_buttons_have_scan_friendly_action_copy() -> None:
@@ -22,12 +22,12 @@ def test_dataset_buttons_have_scan_friendly_action_copy() -> None:
)
assert "dataset-action-grid" in dataset_panel
assert "Inspect" in dataset_panel
assert "Map" in dataset_panel
assert "Export / QA" in dataset_panel
assert "Bekijken" in dataset_panel
assert "Kaart" in dataset_panel
assert "Downloaden" in dataset_panel
assert "Metadata" in dataset_panel
assert "Vector/GeoJSON only" in dataset_panel
assert "Raster metadata is automatic" in dataset_panel
assert "Enkel vectorlagen" in dataset_panel
assert "disabled={dataset.dataset_type === 'raster'}" in dataset_panel
def test_dataset_action_styles_keep_buttons_dense_and_responsive() -> None:
@@ -23,11 +23,11 @@ def test_quality_panel_surfaces_candidate_reference_handoff_summary() -> None:
).read_text(encoding="utf-8")
assert "quality-handoff-grid" in quality_panel
assert "Candidate layers" in quality_panel
assert "Reference layers" in quality_panel
assert "Latest comparison" in quality_panel
assert "Candidate" in quality_panel
assert "Reference" in quality_panel
assert "Te controleren lagen" in quality_panel
assert "Referentielagen" in quality_panel
assert "Laatste vergelijking" in quality_panel
assert "Te controleren:" in quality_panel
assert "referentie:" in quality_panel
assert "quality-dataset-name" in quality_panel
@@ -28,8 +28,8 @@ def test_quality_panel_renders_metric_evidence_cards_and_raw_metrics() -> None:
assert "quality-metric-grid" in quality_panel
assert "quality-metric-card" in quality_panel
assert "quality-metric-card-critical" in quality_panel
assert "Metric evidence" in quality_panel
assert "Raw metrics" in quality_panel
assert "Gemeten kwaliteit" in quality_panel
assert "Alle meetwaarden" in quality_panel
assert "check.metrics.map" in quality_panel
@@ -17,12 +17,12 @@ def test_quality_panel_adds_result_filters_and_density_limit() -> None:
assert "filteredQualityChecks = useMemo" in quality_panel
assert "visibleQualityChecks = showAllQualityChecks ? filteredQualityChecks : filteredQualityChecks.slice(0, 8)" in quality_panel
assert "quality-history-controls" in quality_panel
assert "Search QA/QC results" in quality_panel
assert "All statuses" in quality_panel
assert "All check types" in quality_panel
assert "Reset view" in quality_panel
assert "Show all QA/QC results" in quality_panel
assert "No QA/QC results match the current filters." in quality_panel
assert "Kwaliteitsresultaten zoeken" in quality_panel
assert "Alle statussen" in quality_panel
assert "Alle types" in quality_panel
assert "Filters wissen" in quality_panel
assert "Alle kwaliteitsresultaten tonen" in quality_panel
assert "Geen kwaliteitsresultaten voldoen aan de filters." in quality_panel
def test_quality_filter_styles_reuse_dense_history_patterns() -> None:
@@ -16,12 +16,12 @@ def test_project_and_area_panels_expose_selected_summary_regions() -> None:
assert "const selectedProject = projects.find" in project_panel
assert 'className="data-selection-summary data-selection-summary-project"' in project_panel
assert 'className="data-panel-form-block"' in project_panel
assert 'className="data-panel-form-block technical-management-block"' in project_panel
assert 'className="data-panel-list-block"' in project_panel
assert "const selectedArea = areas.find" in area_panel
assert 'className="data-selection-summary data-selection-summary-area"' in area_panel
assert 'className="data-panel-form-block"' in area_panel
assert 'className="data-panel-list-block"' in area_panel
assert 'className="data-panel-list-block area-catalog-disclosure"' in area_panel
def test_dataset_panel_separates_selected_upload_and_catalog_regions() -> None:
@@ -11,7 +11,7 @@ def test_quality_results_panel_exposes_structured_surfaces() -> None:
encoding="utf-8"
)
assert 'className="quality-results-panel"' in panel
assert "'quality-results-panel quality-results-panel-empty' : 'quality-results-panel'" in panel
assert 'className="quality-results-shell"' in panel
assert 'className="quality-summary-surface"' in panel
assert 'aria-label="QA/QC result summary"' in panel
@@ -22,6 +22,7 @@ def test_quality_results_panel_exposes_structured_surfaces() -> None:
assert 'className="quality-result-state-stack"' in panel
assert 'className="quality-history-surface"' in panel
assert 'aria-label="QA/QC result history"' in panel
assert 'className="quality-advanced-disclosure"' in panel
def test_quality_results_panel_preserves_existing_refresh_filter_and_history_state() -> None:
@@ -34,8 +35,8 @@ def test_quality_results_panel_preserves_existing_refresh_filter_and_history_sta
assert "qualityTypeFilter" in panel
assert "qualitySearchQuery" in panel
assert "visibleQualityChecks.map" in panel
assert "Show all QA/QC results" in panel
assert "No QA/QC results match the current filters." in panel
assert "Alle kwaliteitsresultaten tonen" in panel
assert "Geen kwaliteitsresultaten voldoen aan de filters." in panel
def test_quality_workspace_density_css_contracts() -> None:
@@ -52,7 +52,7 @@ def test_ai_lab_preserves_existing_detection_and_segmentation_controls() -> None
assert "onLoadResults" in detection
assert "onRunQa" in detection
assert "detectionTileManifestPath" in detection
assert "Detections loaded: {detectionItems.length}" in detection
assert "{detectionItems.length} objecten geladen" in detection
assert "Compare detections to reference" in detection
assert "onRunSegmentation" in segmentation
@@ -20,7 +20,7 @@ def test_export_center_exposes_final_handoff_surfaces() -> None:
assert 'className="export-actions-surface"' in export_center
assert 'aria-label="Export artifact actions"' in export_center
assert 'className="export-state-stack"' in export_center
assert 'className="export-history-surface"' in export_center
assert 'className="export-history-surface export-history-disclosure"' in export_center
assert 'aria-label="Export history"' in export_center
@@ -11,14 +11,14 @@ def test_export_center_groups_latest_handoff_artifacts_by_type() -> None:
assert "latestHandoffArtifacts" in export_center
assert "Latest handoff artifacts" in export_center
assert "Project report" in export_center
assert "Project metadata" in export_center
assert "Dataset GeoJSON" in export_center
assert "Detection GeoJSON" in export_center
assert "Segmentation GeoJSON" in export_center
assert "Leesbaar rapport" in export_center
assert "Werkruimtedata" in export_center
assert "Kaartlaag (GeoJSON)" in export_center
assert "Herkende gebouwen (GeoJSON)" in export_center
assert "Segmentaties (GeoJSON)" in export_center
assert "latest-artifact-grid" in export_center
assert "latest-artifact-card" in export_center
assert "No artifact yet" in export_center
assert "Nog niet gemaakt" in export_center
def test_export_center_latest_artifact_cards_keep_existing_actions() -> None:
@@ -12,14 +12,14 @@ def test_quality_results_panel_exposes_selected_check_drilldown() -> None:
assert "selectedQualityCheckId" in panel
assert "selectedQualityCheck" in panel
assert "QA/QC evidence drilldown" in panel
assert "Selected check" in panel
assert "Candidate layer" in panel
assert "Reference layer" in panel
assert "Analysis run" in panel
assert "Geselecteerde controle" in panel
assert "Te controleren laag" in panel
assert "Referentielaag" in panel
assert "Analyserun" in panel
assert "Job" in panel
assert "Completed" in panel
assert "Inspect latest check" in panel
assert "Inspect check" in panel
assert "Afgerond" in panel
assert "Laatste controle bekijken" in panel
assert "Controle bekijken" in panel
def test_quality_results_panel_surfaces_false_positive_negative_evidence() -> None:
@@ -27,9 +27,9 @@ def test_quality_results_panel_surfaces_false_positive_negative_evidence() -> No
encoding="utf-8"
)
assert "False positive evidence" in panel
assert "False negative evidence" in panel
assert "Map evidence handoff" in panel
assert "Onterecht gevonden" in panel
assert "Gemiste objecten" in panel
assert "Controle op de kaart" in panel
assert "metricByKey(selectedQualityCheck, 'false_positive_count')" in panel
assert "metricByKey(selectedQualityCheck, 'false_negative_count')" in panel
assert "selectedQualityCheck.parameters_json" in panel
@@ -22,8 +22,8 @@ def test_ai_labs_explain_missing_raster_input_before_disabled_runs() -> None:
encoding="utf-8"
)
assert "No raster datasets available for detection." in detection_lab
assert "Upload or select a raster dataset in Data before running object detection." in detection_lab
assert "Geen luchtbeeld beschikbaar in deze werkruimte." in detection_lab
assert "Voeg onder Bronnen een gegeorefereerde GeoTIFF toe." in detection_lab
assert "rasterDatasets.length === 0" in detection_lab
assert "No raster datasets available for segmentation." in segmentation_lab
assert "Upload or select a raster dataset in Data before running segmentation." in segmentation_lab