Skip to content
CAI
Software that uses CAICheck a score

nojaf/telplin

58.7

Adequate · 3 October 2026

3.3k

lines of production code

F#

primary language

2

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Telplin is an F\# signature file generator that creates and verifies .fsi files from implementation code using the F\# Compiler Service. It provides a CLI tool for local batch processing and a serverless AWS Lambda backend to power a web-based interface for interactive signature generation. The system handles complex type resolution, accessibility modifiers, and documentation retention while offering verification capabilities to ensure signatures match their source implementations.

How it got here

2022 — Telplin rebrand and core rewrite

10 changes.

The project was rebranded from Autograph to Telplin, involving the removal of legacy type definitions and build scripts. This period established the new Telplin.Core library for signature generation and verification, alongside initial AWS deployment infrastructure and a comprehensive test suite.

2023–2026 — signature generation tooling

7 changes.

This period focused on building the core infrastructure for a new F\# signature generation tool, including the Telplin.Core library for parsing and analyzing F\# projects and the web-based client interface. It also involved restructuring the CLI argument handling and introducing AWS Lambda deployment capabilities to support serverless execution of the signature service.

Features

Added F\# troubleshooting and analysis scripts

New F\# script files have been added to the \scripts/\ directory to aid in debugging and analyzing F\# source code. \oak.fsx\ parses source into the Fantomas Oak syntax tree, \symbols.fsx\ type-checks files and prints symbol signatures from the F\# Compiler Service, and \telplin.fsx\ runs the local Telplin.Core engine to generate signatures and report errors. These scripts share common utilities in \shared.fsx\ for argument parsing and \options.fsx\ for configuring the F\# compiler service.

scripts · high confidence

Initial AWS deployment infrastructure for Telplin

Added the initial Pulumi-based deployment stack for the Telplin project, defining the core AWS infrastructure including an S3 bucket for Lambda archives, an API Gateway v2 with CORS configuration, and a Lambda function (using the .NET 10 CustomAL2023 runtime) to handle signature requests. The deployment targets the eu-west-3 region and sets up the necessary IAM roles, CloudWatch logs, and API routes.

src/Telplin.Deploy · high confidence

Initial release of Telplin.Core signature verification library

This change introduces the Telplin.Core library, providing core functionality for generating and verifying F\# signature files. It exposes a \SignatureCreation\ module with three methods: \telplin\ for standard signature generation, \telplinOnlyUsed\ for generating signatures based on external usage, and \fcs\ for generating signatures via the F\# Compiler Service. The library also includes a \TelplinInternalApi\ for verifying signatures against implementation files, returning detailed results such as valid signatures, partial signatures with errors, or diagnostics for invalid files.

src/Telplin.Core · high confidence

Introduce AWS Lambda deployment for the signature tool

The tool server now includes the necessary code and configuration to deploy as an AWS Lambda function. This adds a new entry point (Function.fs) that bootstraps the Lambda runtime, a dedicated implementation module (Lambda.fs) that handles signature verification logic specifically for the Lambda environment (including assembly resolution and JSON encoding), and an AWS-specific configuration file (aws-lambda-tools-defaults.json) defining the runtime as provided.al2023. This change enables the signature generation service to run in a serverless AWS environment, distinct from the existing local Suave-based server.

tool/server · high confidence

Introduce F\# project analysis and signature resolution core

The \src/Telplin.Core/TypedTree\ module now provides the foundational logic for analyzing F\# projects and resolving type signatures. It introduces \FSharpProjectExtensions\ to parse project options, \Options.fs\ to execute design-time MSBuild builds for retrieving compiler arguments and project references, and \TypedTree.fs\ to perform in-memory type checking and signature extraction. This enables the tool to accurately generate and validate F\# signatures by leveraging the F\# Compiler Service.

src/Telplin.Core/TypedTree · high confidence

Introduce UntypedTree module for parsing and converting F\# signatures

Added the new \Telplin.Core.UntypedTree\ module, which provides the core logic for parsing F\# source signatures into an untyped AST and converting them into typed tree structures. This includes utilities for handling accessibility modifiers (such as private constructors and members), splitting property getters and setters with differing accessibilities, and sanitizing return types to remove generated compiler argument names.

src/Telplin.Core/UntypedTree · high confidence

New error handling and signature generation types in Telplin.Core

This change introduces the \TelplinError\ type to represent errors occurring during typed tree access and defines the \Signature\ record structure for generated signature files, which now includes fields for code, errors, and XML documentation ranges. It also exposes functions to create signature files from implementation code and identify redundant private keywords, establishing the foundational types for the library's signature generation capabilities.

Telplin.Core · high confidence

New online signature generation tool with Telplin and FCS modes

The tool/client area now provides a new web-based interface for generating signatures, supporting both the standard Telplin mode and an FCS mode. Users can input F\# code into a Monaco editor, which sends requests to the backend to produce signatures or return detailed diagnostics and errors. The application state is persisted in the URL hash using LZ-string compression, allowing users to share or bookmark specific configurations. The client is built with Fable, Feliz, and Elmish, running on Vite with Bun for dependency management.

tool/client · high confidence

Removals

Removal of Autograph.TypedTree/TypedTree.fs

The file Autograph.TypedTree/TypedTree.fs, which previously implemented the \Autograph.TypedTree.Resolver\ module for resolving type names and return types using the F\# Compiler Service, has been deleted. This removes the specific implementation responsible for mapping proxy ranges to symbol types and return types within the TypedTree component.

