towerops/lib/towerops/workers
Graham McIntire 0e2cc6b7ce chore(coverage,types): clean dialyzer + new tests + ETH canopy provider
Dialyzer:
* Add Lidar.Tile @type, narrow several @specs to match success-typing,
  prefix discarded function returns with `_ =`, fix the broken
  File.stream! call in the ms-buildings worker (it was causing dialyzer
  to mark every private fun unreachable), broaden Antenna.spec key
  types from `float()` to `number()` to match catalog int literals.
* Add :geo, :geo_postgis, :db_connection to plt_add_apps so the dep
  PLT actually contains the modules we use.
* Result: 0 unsuppressed dialyzer warnings (was 50+ in project code).

Tree canopy:
* Replace the dead landfire.gov URL with the ETH Zurich Global
  Canopy Height 10 m product. ETH publishes proper COGs with
  overviews on libdrive.ethz.ch — confirmed working with
  /vsicurl/ byte-range reads. The module now picks the 3°×3° tile
  containing the bbox centroid, with both a `:metres` decoder
  (ETH Byte raster, NoData=255) and a `:landfire_evh` decoder for
  operators self-hosting LANDFIRE EVH COGs.
* Re-enable canopy by default now that there's a working source.

Tests (+105 tests, 0 failures):
* CoverageLive Index/Show/Form/Map — empty/loaded/auth states,
  LiveView event handlers, formatters.
* Coverages.Building changeset + helpers.
* Coverages.TreeCanopy provider tile-URL builder and decoders.
* Workers.MsBuildingsImportWorker (full import flow incl. blank
  lines, MultiPolygon, idempotency, hash fallback) — also fixed
  the partial-index ON CONFLICT bug that prevented imports from
  ever working: the unique index has WHERE ms_footprint_id IS
  NOT NULL, so the worker now uses an :unsafe_fragment conflict
  target that includes the predicate.
* GraphQLDocsController smoke test (was 0%).

Coverage rose from 73.19% → 74% with the major project modules I
touched all moved from 0% / <50% to >75%.
2026-05-07 09:11:17 -05:00
..
agent_latency_evaluator.ex fix: cloud poller automatic rebalancing 2026-02-12 15:32:33 -06:00
alert_digest_worker.ex perf+refactor: codebase-wide query and antipattern audit 2026-04-28 16:58:51 -05:00
alert_notification_worker.ex dialyzer: fix remaining 88 warnings — clean dialyzer run 2026-04-21 10:32:42 -05:00
backup_summary_worker.ex Add strict typespecs to all Oban worker perform/1 functions 2026-02-06 09:50:51 -06:00
backup_timeout_worker.ex Add strict typespecs to all Oban worker perform/1 functions 2026-02-06 09:50:51 -06:00
billing_sync_worker.ex stripe and email after signup 2026-03-06 10:07:27 -06:00
capacity_insight_worker.ex reliability-audit-fixes (#181) 2026-03-26 14:10:36 -05:00
check_executor_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
check_worker.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
cloud_latency_probe_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
cloudflare_ban_worker.ex Add 404-based brute force protection system 2026-02-10 16:31:48 -06:00
cn_maestro_sync_worker.ex refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
coverage_worker.ex chore(coverage,types): clean dialyzer + new tests + ETH canopy provider 2026-05-07 09:11:17 -05:00
data_retention_worker.ex feat: add per-organization data retention with 1-year default (#144) 2026-03-24 15:30:43 -05:00
device_health_insight_worker.ex feat: command center dashboard with unified insights and contextual enrichment 2026-02-13 14:52:49 -06:00
device_monitor_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
device_poller_worker.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
discovery_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
escalation_check_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
expired_ban_cleanup_worker.ex Add 404-based brute force protection system 2026-02-10 16:31:48 -06:00
firmware_version_fetcher_worker.ex Add GeoIP import HTTP tests 2026-03-10 16:02:49 -05:00
gaiia_insight_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
gaiia_sync_worker.ex add gaiia integration stages 1-2: sync engine and entity mapping UI 2026-02-13 10:31:32 -06:00
job_cleanup_task.ex Skip Phoenix poller/monitor scheduling when SNMP disabled 2026-02-17 07:12:15 -06:00
job_health_check_worker.ex fix: dns and ping checks not executing in production (#71) 2026-03-18 08:43:37 -05:00
lidar_catalog_sync_worker.ex feat: add Texas LIDAR DEM catalog with on-demand elevation reads 2026-05-04 13:03:28 -05:00
login_history_cleanup_worker.ex Add strict typespecs to all Oban worker perform/1 functions 2026-02-06 09:50:51 -06:00
mikrotik_backup_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
ms_buildings_import_worker.ex chore(coverage,types): clean dialyzer + new tests + ETH canopy provider 2026-05-07 09:11:17 -05:00
netbox_sync_worker.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
polling_offset.ex refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
preseem_baseline_worker.ex add preseem insights schema, generation, and queries 2026-02-13 08:53:01 -06:00
preseem_sync_worker.ex refactor: convert 6 Gleam modules to idiomatic Elixir with TDD (#196) 2026-03-28 09:52:07 -05:00
report_worker.ex reliability-audit-fixes (#181) 2026-03-26 14:10:36 -05:00
session_cleanup_worker.ex Add strict typespecs to all Oban worker perform/1 functions 2026-02-06 09:50:51 -06:00
sonar_sync_worker.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
splynx_sync_worker.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
stale_agent_worker.ex Add comprehensive typespecs to agent-related modules 2026-02-06 09:33:44 -06:00
stale_violation_cleanup_worker.ex Add 404-based brute force protection system 2026-02-10 16:31:48 -06:00
system_insight_worker.ex fix/findings-medium-priority (#188) 2026-03-27 12:31:53 -05:00
uisp_sync_worker.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
visp_sync_worker.ex tests: raise coverage to 70% via helper promotion + new unit/property tests 2026-04-24 09:49:06 -05:00
weather_sync_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
welcome_email_worker.ex dialyzer: fix all unmatched_return warnings (154 → 0) 2026-04-21 10:03:55 -05:00
wireless_insight_worker.ex reliability-audit-fixes (#181) 2026-03-26 14:10:36 -05:00