Skip to content
CAI
Software that uses CAICheck a score

frank-fs/frank

68.4

Adequate · 24 September 2026

9.4k

lines of production code

F#

primary language

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Frank is a functional web framework for F\# that provides a composable infrastructure for building RESTful APIs with first-class support for hypermedia and semantic web standards. It enables content negotiation, resource authorization, and API discovery while offering specialized libraries for RDF/JSON-LD authoring, SHACL-based request validation, and PROV-O provenance tracking. The system also includes tooling for compile-time static analysis and integrates with modern frontend patterns via Server-Sent Events.

Features

Add Frank.Datastar basic sample with RESTful hypermedia examples

The sample application now includes a new index.html page that demonstrates idiomatic Datastar usage within the Frank framework. This page serves as a client-side showcase for RESTful resource patterns, featuring interactive demos for click-to-edit contacts, search with filtering, row deletion, bulk updates, and form validation. It loads the Datastar library via CDN (v1.0.2) and utilizes Server-Sent Events (SSE) to render hypermedia responses from the server, providing a concrete example of how to structure frontend interactions around noun-based URLs and standard HTTP methods.

sample/Frank.Datastar.Basic/wwwroot · high confidence

Add Frank.Datastar.Basic sample demonstrating RESTful Datastar patterns

A new sample application has been added to demonstrate idiomatic integration of the Frank framework with Datastar. This sample implements RESTful hypermedia patterns, including resource-oriented URLs for contacts, fruits, items, and users, and showcases specific interaction patterns such as click-to-edit, bulk updates via array signals, row deletion, and form validation. It also includes the necessary SSE broadcast infrastructure to support multiple concurrent connections.

sample/Frank.Datastar.Basic · high confidence

Add Frank.Datastar.Hox sample with interactive RESTful demos

The sample application now includes a new \index.html\ page that demonstrates idiomatic usage of the Frank.Datastar library. This page provides interactive examples for key RESTful patterns, including click-to-edit contacts, search with filtering, row deletion, bulk updates, and form validation, all driven by server-sent events and hypermedia-first updates.

sample/Frank.Datastar.Hox/wwwroot · high confidence

Add Frank.Falco sample application

A new sample project demonstrating how to build a web application using Frank and the Falco HTTP library. It includes a basic 'Hello World' and parameterized route, along with configuration for logging, CORS, static files, and HTTPS redirection, serving as a reference implementation for integrating these technologies.

sample/Frank.Falco · high confidence

Add Frank.OpenApi package with F\#-native OpenAPI generation and Scalar UI

Introduces the new Frank.OpenApi package, enabling native OpenAPI document generation for Frank applications with first-class support for F\# types (records, discriminated unions, collections) via FSharp.Data.JsonSchema.OpenApi. Users can now define API metadata using a \handler\ computation expression and enable the feature in their WebHostBuilder via \useOpenApi\, which registers the OpenAPI JSON document at \/.well-known/openapi.json\ and integrates the Scalar UI for interactive API documentation. The implementation includes automatic operation ID derivation from endpoint display names and supports content negotiation metadata in the generated schema.

src/Frank.OpenApi · high confidence

Add Frank.OpenApi.Sample demonstrating OpenAPI features

Introduces a new sample application that demonstrates Frank.OpenApi capabilities with a complete product catalog REST API. The sample includes domain models, handler definitions using the handler computation expression for OpenAPI metadata, and resource wiring. It showcases features such as F\# type schema generation, content negotiation (including a bridged XML/JSON example), and mixed handler types. The application also enables OpenAPI document generation at /.well-known/openapi.json and includes a health check endpoint.

sample/Frank.OpenApi.Sample · high confidence

Add Frank.Oxpecker sample application with streaming and error handling

A new sample application demonstrating the Frank web framework integrated with the Oxpecker view engine. It showcases key capabilities including HTML and JSON streaming via htmx, custom error handling for 400/404/500 status codes, CORS configuration, and structured logging setup.

sample/Frank.Oxpecker · high confidence

Add Frank.Provenance.Sample demonstrating provenance recording and lineage

A new sample application demonstrates the Frank.Provenance library by recording PROV-O provenance records for resource views and querying them back as JSON-LD. It exposes GET /games/{id} to view games and append provenance activities, GET /provenance?resource={iri} to query recorded activities for a specific resource, and GET /provenance/lineage to serve a hand-authored wasDerivedFrom relationship using ProvBuilder that the standard record model cannot express.

