All notable changes to this project will be documented in this file.
This project adheres to Semantic Versioning.
[0.7.0] - 2026-08-13
Added
--quietflag formix assayto suppress informational output (header, ignore logs, summary, and the warnings exit message). Formatted warning output and exit codes are unchanged.
Fixed
- Dialyzer's opaque
Could not compute MD5 for .beamfailure is now translated on macOS intoAssay.FileDescriptorLimitError, which names the real cause (the default 256 open file descriptor limit), reports the current soft limit, and gives theulimit -ncommand that fixes it. The daemon and MCP server relay the same explanation to editors and agents.
0.6.1 - 2026-06-05
Fixed
- Fixed syntax error (missing
end) in the marcli formatter test that caused CI to fail withTokenMissingError. - Updated install test version assertion from
~> 0.5to~> 0.6to match the version the installer now writes into new projects.
0.6.0 - 2026-06-05
Added
--format markdownoutput format renders Dialyzer warnings as a Markdown document, suitable for pasting into issues, PRs, or documentation.--format marclioutput format renders warnings with rich terminal styling via the optionalmarclidependency (add{:marcli, "~> 0.3"}to your project deps to enable).
Fixed
- Formatter no longer crashes when Dialyzer reports a warning at a line number
beyond the end of the source file (can occur with macro-generated code,
protocol implementations, or stale PLT data). Affected both
--format elixirand--format githubmodes.
Dependencies
- Bumped
erlex0.2.8 → 0.2.9 (removes compile-time shift/reduce warnings). - Bumped
ex_doc0.39.3 → 0.40.3. - Bumped
igniter0.7.0 → 0.8.1. - Bumped
credo1.7.18 → 1.7.19 (Elixir 1.20 compatibility).
0.5.2 - 2026-02-27
Fixed
Made
erlexa required (non-optional) dependency so that Erlang-to-Elixir type conversion works in consuming projects. Previously erlex was optional, meaning projects using assay would see raw Erlang notation (e.g.'Elixir.String':t()) in Success typing and Diff sections unless they explicitly added erlex to their own deps.Code snippet line numbers now render inside the
│border with a single gutter (e.g.│ 44 codeinstead of44 │ code).
0.5.1 - 2026-02-26
Fixed
- GitHub annotations now display the rich formatted body (code snippets, diffs,
suggestions) instead of the raw Dialyzer message. The formatted body is encoded
in the
::warningmessage parameter so GitHub renders it in the annotation popup.
0.5.0 - 2026-02-26
Improved
--format githubnow emits a rich elixir-style text body (code snippets, context lines) after the::warningannotation line, making CI output more readable without requiring a separate--format elixirpass.
Fixed
- Umbrella project path resolution: Dialyzer reports paths relative to each
umbrella app (e.g.
lib/api/admin/chat_context.ex), which failed to resolve when expanded against the project root. Assay now searchesMix.Project.apps_paths()to find the correct file under umbrella app directories.
0.4.0 - 2026-02-24
Added
--no-compileflag formix assayto skip compilation before running Dialyzer. Useful in CI pipelines where the project is already compiled. Follows the convention used bymix test,mix credo, and Dialyxir.- Clear error messages when
--no-compileis used with long-running modes (mix assay.watch,mix assay.daemon,mix assay.mcp) that require recompilation on each analysis cycle.
0.3.0 - 2026-01-07
Fixed
- Several bug and documentation fixes.
0.2.0 - 2026-01-07
Added
- JSON-RPC daemon (
mix assay.daemon) for programmatic access. - MCP server (
mix assay.mcp) for editor/LSP/agent integrations. - Igniter-powered installer (
mix assay.install). - Watch mode (
mix assay.watch) with debounced re-analysis. - Multiple output formats:
text,elixir,github,sarif,json,llm. dialyzer_ignore.exsfiltering.- Umbrella project support.
- CI workflow generation (GitHub Actions, GitLab CI).
0.1.0 - 2026-01-06
Added
- Initial release with incremental Dialyzer support.
- Basic CLI via
mix assay.