Skip to content
CAI
Software that uses CAICheck a score

uwiger/plain_fsm

57.7

Adequate · 2 October 2026

1.2k

lines of production code

Erlang

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the plain\_fsm library, a finite state machine implementation for Erlang/OTP. It provides core state machine functionality along with system integration callbacks for debugging, state inspection, and code changes. The project includes an example module and a comprehensive test suite to verify behavior and compatibility with modern OTP versions.

Behavioural changes

Add current\_function/0 support and update sys callbacks

The plain\_fsm library now exposes a new \current\_function/0\ API, allowing state machines to query their active function context, which is utilized by the example module for improved debug logging. Additionally, the library implements the \system\_get\_state/1\ and \system\_replace\_state/2\ callbacks to address warnings in newer OTP versions and ensure compatibility with the \sys\ module, while the version is bumped to 1.4.9.

src · high confidence

Migration to rebar3 and updated build tooling

The project has migrated from the legacy rebar to rebar3, updating the Makefile to use rebar3 commands for compilation, testing (switching from eunit to common\_test), and documentation. A new .gitignore file has been added to exclude build artifacts, and the rebar.config now specifies a minimum OTP version of 26.1, configures ex\_doc for documentation generation with edown, and includes dialyzer settings. The license has been updated to Apache 2.0 with current copyright years, and the README has been refreshed to reflect the library's usage and history.

(repo-wide) · high confidence

Fixes

The plain\_fsm.hrl header file has been updated to reflect the current copyright holder (Ulf Wiger, 2014-16) and updated contact information. Additionally, a new tail\_apply/5 macro has been introduced, which wraps the plain\_fsm:tail\_apply function call with the current module's data version, facilitating state transitions in the finite state machine.

include · high confidence

Test coverage

Added Common Test suite for plain\_fsm behavior and system integration

Added a new Common Test suite (plain\_fsm\_SUITE) and supporting test callback modules (pfsm\_er, pfsm\_manual) to verify the plain\_fsm library. The tests cover start APIs (spawn, spawn\_link, spawn\_opt, start\_opt), three system-message handling styles (explicit handle\_system\_msg, catch-all handle\_msg, and extended\_receive), metadata operations (info, store\_name), OTP sys integration (status, suspend/resume, state replacement, code change), and advanced features like hibernation, tail\_apply, and parent exit handling.

test · high confidence

Dependencies

Plain\_fsm library version updated to 1.4.9

The plain\_fsm application metadata has been updated to version 1.4.9, reflecting the latest release of the library. This change ensures that the application manifest correctly identifies the current version of the core modules (fsm\_example, plain\_fsm, plain\_fsm\_xform) included in the build.

ebin · high confidence

Housekeeping

Regenerated documentation using edown

The project documentation in the doc/ directory has been regenerated using the edown tool, converting EDoc source files (such as overview.edoc) into Markdown format. This update includes new or refreshed documentation files for the plain\_fsm, fsm\_example, and plain\_fsm\_xform modules, along with a README and stylesheet, ensuring the API reference and usage guides reflect the current state of the codebase.

doc · 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 57 → 58 (+1.0)
  • Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 69 → 69 (+0.0)
  • Maturity 38 → 38 (+0.0)
  • Readiness 64 → 68 (+3.7)
  • Security 100 → 100 (+0.0)

Resolved (3)

  • Coverage not measured — no coverage collector is wired up
  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (1)

  • Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)

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

Survey your own repository

uwiger/plain_fsm 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 2 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 8ccaf4bc9d5ae26f87dc3bbdc30261b3396db25b — the exact code this score is about.
  • Scored under rubric-2026.09.18 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-e569280dd5e2.