Files
geointel/docs/KNOWN_LIMITATIONS.md
T
Jens faeb58ef6d
GeoIntel release gates / Compile, test, contracts and builds (push) Successful in 1m49s
GeoIntel release gates / Python and npm vulnerability policy (push) Successful in 21s
GeoIntel release gates / Production AI image, SBOM and container scan (push) Successful in 5m39s
GeoIntel release gates / Deploy exact gated revision to Unraid (push) Failing after 58m43s
Initial public release
2026-08-31 21:56:53 +02:00

9.2 KiB

GeoIntel v1.0.0 Known Limitations

Release position

These limitations are explicit, bounded and non-deceptive. None is a hidden CRITICAL or HIGH release defect. Coverage and capability responses remain the runtime source of truth.

  • The access gate intentionally supports one environment-configured operator account. There is no registration, password-recovery email, organisation management or multi-user database. Optional guest access is a short-lived, read-only, demo-project-scoped role; it is not tenant isolation and must be used only on a dedicated demo instance without private data. Operator password rotation remains a configuration action followed by a restart.

Source coverage

  • National administrative land and maritime scope is operational from persisted NGI/RBINS editions. Detailed themes are federated by jurisdiction; an operational Flemish source does not imply equivalent Walloon or Brussels coverage.
  • Land cover remains source-correct by jurisdiction: WALOUS 2018/2020/2023 covers Wallonia, Flemish products cover Flanders and UrbIS Land Cover covers Brussels. GeoIntel does not relabel WALOUS as a national source or silently merge incompatible regional legends.
  • Buildings, population, terrain, imagery, nature, agriculture, soil and flood themes may report partial, not_configured or unsupported outside the materialized source partitions. The UI and exports retain that state.
  • Belgian North Sea planning/reporting boundaries are materialized. Bounded strict-TLS MDK WCS acquisition is implemented but stays disabled until the operator enables MDK_BATHYMETRY_ACQUISITION_ENABLED with a coverage id that the live readiness probe advertises. Until then the theme reports not_configured; VHA profile observations are not presented as a seabed model or water volume.
  • Official endpoints can be temporarily unavailable. Bounded acquisition fails closed and never substitutes fixture or fabricated production data.

Selection semantics

  • Coverage resolution currently accepts an EPSG:4326 rectangle. A rectangle around an irregular municipality or region can include land across a border or adjacent sea, so outside_supported_scope can be true even when the underlying named Area itself is wholly valid.

  • Cross-region and land/sea selections stay split by legal/source zone. Semantically incompatible metrics are not merged.

  • Raster analysis is cell-based. A selection smaller than one source cell is answered over the cells it touches, so the analysed area is larger than the drawn area; the response says so rather than returning zeros. Sub-cell precision is not available from a raster source.

  • The object count in a vector selection counts whole features that touch the selection, while area and length metrics clip to it. The response reports how many features the edge cuts; it does not attempt a fractional object count.

  • Flood-hazard percentages are shares of the modelled area. Where the VMM model does not cover the selection, that is reported as missing coverage and never as an absence of risk.

  • Change detection compares whole objects and does not clip them to the selection, so a footprint crossing the selection edge is compared in full. That is deliberate: clipping one snapshot and not the other would report the selection edge itself as a change. The count of such objects is reported.

  • The change-detection GeoJSON is capped by preview_limit (changes first). The counts always describe the whole selection; the map does not.

  • An export states its own completeness in geointel_provenance. A capped export is still a valid, usable file — it simply no longer implies it holds everything the selection contains.

  • Bounded acquisition refuses any private, loopback or link-local destination, resolving the host first so a DNS name cannot hide one. Two redirect policies apply: the paged OGC feature readers refuse to follow a redirect at all, because a page URL they built themselves should be answered by that URL; the other readers allow a redirect within the configured origin, since providers do version their endpoints. A refused redirect is never requested. An official endpoint that legitimately moves to a new host therefore fails closed until the operator updates the configured URL, which is the intended trade: bytes from an unexpected host must never be persisted under an official provenance.

  • A paged reader stops when the provider stops making progress: a repeated page URL, a repeated page body, or a record already collected all fail the acquisition, and every reader has a page budget. An ArcGIS layer that lacks supportsPagination accepts resultOffset and ignores it, which otherwise yields a dataset holding several copies of page one while matching the announced record count exactly. Failing is deliberate: a provider that cannot page is a provider whose count proves nothing, so its data cannot carry an official provenance. A duplicate record arriving across two genuinely different pages is kept once instead, since a cursor over a changing table can produce that legitimately.

  • The operator profiles in Detection Lab publish figures from historical evaluations, and each names the measurement it came from. Their background numbers are not comparable across profiles: the two showing zero were checked against a strict pure-empty gate of three samples, while the conservative profile's 55 comes from a nine-sample hard-negative matrix that also recorded 198 background detections in total. None of the three has an independent hold-out.

