Skip to content
CAI
Software that uses CAICheck a score

funbox/clean_mixer

64.7

Adequate · 21 September 2026

2k

lines of production code

Elixir

primary language

7

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

CleanMixer is an Elixir library and CLI tool designed for static code architecture analysis. It constructs internal representations of a project's code and architecture maps to identify dependencies, detect cycles, and calculate structural metrics like instability and abstractness. The system provides Mix tasks and a GenServer-based API to visualize component relationships via PlantUML diagrams or text reports, enabling developers to audit codebase health and enforce architectural constraints.

How it got here

2019 — initial release and core architecture analysis features

11 changes.

This period marks the initial release of Clean Mixer, an Elixir package for code architecture analysis. The work introduced core modules for mapping code structures, generating dependency graphs, and providing Mix tasks for visualization and cycle detection. The release also established the foundational test suite and dependency configuration.

2020 — Architecture map metrics and rendering

11 changes.

This period focused on deepening architectural analysis by introducing comprehensive component and dependency metrics, such as stability and abstractness. The work also expanded the system's output capabilities, adding text and PlantUML rendering for architecture maps, alongside extensive unit test coverage for these new features.

Features

Added path cycle depth calculation utility

A new module, CleanMixer.Graph.PathCycle, has been added to calculate the depth of a cycle within a graph structure. This utility provides a method to determine the depth by analyzing the common prefix of cycle paths, returning the maximum depth found.

_lib/clean\mixer/graph · high confidence

Added text rendering for component dependencies and usages

Users can now view structured text output for component dependencies and usages. New text renderers have been introduced for both dependency and usage analysis, allowing users to inspect how components interact and which files are involved in those interactions. The dependency renderer lists each component and its outgoing dependencies, while the usage renderer shows each component and its incoming usages, with an optional verbose mode to display specific file-level details.

_lib/ui/arch\_map\_rendering/text\renderers · high confidence

Adds new component-level architectural metrics

The component metrics module now includes calculations for abstractness, distance, fan-in, fan-out, instability, stability, and public files. These new metrics allow users to evaluate the structural health and dependencies of their components directly.

_lib/clean\_mixer/metrics/component\metrics · high confidence

Initial release of Clean Mixer for code architecture analysis

The package is introduced as version 0.1.0, providing Elixir mix tasks for analyzing code architecture and validating component dependencies. The release includes configuration files for CI (Travis CI, Coveralls), formatting, and versioning, alongside a comprehensive README detailing usage for generating PlantUML diagrams, listing component dependencies, and identifying cycles.

(repo-wide) · high confidence

Introduce CleanMixer public API for project, architecture, and workspace analysis

The lib/clean\_mixer.ex file introduces the CleanMixer module, providing a public API for accessing project configurations, architecture maps, and workspace data. Users can now call CleanMixer.project/1, CleanMixer.arch\_map/1, and CleanMixer.workspace/1 to retrieve structured data about the current project's dependencies and architecture. Additionally, a helper function path\_to\_asset/1 is exposed to locate asset files within the application's private directory.

lib · high confidence

Introduce compiler manifest-based code map generation

Added new modules in lib/clean\_mixer/compiler\_manifests to parse Elixir compiler manifests and Xref data, enabling the system to build a code map from existing build artifacts rather than relying on live compilation. This includes App, Manifest, MixProject, and XrefSource modules that read .mix/compile.elixir files and xref queries to construct a dependency graph, with support for both umbrella and non-umbrella projects.

_lib/clean\_mixer/compiler\manifests · high confidence

Introduce component and dependency metrics for architecture analysis

The system now calculates a comprehensive set of metrics for each component and dependency in the architecture map. For components, it computes FanIn, FanOut, Instability, Stability, Abstractness, Distance, PublicFiles, AbstractIn, and AbstractOut. For dependencies, it calculates a Usage metric based on the ratio of used files to total files. These metrics are aggregated and made available via a MetricsMap, enabling deeper architectural analysis of the codebase.

_lib/clean\mixer/metrics · high confidence

Introduce core architecture map data structures and filtering logic

Added new Elixir modules for the architecture map: \CleanMixer.ArchMap.Component\ and \CleanMixer.ArchMap.Dependency\ define the data structures for components and their relationships, while \CleanMixer.ArchMap.Filter\ provides functions to filter components and dependencies by source, target, or file patterns. This establishes the internal data model and filtering capabilities for the architecture map feature.

_lib/clean\_mixer/arch\map · high confidence

Introduced GenServer-based Workspace API for architecture analysis

