Categories addressed: - pattern_match / pattern_match_cov (32): remove dead case/with clauses that dialyzer proved unreachable from the caller types. - contract_supertype / extra_range / invalid_contract / contract_with_opaque (25): narrow @spec declarations to match actual success typings. - call / call_without_opaque (18): fix bad calls, narrow User.t to allow nil for in-memory changeset structs, suppress Ecto.Multi opaque-type false positives with targeted @dialyzer directives. - guard_fail / no_return / unused_fun / unknown_function (13): remove dead || fallbacks, simplify always-true params, cascade-resolve no_returns via the underlying pattern_match and call fixes. Real production bug fixed: StormDetector.handle_cast/2 had swapped `:queue.in` args (`queue |> :queue.in(ts)` which desugars to `:queue.in(queue, ts)` — wrong argument order). Alert timestamps were never being enqueued, so storm detection would fail at runtime. Corrected to `ts |> :queue.in(queue)`. .dialyzer_ignore.exs: suppress two genuine dep-PLT gaps (:ranch.get_addr/1 false positive from Bandit's transitive ranch, and the Cloak.Vault GenServer callback_info on the CI build path). `mix dialyzer` now: Total errors: 114, Skipped: 114 — passes clean. Warnings: 88 → 0. |
||
|---|---|---|
| .. | ||
| backfill_checks.ex | ||
| compile.towerops_nif.ex | ||
| copy_mibs.ex | ||
| gen_vendor_modules.ex | ||
| gen_vendor_tests.ex | ||
| geoip.import.ex | ||
| import_mibs.ex | ||
| import_profiles.ex | ||
| oban.cancel_stuck_discovery.ex | ||
| populate_english.ex | ||
| totp_diagnose.exs | ||
| totp_time_check.exs | ||
| upload_librenms.ex | ||
| upload_mibs.ex | ||