Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 22:33 UTC

metonym / svelte-highlight

Syntax Highlighting for Svelte using highlight.js

TypeScript · JavaScript · SvelteMIT★ 335 Sterne⑂ 14 Forksseit Nov. 2019Auf GitHub ansehen ↗

metonym/svelte-highlight erreicht einen Gesundheitsindex von 72 von 100 und liegt damit im Bereich Gut. Am stärksten schneidet es bei Vitality (95/100) ab, am schwächsten bei AI Readiness (55/100). Zuletzt vor 2 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

72
gesamt / 100
Gut

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

72
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

Eric LiuPersönliches Konto
294 Follower161 öffentliche Reposseit Jan. 2015@renderinc

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmsvelte-highlight7.16.0188.53689vor 6 Tagensveltesvelte-componentshighlight.jssyntax-highlight

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

95Exzellent · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 2 Tagen
28.4/36Commit-Rhythmus — 41/52 Wochen mit Commits
18/18Commit-Volumen — 447 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year447
human_commit_share1
days_since_last_push2
active_weeks_last_year41

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 69 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 6 Tagen
27/27Release-Rhythmus — ein Release etwa alle 30,1 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count69
latest_release_tagv7.16.0
releases_from_tagsnein
days_since_latest_release6
mean_days_between_releases30,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

60Mittel · 18 % des Gesamtindex
Wie die Bewertung erfolgt
40.9/60Stars — 335 Stars
9.3/25Forks — 14 Forks
0/15Watcher — 2 Watcher
Verwendete Eingangsdaten
forks14
stars335
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (MIT)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein
Wie die Bewertung erfolgt
70.3/80Downloads pro Monat — 188.536 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagessvelte-highlight
dependents
ecosystemsnpm
total_downloads
monthly_downloads188.536
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

62Mittel · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0.1/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
4.1/13.5Breite der Beitragenden — 3 Beitragende
6/10OpenSSF Scorecard: Contributors — project has 2 contributing companies or organizations -- score normalized to 6
Verwendete Eingangsdaten
bus_factor1
contributors_sampled3
top_contributor_share0,997
Wie die Bewertung erfolgt
46.2/46.8Issue-Lösungsquote — 99 % der Issues geschlossen
33.2/38.3PR-Annahme — 334/385 entschiedene PRs gemergt
0/15OpenSSF Scorecard: Code-Review — Found 0/7 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs334
open_issues1
closed_issues81
issue_closed_ratio0,988
closed_unmerged_prs51
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
17.8/25Reichweite des Inhabers — 294 Follower von metonym
25/25Kontohistorie — 161 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers294
owner_typeUser
is_verified
owner_loginmetonym
public_repos161
account_age_days4.197
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 6 Tagen
20/20Versionshistorie — 89 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagessvelte-highlight
ecosystemsnpm
any_deprecatednein
min_days_since_publish6

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

76Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 2 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 3 out of 3 merged PRs checked by a CI test -- score normalized to 10
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://svhe.onrender.com
10/10Repository-Beschreibung
10/10Topics — 8 Topics
0/10Wiki
Verwendete Eingangsdaten
topicssvelte, highlight-js, highlight, code, syntax, syntax-highlighting, svelte-component, typescript
has_wikinein
homepagehttps://svhe.onrender.com
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

66Mittel · 16 % des Gesamtindex
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 3 out of 3 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/7 approved changesets -- score normalized to 0
1.5/2.5Contributors — project has 2 contributing companies or organizations -- score normalized to 6
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
5/5Pinned-Dependencies — all dependencies are pinned
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 49 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): signed_releases. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
35/35Direkte Abhängigkeiten ohne bekannte Advisories — keine direkte Abhängigkeit trägt ein bekanntes Advisory
25/25Indirekte Abhängigkeiten ohne bekannte Advisories — keine indirekte Abhängigkeit trägt ein bekanntes Advisory
0/40Keine offenen Advisories — kein Advisory trägt ein Veröffentlichungsdatum
Verwendete Eingangsdaten
sourceosv
advisories0
affected_packages0
assessed_packages2
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Keine offenen Advisories. Die verbleibenden Gewichte wurden renormalisiert. Abgeglichen wurde die Laufzeit-Abhängigkeitshülle von npm:svelte-highlight@7.16.0 — das, was die Installation des veröffentlichten Pakets nach sich zieht — mit 2 Paketen. Erreichbarkeit wird nicht analysiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

55Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 96 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,96
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — examples/rollup/tsconfig.json, examples/routify/tsconfig.json, examples/sveltekit/tsconfig.json, examples/vite/tsconfig.json, examples/vite@svelte-4/tsconfig.json, examples/webpack/tsconfig.json, tsconfig.json
0/10Reproduzierbare Umgebung
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfiles
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configsexamples/rollup/tsconfig.json, examples/routify/tsconfig.json, examples/sveltekit/tsconfig.json, examples/vite/tsconfig.json, examples/vite@svelte-4/tsconfig.json, examples/webpack/tsconfig.json, tsconfig.json
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.8/55Handhabbare Dateigrößen — 1/321 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes60.316
source_files_sampled321
oversized_source_files1
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

335GitHub-Sterne
3Mitwirkende
447Commits, letzte 12 Monate
2Tage seit letztem Push
69Releases
1Bus-Faktor
1offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Weitere Details

Stern- und Fork-Verlauf 0 ★ / 14 ⇿
0Sterne
14Forks
59Releases

Wann jeder Stern und Fork hinzugefügt wurde, von GitHub erfasst und nach Tagen gruppiert. Das kumulierte Wachstum steht direkt über den täglichen Zugängen, aus denen es besteht, sodass beide gegeneinander lesbar sind: stetiger organischer Zuwachs sieht ganz anders aus als ein abrupter, kurzlebiger Ausschlag. Wo dieser Unterschied messbar ist, wird er als Wachstumsauthentizität ausgewiesen.

03581013151412020-042023-012025-10
Major 7Minor 18Patch 32

Jeder Punkt umfasst 5 Tage.

OpenSSF Scorecard 5.7 / 10
5.7Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-25 22:33 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests3 out of 3 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/7 approved changesets -- score normalized to 0
6Contributorsproject has 2 contributing companies or organizations -- score normalized to 6
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
10Pinned-Dependenciesall dependencies are pinned
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities49 existing vulnerabilities detected
Direkte Abhängigkeiten 1
RegistryPaketVersionsvorgabeManifest
npmmagic-string^0.30.17package.json
Alle Abhängigkeiten 50

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 1 direkte und 49 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
npmmagic-string^0.30.17direkt
npm@astrojs/svelte^8.1.2indirekt
npm@biomejs/biome2.5.5indirekt
npm@playwright/experimental-ct-svelte1.58.2indirekt
npm@playwright/test1.61.1indirekt
npm@rollup/plugin-commonjslatestindirekt
npm@rollup/plugin-node-resolvelatestindirekt
npm@roxi/routify^3.6.4indirekt
npm@sveltejs/adapter-nodelatestindirekt
npm@sveltejs/kitlatestindirekt
npm@sveltejs/vite-plugin-svelte^3.1.2indirekt
npm@sveltejs/vite-plugin-svelte^5.1.1indirekt
npm@sveltejs/vite-plugin-svelte^7.1.2indirekt
npm@sveltejs/vite-plugin-sveltelatestindirekt
npm@tsconfig/sveltelatestindirekt
npm@types/bun^1.3.14indirekt
npm@types/jest^30.0.0indirekt
npm@types/node^25.9.5indirekt
npm@typescript/native-preview^7.0.0-dev.20260707.2indirekt
npmastro^6.4.8indirekt
npmcarbon-components-svelte^0.110.1indirekt
npmcarbon-preprocess-svelte^0.11.37indirekt
npmcss-loaderlatestindirekt
npmcssnano^7.1.9indirekt
npmcssnano-preset-lite^4.0.6indirekt
npmhighlight.js11.11.1indirekt
npmhtml-webpack-pluginlatestindirekt
npmmini-css-extract-pluginlatestindirekt
npmpostcss^8.5.19indirekt
npmpostcss-discard-duplicates^7.0.4indirekt
npmpostcss-inline-css-vars^0.1.0indirekt
npmpostcss-merge-rules^7.0.11indirekt
npmrolluplatestindirekt
npmrollup-plugin-sveltelatestindirekt
npmrollup-plugin-terserlatestindirekt
npmsvelte^4.2.20indirekt
npmsvelte^5.56.3indirekt
npmsvelte^5.56.6indirekt
npmsveltelatestindirekt
npmsvelte-highlight^7.16.0indirekt
npmsvelte-loaderlatestindirekt
npmsvelte-preprocesslatestindirekt
npmtypescriptlatestindirekt
npmvite^5.4.21indirekt
npmvite^7.3.6indirekt
npmvite^8.1.2indirekt
npmvitelatestindirekt
npmwebpacklatestindirekt
npmwebpack-clilatestindirekt
npmwebpack-dev-serverlatestindirekt
Abhängigkeits-Advisories 0

Die Installation von npm:svelte-highlight@7.16.0 zieht 2 Pakete nach sich, direkt und transitiv: 0 tragen bekannte Advisories, davon 0 direkte Abhängigkeiten.

