All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[0.2.0] - 2026-03-08

Added

[0.1.2] - 2026-03-07

Added

  • Modulith.all_modules_covered_by/3 — asserts that every module under a namespace pattern belongs to a declared slice. Modules that escape slice coverage cause an explicit test failure instead of being silently ignored. Supports :except (list of glob patterns) and :graph (for testability). Also delegated from ArchTest as all_modules_covered_by/2,3.

[0.1.1] - 2026-03-07

Fixed

  • OTP version compatibility: tests now use stable fixture modules instead of OTP-version-sensitive stdlib internals, fixing failures on OTP 26/27
  • All credo --strict issues resolved (implicit try, Enum.map_join, negated if/else, nesting depth, cyclomatic complexity)

[0.1.0] - 2026-03-06

Initial release.

Added

  • Dependency assertionsshould_not_depend_on/2, should_only_depend_on/2, should_not_be_called_by/2, should_only_be_called_by/2, should_not_transitively_depend_on/2, should_be_free_of_cycles/1, should_not_exist/1
  • Naming assertionsshould_reside_under/2, should_have_name_matching/2, should_have_module_count/2
  • Behaviour / protocol assertionsshould_implement_behaviour/2, should_not_implement_behaviour/2, should_implement_protocol/2, should_not_implement_protocol/2
  • Module attribute assertionsshould_have_attribute/2, should_not_have_attribute/2, should_have_attribute_value/3, should_not_have_attribute_value/3
  • Function assertionsshould_export/3, should_not_export/3, should_have_public_functions_matching/2, should_not_have_public_functions_matching/2, should_use/2, should_not_use/2
  • Layered architecturedefine_layers/1 + enforce_direction/1, define_onion/1 + enforce_onion_rules/1
  • Modulith / bounded-context isolationdefine_slices/1, allow_dependency/3, enforce_isolation/1, should_not_depend_on_each_other/1
  • ArchTest.Conventions — pre-built checks: no_io_puts_in/2, no_process_sleep_in/2, no_application_get_env_in/2, no_dbg_in/2, no_raise_string_in/2, no_plug_in/2, all_public_functions_documented/2
  • ArchTest.Metrics — afferent/efferent coupling, instability, abstractness, distance from main sequence (Martin metrics)
  • ArchTest.Freeze — violation baseline freezing for gradual adoption; ARCH_TEST_UPDATE_FREEZE=true mode
  • ArchTest.ModuleSet — fluent module selection DSL: glob patterns, excluding/2, union/2, intersection/2, satisfying/1
  • ArchTest.Pattern — glob pattern compiler with * (single segment) and ** (multi-segment) wildcards
  • ArchTest.Collector — BEAM-native dependency graph builder via OTP :xref; works on compiled bytecode, no source parsing
  • Conventions support for both legacy and modern BEAM debug formats — handles both :abstract_code (OTP < 24) and :debug_info_v1 with :elixir_erl backend (Elixir 1.14+)