Skip to content
CAI
Software that uses CAICheck a score

ddnexus/pagy

46.4

Weak · 26 September 2026

4.1k

lines of production code

Ruby

with JavaScript, TypeScript

5

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

This system is the Pagy gem, a Ruby library that provides a modular architecture for implementing various pagination strategies, including offset, keyset, calendar-based, and search engine integrations. It features a modernized JavaScript engine for client-side navigation, comprehensive internationalization with pluralization support, and a CLI tool for managing development and demo applications. The codebase has been refactored to replace legacy modules with a flexible 'abilities' system and strict configuration handling, ensuring robust performance and type safety across different web frameworks.

How it got here

2018–2024 — Architecture modernization and v10 preparation

16 changes.

This period focused on a comprehensive modernization of the Pagy codebase, transitioning the core library to a new modular architecture and upgrading the JavaScript toolchain to TypeScript with Bun. It involved removing legacy classes and templates, introducing a new CLI and configuration system, and preparing the gem for the v10 release by deprecating old options and enforcing stricter standards.

2025 — Pagy v10 modular architecture and new pagination types

16 changes.

This period focused on the development of Pagy v10, restructuring the core logic into a modular 'abilities' system and introducing new pagination strategies such as keyset, calendar, countish, and countless. The work also included adding ORM adapters for ActiveRecord and Sequel, enhancing internationalization with built-in pluralization rules, and refactoring helper methods for improved performance and maintainability.

2026 — Comprehensive test coverage expansion

17 changes.

This period focused on establishing extensive unit and end-to-end test suites for the Pagy gem, covering core configuration, pagination strategies, and integration with various frameworks and search backends. The work also included migrating the test infrastructure from Rake to Thor and updating E2E assets to support Bootstrap 5.3.8.

Features

Add Keyset pagination adapters for ActiveRecord and Sequel

New adapter modules for ActiveRecord and Sequel have been added to the Keyset pagination system. These adapters handle the extraction of keyset values from query orderings, typecasting of attributes to ensure safe comparisons, quoting of table and column identifiers, and the automatic inclusion of keyset columns in the SELECT clause. This enables users to paginate using keyset strategies with these specific ORMs.

gem/lib/pagy/classes/keyset/adapters · high confidence

Added new CSS stylesheets for pagination components

Two new stylesheet files, pagy-tailwind.css and pagy.css, have been added to the gem/stylesheets directory. These files define the visual styling for pagination controls using CSS custom properties for theming, with pagy.css providing standard CSS rules and pagy-tailwind.css offering a Tailwind CSS-compatible variant using @layer components and @apply directives.

gem/stylesheets · high confidence

Added pluralization logic for multiple languages

The library now includes built-in pluralization rules for Arabic, East Slavic, West Slavic, Polish, and languages using simple one/other or one-up-to-two-other patterns. This ensures that pagination counts and other pluralized strings are grammatically correct for these languages without requiring external configuration.

gem/lib/pagy/modules/i18n/p11n · high confidence

Added pre-commit hook to prevent direct gem changes on master

A new pre-commit hook has been added to the repository to enforce development workflow discipline. The hook prevents developers from committing changes directly to the 'gem' directory on the master branch, ensuring that gem code is only merged via tested dev branches during releases. Documentation in scripts/hooks/README.md provides setup instructions via symlinks or copying the hook into the .git/hooks directory.

scripts/hooks · high confidence

Automated documentation screenshot generation

Added a new \scripts/docshots\ tool that automates the capture of pagination UI screenshots for documentation. The tool launches a local Sinatra app (\docshots.ru\) serving various Pagy styles and navigation methods, then uses Puppeteer (\capture.js\) to navigate the pages and save high-DPI images to the assets directory, orchestrated by a Ruby script (\docshot.rb\).

scripts/docshots · high confidence

Introduce Keyset and Keynav pagination classes

Added new \Pagy::Keyset\ and \Pagy::Keyset::Keynav\ classes to support fast keyset pagination for large datasets. The \Keyset\ class provides a factory-based API that automatically detects and adapts to ActiveRecord or Sequel relations, using compound SQL predicates and optional tuple comparison for efficient cursor-based navigation. The \Keynav\ class extends this with broader UI support, handling nested parameters and providing specific methods for client-side updates and page navigation.

