Skip to content
CAI
Software that uses CAICheck a score

fthomas/refined

62.8

Adequate · 27 September 2026

5.7k

lines of production code

Scala

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the Refined library, a Scala type-level refinement framework that enforces value constraints at compile time to ensure data validity. It provides a core API for defining and validating predicates across numeric, string, and collection types, with specific support for Scala 3 opaque types and native inference. The library extends its capabilities through integrated modules for popular functional libraries like Cats and Scalaz, as well as utilities for configuration parsing, command-line arguments, and testing.

How it got here

2015–2016 — Scala 3 migration and API modernization

15 changes.

The project underwent a major architectural overhaul to support Scala 3 and cross-compilation across JVM, JavaScript, and Native platforms, replacing the legacy build system with modern sbt tooling. This period focused on rebuilding the core validation API, removing deprecated infrastructure, and introducing new integration modules for Scalaz and scodec alongside comprehensive test coverage.

2017–2018 — integration expansion and testing

15 changes.

This period focused on expanding the library's ecosystem by adding integration modules for Cats, Shapeless, scopt, Pureconfig, and JSON path validation. Significant effort was also dedicated to enhancing test coverage across core types, scalacheck, and the new integrations, alongside introducing runtime expression evaluation and performance benchmarks.

2019–2023 — Scala 3 migration and type expansion

14 changes.

The project undertook a comprehensive migration to support Scala 3, replacing the shapeless-based implementation with native features such as opaque types, inline implicits, and infix syntax. This effort expanded the library's capabilities by introducing new refined types for networking, strings, time, and digests, while restructuring the core API for better compatibility and usability. Extensive test suites were added to ensure correctness across both Scala 2 and Scala 3 environments.

Features

Add JMH benchmark suite for Refined performance measurement

A new benchmark module has been added to the project, introducing JMH-based performance tests for key Refined operations. This includes benchmarks for macro inference (autoInfer), type refinement (autoRefineV), unsafe value creation (PosInt.unsafeFrom), and validated refinement (refineV) for both numeric and string types. The benchmarks are configured to measure average execution time in nanoseconds, providing a baseline for tracking performance improvements in macro expansion and runtime validation.

modules/benchmark · high confidence

Add Pureconfig integration for Scala 3

This change introduces support for the Pureconfig library in Scala 3 by moving the integration code to a shared module and providing version-specific implementations. For Scala 3, it uses Scala 3 macros to describe types, while Scala 2 continues to use reflection-based type tags. This enables users to read and write refined types from configuration files in Scala 3 projects.

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

Add scodec integration for refined types

This change introduces a new \scodec\ module that integrates the refined library with the scodec codec framework. It provides a \RefTypeCodec\ instance, allowing users to encode and decode refined types (such as \PosInt\) directly, where decoding automatically validates the predicate and fails if the value does not satisfy the constraint. Additionally, it adds specific validation support for \ByteVector\ size predicates, enabling refined checks on the length of byte vectors during validation.

modules/scodec · high confidence

Add scopt module for refined type parsing

A new \scopt\ module has been added to provide seamless integration between the refined library and the scopt command-line parser. This module supplies an implicit \Read\ instance for refined types, allowing users to define scopt options that automatically validate input against refined predicates. If a parsed value fails validation, the parser will reject it, ensuring that configuration objects only contain valid data.

modules/scopt · high confidence

Add string utility module for validated type construction

A new \string\ utility module has been added to \eu.timepit.refined.util\, providing factory methods to construct \Regex\, \URI\, \URL\, \UUID\, and \XPathExpression\ instances from strings validated by refined types. This allows users to safely instantiate these standard library types using statically checked string constraints.

modules/core/shared/src/main/scala/eu/timepit/refined/util · high confidence

Added JSON path validation for strings

Users can now validate that a String contains a syntactically correct JSON path using the new \JSONPath\ refinement type in the \eu.timepit.refined.jsonpath\ package. This feature leverages the \com.jayway.jsonpath\ library to compile and verify path expressions, ensuring that strings conform to valid JSON path syntax before being used in refined contexts.

modules/jsonpath · high confidence

Adds Scalaz integration with automatic typeclass derivation

This change introduces a new Scalaz module providing seamless integration between Refined and Scalaz. It adds a \RefType\ implementation for Scalaz's \@@\ tag type, enabling automatic refinement via the \auto\ object. The module includes a \derivation\ object that automatically generates typeclass instances (such as \Equal\ and \Show\) for refined types by leveraging Scalaz's \Contravariant\ and \MonadError\ capabilities. Additionally, it provides syntax helpers for validating refined types against Scalaz's \ValidationNel\ error handling, while deprecating the previous generic derivation methods in favor of this new organized structure.

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

