feat(scope): make Belgium and North Sea operational default
GeoIntel release gates / Compile, test, contracts and builds (push) Canceled after 0s
GeoIntel release gates / Python and npm vulnerability policy (push) Canceled after 0s
GeoIntel release gates / GIS image, SBOM and container scan (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-22 02:11:48 +02:00
parent 46884cbbc9
commit 0aff8e3b8c
61 changed files with 2499 additions and 194 deletions
+66
View File
@@ -7,6 +7,72 @@
# Changelog
## Unreleased - Post-V1 capability completion (2026-07-19)
- Made `Belgium and North Sea Workbench` the unconditional frontend startup
context, moved the initial MapLibre viewport to national extent and removed
Mol/Kempen defaults from project/area forms and end-user source copy. Mol and
Kempen remain golden regression data only.
- Added bounded official UrbIS Land Cover products for Brussels using the
live-validated `urbisvector:Blocks` WFS layer: total land-cover blocks,
FO/GB forest and park blocks, and WB permanent-water blocks. Persisted
geometries retain source class codes and expose real hectare metrics.
- Restricted the production model-asset catalog to the explicit
`YOLO_MODEL_PATH` file so training/smoke checkpoints no longer pollute the
end-user selector. The Detection Lab now states the local Mol/Kempen
validation scope and explicitly warns that the model is not nationally
validated.
- Implemented real local segmentation inference: `YoloSegmentationAdapter` and
`SamSegmentationAdapter` (ultralytics interface) run over existing raster
tile manifests, georeference mask polygons to EPSG:4326, suppress duplicate
masks by IoU, compute geodesic areas and persist `Segmentation` rows with
local-inference provenance. The segmentation model registry now reports
`yolo-seg-configured` and `sam-configured` dynamically from
`YOLO_SEG_ENABLED`/`YOLO_SEG_MODEL_PATH` and `SAM_ENABLED`/`SAM_MODEL_PATH`.
Everything stays fail-closed: no weights are downloaded automatically and a
missing file or dependency reports an explicit unavailable status.
- Implemented bounded MDK Belgian North Sea bathymetry acquisition
(`POST /datasets/bathymetry/mdk/acquire`): WCS 1.0.0 GetCoverage behind the
existing strict-TLS readiness probe. Acquisition requires explicit
`MDK_BATHYMETRY_ACQUISITION_ENABLED=true`, a coverage id advertised by the
live capabilities document, a bounded EPSG:4326 bbox, GeoTIFF validation via
rasterio and persists LAT vertical-reference provenance. The bathymetry
source registry now reports `acquisition_supported=true` with
`configured=false` until the operator opts in.
- Added the live-validated `urbis_street_axes` product
(`urbisvector:StreetAxes`, INSPIRE_ID identity, LineString geometry) so the
Brussels roads theme becomes operational through the existing bounded UrbIS
WFS engine. The live capabilities advertise no hydrography feature type, so
Brussels surface water intentionally remains `not_configured`.
- Extended `.env.example` with the new segmentation and MDK acquisition
variables and updated `docs/KNOWN_LIMITATIONS.md` and `docs/TODO.md`.
### Functional audit fixes (beyond documented scope)
- Runs can no longer be orphaned in `running`: rejected fixture payloads,
unexpected inference errors and the unreachable model fall-through in both
`DetectionService.run_detection` and `SegmentationService.run_segmentation`
now mark the analysis run and job `failed` before propagating the error, and
`JobService.run_sync_job` marks the job failed on unexpected non-AppError
exceptions as well (`tests/test_run_state_consistency.py`).
- `/api/v1/system/capabilities` no longer hardcodes `sam=false`; it reports
the real configured state of the SAM segmentation capability.
- `POST /exports/geojson` fails closed with `INVALID_EXPORT_REQUEST` instead of
silently returning an empty envelope when no export target matches.
- The segmentation workbench now auto-selects a configured non-fixture
segmentation model when one exists, mirroring the detection workbench.
- Runtime parity: `YOLO_SEG_*`, `SAM_*`, `SEGMENTATION_*` and
`MDK_BATHYMETRY_ACQUISITION_*` are now wired through `docker-compose.yml`,
`docker-compose.unraid.yml`, `deploy/unraid/run-dockerman-container.sh`,
`deploy/unraid/geointel.env.example` and the DockerMan template. Without
this the new segmentation and bathymetry features could never be enabled in
the deployed runtimes. Compose deployments now also reconcile interrupted
runs after a restart (`GEOINTEL_RECONCILE_INTERRUPTED_RUNS_ON_STARTUP=true`),
matching the Unraid runtime. Guarded by
`test_segmentation_and_mdk_acquisition_are_configurable_in_every_runtime`
and `test_compose_reconciles_interrupted_runs_after_restart_like_unraid_runtime`.
## 1.0.0 - Final Belgium and Belgian North Sea release (2026-07-19)
- Fixed rectangle analysis so it materializes and reads all applicable