Skip to content
CAI
Software that uses CAICheck a score

cb372/cats-retry

54.0

Adequate · 20 September 2026

741

lines of production code

Scala

primary language

1

measurement over time

CAI band scale
CAI lens gauges

What this system is

This system is a Scala library providing retry mechanisms for functional programming effects, specifically supporting Cats Effect and Cats MTL. It offers granular control over retry policies, including various backoff strategies and error handling, with cross-platform support for both JVM and Scala.js. The codebase has been modernized to Scala 3 and includes comprehensive testing for its core retry logic and policy compositions.

Features

Add MTL-based retry support for Handle errors

Users can now retry actions that raise errors via the cats-mtl \Handle\ type class. This new \retry.mtl\ module provides a \retryingOnErrors\ function and a \retryingOnMtlErrors\ extension method, allowing retry policies and error handlers to work with MTL-style error effects (such as \EitherT\) alongside the existing exception-based retry syntax.

modules/mtl · high confidence

Removals

Removal of retry module implementation

The retry functionality has been removed from the codebase. This change deletes the core implementation files for the retry mechanism, including the \RetryPolicy\ definition and its Monoid instance, policy helpers like constant delay and exponential backoff, the \NextStep\ and \RetryVerdict\ types, the \Sleep\ abstraction for handling delays, and the main \retrying\ entry points in the package object. Users can no longer use these APIs to perform retryable actions.

src/main · high confidence

Behavioural changes

Migration to Scala 3 and Scalafmt 3.11.1

The project has migrated its codebase to Scala 3, updating the build configuration to use the \scala3\ dialect and enabling specific Scala 3 syntax rewrites (such as converting to new syntax and removing optional braces). This change is accompanied by an upgrade to Scalafmt version 3.11.1, which enforces the new formatting rules and increases the maximum column width to 110 characters.

(repo-wide) · high confidence

Retry library rewritten for Cats Effect 2 and Scala 3

The retry module has been completely rewritten to support Cats Effect 2 and Scala 3, introducing a new API with \retryingOnFailures\, \retryingOnErrors\, and \retryingOnFailuresAndErrors\ entry points. The core logic now uses \HandlerDecision\ and \PolicyDecision\ enums to manage retry flow, allowing for more granular control over retry behavior, including the ability to adapt actions during retries. New retry policies like \fibonacciBackoff\ and \fullJitter\ are available, and the library now includes safeguards against integer overflow in delay calculations. The module structure has been simplified, and the codebase is now shared across Scala.js.

modules/core/shared/src/main · high confidence

Test coverage

Added comprehensive test suite for the retry module; Removed retry library test suite.

Dependencies

Upgrade to Scala 3 and Cats 2.13 with multi-platform support

The build configuration has been updated to target Scala 3.3.6 and upgrade core dependencies, including Cats to 2.13.0, Cats Effect to 3.7.1, and Cats MTL to 1.7.0. The project structure has been reorganized into cross-compiled modules for both JVM and JS platforms (core and mtl-retry), replacing the previous single-module setup. Test dependencies have also been modernized to use Munit (1.3.1) and related ecosystem libraries.

(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 54.

Lenses

  • Code Health 100
  • Architecture 69
  • Maturity 48
  • Readiness 46
  • Security 72

Changes since last survey

  • 300 commits — 290 feature/other, 10 fixes

By area

  • (root) — 83 commits
  • (repo) — 70 commits
  • project/plugins.sbt — 53 commits
  • modules/core — 31 commits
  • project/build.properties — 31 commits
  • modules/docs — 15 commits
  • .github/workflows — 13 commits
  • modules/mtl — 4 commits

Notable commits

  • fix: Fix #283: Change bool functions to m bool
  • fix: Fix code sample in doc
  • fix: Fix compile error on Scala 2.11 (hangs head in shame)
  • fix: Fix the installation of Jekyll in CI (#553)
  • fix: Fix the type signatures in the docs
  • fix: Merge pull request #119 from cb372/fix-116
  • fix: Merge pull request #138 from cb372/fix-syntax-example
  • fix: Merge pull request #141 from cb372/fix-compile-error
  • fix: Merge pull request #264 from cb372/fix-type-sigs-in-docs
  • fix: fix: #582, avoid fibonacci overflow (#602)
  • change: "migrate" to cats effect 3 (#305)
  • change: - Drop Scala 2.11 support - Update scalajs to 1.2.0 - Update cats, cats-effect to 2.2.0 - Update cats-mtl to 1.0.0
  • change: Add Luka to list of developers
  • change: Add Show instance
  • change: Add a combinators cheat sheet
  • change: Add a publishing step to the CI workflow temporarily
  • change: Add a test to reproduce #116
  • change: Add ability to pretty print policies
  • change: Add boolean field givingUp
  • change: Add common fields to RetryDetails
  • …and 280 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

cb372/cats-retry 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 20 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 b4b7b94412cc60ea23db34a1234a881cbd76e279 — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-b51f968c9b10.