Commit Graph
809 Commits
Author SHA1 Message Date
JensandClaude Opus 5 dd87a62e8f report what an area selection actually measured
Four ways a selection produced a confident number about a different area than
the operator drew:

Flood hazard divided the inundated cells by every cell in the drawn rectangle,
including cells the VMM raster does not model at all. A selection reaching
past the modelled extent therefore reported a diluted risk share, turning
missing data into an implied absence of risk. Terrain, bathymetry and thematic
raster already divided by valid cells; flood hazard was the outlier. It now
reports the three populations separately, states model coverage next to the
drawn area, and returns a null fraction rather than a zero when nothing was
modelled.

geometry_mask selects a cell when its centre falls inside the geometry, so a
rectangle smaller than one cell — or one landing between four centres —
selected nothing and the analysis returned zeros indistinguishable on screen
from "we looked and there is nothing here". On a 100 m population raster a
40 m rectangle over a city block reported no inhabitants. Selection now falls
back to the touched cells and says that it did, since the answer then covers
more ground than was requested. rasterio.mask applies the same centre rule
when cropping, so that call is widened too; the cells that count are still
decided by the centre rule wherever it selects anything.

The object count treated any feature touching the selection as whole, while
intersection_area clipped it — two headline numbers on one panel describing
different populations. The count stays whole-feature, which is what "objecten"
means to an operator, but now reports how many the edge cuts and is marked an
estimate when it does. The area_weighted_sum branch reuses that same count
instead of issuing its own near-identical query.

Partitioned selection de-duplicated the count on source_feature_id but
returned the raw rows, so a building on a municipal boundary was counted once
and drawn twice.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 14:33:19 +02:00
JensandClaude Opus 5 08188005bd correct the tiled inference chain and move runs off the request thread
Tile handling produced results that were wrong before any model quality
question arose:

- orthophoto tiles reached the model through PIL convert("RGB"), which
  truncates the high byte of a 16-bit product and treats a 4-band RGB+NIR
  tile's infrared channel as colour. Tiles are now read with rasterio, the
  visible bands are chosen explicitly, and values are percentile-stretched
  across all three bands together so hue is preserved;
- an object wider than the tile overlap was truncated by both tiles into two
  boxes that barely intersect, so IoU suppression kept both: two false
  positives and one missed footprint per seam building. Suppression now also
  compares overlap against the smaller box, and boxes cut by an interior tile
  edge are dropped in favour of the neighbouring tile's complete view;
- georeferencing fell back to an assumed EPSG:4326 when a manifest carried no
  CRS, producing geometry that renders plausibly in the wrong place. QA
  already refused such a tile; inference now fails closed too.

Segmentation QA scored candidates against every reference feature in the
dataset, so every building outside the inferred tiles counted as a false
negative. It now applies the same persisted tile coverage that detection QA
has always used, including the indexed ST_Intersects prefilter.

Duplicate suppression uses an STRtree instead of the O(n^2) scan, tiles are
predicted in batches of YOLO_BATCH_SIZE (a setting that existed but was never
read), and detection/segmentation runs can be queued through /run-async for a
polling background worker rather than holding an HTTP worker thread for
minutes of GPU work.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 14:32:44 +02:00
JensandClaude Opus 5 2b968b74cf make QA scoring reproducible and threshold-independent
The greedy IoU matcher gave a reference to whichever candidate was offered
first. Row order decided that, and every detection in a run shares one
transaction timestamp, so ordering by created_at left the assignment
undefined: the same QA run over the same data produced different mean IoU,
and the geometry shown to a reviewer as a false positive could be the better
of two detections. Candidates are now ranked by confidence with feature
identity as tiebreaker, which is also the COCO/PASCAL rule.

A single precision/recall/F1 triple describes one operating point, so two
models cannot be compared from it: a conservatively calibrated model looks
worse at a low confidence cut and better at a high one without detecting
anything differently. DetectionMetricsService adds the full curve, average
precision and the threshold where F1 actually peaks.

Also:
- report the population the metrics were computed over, so
  matches + false_positives equals candidate_feature_count even under an
  area filter; raw dataset totals move to the _raw fields;
- state whether candidates are axis-aligned boxes or footprint polygons.
  A box can never reach IoU 1 against a rotated building, so the strict
  score has a ceiling that has nothing to do with detection quality.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-22 14:31:21 +02:00