Compile-time refinement for BigInt and BigDecimal literals

The Scala 3.0- macro implementation now supports compile-time validation for \BigInt\ and \BigDecimal\ literal values. By introducing \BigIntMatcher\ and \BigDecimalMatcher\ utilities and caching validation instances for these types, the library can now refine these numeric types at compile time, preventing runtime errors for invalid constants just as it does for standard numeric types like \Int\ and \Double\.

modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/macros · high confidence

Expanded Cats integration with derivation, syntax, and numeric instances

The Cats module now provides comprehensive support for Cats typeclasses and syntax. It introduces generic derivation instances (via \Contravariant\ and \MonadError\) for encoding/decoding refined types, and adds \Eq\, \Order\, and \Show\ instances for refined types. New syntax extensions allow validating refined types into \ValidatedNel\/\ValidatedNec\ and provide \take\ operations for \NonEmptyList\ and \NonEmptyVector\. Additionally, commutative semigroup and monoid instances are added for positive/negative numeric refined types, handling overflow by shifting values, and an \UnorderedFoldable\ instance is provided to validate collection sizes.

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

Introduce runtime expression evaluation for refined predicates

Users can now define validation predicates using string-based Scala expressions that are evaluated at runtime via the Scala ToolBox. This change adds an \Eval\ type and corresponding \Validate\ instance in the \modules/eval\ module, allowing predicates like \Eval\[W.\"(x: Int) =\> x % 2 == 0"\.T\]\ to be used with refined types. The implementation caches the ToolBox instance for performance and includes tests verifying correct evaluation of expressions, proper handling of parameter types, and appropriate error throwing for out-of-scope variables.

modules/eval · high confidence

New Char validation predicates added

The library now includes a new \char\ module providing validation predicates for \Char\ values, specifically \Digit\, \Letter\, \LowerCase\, \UpperCase\, and \Whitespace\, along with a combined \LetterOrDigit\ type alias. Users can now refine \Char\ types using these built-in validators to enforce character classification constraints.

modules/core/shared/src/main/scala/eu/timepit/refined · high confidence

New predefined refined types for characters, numbers, and more

The \eu.timepit.refined.types\ package now provides a comprehensive set of predefined refined types, organized into specific modules. Users can now import \Char\ types like \LowerCaseChar\ and \UpperCaseChar\, as well as a wide range of numeric types including \PosInt\, \NonNegLong\, \NegDouble\, and \NonNaNFloat\/\NonNaNDouble\. These types are also aggregated in the \all\ module for convenient bulk imports, simplifying the use of common refined constraints without needing to define them manually.

modules/core/shared/src/main/scala/eu/timepit/refined/types · high confidence

New refined types for digests, networking, strings, and time

The \eu.timepit.refined.types\ package now exposes new type aliases and companion objects for message digests (MD5, SHA1, SHA224, SHA256, SHA384, SHA512), network identifiers (port numbers, RFC1918/RFC5737/RFC3927 private and test networks), string constraints (finite, non-empty, trimmed, hex), and time units (month, day, hour, minute, second, millisecond). These types are available in the \scala-3.0-\ source directory and provide compile-time validation for these common data categories.

modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/types · high confidence

New refined types for network, string, time, and digest validation

The Scala 3 source directory now includes dedicated modules for network, string, time, and digest types. Users can validate port numbers (including system, user, and dynamic ranges) and IPv4 addresses against RFC1918, RFC5737, and RFC3927 standards. String validation now supports finite lengths with optional truncation, non-empty checks, trimming, and hexadecimal formatting. Time components (month, day, hour, minute, second, millisecond) are enforced via numeric intervals, and message digests (MD5, SHA1, SHA224, SHA256, SHA384, SHA512) are validated by length and hexadecimal format.

modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/types · high confidence

Project initialization and configuration setup

The repository has been initialized with the refined library (version 0.11.4), including the core source code, comprehensive documentation in README.md, and the MIT license. Build and development tooling has been configured via .scalafmt.conf (version 3.11.5), .jvmopts, and .scala-steward.conf. CI/CD infrastructure has been set up using GitHub Actions (replacing the previous Travis CI configuration) and Mergify for automated pull request handling, while code coverage is enabled via .codecov.yml.

(repo-wide) · high confidence

Refined API core types and validation logic

