Skip to content
CAI
Software that uses CAICheck a score

tarsgate/fsx

48.6

Weak · 3 October 2026

4.7k

lines of production code

F#

with JavaScript

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is an F\#-based development toolkit and library ecosystem designed to support scripting, automation, and utility functions within the .NET environment. It provides core infrastructure for process execution, Git operations, and network interactions, alongside a suite of F\# scripts for build management, versioning, and directory comparison. The project emphasizes modern .NET 10 compatibility while maintaining legacy framework support through a dual-build architecture and comprehensive test coverage.

Features

New F\# utility scripts for versioning, cleanup, and directory comparison

The Tools directory now includes several new F\# scripts to support development workflows: \bump.fsx\ automates version increments and Git tagging, \clean.fsx\ safely removes build artifacts (bin/obj/packages), \dirDiff.fsx\ compares two directories by checking file counts, names, sizes, and MD5 checksums with optional parallel processing, and \rename.fsx\ validates and corrects file names and timestamps for cross-platform compatibility (e.g., exFAT). Additionally, \fsi.bat\ has been updated to locate the F\# interactive interpreter via \vswhere.exe\ for better Visual Studio integration, and \safeRun.fsx\ provides a robust wrapper for executing commands with logging and error notification.

Tools · high confidence

Behavioural changes

Build and CI infrastructure migrated to .NET 10 and F\# scripts

The build system has been upgraded to target .NET 10, with build scripts (make.fsx, runTests.fsx, publish.fsx) rewritten in F\# to replace legacy shell and batch files. The launcher now defaults to the dotnet runtime, and the installation script copies binaries to the net10.0 output directory. CI pipelines are now defined in a disabled GitLab configuration file that tests against various Mono and .NET versions, while snap packaging scripts remain for Linux distribution.

scripts · high confidence

CI scripts reorganized and new runtime installers added

CI automation scripts have been moved into a dedicated scripts/CI subfolder. New shell scripts were added to install the .NET SDK 5.0 from Microsoft's Ubuntu 20.04 packages and to install Mono/F\# via Microsoft's APT repository, with the Mono installer delegating to a shared helper script.

scripts/CI · high confidence

Fsdk library initialization and .NET 10 upgrade

The Fsdk library has been initialized with new source files (AssemblyInfo, FSharpUtil, Git, Misc, Network, Process, Taiga, Unix) providing core utilities for process execution, Git operations, network downloads, and F\# scripting support. This change also upgrades the target framework from .NET 8 to .NET 10, introducing conditional compilation paths (LEGACY\_FRAMEWORK vs modern .NET) for features like async parallel execution, HTTP client usage, and command-line argument parsing.

src/Fsdk · high confidence

Project overhaul for .NET 10 support with new build system and coding standards

The project has been restructured to support .NET 10, introducing a dual-build architecture with separate solution files for the modern runtime (fsx.sln) and legacy frameworks (fsx-legacy.sln). A new F\#-based build system replaces the previous shell scripts, managed via a Makefile and configure.sh script that detects available build tools (dotnet, msbuild, or xbuild). To ensure code quality, the project now enforces strict coding standards through a .editorconfig file and treats warnings as errors in non-Debug configurations. Additionally, developer guidelines are formalized with a CONTRIBUTING.md file specifying the use of the fantomless-tool for formatting and commitlint for message validation.

(repo-wide) · high confidence

Fixes

Fix stack overflow in Fsdk(Process)

Resolves a stack overflow error occurring within the Fsdk(Process) component. This fix ensures stable execution for processes that previously triggered deep recursion or excessive stack usage, preventing application crashes or hangs during process handling.

dev · medium confidence

Test coverage

Added test coverage for async utilities, exception handling, and TSV parsing; Added test suite for F\# scripting features and process execution.

Dependencies

Upgrade .NET target framework to v10 and migrate to SDK-style projects

The F\# projects (Fsdk, fsx, fsxc, and Fsdk.Tests) have been migrated from legacy MSBuild formats to the modern SDK-style project system and upgraded to target .NET 10.0 (net10.0). This change updates the build tooling and runtime requirements for these components, ensuring compatibility with the latest .NET environment while maintaining legacy framework support via separate -legacy project files.

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

Lenses

  • Code Health 80 → 62 (-17.8)
  • Architecture 94 → 98 (+3.3)
  • Maturity 39 → 39 (-0.0)
  • Readiness 58 → 60 (+1.7)
  • Security 58 → 58 (+0.0)
  • Accessibility 51 → 51 (+0.0)

Resolved (2)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no project overview (README.md)

New (30)

  • Documentation: no project overview (ReadMe.md)
  • Duplicated block (15 lines × 2) (src/Fsdk/Unix.fs)
  • Duplicated block (25 lines × 2) (src/Fsdk/AssemblyInfo.fs)
  • Duplicated block (8 lines × 2) (src/Fsdk/Git.fs)
  • FileTooLong: Fsdk/Unix.fs (src/Fsdk/Unix.fs)
  • FileTooLong: dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • Outdated: FSharp.Core
  • Outdated: Microsoft.NET.Test.Sdk
  • Outdated: NUnit
  • Outdated: NUnit.Analyzers
  • Outdated: NUnit3TestAdapter
  • Outdated: coverlet.collector
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.buildTreePrefix (cognitive 28) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.computeStats (cognitive 41) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.computeStats (cyclomatic 21) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.filterNodes (cyclomatic 18) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.flattenTree (cognitive 19) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.formatToolCall (cognitive 20) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.formatToolCall (cyclomatic 26) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html.getTreeNodeDisplayHtml (cognitive 37) (dev/pi-session-2026-05-30T05-58-52-446Z_019e7776-c31e-70ba-b2d3-6e09131e38b3.html)
  • …and 10 more

Architecture

  • Containers 0 added · 0 removed · contexts 2 added · 0 removed · edges 0 added · 0 removed

Added bounded contexts (2)

  • Fsdk
  • fsx

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

Survey your own repository

tarsgate/fsx 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 79ec1beb86dad1cbb86ceab63e4bf4e37d101309 — 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.