Skip to content
CAI
Software that uses CAICheck a score

Smaug123/WoofWare.Myriad

66.4

Adequate · 3 October 2026

102k

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 a .NET library providing source generators for F\# projects that automate the creation of command-line argument parsers, HTTP clients, JSON serializers, and test mocks. It enables developers to generate type-safe, dependency-free code from attributes, supporting features like argument negation, catamorphisms, and OpenAPI client scaffolding. The project includes comprehensive test coverage and dependency management tools to ensure the stability and correctness of the generated code.

How it got here

2023 — .NET 9 migration and plugin expansion

11 changes.

The project upgraded its target framework to .NET 9 and restructured the solution, while significantly expanding the WoofWare.Myriad.Plugins library with new source generators for argument parsing, HTTP clients, mocks, and catamorphisms. This feature expansion was accompanied by the removal of legacy plugins and the introduction of comprehensive test suites to verify the correctness of the new generated code and JSON parsing capabilities.

2024–2026 — Attribute-based plugin release and testing

7 changes.

This period focused on the initial release of the WoofWare.Myriad.Plugins.Attributes package, introducing source-generation capabilities for command-line parsing, HTTP clients, mocking, and serialization. Extensive test coverage was added to validate the correctness of these generators, including property-based tests for JSON roundtrips and Swagger client generation. The work also included ensuring build integrity through scripts that verify plugin dependency closure.

Features

ConsumePlugin adds argument negation, capturing mocks, and catamorphism generation

The ConsumePlugin now supports the \\[\<ArgumentNegateWithPrefix\>\]\ attribute, allowing boolean and flag arguments to be explicitly negated via a \--no-\ prefix. It also introduces the \\[\<GenerateCapturingMock\>\]\ attribute, which generates mock implementations that record all method calls for verification, and the \\[\<CreateCatamorphism\>\]\ attribute, which generates catamorphism functions for discriminated unions.

ConsumePlugin · high confidence

Initial release of WoofWare.Myriad.Plugins.Attributes with argument parsing, mocking, and HTTP client generators

This change introduces the WoofWare.Myriad.Plugins.Attributes package (version 3.11), which provides a suite of source-generation attributes for F\# projects. The package includes ArgParser attributes (such as ArgParser, PositionalArgs, ArgumentDefaultValue, and ArgumentHelpText) to generate command-line argument parsers from record types, and RestEase-compatible attributes (Get, Post, BasePath, etc.) to generate HTTP clients from interfaces. It also adds attributes for generating mocks (GenerateMock, GenerateCapturingMock), JSON serialization (JsonSerialize, JsonParse), and catamorphisms (CreateCatamorphism). The diff establishes the public API surface and includes tests to validate the assembly's API stability and versioning.

WoofWare.Myriad.Plugins.Attributes · high confidence

Introduce source generators for argument parsing, HTTP clients, mocks, and catamorphisms

This release adds a suite of new source generators to the WoofWare.Myriad.Plugins library. The ArgParserGenerator creates type-safe command-line argument parsers from F\# types, featuring a self-contained, embedded runtime kernel that ensures generated code is independent of external runtime dependencies and supports features like environment variable defaults, help text, and complex nested structures. The HttpClientGenerator produces RestEase-compatible HTTP client implementations, handling path/query parameters, body serialization, and header management. Additionally, the CapturingInterfaceMockGenerator creates mock objects that record method calls and arguments for testing, the CataGenerator generates catamorphisms for discriminated unions, and the SwaggerClientGenerator provides OpenAPI 3 client scaffolding.

WoofWare.Myriad.Plugins · high confidence

Removals

Removal of UsePlugin entry point

The main entry point file for the UsePlugin project has been removed, eliminating the sample code that demonstrated the usage of RecordType and its Short variant.

UsePlugin · high confidence

Removal of the RemoveOptionsGenerator plugin

The MyriadPlugin no longer includes the RemoveOptionsGenerator, which previously generated record types with optional fields stripped. This capability has been removed from the product.

MyriadPlugin · high confidence

