Skip to content
CAI
Software that uses CAICheck a score

kant2002/FSharpPacker

57.1

Adequate · 2 October 2026

336

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

FSharpPacker is a command-line tool that packages F\# script files (.fsx) into self-contained executables. It processes script directives such as \#load, \#r, and \#i to resolve dependencies and references, then generates a .NET project for compilation. The system supports reproducible builds via Nix and Docker, and handles features like multiple file loading and custom NuGet feeds.

Features

Initial release of FSharpPacker tool with Nix and Docker support

This entry introduces the FSharpPacker tool, which packages F\# script (.fsx) files into self-contained executables. The release includes a new Dockerfile for containerized builds, Nix flake definitions (flake.nix, build.nix) for reproducible development and packaging, and a comprehensive README detailing usage, supported FSX directives (such as \#load, \#r, and \#i), and command-line options like --framework, --aot, and --projectref. The solution structure is updated to include the FSharpPacker.FSharp project and test suite, with dependencies managed via a new deps.json file.

(repo-wide) · high confidence

Behavioural changes

Core F\# script processing engine rewritten in F\#

The internal logic for parsing and processing F\# script files (\.fsx\) has been rewritten from C\# to F\#. This change introduces a new preprocessor (\FsxPreprocessor\) and core processing module (\Packer\) that handle script directives such as \\#r\ (with support for \fsproj\ and \nuget\ references), \\#i\ (package sources), \\#load\, and \\#I\ (include paths). The rewrite ensures that source files are processed in the order they are loaded and correctly resolves relative paths and dependencies during the conversion of scripts into executable projects.

FSharpPacker.FSharp · high confidence

FSharpPacker rewritten in F\# with .NET 6 target

The C\# implementation of FSharpPacker (FsxPreprocessor, Program, SourceFile, NugetReference) has been removed and replaced with an F\# implementation. This change includes a migration to the .NET 6 framework (previously .NET 7 in the generated project template) and introduces support for multiple files in \#load commands, the \#I directive, and specifying the Target Framework Moniker (TFM) via the command line.

FSharpPacker · high confidence

Test coverage

Added test coverage for F\# script preprocessing features

Added unit tests in FSharpPacker.Tests to verify the FsxPreprocessor's handling of various F\# script directives and scenarios. The new tests cover conditional compilation (\#if), project references (\#r fsproj), custom NuGet feeds (\#i), shebang lines, namespace parsing, multiple \#load directives, and file path normalization. The test suite also validates the updated FsxPreprocessor constructor signature (accepting a verbose flag) and ensures correct resolution of assembly and package references.

FSharpPacker.Tests · high confidence

Dependencies

Migration to F\# and .NET 6 with updated test infrastructure

The main application project has been rewritten from C\# to F\# (FSharpPacker.FSharp), targeting .NET 6 and including the Argu CLI parsing library. The previous C\# project has been removed. The test project has been updated to target .NET 6, switched to the MSTest.Sdk, upgraded the coverlet.collector package, and now references the new F\# project instead of the old C\# one.

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

Lenses

  • Code Health 97 → 97 (+0.0)
  • Architecture 54 → 54 (+0.0)
  • Maturity 55 → 55 (+0.0)
  • Readiness 51 → 51 (+0.0)
  • Security 96 → 88 (-8.0)

Resolved (3)

  • Documentation: no architecture or design documentation (README.md)
  • misleading comment (FSharpPacker.Tests/UnitTest1.cs)
  • misleading comment (FSharpPacker.Tests/UnitTest1.cs)

New (3)

  • End-of-life runtime: .NET net6.0
  • misleading comment (FSharpPacker.Tests/UnitTest1.cs)
  • misleading comment (FSharpPacker.Tests/UnitTest1.cs)

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

Survey your own repository

kant2002/FSharpPacker 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 2 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 e5c602ac5f7e7ab10afdc5197d5dd1d5100448a4 — 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-351388015767.