gem/lib/pagy/classes/keyset · high confidence

Introduce Pagy::CLI executable

A new executable script \gem/bin/pagy\ has been added to the gem. This script serves as the entry point for the command-line interface, initializing and starting the \Pagy::CLI\ class defined in the library.

gem/bin · high confidence

Introduce new Calendar-based pagination classes

The gem now includes a new set of classes under \gem/lib/pagy/classes/calendar\ (including \Calendar\, \Unit\, \Day\, \Week\, \Month\, \Quarter\, and \Year\) that provide a structured, object-oriented approach to time-based pagination. These classes define specific behaviors for navigating through time periods (days, weeks, months, etc.) and handle the logic for calculating page offsets, time ranges, and URL generation for calendar-style views.

gem/lib/pagy/classes/calendar · high confidence

Introduces Countish and Countless pagination strategies and expands search engine support

The offset pagination module now includes two new strategies: Countish, which provides pagination with a memoized count, and Countless, which operates without a COUNT query by fetching an extra record to determine if more pages exist. Additionally, the search pagination classes have been updated to include a TypesenseRails paginator and added a max\_result\_window option for Searchkick and ElasticsearchRails paginators to ensure accurate counting within search engine limits.

gem/lib/pagy/classes/offset · high confidence

Introduces Pagy AI Widget and modernized JavaScript pagination engine

Adds a new AI chat widget (ai\_widget.js) that injects and styles a 'Pagy AI' assistant for documentation and app contexts, and replaces the legacy JavaScript pagination helpers with a new TypeScript-based engine (pagy.js/mjs) that uses Base64-encoded data attributes for keynav, series navigation, input navigation, and limit tags. The new engine synchronizes pagination state across browser tabs via BroadcastChannel and sessionStorage, supports responsive series navigation via ResizeObserver, and is accompanied by TypeScript definitions (pagy.d.ts) and a font-isolation utility (wand.js) for the admin interface.

gem/javascripts · high confidence

Introduction of Offset Pagination class

A new \Pagy::Offset\ class has been added to support offset-based pagination. This implementation provides standard pagination variables such as \from\, \to\, \in\, \previous\, \next\, and \last\ (aliased as \pages\), and includes support for endless pagination variants via autoloaded \Countless\ and \Countish\ sub-classes. Users can now utilize this class to paginate collections using SQL offset and limit clauses.

ruby · high confidence

New pagy.rb initializer with frozen global options

A new \config/pagy.rb\ initializer has been added to the gem, providing a structured template for configuring Pagy. It includes commented examples for setting global options (such as \limit\ and \client\_limit\ via \Pagy::OPTIONS\), syncing JavaScript and CSS resources, and customizing I18n lookups. The file explicitly calls \Pagy::OPTIONS.freeze\ to ensure global configuration immutability, and serves as the primary entry point for users to override default behaviors or enable specific features like JSON:API compliance or calendar localization.

gem/config · high confidence

Removals

Removal of legacy Backend and Frontend modules

The \Pagy::Backend\ and \Pagy::Frontend\ modules have been removed from the library. Users can no longer include these modules in controllers or helpers to access methods like \pagy\, \pagy\_nav\, \pagy\_info\, and \pagy\_url\_for\. This change requires users to adopt the newer, modular architecture (likely using specific extras or direct class usage) as the previous monolithic inclusion points are no longer available.

lib/pagy · high confidence

Removal of legacy Pagy core class

The legacy \Pagy\ core class (version 0.3.0) has been removed from the library. This class previously handled pagination arithmetic and state using an \Opts\ hash and autoloaded \Backend\ and \Frontend\ modules. Its removal indicates that the library has fully migrated to a newer architecture (likely the \Pagy::VARS\ and module-based approach seen in other commits), and code relying on the old \Pagy.new(opts)\ interface will no longer function.

lib · high confidence

Architecture

Project infrastructure modernized with EditorConfig, RuboCop, and Bun-based tooling

