Skip to content
CAI
Software that uses CAICheck a score

eproxus/keysmith

68.2

Adequate · 17 September 2026

512

lines of production code

Erlang

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is an Erlang library for generating and parsing UUIDs and TypeIDs, featuring a modernized CI pipeline and automated release tooling. It provides core functionality for handling UUID variants, including explicit support for nil and max values, with internal types represented as maps for structured data access. The codebase includes comprehensive test coverage and scripts for maintaining test fixtures and managing version releases.

Features

Automated release and test data update scripts

Added \scripts/release.sh\ to automate the Rebar project release process, which handles version bumping, changelog generation, Git tagging, and publishing to Hex.pm and GitHub, with a default dry-run mode for safety. Also added \scripts/update\_test\_data.sh\ to automatically synchronize and clean the \test/fixtures/type\_id\ subtree from the upstream \jetify-com/typeid\ repository, ensuring test fixtures remain up to date.

scripts · high confidence

Behavioural changes

Migrate CI tooling to Mise and modernize verification tasks

The project has replaced its previous tool management and CI configuration with Mise (via mise.toml), removing the legacy .tool-versions and .mise.toml files. This change introduces a unified task runner for verification, including dedicated checks for shell scripts (shellcheck, shfmt), YAML (yamllint), Markdown (markdownlint-cli2), and GitHub Actions (actionlint). The Erlang build process is updated to support Erlang 28 and integrates the eqwalizer\_support plugin for enhanced type checking, while the changelog generation is now handled by git-cliff (cliff.toml). Additionally, Renovate is configured to automate dependency updates.

(repo-wide) · high confidence

Redefines UUID and TypeID internal types to use maps and adds nil/max variants

The internal Erlang type definitions for UUIDs and TypeIDs have been refactored to use map-based specifications (e.g., \uuid\_map/0\) instead of previous tuple or simple atom representations. This change introduces explicit support for 'nil' and 'max' UUID variants as distinct types (\uuid\_nil/0\, \uuid\_max/0\) and restructures the v4 and v7 UUID specs to expose their components (such as random bits and timestamps) via map keys. Users interacting with these types programmatically will need to adapt to the new map-based structure for parsing and generating IDs.

src · high confidence

Test coverage

Updated tests to reflect UUID parsing returning maps instead of tuples

The test suite for the keysmith library has been updated to align with the internal change where \keysmith:parse/2\ now returns a map structure (containing fields like \var\, \ver\, \val\, \bin\, \hex\) rather than a tuple. This includes updating unit tests in \keysmith\_tests.erl\ to match the new map format for UUID v4 and v7 parsing, and modifying property-based tests in \prop\_keysmith.erl\ to verify the new map structures for UUIDs and TypeIDs.

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

Baseline

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

Lenses

  • Code Health 100
  • Architecture 69
  • Maturity 59
  • Readiness 81
  • Security 80

Changes since last survey

  • 73 commits — 70 feature/other, 3 fixes

By area

  • (root) — 34 commits
  • .github/workflows — 26 commits
  • scripts/release.sh — 8 commits
  • src/keysmith.erl — 3 commits
  • (repo) — 1 commit
  • test/fixtures — 1 commit

Notable commits

  • fix: build: Add shell linting and fix glob patterns
  • fix: fix(shellscript): Properly escape variables
  • fix: revert(keysmith): Add back Hank configuration
  • change: Add more badges
  • change: Add renovate.json
  • change: Add test data update script
  • change: Correct linting errors in test data script
  • change: Initial version
  • change: Merge commit '654bc915f06380535cdfb388263ab01806258b4d' as 'test/fixtures/type_id'
  • change: Move yamllint configuration to file
  • change: Remove unused/invalid strategies without matrix
  • change: Squashed 'test/fixtures/type_id/' content from commit 9129b05
  • change: Update DavidAnson/markdownlint-cli2-action action to v17
  • change: Update DavidAnson/markdownlint-cli2-action action to v18
  • change: Update actions/cache action to v4.1.0
  • change: Update actions/cache action to v4.1.2
  • change: Update actions/checkout action to v4.2.0
  • change: Update actions/checkout action to v4.2.1
  • change: Update actions/checkout action to v4.2.2
  • change: Update dependency erlang to v27.1.1
  • …and 53 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

eproxus/keysmith 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 8c886410de63b2378b4ccee6cfe74c27793035f2 — 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.