Skip to content
CAI
Software that uses CAICheck a score

g-andrade/steady_vector

70.7

Strong · 17 September 2026

1.1k

lines of production code

Erlang

with Elixir

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is an Erlang/OTP library implementing a persistent vector data structure optimized for tail manipulation. It provides core collection operations such as appending, retrieving, setting, and removing elements, alongside functional utilities like mapping and filtering. The project includes a dedicated benchmarking suite to evaluate performance against standard Erlang data structures and utilizes Common Test for verification.

Features

Added benchmarking suite for SteadyVector

A new benchmarking suite has been added to the \steady\_vector\_bench\ project, allowing users to evaluate the performance of \steady\_vector\ against standard Erlang/Elixir data structures such as lists, maps, arrays, \gb\_trees\, and \dicts\. The suite includes benchmarks for building, shrinking, getting, setting, and folding data, with support for quick iteration modes and optional HTML report generation.

_steady\_vector\bench/bench · high confidence

Introduction of steady\_vector persistent vector library

The application now includes the \steady\_vector\ module, providing a persistent, array-like collection optimized for tail manipulation. Users can create and manipulate vectors using operations such as \append/2\, \get/2\, \set/3\, \remove\_last/1\, \foldl/3\, \foldr/3\, \map/2\, and \filter/2\. The implementation uses a 32-way branching tree structure with structural sharing, offering O(1) size lookup and O(log32(N)) for other operations. The API also includes utility functions like \from\_list/1\, \to\_list/1\, and \is\_steady\_vector/1\.

src · high confidence

Port to Erlang with ExDoc documentation and Common Test suite

The library has been ported from Elixir to Erlang (as \steady\_vector\), providing an Erlang/OTP persistent vector implementation. This change introduces EEP-48 native API documentation rendered via ExDoc, migrates the test suite from EUnit to Common Test, and updates the build tooling to use rebar3 with modern static analysis plugins (erlfmt, hank, elvis) and CI on GitHub Actions.

(repo-wide) · high confidence

Removals

Removal of PersistentVector module

The \PersistentVector\ module has been removed from the library. This deletion eliminates the custom array-like collection implementation that previously provided indexed access, structural sharing, and specific enumeration behaviors.

lib · high confidence

Removed legacy PersistentVector benchmark script

The \bench/bench.exs\ file, which previously contained a monolithic benchmark suite for comparing PersistentVector against Erlang arrays and lists, has been deleted. This change removes the old benchmarking infrastructure in favor of the newly introduced, more granular benchmark capabilities mentioned in the commit history.

bench · high confidence

Behavioural changes

Removed unused application configuration file

The \config/config.exs\ file has been deleted from the project. This file previously contained boilerplate comments and no active configuration settings for the \persistent\_vector\ application or its dependencies, so its removal has no impact on runtime behavior or application setup.

config · high confidence

Test coverage

Migrate tests from ExUnit to Common Test

The test suite has been migrated from the Elixir ExUnit framework to Erlang's Common Test framework. This change involves deleting the previous Elixir test files (\test/PersistentVector\_test.exs\ and \test/test\_helper.exs\) and introducing a new Common Test suite (\test/steady\_vector\_SUITE.erl\) that covers the same \steady\_vector\ functionality, including operations like appending, removing, setting, and converting to/from lists.

test · high confidence

Dependencies

Benchmarking project extracted from main library

The main project's dependency manifest (mix.exs) and lockfile (mix.lock) have been removed, while a new benchmarking application (steady\_vector\_bench) has been added with its own mix.exs and mix.lock. This new benchmark project pins specific versions for the benchmarking tools Benchee (0.11.0) and Benchee HTML (0.4), and explicitly includes the PersistentVector library (0.1.4) as a dependency to facilitate performance comparisons.

(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

Baseline

  • First survey — no prior run to compare against. CAI 71.

Lenses

  • Code Health 98
  • Architecture 69
  • Maturity 66
  • Readiness 72
  • Security 90

Changes since last survey

  • 116 commits — 106 feature/other, 10 fixes

By area

  • (root) — 59 commits
  • src/steady_vector.erl — 30 commits
  • steady_vector_bench/bench — 12 commits
  • .github/workflows — 6 commits
  • src/steady_vector.app.src — 3 commits
  • .circleci/config.yml — 2 commits
  • (repo) — 1 commit
  • .vscode/tasks.json — 1 commit
  • config/config.exs — 1 commit
  • doc/steady_vector.md — 1 commit

Notable commits

  • fix: Circle CI: fix invoked command
  • fix: Fix :remove_last/1 test case
  • fix: Fix crash in :from_list/1
  • fix: Fix crash when removing topmost tree level
  • fix: Fix library version mentioned in documentation
  • fix: Fix wrong iteration order on :foldl/3
  • fix: Fixed bug in reduce_root: first call to Enumerable.reduce can be with {:halt, acc}
  • fix: Fixed link to license
  • fix: Revert "Add OTP 22.1 to Travis targets"
  • fix: Travis CI: fix declaration of disabled OTP versions
  • change: 3X speed up of enumeration
  • change: Ability to run individual benchmarks
  • change: Adapt PersistentVector's benchmarks to our use case
  • change: Add :filter/2 and its test case
  • change: Add :foldr/3 and its test case
  • change: Add :foreach/2 and its test cases
  • change: Add :from_list/1 and :to_list/1 test cases
  • change: Add :is_steady_vector/1
  • change: Add :map/2 and its test case
  • change: Add OTP 20.2, 20.3, 21.0, 21.1 and 21.2 to Travis targets
  • …and 96 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

g-andrade/steady_vector 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 17 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 4002422495d009da7f7cc840d9f522c1229a3598 — the exact code this score is about.
  • Scored under rubric-2026.09.13 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-d1ef6c0bd534.