fix: finish end user language sweep
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:53:56 +02:00
parent 36d6a92825
commit e3d442ad3a
8 changed files with 32 additions and 15 deletions
+1
View File
@@ -15,6 +15,7 @@
- Defaulted Detection Lab to the configured local YOLO asset, active local model profile and measured operating threshold; model quality remains explicitly review-required rather than presented as production-perfect.
- Simplified Quality, Downloads, Status and Beheer around end-user tasks without changing API contracts, migrations, persistence or inference behavior.
- Followed the live browser audit by moving the legacy Mol-only workspace under advanced management, adding friendly regional-boundary dataset names, translating the active model profiles and replacing the empty `waiting` quality status with end-user language.
- Completed the visible-language sweep for the details control, export preview and provider layer names.
## Sprint 192 Regional map state correctness (2026-07-14)
@@ -63,8 +63,12 @@ def test_configured_yolo_and_active_asset_are_selected_without_hiding_limitation
def test_visible_ai_and_quality_labels_are_end_user_facing() -> None:
profiles = read("frontend/src/components/detection/detectionProfiles.ts")
quality = read("frontend/src/components/quality/QualityResultsPanel.tsx")
export_preview = read("frontend/src/components/exports/ExportPreview.tsx")
providers = read("frontend/src/components/providers/ProviderPanel.tsx")
assert "Aanbevolen controleprofiel kleine gebouwen" in profiles
assert "Controleer wel extra op onterecht gevonden objecten" in profiles
assert "qualityStatusLabel" in quality
assert "nog niet uitgevoerd" in quality
assert "Nog geen bestand gekozen." in export_preview
assert "providerLayerLabel" in providers
@@ -46,4 +46,4 @@ def test_export_center_uses_artifact_actions_and_cards() -> None:
assert "onExportSegmentationRun" in export_center
assert "download-only HTML artifact" in export_center
assert 'className="export-preview-panel"' in export_preview
assert "No export preview selected." in export_preview
assert "Nog geen bestand gekozen." in export_preview
@@ -29,5 +29,5 @@ def test_export_preview_component_exposes_summary_and_scroll_shell() -> None:
assert 'className="export-preview-json-shell"' in export_preview
assert 'className="export-preview-json-toolbar"' in export_preview
assert 'className="export-preview-json-body"' in export_preview
assert "Root keys" in export_preview
assert "Preview size" in export_preview
assert "Velden" in export_preview
assert "Grootte" in export_preview
+1
View File
@@ -22,6 +22,7 @@ Live browser follow-up:
- Tower rebuilt the AI-enabled all-in-one image successfully; container health, PostGIS 3.6, required schema objects, Alembic head `202607140001`, frontend, API proxy and icon checks passed.
- The map opened directly on the complete regional workspace with 29 work Areas, no region selector, the full region selected and 466,078 buildings, 88,332 water objects, 84,504 roads and 415,288 parcels available.
- The browser audit found four remaining presentation leaks: the legacy Mol-only project was still prominent, boundary datasets showed filenames, profile names were English and an empty quality status said `waiting`. These were corrected and protected by the now `561`-test suite.
- A final visible-language sweep translated the export preview, details control and provider layer chips; the complete readiness gate remained green with `561 passed`.
Next:
- Extend official population and modern land-use time series from Mol to all 28 municipalities, then expose a guided raster-import and configured-detection run over a drawn map selection.
+1 -1
View File
@@ -755,7 +755,7 @@ function App(): JSX.Element {
aria-expanded={inspectorOpen}
aria-controls="workbench-inspector"
>
{inspectorOpen ? 'Close details' : 'Open details'}
{inspectorOpen ? 'Details sluiten' : 'Details openen'}
</button>
) : null}
</div>
@@ -18,7 +18,7 @@ export function ExportPreview({ content }: ExportPreviewProps): JSX.Element {
? {
rootKeys: Object.keys(content).length,
previewSize: formatBytes(new Blob([previewJson]).size),
rootType: Array.isArray(content) ? 'array' : 'object',
rootType: Array.isArray(content) ? 'lijst' : 'object',
}
: null
@@ -26,30 +26,30 @@ export function ExportPreview({ content }: ExportPreviewProps): JSX.Element {
<section className="export-preview-panel">
<div className="panel-title-row">
<div>
<h2>Export Preview</h2>
<p className="muted">JSON and GeoJSON content preview for the selected export artifact.</p>
<h2>Voorbeeld</h2>
<p className="muted">Bekijk hier de inhoud van een gekozen JSON- of GeoJSON-bestand.</p>
</div>
<span className="count-pill">preview</span>
<span className="count-pill">voorbeeld</span>
</div>
{content ? (
<>
<div className="export-preview-summary" aria-label="Export preview summary">
<div className="export-preview-summary-card">
<span>Root type</span>
<span>Type inhoud</span>
<strong>{previewStats?.rootType}</strong>
</div>
<div className="export-preview-summary-card">
<span>Root keys</span>
<span>Velden</span>
<strong>{previewStats?.rootKeys}</strong>
</div>
<div className="export-preview-summary-card">
<span>Preview size</span>
<span>Grootte</span>
<strong>{previewStats?.previewSize}</strong>
</div>
</div>
<div className="export-preview-json-shell">
<div className="export-preview-json-toolbar">
<span>Stored JSON payload</span>
<span>Bewaarde JSON-inhoud</span>
<span>{previewStats?.previewSize}</span>
</div>
<div className="export-preview-json-body">
@@ -59,8 +59,8 @@ export function ExportPreview({ content }: ExportPreviewProps): JSX.Element {
</>
) : (
<div className="empty-state">
<strong>No export preview selected.</strong>
<p>Use Preview JSON content on a JSON or GeoJSON artifact to inspect the stored payload here.</p>
<strong>Nog geen bestand gekozen.</strong>
<p>Kies bij een JSON- of GeoJSON-download voor Bekijken om de bewaarde inhoud hier te openen.</p>
</div>
)}
</section>
@@ -24,6 +24,17 @@ function authorityLabel(value: string): string {
return labels[value] ?? value
}
function providerLayerLabel(value: string): string {
const labels: Record<string, string> = {
buildings: 'bebouwing',
roads: 'wegen',
parcels: 'percelen',
water: 'water',
landuse: 'landgebruik',
}
return labels[value] ?? value
}
export function ProviderPanel({
providers,
loadingCapabilities,
@@ -94,7 +105,7 @@ export function ProviderPanel({
<div className="provider-layer-list" aria-label={`${provider.provider_name} supported layers`}>
{provider.supported_layers.map((layer) => (
<span className="provider-layer-chip" key={layer}>
{layer}
{providerLayerLabel(layer)}
</span>
))}
</div>