Keine bekannten Advisories betreffen die bewerteten Abhängigkeiten.

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "svelte",
        "highlight-js",
        "highlight",
        "code",
        "syntax",
        "syntax-highlighting",
        "svelte-component",
        "typescript"
      ],
      "is_fork": false,
      "size_kb": 9610,
      "has_wiki": false,
      "homepage": "https://svhe.onrender.com",
      "languages": {
        "CSS": 2164,
        "HTML": 2038,
        "Astro": 14118,
        "Svelte": 253790,
        "JavaScript": 295552,
        "TypeScript": 561046
      },
      "pushed_at": "2026-07-23T14:47:19Z",
      "created_at": "2019-11-09T22:15:10Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T14:49:03Z",
      "description": "Syntax Highlighting for Svelte using highlight.js",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript",
        "JavaScript",
        "Svelte"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Eric Liu",
      "type": "User",
      "login": "metonym",
      "company": "@renderinc ",
      "location": "San Francisco, CA",
      "followers": 294,
      "avatar_url": "https://avatars.githubusercontent.com/u/10718366?v=4",
      "created_at": "2015-01-27T02:09:21Z",
      "is_verified": null,
      "public_repos": 161,
      "account_age_days": 4197
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v7.16.0",
          "kind": "minor",
          "published_at": "2026-07-19T22:24:49Z"
        },
        {
          "tag": "v7.15.0",
          "kind": "minor",
          "published_at": "2026-07-11T04:16:19Z"
        },
        {
          "tag": "v7.14.1",
          "kind": "patch",
          "published_at": "2026-07-07T02:11:55Z"
        },
        {
          "tag": "v7.14.0",
          "kind": "minor",
          "published_at": "2026-07-03T00:16:17Z"
        },
        {
          "tag": "v7.13.0",
          "kind": "minor",
          "published_at": "2026-06-27T04:05:00Z"
        },
        {
          "tag": "v7.12.0",
          "kind": "minor",
          "published_at": "2026-06-23T16:12:10Z"
        },
        {
          "tag": "v7.11.0",
          "kind": "minor",
          "published_at": "2026-06-07T21:29:06Z"
        },
        {
          "tag": "v7.10.1",
          "kind": "patch",
          "published_at": "2026-06-03T01:47:40Z"
        },
        {
          "tag": "v7.10.0",
          "kind": "minor",
          "published_at": "2026-06-02T17:38:13Z"
        },
        {
          "tag": "v7.9.0",
          "kind": "minor",
          "published_at": "2025-10-22T02:56:08Z"
        },
        {
          "tag": "v7.8.4",
          "kind": "patch",
          "published_at": "2025-08-31T18:55:10Z"
        },
        {
          "tag": "v7.8.3",
          "kind": "patch",
          "published_at": "2025-04-01T20:05:46Z"
        },
        {
          "tag": "v7.8.2",
          "kind": "patch",
          "published_at": "2024-12-28T02:44:15Z"
        },
        {
          "tag": "v7.8.1",
          "kind": "patch",
          "published_at": "2024-12-25T21:23:57Z"
        },
        {
          "tag": "v7.8.0",
          "kind": "minor",
          "published_at": "2024-12-15T21:35:55Z"
        },
        {
          "tag": "v7.7.0",
          "kind": "minor",
          "published_at": "2024-07-15T15:52:28Z"
        },
        {
          "tag": "v7.6.1",
          "kind": "patch",
          "published_at": "2024-05-16T02:49:43Z"
        },
        {
          "tag": "v7.6.0",
          "kind": "minor",
          "published_at": "2024-02-06T06:07:10Z"
        },
        {
          "tag": "v7.5.0",
          "kind": "minor",
          "published_at": "2024-02-02T04:56:29Z"
        },
        {
          "tag": "v7.4.8",
          "kind": "patch",
          "published_at": "2024-01-05T05:20:07Z"
        },
        {
          "tag": "v7.4.7",
          "kind": "patch",
          "published_at": "2023-12-28T18:10:36Z"
        },
        {
          "tag": "v7.4.6",
          "kind": "patch",
          "published_at": "2023-12-17T00:57:41Z"
        },
        {
          "tag": "v7.4.5",
          "kind": "patch",
          "published_at": "2023-12-17T00:43:53Z"
        },
        {
          "tag": "v7.4.4",
          "kind": "patch",
          "published_at": "2023-12-17T00:43:42Z"
        },
        {
          "tag": "v7.4.3",
          "kind": "patch",
          "published_at": "2023-12-16T19:00:46Z"
        },
        {
          "tag": "v7.4.2",
          "kind": "patch",
          "published_at": "2023-11-25T16:46:59Z"
        },
        {
          "tag": "v7.4.1",
          "kind": "patch",
          "published_at": "2023-10-13T15:51:20Z"
        },
        {
          "tag": "v7.4.0",
          "kind": "minor",
          "published_at": "2023-10-13T15:47:14Z"
        },
        {
          "tag": "v7.3.0",
          "kind": "minor",
          "published_at": "2023-05-13T17:40:42Z"
        },
        {
          "tag": "v7.2.1",
          "kind": "patch",
          "published_at": "2023-04-01T17:43:54Z"
        },
        {
          "tag": "v7.2.0",
          "kind": "minor",
          "published_at": "2023-02-14T23:11:52Z"
        },
        {
          "tag": "v7.1.2",
          "kind": "patch",
          "published_at": "2023-01-01T20:05:02Z"
        },
        {
          "tag": "v7.1.1",
          "kind": "patch",
          "published_at": "2023-01-01T02:52:15Z"
        },
        {
          "tag": "v7.0.1",
          "kind": "patch",
          "published_at": "2022-12-30T21:27:31Z"
        },
        {
          "tag": "v7.0.0",
          "kind": "major",
          "published_at": "2022-12-30T21:27:07Z"
        },
        {
          "tag": "v6.2.1",
          "kind": "patch",
          "published_at": "2022-08-07T17:01:27Z"
        },
        {
          "tag": "v6.2.0",
          "kind": "minor",
          "published_at": "2022-07-13T15:35:06Z"
        },
        {
          "tag": "v6.1.2",
          "kind": "patch",
          "published_at": "2022-07-02T15:54:20Z"
        },
        {
          "tag": "v6.1.1",
          "kind": "patch",
          "published_at": "2022-06-27T12:22:04Z"
        },
        {
          "tag": "v6.1.0",
          "kind": "minor",
          "published_at": "2022-06-10T14:44:12Z"
        },
        {
          "tag": "v6.0.1",
          "kind": "patch",
          "published_at": "2022-03-26T17:23:19Z"
        },
        {
          "tag": "v6.0.0",
          "kind": "major",
          "published_at": "2022-03-26T17:23:01Z"
        },
        {
          "tag": "v5.3.2",
          "kind": "patch",
          "published_at": "2022-03-17T03:05:49Z"
        },
        {
          "tag": "v5.3.1",
          "kind": "patch",
          "published_at": "2022-03-17T02:40:15Z"
        },
        {
          "tag": "v5.3.0",
          "kind": "minor",
          "published_at": "2022-03-12T17:05:23Z"
        },
        {
          "tag": "v5.2.2",
          "kind": "patch",
          "published_at": "2022-02-25T15:20:35Z"
        },
        {
          "tag": "v5.2.1",
          "kind": "patch",
          "published_at": "2022-02-12T00:38:21Z"
        },
        {
          "tag": "v5.2.0",
          "kind": "minor",
          "published_at": "2022-01-06T16:12:11Z"
        },
        {
          "tag": "v5.1.4",
          "kind": "patch",
          "published_at": "2021-12-18T15:12:57Z"
        },
        {
          "tag": "v5.1.3",
          "kind": "patch",
          "published_at": "2021-11-13T23:14:36Z"
        },
        {
          "tag": "v5.1.2",
          "kind": "patch",
          "published_at": "2021-10-19T16:01:32Z"
        },
        {
          "tag": "v5.1.1",
          "kind": "patch",
          "published_at": "2021-10-19T15:48:39Z"
        },
        {
          "tag": "v5.1.0",
          "kind": "minor",
          "published_at": "2021-10-17T14:30:49Z"
        },
        {
          "tag": "v5.0.0",
          "kind": "major",
          "published_at": "2021-10-08T23:05:09Z"
        },
        {
          "tag": "v4.0.0",
          "kind": "major",
          "published_at": "2021-09-16T19:08:54Z"
        },
        {
          "tag": "v3.4.0",
          "kind": "minor",
          "published_at": "2021-09-12T22:35:37Z"
        },
        {
          "tag": "v3.3.0",
          "kind": "minor",
          "published_at": "2021-09-01T16:17:17Z"
        },
        {
          "tag": "v3.2.1",
          "kind": "patch",
          "published_at": "2021-09-01T16:17:42Z"
        },
        {
          "tag": "v3.2.0",
          "kind": "minor",
          "published_at": "2021-08-02T13:23:58Z"
        },
        {
          "tag": "v3.1.0",
          "kind": "minor",
          "published_at": "2021-07-08T15:21:28Z"
        },
        {
          "tag": "v3.0.0",
          "kind": "major",
          "published_at": "2021-05-30T12:51:56Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2021-05-21T22:09:27Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2021-04-30T21:28:35Z"
        },
        {
          "tag": "v2.0.0-rc.1",
          "kind": "prerelease",
          "published_at": "2021-04-30T21:28:52Z"
        },
        {
          "tag": "v2.0.0-rc.0",
          "kind": "prerelease",
          "published_at": "2021-04-30T21:29:04Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2021-04-23T22:12:32Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2021-04-23T21:12:16Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2021-02-13T22:54:57Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2021-02-13T22:24:56Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "e4f6958d0fdff1aeb0c2f42b5b28c80e64e4d18b",
          "body": null,
          "is_bot": false,
          "headline": "chore(deps-dev): patch Biome to 2.5.5 (#472)",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-23T14:47:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "673a5ba7ac86e676eef645b593ef8165f768bf3a",
          "body": null,
          "is_bot": false,
          "headline": "docs: fix example formatting",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:37:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "654cf50c8ede26e5bf65019e60d9871de0a77c3a",
          "body": null,
          "is_bot": false,
          "headline": "chore(examples): bump deps",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:29:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6bda2e385b7a257acc0adefc98b69e6313d6687b",
          "body": null,
          "is_bot": false,
          "headline": "chore(deps-dev): bump deps",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "768e2ecf7014ff2a127573dca880ca547f64177f",
          "body": null,
          "is_bot": false,
          "headline": "v7.16.0",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:23:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4d697e0cb15e521694c248640a1315ba7467c15",
          "body": null,
          "is_bot": false,
          "headline": "test(languages): bump supported language count to 247",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9deea5ca5043e432edaff87fb80a85e1e887e33e",
          "body": null,
          "is_bot": false,
          "headline": "docs(preview): add sparql language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26e4225ddc9968e7140b6fc38efca7eb9865336f",
          "body": null,
          "is_bot": false,
          "headline": "feat(languages): add custom `sparql` language",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b669b5c54ef0a50cb55936b7dc71263eb844614",
          "body": null,
          "is_bot": false,
          "headline": "docs(preview): add heex language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79c40801af1dc40176ca33d2027d792de9b35112",
          "body": null,
          "is_bot": false,
          "headline": "feat(languages): add custom `heex` language",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc113b3719617c46563d8f9eca10cf461a76d82e",
          "body": null,
          "is_bot": false,
          "headline": "docs(preview): add gdscript language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8aa6b1e4eb157e13f473e895e4a730e728b63008",
          "body": null,
          "is_bot": false,
          "headline": "feat(languages): add custom `gdscript` language",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T22:06:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "357039484c7184a7ff40f2040e481b162cd31b16",
          "body": "…tion\n\nThe top-level declaration matcher (model/enum/type/view/datasource/\ngenerator + name) had no line-start anchor, so an ordinary field named\n\"type\" (a common discriminator/field name) followed by its own type,\ne.g. `type   String` inside a model body, matched the exact same\nshape as a real `typ\n[…]\ne\nsynthetic keyword-list sample puts every keyword on one line with no\nindentation, so only the first pair still triggers the anchored\nmatcher; the rest correctly fall back to plain keyword coloring).",
          "is_bot": false,
          "headline": "fix(languages): don't mistake a prisma field named type for a declara…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "882f6b3ea39dcd4f4afc24234f6a17f723aaf538",
          "body": "The inline JSX tag's end pattern matched the first > anywhere,\nincluding one from a JS comparison inside a brace attribute\nexpression (highlight={value > threshold}), closing the tag\nmid-attribute and leaving the real closing /> to fall outside it.\n\nNarrowly scoped fix: only intervene for a {...} th\n[…]\ng/attr/string styling. An earlier\nattempt that intercepted every {...} unconditionally fixed the bug but\nregressed that common case by fragmenting the surrounding tag into\ndisconnected HTML fragments.",
          "is_bot": false,
          "headline": "fix(languages): keep mdx JSX tags open through a > inside {...}",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b5e9cd7c430a415aa8e60c2ee7f36d62ad19db2c",
          "body": "DURATION only allowed a single number+unit segment, so compound\nPrometheus-style durations like [1h30m] in\nrate({job=\"x\"}[1h30m]) didn't match as a duration token at all.\nRepeat the number+unit segment to allow more than one.",
          "is_bot": false,
          "headline": "fix(languages): highlight compound logql durations",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e50e7e62877c2ec9785a0677f213860af0a88df",
          "body": "beginKeywords listed \"def\" before \"def-env\"; regex alternation tries\nalternatives in order and isn't longest-match, so \"def-env myFunction\"\nmatched only \"def\", leaving \"-env\" unconsumed to be swallowed by the\nnested title regex (which allows hyphens) as if it were part of the\nfunction name. List the longer alternative first.",
          "is_bot": false,
          "headline": "fix(languages): stop nushell def-env from corrupting the title match",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ddfe89394bbe7a4cece29ab943c2808c4792413",
          "body": "SITE_ADDRESS required the whole line to be a single address token\nfollowed by `{`, so common multi-address headers like\n`example.com www.example.com {` got no attr styling at all -- the\nlookahead failed right after the first address. Repeat the address\ntoken to allow more than one.\n\nAnchored the who\n[…]\n\nunindented) to avoid a regression: the address-token class allows\nbare words, so without that anchor the repeating group also matched\nan indented directive-with-argument line like `transport http {`.",
          "is_bot": false,
          "headline": "fix(languages): highlight caddy multi-address site headers",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88acf74a8573ab4dd1cba12d22eda6117093e213",
          "body": "The \"meta\" rule for the closing --- fence could never fire: the\nfrontmatter mode's own end (with excludeEnd: true) already consumed\nthat line to close the TypeScript sub-block, advancing past it before\nthe sibling rule ever got a chance to see it -- dead code. Switch to\nreturnEnd so the fence text i\n[…]\nof-document alternative, mirroring the frontmatter\nmode's own end pattern.\n\nGraduates astro out of the auto-detection KNOWN_AUTO_DETECT_GAPS list:\nthe added relevance now wins full-corpus auto-detect.",
          "is_bot": false,
          "headline": "fix(languages): style astro's closing frontmatter fence",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "be19bf3783574be1050ea382dfcc98574eab30c8",
          "body": "RECIPE_HEADER's default-value alternation only allowed a quoted\nstring or a bare identifier, not a function call, e.g.\nserve port=env_var_or_default(\"PORT\", \"8080\"):. The whole header\nlookahead failed at the unhandled `(`, so the recipe name and every\nparameter lost their title/params styling entirely.",
          "is_bot": false,
          "headline": "fix(languages): recognize just recipe params with function-call defaults",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e663d9f99f40a45ddd3796aa10d9202367978b06",
          "body": "SCRIPT_BLOCK's body had a bare `end: /\\}/` with no brace balancing, so\nany nested `{}` in the JS body (e.g. an if statement) closed the mode\nat the inner block's own closing brace, leaving the true closing\nbrace and anything after it to fall through to top-level parsing.\nAdd a nested balancer -- repeating `subLanguage: \"javascript\"` on it,\nsince a nested `contains` mode doesn't inherit the parent's\nsubLanguage.",
          "is_bot": false,
          "headline": "fix(languages): balance nested braces in templ legacy script blocks",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcf10d587c53014ccf7b4958a0e834990317559f",
          "body": "CODE_MODE's lookahead required a letter/underscore right after `#`,\nso the common bare code-block idiom #{ let x = 5 } (no leading\nkeyword or function call before the brace) was never recognized as\ncode at all -- everything inside stayed unhighlighted. Also allow a\nbare `{`/`(`/`[` to follow `#`.",
          "is_bot": false,
          "headline": "fix(languages): recognize bare typst #{ } code blocks",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c5dbb0098c5d3e5f7231e581d04c226e03cb6a64",
          "body": "STRONG/EMPHASIS's `end` patterns were `(?!\\s)\\*` / `(?!\\s)_` -- a\nno-op, since the lookahead and the literal both anchor to the same\nposition and the delimiter itself is never whitespace, so it always\npassed regardless of what preceded it. Typst's actual rule (\"word*\"\ncloses, \"word *\" doesn't) depends on the preceding character, which\nlookbehind can't check here, so require that character as part of the\nmatch itself instead.",
          "is_bot": false,
          "headline": "fix(languages): make typst strong/emphasis respect the whitespace rule",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4199e036a26875243f62328d7237c4f3756c9ec",
          "body": "SEMANTIC fired on any `: identifier`, misfiring on ternary\nexpressions (`cond ? a : b`) and switch/case labels. Without deeper\nparsing there's no structural way to tell those colons apart from a\nreal semantic, so lean on an actual HLSL convention instead: semantics\nare always ALL_CAPS (POSITION, TEXCOORD0, SV_TARGET, ...), while\nternary/case values are ordinary identifiers.",
          "is_bot": false,
          "headline": "fix(languages): stop hlsl semantics matching ternary/switch colons",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd46ac0c332ed84fc719871e8573be01a869bae8",
          "body": "ATTRIBUTE required a parenthesized argument list, so parameterless\nattributes -- [unroll], [loop], [branch], [flatten],\n[earlydepthstencil] -- never matched at all. Make the arg list\noptional.",
          "is_bot": false,
          "headline": "fix(languages): highlight parameterless hlsl attributes",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63a5ee56c34cfef0ac1eeaa3ffd02897d509d20d",
          "body": "storeSubscriptionPattern's identifier class was [\\w-]*, but JS/TS\nidentifiers can't contain a hyphen. {$count-1} (no surrounding spaces)\nmatched \"$count-1\" as a single variable token instead of $count, -, 1.\nUse \\w* for the name, matching real identifier syntax.",
          "is_bot": false,
          "headline": "fix(languages): don't swallow a trailing hyphen into svelte stores",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e0cb729b6ca1f22cc99dc92059239dc37ee6464",
          "body": "NUMBER's hex variant lacked `_` in its digit class, so a digit-\nseparated hex literal like 0x1234_5678 only matched up through\n\"0x1234\" -- and even that partial match failed the trailing \\b\n(underscore is a word character, so there's no boundary), leaving the\nwhole literal unhighlighted.",
          "is_bot": false,
          "headline": "fix(languages): highlight solidity hex literals with underscores",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "972e7f1c38cd75a58fecf4e11bc8c92a714dc917",
          "body": "The contract/interface/library header's nested `title` matcher had no\nrestriction, so it kept re-firing for every identifier in\n`contract Foo is Ownable, ReentrancyGuard {` -- tagging `is` and every\ninherited contract name as `title` too. Bound the match to just the\ndeclaration's own name (keyword +\n[…]\n\nsnapshot for the resulting soft-gate diff (the synthetic keyword-list\nsample has no `{` at all, so the mode never closes there either, but\nthe blast radius is now just the one word after \"contract\").",
          "is_bot": false,
          "headline": "fix(languages): don't tag solidity inheritance lists as titles",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "87870034171d8dfec964a0b0f3c4d12b24e3c6f3",
          "body": "LABEL's bare `:identifier` pattern collides with map-literal syntax\nwhenever a value is itself an identifier expression, e.g.\n`{name: n.name}` -- `:n` got misdetected as a node label. Give map\nliterals their own scoped mode (keyed by a new MAP_KEY for the\n`key:` side) instead of trying to exclude this with LABEL's own\npattern, since LABEL is legitimately reused for node-label chains\n(`(n:Person:Employee)`) where the same \"preceded by a word char\"\nheuristic can't distinguish the two cases.",
          "is_bot": false,
          "headline": "fix(languages): don't mistake cypher map values for node labels",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78dc9a3712cba2aacf70ebe60fba36078dd8196b",
          "body": "RECORD_FIELD fires on any `identifier = value` sequence, which is\nidentical surface syntax to a `let` binding -- `let x = 5 in x + 1`\nrendered `x` as an attr (record-field) exactly as if it were `{ x = 5 }`.\nAdd a LET_BINDING mode that matches `let` together with the bound\nname; since its match star\n[…]\nical as real Nickel, which\nalways names a binding), so LET_BINDING's bounded match captures \"in\"\nas if it were the bound name there -- harmless for real code, but a\nsoft-gate diff worth acknowledging.",
          "is_bot": false,
          "headline": "fix(languages): don't mistag nickel let-bound names as record fields",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b41bb10bf1c49b592597687141b466970ef1a9bb",
          "body": "METRIC's negative lookahead only excludes recognized keywords/\naggregators/functions, so bare identifiers inside a by(...)/\nwithout(...) grouping clause (e.g. `sum by (job, instance) (up)`)\nfell through to METRIC and got tagged as metric names instead of\ngrouping labels. Add a dedicated GROUPING_LAB\n[…]\ns duration variant stopped at the range part.\nExtend that variant to consume the optional `:resolution` (which may\nitself be a bare `:` with the resolution omitted) as part of the same\nduration token.",
          "is_bot": false,
          "headline": "fix(languages): fix promql grouping labels and subquery resolution",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "86c6df672cc1c681f4c7ba7371b2409306f1c8b6",
          "body": "Two related bugs: BUILT_IN_CALL matched any call-like identifier\nfollowed by \"(\", so user-defined rules like is_valid_user(u) got\ntagged as built_in both at their definition and every call site,\nmisleadingly implying they're language builtins. Restrict it to an\nalternation of the actual REGO_BUILTIN\n[…]\n (function-style rules), so\nis_valid_user(u) { was never recognized as a rule definition at all --\nit fell through entirely to the now-fixed BUILT_IN_CALL. Extend the\nlookahead to also accept `(...)`.",
          "is_bot": false,
          "headline": "fix(languages): recognize rego function-style rule heads",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "efab4e9b91bf517cc2803a496106f2601506f4ed",
          "body": "STRING's variants had no contains at all, so an escaped quote inside\nan echo (e.g. {{ \"Say \\\"hi\\\" to me\" }}) matched the string's own end\npattern and terminated it early -- splitting one string into two\nmismatched spans around the stray backslashes. Add\nhljs.BACKSLASH_ESCAPE, matching what hljs.QUOTE_STRING_MODE already\ndoes (this was a from-scratch reimplementation that dropped it).",
          "is_bot": false,
          "headline": "fix(languages): handle escaped quotes in blade strings",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b239a858c6b819f34168f14bee0e46717cf5bc7e",
          "body": "DIRECTIVE's regex (@[a-zA-Z]\\w*) had no boundary check, so any\nword@word sequence -- most commonly an email address in markup text,\ne.g. foo@example.com -- got its domain misdetected as a directive.\nLookbehind isn't an option, so the preceding character is captured\nand consumed (left unstyled) inste\n[…]\nently disabling the PHP subLanguage\nembedding. Refreshes the golden snapshot for blade's now-cosmetically\ndifferent (but equally correct) span boundary around the sample's\n\"#hashtag @annotation\" case.",
          "is_bot": false,
          "headline": "fix(languages): don't mistake email addresses for blade directives",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ffa164c717aa39336d337a8365d8c86b67c5ff7d",
          "body": "markoControlFlow matched \"else if\" (space), but Marko's actual tag is\nelse-if (hyphen). The regex still fired on the \"else\" prefix (\\b holds\nat the hyphen), leaving \"-if(...)\" outside the keyword span -- a\npartial-match bug, not a total miss.",
          "is_bot": false,
          "headline": "fix(languages): recognize marko's else-if hyphen form",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71696e4a2b940e1ab309b37f4ed80e23a944658c",
          "body": "The concise-tag lookahead's tag-name char class had no room for `.`\nor `#`, so a line like `div.container` -- Marko's class/id shorthand,\nused constantly in concise mode -- never matched the lookahead at all\nand got no tag/name highlighting whatsoever. Share a single\nMARKO_TAG_NAME pattern (base name + repeated .class/#id segments)\nbetween the outer lookahead and the inner name matcher.",
          "is_bot": false,
          "headline": "fix(languages): recognize marko concise class/id shorthand on tags",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0e67c543e8d1da6d17750ba7ca395692936128e",
          "body": "Only the explicit @{ }/@code { }/@functions { } forms were wired up to\nC# tokenization. Implicit blocks -- @if (...) { }, @foreach (...) { },\n@for, @while, @switch, @else -- are Razor's single most common way to\nmix control flow with markup, but got zero C# handling: the keyword,\ncondition, and body\n[…]\nan implicit block's body mixes HTML tags and @expressions with\nC#, so it needs TAG/EXPRESSION handling, not just CSHARP_BODY_CONTAINS).\nAlso add `in` to the C# keyword list, used by every foreach/for.",
          "is_bot": false,
          "headline": "fix(languages): recognize razor implicit control-flow blocks",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "00b228223741e4acbbf0fc3584a2d173c86cc7c6",
          "body": "The previous fix (993f8e2) changed the fn mode's `end` to `/\\(/`, but\nan open-ended forward search for `(` risks scanning to the end of the\ndocument if a `(` never follows (e.g. malformed/partial input) --\ncaught by the golden-snapshot test, which feeds each grammar's own\nkeyword list back as a sing\n[…]\no\nopen-ended scan at all.\n\nAlso refreshes the golden snapshot for pug (98f4a7e's control-flow\nkeyword fix changed its output but the snapshot wasn't updated) and\nzig (this commit's own output change).",
          "is_bot": false,
          "headline": "fix(languages): bound zig fn-name match to avoid runaway scan",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "66554d11961ee9110a9e92a9d3139be730a86762",
          "body": "The generic line-start tag-shorthand rule matched any line beginning\nwith a letter, including if/else/each/case/when/etc, before the\ntop-level keyword scanner got a chance -- so Pug's core control-flow\nkeywords rendered as selector-tag (as if they were HTML tag names).\nAdd a dedicated keyword rule for PUG_KEYWORDS ahead of the tag rule so\nit wins the tie at line start.",
          "is_bot": false,
          "headline": "fix(languages): don't shadow pug control-flow keywords with tag rule",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4ed905500a11f83a75b14531fd969291fd419c0",
          "body": "NUMBER's decimal variants used a [ifh]? suffix class, omitting `u`.\nSince a digit immediately followed by `u` has no word boundary to\nsatisfy the trailing \\b, the whole match failed -- WGSL's ubiquitous\nunsigned-int suffix (42u, 0u) never highlighted as a number at all.",
          "is_bot": false,
          "headline": "fix(languages): highlight wgsl unsigned-integer number suffix",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25da324b0d8238efa29cac33e0cd3749d448686d",
          "body": "The `fn` mode ended on `end: /[(\\s]/`, which matched the space right\nafter `fn` (Zig always writes `fn add(...)` with a space before the\nname) before the nested title-matcher ever got to run. Function names\nwere never highlighted in any real Zig code. Wait for the opening\nparen instead so the name in between gets a chance to match.",
          "is_bot": false,
          "headline": "fix(languages): highlight zig function names",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d77d902e378586be9204ce50b51d72923546d74",
          "body": "vueDirective's lookahead required =, whitespace, or > immediately after\nthe directive name, so longhand directives with an explicit argument\n(v-bind:href, v-on:click, v-slot:name) never matched at all -- the\ncolon broke the lookahead before it could succeed. Extend the regex to\noptionally consume :arg or the dynamic-argument form :[key].",
          "is_bot": false,
          "headline": "fix(languages): recognize vue longhand directive arguments",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a48a978c8948bcb28c7844fa7e2f1bb58aac5e96",
          "body": "hcl, nickel, nushell, pkl, and jq all close their `${...}`/`%{...}`/`\\(...)`\ninterpolation modes on the first matching `}`/`)`, so any interpolation\ncontaining a nested call or bare object/record literal with the same\nclosing character ends prematurely (e.g. hcl's\n`${merge(local.tags, { Name = \"x\" }\n[…]\ned the\ngeneric `hljs.BACKSLASH_ESCAPE` (`\\<anything>`) before the more specific\n`\\(` interpolation start, so the escape mode always won the tie and\ninterpolation never fired at all in either language.",
          "is_bot": false,
          "headline": "fix(languages): balance nested delimiters in string interpolation",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T21:35:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "071f402cacbd1e66dfc7a14ae01621a2ae2a4f2f",
          "body": null,
          "is_bot": false,
          "headline": "chore(deps-dev): upgrade @biomejs/biome to 2.5.4 (#469)",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-19T19:31:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a7ae87e1b0cb318816cd16cd4c22ba1c0d0f4f4",
          "body": "Interactive showcase at /preview-define-theme: role-color swatches\ndrive a live defineTheme() palette, a toggle switches to an\nextendTheme(atomOneDark, ...) variant, and both render through\nHighlightStyle. Not linked from the top nav or any listing page\n(mirrors every other /preview-* route in this \n[…]\n only registered\nin Header's hiddenRoutes so it gets a proper page heading.\n\nAlso runs the project's import-ordering assist (fix:imports) over a\nfew theme-related files whose import order had drifted.",
          "is_bot": false,
          "headline": "docs(www): add an unlisted defineTheme/extendTheme preview page",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-12T03:20:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25a6ab17f7e1119f593e15e5c5f0430d98213df1",
          "body": "Programmatic theme authoring on top of the ThemePalette format:\n\n- defineTheme(): build a complete palette from ~14 semantic roles\n  (comment, keyword, string, function, type, ...) plus optional\n  per-scope overrides; roles expand to hljs scope variables via a\n  documented mapping table\n- extendThem\n[…]\nanged)\n- a build-time report measures how much of each shipped theme the\n  role layer alone reconstructs, keeping the mapping honest\n\nAdditive only: no changes to components, shipped palettes, or CSS.",
          "is_bot": false,
          "headline": "feat(theme): add defineTheme, extendTheme, and a TextMate importer",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-12T03:20:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8f9c95c247881fbb9269025033016edb80e85537",
          "body": "Both failures on PR #466's e2e-tests job were races in the test\nassertions themselves, not in the components under test:\n\n- The HighlightStream chunk-growth check read `stream`'s text once\n  after `highlightCount` had already updated, assuming both DOM\n  regions land in the same paint. Under CI's sl\n[…]\n new scroll\n  position.\n\nNeither reproduced locally after ~250 runs across full-suite and\ntargeted repeat-each invocations, consistent with CI-only timing\npressure rather than a functional regression.",
          "is_bot": false,
          "headline": "test(e2e): fix two flaky webkit-only assertions in CI",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-12T03:20:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "761b68a98091f806730ece0568f5eeb5c88f4d4e",
          "body": "Adds a \"Large Documents\" section to the homepage covering\nHighlightVirtual and headless svelte-highlight/tokenized-document,\nplus an unlisted /preview-virtual kitchen sink (bounded-DOM-node\ncounter, overscan/checkpointInterval/jump-to-line controls, several\nlanguages, document swapping, CodeWindow composition, and a live\nheadless lineRange demo), following the site's existing preview-*\nconvention.",
          "is_bot": false,
          "headline": "docs(www): document HighlightVirtual and add a preview-virtual page",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-12T03:20:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "588c332bbc27a4790487b2868ccce368c2272aa1",
          "body": "Two bugs in the just-shipped HighlightVirtual: a static\nclass=\"shl-virtual\" attribute combined with class:hljs and\n{...$$restProps} was silently dropped whenever a consumer also\npassed class (the normal way to theme or size the component),\nlosing all of the component's own layout CSS. And the hidden\n[…]\nlass: directive instead of a static class\nattribute, and by giving the component's <pre> position: relative\nso absolutely positioned descendants anchor to it. Both are covered\nby new regression tests.",
          "is_bot": false,
          "headline": "fix(components): stop HighlightVirtual's class and sizer from leaking",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-12T03:20:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3d452e293f698dc4d76a5674286a0ee2e840d9a8",
          "body": "Make rendering cost independent of document length by exploiting the\nengine's serializable parse checkpoints:\n\n- new svelte-highlight/tokenized-document: a TokenizedDocument that\n  snapshots the tokenizer every N lines and produces highlighted\n  HTML for any line range in O(window + interval); token\n[…]\ne differentially tested against a straight-\n  through parse across the corpus: checkpointing never changes\n  output\n\nAdditive: one new component, one new module, no API changes to\nexisting components.",
          "is_bot": false,
          "headline": "feat(components): windowed rendering via a checkpointed document index",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-12T03:20:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1bfe1328d1bab99a053d54cd2cc19d0266eed130",
          "body": "Promote the engine's token surface from internal modules to\ndocumented, semver-stable exports so highlighting can be consumed\nheadlessly and future features (transformers, windowing, alternate\nrender targets) build on a stable seam:\n\n- new svelte-highlight/engine subpath: ScopeEvent stream and\n  TEX\n[…]\n is\n  generated data versioned with the library; Snapshot is a\n  serializable format within a version\n- README: headless and server-side usage\n\nNo behavioral changes to existing components or exports.",
          "is_bot": false,
          "headline": "feat(engine): expose the scope-event stream as public API (#464)",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-11T17:23:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca0c0f57b6bfb8539713f0c00a3239ee276c8b02",
          "body": "Tokenizer.subContinuations carried an embedded sub-language's leftover\nparse frames forward by name alone, for the outer tokenizer's whole\nlifetime. That's correct for resuming the *same* embedding across\nsegments (streaming edits, snapshot()/restore()), but nothing stopped\na later, textually unrela\n[…]\nn the heading/emphasis case, which turned out to be a different,\nseparate, still-open markdown grammar-conversion gap - the real-file\nallowlist entry for README.md is updated to describe that instead.",
          "is_bot": false,
          "headline": "fix(engine): scope sub-language continuation state to its own occurrence",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-11T17:01:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "956cf17459b60495dd9a8bb38f85f5e7aa262c11",
          "body": "Compile every highlight.js theme into a structured ThemePalette at\nbuild time and ship a CSS-variable theming architecture alongside\nthe existing stylesheet strings:\n\n- themes/base.css: one shared structural stylesheet mapping .hljs\n  classes to --shl-* custom properties, with fallback chains that\n \n[…]\ndropped declaration\n\nThe legacy string exports (svelte-highlight/styles/*) and the\nscoped-CSS HighlightStyle path are unchanged and fully supported.\nCustom classPrefix users remain on the legacy path.",
          "is_bot": false,
          "headline": "feat(styles): compile themes to palettes with CSS-variable theming",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-11T17:01:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f5f2c888f43757916bc855d7cf831e1420806f0",
          "body": "…nt markdown embeds (#462)\n\nTokenizer.subContinuations (src/engine.js) is keyed only by\nsub-language name and scoped to the outer tokenizer's whole\nlifetime. It exists so one embedded region can resume across\nseparate flush() calls - e.g. streaming edits via HighlightStream/\nHighlightEditable, resto\n[…]\nthe correct fix\nneeds to scope continuation by embedding occurrence (not just\nsub-language name) while preserving it across snapshot()/restore().\nThat's a deliberate, separate change from this report.",
          "is_bot": false,
          "headline": "test(engine): document a subContinuations state leak across independe…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-11T16:20:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "85a0706d48d01ba332a84052ae8e2a67eb54a310",
          "body": null,
          "is_bot": false,
          "headline": "feat: replace highlight.js runtime with an original engine (#461)",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-11T05:03:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fe263d652bd3213659ee93e935df70be29e6dcb",
          "body": null,
          "is_bot": false,
          "headline": "v7.15.0",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-11T04:15:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20e280bd2f06d46c2a986c8181756fc8e41a047e",
          "body": "…innerText\n\ninnerText forces a synchronous layout on every keystroke and, on\nFirefox, can return a stale value right after editing a text node\nlast written via textContent -- the exact bug the css-highlights\nengine had to special-case around.\n\nVerified natively (execCommand insertText, the primitive\n[…]\noth engines can read textContent\nunconditionally, dropping the per-engine branch and the layout cost.\n\nConfirmed no behavior change against the full Playwright suite across\nall three browser projects.",
          "is_bot": false,
          "headline": "perf(components): read HighlightEditable's code via textContent, not …",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T23:50:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08334942a7e497da656c447e456073012b31e213",
          "body": "… unmounts\n\nDedup picked the first-mounted instance sharing a theme+scope key to\nrender the shared <style> tag and froze that choice for its lifetime.\nIf that instance unmounted while sibling instances with the same key\nwere still mounted, the tag disappeared and every surviving instance\nlost its th\n[…]\nace the plain ref count with a store holding an ordered queue of\nowner tokens per key: siblings reactively promote the next-in-line\ninstance when the current owner releases, instead of losing the tag.",
          "is_bot": false,
          "headline": "fix(components): hand off HighlightStyle's <style> tag when its owner…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T23:50:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6ed5775297ba7bffe28fb157c3e530157331cd8b",
          "body": "Opt-in engine=\"css-highlights\" keeps the editable DOM as plain text\nand paints tokens as CSS.highlights ranges via a custom hljs emitter,\nso repaints never replace nodes on unaffected lines. Theme colors come\nfrom a converter that rewrites .hljs-* class rules into ::highlight()\nrules (colors only — the API's cross-browser envelope). Falls back to\nthe DOM engine where CSS.highlights is unavailable. Experimental;\nbrowser floor Chrome 105 / Safari 17.2 / Firefox 140.",
          "is_bot": false,
          "headline": "feat(components): experimental CSS Custom Highlight engine for editable",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T23:50:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64509e188c887e624def519bb22e7f83e808bd19",
          "body": "Adds a \"Streaming\" section to the docs homepage with a basic demo and\na speed/auto-scroll control panel, plus an unlisted /preview-highlight-stream\nroute exercising chunk-by-chunk streaming, multi-line re-tokenization,\nauto-scroll detach, and caret theming. All examples simulate streaming\nclient-side since the docs site has no real streaming backend.",
          "is_bot": false,
          "headline": "docs(www): document HighlightStream and add a kitchen-sink preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T16:29:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51754f65c5f020882da558285b78eb6af676a3c1",
          "body": "Rendering LLM output is the dominant new highlighting use case and no\nSvelte-native solution exists. HighlightStream re-highlights the\ngrowing buffer per animation frame (hljs is fast synchronously) but\nrenders through the span-safe line splitter with keyed per-line DOM,\nso unchanged lines are never\n[…]\nix, typically one line per frame. Handles arbitrary chunk\nboundaries, re-tokenizes earlier lines when a multi-line construct\ncloses, sticks to bottom unless the user scrolls up, and finalizes on\ndone.",
          "is_bot": false,
          "headline": "feat(components): add HighlightStream for incrementally streamed code",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T16:29:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "212b880d26e3d22035e8f3fe17ce998924df1ade",
          "body": "…ightEditable\n\nCover the line-repaint optimization directly: an edit on a large\ndocument must leave unrelated line elements connected and stay within\na generous time budget, catching a regression to whole-document\ninnerHTML rebuilds.",
          "is_bot": false,
          "headline": "test(components): add DOM-stability and perf-smoke coverage for Highl…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T16:13:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c094a180a2564efe0001af5c235b7c5fb77cbfab",
          "body": "The undo stack retained up to historyLimit full copies of the\ndocument. Entries are now prefix/suffix-trimmed splices, bounding\nmemory by edit size rather than document size, with burst\ncoalescing and event shape preserved.",
          "is_bot": false,
          "headline": "perf(components): store HighlightEditable history as slice diffs",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T16:13:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51615d6b9e3b7ca69f705cc88f046192a766c120",
          "body": "…used\n\nA document-level selectionchange listener stringified the entire\neditor content on every selection change anywhere on the page.",
          "is_bot": false,
          "headline": "perf(components): track selection only while HighlightEditable is foc…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T16:13:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3bff41efdc1cbc2cd772f34555f138e1cfb60177",
          "body": "Every keystroke rebuilt the whole highlighted DOM via innerHTML and\nre-walked it to restore the caret, making large documents jank.\nPainting now diffs span-safe line fragments and replaces only changed\nline elements — typically one per edit.",
          "is_bot": false,
          "headline": "perf(components): repaint only changed lines in HighlightEditable",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T16:13:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4475d08571fc470ed7a25e3e4a41a40b687f7789",
          "body": "…455)\n\nUpdates re-highlighted the element's own highlighted output when code\nwas omitted, grammar errors escaped the action, and destroy left the\nmutated DOM behind. Snapshot source text on init, highlight from the\nsnapshot, guard hljs errors, and restore original content on destroy.",
          "is_bot": false,
          "headline": "fix(action): make the `highlight` action idempotent and reversible (#…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T15:55:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3319f17e27aaa8e6f3374066c42d9efe642339ff",
          "body": "hljs.highlight/highlightAuto throw value.replace-is-not-a-function on\nnon-string input, crashing render — including SSR. Coerce defensively\nin Highlight, HighlightAuto, and HighlightSvelte before highlighting.",
          "is_bot": false,
          "headline": "fix(components): coerce non-string code before highlighting (#456)",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T15:45:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "719a29781e5a413c77d865118d08d72c579029f9",
          "body": "…ge (#454)\n\nThe scope class was hashed from the theme once at init while the\ninjected CSS recomputed reactively, so two blocks that mounted with\nthe same theme and later diverged shared one scope class with\nconflicting stylesheets: both themes applied to both blocks.\n\nAlso dedupes head injection (one <style> per scope class, refcounted\nin the browser) and renders nothing with a dev warning when no theme\nis provided instead of injecting the literal string \"undefined\".",
          "is_bot": false,
          "headline": "fix(components): recompute `HighlightStyle` scope class on theme chan…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:47:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ca043a859cc620934d76839a397e19e3e3b91e0",
          "body": "…es (#451)\n\nThe language prop reactively re-registered the grammar but nothing\nrepainted, so highlighting stayed stale until the next keystroke.",
          "is_bot": false,
          "headline": "fix(components): re-highlight `HighlightEditable` when language chang…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:43:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d27dcd4fbed20c94b8683b22752d43314029400e",
          "body": "Displayed code often carries decoration that should not survive a\ncopy: shell prompts, REPL markers, diff signs. A transform prop now\nruns before the copy function (and is what `on:copy` reports), with\nexported `stripPrompts` and `stripDiffMarkers` helpers.",
          "is_bot": false,
          "headline": "feat(components): add transform hook to CopyButton (#447)",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:25:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09dc9802ce54340189e4b8738fa33047f4033b40",
          "body": "…Ansi (#449)\n\nReal CLI output broke the parser three ways: OSC sequences (npm/cargo\nhyperlinks, title sets) leaked as visible garbage, \\r progress-bar\nframes rendered concatenated instead of overwritten, and SGR 7/9/8\n(reverse, strikethrough, conceal) were ignored. OSC 8 links now\nsurface as a link field that AnsiOutput renders as an anchor; reverse\nvideo swaps fg/bg before autoContrast runs.",
          "is_bot": false,
          "headline": "feat(components): handle OSC, carriage returns, and more SGR in parse…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:24:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0db821705e345d1d40dd6dc5f1bab25cba6f222a",
          "body": "…tion (#450)\n\nEvery tick re-split the tokenized HTML and replaced the whole\nrevealed head via `{@html}`: O(n^2) with full DOM teardown per\ncharacter, stuttering on long snippets. The markup now renders\nonce with per-unit visibility toggling, so a tick is one classList\nmutation; tokenization runs only when highlighted changes.",
          "is_bot": false,
          "headline": "perf(components): reveal Typewriter units without per-tick retokeniza…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:23:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee2ebe0f48c9bc538281162932bf6c0b62b9c11f",
          "body": "…wgsl preview\n\nAdd a fragment-shader snippet exercising vec2f/vec4f and\ntextureSample to make the modernized grammar's coverage visible in\nthe language preview.",
          "is_bot": false,
          "headline": "docs(preview): showcase short vector aliases and texture builtins in …",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:15:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f1d164b0dd6e1f329ebd33ad3dccd921381d21f",
          "body": "The grammar predated several spec changes: predeclared short type\naliases (vec4f, mat4x4f, ...) were missing, no builtin functions were\nclassified at all (textureSample, dpdx, bitcast, atomics), and\naddress-space keywords were only recognized inside var<...> so\nptr<storage, f32> got nothing. Real-world shaders rendered largely\nunhighlighted.\n\nBuiltin functions require a following \"(\" to avoid over-highlighting\nidentifiers like select. Golden snapshot updated accordingly.",
          "is_bot": false,
          "headline": "fix(languages): modernize WGSL grammar for the current spec",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:15:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67e18c2ad4dbeda18794ca8f4cca8f3d7b35cb42",
          "body": null,
          "is_bot": false,
          "headline": "v7.14.1",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:10:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "892f2d391fd96039a1926bdf88a4dc8ec96a60c1",
          "body": "…431)\" (#452)\n\nThis reverts commit 62a97114ee84204ae9ca793b5291dadd97cd5148.\n\nPR #431 was billed as an internal refactor but converted Highlight,\nHighlightAuto, and HighlightSvelte to Svelte 5 runes ($props), which\nbreaks consumers on Svelte 3/4. Reverting to restore cross-version\ncompatibility ahead of an emergency patch release.",
          "is_bot": false,
          "headline": "Revert \"refactor(components): extract shared highlighter primitive (#…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-07T02:05:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcca65cab6fd9ecc78f83e96ab735848f35ca98b",
          "body": "Showcases a heredoc body containing standalone words like `true`\nnow that the region only closes at the exact matching delimiter.",
          "is_bot": false,
          "headline": "docs(preview): add bare-word heredoc example to HCL language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25b384ee7b83bed17bede72963e9ea5acdcdd974",
          "body": "Showcases anyopaque, the 0.10+ replacement for c_void, now that it\nhighlights as a type.",
          "is_bot": false,
          "headline": "docs(preview): add anyopaque example to Zig language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5675899e3cb96b5cd9c622f02c8ae1793949b59a",
          "body": "Showcases hint.strategy and hint.shufflekey now that dotted\nkeywords highlight correctly.",
          "is_bot": false,
          "headline": "docs(preview): add join hint example to KQL language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fccc52b0c4539553fc94c756a8f36f2d963c7b17",
          "body": "Showcases addmod and mulmod now that the mulmod builtin typo is\nfixed.",
          "is_bot": false,
          "headline": "docs(preview): add mulmod example to Solidity language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dec39b5c92efce2128e754f80fab7da222af49cd",
          "body": "Showcases $state<number>(...) and $derived<Item[]>(...) now that\ntyped rune calls highlight correctly as keywords.",
          "is_bot": false,
          "headline": "docs(preview): add typed rune call example to Svelte language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca8ace1c64924b4b06092580aa425d642eb9c357",
          "body": "end: /^\\s*\\w+\\s*$/ closed the heredoc at the first bare word on its\nown line rather than the matching delimiter, so a lone `true` inside\na heredoc body terminated the string early. Use\nhljs.END_SAME_AS_BEGIN with a captured delimiter on both begin and\nend so the region only closes on the exact matching word.",
          "is_bot": false,
          "headline": "fix(languages): match heredoc delimiters exactly in HCL grammar",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cffa146d1987f2e0a278940f43369b0aec7620b",
          "body": "hljs compiles all begin patterns with the m flag, so ^---\\s*\\n\nmatched at any line start and a stray --- mid-document (e.g. a\nmarkdown hr) opened a bogus TypeScript frontmatter region. Add an\non:begin callback that ignores the match unless it starts at index 0.",
          "is_bot": false,
          "headline": "fix(languages): anchor Astro frontmatter to document start",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00e5ec86bf06144b38719f5ebc499c8ef5687647",
          "body": "className: \"meta-keyword\" is a v10 class; v11 themes style\n.hljs-meta .hljs-keyword instead, so directives like [private]\nrendered unstyled. Nest a plain \"keyword\" scope inside the existing\n\"meta\" mode so the emitted spans are theme-styled.",
          "is_bot": false,
          "headline": "fix(languages): emit v11 scopes for just directives",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea1b6344982f455859b9737d531393a8cfceb0f8",
          "body": null,
          "is_bot": false,
          "headline": "fix(languages): add anyopaque and dedupe fn in Zig grammar",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0aac6468c3ef290851ff555c42306bfbf1d00368",
          "body": "Default $pattern is \\w+ (no dot), so hint.strategy/hint.shufflekey\ncould never match the keyword list. Add a $pattern admitting dots,\nmatching the dhall/clarity/d2 convention.",
          "is_bot": false,
          "headline": "fix(languages): match dotted hint keywords in KQL grammar",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ebc45cd99536588760d2aa1df42f3d2f0030b4b",
          "body": null,
          "is_bot": false,
          "headline": "fix(languages): correct mulmod builtin in Solidity grammar",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7687177db766a3b2f6d8865b7ee29a8a10f11b83",
          "body": "Lookahead omitted `<` so `$state<T>(...)` fell through to the TS\nsub-grammar. Also drop the dead `g` flag on the script-tag begin\nregexes; hljs recompiles from `.source` so it was misleading noise.",
          "is_bot": false,
          "headline": "fix(languages): highlight typed rune calls in Svelte grammar",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T23:03:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89eef0b7f8da8260a8955fc785338f0d7a86c488",
          "body": "…ity (#444)\n\njq, rescript, and hlsl used (?<=)/(?<!) patterns, which throw a\nSyntaxError at RegExp compile time on Safari < 16.4 — registering any\nof these grammars crashed the page rather than degrading gracefully.\nhighlight.js core avoids lookbehind for the same reason.\n\nRewritten with hljs multi-match begin arrays and beginScope so the\nleading context is consumed but unscoped. Adds a lint-style test that\nfails if any custom grammar reintroduces lookbehind.",
          "is_bot": false,
          "headline": "fix(languages): remove lookbehind regexes for older-engine compatibil…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T22:54:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6579e215d71512141418974fa24816b7bc466b98",
          "body": "…#445)\n\nStyle modules are written to disk by hljs name (styles/a11y-dark.js)\nbut the doc generator interpolated the camelCase binding name into\nthe module specifier, documenting imports like\n\"svelte-highlight/styles/a11yDark\" that do not resolve. Every\ndash-cased or digit-prefixed theme had broken instructions.",
          "is_bot": false,
          "headline": "build(scripts): emit dash-cased import paths in SUPPORTED_STYLES.md (…",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T22:48:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee46213486183ce268b6a5a7770959d7aaea0319",
          "body": "Digit width was computed from the line count alone, so a block with\nstartingLineNumber=100 rendered 3-digit numbers in a gutter sized\nfor one digit.",
          "is_bot": false,
          "headline": "fix(components): size LineNumbers gutter by the final line number",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T22:20:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f91d158c8c6e5a0e2a1c1870d6227ada0e7a10b",
          "body": "LineNumbers split highlighted HTML on \\n, cutting through spans that\nhljs emits across lines (block comments, template literals). The\nfirst line was left with an unclosed <span> and continuation lines\nlost their styling entirely.\n\nAdds a splitLines helper that closes the open span stack at each\nline break and re-opens it on the next line, the same strategy\nPrism and Shiki use for line-level transforms.",
          "is_bot": false,
          "headline": "fix(components): preserve multi-line highlight spans in LineNumbers",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T22:20:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edba8563da033a4174f6ace7699e6cb513ae0bb9",
          "body": "parseAnsi, loadLanguage, and the scoped-style helpers have no Svelte\ndependency but were only reachable through the svelte-conditioned\nroot export, so plain Node ESM could not resolve them. scoped.js\nships a hand-written .d.ts yet had no exports entry at all.\n\nAdds ./ansi, ./load-language, and ./scoped subpaths with types +\ndefault conditions and re-exports the scoped helpers from the root\nindex for component consumers.",
          "is_bot": false,
          "headline": "build(scripts): export pure-JS modules with a default condition",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T22:20:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35b4669059f258ee03d547c8b6ec97a076e0d958",
          "body": "npm-package.ts copies src/ contents to the package root, so the\npublished files are styles/*.css and langtag.css — the configured\n\"src/\"-prefixed globs matched nothing. Bundlers that respect\nsideEffects (webpack) could tree-shake style imports like\n\"svelte-highlight/styles/github.css\" out of user builds entirely.\n\nAdds a package-shape test that resolves every exports entry and\nasserts each sideEffects glob matches at least one published file.",
          "is_bot": false,
          "headline": "build(scripts): fix sideEffects globs to match published layout",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-06T22:20:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "750f00a53be161a5eee534b218e08950461ad030",
          "body": "Drops the noStaticElementInteractions override for www/**/*.{svelte,astro},\nfixed upstream in 2.5.2 (biomejs/biome#10759) for svelte:window/document/body.\n\nAlso works around a Biome cross-script-scope bug where a postfix increment\n(uid++) read from a <script context=\"module\"> binding isn't tracked as a\nuse, and removes a genuinely unused _3024 style import that 2.5.2 now\ncorrectly flags.",
          "is_bot": false,
          "headline": "chore(deps-dev): bump @biomejs/biome to 2.5.2",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-05T02:31:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83caeeee9c49859a14bc63cafb951702752e5a33",
          "body": "Showcases $state.raw, $derived.by, $effect.pre, $effect.tracking,\nand $props.id now that they highlight correctly as keywords.",
          "is_bot": false,
          "headline": "docs(preview): add dotted rune suffix example to Svelte language preview",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-03T18:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9b08be202e275f60a9b5e71a98743cb9e74cd71",
          "body": "$effect.pre, $effect.tracking, $effect.pending, $effect.root,\n$props.id, and $inspect.trace fell through to the TypeScript\nsub-grammar because RUNE_SUFFIXES only listed raw|snapshot|by|eager.",
          "is_bot": false,
          "headline": "fix(languages): highlight dotted Svelte 5 rune suffixes as keywords",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-03T18:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3d09d92e34ec40e36909bea2b547e0f5647fdc8",
          "body": "@playwright/experimental-ct-svelte stays at 1.58.2, its latest\npublished release; the two packages aren't version-locked.",
          "is_bot": false,
          "headline": "chore(deps-dev): bump @playwright/test to 1.61.1",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-03T04:38:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d2dee05e3b0e2dfe1e2028d2da33f54bd4faf99f",
          "body": "Root-level playwright/ duplicated the tests/ directory that\nalready holds testDir. Relocating to tests/e2e/playwright and\npointing ctTemplateDir there keeps all Playwright assets in one\nplace.",
          "is_bot": false,
          "headline": "test(playwright): move component-testing template under tests/",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-03T04:38:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecbe46ad25829666fc76e2cc4d363a38b4b79dee",
          "body": "SUPPORTED_LANGUAGES.md claimed all languages were \"exported\nfrom highlight.js,\" but 52 are custom svelte-highlight grammars.\nSplit the header count so the source of each language is accurate.",
          "is_bot": false,
          "headline": "docs(languages): clarify highlight.js vs custom language counts (#438)",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-03T00:22:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c07118867f278da77af15929ea314e49ef37f521",
          "body": null,
          "is_bot": false,
          "headline": "v7.14.0",
          "author_name": "Eric Liu",
          "author_login": "metonym",
          "committed_at": "2026-07-03T00:11:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 69,
      "commits_last_year": 447,
      "latest_release_at": "2026-07-19T22:24:49Z",
      "latest_release_tag": "v7.16.0",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 41,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 30.1
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "svelte-highlight",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "svelte",
            "svelte components",
            "highlight.js",
            "syntax highlight"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/svelte-highlight",
          "is_deprecated": false,
          "latest_version": "7.16.0",
          "repository_url": "https://github.com/metonym/svelte-highlight",
          "versions_count": 89,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 188536,
          "first_published_at": "2019-11-09T22:14:49.291000Z",
          "latest_published_at": "2026-07-19T22:24:29.533000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 14,
      "stars": 335,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2020-04-26",
            "count": 1
          },
          {
            "date": "2021-06-08",
            "count": 1
          },
          {
            "date": "2022-02-20",
            "count": 1
          },
          {
            "date": "2022-02-25",
            "count": 1
          },
          {
            "date": "2022-05-14",
            "count": 1
          },
          {
            "date": "2022-06-04",
            "count": 1
          },
          {
            "date": "2022-12-31",
            "count": 1
          },
          {
            "date": "2023-05-27",
            "count": 1
          },
          {
            "date": "2023-09-30",
            "count": 1
          },
          {
            "date": "2023-11-05",
            "count": 1
          },
          {
            "date": "2023-12-16",
            "count": 1
          },
          {
            "date": "2024-07-20",
            "count": 1
          },
          {
            "date": "2024-10-05",
            "count": 1
          },
          {
            "date": "2025-10-08",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 14,
        "total_forks": 14
      },
      "star_history": null,
      "open_issues_and_prs": 5
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "examples/rollup/tsconfig.json",
        "examples/routify/tsconfig.json",
        "examples/sveltekit/tsconfig.json",
        "examples/vite/tsconfig.json",
        "examples/vite@svelte-4/tsconfig.json",
        "examples/webpack/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 60316,
      "source_files_sampled": 321,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 2,
        "malicious_count": 0,
        "assessed_package": "npm:svelte-highlight@7.16.0",
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "magic-string",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.30.17"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "magic-string",
            "direct": true,
            "version": "^0.30.17",
            "ecosystem": "npm"
          },
          {
            "name": "@astrojs/svelte",
            "direct": false,
            "version": "^8.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@biomejs/biome",
            "direct": false,
            "version": "2.5.5",
            "ecosystem": "npm"
          },
          {
            "name": "@playwright/experimental-ct-svelte",
            "direct": false,
            "version": "1.58.2",
            "ecosystem": "npm"
          },
          {
            "name": "@playwright/test",
            "direct": false,
            "version": "1.61.1",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-commonjs",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "@rollup/plugin-node-resolve",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "@roxi/routify",
            "direct": false,
            "version": "^3.6.4",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/adapter-node",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/kit",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/vite-plugin-svelte",
            "direct": false,
            "version": "^3.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/vite-plugin-svelte",
            "direct": false,
            "version": "^5.1.1",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/vite-plugin-svelte",
            "direct": false,
            "version": "^7.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "@sveltejs/vite-plugin-svelte",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "@tsconfig/svelte",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "@types/bun",
            "direct": false,
            "version": "^1.3.14",
            "ecosystem": "npm"
          },
          {
            "name": "@types/jest",
            "direct": false,
            "version": "^30.0.0",
            "ecosystem": "npm"
          },
          {
            "name": "@types/node",
            "direct": false,
            "version": "^25.9.5",
            "ecosystem": "npm"
          },
          {
            "name": "@typescript/native-preview",
            "direct": false,
            "version": "^7.0.0-dev.20260707.2",
            "ecosystem": "npm"
          },
          {
            "name": "astro",
            "direct": false,
            "version": "^6.4.8",
            "ecosystem": "npm"
          },
          {
            "name": "carbon-components-svelte",
            "direct": false,
            "version": "^0.110.1",
            "ecosystem": "npm"
          },
          {
            "name": "carbon-preprocess-svelte",
            "direct": false,
            "version": "^0.11.37",
            "ecosystem": "npm"
          },
          {
            "name": "css-loader",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "cssnano",
            "direct": false,
            "version": "^7.1.9",
            "ecosystem": "npm"
          },
          {
            "name": "cssnano-preset-lite",
            "direct": false,
            "version": "^4.0.6",
            "ecosystem": "npm"
          },
          {
            "name": "highlight.js",
            "direct": false,
            "version": "11.11.1",
            "ecosystem": "npm"
          },
          {
            "name": "html-webpack-plugin",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "mini-css-extract-plugin",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "postcss",
            "direct": false,
            "version": "^8.5.19",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-discard-duplicates",
            "direct": false,
            "version": "^7.0.4",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-inline-css-vars",
            "direct": false,
            "version": "^0.1.0",
            "ecosystem": "npm"
          },
          {
            "name": "postcss-merge-rules",
            "direct": false,
            "version": "^7.0.11",
            "ecosystem": "npm"
          },
          {
            "name": "rollup",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "rollup-plugin-svelte",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "rollup-plugin-terser",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "svelte",
            "direct": false,
            "version": "^4.2.20",
            "ecosystem": "npm"
          },
          {
            "name": "svelte",
            "direct": false,
            "version": "^5.56.3",
            "ecosystem": "npm"
          },
          {
            "name": "svelte",
            "direct": false,
            "version": "^5.56.6",
            "ecosystem": "npm"
          },
          {
            "name": "svelte",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "svelte-highlight",
            "direct": false,
            "version": "^7.16.0",
            "ecosystem": "npm"
          },
          {
            "name": "svelte-loader",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "svelte-preprocess",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "typescript",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "^5.4.21",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "^7.3.6",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "^8.1.2",
            "ecosystem": "npm"
          },
          {
            "name": "vite",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "webpack",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-cli",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          },
          {
            "name": "webpack-dev-server",
            "direct": false,
            "version": "latest",
            "ecosystem": "npm"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 50,
        "direct_count": 1,
        "indirect_count": 49
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 4,
        "merged_prs": 334,
        "open_issues": 1,
        "closed_ratio": 0.988,
        "closed_issues": 81,
        "closed_unmerged_prs": 51
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "metonym",
          "commits": 1184,
          "avatar_url": "https://avatars.githubusercontent.com/u/10718366?v=4"
        },
        {
          "type": "User",
          "login": "WillsterJohnson",
          "commits": 2,
          "avatar_url": "https://avatars.githubusercontent.com/u/85991558?v=4"
        },
        {
          "type": "User",
          "login": "pjebs",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/5377970?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.997
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/7 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 6,
            "reason": "project has 2 contributing companies or organizations -- score normalized to 6",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 10,
            "reason": "all dependencies are pinned",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 9,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "49 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "e4f6958d0fdff1aeb0c2f42b5b28c80e64e4d18b",
        "ran_at": "2026-07-25T22:33:09Z",
        "aggregate_score": 5.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-23T14:49:59Z",
      "oldest_open_prs": [
        {
          "number": 382,
          "created_at": "2025-10-12T22:13:15Z",
          "last_comment_at": "2025-10-23T14:58:15Z",
          "last_comment_author": "Konixy"
        },
        {
          "number": 457,
          "created_at": "2026-07-07T15:45:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 467,
          "created_at": "2026-07-12T16:12:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 468,
          "created_at": "2026-07-12T16:14:14Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-23T14:47:17Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 380,
          "created_at": "2025-10-08T11:57:01Z",
          "last_comment_at": "2025-10-12T22:13:39Z",
          "last_comment_author": "metonym"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/metonym/svelte-highlight",
    "host": "github.com",
    "name": "svelte-highlight",
    "owner": "metonym"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 72,
      "inputs": {
        "security": 66,
        "vitality": 95,
        "community": 60,
        "governance": 62,
        "engineering": 76
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 95,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "commits_last_year": 447,
              "human_commit_share": 1,
              "days_since_last_push": 2,
              "active_weeks_last_year": 41
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "41/52 weeks with commits",
                "points": 28.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 41
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "447 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 447
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 69,
              "latest_release_tag": "v7.16.0",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 30.1
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "69 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 69
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~30.1 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 30.1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 2,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 2 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 60,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "forks": 14,
              "stars": 335,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "335 stars",
                "points": 40.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 335
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "14 forks",
                "points": 9.3,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "excellent",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "packages": [
                "svelte-highlight"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 188536
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "188,536 downloads/month across npm",
                "points": 70.3,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 188536,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 62,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.997
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "merged_prs": 334,
              "open_issues": 1,
              "closed_issues": 81,
              "issue_closed_ratio": 0.988,
              "closed_unmerged_prs": 51
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "99% of issues closed",
                "points": 46.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "334/385 decided PRs merged",
                "points": 33.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 334,
                      "decided": 385
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/7 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "followers": 294,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "metonym",
              "public_repos": 161,
              "account_age_days": 4197
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "294 followers of metonym",
                "points": 17.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 294,
                      "login": "metonym"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "161 public repos, account ~11 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 161
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "svelte-highlight"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "89 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 89
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 76,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": "biome.json",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "svelte",
                "highlight-js",
                "highlight",
                "code",
                "syntax",
                "syntax-highlighting",
                "svelte-component",
                "typescript"
              ],
              "has_wiki": false,
              "homepage": "https://svhe.onrender.com",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://svhe.onrender.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "8 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 66,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/7 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 2 contributing companies or organizations -- score normalized to 6",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "49 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): No advisories left outstanding. Remaining weights renormalized. Matched the npm:svelte-highlight@7.16.0 runtime dependency closure — what installing the published package pulls in — 2 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:svelte-highlight@7.16.0",
                  "assessed": 2
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 2,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "no indirect dependency carries a known advisory",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "no_indirect_advisories",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 2,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 5
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 55,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.96,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "96 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "examples/rollup/tsconfig.json",
                "examples/routify/tsconfig.json",
                "examples/sveltekit/tsconfig.json",
                "examples/vite/tsconfig.json",
                "examples/vite@svelte-4/tsconfig.json",
                "examples/webpack/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": "biome.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "biome.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "examples/rollup/tsconfig.json, examples/routify/tsconfig.json, examples/sveltekit/tsconfig.json, examples/vite/tsconfig.json, examples/vite@svelte-4/tsconfig.json, examples/webpack/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples/rollup/tsconfig.json, examples/routify/tsconfig.json, examples/sveltekit/tsconfig.json, examples/vite/tsconfig.json, examples/vite@svelte-4/tsconfig.json, examples/webpack/tsconfig.json, tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 60316,
              "source_files_sampled": 321,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/321 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 321,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T22:33:25.006025Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/metonym/svelte-highlight.svg",
  "full_name": "metonym/svelte-highlight",
  "license_state": "standard",
  "license_spdx": "MIT"
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.