sample/Frank.Provenance.Sample · high confidence

Add Giraffe integration sample application

Introduces a new sample application in the Frank.Giraffe project that demonstrates how to integrate the Giraffe web framework with the Frank builder. The sample includes a complete ASP.NET Core application setup featuring custom WebHostBuilder extensions for logging and CORS configuration, Giraffe-specific routing and error handling, and supporting assets like CSS and web.config for IIS deployment.

sample/Frank.Giraffe · high confidence

Frank 7.3.3 release notes and initial repository scaffolding

This change introduces the release notes for Frank 7.3.3, documenting new capabilities including Frank.Rdf for hand-authored RDF/JSON-LD, Frank.Provenance for PROV-O provenance tracking, Frank.Alps for ALPS profile documents, and Frank.JsonHome for JSON Home discovery. It also details core framework updates such as the \negotiate\ computation expression for content negotiation, handler-level authorization in Frank.Auth, and a shared response link provider. Additionally, the repository is initialized with standard scaffolding files including \.gitattributes\, \.gitignore\, \AGENTS.md\, \CLAUDE.md\, a solution file, and the MIT license.

(repo-wide) · high confidence

Frank.JsonHome serves a JSON Home document with authorization filtering and startup validation

The new Frank.JsonHome package serves a machine-readable JSON Home document (draft-06) that lists your application's entry-point resources, allowing clients to discover endpoints without hardcoding URLs. Resources are discovered by reading ASP.NET Core ApiExplorer descriptions and are filtered by the current user's identity: if Frank.Auth or standard ASP.NET Core authorization is used, the document omits resources or methods the user cannot access, and responses are marked private to prevent caching issues. The package also validates configuration at startup, failing if multiple resources declare the same \rel\ or if \hrefVar\ declarations do not match the route template variables.

src/Frank.JsonHome · high confidence

Introduce Frank.Alps package for ALPS document generation and state-based filtering

The new Frank.Alps package provides the infrastructure to author, validate, and serve ALPS (Application Level Profile Semantics) documents. It introduces a \Descriptor\ type and combinators (e.g., \safe\, \contains\, \guardedBy\) for defining API semantics, along with a \DescriptorBuilder\ computation expression for authoring. The package integrates with the ASP.NET Core pipeline via \useAlps\ to register an app-wide ALPS document at \/.well-known/alps.json\ and an \Alps.excerpt\ endpoint for resource-specific views. It enforces principal-based authorization by filtering descriptors based on endpoint metadata and supports state-based filtering via a pluggable \CurrentStateResolver\, ensuring that only allowed transitions are exposed in the served JSON.

src/Frank.Alps · high confidence

Introduce Frank.Analyzers for compile-time validation of Frank resources

The new Frank.Analyzers package provides compile-time static analysis for Frank applications, helping catch common mistakes before runtime. It introduces three diagnostics: FRANK001 warns when duplicate HTTP method handlers are defined for the same resource, FRANK002 warns when duplicate media types are registered within a single negotiate block, and FRANK003 errors when hrefVar declarations do not match the variables in the resource's route template. These analyzers integrate with IDEs like Ionide, Visual Studio, and Rider, as well as CLI/CI environments, to provide inline feedback.

src/Frank.Analyzers · high confidence

Introduce Frank.Auth for resource and handler-level authorization

The new Frank.Auth library enables declarative authorization for Frank applications by integrating with ASP.NET Core's built-in infrastructure. Users can now protect entire resources or individual handlers using requirements such as authentication, specific claims, roles, or named policies, which compose with AND semantics. The library provides builder extensions for configuring authentication services, enabling authorization middleware, and defining custom policies within the web host setup.

src/Frank.Auth · high confidence

Introduce Frank.Datastar library for Server-Sent Events integration

The new Frank.Datastar library provides idiomatic Server-Sent Events (SSE) capabilities for the Frank web framework. It introduces a single \datastar\ custom operation on \ResourceBuilder\ to manage SSE streams, along with helper functions like \patchElements\, \patchSignals\, and \tryReadSignals\ for sending updates and reading client data. The library supports both standard string-based operations and zero-allocation stream-based overloads (using \TextWriter\ and \Stream\) for high-throughput scenarios, and includes type-safe structs for patch modes and namespaces.