Added a new \CleanMixer.Workspace\ module that wraps the project state in a GenServer, allowing callers to interact with the architecture map and code map through a stable process-based interface. This change introduces configurable timeouts for GenServer calls (defaulting to 15 seconds) and exposes methods to query component dependencies, usages, and detect cycles in both the architecture and file-level graphs. The underlying \Project\ struct now holds both \CodeMap\ and \ArchMap\ instances, enabling the workspace to coordinate between code-level and architecture-level analysis.

_lib/clean\mixer · high confidence

Introduces code map infrastructure for analyzing module relationships

Adds new internal modules to the code map subsystem to represent and analyze code structure. The \CodeModule\ module provides utilities to identify whether a module is a behaviour, struct, or has functions, and determines if a module is 'abstract' (defines types but no functions/structs). \ModuleReference\ and \SourceFile\ model references between modules and files, while \FileDependency\ and \Behaviour\ modules facilitate the analysis of dependencies and behaviour implementations. This change enables the tool to understand module relationships, support Erlang files, and detect abstract modules for metrics like abstractness and fan-in/fan-out.

_lib/clean\_mixer/code\map · medium confidence

New CleanMixer Mix tasks for dependency analysis and visualization

Added new Mix tasks to analyze and visualize architectural dependencies. The \clean\_mixer.list\ task lists project components and their dependencies, while \clean\_mixer.list\_usages\ lists public files and their usages. New tasks \clean\_mixer.behaviours\ lists all behaviours and their implementations, and \clean\_mixer.file\_cycles\ / \clean\_mixer.component\_cycles\ detect and display dependency cycles in files and components respectively. The \clean\_mixer.plantuml\ task generates PlantUML diagrams of the component structure, supporting options to group components, include hex dependencies, and filter by component or behaviour.

lib/mix · high confidence

New architecture map rendering and filtering capabilities

Added new modules for rendering architecture maps as PlantUML diagrams and text, including support for grouping components, displaying component metrics (such as stability, instability, abstractness, and file counts), and filtering the architecture map by sources, targets, and file paths. The PlantUML renderer also implements color-coded dependency links based on stability differences and includes a legend explaining the metrics.

_lib/ui/arch\_map\rendering · high confidence

Behavioural changes

Added pattern-based filtering for arch map paths

Users can now filter architecture map paths using wildcard patterns (e.g., \\*\) via the new \CleanMixer.ArchMap.Filter.Pattern\ module. This enables matching against empty sequences and supports glob-style path filtering in the \clean\_mixer.list\ task.

_lib/clean\_mixer/arch\map/filter · medium confidence

Test coverage

Added test coverage for CleanMixer Mix tasks; Added test coverage for CleanMixer metrics; Added test fixtures for Erlang and Elixir code analysis; Added tests for README version consistency and test initialization; Added tests for code map components; Added unit tests for ArchMap components and filters; Added unit tests for CleanMixer core modules; Added unit tests for compiler manifest processing.

Dependencies

Initial release of CleanMixer 0.11.3 with updated dependencies

The project has been released as version 0.11.3, establishing the initial \mix.exs\ and \mix.lock\ files for the CleanMixer package. This release updates several development and testing dependencies, including \dialyxir\ to 1.0.0-rc.7, \ex\_doc\ to 0.24.2, \excoveralls\ to 0.12.1, and \earmark\ to 1.4.3, while also adding \earmark\ as a dev dependency for documentation generation.

(dependencies) · high confidence

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

How this codebase got here

Score

  • CAI 70 → 65 (-5.7)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 99 (-0.6)
  • Architecture 100 → 99 (-0.7)
  • Maturity 55 → 55 (+0.0)
  • Readiness 69 → 58 (-11.2)
  • Security 97 → 78 (-18.9)

Resolved (7)

  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — no supported dependency manifest was read
  • High CVE: [GHSA redacted] (mix.lock)
  • Medium CVE: EEF-[CVE redacted] (mix.lock)
  • No exposed public API
  • Test reliability not included
  • dormant codebase — no living knowledge left to concentrate

New (14)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Duplicated block (5 lines × 2) (lib/clean_mixer/metrics/component_metrics/abstract_in.ex)
  • Duplicated block (6 lines × 2) (lib/clean_mixer/arch_map.ex)
  • High CVE: [GHSA redacted] (mix.lock)
  • Medium CVE: EEF-[CVE redacted] (mix.lock)
  • No SBOM
  • No artifact signing
  • No build provenance
  • No dependency advisory monitoring
  • Outdated: ex_doc
  • Outdated: excoveralls
  • Retired release: earmark
  • TodoComment (lib/clean_mixer/config.ex)

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

funbox/clean_mixer was measured the same way every project in this corpus was: the same rubric, at a pinned commit, with the result published in full. Point a surveyor at a repository you know and see whether you agree with it.

About this page

  • The score is its most recent published measurement, taken on 21 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 8cceae9972a9d3c9299118680c202bedbcee0d92 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b84573e22831.