uwiger/plain_fsm
57.7
Adequate · 2 October 2026
1.2k
lines of production code
Erlang
primary language
2
measurements over time
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
Copyright update and tail\_apply macro added to plain\_fsm.hrl
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.