src/Frank.Datastar · high confidence

Introduce Frank.Provenance for PROV-O record storage and SPARQL querying

The new Frank.Provenance package provides a core library for recording and querying W3C PROV-O provenance data. It introduces a closed PROV-O vocabulary (ProvClass and ProvRelation) and a ProvBuilder computation expression for constructing RDF descriptions of activities, entities, and agents. ProvenanceRecord.toDoc projects structured records into RDF, while the MailboxProcessorProvenanceStore manages these records in an in-memory TripleStore with bounded eviction. Users can query provenance using a closed set of ProvenanceQuery shapes (ByResource, ByAgent, ByActivityId, Latest) that are translated into SPARQL internally. The store also supports optional durability via the IProvenanceJournal interface, with a default FileProvenanceJournal implementation that persists data as versioned N-Quads files.

src/Frank.Provenance · high confidence

Introduce Frank.Rdf package for authoring and serializing RDF/JSON-LD

The new Frank.Rdf package provides an \rdf { }\ computation expression for hand-authoring RDF triples, allowing users to define documents with prefixes, subjects, and typed properties (strings, integers, booleans, dates, nodes, and language-tagged strings) via a \describe { }\ block. It includes a \Doc\ type to hold these statements and exposes serialization methods to output expanded-form JSON-LD, including an asynchronous \writeJsonLdAsync\ method designed for streaming directly to HTTP response bodies without intermediate string allocation.

src/Frank.Rdf · high confidence

Introduce Frank.Validation for SHACL-based JSON-LD request validation

Frank now includes a new validation package that enforces SHACL Core (plus SPARQL) constraints on incoming JSON-LD request bodies. Developers can author shapes using the \shape { }\ and \property { }\ computation expressions (or plain functions) and attach them to resources via \useValidation\. When the app-wide \useValidation\ middleware is enabled, POST/PUT/PATCH requests with \application/ld+json\ content are buffered, parsed, and validated before reaching the handler; conforming requests proceed normally (with the parsed graph cached for reuse), while violations return a 422 (with a real \sh:ValidationReport\ for JSON-LD acceptors or \application/problem+json\ otherwise), and oversized bodies are rejected with 413.

src/Frank.Validation · high confidence

New Frank.Datastar.Oxpecker sample demonstrating RESTful hypermedia patterns

Added a new sample application in sample/Frank.Datastar.Oxpecker that demonstrates RESTful resource patterns using Frank.Datastar and the Oxpecker view engine. The sample implements server-sent events (SSE) for hypermedia-first updates, showcasing click-to-edit contacts, search with filtering, row deletion, bulk user updates, and form validation. It includes a frontend (wwwroot/index.html) using Datastar v1.0.2 and a backend (Program.fs) with in-memory data stores and SSE broadcast infrastructure.

sample/Frank.Datastar.Oxpecker · high confidence

New Frank.Rdf sample demonstrates Accept-based content negotiation for GET /games/{id}

A new sample application demonstrates how to serve both plain JSON and JSON-LD representations for the same resource URL using Accept-based content negotiation. The sample implements a GET /games/{id} endpoint that returns a standard DTO when the client requests application/json, and a fully expanded JSON-LD document (using schema.org vocabulary) when application/ld+json is requested. It also shows how to use Doc.merge to inject shared metadata (like publisher info) into individual resource documents and how to advertise the JSON-LD alternate via a Link header.

sample/Frank.Rdf.Sample · high confidence

New Frank.Validation sample demonstrating SHACL-validated POST endpoints

A new sample application (\sample/Frank.Validation.Sample\) has been added to demonstrate the \Frank.Validation\ library. It implements a \POST /games/{id}/moves\ endpoint that intercepts \application/ld+json\ request bodies and validates them against hand-authored SHACL shapes (specifically \moveShape\ and \personShape\) before the handler executes. The sample illustrates key validation features including datatype constraints, recursive node constraints, and closed shapes, and shows how handlers can access the pre-parsed validated graph via \Validation.tryGetValidatedGraph\.

sample/Frank.Validation.Sample · high confidence

New Hox-based Datastar sample application

A new sample application at sample/Frank.Datastar.Hox demonstrates how to build RESTful Datastar applications using the Hox DSL for HTML generation instead of F\# string templates. The sample implements standard patterns including resource URLs, HTTP method semantics, query parameter filtering, and hypermedia-first SSE broadcasting, providing a concrete reference for integrating Frank.Datastar with Hox.