The refined library's core API now explicitly defines the foundational type classes and structures used for refinement. This includes the \Validate\ type class for checking predicates, the \Result\ sealed trait (with \Passed\ and \Failed\ cases) for validation outcomes, and the \Inference\ type class for handling refinement subtyping. Additionally, new \Min\ and \Max\ type classes are introduced to determine the minimum and maximum valid values for refined types, supporting various numeric bounds and logical combinations. The \RefinedType\ trait is also defined to combine \RefType\ and \Validate\ instances, providing methods like \refine\ and \unsafeRefine\ for creating refined values.

modules/core/shared/src/main/scala/eu/timepit/refined/api · high confidence

Refined core predicates and auto-refinement support for Scala 2

This change introduces the core refined library implementation for Scala 2 (via the \scala-3.0-\ source directory), providing compile-time validation and automatic refinement capabilities. It defines predicates for boolean logic (And, Or, Not), numeric comparisons (Greater, Less, Interval), collection properties (Size, Forall, NonEmpty), and string formats (IPv4, IPv6, Regex, Uri). It also includes \auto.scala\, which enables implicit compile-time refinements and type conversions, allowing values to be automatically wrapped in refined types or converted between compatible refined types when valid.

modules/core/shared/src/main/scala-3.0-/eu/timepit/refined · high confidence

Support for Shapeless Typeable on refined types

The shapeless module now provides an implicit Typeable instance for refined types, allowing refined values to be cast and described via Shapeless's Typeable interface. This enables runtime type checking and casting for refined types (e.g., PosInt, String with regex constraints) by validating the underlying value against the refinement predicate during the cast operation. A corresponding test suite verifies successful casts, failed casts when refinements are violated, and the descriptive string output for these types.

modules/shapeless · high confidence

Removals

Removal of core refined validation types and combinators

The \refined\ package's foundational validation infrastructure has been removed, including the \Predicate\ trait, the \refine\ and \refineL\ entry-point functions, and all built-in predicate implementations for boolean logic (\Not\, \And\, \Or\), numeric comparisons (\Less\, \Greater\, \Positive\, \Negative\), and string constraints (\NonEmpty\, \LowerCase\, \UpperCase\). Users can no longer use these types to validate or refine values within this module.

src/main · high confidence

Behavioural changes

Historical download statistics added for 2016–2018

The \data/downloads\ directory now contains monthly CSV files covering download counts and proportions for Scala versions 2.10, 2.11, and 2.12 from June 2016 through June 2018. Each file lists version-specific download volumes, providing a detailed historical record of library adoption over this period.

data · high confidence

Internal refactoring of type inference helpers and error messaging

The internal implementation of refined has been reorganized to improve code structure and maintainability. New internal files have been introduced: \Adjacent.scala\ provides a type class for finding the next greater or smaller value for numeric types, extending \Ordering\; \ApplyRefPartiallyApplied.scala\ and \RefinePartiallyApplied.scala\ contain helper classes to support Scala's type inference for refinement operations; and \Resources.scala\ centralizes string constants and formatting logic for validation error messages. These changes affect the internal mechanics of how refinements are applied and how errors are reported, but do not alter the public API surface.

modules/core/shared/src/main/scala/eu/timepit/refined/internal · high confidence

New predicates package with unified import and binary compatibility fixes

The library introduces a new \eu.timepit.refined.predicates\ package that consolidates all predicate types (boolean, char, collection, generic, numeric, and string) into a single \all\ object for easier importing. This change reorganizes existing predicates into specific sub-packages (e.g., \boolean\, \numeric\) while maintaining binary compatibility through separate traits (\AllPredicatesBinCompat1\, \NumericPredicatesBinCompat1\). Notably, the \NonNaN\ numeric predicate and \HexStringSpec\ string predicate are now explicitly included in these compatibility layers to ensure existing code continues to work without recompilation.

modules/core/shared/src/main/scala/eu/timepit/refined/predicates · high confidence

New release script replaces sbt-release

The project now uses a custom shell script (scripts/release.sh) to manage releases, replacing the previous sbt-release plugin. This script automates the process of updating version numbers in the README and build configuration, creating signed git tags, and pushing changes, while also allowing the old version to be passed as a parameter.

scripts · high confidence

RefType and RefinedTypeOps API restructured for Scala 3 compatibility