Jens 918ee240d5 fix dark illustration controls
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 39s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 28s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m41s
2026-08-21 22:51:18 +02:00
Jens d2494417be fix workbench illustration contrast
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 23s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 21s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m48s
2026-08-21 22:48:07 +02:00
Jens ae080a7b23 fix mobile navigation placement
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 22s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 22s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 1m44s
2026-08-21 22:40:35 +02:00
Jens c20e718086 refine responsive workbench gui
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 22s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 24s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 2m10s
2026-08-21 22:35:17 +02:00
Jens 178892fc66 add synchronized dual-display workbench
GeoIntel release gates / Compile, test, contracts and builds (push) Failing after 31s
GeoIntel release gates / Python and npm vulnerability policy (push) Failing after 1m2s
GeoIntel release gates / GIS image, SBOM and container scan (push) Failing after 9m48s
2026-08-21 21:50:40 +02:00
Jens f085891630 fix(security): add secret-scan step to CI (both .gitea and .github variants)
Had a real dependency/container-image Trivy scan but no secret scan.
Adds trufflehog (Marketplace Action) as the first step after checkout
in both the .gitea/workflows/ and .github/workflows/ copies of this
workflow (kept in sync as platform-specific variable-syntax variants of
the same pipeline) - the last gap for this repo to count as
fully-authored.
2026-08-16 14:55:37 +02:00
Jens 4b0cab3ce5 make building results authority-first after V74 evaluation
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
2026-08-10 04:44:29 +02:00
Jens 98188e0a44 evaluate fresh Flemish remediation training
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
2026-08-10 03:47:51 +02:00
Jens b068a5e065 evaluate models on fresh regional calibration AOIs
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
2026-08-09 22:36:27 +02:00
Jens 116b8e291e block checkpoint evaluation on ancestral exposure
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
2026-08-09 22:10:50 +02:00
Jens fd45f37a38 block training-seen checkpoint evaluation
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
2026-08-09 21:01:12 +02:00
Jens 48084799c9 correct overlapping checkpoint evaluation
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
2026-08-09 20:41:54 +02:00
Jens 2de438b9cc derive cleaner min-4px YOLO corpus
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
2026-08-09 19:51:17 +02:00
Jens 736e773fb8 audit YOLO geometry and overlapping validation rows
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
2026-08-09 19:36:15 +02:00
Jens fc18e72c7f highlight audited YOLO label relationships
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
2026-08-09 19:12:04 +02:00
Jens 72b2cdaae4 audit nested YOLO labels without destructive rewrites
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
2026-08-09 18:41:29 +02:00
Jens 7e07fe8486 expand AI-assisted review to full building corpus
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
2026-08-09 18:37:08 +02:00
Jens f9a466b221 record explicit AI-assisted AOI review ledger
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
2026-08-09 15:28:04 +02:00
Jens 182e72e46d record blocked legacy model provenance migration
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
2026-08-09 14:57:33 +02:00
Jens 30f6f707c9 audit building checkpoints and preserve production gate
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
2026-08-09 14:31:43 +02:00
Jens 7f90f9dde4 Record governed visual review and GPU training decision
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
2026-08-09 12:01:17 +02:00
Jens 0209167cfd fix(results): gate operational AI exports on QA
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
2026-08-09 11:31:51 +02:00
Jens b76cd1837b fix(ai): bind model scope to immutable geometry
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
2026-08-09 10:54:52 +02:00
Jens f41392a415 docs(accuracy): publish phase 4 benchmark evidence
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
2026-08-02 05:10:05 +02:00
Jens 70fb4b94e5 fix(accuracy): stabilize phase 4 evidence fingerprint 2026-08-02 04:53:16 +02:00
Jens ee1982eff2 fix(accuracy): close phase 4 evidence bypasses 2026-08-02 04:29:10 +02:00
Jens bd2fd9780f feat(accuracy): build hardened phase 4 evaluation harness 2026-08-02 02:43:41 +02:00
Jens 7b92e29e49 feat(accuracy): complete phase 3 data scan and quarantine 2026-08-02 01:06:35 +02:00
Jens 41f8a54236 docs(accuracy): retain phase 2 provenance evidence 2026-08-01 23:46:37 +02:00
Jens 5b3c17b494 feat(provenance): govern source snapshots and data inputs 2026-08-01 23:46:17 +02:00
Jens cebeb5f3b4 audit: seal accuracy phase 1 evidence 2026-08-01 19:02:24 +02:00
Jens 3d442ef43f audit: establish accuracy phase 1 baseline 2026-08-01 18:57:38 +02:00
Jens 0c019bb22f Record scoped demo production acceptance
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
2026-08-01 16:57:48 +02:00
Jens 9e582f2921 Align AI image packaging with PyTorch
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
2026-08-01 16:41:53 +02:00
Jens 24dec16744 Pin Tower-compatible CUDA runtime
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
2026-08-01 16:06:15 +02:00
Jens dfcc11b0d5 Expand scoped demo analysis access
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
2026-08-01 16:00:13 +02:00
Jens 96db4c966d Overhaul GeoIntel model selection and map UX 2026-08-01 15:18:06 +02:00
Jens ce3cd20356 Document map workspace live acceptance
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
2026-08-01 14:28:33 +02:00
Jens e8673658ac Keep mobile result toggle clickable
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
2026-08-01 14:26:29 +02:00
Jens 07716bc1fb Keep mobile result drawer accessible
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
2026-08-01 14:18:55 +02:00
Jens 5b50c2337b Polish map result drawer contrast
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
2026-08-01 14:11:22 +02:00
Jens 6c1c2b52b6 Require explicit map analysis selection
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
2026-08-01 14:05:42 +02:00
Jens be38e9a99f Correct production operator username guidance
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
2026-08-01 13:35:55 +02:00
Jens d1356aeed9 Record live analysis deployment acceptance
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
2026-08-01 13:08:51 +02:00
Jens b18e8460da Keep live analysis status clear on mobile maps
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
2026-08-01 13:03:42 +02:00
Jens d7752cbb96 Connect live analysis journey to map workflow
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
2026-08-01 12:42:01 +02:00
Jens 45fac06935 Refresh README and production screenshots
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
2026-07-30 12:38:04 +02:00