The repository has been restructured to enforce consistent code formatting and linting standards. An \.editorconfig\ file is now in place to standardize whitespace and newline handling across editors. A comprehensive \.rubocop.yml\ configuration has been added, targeting Ruby 3.3 and enabling plugins for performance, testing, and packaging, while disabling specific legacy or low-value cops. The legacy Travis CI configuration (\.travis.yml\) has been removed, and the \Rakefile\ has been simplified to delegate tasks to a \tasks\ directory. Additionally, the JavaScript toolchain has been modernized by introducing \bun.lock\ and \eslint.config.js\, replacing older build and linting setups with Bun and ESLint v10 for the TypeScript/JavaScript source files.

(repo-wide) · high confidence

Behavioural changes

New Pagy::Request class with client\_limit and improved param handling

The gem introduces a new Pagy::Request class that decouples request parsing from Rack, allowing non-Rack applications to pass a hash of parameters. This change replaces the deprecated :max\_limit option with :client\_limit to cap the maximum limit value accepted from client-side parameters, preventing excessive data retrieval. The request object now properly merges GET and POST parameters, freezes its state for safety, and resolves page and limit values with stricter validation, including fixes for edge cases like empty or '0' page values and JSON API compatibility.

gem/lib/pagy/classes · high confidence

New Ruby-based release and development automation scripts

The project replaces previous shell-based bumping mechanisms with a new suite of Ruby scripts to streamline versioning and local development. The new \scripts/bump.rb\ automates the entire release process, including version updates across documentation and source files, Gemfile.lock synchronization, JavaScript builds, and changelog generation, while enforcing that gem changes are properly tagged. A new \scripts/runapp.rb\ provides a convenient way to run and auto-reload Pagy apps locally using \watchexec\. Supporting utilities include \scripty.rb\ for common helper functions, \update\_retype\_head.rb\ to inject the AI widget into documentation, and \update\_top100.rb\ to dynamically refresh the top contributors list in the README.

scripts · high confidence

New TypeScript build pipeline and pagy.js module structure

The project now compiles its JavaScript from TypeScript sources using Bun, introducing a new build script (src/build) and configuration (src/tsconfig.json). This pipeline generates a native ESM module (pagy.mjs), a minified browser bundle (pagy.min.js), a development bundle with inline sourcemaps (pagy.js), and the Wand script (wand.js). The pagy.js module exposes a public interface limited to the version number and an init() function that scans for \[data-pagy\] attributes to initialize helpers like series\_nav\_js, input\_nav\_js, and limit\_tag\_js. Additionally, the Wand component now implements font isolation with caching in sessionStorage to manage Google Fonts and Material Symbols.

src · high confidence

New internal modules for Base64 encoding, console testing, and search argument handling

The library introduces three new internal modules to support v10 functionality. The \B64\ module provides lightweight, dependency-free Base64 encoding and decoding methods, including URL-safe variants, to handle binary data serialization. The \Console\ module adds a ready-to-use pagy environment for IRB and Rails consoles, featuring a mock \Collection\ class and predefined request parameters to facilitate easier interactive testing and debugging. Additionally, the \Searcher\ module centralizes common search logic, allowing for a variable number of search arguments and automatically resolving page and limit parameters from the request context before yielding results.

gem/lib/pagy/modules · high confidence

New lightweight i18n implementation with locale fallback

Pagy now includes a new, faster i18n module that replaces the previous implementation. This change introduces a fallback to the 'en' locale when a requested locale is unknown or missing, preventing errors and ensuring consistent behavior. The new module validates locale inputs against RFC 4647 standards and supports pluralization rules (p11n) for various languages, improving both performance and reliability for internationalized pagination.

gem/lib/pagy/modules/i18n · high confidence

Paginators restructured into a modular, autoloaded architecture with new calendar and countish support

