Skip to content
CAI
Software that uses CAICheck a score

parapluu/Concuerror

73.3

Strong · 23 September 2026

17.9k

lines of production code

Erlang

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Concuerror is a stateless model checking tool for Erlang applications, designed to detect race conditions and deadlocks by exploring concurrent execution interleavings. The system provides both command-line and GUI interfaces, featuring Dynamic Partial Order Reduction (DPOR) algorithms to efficiently analyze concurrency. It includes a comprehensive test suite that validates the tool's behavior against various Erlang constructs, real-world libraries, and concurrency litmus tests.

How it got here

2010–2014 — Concuerror model checker development

16 changes.

This period marks the initial creation and expansion of the Concuerror project, a stateless model checking tool for Erlang. The work focused on establishing the core architecture, build infrastructure, and comprehensive test suites to verify concurrency analysis and dynamic partial order reduction (DPOR) algorithms.

2016–2017 — Comprehensive test coverage expansion

8 changes.

This period focused on significantly expanding test coverage across the codebase, particularly for concurrency and edge cases using Concuerror. Key additions included new test suites for gproc and poolboy, while existing tests for options and corner cases were restructured and deepened. Additionally, code coverage thresholds were enforced to maintain high standards.

2018–2020 — test suite expansion and tooling

7 changes.

This period focused on significantly expanding the project's test coverage by introducing new test suites for Erlang concurrency, output formatting, and specific modules like timer and maps. The work also included adding build scripts for documentation and code coverage, as well as implementing bash completion to improve the command-line experience.

Features

Add bash completion for the concuerror command

Users can now use the bash completion script for the concuerror command, enabling tab-completion for all available options and arguments. This improves the command-line experience by providing context-aware suggestions for flags like --dpor, --scheduling, and file paths.

_resources/bash\completion · high confidence

Add concurrency litmus test suite for Erlang

A new test suite has been added to run Erlang concurrency litmus tests using the Concuerror tool. The suite includes a Makefile to manage the external test repository, a shell script to handle version checks and execution, and an escript that orchestrates the testing of various concurrency scenarios such as registry, timer, signal, and process tests. This allows users to verify concurrent behavior in their Erlang applications against known litmus test cases.

tests-real/suites/erlang-litmus · high confidence

Added Concuerror static analysis tool to the codebase

The \resources/old\_source\ directory now contains the source code for Concuerror, a static analysis tool for Erlang applications. This includes the main CLI and GUI entry points (\concuerror.erl\, \concuerror\_gui.erl\), the instrumentation engine (\concuerror\_instr.erl\), dependency analysis (\concuerror\_deps.erl\), error handling (\concuerror\_error.erl\), logging (\concuerror\_log.erl\), and supporting modules for process actions, LIDs, and I/O. A BSD-style LICENSE file has also been added to the directory.

_resources/old\source · high confidence

Added Flanagan prototype and release guide

Added a new Erlang module (resources/flanagan.erl) containing a prototype implementation for the Flanagan tool, including state records, command execution logic, and process simulation functions. Additionally, added a new markdown file (resources/how-to-release.md) providing step-by-step instructions for preparing and publishing a new release of Concuerror, including versioning, tagging, and Hex publishing steps.

resources · high confidence

Added exhaustive scheduling tests for Concuerror

A new test suite for the Concuerror model checker has been added to the resources/perm\_tests directory. This includes a run\_perm\_tests shell script and multiple Erlang modules (such as complete\_test\_3, conditional\_readers\_3, depend\_4\_1, depend\_6\_1, etsi, and readers\_2/3) that define specific concurrency scenarios. These tests are designed to run exhaustive scheduling checks against the Concuerror tool to verify correct behavior under various interleavings.

_resources/perm\tests · high confidence

Added generic registration server and tests

Introduced a new generic registration server (\reg\_server\) that manages process registrations with a maximum capacity (currently set to 2). The server supports attaching, detaching, and pinging registered processes, and includes a comprehensive test suite (\reg\_server\_tests\) covering start/stop cycles, concurrent operations, and edge cases like exceeding the attachment limit.