Historical analysis

  • Historical comparison requires compatible source editions, units, coverage and observation periods. Sources without a governed series correctly return no comparable time series.
  • The RC10 storage audit reports 224 unavailable historical manifest intermediates from prior operator runs. There are zero missing current database artifact references; the historical paths remain visible as provenance warnings and are protected from cleanup inference.

AI

  • The configured local YOLO model is opt-in, building-focused and bounded by its documented operator evidence. It is not claimed to be an optimally trained general model for all Belgian objects or themes. The capability API exposes this as nationally_validated=false, validated_regions and an explicit validation scope; operator review remains required.
  • PyTorch and Ultralytics are present only in the AI image. No model weights auto-download. A missing local model reports unavailable.
  • Local YOLO-seg and SAM segmentation are implemented through the ultralytics interface but stay not_configured until the operator points YOLO_SEG_MODEL_PATH/SAM_MODEL_PATH to existing local weights and enables them explicitly. GeoIntel never downloads segmentation weights automatically; fixture segmentation remains explicit-only.
  • The training gate and the workbench measure different things, deliberately. scripts/evaluate_belgium_building_candidate.py scores the model on frozen post-processing over its protected test set; the workbench scores the whole production pipeline, which additionally clips to the persisted inference coverage and drops boxes truncated by an interior tile edge. A promoted candidate will therefore not reproduce its gate F1 exactly in the workbench. What must match is the post-processing: YOLO_CONTAINMENT_NMS_THRESHOLD and YOLO_DUPLICATE_IOU_THRESHOLD are recorded with every run, and two runs that used different values are reported as not comparable.
  • Detection QA reports both a strict footprint IoU and an envelope diagnostic. For an axis-aligned box detector the strict figure has a ceiling below 1 on rotated or non-rectangular buildings; the response states which geometry mode applies rather than silently attributing that gap to detection quality.
  • Segmentation inference still predicts one tile per call. Batching is implemented for detection only, because the SAM adapter is prompt-driven and does not share the detector's batch semantics.
  • Tile-edge truncated boxes are dropped in favour of the overlapping neighbour's complete view. On a manifest generated with overlap=0 there is no such neighbour, so an object on a seam is lost rather than duplicated. Generate tiles with an overlap larger than the biggest expected object.

Operations

  • Detection and segmentation runs can be queued through POST /detection/run-async and executed by the in-process analysis worker, so tiled GPU inference no longer blocks an HTTP request. This is a job table in PostgreSQL polled by the API process, not a distributed durable queue: there is no cross-host distribution and no automatic retry. The synchronous POST /detection/run remains available for small runs. Interrupted work is marked failed on restart and must be retried explicitly.
  • Other long GIS work still uses the synchronous job abstraction.
  • GeoIntel remains a controlled single-operator product. The optional guest demo adds bounded presentation access only; multi-user authorization and tenant isolation remain outside the product scope.
  • Cleanup remains manual, dry-run-first and confirmation-gated. No automatic retention schedule is installed.