Harden detection result review
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-13 13:31:43 +02:00
parent 6fe1bbd946
commit 4455e242c6
12 changed files with 795 additions and 22 deletions
+38
View File
@@ -7138,3 +7138,41 @@ Open:
## Next recommended pass
- After redeploy, verify the active model SHA, local model-load preflight, live PostGIS migration smoke and browser profile selection. Then review false-positive evidence and the remaining 5,838 persistent misses before any further training.
# Sprint 175 - Detection result scale and false-positive evidence review
## UI hardening
- 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.
- 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
- Added `scripts/audit_detection_false_positive_evidence.py` as a read-only evidence consumer.
- The audit validates FeatureCollection/polygon geometry, compares declared portfolio role counts with actual evidence, computes WGS84 geodesic areas, preserves original feature provenance and emits combined `false_positives.geojson`.
- Source tile summaries are qualified by AOI because `tile_index` is local to each raster manifest.
- The active fixed-threshold seven-AOI portfolio produced:
- 5,568 false positives among 13,613 candidate detections (`0.4090` false-positive share);
- median false-positive geometry area `184.5 m2`, p90 `607.7 m2`;
- 52 below 25 m2, 1,382 between 25-100 m2, 3,412 between 100-500 m2 and 722 at or above 500 m2;
- largest AOI review volumes: Turnhout `1,102`, Herentals `917`, Geel `913`;
- largest AOI-qualified tile hotspot: `turnhout:0` with 236 false positives.
- Existing persisted QA evidence carries run threshold and tile index but no per-detection confidence. The audit reports confidence coverage `0/5,568` and does not invent confidence statistics.
- Added focused regression coverage, readiness compilation and all-in-one image inclusion. No training, inference, provider fetch, model download or activation occurred.
## Local validation
- `python -m compileall backend/app`: passed.
- `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.
- `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.
- Local `docker compose config` could not run because Docker CLI is not installed on the Windows host; live image/PostGIS validation is delegated to the Docker-enabled Tower deployment.
## Next recommended pass
- Redeploy and verify bounded table rendering against the live 1,172-detection Westerlo run. Then visually classify a stratified sample from Turnhout, Herentals and Geel before deciding whether any confirmed false positives belong in a new hard-negative corpus.