diff --git a/CHANGELOG.md b/CHANGELOG.md index bc8912f8..766bf5d4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -10,6 +10,7 @@ ## Sprint 175 Detection result scale and false-positive evidence review (2026-07-13) - Bounded Detection Lab table rendering with client-side 25/50/100-row pagination while preserving the complete persisted detection set for MapLibre and QA/QC. +- Compacted source-tile cells to filenames while preserving full persisted paths in tooltips. - Added a strict read-only false-positive evidence audit with role-count drift checks, polygon validation, WGS84 geodesic areas, size buckets, AOI/class/tile summaries and combined review GeoJSON. - Audited the active seven-AOI portfolio: 5,568 false positives among 13,613 candidates, median geometry area 184.5 m2, and 25.8% below 100 m2; Turnhout, Herentals and Geel carry the largest review volumes. - Recorded that existing QA evidence has no per-detection confidence values; the audit reports zero confidence coverage and does not infer scores from the run threshold. diff --git a/backend/tests/test_sprint175_detection_review_hardening.py b/backend/tests/test_sprint175_detection_review_hardening.py index 933e3536..6680e11c 100644 --- a/backend/tests/test_sprint175_detection_review_hardening.py +++ b/backend/tests/test_sprint175_detection_review_hardening.py @@ -102,7 +102,10 @@ def test_detection_results_table_uses_bounded_local_pagination() -> None: assert "Detection result pagination" in lab assert "Previous detection results page" in lab assert "Next detection results page" in lab + assert "formatSourceTilePath(detection.source_tile_path)" in lab + assert 'title={detection.source_tile_path ?? undefined}' in lab assert "pagination-toolbar" in styles + assert ".source-tile-cell" in styles assert "detectionItems.map((detection)" not in lab diff --git a/docs/CODEX_EXECUTION_LOG.md b/docs/CODEX_EXECUTION_LOG.md index 851010e5..c5d51ab0 100644 --- a/docs/CODEX_EXECUTION_LOG.md +++ b/docs/CODEX_EXECUTION_LOG.md @@ -7145,6 +7145,7 @@ Open: - Confirmed that Detection Lab rendered every persisted detection row at once; Westerlo alone produced 1,172 body rows in the browser. - Added local 25/50/100-row pagination with a default of 50 rows, bounded page controls and automatic page-one reset after run/filter/result changes. +- Live visual inspection exposed tall rows caused by full container paths; source-tile cells now show the filename and retain the full persisted path as a tooltip. - Kept the full persisted collection unchanged for the existing MapLibre GeoJSON overlay and detection QA/QC. No endpoint, response envelope or persistence contract changed. ## Persisted false-positive evidence @@ -7167,7 +7168,7 @@ Open: - `python -m pytest`: 475 passed. - `python -m ruff check` for the new audit/test modules: passed. - `npm run typecheck`: passed. -- `npm run build`: passed; app bundle `216.83 kB`, MapLibre bundle `801.82 kB` before gzip. +- `npm run build`: passed; app bundle `217.00 kB`, MapLibre bundle `801.82 kB` before gzip. - `bash scripts/run_readiness_check.sh`: passed with 475 tests and all release-critical syntax gates. - `python -m alembic heads`: one head, `202606120900`. - `python -m alembic upgrade head --sql`: complete migration chain rendered successfully. diff --git a/frontend/README.md b/frontend/README.md index 5ad1a6b5..25ca019b 100644 --- a/frontend/README.md +++ b/frontend/README.md @@ -160,6 +160,7 @@ AI Lab run controls explicitly explain when no raster dataset is available, inst - Detection Lab keeps the complete persisted detection collection available to the existing MapLibre overlay and QA/QC flows. - The results table renders 50 rows by default and provides 25/50/100 row sizes plus previous/next controls. This bounds DOM work for dense AOIs without discarding or resampling detections. - Selecting another run, changing a class/confidence filter or loading a new result collection resets the visible table to page one. +- Source tiles display their filename for compact scanning while retaining the complete persisted path in a hover tooltip. - Pagination is intentionally client-side over the canonical persisted response; detection API contracts and GeoJSON output are unchanged. ## Sprint 15 additions diff --git a/frontend/src/components/detection/DetectionLab.tsx b/frontend/src/components/detection/DetectionLab.tsx index 9c31b581..db3d1886 100644 --- a/frontend/src/components/detection/DetectionLab.tsx +++ b/frontend/src/components/detection/DetectionLab.tsx @@ -820,7 +820,9 @@ export function DetectionLab({