Skip to content
CAI
Software that uses CAICheck a score

pviotti/sayit

53.2

Adequate · 3 October 2026

227

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

SayIt is a command-line interface tool that converts text to speech using Azure Cognitive Services. It allows users to synthesize audio from standard input or arguments, supporting various neural voices and output formats like MP3 and PCM. The system includes configuration management for default settings and comprehensive unit testing to ensure reliability.

Features

Initial project structure and documentation

This release establishes the foundational project structure for SayIt, including the addition of a LICENSE file, a comprehensive README with setup and usage instructions, and developer notes regarding .NET packaging and CoreRT limitations. The solution file has been renamed to SayIt.sln, the main project folder has been standardized to 'SayIt', and a new test project 'SayIt.Tests' has been added to the solution. Additionally, the .gitignore file has been updated to exclude common IDE and coverage artifacts.

(repo-wide) · high confidence

Initial release of SayIt CLI for Azure Speech synthesis

This change introduces the SayIt command-line tool, allowing users to convert text to speech using Azure Cognitive Services. Users can provide input via command-line arguments or standard input, select from a set of neural voices (e.g., en-US-GuyNeural) and output formats (e.g., MP3, PCM), and configure default settings via a setup wizard. The tool supports listing available voices and formats, saving configuration to a file, and handling errors such as connection or authentication failures.

SayIt · high confidence

Removals

Removal of hardcoded Azure Speech CLI entry point

The \src/Program.fs\ file, which previously served as the application's entry point for generating speech via the Azure Cognitive Services Speech SDK, has been removed. This change eliminates the hardcoded logic that read Azure subscription credentials from environment variables and used a fixed voice (\en-US-GuyNeural\) to synthesize text input into audio.

src · high confidence

Test coverage

Added unit tests for version output, voice shorthands, and format IDs

Added a new test suite in the SayIt.Tests project that verifies the application prints the correct version string and exits with code 0 when the --version flag is used. The tests also validate that voice type shorthands correctly correspond to their full voice IDs and that format type shorthands match the expected format ID patterns.

SayIt.Tests · high confidence

Dependencies

Upgrade to .NET 10 and restructure project layout

The application has been upgraded from .NET Core 2.2 to .NET 10, requiring a runtime update for users. The project structure has been reorganized: the main library has been moved from the \src/\ directory to \SayIt/\, and a new test project \SayIt.Tests\ has been added. Additionally, the main project now includes several new source files (\Utils.fs\, \Formats.fs\, \Voices.fs\, \Config.fs\) and dependencies (\Argu\), while the test project utilizes updated versions of \xUnit\, \FsUnit\, and \coverlet\.

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

Lenses

  • Code Health 100 → 100 (+0.0)
  • Architecture 73 → 77 (+3.9)
  • Maturity 34 → 34 (+0.0)
  • Readiness 61 → 61 (+0.0)
  • Security 78 → 74 (-4.3)

New (1)

  • Documentation: no usage examples (README.md)

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

Survey your own repository

pviotti/sayit 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 e3d7405b237d605df2e4efb831654a8f51753bc4 — 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.