Skip to content

Fix Dialyzer failure on OTP 29#226

Merged
whatyouhide merged 2 commits into
mainfrom
fix-dialyzer-otp29
Jun 30, 2026
Merged

Fix Dialyzer failure on OTP 29#226
whatyouhide merged 2 commits into
mainfrom
fix-dialyzer-otp29

Conversation

@whatyouhide

Copy link
Copy Markdown
Owner

What

CI on main is failing in the Dialyzer job (Elixir 1.20 / OTP 29). OTP 29's Dialyzer flags the seen MapSet accumulator threaded through the private recursive uniq_list_of/9 as an opaqueness violation (call_without_opaque + opaque-term-as-argument), even though the set is only ever touched through the public MapSet API.

Fix

Mark uniq_list_of/9 as @dialyzer {:nowarn_function, ...} with a comment explaining why. The warnings are spurious Dialyzer opacity false-positives, not real type errors.

Verification

Locally on OTP 29 / Elixir 1.20:

  • mix dialyzerTotal errors: 0 ... passed successfully
  • mix compile --warnings-as-errors → clean
  • mix format --check-formatted → clean
  • mix test → 127 passed

🤖 Generated with Claude Code

OTP 29's Dialyzer flags the `seen` MapSet accumulator threaded through the
private recursive `uniq_list_of/9` as an opaqueness violation, even though
the set is only ever touched through the MapSet API. Mark the function as
nowarn to keep CI green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@coveralls

coveralls commented Jun 30, 2026

Copy link
Copy Markdown

Coverage Report for CI Build 8

Warning

No base build found for commit 08dbfde on main.
Coverage changes can't be calculated without a base build.
If a base build is processing, this comment will update automatically when it completes.

Coverage: 93.836%

Details

  • Patch coverage: 1 of 1 lines across 1 file are fully covered (100%).

Uncovered Changes

No uncovered changes found.

Coverage Regressions

Requires a base build to compare against. How to fix this →


Coverage Stats

Coverage Status
Relevant Lines: 438
Covered Lines: 411
Line Coverage: 93.84%
Coverage Strength: 9840.26 hits per line

💛 - Coveralls

Date.before?/2 was only added in Elixir 1.15, but the project supports
Elixir ~> 1.12. Replace it with Date.compare(max, min) == :lt, which is
available in all supported versions.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@whatyouhide whatyouhide merged commit 75c289e into main Jun 30, 2026
2 checks passed
@whatyouhide whatyouhide deleted the fix-dialyzer-otp29 branch June 30, 2026 07:54
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants