Add Belgium and North Sea coverage foundation
GeoIntel CI / docs-smoke (push) Canceled after 0s
GeoIntel CI / contract-smoke (push) Canceled after 0s

This commit is contained in:
Codex
2026-07-18 01:45:00 +02:00
parent a8fd6e5e9c
commit 1e527bf810
29 changed files with 2524 additions and 10 deletions
+43
View File
@@ -935,6 +935,49 @@ Read simplified job status payload.
## Provider registry
The legacy Sprint 7 provider registry remains the exact
`grb|osm|manual|fixture` import abstraction. National and maritime source
authority is exposed separately so adding official source families cannot
silently change that import contract.
### GET `/api/v1/external/coverage/catalog`
Returns the normalized Belgium and Belgian North Sea theme vocabulary, legal
coverage zones, allowed availability states and audited source contracts.
Every source includes authority, native layers, geometry types, acquisition
mode, source URL, attribution, licence and limitation text.
Allowed result states are exactly:
- `operational`: a matching `ready` Dataset is materialized in the project;
- `partial`: the governed integration exists but matching project data is
absent or incomplete;
- `not_configured`: an audited source has no operational adapter;
- `unsupported`: no audited contract supports the theme in that zone.
### POST `/api/v1/external/coverage/resolve`
Resolves a user-drawn EPSG:4326 bbox against persisted national and maritime
Areas. Cross-region and land/sea selections remain split by zone.
```json
{
"project_id": "uuid",
"bbox": {
"minx": 2.65,
"miny": 51.05,
"maxx": 2.85,
"maxy": 51.20
},
"themes": ["buildings", "surface_water", "bathymetry"]
}
```
The response returns `intersected_zones`, `outside_supported_scope`, one item
per zone/theme combination, matching source names and IDs of actually
materialized Datasets. An empty `themes` list requests the complete normalized
vocabulary. Unknown themes fail with `COVERAGE_THEME_UNSUPPORTED`.
### GET `/api/v1/external/providers`
Returns all configured provider capability descriptors.
+26
View File
@@ -1,5 +1,31 @@
## Autonomous RC program for Belgium and the Belgian North Sea (2026-07-17)
### RC-4 national and maritime coverage foundation
- Added an independent coverage registry so the exact Sprint 7
`grb|osm|manual|fixture` provider contract remains unchanged.
- Added `GET /api/v1/external/coverage/catalog` and
`POST /api/v1/external/coverage/resolve` with canonical envelopes, normalized
themes and explicit project-materialization checks.
- Added `provision_belgium_north_sea_scope.py`. It accepts only the official
NGI AdminVector archive, RBINS marine reporting units and the exact 15-layer
`imsp26` WFS allowlist. It verifies archive/response limits, safe extraction,
layer counts, pagination, geometries and SHA256 evidence.
- Verified live source contracts from the Codex host: all 15 MSP layers were
reachable and returned 101 features in total; the current RBINS reporting
units yielded BPNS, territorial sea, EEZ and continental-shelf geometries.
- The territorial sea is derived only by unioning official 0-1 nm and 1-12 nm
units. EEZ and continental shelf retain the same official offshore geometry
as separate records with different legal-domain provenance.
- Frontend startup now prefers a materialized
`Belgium and North Sea Workbench`; drawn bboxes receive a compact,
zone-split coverage matrix. Existing Mol/Kempen workspaces remain available.
- Local validation passed 986 backend tests, frontend typecheck/build, the
full readiness gate, Alembic head `202607160001`, complete offline migration
SQL and live-smoke shell syntax.
- Tower fetch-only, persistence, live coverage API and browser acceptance are
the remaining RC-4 exit evidence.
- Froze the RC geography as all Belgian land plus the separately labelled
territorial sea, EEZ and continental shelf.
- Retained Mol and the Kempen as validated regression areas instead of the
+36
View File
@@ -719,6 +719,42 @@ the canonical vector persistence path for Mol and Kempen. Additional Flemish
vector themes still require governed regional operators; a catalogue record
alone never makes them operational.
## Belgium and Belgian North Sea scope foundation
The release-candidate workbench uses two distinct registries:
- the fixed Sprint 7 import-provider registry for `grb`, `osm`, `manual` and
`fixture`;
- the national coverage registry for audited source authority and actual
project materialization by theme and zone.
The explicit operator
`scripts/provision_belgium_north_sea_scope.py` downloads the official NGI
AdminVector EPSG:4326 GeoPackage archive, verifies size and archive safety,
requires the territory, maritime zone, region, province and municipality
layers, and retains archive/GeoPackage/artifact checksums. NGI output is
licensed CC BY 4.0 and persists as reference Datasets through
`DatasetService`.
The same operator obtains the RBINS/BMDC
`od_nature:marine_reporting_units_2024` WFS layer. The territorial sea is the
union of official 0-1 nm coastal waters and 1-12 nm territorial waters. The
official offshore-beyond-12-nm geometry is persisted twice only to preserve
the distinct legal semantics of the EEZ water column and continental-shelf
seabed/subsoil. This is explicit provenance-preserving derivation, not
invented geometry.
The legally current Belgian Marine Spatial Plan 2026-2034 is fetched from the
fixed `imsp26` WFS allowlist and retained as one versioned reference Dataset.
No live vessel activity, depth, water volume or other unsupported metric is
inferred from these plan zones.
The coverage resolver reports a theme `operational` only when a matching
`ready` Dataset exists in the selected project. Implemented acquisition
without project materialization is `partial`; Walloon, Brussels, Statbel and
MDK families remain `not_configured` until their own bounded adapters and
source-specific metric contracts are implemented.
## Bathymetry, inland profiles and maritime scope
The official VHA Digital Atlas profile-point layer is the first operational
+25
View File
@@ -369,6 +369,31 @@ Ondersteund:
- GPKG
- WFS-resultaten
### National and maritime coverage contracts
Belgium-wide and maritime reference Datasets use the same Dataset and
VectorFeature entities as every other vector source. No parallel national
schema is introduced.
Required source metadata includes:
```yaml
authority_level: authoritative|official_context|contextual
coverage_zones:
- belgium|flanders|wallonia|brussels
- belgian_north_sea|territorial_sea|exclusive_economic_zone|continental_shelf
source_url: https://...
attribution: text
license_note: text
reference_layer_name: normalized_layer_key
```
EEZ and continental-shelf records may have equal horizontal geometry while
their `legal_domain` differs. They must remain distinct records. A selected
bbox crossing regions or the coast produces zone-specific coverage items;
only metrics with compatible source meaning, unit, time and method may be
merged.
Metadata:
- CRS
+5
View File
@@ -291,6 +291,11 @@ errors.
## RC-4 - Belgium and North Sea coverage foundation
**State: in progress.** The national coverage registry, canonical
catalog/resolve API, explicit NGI/RBINS operator, frontend selection matrix and
focused safety tests are implemented. Local readiness is green. Tower
fetch-only, persistence, live API and browser acceptance remain the phase exit.
### Work
1. Persist NGI authoritative Belgium land and administrative scopes.
+20
View File
@@ -43,8 +43,28 @@ storage/
osm/
sentinel/
dhmv/
operator-data/
geographic-scopes/
belgium-north-sea/
adminvector_4326.zip
adminvector/
adminvector_4326.gpkg
belgium_land_boundary.geojson
belgium_regions.geojson
belgium_provinces.geojson
belgium_municipalities.geojson
ngi_maritime_zone.geojson
marine_legal_scopes.geojson
marine_spatial_plan_2026.geojson
manifest.json
```
The Belgium/North Sea directory is written only by the explicit
`provision_belgium_north_sea_scope.py` operator. The manifest binds every
artifact to SHA256, source URL, edition/validity and feature count. Persistence
still runs through the ordinary Dataset upload API; operator artifacts are
evidence and replay inputs, not an alternate database.
## Upload policy
When a file is uploaded:
+6
View File
@@ -14,6 +14,12 @@ maritieme zones.
- [x] RC-2: liveness/readiness/capabilities fail-closed en waarheidsgetrouw maken.
- [x] RC-2: verweesde jobs en analysis runs na een procesherstart verzoenen.
- [x] RC-3: expliciete rasterkeuze en temporeel compatibele detectie-QA afdwingen.
- [x] RC-4: aparte nationale bron- en dekkingscontracten implementeren zonder
het vaste Sprint 7-providerregister te wijzigen.
- [x] RC-4: expliciete NGI/RBINS-operator en selectiegebonden coverage-API
implementeren en lokaal valideren.
- [ ] RC-4: Tower fetch-only, canonieke persistence en live browseracceptatie
bewijzen.
- [ ] RC-4: nationale basisdekking, Wallonie, Brussel en Belgische Noordzee via
beheerde providers en golden areas operationaliseren.
- [ ] RC-5: secrets/configuratie/uploadlimieten/immutable deploy en rollback