resources/tdd · high confidence

Initial project structure and build system

The repository was initialized with a new build system using Rebar3, including a Makefile for common tasks (build, test, lint, dialyze) and a rebar.config file that defines dependencies (getopt), compiler options, and profiles for development, documentation, and testing. The project also includes standard configuration files such as .editorconfig, .gitignore, elvis.config for Erlang style checking, and a CHANGELOG.md following the Keep a Changelog format. Additionally, contributor guidelines (CONTRIBUTING.md) and a Code of Conduct (CODE\_OF\_CONDUCT.md) were added to support community involvement.

(repo-wide) · high confidence

Initial release of Concuerror model checking tool

Concuerror is introduced as a stateless model checking tool for Erlang programs. This change adds the core source files, including the main entry points for command-line and Erlang API usage, the instrumenter for analyzing code, the scheduler for exploring interleavings, and the logger for reporting results. The tool supports analyzing concurrent Erlang applications by detecting race conditions and deadlocks.

src · high confidence

Behavioural changes

Add EDoc-compatible documentation and build infrastructure

The project now includes EDoc-compatible documentation files (overview.edoc) and a Makefile to automate the generation of HTML documentation. This change introduces a new build target for generating the API specification and sets up the necessary build dependencies and ignore rules for generated files.

doc · medium confidence

Added DPOR paper materials and benchmarking scripts

Added the 'DPOR\_paper\_material' directory containing a README guide for the Concuerror tool's experimental Dynamic Partial Order Reduction (DPOR) features, along with several Erlang source files (foo.erl, foobar.erl, my\_test.erl) and shell scripts (run\_dialyzer.sh, run\_filesystem.sh, run\_indexer.sh, run\_last\_zero.sh, run\_readers.sh, run\_rush\_hour.sh) designed to benchmark and compare different DPOR algorithm variants (o-DPOR, s-DPOR, DPOR) on various concurrency examples.

_resources/DPOR\_paper\material · medium confidence

Added build and documentation generation scripts

Three new executable scripts have been added to the 'priv' directory to support the build and documentation processes. 'concuerror' is a wrapper script used to collect code coverage data, 'generate\_option\_docfiles' creates documentation for options, and 'generate\_version\_hrl' generates header files containing OTP version definitions.

priv · high confidence

Archived legacy header files for Concuerror

The \resources/old\_include\ directory now contains archived header files (\gen.hrl\, \gui.hrl\, \instr.hrl\) that preserve the original definitions for the Concuerror tool's general configuration, GUI layout, and instrumentation logic. These files are moved out of the active build path to keep the main codebase clean while retaining the legacy definitions for reference or compatibility.

_resources/old\include · high confidence

Enforce code coverage thresholds in the cover-report script

The cover-report script now enforces minimum code coverage thresholds, failing with an error if individual module coverage drops below 85% or total coverage drops below 94%. This ensures that the project maintains a high standard of test coverage, with the script exiting with a non-zero status code if these thresholds are not met.

cover · high confidence

Updated gproc test reference outputs to reflect ETS tid fix

The reference output files for the gproc test suite (t\_reg\_or\_locate2, t\_simple\_reg, t\_simple\_reg\_or\_locate, test3, and test4) have been updated. These changes correspond to the fix for ETS tids in heir messages, ensuring the test expectations align with the corrected behavior.

tests-real/suites/gproc/ref · high confidence

Test coverage

Add Erlang test cases for dets race conditions; Add Makefile-based test suite for the makefile component; Add gproc test suite with Concuerror verification; Added EUnit tests for time formatting and option validation; Added Python 3 test runner and test templates for Concuerror; Added exhaustive concurrency test for message delivery scenarios; Added output test suite for ConcuError; Added syntax instrumentation tests for Erlang constructs; Added test coverage for Concuerror bounding algorithms; Added test coverage for Erlang timer and maps modules; Added tests for the poolboy suite; Added unit tests for Concuerror internal modules; Expanded Concuerror test coverage for advanced concurrency scenarios; Expanded DPOR test coverage for concurrency analysis; Expanded and restructured option validation tests; Expanded test coverage for concurrency and error handling.