sample/Frank.Datastar.Hox · high confidence

New content negotiation and handler definition infrastructure

Frank introduces a new \negotiate { }\ computation expression for defining multiple response representations (e.g., JSON, XML) within a single resource, dispatching to the correct handler based on the client's \Accept\ header. This is supported by a new \FrankProducesMatcherPolicy\ that handles routing-layer selection and \406 Not Acceptable\ responses, a \MediaTypeNegotiation\ module implementing RFC 9110 quality and specificity rules, and a refactored \HandlerDefinition\ type that stores endpoint metadata in an extensible list.

src/Frank · high confidence

New package deliverables check extension for Pi coding agent

A new extension has been added to the Pi coding agent that automatically runs the repository's existing \hooks/check-new-package-deliverables.sh\ script after the agent settles. This change ensures that any warnings or errors detected by the script are surfaced directly in the terminal user interface (TUI), allowing users to see potential issues with package deliverables immediately after an agent response without needing to manually execute the hook.

.pi · high confidence

New-package deliverables check hook added

A new Claude Code stop hook (check-new-package-deliverables.sh) has been added to the hooks directory. When a new Frank.\* package is introduced on the current branch, this script runs non-blocking checks to ensure the package includes a README.md, a runnable sample in the sample/ directory, and is properly registered in Frank.sln, CI workflows (.github/workflows/ci.yml), and the build script (build.ps1). Warnings are printed to stderr for any missing deliverables, helping developers maintain consistency for new packages without blocking the workflow.

hooks · high confidence

Sample app demonstrates role-based filtering in JSON Home discovery documents

The Frank.JsonHome.Sample project now serves a JSON Home document that filters available resources based on the authenticated user's roles. By using a simple API key authentication scheme, the sample shows that anonymous users see a subset of resources, while users with the 'admin' role see additional resources like admin reports. This demonstrates how Frank.JsonHome integrates with Frank.Auth to provide context-aware API discovery, ensuring that the discovery document reflects only the resources a user is authorized to see.

sample/Frank.JsonHome.Sample · high confidence

Behavioural changes

Sample app demonstrates ALPS state-gating, cross-document linking, and compound transitions

The sample application now implements three distinct protocols to showcase Frank.Alps capabilities: a tic-tac-toe game that proves server-side state enforcement via a CurrentStateResolver backed by Frank.Provenance; a ping/pong session protocol that demonstrates cross-document reference resolution, state-gating, and role-based filtering; and a traffic light simulation that validates compound transitions including orthogonal regions, structural AND-guards, and History-based state restoration. These features are exposed through both app-wide ALPS documents and per-resource excerpts, with authentication handled via a demo API-key scheme.

sample/Frank.Alps.Sample · high confidence

Sample app updated to ASP.NET Core with explicit XML/JSON serialization fixes

The sample application has been migrated to the latest ASP.NET Core with Endpoint Routing, introducing a new /graph route that visualizes the endpoint data source. To ensure correct content negotiation, the Greeting type now uses explicit DataContract attributes to prevent XML element name mangling, and JSON deserialization is configured to be case-insensitive to match client expectations. The application also includes new configuration files for development and production logging levels.

sample/Sample · high confidence

Test coverage

Added allocation-growth test harness; Added benchmarks for content negotiation and SHACL validation performance; Added browser automation test suite for Frank.Datastar samples; Added comprehensive test coverage for Frank core features; Added comprehensive test coverage for Frank.Alps descriptor authoring, validation, and authorization filtering; Added comprehensive test coverage for OpenAPI document generation, metadata handling, and service description linking; Added comprehensive test suite for Frank.Validation; Added test coverage for Frank.JsonHome; Added test fixtures and runner for Frank.Analyzers; Added test suite for Frank.Rdf core features; Added tests for Frank.Auth authorization logic; Added tests for Frank.Provenance core components; Added unit tests for Frank.Datastar SSE operations.

Dependencies

Frank web framework multi-targets .NET 8, 9, and 10 with new library and sample projects