Behavioural changes

Migration to .NET 9 and solution restructuring

The project has upgraded its target framework from .NET 7 to .NET 9, reflected in the updated \global.json\ SDK version (9.0.100) and the Nix flake configuration. The legacy \.sln\ file has been replaced with a new \.slnx\ solution file, and the project structure has been reorganized (e.g., \MyriadPlugin\ renamed to \WoofWare.Myriad.Plugins\). Additionally, the dependency on \Nerdbank.GitVersioning\ has been bumped to version 3.10.94.

(repo-wide) · high confidence

Test coverage

Added comprehensive test suite for the ArgParser plugin; Added property-based tests for JSON serialization roundtrips; Added test coverage for Swagger client generation and OpenAPI 3 parsing; Added test suite for Myriad.Plugins; Added tests for JSON parsing capabilities; Added tests for generated HTTP client behavior; Added tests for the TestCapturingMockGenerator; Added tests for the TestMockGenerator plugin; Added tests for the catamorphism generator; Added validation for plugin dependency closure in packaged builds.

Dependencies

Migrate Nix dependency management from shell script to JSON lockfile

The Nix build configuration has been simplified by replacing the manual \nix/deps.nix\ file and the \nix/fetchDeps.sh\ shell script with a new \nix/deps.json\ lockfile. This change consolidates the dependency definitions for packages such as ApiSurface (5.0.10), fantomas (7.0.6), and Microsoft.NET.Test.Sdk (18.9.0) into a single JSON structure, removing the previous shell-based restoration logic.

nix · high confidence

Upgrade to .NET 9 and update core dependencies

The project has been upgraded to target .NET 9.0, replacing the previous .NET 7.0 target. This change is accompanied by significant dependency updates, including upgrading the test framework from NUnit 3 to NUnit 4, updating the test SDK to version 18.9.0, and bumping FsCheck to 3.4.0 and FsUnit to 7.1.1. The main plugin library now relies on Myriad.Core 0.8.3 and WoofWare.Whippet.Fantomas 0.7.3, while the attributes package pins FSharp.Core to 4.3.4.

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

Lenses

  • Code Health 97 (new)
  • Architecture 100 → 100 (+0.0)
  • Maturity 54 → 54 (+0.0)
  • Readiness 65 → 67 (+2.5)
  • Security 79 → 75 (-4.2)
  • Domain Modelling 100 → 100 (+0.0)

Resolved (2)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)

New (7)

  • FileTooLong: WoofWare.Myriad.Plugins/ArgParserGenerator.fs (WoofWare.Myriad.Plugins/ArgParserGenerator.fs)
  • FileTooLong: WoofWare.Myriad.Plugins/ArgParserRuntime.fs (WoofWare.Myriad.Plugins/ArgParserRuntime.fs)
  • FileTooLong: WoofWare.Myriad.Plugins/CapturingInterfaceMockGenerator.fs (WoofWare.Myriad.Plugins/CapturingInterfaceMockGenerator.fs)
  • FileTooLong: WoofWare.Myriad.Plugins/JsonParseGenerator.fs (WoofWare.Myriad.Plugins/JsonParseGenerator.fs)
  • FileTooLong: WoofWare.Myriad.Plugins/JsonSerializeGenerator.fs (WoofWare.Myriad.Plugins/JsonSerializeGenerator.fs)
  • FileTooLong: WoofWare.Myriad.Plugins/OpenApi3.fs (WoofWare.Myriad.Plugins/OpenApi3.fs)
  • FileTooLong: WoofWare.Myriad.Plugins/SwaggerClientGenerator.fs (WoofWare.Myriad.Plugins/SwaggerClientGenerator.fs)

Changes since last survey

  • 2 commits — 2 feature/other, 0 fixes

By area

  • (root) — 2 commits

Notable commits

  • change: Automated commit (#636)
  • change: Automated commit (#639)

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

Survey your own repository

Smaug123/WoofWare.Myriad 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 707d537b0b2649e831c5b7da09e45e3a11bb41e4 — 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.