Skip to content
CAI
Software that uses CAICheck a score

adam-p/markdown-here

41.1

Weak · 25 September 2026

63.8k

lines of production code

JavaScript

primary language

4

measurements over time

CAI band scale
CAI trend line
CAI lens gauges

What this system is

Features

Added ESLint configuration and project metadata files

The project now includes an ESLint configuration file (.eslintrc.json) that enforces a strict set of JavaScript coding standards, including rules for spacing, semicolons, and error handling. Additionally, the repository has been updated with standard project metadata files, including a Contributor License Agreement (for both individuals and entities), a CONTRIBUTING guide, a LICENSE file (MIT), a Makefile for build automation, and a PRIVACY policy document.

(repo-wide) · high confidence

Added store listing assets for the extension

Added new store assets including a description, reviewer notes, and sample Markdown files for screenshots and captions. These files provide the text and content used to market the extension in browser and add-on stores, detailing its Markdown rendering capabilities, supported platforms (Gmail, Thunderbird, etc.), and usage instructions.

store-assets · high confidence

Automated build process for Chrome, Firefox, and Thunderbird extensions

A new build script (utils/build.js) has been added to automate the creation of extension packages for Chrome, Firefox, and Thunderbird. The script generates compressed ZIP archives for each platform, applying specific filtering rules to include only the necessary files (such as manifest.json, common assets, and platform-specific configurations) while excluding test directories and OS-specific temporary files. This ensures that each browser's unique requirements are met during the build process.

utils · high confidence

Behavioural changes

Chrome upgrade notification and background script refactoring

The Chrome extension now displays a popup notification when the extension is updated or first installed, allowing users to view changelog details. This is supported by a refactored background script that uses a service worker-compatible architecture, and a new content script that handles rendering requests and the 'forgot-to-render' check on a per-activation basis rather than via automatic injection.

src/chrome · high confidence

Reduced extension permissions and updated default hotkey

The extension now requests permissions dynamically, meaning it only accesses a page when you click the toolbar button, use the context menu, or press the hotkey, which eliminates the initial browser warning about reading and changing data on all websites. As a result of this architectural change, the toolbar button is now always enabled, and the default hotkey has been changed to Shift+Alt+M because the browser now manages the shortcut. Users who had previously enabled the 'forgot-to-render' check will need to re-enable it, which will prompt for access to specific sites like Gmail.

src/common · high confidence

Updated Highlight.js to v11.11.1

The codebase has been updated to use Highlight.js version 11.11.1. This update includes a new \highlight.js\ core file and a comprehensive set of updated CSS theme files (including \a11y-dark\, \agate\, \atom-one-dark\, and all Base16 themes), ensuring that syntax highlighting for code snippets is rendered with the latest styling and support.

src/common/highlightjs · high confidence

Fixes

Updated DOMPurify to version 3.2.6

The DOMPurify library in src/common/vendor has been updated to version 3.2.6. This update improves HTML sanitization, which helps prevent cross-site scripting (XSS) vulnerabilities by more effectively filtering out dangerous content from user-supplied HTML.

src/common/vendor · high confidence

Test coverage

Added automated test suite for common logic and rendering; Added test page for Markdown Here.

Dependencies

Added build utility dependencies

The \utils\ directory now includes a \package.json\ and \package-lock.json\ that define the build tooling dependencies. Specifically, the \archiver\ library has been updated to version 7.0.1, and the \glob\ dependency has been updated to version 7.1.3.

(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 32 → 41 (+9.1)
  • Rubric changed (rubric-2026.08.15 → rubric-2026.09.15) — scores are not directly comparable.

Lenses

  • Code Health 44 → 38 (-6.5)
  • Architecture 100 (new)
  • Maturity 59 → 49 (-9.8)
  • Readiness 8 → 36 (+27.9)
  • Security 84 → 88 (+3.1)
  • Accessibility 36 (new)

Resolved (47)

  • Boundary-crossing change coupling: markdown-here.js ↔ build.js (src/common/markdown-here.js)
  • Boundary-crossing change coupling: options-store.js ↔ build.js (src/common/options-store.js)
  • Boundary-crossing change coupling: options.js ↔ build.js (src/common/options.js)
  • Boundary-crossing change coupling: utils.js ↔ build.js (src/common/utils.js)
  • Change coupling: backgroundscript.js ↔ contentscript.js (src/chrome/backgroundscript.js)
  • Change coupling: common-logic.js ↔ utils.js (src/common/common-logic.js)
  • Change coupling: markdown-here.js ↔ mdh-html-to-text.js (src/common/markdown-here.js)
  • Change coupling: options-iframe.js ↔ options-store.js (src/common/options-iframe.js)
  • Change coupling: options-iframe.js ↔ options.js (src/common/options-iframe.js)
  • Change coupling: options-iframe.js ↔ utils.js (src/common/options-iframe.js)
  • Dimension evaluation failed
  • FileTooLong: common/common-logic.js (src/common/common-logic.js)
  • FileTooLong: common/markdown-here.js (src/common/markdown-here.js)
  • FileTooLong: common/utils.js (src/common/utils.js)
  • FileTooLong: test/chai.js (src/common/test/chai.js)
  • FileTooLong: test/mocha.js (src/common/test/mocha.js)
  • High CVE: [GHSA redacted] (utils/package-lock.json)
  • High CVE: [GHSA redacted] (utils/package-lock.json)
  • High CVE: [GHSA redacted] (utils/package-lock.json)
  • High CVE: [GHSA redacted] (utils/package-lock.json)
  • …and 27 more

New (44)

  • (anonymous) (cognitive 19) (src/common/jsHtmlToText.js)
  • (anonymous) (cognitive 71) (src/common/options-store.js)
  • (anonymous) (cyclomatic 16) (src/common/jsHtmlToText.js)
  • (anonymous) (cyclomatic 24) (src/common/mdh-html-to-text.js)
  • (anonymous) (cyclomatic 44) (src/common/options-store.js)
  • (anonymous) (cyclomatic 60) (src/common/common-logic.js)
  • (anonymous) (cyclomatic 73) (src/common/markdown-here.js)
  • (anonymous)::excludeTagBlocks (cognitive 34) (src/common/mdh-html-to-text.js)
  • (anonymous)::makeStylesExplicit (cognitive 23) (src/common/markdown-here.js)
  • (anonymous)::markdownHere (cognitive 23) (src/common/markdown-here.js)
  • (anonymous)::marked (cognitive 19) (src/common/marked.js)
  • (anonymous)::output (cognitive 56) (src/common/marked.js)
  • (anonymous)::output (cyclomatic 31) (src/common/marked.js)
  • (anonymous)::showHTMLForgotToRenderPrompt::(anonymous)::keyboardCaptureHandler (cognitive 17) (src/common/common-logic.js)
  • (anonymous)::strToUTF8Arr (cognitive 19) (src/common/utils.js)
  • (anonymous)::tok (cognitive 22) (src/common/marked.js)
  • (anonymous)::tok (cyclomatic 23) (src/common/marked.js)
  • (anonymous)::token (cognitive 114) (src/common/marked.js)
  • (anonymous)::token (cyclomatic 51) (src/common/marked.js)
  • (anonymous)::utf8ArrToStr (cognitive 16) (src/common/utils.js)
  • …and 24 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

adam-p/markdown-here 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 25 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 e00d005299922198aef968e0cd42b275525c20a6 — 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-dd72cc24c749.