Initial public release
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
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
This commit is contained in:
@@ -0,0 +1,152 @@
|
||||
# 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.
|
||||
Reference in New Issue
Block a user