1.3.0 (2026-08-25)
- chemistry: add manifest-status command (008a67e)
- chemistry: report which legacy table a result came from (67b522c)
- chemistry: serve legacy water chemistry over REST (dcb0cb1)
- chemistry: serve legacy water chemistry over REST (97d7f9f)
- data-migrations: publish existing project_areas (70c688f)
- geothermal: add /thing/geothermal-well endpoints (c60faf8)
- geothermal: add /thing/geothermal-well endpoints (83e6604)
- geothermal: free-text search on the well list endpoint (7e0a259)
- geothermal: free-text search on the well list endpoint (e5748a5)
- geothermal: normalize OGC view temperatures to Celsius (c6cfb7e)
- geothermal: normalize OGC view temperatures to Celsius (013fd75)
- gis: generate shareable QGIS and ArcGIS Pro artifacts (04fafce)
- gis: serve the artifact catalogue as JSON for frontend clients (3aa6611)
- ingestion: add automated ingestion pipeline foundations (055b51e)
- ingestion: add raw-zone infrastructure and database connectivity (475841d)
- ingestion: add the Diver-HUB client and correct the source mapping (e01fd8c)
- ingestion: add the shared backfill primitives (279ff6e)
- ingestion: add the shared backfill primitives (6d1ced3)
- ingestion: add the transducer unique constraint and upsert loader (6f3232d)
- ingestion: add the transducer unique constraint and upsert loader (31e0644)
- ingestion: add the Van Essen domain rules and adapter (34c4b1f)
- ingestion: add the Van Essen domain rules and adapter (91f4504)
- ingestion: derive the watermark from Postgres (87b8e9c)
- ingestion: derive the watermark from Postgres (a0af312)
- ingestion: land San Acacia locations and readings in the raw zone (6c9ab70)
- ingestion: reconcile San Acacia points against Ocotillo wells (fecbae8)
- ingestion: reconcile San Acacia points against Ocotillo wells (c20e2e3)
- ingestion: resolve the datum enum and the source unit (d10b2b4)
- ingestion: scaffold the automated_ingestion Dagster code location (0a2109e)
- ingestion: schedule the San Acacia ingest weekly (8c02977)
- ingestion: schedule the San Acacia ingest weekly (e4b1880)
- ingestion: wire the loader end to end (3e38614)
- ingestion: wire the loader end to end (113fdd6)
- lexicon: add new organizations to lexicon (b30bea8)
- lexicon: add organization and sort organization category alphabetically (1057c86)
- lexicon: add organization and sort organization category alphabetically (21090b5)
- ogc: add authenticated internal OGC mount (BDMS-985 A11) (ce45b91)
- ogc: add public data disclaimer page (72f26a5)
- ogc: add the field-description source of truth (832b659)
- ogc: carry field descriptions onto /queryables (1d41b56)
- ogc: document EDR parameters and cover the lot with tests (ac0513d)
- ogc: expose last_observation_date on the Group A layers (7aa1746)
- ogc: filter ogc_* views to public records (dbc760b)
- ogc: make /ogcapi-internal usable from ArcGIS Pro and QGIS (cfdf146)
- ogc: make /ogcapi-internal usable from ArcGIS Pro and QGIS (4c0099e)
- ogc: mirror EDR views in internal OGC mount (cc5f72c)
- ogc: ogc A2 replace server metadata placeholders (BDMS-972) (fd4c446)
- ogc: populate the schema view's Values column (9fc6966)
- ogc: publish a well water-column layer (1a9361a)
- ogc: publish a well water-column layer (8a0c3ce)
- ogc: replace server metadata placeholders (93206ab)
- ogc: serve field descriptions from /schema (f6af982)
- scripts: seed the test DB with real NMA legacy chemistry (8e55d1d)
- transducer: add data_maturity to observations (09926b2)
- transducer: add data_maturity to observations (9dff7fb)
- transducer: backfill data_maturity on acoustic (Wellntel) observations (60ffcf4)
- transducer: backfill data_maturity on acoustic observations (7a3915f)
- transducer: publish and range-delete for corrected hydrographs (cfd9243)
- transducer: publish and range-delete for corrected hydrographs (63bf502)
- api/asset: update access from admin to editor (c73d866)
- build: package data_migrations with the app (32c6462)
- chemistry-ingest: kas-fix-chemistry-ingest-manifest (166f3d8)
- chemistry: reject rows with no SampleNumber (d48c60b)
- chemistry: restore the return in manifest_overview (1a9f30c)
- chemistry: restore the return in manifest_overview (6578752)
- chemistry: scope manifest per database (09562ff)
- ci: assert the heartbeat run succeeded (f95ad29)
- correct water_wells collection name in README examples and Added time_field(BDMS-973) (#823) (395a63c)
- db: repair EDR water views skipped by a stamped revision (0cc0d93)
- db: repair EDR water views skipped by a stamped revision (e448741)
- drop support for Python 3.7-3.9 (<a (b779661)
- edr: expose thing_type and materialize the chemistry coverages (aac3d87)
- edr: implement pygeoapi's instance contract (02f0fe5)
- edr: source water-chemistry EDR from the legacy NMA tables (ad37f78)
- edr: source water-chemistry EDR from the legacy NMA tables (8863430)
- expand actively_monitored_wells to include wells from all groups(BDMS-974/1178) (#866) (550fc18)
- gis: document the content type the artifact routes actually send (70b21b8)
- ingestion: do not match on external ids by default (d102cb7)
- ingestion: do not overwrite approved observations by default (b522052)
- ingestion: do not overwrite approved observations by default (5a50381)
- ingestion: grant bucket read, and name the pipeline after the bucket (b127f52)
- ingestion: grant bucket read, and name the pipeline after the bucket (c390073)
- ingestion: import ThingIdLink from where it actually lives (50963f4)
- ingestion: install the repository into the Dagster+ image (619cdf3)
- ingestion: install the repository into the Dagster+ image (7795959)
- ingestion: make db and domain importable in the deployed image (a425954)
- ingestion: make the IAM database path internally consistent (f246d61)
- ingestion: make the role grants runnable and drop the CREATE ROLE (0bd2213)
- ingestion: make the role grants runnable and drop the CREATE ROLE (33b541c)
- ingestion: raise the ingestion floor to 2024 (ac7b5e8)
- ingestion: reject a bare Cloud SQL instance name (a178f90)
- ingestion: repair two CI failures the first PR run exposed (fd6e869)
- ingestion: report the import environment from the heartbeat asset (5ccb0d6)
- ingestion: set code location env vars at a scope that reaches the container (773de45)
- ingestion: set code location env vars at a scope that reaches the container (affa35c)
- ingestion: set PYTHONPATH and report the import environment (1df7d8c)
- ingestion: stop duplicate instants reaching one INSERT (ef38ef2)
- ingestion: stop duplicate instants reaching one INSERT (1405ce9)
- ingestion: supply GCP credentials in a runtime that has none (8c1c32d)
- ingestion: supply GCP credentials in a runtime that has none (2799f91)
- ingestion: write the raw zone as parquet (9aa0eac)
- ingestion: write the raw zone as parquet (78bc921)
- ogc: drop duplicate collections step definition (3882a5d)
- ogc: gate ogc_waterlevels on the well's release status (c47f481)
- ogc: isolate public and internal pygeoapi module globals (5bb2aae)
- ogc: isolate public and internal pygeoapi module globals (860a3f4)
- ogc: re-point migration to new staging head (8ae9fe1)
- ogc: stop EDR field dicts leaking between requests (598f1ac)
- seed: load reference data even when migrations seeded a term (cdb4246)
- seed: load reference data even when migrations seeded a term (fb64f68)
- tests: remove hardcoded group id assumption (2c17ce6)
- thing: a well with no location no longer 500s the listing (bff7faa)
- transducer: backfill data_maturity from the legacy QC flag (95b9b78)
- transducer: serialize series writes and scope the publish parameter (4701979)
- transducer: spell the block time-order constraint correctly (ba73c6b)
1.2.1 (2026-07-29)
- api/asset: update access from admin to editor (3bed220)
1.2.0 (2026-07-22)
- api/search: add groups/projects to search (271f850)
- cli: add chemistry LIMS ingestion with Google Drive sync (e13c5c3)
- cli: chemistry LIMS ingestion with Google Drive sync (BDMS-1034) (195be59)
- edr: implement OGC API - EDR water collections and BDD spec (7b32233)
- monitoring: add OpenStatus monitoring-as-code config (afd7775)
- monitoring: add OpenStatus monitoring-as-code config (c4f7dc7)
- api: probe database in /health so 200 proves PostGIS reachable (fe0b626)
- api: probe the database in /health so a 200 proves PostGIS is reachable (8cc9c88)
- chemistry: fail loudly when Drive sync is misconfigured (beeb4ad)
- chemistry: treat trailing letters in SamplePointID as a sample point (7fc86d0)
- db: dedupe NMW locations in measurement views, re-register pg_cron job (12bfe8b)
- db: dedupe NMW locations in measurement views, re-register pg_cron job (d96f394)
- db: reparent a5b6c7d8e9f0 onto the EDR views revision (eb89d04)
- deploy: propagate F4_1G instance class to staging + document OOM churn (a830e71)
- deploy: propagate F4_1G instance class to staging + OOM writeup (8e79756)
- monitoring: use single region for OpenStatus free tier (7802f01)
1.1.5 (2026-07-07)
- deploy: raise instance class to F4_1G to stop OOM instance churn (ec012d6)
1.1.4 (2026-07-07)
- ci: deploy on inline workflow_call to CD (Production) (8371f64)
- ci: deploy on inline workflow_call to CD (Production) (1a11ee9)
1.1.3 (2026-07-06)
- correct shapefile DBF schema and clean up temp dir on failure (f63d9ce)
- drop yield_per in get_thing_features (incompatible with unique) (fa727c4)
- stop per-request OOM on /geospatial export endpoint (d3a1358)
- stop per-request OOM on /geospatial export endpoint (2ed12b6)
- stream get_thing_features with yield_per instead of buffering (877fff8)
1.1.2 (2026-07-06)
- deploy: align hotfix migration head with production DB (unblock v1.1.x deploy) (1ee8a4b)
- deploy: align hotfix migration head with production DB + fix release tag passthrough (790377f)
1.1.1 (2026-07-06)
- deploy: prevent App Engine request starvation under burst load (fec7dbd)
- deploy: prevent App Engine request starvation under burst load (385c974)
1.1.0 (2026-06-08)
- add app.template.yaml for dynamic app configuration and update CI/CD scripts to render app.yaml (9274d83)
- add auto-generation prefix extraction for well IDs with new regex support (dcd49b4) (3c11d05)
- add command to import project area boundaries and create associated OGC view (919222e)
- add Dockerfile to set up PostGIS with pg_cron for scheduled tasks (dc424cf)
- add field event limit to well details API and enhance response validation (ac76eba)
- add handling for null slope in water trend materialized view (945d140)
- add location properties to water well response and enhance test coverage (8d0be60)
- add materialized views for latest TDS, depth to water trend, and water well summary (924652c)
- add minor chemistry wells materialized view and update related configurations (181218a)
- add normalized chemistry results materialized view and update related configurations (54a6686)
- add normalized chemistry results materialized view and update related configurations (814092b)
- add POST /asset/upload-and-record endpoint for digital asset upload (BDMS-828) (#683) (f9e538c)
- add refresh command for pygeoapi materialized views and schedule nightly job (2ad195f)
- add refresh step for materialized views in production and staging workflows (e64d6c8)
- add restore-local-db command for restoring local databases from SQL dumps (3d17413)
- add restore-local-db command for restoring local databases from SQL dumps (f5530ff)
- add test for normalized major chemistry to ensure latest results are used (e15d366)
- add theme support and improve validation output formatting in CLI commands (0a76f6b)
- add transfer-results command for generating transfer results summary (b4764b2)
- add validation for missing well_name_point_id column in CSV processing (3b7c561)
- add water elevation materialized view and update configuration (925be66)
- add water elevation materialized view and update configuration (cc40afb)
- add well smoke test command and enhance contact handling with missing value checks (7824779)
- add WellTransferResultsBuilder for summarizing well transfer outcomes (1195f1a)
- api/thing: Add optional flag to see contacts (5cfe398)
- change views to materialized views for depth and TDS data in pygeoapi (9c74fac)
- cli: add progress updates for well inventory imports (467c87e)
- cli: add scoped transfer command for targeted imports (b2b60e5)
- core: add "Windmill" term to lexicon with category
well_pump_type(1df8425) - core: add legacy site notes field to lexicon (ef96f7b)
- core: expand lexicon with new terms for water-related categories (4d74d1b)
- create supporting views for pygeoapi OGC API integration (a2e8f57)
- db, schemas: add support for legacy site notes (b533da4)
- disable default IAM authentication for Cloud SQL connections and allow password handling (2581f61)
- enable database drop and rebuild for unit tests (a2baff6)
- enable IAM authentication by default for Cloud SQL connections (2261484)
- enforce IAM authentication for Cloud SQL connections by removing password handling (c2f4b86)
- enhance CSV processing to handle duplicate contact names and organizations (21ad925)
- enhance data transfer handling by logging skipped records and updating row processing (d2f4f1f)
- enhance database configuration handling for Cloud SQL with IAM authentication (4ea1c80)
- enhance GCS upload handling with async support and improved error logging (0e9b5af)
- enhance GCS upload handling with async support and improved error logging (355706d)
- enhance GCS upload handling with async support and improved error logging (250f2c7)
- enhance logging with debug timing for various operations and ad… (16b7197)
- enhance logging with debug timing for various operations and add well export endpoint (65e51c6)
- enhance project area import with created and skipped counts (989e678)
- enhance project area import with created and skipped counts (dbceb75)
- enhance pygeoapi configuration with new thing collections and supporting views for groundwater monitoring (04d05b5)
- enhance refresh job scheduling with improved privilege handling and error management (43852fe)
- enhance refresh job scheduling with improved privilege handling… (2f97d25)
- enhance SQL queries and add null handling for water data responses (2384f11)
- enhance test for refreshing materialized views with execution options tracking (2d40419)
- enhance test workflow by adding database readiness checks and pg_cron extension (c8d6957)
- enhance validation error handling for contact fields and improve error extraction (bc89558)
- enhance water elevation calculations to support both meters and feet (75f727d)
- enhance water well details with site name, historic depth notes, and field event participants (c3c7648)
- enhance water well details with site name, historic depth notes, and field event participants (c142980)
- enhance well details API response with field events and related data structures (60fe719)
- ensure feature IDs are consistently treated as strings in tests (627a27b)
- first release under versioning standard (#681) (809977d)
- fix water elevation units to feet in materialized view and update related tests (d8b3f71)
- fix water elevation units to feet in materialized view and update related tests (e3e4fde)
- handle internal error in pg_cron job unscheduling for better robustness (cf51d48)
- implement API concurrency fix strategy by converting async rout… (b240b21)
- implement API concurrency fix strategy by converting async route handlers to sync and enhancing error handling (7c053eb)
- implement dynamic loading of pygeoapi app and improve description formatting (4750f9d)
- implement dynamic loading of pygeoapi app and improve description formatting (a242b36)
- implement TransferResultsBuilder and comparison specs for transfer input validation (e8d8bf3)
- improve note retrieval by sorting notes and enhance loading strategy for field event participants (58113bf)
- integrate pygeoapi for OGC API - Features endpoints and update related configurations (a440b55)
- lexicon: add new organization terms (2be9fbd)
- lexicon: add new organization terms for Santa Ana Pueblo, Village of Hope, and WSP (c6164bb)
- lexicon: add new organization terms in support of the 2026-05-26 well inventory ingestion (69fb435)
- make various fields nullable and enhance data transfer handling (fd7e243)
- migrations: make NMA_SurfaceWaterData.thing_id nullable (2d4d8ff)
- migrations: new migration script to drop minor trace chemistry sample/analyte unique constraint (a5943d8)
- normalize database password environment variable and enhance config security (73f26bf)
- optimize logging for request and asset upload processes, and enhance debug timing functionality (2ffbd27)
- optimize water level data transfer by implementing chunked deployment prefetching and COPY insert method (040e787)
- optimize water level data transfer by implementing chunked deployment prefetching and COPY insert method (982a63c)
- refactor app initialization to import from main module (4923c1e)
- refactor location CTE for materialized views and enhance path validation (0ff7bcc)
- refactor location CTE for materialized views and enhance path validation (b4a2841)
- refactor test connection context management in CLI commands (2bb0032)
- remove pg_cron dependency and related scheduling logic for improved flexibility (a18c1d8)
- remove pg_cron dependency and related scheduling logic for improved flexibility (98cb0ad)
- remove pg_cron extension from test database setup for improved flexibility (c21c254)
- remove unused PYGEOAPI environment variables and add PYGEOAPI_SERVER_URL for Cloud SQL IAM authentication (19f016b)
- rename normalized chemistry results to major chemistry results and update related configurations (7cebfcc)
- rename wells collection to water_wells for consistency (c8b31ce)
- schemas: add
monitoring_statusfield tothingschema (a7e0632) - schemas: add alias validation for well inventory fields (1e0b253)
- schemas: enhance well inventory schema with flexible validation and new fields (6c38157)
- services: improve well inventory handling and align well inventory source fields in support of schema alignment and database mapping (6c5d46e)
- simplify location DataFrame caching by removing threading lock (c9cf672)
- simplify password retrieval logic for pygeoapi configuration (9d24983)
- streamline password validation for pygeoapi configuration (72c6b00)
- test: ensure more robust water level tests (44c598a)
- test: print exit_code when assert fails (3ad295a)
- tests: add validation error handling for various invalid CSV field values (bc051f3)
- tests: add validation error handling for various invalid CSV field values (32b4c54)
- tests: adjust validation scenarios to allow partial imports with 1 well (4a4e249)
- tests: relax validation rules and expand enum coverage in well-inventory-csv feature (4382fd5)
- tests: relax validation rules and expand enum coverage in well-inventory-csv feature (9cbaaa2)
- tests: relax validation rules and expand enum coverage in well-inventory-csv feature (56f6cbf)
- tests: update validation error message for well_pump_type field (2c3cde4)
- thing_helper: add handling for
monitoring_statusin status history updates (42bae2d) - thing_helper: Query now go through search (03cebb9)
- transfers: add permissions transfer functionality and update configuration (de1ace4)
- transfers: add permissions transfer functionality and update configuration (563d5d1)
- transfers: add permissions transfer functionality and update configuration (7a51c38)
- transfers: add support for legacy SiteNotes handling (a58fc75)
- update API endpoint paths from /oapi to /ogcapi and set default session secret key for test environments (c799ed5)
- update app.template.yaml to use block scalar for sensitive environment variables (0c904f6)
- update database service configuration in tests to use development setup (ae1ce5e)
- update dotenv loading behavior to prevent overriding existing environment variables (f001b58)
- update endpoint paths from /oapi to /ogcapi and improve pg_cron availability checks (36b5bb5)
- update environment configuration for Docker and enhance README with local development setup (8e9f4e6)
- update environment variable references for PostgreSQL settings in configuration files (b356c7a)
- update latest TDS materialized view to use observation datetime and add tests for timestamp accuracy (cbd7449)
- update nullable fields in relaxed_constraints.md for MeasuringPointHistory and remove depth validation (e089b32)
- update OGC API endpoint path and add unique indexes for materialized views (7c9bd47)
- update package versions in requirements.txt for compatibility and stability (cc3f904)
- update package versions in requirements.txt for compatibility and stability (8f6212c)
- update pygeoapi configuration to use environment variables for PostgreSQL settings (77968de)
- update pygeoapi supporting views and enhance thing collections for groundwater monitoring (d4da8ff)
- update SQL queries in ngwmn_helper.py for consistent quoting and improved readability (6b493c4)
- update SQL queries in ngwmn_helper.py for consistent quoting and improved readability (36e4fad)
- update test configuration to use specific PostGIS version and improve database readiness checks (4312676)
- update test configuration to use specific PostGIS version and improve database readiness checks (3b5af5a)
- update well response validation and enhance type safety for contact fields (14e9066)
- water-level-csv: warn when uploaded mp height differs from well history (a2584c9)
- water-level-import: add best-effort row savepoints (2f2f923)
- water-level-import: add idempotent groundwater persistence (6a09881)
- water-level-import: align partial-success API and CLI behavior (4c3eea0)
- water-level-import: enhance validation and resolve mp_height (eccf31f)
- water-level-importer: add support for field event participants and sampler validation (9ab9846)
- water-level-import: normalize standalone CSV schema (53fee18)
- well inventory: add groundwater level field activity for well inventory import (1dfc24d)
- well inventory: require measuring_point_height_ft or mp_height_ft for non-null observations (fe7fba2)
- well-inventory: emit per-row progress during imports (0ec4da9)
- add imports for shapely and sqlalchemy to support database operations (8896bb6)
- add new well status term and normalize completion date handling (04c943e)
- add unmatched locations to the import process and update test assertions (2dd6628)
- cli: handle UTF-8 BOM in CSV decoding for well inventory import (a7bad53)
- cli: include staged sql path in local db restore result (b80bd32)
- contact: Make contact role and type non-nullable (e768d8a)
- contacts: allow nullable role and contact_type in well inventory import (86aa582)
- correct logic for recording interval check in sensor_transfer.py (066ab6a)
- correct logic for recording interval check in sensor_transfer.py (ee8d8db)
- db: remove unique constraint on MinorTraceChemistry table (1d9fbc5)
- db: skip null measuring point history in property calculations (5be435f)
- db: update import logic to use
nma_GlobalIDfor MinorTraceChemistry records (8c26bc1) - enforce required thing_id for NMA_SurfaceWaterData and add validation (ba7881b)
- enhance autogen value handling with regex validation (5338013)
- enhance completion date normalization to handle various input types and improve error reporting (1260784)
- enhance contact name generation logic to use OwnerKey as fallback and add deduplication handling (727bea1)
- enhance error handling and validation reporting in CSV upload process (f8ceb2c)
- enhance name generation logic to use OwnerKey as fallback (596f37f)
- enhance name generation logic to use OwnerKey as fallback and update transfer method to parallel execution (b5f84ad)
- importers: prevent duplicate well-name collisions during CSV imports (7f83e4c)
- improve error handling and logging for recording interval estimation (dcd49b4)
- improve error handling and logging for recording interval estimation (3c11d05)
- improve error handling and logging for recording interval estimation feat: add auto-generation prefix extraction for well IDs with new regex support (db0dc8f)
- initialize test schema and update alembic configuration handling (52a94ec)
- log BackfillResult outcomes and preserve tracebacks in orchestrator (a4edbf7), closes #558
- make pg_cron optional for local development (e4cd4e3), closes #576
- move pre-commit/pytest dev tools out of prod deps (unblock deploy) (#705) (3892047)
- pin joserfc in requirements.txt to unblock deploy (#704) (018cc44)
- remove unsupported pattern handling in well_inventory_csv.py (08c4beb)
- remove unsupported pattern handling in well_inventory_csv.py (d95904b)
- remove unused
as excbinding (c77f598) - schemas/well_inventory: Add case for None (90b5b8a)
- schemas: fix well inventory schema mismatch for
SampleMethodandDataQuality(9742c03) - schemas: Swap before mode for after in well_inventory & water_level_csv (39e01de)
- services/util: Add needed import (772e326)
- services/util: Mv normalize_datetime_to_utc() to services/util & used it in well_inventory (df0180d)
- test: clarify docstrings (6df12f6)
- test: clarify docstrings (4a0f0da)
- test: compare dt aware objects for optional water level tests (fe9fc0d)
- test: encore ocotilloapi_test for bdd tests (1e0fd84)
- test: ensure different step test names (0fada74)
- test: ensure sample references correct field activity (e899412)
- test: fix failing well inventory tests (3e9dcf3)
- test: fix typo in doc string (cf7ca5a)
- test: make docstring more accurate (b6e5d80)
- test: make test name more accurate (1763df2)
- test: remove print debugging statement (a0ea88d)
- test: use enums when testing helper functions (0c9e8fa)
- test: utilize autouse fixture to clean up tests (815cfc6)
- transfers: handle duplicate legacy SiteNotes with date context (e6a8f21)
- transfers: handle missing MPHeight values during migration (9f20199)
- update pygeoapi configuration to use environment variable for PostgreSQL password (d635162)
- update references from NMSampleLocations to OcotilloAPI in admin views and documentation (7a90734)
- update type hint for well_id parameter in _extract_autogen_prefix function (729faba)
- validate thing_id before GCS upload to prevent orphaned blobs (#698) (fb847f8)
- water-level-importer: reuse contacts by unique name and organization (56c96a8)
- water-level-import: handle savepoint initialization failure gracefully (e0d7e45)
- water-level-import: harden real-file import cleanup (fa257cd)
- water-level-import: refine handling of alias and canonical headers in CSV processing (623206e)
- water-level-import: skip persistence when no valid rows exist (9741d41)
- well inventory: allow null mp heights (a01e091)
- well inventory: check for Nones to avoid truthiness traps (aac5c95)
- well inventory: extract role/contact_type from enum (0a30676)
- well inventory: retrieve groundwater level reason enum value, else None (b2bc17d)
- well inventory: test if mp height not None to avoid truthiness trap (4c0db46)
- well inventory: use correct activity type for water level records (d6e1dc4)
- well inventory: use one mp height for thing and gwl (6d03bf4)
- well_inventory: date_time was always returning None (3cbb0e5)
- well-inventory: avoid creating empty project groups on failed imports (1460d4f)
- well-inventory: improve error handling for database exceptions (4f2b3cd)
- well-inventory: normalize "Complete" monitoring frequency to "Not currently monitored" (f482b5a)
- well-inventory: normalize blank contact values and add missing organization terms (b2df9ab)
- well-inventory: preserve attempted water-level records when depth-to-water is blank (6d2d810)
- well-inventory: stop defaulting missing observation data quality to Unknown (5fabcd1)
- well-inventory: treat whitespace-only lexicon values as blank (3e93bb6)
- well-inventory: validate invalid well_hole_status before persistence (2932721)
- well-transfer: defer WellTransferer external I/O until needed (8490550)
- well-transfer: exclude monitoring_status from Thing creation (83bc1d9)
- well-transfer: improve aquifer persistence with nested savepoints and better error handling (81a016c)
- well-transfer: preload measuring point estimator before parallel workers (91aaaf4)
- well-transfer: preload shared elevation cache before parallel workers (fbdc18b)