The core refinement API in the \scala-3.0-\ source directory has been restructured to support Scala 3 (Dotty) while maintaining Scala 2 compatibility. \RefType\ now provides a cleaner trait-based interface for wrapping and unwrapping refined types, removing the use of existential types in \unwrap\ to resolve compiler errors. \Refined\ is defined as a simple value class, and \RefinedTypeOps\ offers a simplified way to create companion objects for refined types with methods like \from\, \unsafeFrom\, and \unapply\. Deprecated macro-based methods (\unsafeWrapM\, \unsafeRewrapM\, \refineMF\) are retained but marked for removal, encouraging migration to the new non-macro variants.

modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/api · high confidence

Refactored ScalaCheck integration to support Scala 3 and modernized numeric predicates

The scalacheck module has been restructured to provide ScalaCheck Arbitrary instances for refined types, with separate source files for Scala 2 and Scala 3 to handle type-class differences (e.g., using \ValueOf\ in Scala 3 vs \Witness\ in Scala 2). This update introduces comprehensive generators for string predicates (such as \NonEmpty\, \Size\, and numeric string validations), collection predicates (including \NonEmpty\ and \Size\ for Lists and Vectors), and logical predicates (like \Or\). Numeric generation has been modernized to use the \Min\ and \Max\ API instead of the deprecated \Bounded\ type class, and the internal \Adjacent\ utility has been deprecated in favor of the core module's implementation. A generic \Arbitrary\ instance for any refined type is also provided, though it may discard invalid values during generation.

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

Scala 3 support via opaque types and RefType abstraction

The library now supports Scala 3 by introducing a new \RefType\ type class that abstracts refinement operations (wrap, unwrap, refine) and providing a Scala 3-specific implementation of \Refined\ as an opaque type. This change replaces the previous Scala 2 implementation (which relied on shapeless) with native Scala 3 features, including an infix syntax for the \Refined\ type alias and extension methods for value access. Additionally, \RefinedTypeOps\ is provided to simplify the creation of companion objects for refined types, offering \from\ and \unsafeFrom\ methods.

modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/api · high confidence

Scala 3 support with native type inference and infix syntax

The refined library now provides a dedicated source set for Scala 3 (scala-3.0+) that replaces the previous shapeless-based implementation with native Scala 3 features. This change introduces automatic refinement unwrapping via the \auto\ module, allowing refined types to be used as subtypes of their base types without explicit conversion. It also adds compile-time type inference for predicates (e.g., inferring \Greater\[5\]\ implies \GreaterEqual\[5\]\) and enables infix syntax for boolean operators (\And\, \Or\, \Xor\) and numeric comparisons, improving code readability. Additionally, it allows Int and Double literals to be used directly as arguments in predicates, simplifying the definition of numeric constraints.

modules/core/shared/src/main/scala-3.0+/eu/timepit/refined · high confidence

Support for Int and Double literals in numeric predicates (Scala 3.0-)

For users on Scala versions prior to 3.0, the library now allows Int and Double literals to be used directly as universal arguments in numeric predicates (e.g., \Greater\[W.\2.718\.T\]\ or \Less\[W.\1\.T\]\). This is achieved by introducing the \WitnessAs\ type class in the \scala-3.0-\ source directory, which provides implicit conversions from literal types to various numeric base types (Byte, Short, Int, Long, Float, Double, BigDecimal, BigInt). This change enables more concise and intuitive predicate definitions without requiring explicit type annotations or wrapper conversions for common numeric literals.

modules/core/shared/src/main/scala-3.0-/eu/timepit/refined/internal · high confidence

Support for Int and Double literals in numeric predicates via Scala 3 inline implicits

The library now allows Int and Double literals to be used directly as arguments in numeric predicates (such as Greater or Less) when running on Scala 3. This is achieved by introducing a new ToInt type class and replacing the deprecated generic intWitnessAs with specialized inline given instances (e.g., intWitnessAsByte, intWitnessAsDouble) that convert integer literals to the target numeric type at compile time. This change removes the dependency on shapeless for Scala 3 and enables seamless usage like refineV\[Greater\[2.718\]\](BigDecimal(3.141)).

modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/internal · high confidence

Test coverage

Added JVM-specific validation tests for String types; Added Scala 3 test suite for core refined predicates and inference; Added ScalaCheck property tests for refined types; Added comprehensive test coverage for Cats integration; Added comprehensive test coverage for refined types; Added test coverage for auto-unwrap and character validation; Added tests for Cogen instances and NonEmptyString generation; Added tests for RefinedTypeOps; Added tests for Scalaz integration; Added tests for numeric validation refinements in Scala 3; Added tests for refined type configuration conversion; Added tests for scalaz imports and NonEmptyString.show; Added tests for string type refinements and hash validations.