The pagination logic in this location has been reorganized from a monolithic structure into distinct, autoloaded modules for each paginator type (offset, countless, countish, keyset, keynav\_js, calendar, elasticsearch\_rails, meilisearch, searchkick, and typesense\_rails). This change introduces a new \:calendar\ paginator for time-based grouping and a \:countish\ paginator that supports TTL-based caching of record counts. The refactoring also standardizes how search integrations (Elasticsearch, Meilisearch, Searchkick, Typesense) handle both active and passive modes, and adds a \max\_result\_window\ option to cap counts for Elasticsearch and Searchkick. The central \Pagy::Method\ module now dynamically loads these paginators, simplifying the core API while enabling more maintainable, isolated logic for each pagination strategy.

gem/lib/pagy/toolbox/paginators · high confidence

Pagy gem version 43.6.3 release with core refactoring

This update introduces Pagy version 43.6.3, featuring a significant internal refactoring of the core \Pagy\ class. The default configuration has shifted from using \items\ to \limit\ (with \limit\_key: 'limit'\), aligning with the new naming convention. The gem now utilizes a thread-safe \OPTIONS\ hash and enforces stricter type validation for \page\_key\ and \limit\_key\, requiring them to be strings. Additionally, the \assign\_options\ method now accepts keyword arguments, and the library conditionally loads either the \pagy/next\ or \pagy/deprecated\ module based on the \PAGY\_NEXT\ environment variable, facilitating a smoother transition for users adopting new features while maintaining backward compatibility.

gem/lib · high confidence

