Skip to content
CAI
Software that uses CAICheck a score

jack-pappas/ExtCore

46.0

Weak · 24 September 2026

38.9k

lines of production code

F#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

ExtCore is a functional programming utility library for F\# that provides core data structures and utilities. It implements high-performance collections such as IntMap, IntSet, and HashMap, alongside an LRU cache and command-line argument parsing. The system is designed for cross-platform compatibility, supporting multiple .NET Standard and .NET Core versions, and includes comprehensive unit tests and performance benchmarks to ensure correctness and efficiency.

Features

Add .editorconfig for consistent code formatting

An .editorconfig file has been added to the repository to enforce consistent code formatting rules, specifically setting 4-space indentation for F\# source files (.fs, .fsi, .fsl, .fsy) and globally enabling trailing whitespace trimming and final newlines.

(repo-wide) · high confidence

Added command-line argument parsing and LRU cache implementations

Introduced a new ExtCore.Args module for parsing command-line arguments, including an ArgInfo type and ArgParser class that support various argument types (string, int, float, unit, set/clear flags) and display usage text. Additionally, added a new ExtCore.Caching module containing an LruCache implementation with full functionality, including creation, retrieval, and equality comparison, along with corresponding unit tests.

ExtCore · high confidence

Behavioural changes

Enabled automatic NuGet package restore during build

The project now includes NuGet configuration files (NuGet.Config and NuGet.targets) that enable automatic package restoration before building. This ensures that all required packages are downloaded and restored automatically during the build process, eliminating the need for manual package restoration steps.

.nuget · high confidence

Test coverage

Added benchmarks for IntMap and IntSet performance; Expanded unit test coverage for ExtCore collections and caching modules.

Dependencies

Added NuGet package repository configuration

A new file, packages/repositories.config, was added to configure the local package repository path for the ExtCore.Tests project. This change affects how the build system locates and resolves NuGet packages for the test project.

packages · high confidence

ExtCore project files migrated to SDK-style format with multi-targeting support

The ExtCore library and its test/benchmark projects have been converted to the modern SDK-style .fsproj format. ExtCore now targets netstandard1.6, netstandard2.0, and net45, while the test project targets netcoreapp1.1, netcoreapp2.0, and net45. This enables building for multiple .NET platforms and using the SDK's built-in test runner and package management.

(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

Score

  • CAI 49 → 46 (-2.8)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 73 → 70 (-2.5)
  • Architecture 100 → 100 (+0.0)
  • Maturity 18 → 26 (+7.4)
  • Readiness 67 → 67 (+0.0)
  • Security 100 → 55 (-45.0)

Resolved (216)

  • Dependency hygiene not measured — no packages were read
  • Duplicated block (10 lines × 2) (ExtCore/Collections.HashSet.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.LongMap.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.LongMap.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.ResizeArray.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.Vector.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.Maybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderChoice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderChoice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderChoice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderMaybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderMaybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderMaybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderMaybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderMaybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderState.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.State.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.State.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.State.fs)
  • Duplicated block (10 lines × 4) (ExtCore/ControlCollections.ReaderProtectedState.fs)
  • …and 196 more

New (252)

  • Documentation: no installation or build instructions (README.rst)
  • Documentation: no usage examples (README.rst)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.Array.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.IntMap.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.IntMap.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.IntMap.fs)
  • Duplicated block (10 lines × 2) (ExtCore/Collections.ResizeArray.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.Choice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.Choice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.Choice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.Choice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.Maybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.Maybe.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ProtectedState.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderChoice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderChoice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderChoice.fs)
  • Duplicated block (10 lines × 2) (ExtCore/ControlCollections.ReaderChoice.fs)
  • Duplicated block (10 lines × 3) (ExtCore/Collections.Array.fs)
  • Duplicated block (10 lines × 3) (ExtCore/ControlCollections.ReaderState.fs)
  • …and 232 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

jack-pappas/ExtCore 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 24 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 86ff5620eee77b972ee3e929b982b189c6fe355d — 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-923689c465cf.