Skip to content
CAI
Software that uses CAICheck a score

fable-compiler/fable-promise

58.9

Adequate · 3 October 2026

943

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an F\# library that provides interoperability with JavaScript asynchronous patterns, specifically focusing on Promise handling and AsyncIterable support. It enables F\# code to interact with JavaScript's for-await...of semantics and simplifies error handling through Result type conversions. The project has recently modernized its infrastructure by migrating to .NET 10 and Fable 5, replacing legacy build tools with EasyBuild and updating its test suite to Scriptorium.

Features

New AsyncIterable support and Promise.allSettled helper

Users can now iterate over JavaScript async iterables using the new AsyncIterable module, which provides create, createCancellable, and iter functions to bridge F\# code with JS for-await...of semantics. Additionally, the Promise module now includes a SettledValue.toResult helper to easily convert Promise.allSettled results into F\# Result types for simpler error handling.

src · high confidence

Removals

Removed custom F\# shell scripting tools

The custom F\# build tooling in the \tools\ directory, specifically \Main.fs\ and \ShellJs.fs\, has been removed. This eliminates the local Fable-based wrapper around the \shelljs\ Node.js library, indicating a shift away from using these specific F\#-based shell utilities for build or publishing tasks.

tools · high confidence

Behavioural changes

Migration to EasyBuild CLI for build and release tasks

The build system has been replaced with an EasyBuild project, introducing a new CLI interface for managing development workflows. Users can now run tests with the 'test' command (supporting a watch mode) and publish NuGet packages via the 'release' command. Additionally, Husky is now integrated to automatically install Git hooks and enforce commit message linting and code formatting on pre-commit.

.husky, build · high confidence

Promise API refactoring and documentation expansion

The core Promise library has been significantly refactored to improve usability and clarity. The public API now includes explicit XML documentation and examples for key functions such as create, sleep, lift, reject, bind, map, and iter. The type signatures have been standardized (e.g., using 'T1/'T2 for generic parameters in bind and map) to enhance type inference and readability. Additionally, the internal implementation has been cleaned up, removing unused imports and private helper functions, resulting in a more maintainable and user-friendly interface for handling asynchronous operations.

Fable.Promise · high confidence

Repository build system and tooling overhaul

The project has migrated its build infrastructure from npm-based scripts to a .NET-centric workflow using EasyBuild and Fable 5. This change introduces a new .NET SDK 10 requirement (global.json), replaces the legacy FSharpLint configuration with Fantomas for code formatting, and updates the build scripts (build.sh/build.bat) to invoke the new EasyBuild project. Additionally, the repository now includes an .editorconfig for consistent F\# formatting, a new Nacara-based documentation configuration, and updated .gitignore rules to exclude Fable output artifacts and the new deploy folder.

(repo-wide) · high confidence

Test coverage

Migrated test suite to Scriptorium and added AsyncIterable tests

The test suite has been ported from a custom setup to the Scriptorium testing framework, replacing previous assertion helpers with Scriptorium's \Nib.Assertion\ and \Quill.Test\ modules. This change also introduces new tests for \AsyncIterable\ support, verifying iteration, cancellation, error handling, and cleanup behaviors, alongside updated tests for Promise/Thenable interoperability.

tests · high confidence

Dependencies

Upgrade to .NET 10 and Fable 5 with new build tooling

The project has been upgraded to target .NET 10 (previously .NET Standard 2.0) and Fable.Core 5.2.0 (previously 2.0.2). The build system has been replaced with EasyBuild, introducing new dependencies like Spectre.Console.Cli and SimpleExec, while the test suite has migrated from Mocha to Scriptorium. Additionally, the source library now includes AsyncIterable support and utilizes the Fable.Package.SDK for packaging.

(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 58 → 59 (+0.8)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 96 → 99 (+2.4)
  • Maturity 53 → 53 (+0.0)
  • Readiness 49 → 49 (-0.2)
  • Security 63 → 61 (-2.1)
  • Performance 100 (new)

Resolved (3)

  • Critical CVE: [GHSA redacted] (package-lock.json)
  • Documentation: no usage examples (README.md)
  • Off-boarding risk: anonymized user #1

New (7)

  • Critical CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • High CVE: [GHSA redacted] (package-lock.json)
  • Off-boarding risk: anonymized user #1
  • Outdated: EasyBuild.Tools
  • Outdated: Fable.Core
  • Outdated: Fable.Package.SDK

Architecture

  • Unchanged — 0 containers · 1 contexts · 0 edges

Written by watchdog.canine.dev from the codebase's own history, inside the signed delivery this page is composed from.

Survey your own repository

fable-compiler/fable-promise 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 3 October 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit 4c069b3f2d2fabc0e2c7458f6664a2fde458fddd — the exact code this score is about.
  • Scored under rubric-2026.10.1 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-4f4226d619ea.