diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e189007..9af01127 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,6 +7,14 @@ # Changelog +## Sprint 76 Export/System mobile visual polish (2026-06-20) + +- Added scan-friendly Provider Capabilities cards with structured status, authority, geometry, query mode and layer chips. +- Tightened mobile export action cards, export history controls and export card headers. +- Added overflow wrapping for long provider limitations, attribution text, export ids and artifact paths. +- Added static regression coverage for Export/System mobile CSS and workflow markup contracts. +- No API contracts, migrations, backend behavior, provider fetching or AI model behavior changed. + ## Sprint 75 AI Labs mobile visual polish (2026-06-20) - Tightened mobile Detection and Segmentation Lab model card, form and result-summary sizing. diff --git a/backend/tests/test_sprint76_export_system_mobile_polish.py b/backend/tests/test_sprint76_export_system_mobile_polish.py new file mode 100644 index 00000000..58e4bf25 --- /dev/null +++ b/backend/tests/test_sprint76_export_system_mobile_polish.py @@ -0,0 +1,41 @@ +from pathlib import Path + + +ROOT = Path(__file__).resolve().parents[2] + + +def test_export_and_system_mobile_density_css_contracts() -> None: + css = (ROOT / "frontend" / "src" / "styles" / "app.css").read_text(encoding="utf-8") + + assert ".system-provider-list" in css + assert ".system-provider-card" in css + assert ".system-provider-grid" in css + assert ".system-provider-card div" in css + assert ".provider-layer-list" in css + assert ".provider-layer-chip" in css + assert ".export-action-grid" in css + assert ".handoff-action-card p" in css + assert ".export-history-controls input" in css + assert ".export-history-controls select" in css + assert ".export-card-header" in css + assert "minmax(7.5rem, 1fr)" in css + assert "overflow-wrap: anywhere;" in css + + +def test_export_and_provider_components_keep_workflow_markup() -> None: + export_center = (ROOT / "frontend" / "src" / "components" / "exports" / "ExportCenter.tsx").read_text( + encoding="utf-8" + ) + provider_panel = (ROOT / "frontend" / "src" / "components" / "providers" / "ProviderPanel.tsx").read_text( + encoding="utf-8" + ) + + assert 'className="export-center"' in export_center + assert "export-action-grid" in export_center + assert "handoff-action-card" in export_center + assert "export-history-controls" in export_center + assert "export-card-header" in export_center + assert "system-provider-list" in provider_panel + assert "system-provider-card" in provider_panel + assert "system-provider-grid" in provider_panel + assert "provider-layer-chip" in provider_panel diff --git a/docs/CODEX_EXECUTION_LOG.md b/docs/CODEX_EXECUTION_LOG.md index f678c621..bed07bfb 100644 --- a/docs/CODEX_EXECUTION_LOG.md +++ b/docs/CODEX_EXECUTION_LOG.md @@ -2824,3 +2824,27 @@ Limitations: Next recommended pass: - Continue with Export/System mobile-density polish, especially export action cards and provider capability lists. + +## Sprint 76 Export/System mobile visual polish (2026-06-20) + +Changed: +- Added scan-friendly Provider Capabilities cards with structured provider header, status badge, authority/configuration/geometry/query mode fields and layer chips. +- Added mobile-density CSS for provider cards, export action cards, export history controls and export card headers. +- Added overflow wrapping for long provider limitations, attribution/license notes, export ids and artifact paths. +- Added `backend/tests/test_sprint76_export_system_mobile_polish.py`. +- Updated `frontend/README.md`, `docs/TODO.md` and `CHANGELOG.md`. + +Tested: +- Red step: `python -m pytest backend/tests/test_sprint76_export_system_mobile_polish.py -q` failed on missing Export/System mobile CSS and provider markup contracts. +- `python -m pytest backend/tests/test_sprint76_export_system_mobile_polish.py backend/tests/test_sprint75_ai_labs_mobile_polish.py backend/tests/test_sprint74_data_map_mobile_polish.py backend/tests/test_sprint31_unraid_template.py backend/tests/test_sprint64_export_handoff_polish.py backend/tests/test_sprint7b_provider_registry.py backend/tests/test_sprint30_workbench_components.py -q` (`27 passed`) +- `cd frontend && npm run typecheck` +- `cd frontend && npm run build` + +Open: +- Run full readiness, redeploy Tower and verify live Export/System mobile polish after deployment. + +Limitations: +- Frontend presentation polish only; no export workflow, provider API, persistence, migration, provider fetching or AI/model changes. + +Next recommended pass: +- Continue with right-side inspector mobile polish, especially long dataset/vector/raster metadata and action groups. diff --git a/docs/TODO.md b/docs/TODO.md index a220e757..9c877786 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -65,6 +65,7 @@ This file now starts with the current implementation status. Older preparation/b - [x] Improve Map workspace layer provenance, empty guidance and selected-feature summary readability. - [x] Add Data/Map mobile visual polish for upload forms, action grids and map toolbar density. - [x] Add AI Labs mobile visual polish for model cards, lab forms and result tables. +- [x] Add Export/System mobile visual polish for export actions and provider capability cards. ## Sprint 8 status diff --git a/frontend/README.md b/frontend/README.md index b2f5cf9f..79eab447 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -8,6 +8,8 @@ Data and Map workspaces include mobile-density CSS for file inputs, dataset acti AI Labs uses the same mobile-density baseline for Detection and Segmentation model cards, run forms, QA/result summaries and scroll-safe result tables. This keeps long model ids, tile paths and artifact paths from widening the workbench on phones. +Exports and System provider capabilities now use compact, mobile-safe cards for handoff actions, artifact filters and provider metadata. Long provider limitations, export ids and artifact paths wrap inside their cards instead of widening the workbench. + ## Scope implemented - API client layer (`src/services/api`) - Project and area list/create flows diff --git a/frontend/src/components/providers/ProviderPanel.tsx b/frontend/src/components/providers/ProviderPanel.tsx index 1872f6d6..b337dacc 100644 --- a/frontend/src/components/providers/ProviderPanel.tsx +++ b/frontend/src/components/providers/ProviderPanel.tsx @@ -14,25 +14,54 @@ export function ProviderPanel({ onRefresh, }: ProviderPanelProps): JSX.Element { return ( -
-

Provider Capabilities

- +
+
+
+

Provider Capabilities

+

Review configured local providers and honest not-configured external sources.

+
+ +
{loadingCapabilities ?

Loading provider capabilities...

: null} {capabilitiesError ?

{capabilitiesError}

: null} {providers.length === 0 && !loadingCapabilities ?

No providers reported by backend

: null} -