Dependencies

Updated Ruby dependencies for the documentation site

The Ruby dependencies for the documentation site have been updated to their latest compatible versions. This includes bumps to key libraries such as nokogiri, activesupport, faraday, rexml, commonmarker, and addressable, ensuring the site uses the most recent, stable releases of these tools.

(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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 66 → 73 (+6.8)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 86 → 84 (-2.4)
  • Architecture 100 → 100 (+0.0)
  • Maturity 55 → 60 (+5.9)
  • Readiness 64 → 80 (+15.9)
  • Security 83 → 86 (+2.2)
  • Event Sourcing 100 → 100 (+0.0)

Resolved (28)

  • Concentrated knowledge decay
  • Coverage not included — suite not readable by the collector
  • Dependency hygiene not measured — dependency manifest found but not parsed for hygiene
  • FileTooLong: old_source/concuerror.erl (resources/old_source/concuerror.erl)
  • FileTooLong: old_source/concuerror_gui.erl (resources/old_source/concuerror_gui.erl)
  • FileTooLong: old_source/concuerror_rep.erl (resources/old_source/concuerror_rep.erl)
  • FileTooLong: old_source/concuerror_sched.erl (resources/old_source/concuerror_sched.erl)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • Largest orphaned file (resources/old_source/concuerror_gui.erl)
  • Largest orphaned file (resources/old_source/concuerror_sched.erl)
  • Largest orphaned file (src/concuerror_callback.erl)
  • No exposed public API
  • Off-boarding risk: anonymized user #1
  • Test reliability not included
  • The README links to a GitHub clone command but does not mention Hex.pm availability or how to add Concuerror as a dependency in an Erlang project. (docs/download.md)
  • The heisenbug tutorial is excellent, but it ends mid-sentence ('Could Concuerror find the concurrency bug it had?') and clips before explaining how to run Concuerror with EUnit on single tests rather than a suite. (_posts/2017-10-08-concuerror-eunit.md)
  • TooManyMethods: concuerror_callback (src/concuerror_callback.erl)
  • …and 8 more

New (104)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no installation or build instructions
  • Documentation: no usage examples
  • Duplicated block (13 lines × 2) (src/concuerror_logger.erl)
  • Duplicated block (18 lines × 2) (resources/perm_tests/src/depend_4_1.erl)
  • Duplicated block (21 lines × 2) (tests-real/suites/options/src/first_and_other_deadlock.erl)
  • Duplicated block (5 lines × 13) (resources/perm_tests/src/complete_test_3.erl)
  • Duplicated block (5 lines × 2) (src/concuerror_callback.erl)
  • Duplicated block (5 lines × 2) (src/concuerror_dependencies.erl)
  • Duplicated block (5 lines × 2) (src/concuerror_dependencies.erl)
  • Duplicated block (5 lines × 4) (resources/perm_tests/src/complete_test_3.erl)
  • Duplicated block (7 lines × 2) (resources/erlang_questions/dets_bugs/alt_dets_bugs.erl)
  • Duplicated block (7 lines × 2) (resources/perm_tests/src/depend_6_4.erl)
  • Duplicated block (7–8 lines × 3) (resources/perm_tests/src/depend_4_1.erl)
  • Duplicated block (8 lines × 2) (resources/perm_tests/src/depend_6_2.erl)
  • Edited copy of a member (18 corresponding lines) (resources/perm_tests/src/depend_4_1.erl)
  • Further orphaned files (smaller)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 84 more

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

Survey your own repository

parapluu/Concuerror 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 23 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 0cbd2fc2acd7e1e01dc92c41c303f7f37b13dcca — 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-955b9cee9818.