nojaf/telplin
58.7
Adequate · 3 October 2026
3.3k
lines of production code
F#
primary language
2
measurements over time
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.