Public changelog

geog.ai API Changelog

Every public change to the geog.ai REST API. Versioning follows SemVer on the surface contract: MAJOR for breaking schema or auth changes, MINOR for additive endpoints or response fields, PATCH for fixes and provenance refinements that do not affect existing consumers. The /api/openapi.json spec served by the live API is the authoritative source of truth for the current version; this page is the curated, human-readable companion.

Versioning policy. The URL prefix /v1/ is locked for the entire v1.x line — no breaking changes will land under /v1/. Additive fields on response envelopes are always optional and default-safe for existing clients. Whenever a field is deprecated we advertise it under provenance.deprecations for at least one full minor release before removal. Async-job endpoints, idempotency keys, and the X-Request-Id header all carry stability guarantees identical to the routes themselves.
v1.4.0 RLM telemetry, Phase 2 calibration cycles, derived signals Current 2026-Q2

Added

  • AddGET /v1/admin/rlm/telemetry/daily — daily rollup of RLM (recursive language-model) invocations: budget consumption, slice counts, adapter mix, per-tenant concurrency saturation. Materialised nightly at 02:00 UTC.
  • AddGET /v1/admin/dashboard/{overview,map/markers,sites/{id},jobs/timeline,reviews/queue,usage/rollup} — six dashboard endpoints powering the operator console.
  • AddPOST /v1/admin/calibration/cycles/run and GET /v1/admin/calibration/cycles with per-cycle POST /v1/admin/calibration/cycles/{id}/review — Phase 2 calibration scheduler with human-in-the-loop approval. decision values are approved/rejected.
  • AddPOST /v1/midmen/{route_optimization_audit,compliance_window_check,regime_shift_explainer} — three RLM-backed audit blueprints, each returning a cited envelope identical to incident_postmortem.
  • Addregime_correlation derivation worker — surfaces cross-engine correlation snapshots in provenance.derivations.
  • AddOperator Objective Vector (5-dimensional) on /v1/predict/* envelopes for tenants who opt in.

Updated

  • UpdLM adapter retry & circuit-breaker — transient 429/503 now triggers exponential backoff (3 retries: 0.5 s / 2 s / 8 s); per-tenant breaker opens after 5 consecutive failures and resets after 60 s. Surfaced as degraded:lm_provider_unavailable instead of HTTP 500.
  • UpdTelemetry rollup primary key normalised to (tenant, day, adapter, vertical_id); the synthetic 'all' partition has been retired.
  • UpdCustom-tool admin scope expanded — tenant:admin Bearer keys may now register tools whose owner_tenant_id matches the caller; the platform-admin token retains global scope.
  • UpdIndoor positioning gained wifi_rtt, ble, and uwb source adapters on POST /v1/indoor/*.

Fixed

  • FixJob startup recovery — pending and running rows older than 10× the watchdog timeout are now re-claimed at boot, eliminating stuck async jobs after a server restart.
v1.3.0 Graph traversal & routing Stable 2026-Q1

Added

  • AddPOST /v1/route/shortest and POST /v1/route/influence_spread — graph routing with safe quoting against adversarial network_id / tenant_id / vertical_id inputs.
  • AddPOST /v1/graph/related with full per-table coverage of NODE_TABLES and tenant-predicate enforcement on every entry.
  • AddPOST /v1/reason/recursive — recursive language-model reasoning with citation envelopes.
  • Addwhere_was trajectory interpolation — Hermite (or geodesic-aware) interpolation; response provenance.interpolation records the method.
  • Addpython -m qhp.scripts.import_osm <pbf> — bulk OSM road-network import CLI (county-sized PBF in < 10 minutes).

Updated

  • UpdBearer multi-tenant isolation tightened — tenant-A keys cannot direct-fetch tenant-B entities; traversal silently filters at the SQL layer.
  • Updgeo_rlm_invocations.vertical_id made NOT NULL; routes that omit scope.vertical_id now receive a 422 instead of a silent fallback.
v1.2.0 Admin surface & operational hardening Stable 2025-Q4

Added

  • AddAsync-job control plane — every long-running simulate route returns 202 Accepted with job_id; poll via GET /v1/jobs/{id} or subscribe with a webhook signed by HMAC-SHA-256.
  • AddPer-tenant concurrency caps — tier-1 = 4, pro = 8, scale = 16 in-flight requests; concurrency_saturated_seconds now appears in telemetry.
  • AddIdle-wallclock guard — long LM stalls terminate inside the slice with degraded:budget_terminated:wallclock.
  • AddNightly scheduler — materialize_daily_rollup fires at 02:00 UTC; manual POST /v1/admin/rlm/telemetry/refresh remains available.

Updated

  • UpdGEOG_API_KEYS production enforcement — server now refuses to start in production if no keys are configured. Dev mode unchanged.
  • Upd/api/docs (Swagger UI), /api/redoc (ReDoc), and /api/openapi.json render every Phase-4 and Phase-5 router cleanly with named example payloads.
v1.1.0 Simulation engines Stable 2025-Q3

Added

  • AddPOST /v1/simulate/{plume,flood,rf_coverage,noise,thermal,fire} — six Tier-1 engines with shared response envelope and per-engine UQ bounds.
  • AddUQ suite — bootstrap N=200, ensemble K=20; sync requests return provenance.uq_async_job_id; uq_async=false falls back to N=20.
  • AddBayesian-posterior UQ for engines that declare method=bayesian_posterior — real {lower, upper, method} intervals replace the v1.0 stub.
  • AddEngine analytic gradients — calibration v2 passes them as jac= to scipy.optimize.minimize; objective converges in ≤ 32 iterations (down from 64).
  • AddPOST /v1/optimize/* — engine-aware optimisation (sensor placement, exposure minimisation) reusing the simulation envelope.
v1.0.0 Initial public release — spatial primitives Stable 2025-Q3

Added

  • AddGET /v1/context, GET /v1/context/batch?device_ids= (≤ 100 ids per call), GET /v1/nearby, GET /v1/within, GET /v1/jurisdiction — five spatial primitives backed by PostGIS + H3 indexing.
  • AddPhase 1 schema — five core spatial tables (geo_devices, geo_position_events, geo_jurisdictions, geo_road_networks, geo_indoor_floors) with H3 r-9 cell indexing.
  • AddBearer-token authentication keyed on geog_test_sk_… / geog_live_sk_… prefixes, with per-tenant rate limiting and standardised error envelope.
  • AddStandard response envelope: { ok, data, provenance, degraded } across every route.
  • AddX-Request-Id reflection header on every response for client-side correlation.

Subscribing to a release feed? Watch /api/openapi.json — its info.version field always matches the most recent entry on this page. For breaking-change advance notice, email hello@geog.ai.