kafka4beam/snabbkaffe
59.2
Adequate · 2 October 2026
2.4k
lines of production code
Erlang
primary language
2
measurements over time
What this system is
Snabbkaffe is a trace-based testing framework for Erlang that instruments code to capture event sequences for validation. It enables developers to split tests into run and check stages, supporting fault injection, concurrency bug detection via Concuerror, and real-time event waiting. The system provides utilities for trace analysis, diffing, and resilience testing within OTP supervision trees.
Features
Comprehensive documentation for Snabbkaffe features and usage
The documentation has been significantly expanded and restructured to cover the full lifecycle of using Snabbkaffe. New chapters explain how to emit events using trace macros like \?tp\ and \?tp\_span\, including the new \?tp\_ignore\_side\_effects\_in\_prod\ for optimizing hot paths. Users can now learn about fault injection capabilities via \?inject\_crash\ and various nemesis scenarios, as well as scheduling injection with \?force\_ordering\ to test race conditions. The guide details real-time event waiting in the run stage using \?block\_until\ and \?wait\_async\_action\, and provides extensive coverage of offline trace analysis macros such as \?strict\_causality\ and \?of\_kind\. Additionally, the docs now include a section on benchmarking with metrics and a script to extract test code from documentation.
doc · high confidence
Initial release of Snabbkaffe trace-based test framework
This commit introduces Snabbkaffe, a lightweight, dependency-free trace-based test framework for Erlang. It enables users to instrument code with trace points and split test cases into a run stage (emitting events) and a check stage (validating the trace history). The release includes core features such as fault and delay injection for testing supervision trees, support for Concuerror to detect concurrency bugs, and the ability to publish documentation via GitHub Pages. The project is configured for OTP 21.0+ and includes a Makefile for running tests, dialyzer, and xref checks.
(repo-wide) · high confidence
Initial release of the snabbkaffe trace-based testing framework
This change introduces the core snabbkaffe library, providing a trace-based testing framework for Erlang. It adds the main API module (snabbkaffe.erl) for capturing trace points, collecting traces, and asserting on event sequences, alongside a collector (snabbkaffe\_collector.erl) for handling event buffering and subscriptions. The release also includes a fault-injection 'nemesis' (snabbkaffe\_nemesis.erl) for testing system resilience via crashes and delays, a diffing utility (snabbkaffe\_diff.erl) for comparing large lists in test assertions, and an ASCII art module (asciiart.erl) for rendering statistical plots. The application structure is defined by a new supervisor (snabbkaffe\_sup.erl) and internal headers.
src · high confidence
Behavioural changes
Refactor include files into modular components
The single snabbkaffe.hrl header has been split into several focused include files (common.hrl, trace.hrl, trace\_test.hrl, trace\_prod.hrl, test\_macros.hrl, and ct\_boilerplate.hrl) to improve organization and maintainability. This change introduces environment-specific trace behavior: production builds now log events via the standard logger with metadata (MFA, line, file) and support customizable kind macros, while test builds continue to capture traces for analysis. A new Common Test boilerplate module is provided to automate trace lifecycle management (start/stop/analyze) within test cases.
include · high confidence
Test coverage
Added test suite for trace analysis and concurrency features
Added comprehensive test coverage for the tracing library, including EUnit tests for causality checks, projection completeness, subset validation, and overlap depth calculations. The suite also introduces Common Test (CT) cases for the collector, nemesis (error injection), remote tracing across nodes, and the run/check\_trace macro, alongside specific tests for concurrency behaviors under Concuerror.
test · 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 59 → 59 (+0.4)
- Rubric changed (rubric-2026.09.12 → rubric-2026.09.18) — scores are not directly comparable.
Lenses
- Code Health 96 → 96 (+0.0)
- Architecture 100 → 100 (+0.0)
- Maturity 36 → 36 (+0.0)
- Readiness 63 → 63 (+0.0)
- Security 92 → 95 (+2.7)
Resolved (1)
- Coverage not measured — no coverage collector is wired up
New (1)
- Dependency hygiene PARTLY measured — rebar3 pinning read, dependency currency not (no rebar.lock-pinned Hex declaration to grade)
Changes since last survey
- 4 commits — 4 feature/other, 0 fixes
By area
- .github/workflows — 2 commits
- (repo) — 1 commit
- (root) — 1 commit
Notable commits
- change: Merge pull request #69 from kafka4beam/dev/dont-crash-with-begin-trace-time
- change: Remove concuerror target from CI
- change: Update dependencies
- change: ci: Update OTP versions
Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.
Survey your own repository
kafka4beam/snabbkaffe 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 c3b97e41957b035d165e760932e921bb75173e90 — 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.