Autograph.TypedTree · high confidence

Removal of legacy type definitions and build scripts

The \Types.fs\ file containing \ParameterTypeName\, \RangeProxy\, and \TypedTreeInfoResolver\ has been deleted, along with the \script.fsx\ utility used for processing compiler input lines. This change removes these specific components from the \Autograph.Common\ library, likely as part of a broader refactoring to replace these legacy structures with new implementations.

Autograph.Common · high confidence

Removed Autograph.UntypedTree.Writer module

The \Autograph.UntypedTree.Writer\ module, which previously handled the generation of F\# signature files from implementation code using Fantomas, has been removed from the \Autograph.UntypedTree\ project. This deletion eliminates the logic for parsing source files, resolving type information, and formatting ASTs into \.fsi\ signatures within this specific library.

Autograph.UntypedTree · high confidence

Behavioural changes

Project renamed from Autograph to Telplin

The project has been renamed from Autograph to Telplin. This change is reflected in the solution file (telplin.sln), the README, and the build configuration, marking the official rebranding of the F\# signature file generator tool.

(repo-wide) · high confidence

Telplin CLI argument parsing and help system restructured

The Telplin command-line interface now uses a dedicated argument parser (Arguments.fs) that supports a broader set of flags, including --files for processing specific source files, --record/--only-record for saving compiler arguments to .rsp files, --no-verify to skip compilation checks, --no-project to prevent updating the .fsproj file, and --keep-unused/--keep-private/--keep-xml-docs to control how private bindings and documentation are handled in the generated signatures. The help page (HelpPage.fs) has been updated to reflect these new options and provides examples for single-file processing and response file usage. Additionally, the project file update logic (ProjectFile.fs) now explicitly handles cases where signature files cannot be automatically inserted, reporting them as NotFound outcomes.

src/Telplin · high confidence

Telplin CLI tooling and output theming

The Telplin command-line interface now supports specifying input via a single source file using the \--files\ argument, which resolves the file against the project's source paths. The tool includes a new theming system that applies ANSI color codes to help text and diagnostics, respecting the \NO\_COLOR\ environment variable and detecting terminal capabilities. Additionally, the CLI accepts arbitrary arguments to pass through to MSBuild via the \--\ separator, and provides options to control the inclusion of private bindings and the retention of XML documentation in generated signatures.

telplin · high confidence

Test coverage

Initial test suite for Telplin signature generation; Removal of legacy binding and test helper modules.

Dependencies

Upgrade to .NET 10 and centralize dependency management

The project has migrated its target framework from .NET 7 to .NET 10 across all components, including the core library, CLI tool, Lambda server, and online client. To support this major version jump, the project now uses Central Package Management (via Directory.Packages.props) to define and version all NuGet dependencies, including significant updates to F\# tooling (FSharp.Core 10.1.401, FSharp.Compiler.Service 43.12.401), Pulumi (7.44.0), and testing frameworks (NUnit 4.6.1, NUnit3TestAdapter 6.3.0). This change also includes the renaming of the project from 'Autograph' to 'Telplin' and the removal of legacy .NET 7-specific 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 64 → 59 (-5.5)
  • Rubric changed (rubric-2026.09.15 → rubric-2026.10.1) — scores are not directly comparable.

Lenses

  • Code Health 97 → 85 (-12.3)
  • Architecture 97 → 99 (+1.6)
  • Maturity 75 → 75 (-0.3)
  • Readiness 75 → 76 (+0.2)
  • Security 74 → 74 (+0.0)
  • Accessibility 49 → 38 (-10.9)

Resolved (6)

  • Documentation: no installation or build instructions (README.md)
  • Documentation: no usage examples (README.md)
  • Outdated: Amazon.Lambda.RuntimeSupport
  • Outdated: FSharp.Compiler.Service
  • Outdated: FSharp.Core
  • Prerelease dependency: Fantomas.Core

New (7)

  • Hotspot: src/Telplin/Program.fs (src/Telplin/Program.fs)
  • Outdated: Ionide.KeepAChangelog.Tasks
  • Outdated: NUnit
  • Outdated: OpenTelemetry.Api
  • Outdated: OpenTelemetry.Exporter.OpenTelemetryProtocol
  • Program.run (cognitive 215) (src/Telplin/Program.fs)
  • Program.run (cyclomatic 51) (src/Telplin/Program.fs)

Changes since last survey

  • 9 commits — 9 feature/other, 0 fixes

By area

  • (root) — 6 commits
  • .config/dotnet-tools.json — 1 commit
  • scripts/oak.fsx — 1 commit
  • tool/server — 1 commit

Notable commits

  • change: Add InvariantGlobalization
  • change: Add test for CLIEvent.
  • change: Bump Amazon.Lambda.RuntimeSupport from 2.2.0 to 2.2.3 (#384)
  • change: Bump Fable.Core from 5.2.0 to 5.3.0 (#385)
  • change: Bump Fantomas.Core from 8.0.0-beta-001 to 8.0.5 (#387)
  • change: Bump fantomas from 8.0.0-beta-001 to 8.0.5 (#386)
  • change: Bump the compiler group with 2 updates (#383)
  • change: Do not crash the design time build on NU1510 (#388)
  • change: Extract Release pipeline

Architecture

  • Unchanged — 0 containers · 2 contexts · 1 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

nojaf/telplin 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 218d86e0bcb058e7846ca9bbb457766f4c574b08 — 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.