Pagy v10 introduces a new \`pagy/next\` entrypoint and deprecates legacy options

This release adds a \pagy/next\ entrypoint that enables the next major version (v10) by raising errors for discontinued options like \:max\_pages\, \:max\_limit\, and \:client\_max\_limit\. It also deprecates the \:max\_limit\ option in favor of the more descriptive \:client\_limit\ and introduces a new CLI tool (\Pagy::CLI\) for showcasing, cloning, and developing Pagy apps, along with a console loader for easier interactive usage.

gem/lib/pagy · high confidence

Pagy v10 introduces modular 'abilities' architecture and new pagination capabilities

Pagy v10 restructures the gem's core logic into a modular 'abilities' system (Configurable, Countable, Linkable, Rangeable, Shiftable), replacing the previous monolithic implementation. This change introduces a new \:countish\ paginator type that optimizes count queries for grouped ActiveRecord relations using window functions, and enhances URL composition to support nested request parameters and spaces in placeholder params. Additionally, the gem now includes a development AI widget and wand tools for easier debugging, while deprecating the \:max\_limit\ option in favor of \:client\_limit\.

gem/lib/pagy/modules/abilities · high confidence

Playground apps refactored to standalone Sinatra apps with SQLite

The playground applications in gem/apps have been replaced with self-contained, standalone Sinatra apps that use SQLite in-memory databases, simplifying setup and reproduction of issues. This change introduces new apps for Calendar, Keynav, Keyset, and Keyset with Sequel, while updating the Demo, Rails, and Repro apps to use Sinatra or a minimal Rails setup. The apps now use the :client\_limit option instead of the deprecated :max\_limit, and the PagyApps::INDEX module provides a registry of available apps for easy cloning and running.

gem/apps · high confidence

Refactored pagination helpers into modular support files

The internal implementation of pagination navigation has been restructured by extracting helper logic into dedicated support files (such as \a\lambda.rb\, \series.rb\, and \wrap\\*.rb\). This change improves code readability and performance, notably optimizing anchor tag generation to be significantly faster than standard Rails helpers, while also fixing issues with the \anchor\_string\ option and ensuring proper HTML escaping in URL attributes.

gem/lib/pagy/toolbox/helpers/support · high confidence

Refactored pagination helpers with new anchor and framework-specific navigation components

The pagination helper methods have been restructured to improve code organization and readability. A new \anchor\_tags.rb\ module centralizes the logic for generating previous and next navigation links, introducing an \anchor\_tag\_for\ private method. Framework-specific navigation components for Bootstrap and Bulma have been extracted into dedicated files (\bootstrap/\ and \bulma/\), each providing their own implementations for series navigation (\series\_nav\, \series\_nav\_js\), input-based navigation (\input\_nav\_js\), and previous/next HTML generation. The core \pagy\ navigation methods (\series\_nav\, \series\_nav\_js\, \input\_nav\_js\) now delegate to these framework-specific implementations when a \style\ option is provided. Additionally, the \data\_hash\ helper now includes a \:current\_url\ key as an alias for \:page\_url\, and the \info\_tag\ method has been updated to correctly handle single-page scenarios by checking if \@in\ equals \@count\.

gem/lib/pagy/toolbox/helpers · high confidence

The library has removed several legacy pagination template files (including \bootstrap-no-dep\, \default-no-dep\, and their Rails-dependent variants in HAML, Slim, and ERB) that previously relied on the \pagy\_url\_for\ helper or framework-specific link helpers. These templates have been replaced by a unified approach using \pagy\_link\_proc\, simplifying the template selection process and ensuring consistent pagination behavior across different view engines and frameworks.

lib/templates · high confidence

Replace Rake test tasks with Thor commands

The project's test and release infrastructure has been migrated from Rake to Thor, introducing new command-line interfaces for running tests and managing releases. Users can now execute \test:api:current\, \test:api:next\, and \test:api:all\ to run specific API test suites, and \test:api:coverage\ to run tests with branch coverage enforcement. End-to-end tests are accessible via \test:e2e:apps\, and a unified \test:all\ command runs Rubocop, API coverage, and E2E tests in sequence. Additionally, a \release\_pagy\ task is provided to automate the gem release cycle, including version tagging and cleanup.

tasks · high confidence

Test coverage

Added API tests for deprecated options and Next mode behavior; Added end-to-end tests for Calendar, Demo, Keynav, Rails, and Repro apps; Added mock implementations for search and pagination integrations; Added unit tests for Bootstrap and Bulma pagination helpers; Added unit tests for Keyset pagination adapters and core logic; Added unit tests for Pagy CLI, sync tasks, and version consistency; Added unit tests for Pagy I18n module and pluralization rules; Added unit tests for Pagy abilities modules; Added unit tests for Pagy core configuration and option handling; Added unit tests for Pagy exception classes and request parameter handling; Added unit tests for Pagy offset and search pagination classes; Added unit tests for Pagy paginator implementations; Added unit tests for pagination helper methods; Added unit tests for pagination helper support modules; Improved test failure backtrace readability; New e2e test infrastructure for Pagy apps; Updated e2e test assets with Bootstrap 5.3.8; Updated test environment configuration and tooling.

Dependencies

Pagy 43.6.3: Gem structure reorganization and dependency updates

The gem has been updated to version 43.6.3 with a reorganized directory structure: the gemspec is now located in the \gem/\ subdirectory, and the \Gemfile\ has been updated to reference this new path. The gem's runtime dependencies are now explicitly declared as \json\, \uri\, and \yaml\, and the minimum required Ruby version is set to 3.3. Development dependencies have been expanded to include modern tooling such as \rubocop\ with several plugins, \minitest\ with reporters and hooks, and \ferrum\ for testing. Additionally, a new \package.json\ file has been added to manage JavaScript/TypeScript development dependencies (including ESLint and TypeScript) using Bun.

(dependencies) · high confidence

Housekeeping

New documentation assets for Pagy navigation and demo visuals

Added static assets to support documentation improvements: a new 'Try it now!' SVG button image for interactive demos, a static HTML example of a Pagy navigation bar, and an ERB template (\nav.html.erb\) that demonstrates how to render the Pagy navigation component with proper accessibility attributes and dynamic page links.

assets · 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

This is the PUBLIC form of this artifact. Findings are listed in full, but the details of SECURITY findings — which rule fired, in which file, on which line, and how to fix it — are deliberately withheld, and any secret-scanner results are excluded entirely. Where detail is absent here it was REMOVED FOR PUBLICATION; it is not missing from the analysis. The complete artifact is available from the repository owner.

Score

  • CAI 35 → 46 (+11.7)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 38 → 34 (-4.2)
  • Architecture 93 → 98 (+4.8)
  • Maturity 55 → 55 (+0.0)
  • Readiness 22 → 50 (+27.9)
  • Security 43 → 69 (+26.2)
  • Accessibility 68 (new)

Resolved (42)

  • (anonymous) (cognitive 20) (docs/gem/javascripts/wand.js)
  • (anonymous) (cognitive 20) (gem/javascripts/wand.js)
  • Change coupling: pagy.js ↔ pagy.min.js (gem/javascripts/pagy.js)
  • Change coupling: pagy.js ↔ pagy.mjs (gem/javascripts/pagy.js)
  • Change coupling: pagy.js ↔ pagy.ts (gem/javascripts/pagy.js)
  • Change coupling: pagy.min.js ↔ pagy.mjs (gem/javascripts/pagy.min.js)
  • Change coupling: pagy.min.js ↔ pagy.ts (gem/javascripts/pagy.min.js)
  • Change coupling: pagy.mjs ↔ pagy.ts (gem/javascripts/pagy.mjs)
  • Coverage not measured — test suite did not build
  • Dimension evaluation failed
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High CVE: [GHSA redacted] (bun.lock)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • High: security finding (details withheld)
  • …and 22 more

New (120)

  • (anonymous) (cognitive 23) (gem/javascripts/wand.js)
  • (anonymous) (cognitive 65) (gem/javascripts/wand.js)
  • (anonymous) (cyclomatic 42) (gem/javascripts/pagy.js)
  • (anonymous) (cyclomatic 42) (gem/javascripts/pagy.mjs)
  • (anonymous) (cyclomatic 46) (gem/javascripts/wand.js)
  • (anonymous)::augmentKeynav (cognitive 20) (gem/javascripts/pagy.js)
  • (anonymous)::augmentKeynav (cognitive 20) (gem/javascripts/pagy.mjs)
  • Change coupling: pagy.rb ↔ pagy.js (gem/config/pagy.rb)
  • Change coupling: pagy.rb ↔ pagy.ts (gem/config/pagy.rb)
  • Documentation: no installation or build instructions (docs/toolbox/paginators.md)
  • Documentation: no project overview (docs/toolbox/paginators.md)
  • Duplicated block (10 lines × 2) (docs/gem/lib/pagy/classes/calendar/calendar.rb)
  • Duplicated block (10 lines × 2) (docs/gem/lib/pagy/classes/keyset/keyset.rb)
  • Duplicated block (10 lines × 2) (docs/gem/lib/pagy/toolbox/helpers/page_url.rb)
  • Duplicated block (10 lines × 2) (docs/gem/lib/pagy/toolbox/helpers/series_nav_js.rb)
  • Duplicated block (10 lines × 2) (docs/gem/lib/pagy/toolbox/paginators/countish.rb)
  • Duplicated block (10 lines × 4) (docs/gem/lib/pagy/toolbox/helpers/bootstrap/series_nav_js.rb)
  • Duplicated block (11 lines × 2) (docs/gem/lib/pagy/modules/abilities/countable.rb)
  • Duplicated block (12 lines × 2) (docs/gem/lib/pagy/classes/calendar/calendar.rb)
  • Duplicated block (12 lines × 2) (docs/gem/lib/pagy/classes/keyset/adapters/sequel.rb)
  • …and 100 more

Changes since last survey

  • 10 commits — 9 feature/other, 1 fixes

By area

  • gem/apps — 4 commits
  • (repo) — 2 commits
  • gem/lib — 2 commits
  • (root) — 1 commit
  • docs/_includes — 1 commit

Notable commits

  • fix: 💎 Fix nil records returned for Array collections on page overflow (#920) (Fix #919)
  • change: Don't append trailing hash if the fragment is empty (#921)
  • change: Fix indentation
  • change: Improve docs
  • change: Merge branch 'dev'
  • change: Merge branch 'dev'
  • change: Update Gems and packages
  • change: Version 43.6.2
  • change: Version 43.6.3
  • change: 💎 Deprecate the :max_limit in favor of the more descriptive :client_limit option.

Architecture

  • Containers 0 added · 0 removed · contexts 1 added · 0 removed · edges 0 added · 0 removed

Added bounded contexts (1)

  • ruby

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

Survey your own repository

ddnexus/pagy 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 26 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 a7723bf75ed94755b482fc51a7e162f6aec00b10 — 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-7c1cb6328e11.