The Frank web framework and its ecosystem of libraries (Frank.Alps, Frank.Analyzers, Frank.Auth, Frank.Datastar, Frank.JsonHome, Frank.OpenApi, Frank.Provenance, Frank.Rdf, Frank.Validation) now support .NET 8.0, 9.0, and 10.0. This update introduces several new packages and samples, including Frank.Datastar for Server-Sent Events, Frank.JsonHome for API discovery, Frank.Provenance for PROV-O tracking, and Frank.Validation for SHACL constraints. Sample applications for ALPS, Datastar, Falco, Giraffe, OpenAPI, Oxpecker, RDF, and Validation have been added to demonstrate these capabilities, alongside benchmarking tools for negotiation and validation performance.

(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 62 → 68 (+6.1)
  • Rubric changed (rubric-2026.08.19 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 81 → 79 (-2.2)
  • Architecture 100 → 100 (+0.0)
  • Maturity 60 → 69 (+8.2)
  • Readiness 56 → 61 (+5.0)
  • Security 64 → 76 (+11.9)

Resolved (46)

  • Duplicated block (10 lines × 2) (sample/Frank.Datastar.Hox/Program.fs)
  • Duplicated block (10 lines × 2) (sample/Frank.OpenApi.Sample/Handlers.fs)
  • Duplicated block (10 lines × 2) (src/Frank.Datastar/SseDataLineWriter.fs)
  • Duplicated block (10 lines × 2) (src/Frank.OpenApi/WebHostBuilderExtensions.fs)
  • Duplicated block (11 lines × 2) (sample/Frank.Datastar.Hox/Program.fs)
  • Duplicated block (11 lines × 2) (src/Frank.Datastar/ServerSentEventGenerator.fs)
  • Duplicated block (12 lines × 2) (sample/Frank.Datastar.Basic/Program.fs)
  • Duplicated block (12 lines × 2) (sample/Frank.Datastar.Hox/Program.fs)
  • Duplicated block (12 lines × 2) (sample/Frank.Datastar.Hox/Program.fs)
  • Duplicated block (12 lines × 2) (src/Frank.Datastar/ServerSentEventGenerator.fs)
  • Duplicated block (13 lines × 2) (src/Frank.Datastar/SseDataLineWriter.fs)
  • Duplicated block (14 lines × 2) (sample/Frank.Datastar.Basic/Program.fs)
  • Duplicated block (15 lines × 2) (sample/Frank.Datastar.Hox/Program.fs)
  • Duplicated block (15 lines × 2) (sample/Frank.Falco/Extensions.fs)
  • Duplicated block (15 lines × 2) (src/Frank.Alps/AuthorizationFilter.fs)
  • Duplicated block (16 lines × 2) (src/Frank.Datastar/Frank.Datastar.fs)
  • Duplicated block (16 lines × 3) (src/Frank.Datastar/ServerSentEventGenerator.fs)
  • Duplicated block (17 lines × 2) (sample/Frank.OpenApi.Sample/Extensions.fs)
  • Duplicated block (17 lines × 2) (src/Frank.Alps/DescriptorTypes.fsi)
  • Duplicated block (17 lines × 3) (sample/Frank.Datastar.Basic/Program.fs)
  • …and 26 more

New (61)

  • ADR not followed: Research: SSE Channel Architecture (specs/006-fix-datastar-basic-tests/research.md)
  • Documentation: no installation or build instructions (README.md)
  • Documentation: written for insiders (docs/superpowers/specs/2026-08-03-frank-validation-design.md)
  • Duplicated block (10 lines × 2) (sample/Frank.OpenApi.Sample/Handlers.fs)
  • Duplicated block (10 lines × 2) (src/Frank.OpenApi/WebHostBuilderExtensions.fs)
  • Duplicated block (10 lines × 4) (sample/Frank.Datastar.Basic/Program.fs)
  • Duplicated block (10–13 lines × 5) (sample/Frank.Falco/Extensions.fs)
  • Duplicated block (11 lines × 2) (src/Frank.Datastar/ServerSentEventGenerator.fs)
  • Duplicated block (11 lines × 2) (src/Frank.Datastar/ServerSentEventGenerator.fs)
  • Duplicated block (14 lines × 2) (sample/Frank.Alps.Sample/Catalog.fs)
  • Duplicated block (14 lines × 2) (src/Frank.Datastar/ServerSentEventGenerator.fs)
  • Duplicated block (14 lines × 3) (sample/Frank.Datastar.Basic/Program.fs)
  • Duplicated block (14–15 lines × 2) (sample/Frank.OpenApi.Sample/Handlers.fs)
  • Duplicated block (16 lines × 2) (src/Frank.Datastar/SseDataLineStream.fs)
  • Duplicated block (17 lines × 3) (sample/Frank.Datastar.Basic/Program.fs)
  • Duplicated block (17 lines × 3) (sample/Frank.Datastar.Basic/Program.fs)
  • Duplicated block (17–25 lines × 2) (src/Frank.Datastar/Frank.Datastar.fs)
  • Duplicated block (18 lines × 2) (sample/Frank.Datastar.Basic/Program.fs)
  • Duplicated block (18 lines × 3) (src/Frank.Datastar/ServerSentEventGenerator.fs)
  • Duplicated block (19 lines × 2) (sample/Frank.OpenApi.Sample/Extensions.fs)
  • …and 41 more

Changes since last survey

  • 102 commits — 87 feature/other, 15 fixes

By area

  • (repo) — 12 commits
  • (root) — 12 commits
  • src/Frank.Provenance — 11 commits
  • src/Frank — 9 commits
  • src/Frank.JsonHome — 7 commits
  • docs/superpowers — 6 commits
  • src/Frank.Alps — 6 commits
  • src/Frank.Rdf — 5 commits
  • sample/Frank.Alps.Sample — 4 commits
  • benchmarks/Frank.Benchmarks — 3 commits
  • src/Directory.Build.props — 3 commits
  • src/Frank.Validation — 3 commits
  • test/Frank.JsonHome.Tests — 3 commits
  • sample/Frank.Rdf.Sample — 2 commits
  • specs/017-hrefvar-validation — 2 commits
  • src/Frank.Analyzers — 2 commits
  • test/Frank.Analyzers.Tests — 2 commits
  • test/Frank.Tests — 2 commits
  • sample/Frank.Alps.TrafficLightSample — 1 commit
  • sample/Frank.Datastar.Tests — 1 commit

Notable commits

  • fix: Fix RDF PipeWriter test build, split Rdf.fs into Doc/Builder
  • fix: fix(alps-sample): add missing operator-key header in traffic-light walkthrough
  • fix: fix(build): cap PackageReleaseNotes to avoid NuGet's 35000-char limit
  • fix: fix(build): resolve two pre-existing solution warnings
  • fix: fix(frank): broadcast only produces metadata across negotiate {} representations
  • fix: fix(frank-jsonhome): detect duplicate rel from an IStartupFilter (#475)
  • fix: fix(frank-jsonhome): run IValidateOptions validators in FixedJsonHomeOptionsFactory
  • fix: fix(frank-jsonhome): wire DuplicateRelValidator into useJsonHome install (#475)
  • fix: fix(frank-provenance): adjust Manifest JSON handling comment and remove unnecessary whitespace check
  • fix: fix(frank-provenance): correct stale Manifest JSON-handling comment
  • fix: fix(frank-provenance): isolate journal write failures, atomic manifest writes, doc fixes
  • fix: fix(frank-provenance): restore manual JSON handling due to JsonSerializer limitations in compiled context
  • fix: fix(frank-provenance): sequence journal tests, bound failure-isolation wait, cover SnapshotEvery cadence
  • fix: fix(openapi): bump Microsoft.OpenApi 2.9.0 -> 2.12.0
  • fix: test(frank.openapi): prove negotiate {} sidesteps dotnet/aspnetcore#58329's operation-collapse bug
  • change: Add Doc.writeJsonLdAsync for streaming to IBufferWriter<byte>
  • change: Add tests, documentation, and release notes for v7.3.3
  • change: Bump version to 7.3.3
  • change: Merge branch 'worktree-agent-a2934c921ac7836b6' into worktree-hrefVars
  • change: Merge branch 'worktree-agent-a2aaebffc39ccbdab' into worktree-hrefVars
  • …and 82 more

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

Survey your own repository

frank-fs/frank 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 24 September 2026 at a pinned commit. It is not a live figure and does not change until the project is measured again.
  • Measured at commit f7ac4beefd5883922139e952bcf5990d48e1e86b — the exact code this score is about.
  • Scored under rubric-2026.09.15 — the same rubric and the same method as every other entry in this index.
  • Measured by watchdog.canine.dev using codehealth-analyzer preprod-923689c465cf.