Dependencies

Major build system overhaul and dependency updates

The build configuration has been significantly modernized, introducing centralized version management for key libraries including Cats (2.13.0), PureConfig (0.17.8), Shapeless (2.3.13), and ScalaCheck (1.20.0). The project now officially supports cross-compilation for Scala 2.12, 2.13, and Scala 3 across JVM, JavaScript, and Native platforms, with specific modules like \cats\, \core\, \scalacheck\, and \shapeless\ available on all three targets. Additionally, the build integrates GitHub Actions for CI/CD, Mergify for automated PR handling, and Codecov for coverage reporting, replacing previous CI setups.

(dependencies) · high confidence

Upgrade to sbt 1.13.0 and consolidate build plugins

The build system has been upgraded from sbt 0.13.8 to sbt 1.13.0. This change consolidates previously separate plugin configuration files (plugin-bintray.sbt, plugin-git.sbt, plugin-scalariform.sbt) into a single plugins.sbt file, removing the deprecated bintray and scalariform plugins in favor of sbt-ci-release, sbt-git, and sbt-scalafmt. A new LatestVersion.scala plugin is introduced to manage versioning metadata, and all core build plugins (Scala.js, Scala Native, scoverage, doctest, etc.) are updated to their latest compatible versions.

project · 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 41 → 63 (+22.2)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 100 → 98 (-2.1)
  • Architecture 100 (new)
  • Maturity 50 → 63 (+13.2)
  • Readiness 30 → 53 (+23.0)
  • Security 38 → 65 (+27.7)

Resolved (18)

  • Dimension evaluation failed
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • LLM evaluation failed
  • No artifact signing
  • No automated tests
  • No exposed public API
  • No tests found
  • Test reliability not included

New (40)

  • Duplicated block (10 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/api/RefinedTypeOps.scala)
  • Duplicated block (11 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (11 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (11 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (14 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (14 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (14 lines × 4) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • Duplicated block (15 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (17 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (19 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • Duplicated block (20 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • Duplicated block (21 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (5 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/collection.scala)
  • Duplicated block (5 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/string.scala)
  • Duplicated block (6 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • Duplicated block (6 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • Duplicated block (6 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • Duplicated block (6 lines × 4) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • Duplicated block (66 lines × 2) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/numeric.scala)
  • Duplicated block (7 lines × 6) (modules/core/shared/src/main/scala-3.0+/eu/timepit/refined/boolean.scala)
  • …and 20 more

Changes since last survey

  • 23 commits — 23 feature/other, 0 fixes

By area

  • (repo) — 11 commits
  • project/plugins.sbt — 8 commits
  • project/build.properties — 2 commits
  • (root) — 1 commit
  • modules/core — 1 commit

Notable commits

  • change: Also update sbt-doctest
  • change: Merge pull request #1456 from scala-steward/update/sbt-scalafmt-2.6.2
  • change: Merge pull request #1462 from scala-steward/update/sbt-1.12.15
  • change: Merge pull request #1464 from scala-steward/update/sbt-scala-native-crossproject-1.4.0
  • change: Merge pull request #1465 from scala-steward/update/sbt-ci-release-1.12.1
  • change: Merge pull request #1466 from scala-steward/update/sbt-1.13.0
  • change: Merge pull request #1467 from xuwei-k/wildcard-syntax
  • change: Merge pull request #1470 from scala-steward/update/scalacheck-1.20.0
  • change: Merge pull request #1473 from scala-steward/update/sbt-mima-plugin-1.2.0
  • change: Merge pull request #1474 from scala-steward/update/sbt-git-2.2.0
  • change: Merge pull request #1475 from scala-steward/update/sbt-buildinfo-0.13.2
  • change: Merge pull request #1476 from scala-steward/update/sbt-mima-plugin-1.2.1
  • change: Update sbt, scripted-plugin to 1.12.15
  • change: Update sbt, scripted-plugin to 1.13.0
  • change: Update sbt-buildinfo to 0.13.2
  • change: Update sbt-ci-release to 1.12.1
  • change: Update sbt-git to 2.2.0
  • change: Update sbt-mima-plugin to 1.2.0
  • change: Update sbt-mima-plugin to 1.2.1
  • change: Update sbt-scala-native-crossproject, ... to 1.4.0
  • …and 3 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

fthomas/refined 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 27 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 e2e6672f20783ce60b97a4db9d584fb7dbd51bd0 — 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-d00c643c3f66.