Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-25 11:02 UTC

domphy / domphy

TypeScriptMIT★ 2 Sterne⑂ 1 Forkseit Juli 2025Auf GitHub ansehen ↗

domphy/domphy erreicht einen Gesundheitsindex von 48 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei AI Readiness (77/100) ab, am schwächsten bei Community & Adoption (27/100). Zuletzt vor 2 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

48
gesamt / 100
Gefährdet

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.

48
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

DomphyOrganisation
0 Follower1 öffentliches Reposeit Juni 2025

Dieses Repository wird von einer Organisation getragen — geteilte, rechenschaftspflichtige Trägerschaft, die jeden einzelnen Maintainer überdauern kann.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
npmdomphy0.18.01781vor 29 Tagen

Metriken nach Kategorie

Vitalität

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

76Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 2 Tagen
9.7/36Commit-Rhythmus — 14/52 Wochen mit Commits
18/18Commit-Volumen — 641 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year641
human_commit_share1
days_since_last_push2
active_weeks_last_year14
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 2 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 30 Tagen
19.8/27Release-Rhythmus — ein Release etwa alle 95 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count2
latest_release_tagv0.18.0
releases_from_tagsja
days_since_latest_release30
mean_days_between_releases95
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?

27Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 2 Stars
0/25Forks — 1 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks1
stars2
watchers0
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
30/80Downloads pro Monat — 178 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesdomphy
dependents
ecosystemsnpm
total_downloads
monthly_downloads178
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?

29Kritisch · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote, PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30Organisatorische Trägerschaft — im Besitz einer Organisation
0/20Verifizierte Domain
0/25Reichweite des Inhabers — 0 Follower von domphy
4.5/25Kontohistorie — 1 öffentliche Repos, Kontoalter ca. 1 Jahre
Verwendete Eingangsdaten
followers0
owner_typeOrganization
is_verified
owner_logindomphy
public_repos1
account_age_days419
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 29 Tagen
4/20Versionshistorie — 1 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesdomphy
ecosystemsnpm
any_deprecatednein
min_days_since_publish29

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

70Gut · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 1 Workflow(s)
24/24Tests vorhanden
16/16Linter-Konfiguration — biome.json
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_configja
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
15/15Dokumentations-/Homepage-Site — https://domphy.com
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepagehttps://domphy.com
has_readmeja
has_docs_dirnein
has_descriptionnein

Sicherheit

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

33Gefährdet · 16 % des Gesamtindex

Sicherheitslage

33Gefährdet
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
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 63 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate3,3
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, packaging, signed_releases. Die verbleibenden Gewichte wurden renormalisiert.

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.

77Gut · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — AGENTS.md
15/15Maschinenlesbare Doku (llms.txt) — llms.txt vorhanden
40/40Lesbare Commit-Historie — 100 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtja
legible_history_share1
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes25.622
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
22/22Automatisierte Tests
11/11Lint-/Format-Konfiguration — biome.json
11/11Statische Typprüfung — apps/web/tsconfig.json, bench/tsconfig.json, packages/app/tsconfig.json, packages/blocks/tsconfig.json, packages/chart/tsconfig.json, packages/core/tsconfig.json, packages/create-domphy/tsconfig.json, packages/dnd/tsconfig.json, packages/doctor/tsconfig.json, packages/floating/tsconfig.json, packages/form/tsconfig.json, packages/i18n/tsconfig.json, packages/markdown/tsconfig.json, packages/mcp/tsconfig.json, packages/mermaid/tsconfig.json, packages/palette/tsconfig.json, packages/press/tsconfig.json, packages/query/tsconfig.json, packages/router/tsconfig.json, packages/table/tsconfig.json, packages/theme/tsconfig.json, packages/three/tsconfig.json, packages/ui/tsconfig.json, packages/virtual/tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 26 der letzten 100 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilespnpm-lock.yaml
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_configja
typecheck_configsapps/web/tsconfig.json, bench/tsconfig.json, packages/app/tsconfig.json, packages/blocks/tsconfig.json, packages/chart/tsconfig.json, packages/core/tsconfig.json, packages/create-domphy/tsconfig.json, packages/dnd/tsconfig.json, packages/doctor/tsconfig.json, packages/floating/tsconfig.json, packages/form/tsconfig.json, packages/i18n/tsconfig.json, packages/markdown/tsconfig.json, packages/mcp/tsconfig.json, packages/mermaid/tsconfig.json, packages/palette/tsconfig.json, packages/press/tsconfig.json, packages/query/tsconfig.json, packages/router/tsconfig.json, packages/table/tsconfig.json, packages/theme/tsconfig.json, packages/three/tsconfig.json, packages/ui/tsconfig.json, packages/virtual/tsconfig.json
agent_commit_share0,26
toolchain_manifests
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — TypeScript (statisch typisiert)
54.8/55Handhabbare Dateigrößen — 6/1.478 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageTypeScript
largest_source_bytes104.387
source_files_sampled1.478
oversized_source_files6
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — demos, examples, recipes
Verwendete Eingangsdaten
example_dirsdemos, examples, recipes
has_mcp_signalnein
api_schema_files

Eckdaten

2GitHub-Sterne
1Mitwirkende
641Commits, letzte 12 Monate
2Tage seit letztem Push
2Releases
1Bus-Faktor
0offene Issues
npmPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Weitere Details

OpenSSF Scorecard 3.3 / 10
3.3Gesamtwert

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 11:02 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
4Security-Policysecurity policy file detected
k. A.Signed-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities63 existing vulnerabilities detected
Direkte Abhängigkeiten 4
RegistryPaketVersionsvorgabeManifest
npmopenai^4.0.0bench/package.json
npm@domphy/coreworkspace:*bench/package.json
npm@domphy/doctorworkspace:*bench/package.json
npmesbuild^0.25.0bench/package.json
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 23967,
      "has_wiki": true,
      "homepage": "https://domphy.com",
      "languages": {
        "TeX": 73778,
        "HTML": 4142,
        "JavaScript": 101019,
        "TypeScript": 7190485
      },
      "pushed_at": "2026-07-22T12:15:33Z",
      "created_at": "2025-07-09T03:09:09Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T12:16:12Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://domphy.com/",
      "name": "Domphy",
      "type": "Organization",
      "login": "domphy",
      "company": null,
      "location": "Vietnam",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/214344699?v=4",
      "created_at": "2025-06-01T09:57:44Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 419
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2026-06-25T03:24:26Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2026-03-22T02:27:00Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "916ada6e9abe6ea63eba629512bfb9d8fa49d9e7",
          "body": null,
          "is_bot": false,
          "headline": "fix(press): give TOC active border breathing room from labels",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-22T12:15:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f4b6cad6baf1a6059bcb37aeb6a41ae0874c2e7",
          "body": null,
          "is_bot": false,
          "headline": "feat(press): TOC aside scroll-spy with aria-current",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-22T02:43:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0743301f9cdeb4f416874fbe0553813baf153029",
          "body": "… audit)",
          "is_bot": false,
          "headline": "test(router): cover createRequestHandler SSR entry (sequential stable…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T23:30:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ede2ef5c00649fe3f23e04b1244f25a1b0d58461",
          "body": "…uild",
          "is_bot": false,
          "headline": "fix: format generated JSON via biome bin so check stays green after b…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T16:43:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ab96c5852d571fcefcd750d1c6dc8fcc1936a0c",
          "body": "…tays green",
          "is_bot": false,
          "headline": "fix: keep generated JSON biome-clean after build/test so pnpm check s…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T16:29:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8c7ada72d8b41ed250503596727bd00e7ea43df",
          "body": null,
          "is_bot": false,
          "headline": "style: biome format manifest.json and lifecycle-report.json for ci gate",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T16:14:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd08a0495cf41b1338fcbb78857c1736be5cda44",
          "body": "Re-audit all publishable packages against React/ecosystem peers; fix production-path gaps (query throwOnError, form submit contract, chart unsupported surface, mermaid-cli optional, mcp version, dialog focus tests). Add STABLE-READINESS matrix + CI stable-readiness-check; ship CHANGELOG in package files.",
          "is_bot": false,
          "headline": "feat: close stable-readiness P0s and wire enterprise release gate",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T16:00:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0606ffedc5a8aaa2f356d80d1ce1dd90e96fda90",
          "body": "…ypes on start",
          "is_bot": false,
          "headline": "fix(blocks): scrollProgress floor only without overflow; terminal ret…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T14:57:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef8245599ca86d5cc4c52770af96560e2bddc098",
          "body": null,
          "is_bot": false,
          "headline": "fix(theme,blocks): distinct solid roles + resting demo UIs",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T14:51:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e6f82ac975753a8cf16ded0c095ac9819eb0cdc",
          "body": null,
          "is_bot": false,
          "headline": "fix(web,blocks): solo visual capture + layout QA fixes",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T13:38:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aee55c86923f53977dd28fd55b9aa532ccba50f",
          "body": "- 202 patch cells (light+dark) + 173 block cells screenshots\n- Fix overlay empty cells (in-flow surfaces), OTP demo, layout clip\n- Bump resting contrast on tabs/command/pagination/toggleGroup\n- Playwright: freeze animations; blocks write stable PNGs",
          "is_bot": false,
          "headline": "feat(web,ui): full visual catalog capture for all patches+blocks",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T12:37:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f3881e084902ad93356fd237e04c55e973dc563",
          "body": "Solid shift-8 mid-ramp failed WCAG (~2.2:1). Use shift-13 brand fill with\nneutral light text. Raise resting labels on tabs/toggle/command/pagination\nand menu items on dark panels. Regression tests assert solid/outline CSS\ntokens. Publish 0.20.8.",
          "is_bot": false,
          "headline": "fix(ui): deep solid fill + catalog contrast for menus/tabs/pagination",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T12:21:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1912605e1354cd394080af9bd0616047d8db515d",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui,web): solid buttons mid-ramp brand; visual catalog baselines",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T11:52:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8af1abf76e2dbb501f02bbbcdb53f8c8797db93e",
          "body": "Solid buttons used dataTone shift-17 which flattened every color to near-black\nand (with relative shift-0 text) produced invisible CTAs. Use mid-ramp shift-8\nfill + neutral light text instead. Outline/link text moves to shift-13 for\n≥4.5:1 on light surfaces. Expand patches catalog solid matrix; standalone\nPlaywright host + shoot-all for per-cell review. Publish 0.20.7.",
          "is_bot": false,
          "headline": "fix(ui): solid brand fill + outline contrast; visual catalog harness",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T11:50:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c95b30302d84460bb3a9d1600ca9ae8b6ff73951",
          "body": null,
          "is_bot": false,
          "headline": "docs(web): link blocks visual catalog from visual index",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T11:17:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97d5e6052bd9d351a9180a922c99a50ca8d56ccb",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): add blocks visual catalog and Playwright harness",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T11:17:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "579f12e06df9346d08b7c0ae43ca203aae20b930",
          "body": "Root cause of production UI debt: islands-entry.js was unhashed under\nCache-Control: immutable (1y), so domphy.com never received Code/Preview\n/Split redesign or later island fixes. Hash the entry, inject into HTML,\nand revalidate the legacy path. Also press chrome focus rings + SVG\nheader icons (drop placeholder glyphs).",
          "is_bot": false,
          "headline": "fix(web): hash islands entry so CDN stops serving stale playground",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T10:27:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b5509f2be5cc53b282c62f8537d1835259da33b",
          "body": "Flush 0 0 0 2px pastel primary looked like a browser default box on\nnav chips. Use surface gap + shift-9 accent halo; kill link outline.\nAlso fix solid button/fab text contrast (shift-17 from dark dataTone).",
          "is_bot": false,
          "headline": "fix(ui): redesign focusRing as ring-offset (Radix/shadcn pattern)",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T10:11:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b69eede6ad5df77e1371d3dd01ff327a7381b84e",
          "body": "Replace the stub-height stacked panes with a Sandpack-class workspace:\nview tabs (Code | Preview | Split), full-height CodeMirror, responsive\nside-by-side on desktop, console drawer, copy/reset, Ready/Error chip.",
          "is_bot": false,
          "headline": "feat(web): redesign docs playground as Code/Preview/Split product shell",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T10:05:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0846545a0df346455cd96ac6482d2c58a87c45fc",
          "body": "…e split",
          "is_bot": false,
          "headline": "fix(web): redesign component playground — taller code pane, responsiv…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T10:00:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d912588e39d88ad29680f32352f5dc577bc9aa62",
          "body": null,
          "is_bot": false,
          "headline": "style: biome format fix for CI",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T08:23:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed807a7857b39d4912150956ecf6eda4fbc6b08d",
          "body": null,
          "is_bot": false,
          "headline": "chore: release @domphy/ui@0.20.5, press@0.21.3, core@0.19.3",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T08:21:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33ca857c6195ebb95c3b8a89c7d7534021ca8467",
          "body": "…motion",
          "is_bot": false,
          "headline": "feat: enterprise FE checklist gate — a11y, security headers, reduced-…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T08:16:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e7e3c0d19260f8d65c8d800dc85daaee6cdedaa",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui): stronger steps active/done accent and track fill",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T08:02:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13e6849f2d59d260de3c4dcb3b3d7a8c2cc63489",
          "body": "…ggle",
          "is_bot": false,
          "headline": "fix(ui): compose tab focus with underline; polish avatar/segmented/to…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T08:01:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cd8c781afb6df284160508570e6c9b3a47bffab",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui): card elevation, badge ring, pill tags",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T08:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8aaa2e6a69ab95ad04eac211c544c8e70eaa33ec",
          "body": null,
          "is_bot": false,
          "headline": "docs(ui): sync focusRing coverage, press states, skeleton shimmer",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T07:57:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b788fda6bf0f9ed0ca7c439c0922b9ee29abdf50",
          "body": "…on shimmer",
          "is_bot": false,
          "headline": "feat(ui): press :active states, alert radius, empty hierarchy, skelet…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T07:56:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9ac5731f59fa78de7ff08da35c23ec57048bf5f",
          "body": null,
          "is_bot": false,
          "headline": "fix(ui): unify remaining interactive patches on shared focusRing",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T07:53:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddd77fd35b958bc4a75219938feda889dc5f6990",
          "body": null,
          "is_bot": false,
          "headline": "feat(ui): linkButton variants + focus rings on interactive controls",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T07:49:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6747482efd57de4d37d51f6312a938820f290e7d",
          "body": "…s; demo browser QA",
          "is_bot": false,
          "headline": "fix(press,blocks): hero linkButton host tags; lineShadowText keyframe…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T07:35:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea9bc2b803281dc4052f596e86120381d2d74c88",
          "body": "…act on patches",
          "is_bot": false,
          "headline": "fix(ui,doctor): honest merged doctor-conformance; surface/color contr…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T07:18:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7579bb756790468c073ebc0a4f07194955b97f3",
          "body": null,
          "is_bot": false,
          "headline": "test(ui,blocks): doctor-conformance gates for all patches and factories",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T06:52:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bc5650f7ca55c5ac6512e25643c56abffd4b9f60",
          "body": null,
          "is_bot": false,
          "headline": "chore(ci): autofix biome so CI check passes; ignore reference/paper",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T06:18:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fedb17d4a96f8d1fc16bc9c8be112b952477094",
          "body": "…cycle, blocks subpaths",
          "is_bot": false,
          "headline": "feat: CI, publish guard, merge empty-string, chart docs, adapter life…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-21T06:06:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "484834ade0701135dc10c49bdbb5b9e5df7a7919",
          "body": "…8.15\n\nPublished: core 0.19.1, theme 0.20.1, ui 0.20.2, doctor 0.18.15,\ni18n 0.19.2, press 0.21.0, blocks 0.1.1, chart 0.2.2, three 0.2.1,\ncreate-domphy 0.18.2. Metadata refresh (descriptions/keywords/author)\nrides along on the same versions.",
          "is_bot": false,
          "headline": "chore(release): 2026-07-19 wave — press 0.21.0, ui 0.20.2, doctor 0.1…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-19T14:09:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "877afa37088550804d07f699980ababc080461ec",
          "body": "…sponsive\n\nThe editor/preview chrome was three disconnected strips (bordered workspace,\ntip bar and console hanging outside the border) with hard-coded hex colors\nand inline typography throughout.\n\n- toolbar/preview/console/tip all live inside a single bordered, rounded\n  card; fullscreen drops the \n[…]\n taller splitter handle (touch), svh-based\n  height clamps\n- vitest: testTimeout 20s — theme-builder's per-test module re-transform\n  exceeded the 5s default on loaded machines (recurring false alarm)",
          "is_bot": false,
          "headline": "refactor(docs): playground panel — one rounded card, theme tokens, re…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-19T14:09:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dfa3191395239f42cad1e77c5147a1852c38cceb",
          "body": "…e rebrand\n\npress:\n- generated CSS reads var(--dp-font-sans/mono/display, ...) so sites re-skin\n  typography via head without fighting source order; --dp-font-mono was\n  referenced by the hero command pill but never emitted\n- fullBleed: true frontmatter — bare islands span edge-to-edge while prose\n \n[…]\ncture: starfield demo is now the full-bleed hero (overlay copy,\n  CTA buttons), emoji feature icons replaced with SVG stroke icons\n- regenerate manifest/llms-full (22 packages incl. three, 95 patches)",
          "is_bot": false,
          "headline": "feat(press): font hooks, fullBleed home layout, de-cliched hero — sit…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-19T14:08:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7ed17eebecda2c1a2588aed77c00ad0451572cc2",
          "body": "Audit follow-ups (see root CHANGELOG 2026-07-19 wave):\n- README: correct patch count (95), add missing packages\n  (blocks/chart/i18n/press), fix markdown engine description (remark/unified)\n- docs: same count fixes in docs index + quickstart\n- packaging: publish scripts for chart/i18n/press, root ke\n[…]\n\n- remove dead tsup globalName (chart/three had no IIFE build)\n- delete tracked debug PNGs/bundles from packages/chart, ignore going forward\n- stale comment fix in app-manifest.mjs (16 -> 22 packages)",
          "is_bot": false,
          "headline": "docs+chore: repo-wide audit fixes — packaging hygiene, doc accuracy",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-19T14:08:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "064b6daa76065d1e3a713e5605da63c6eb18b426",
          "body": "…jsdom)\n\njsdom exposes HTMLDialogElement but does not implement close()/showModal(),\nso the 350ms close fallback timer crashed the test process with an unhandled\nasync error despite all 421 tests passing.",
          "is_bot": false,
          "headline": "fix(ui): guard dialog/drawer close()/showModal() when unimplemented (…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-19T14:08:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "433ee23f59798083fc9e642b926cadbe3294838c",
          "body": null,
          "is_bot": false,
          "headline": "chore(ui): bump to 0.20.1 for the dialog/drawer a11y fix",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T21:53:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4f24d59ef7c5381cd0ccc26823b94cfac8ece5f",
          "body": "Both patches represented their closed state with ONLY opacity (dialog) or\nan off-screen transform (drawer) — neither removes an element from the\ntab order or the accessibility tree the way visibility does. A consumer's\nown `style: { display: ... }` on the dialog element also overrides the UA\nstylesh\n[…]\n `visibility`/`pointerEvents` inline (open = visible/\nauto, closed = hidden/none) alongside the existing opacity/transform\nanimation, so it always wins over whatever the consumer's own style\ndeclares.",
          "is_bot": false,
          "headline": "fix(ui): closed dialog/drawer stayed in the tab order and a11y tree",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T21:51:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "30dd57423ce0e903f701b0bc5bd81d6a42ab74d0",
          "body": "Never merged into main (docs/nav/llms.txt/AGENTS.md described a\npackage whose source only lived in an abandoned worktree). Drop all\nmentions rather than ship placeholder docs for nonexistent code.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Eq9mwQZsuGHLNHwimjm86k",
          "is_bot": false,
          "headline": "chore: remove @domphy/audit package references",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T21:37:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fedb41ac9ac883c9b006df03255236a5469026e4",
          "body": "An audit of a consumer app (parashape) found 409 raw style: {} blocks\nacross 30 files, mostly re-implementing the same handful of flex shapes:\nvertical stacks with a gap (194 display:\"flex\" / 98 flexDirection:\"column\"\noccurrences), centered horizontal rows, and padded panel sections. Add\nthree compo\n[…]\nllms.txt/llms-full.txt/manifest.json regenerated, AGENTS.md layout note.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YK78jQjGp9WYia9KTW7ejp",
          "is_bot": false,
          "headline": "feat(ui): layout primitives — stack, row, panelSection",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T09:14:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "59d62567fd91a3fdbdf541bcc89d810649b6ef54",
          "body": "…s; button variant/size; semantic tone adoption\n\nThe default look of @domphy/ui patches IS the de-facto design system (AI-generated\nUIs mostly accept defaults), and it was reading \"wireframe\": 1px shift-4 outlines\neverywhere, density×1 radius, zero elevation/shadow, no transitions. This closes\nthat \n[…]\n across patches wherever the raw shift-N value's role genuinely matched.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YK78jQjGp9WYia9KTW7ejp",
          "is_bot": false,
          "headline": "feat(ui): polished patch defaults — elevation, focus ring, transition…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T08:42:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1022a76806ef1e24c2687d16ec9ded8d8a177f69",
          "body": "…g/muted/text)\n\nAdds 6 semantic tone aliases to @domphy/theme resolving through the existing\nshift-N machinery (context-aware via dataTone, correct in dark theme):\nsurface=shift-1, hover=shift-2, border=shift-3, border-strong=shift-4,\nmuted=shift-8, text=shift-9. Mapping derived from actual usage ac\n[…]\ntch, validation behavior)\nmcp 0.19.1 -> 0.19.2 (patch, tool description)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YK78jQjGp9WYia9KTW7ejp",
          "is_bot": false,
          "headline": "feat(theme): semantic tone aliases (surface/hover/border/border-stron…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T07:49:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9442ca0d2dcbbe9596efca9958f1faebeed2b153",
          "body": "…ked into 0.18.22 tarball",
          "is_bot": false,
          "headline": "chore(ui): 0.18.23 — republish via pnpm, fix workspace:^ protocol lea…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T06:24:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82334cbdb7759ed5bf4f7ad3a6880762fbdbaaa0",
          "body": "…-patch, destroy on removal\n\nFixes the reused-node stale-closure class at the root: document-level\nlisteners and per-node state now live in one instance the runtime routes\nfresh props into, instead of per-generation closures. Migrates floating.ts\n(popover/tooltip/selectBox/combobox/datePicker) off hand-rolled WeakMaps.\ncore 0.19.0, ui 0.18.22.",
          "is_bot": false,
          "headline": "feat(core): behavior() per-node contract — attach once, update per re…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-18T05:53:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a0cc6dfbc0233e4144b2cf73036412d38ae298e",
          "body": "Full-width home body (fixes two-width misalignment), clamp()-scaled hero\nwith brand radial glow and optional hero.command install pill, feature card\nhover lift, home-only table styling. Landing gains command pill + feature\nicons/links.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "feat(press): homeShell landing polish — 0.20.15",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T12:50:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "57f8b195211f8d45bd4efa3bcacec9c8a2c00422",
          "body": "…ph; 0.2.0\n\ndiagnose(options)/validate(options) mirror @domphy/doctor contract shape for\nthe three() option object doctor cannot see. Rules from real silent failures\nin the example gallery: unknown-tag (error), legacy-light-intensity (r155+\nphysical units), additive-blowout, camera-missing-lookat. _\n[…]\nvalues resolved with\na no-op listener. Published as @domphy/three@0.2.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "feat(three): scene-level diagnose/validate — doctor for the scene gra…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T12:04:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "53338591a5114ffc256459f4a8e59f0a1f7f227d",
          "body": "The single most common integration mistake renders nothing with no error.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "feat(three): warn when the three() host element has zero height",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T10:55:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6cd8c18aa84a1165ea44bd29e7ef41671f711399",
          "body": "Landing gains a bare-mounted @domphy/three starfield section (DOM overlay in\nthe same element tree; mid-layer star tint is a live theme token) placed\nafter the feature cards as running proof of the one-reactive-graph claim.\nNew <DomphyPreview bare /> island flag mounts elements without preview box\nc\n[…]\n the workspace tracks the viewport via clamp()\ninstead of a fixed 760px.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "feat(web): landing live-proof section + playground height/scroll fixes",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T10:52:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1df99034f4d9fab06967aa5a51fa07ee32304a09",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "chore(web): biome format pass on editor Toolbar",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T10:07:09Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5a95939e491a2929d3e31bbe9913bf91273642d9",
          "body": "dissolve (shaderMaterial uniforms + noise discard), cursor-particles\n(pointer-to-world repulsion at 6k points), neon-bloom (UnrealBloomPass via\nextend() driving the frame-priority takeover path), tunnel (curve flight +\nonWheel speed), synthwave-terrain (live geometry attribute animation),\nmorph-part\n[…]\nrified rendering\nand animating in a real headless browser before commit.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "docs(three): 6 trend-inspired playground examples (wave 2)",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T10:06:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ef4f36378be88f0ec4b49ce3599d91e04604a032",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "chore: add publish:three script; @domphy/three 0.1.0 published to npm",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T09:07:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b13cad3c325556c66475a226719ad5895b01eca9",
          "body": "Six concept pages (overview/grammar/events/animation/assets/recipes) and ten\nCodeEditor-runnable examples for @domphy/three, each verified rendering real\nWebGL in a headless browser (pixel + motion checked) and art-directed through\na screenshot-judge loop. Playground wiring: three + @domphy/three in\n[…]\nformCode, Three sidebar\nand nav sections, Khronos Duck.glb sample asset.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "docs(three): concept docs + 10 live playground examples on domphy.com",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T08:43:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b60595cd730ebb5eeff641a79ce64782071eede1",
          "body": "…n (upstream fidelity)\n\n- First npm publish; SOURCES.md shipped in the package for clean-room\n  attribution. Peers resolved to real semver (core ^0.18.4, ui ^0.18.21).\n- Login01-05's shared submitButton claimed 'solid primary' but rendered\n  Domphy's tonal button — upstream shadcn (and this port's o\n[…]\ns cached upstream references);\n  auth tests 38/38 and doctor stay green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "feat(blocks): publish @domphy/blocks 0.1.0 + login solid submit butto…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T08:42:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cceaf20f252568612b4bffc58a2890fee1e2f94f",
          "body": "…oy was red)\n\nThe gate ran tests + tsc -p but never tsup's DTS build, which is stricter\nabout contextual literal types:\n- shared/typography.ts fixed() is now generic, preserving the literal type\n  (a widened '() => string | number' failed csstype-typed style props)\n- _doctorDisable on TYPED element \n[…]\nxact Vercel\ncommand), blocks 681/681, barrel doctor still zero findings.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "fix(blocks): repair tsup DTS build broken by the QA wave (Vercel depl…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T08:09:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "72b230ae6b9f3f0771f46c46d6d109bea869ed46",
          "body": "…doctor 397→0; ui 0.18.21\n\nBlocks QA pyramid, cheapest tier first:\n1. New tests/lifecycle-harness.test.ts mechanically drives every exported\n   factory through mount -> reactive ancestor re-render (fresh closure on\n   reused nodes) -> unmount -> post-unmount hygiene, recording errors,\n   console noi\n[…]\n 3f65d9b\n(suppressed with justification where patches supply the color).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "fix(blocks,ui): blocks QA wave — lifecycle harness (173/173 clean) + …",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T07:33:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "319b9cf748f78871d3968cc4517dd63588e54d09",
          "body": "…stylelint no-duplicate-selectors)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "fix(press): release 0.20.14 — dedupe generated '.scope th' selector (…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T04:57:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3b48e7d496008cf3532128525d470b4b0dde2232",
          "body": "… with zero diagnostics\n\n70 findings on a full landing page render, now 0 for both shells:\n- typography literals (fontSize/fontWeight/lineHeight/letterSpacing/\n  fontFamily/textDecoration) declared through the fixed() helper —\n  function values are the doctor's designed marker for intentional\n  non-\n[…]\nht\nscreenshots of the home page (homeShell) and a docs page (pageShell).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "fix(press): release 0.20.13 — homeShell/pageShell pass @domphy/doctor…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T04:46:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8c5650b5f17900338ae3cae924b8bd4e1d31c962",
          "body": "…re port)\n\n1-1 functional port of @react-three/fiber core onto Domphy reactivity:\nreflection-based catalog (extend(), no hard-coded class list), duck-typed\nprops with pierced paths, keyed reconciler with args reconstruction and\nattach/detach, raycast pointer events (capture/occlusion/onPointerMissed\n[…]\n suite (PORT-NOTES.md accounts for\nnon-applicable React-specific cases).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01SLiQvFdo8GbYpX92s53A7C",
          "is_bot": false,
          "headline": "feat(three): @domphy/three — declarative three.js scene graph (r3f co…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T04:39:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "708deb2726c3280e23e446af8da6f9f071531dc8",
          "body": "…t type=\"button\" (implicit form-submit bug)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "fix(ui): release 0.18.20 — segmented/tabs/toggleGroup/menu buttons ge…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T03:28:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "57534b501528fd2c5e23ba252556892365014693",
          "body": "…space:^ peers)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "chore(press): release 0.20.12 (0.20.11 published with unresolved work…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T02:35:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "82af3c73a3b13bcbd70819f0f59b694dfb69f6b9",
          "body": "…it-wave fixes)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "chore(core,ui): release @domphy/core 0.18.4 + @domphy/ui 0.18.19 (aud…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T02:03:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "452f3619e0efeeadc90c56959e05c0f4329edf0c",
          "body": "Audit: 6 parallel finder agents by subsystem, each finding adversarially\nverified against the real code (several with live repros) before fixing.\nEvery fix carries a regression test; full workspace suite green.\n\ncore:\n- ElementList: imperative children.insert() nodes (floating panels,\n  _onInit subt\n[…]\nhas' section\ndocumenting the reuse contract behind this whole bug class.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "fix(core,ui): resolve all 21 findings from the multi-agent bug audit",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T01:51:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e9014602fd17df623e1d0a20c9e37cdc06e5f6f7",
          "body": "…t collision on shared anchors\n\nTwo bugs surfaced by a new lifecycle matrix test that drives every\ncreateFloating() consumer (popover/tooltip/selectBox/combobox/datePicker)\nthrough re-render/removal/shared-anchor transitions:\n\n- core: ElementNode.patch() treated nullish declared content as 'remove a\n[…]\nsions.generated.ts\n(was pinned at 0.18.14, failing its own mirror test).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_019dKFW45Vz2z3cZfGrDP2yy",
          "is_bot": false,
          "headline": "fix(core,ui): patch() wiping _onInit-inserted children + floating slo…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T01:09:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e9faa0aaf30bd053b57213f67bed922cc09a181f",
          "body": "…d-open\n\n0.18.17 fixed the removal case (anchor's BeforeRemove hook tore down the\nWRONG generation's state on a reused anchor); this fixes the same root\ncause the other direction, with no removal involved at all — just hovering\na tooltip whose row gets re-rendered by an unrelated state change while \n[…]\nwithout the fix, pass with it, existing 7 tests\nin the file unaffected.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Tx3tfyFDG5rogtnCsu12f3",
          "is_bot": false,
          "headline": "fix(ui): floating panel stuck open forever after anchor re-renders mi…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-10T00:43:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b2eef1bba8c6de37301b811221523b32f4318d22",
          "body": "…h instead of pnpm publish left workspace:* deps unresolved)",
          "is_bot": false,
          "headline": "chore(ui): release 0.18.17 (0.18.16 was published broken — npm publis…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-09T17:25:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e01ff62ae9e0d0d876d3636d1be2115c65dd8ef",
          "body": null,
          "is_bot": false,
          "headline": "chore(ui): release 0.18.16 (floating anchor-removal teardown fix)",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-09T17:20:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "232ce01de3e812e68bf164f70a022537e039a81d",
          "body": "…oved after a re-render\n\nSame reused-node gap as c3dbcab (show()/hide() no-op after a re-render), the\nother direction: anchorPartial's _onMount — where the ONE-EVER BeforeRemove\nhook gets registered, since _onMount only fires on a node's true first mount\n- closed over THAT FIRST createFloating() clo\n[…]\ns, even when scoped to a host that DOES contain a matching\ndescendant).\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Tx3tfyFDG5rogtnCsu12f3",
          "is_bot": false,
          "headline": "fix(ui): floating popover leaks orphaned panel when its anchor is rem…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-09T17:16:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3af7c2a93b344f61052207012f333c5941551421",
          "body": null,
          "is_bot": false,
          "headline": "chore(ui): release 0.18.15 (floating trigger re-render fix)",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-09T03:51:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3dbcabdd3e26e8e695aec91065026c4751a79c1",
          "body": "…ker) stops opening after its ancestor re-renders\n\nRoot cause: createFloating() captures the trigger's `reference`/`rootNode`\nexclusively via anchorPartial's _onMount — but ElementNode.patch() correctly\ndoes NOT re-run lifecycle hooks on a reused (already-mounted) DOM node\n(\"hooks already ran\", by d\n[…]\nmers (popover, tooltip, selectBox, combobox,\ndatePicker) — the shared utility fix benefits every one of them.\n\n351/351 existing ui package tests still pass (zero regressions) + 5 new\nregression tests.",
          "is_bot": false,
          "headline": "fix(ui): floating trigger (popover/tooltip/selectBox/combobox/datePic…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-09T03:41:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "646d8e0d204b9b9ba4c61ce00adde75fa53a20da",
          "body": "A full re-diff of every ported @domphy/blocks component against the cloned\nupstream (shadcn/ui + Magic UI, plus recharts/d3-shape library defaults for\nchart recipes) found most remaining fidelity gaps shared a single root in the\nfamily *-shared.ts helpers. Fixed once at the shared source and propaga\n[…]\n tsc pass.\nRegenerated docs pages, llms-full.txt, and SOURCES.md notes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01MZajpVty48VcEitHzHFMLV",
          "is_bot": false,
          "headline": "fix(blocks,web): align blocks to upstream via shared-helper root fixes",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-08T02:45:50Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8edfadd26850d01fcf2c63ad9d830ee292143593",
          "body": "…xed-position demo content\n\ndiaTextReveal always kept text fully visible (only a decorative shine\nlayer toggled on top), so the \"reveal\" was imperceptible to a real\nvisitor — reported live on the docs site. Rewrote to match upstream's\nreal technique: text starts effectively invisible (background-cli\n[…]\ntablishes that containing block per the CSS\nspec - verified live on the built site that scrollProgress's bar now\nrenders inside its own preview box and correctly grows in response to\nreal page scroll.",
          "is_bot": false,
          "headline": "fix(blocks,web): rewrite diaTextReveal's reveal technique, contain fi…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T08:30:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a20581bc0b6452d4abc261d8f1764830a9e6177",
          "body": "…ntrast regression\n\nFollow-up to the direct-source-diff pass: implements the 4 gaps that were\nfound but deliberately left flagged pending a bigger design call.\n\n- fileTree: added the missing indicator guide-rail down expanded folders'\n  children (indicator prop, default true, matching upstream).\n- c\n[…]\nebar07/sidebar08,\nall sharing the same shared renderer).\n\nregistry.json/SOURCES.md updated per component; docs regenerated. Full\nblocks suite (504) and apps/web suite (55) pass; typecheck/build clean.",
          "is_bot": false,
          "headline": "fix(blocks): implement the 4 previously-flagged fidelity gaps, fix co…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T05:09:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "20067ede15f3ee6c3cf82b11c008ebc12376a7d0",
          "body": "Cloned the real shadcn/ui and Magic UI repos locally and diffed every\nremaining component line-by-line against them (both MIT-licensed, so\nreading source for verification carries no license concern). Found and\nfixed 58 real fidelity gaps the spec-only clean-room process had produced:\n\n- Charts: miss\n[…]\nn/SOURCES.md updated with a dated note per fixed/flagged\nentry; per-block docs regenerated. Full blocks suite (498) and apps/web\nsuite (55) pass; blocks typecheck/build clean; site builds (485 pages).",
          "is_bot": false,
          "headline": "fix(blocks): direct-source-diff pass across all 173 remaining blocks",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T04:04:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "80b3e37df63c6ee6c18031cac9cf7a0881ec55c8",
          "body": "…fidelity gap\n\nDirect source-diff verification (cloned shadcn-ui/magicui, fetched Aceternity's\nregistry JSON) found the spec-only clean-room process had produced real\nfidelity bugs, not styling nuance: pointerHighlight used an SVG dasharray-trace\ntechnique when upstream grows a plain bordered div fr\n[…]\njs (also fixed: it was seeding one empty sidebar group\nper hardcoded source name regardless of whether the source had any entries\nleft, which would have kept showing an empty \"Aceternity UI\" heading).",
          "is_bot": false,
          "headline": "fix(blocks): remove Aceternity UI category, fix bentoGrid box-shadow …",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T03:00:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "41b9c8e52efd58954ba8c66a875583d39753796e",
          "body": "mountEditor's shadowHost had its own overflow:auto layered on top of\nRender.ts's wrapper div (also overflow:auto, height:100%) — two nested\nscrollable boxes at nearly the same width render two scrollbars right\nnext to each other. Render.ts's is the one that actually matters (it\nscrolls the themed/pa\n[…]\nHost wrapper just\nneeds to size and clip, so overflow:hidden there instead. Matches how\npreview/Container.ts's read-only preview already does it (no overflow\non its own host, only on Render.ts's div).",
          "is_bot": false,
          "headline": "fix(web): drop redundant scrollbar in playground preview panel",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T02:33:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd9d8382567db9043470bea35f680de5b6d12440",
          "body": "…ng columns\n\nSide-by-side split (previous commit) breaks full-page block demos\n(login screens, dashboards) — halving their width collides with their\nown internal 2-column/grid layouts, which assume full viewport width.\nMost of this gallery's ~280 CodeEditor pages are exactly that kind of\nfull-page m\n[…]\nere missing\n  min-height:0 on the flex chain feeding the shadow-hosted demo, so\n  taller previews grew past the available space and got clipped by\n  the wrapper's overflow:hidden instead of scrolling.",
          "is_bot": false,
          "headline": "fix(web): stack playground code/preview full-width instead of splitti…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T02:24:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0dfaa182f8a50e2128e8f825ba38270b59d79868",
          "body": "…efetching every run\n\nReference pages don't change between our own edits, so hitting the network\nand re-screenshotting the third-party site on every visual-compare run was\npure waste (and slow/flaky against sites we don't control). reference.png is\nnow cached on disk and reused; only local.png (the side that actually\nchanges) is re-captured each run. --refresh-reference forces a re-fetch.",
          "is_bot": false,
          "headline": "perf(blocks): cache visual-compare reference screenshots instead of r…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T01:53:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa2d6a89e33b1dba855f5a1922b473ea9f08f20c",
          "body": "…ked rows\n\nRoot cause of the \"code box stuck in a corner\" bug: Editor.ts's CodeMirror\nwrapper had no flexDirection, so it defaulted to row and .cm-editor\nshrank to its widest code line instead of stretching full width.\n\nRebuilt the layout around @domphy/ui's splitter/splitterPanel/splitterHandle:\nco\n[…]\nmissing position:relative behind Render.ts's grid-line\noverlay, and fullscreen mode's toolbar being hidden under the site's\nsticky header (z-index 10 < header's 100). Removes the dead, unused\nPane.ts.",
          "is_bot": false,
          "headline": "fix(web): rebuild playground as a real resizable split view, not stac…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T01:49:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a795d2956df94ea21d21d328d24e1c507880e7ef",
          "body": "… block docs\n\n- pointerHighlight.ts: the rectangle-outline <svg> had `position: absolute` +\n  `inset` with no explicit width/height. <svg> is a CSS replaced element (like\n  <img>) — inset alone doesn't stretch it to fill the box; without explicit\n  width/height it fell back to the browser's default \n[…]\ndocumented on the page itself (only visible by reading the raw\n  source at the bottom). Handles props types declared locally or imported\n  from a \"-shared.ts\" companion file (the sidebar01-04 family).",
          "is_bot": false,
          "headline": "fix(blocks): fix pointerHighlight svg sizing bug, add props tables to…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-05T01:36:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c50402bdce735a2f9e75dd1d282824b6cb4acf0b",
          "body": "… a11y across 252 blocks\n\nAdds two new QA tools and fixes every real finding they surfaced:\n\n- scripts/contrast-scan-backgrounds.ts + contrast-harness.ts: measures WCAG\n  contrast against ACTUAL composited pixels (screenshot-based), not just\n  declared CSS colors, since animated/blurred backgrounds \n[…]\nd a real content bug (duplicate placeholder copy in svgMaskEffect)\n  and a real markup bug (ariaLabel placed before the tag key in two\n  sidebarLeftRight elements — Domphy requires the tag key first).",
          "is_bot": false,
          "headline": "fix(blocks): full accessibility audit — real WCAG contrast + axe-core…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T17:11:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0cbc25ff1af8e04138cae7297c9ee1e1b54065a2",
          "body": "…locks\n\nStatic screenshot diffing (visual-compare.ts) only proves a block\nrenders the right pixels once — it can't catch a hover effect whose\nlistener never attaches, a drag that silently no-ops, or a toggle that\ndoesn't toggle. These scripts drive actual Playwright click/hover/\nkeyboard/drag input \n[…]\nd chart tooltips, file/drag\ninputs, and carousels/globes/loaders. This pass found and fixed 5 real\nbugs (see the sibling fix(blocks) and fix(core) commits) that static\nscreenshots had no way to catch.",
          "is_bot": false,
          "headline": "test(blocks): add real browser interaction tests for 94 interactive b…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T12:14:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b47c035927a1e41d9b089f000fe5fb2d4a2f1237",
          "body": "Found by driving actual click/hover/keyboard/drag interactions against\nall 94 interactive blocks (not just static screenshot diffing) and\nasserting the resulting DOM/state actually changed as expected.\n\n- sidebarInDialog: the dialog set display:\"flex\" unconditionally,\n  overriding the native `dialog\n[…]\nwith non-default props\ninto its own container — both needed so interaction-check scripts can\nexercise props that are off by default in the demo (stickyBanner's\nhideOnScroll, compareSlider's autoplay).",
          "is_bot": false,
          "headline": "fix(blocks): fix 5 real bugs found via Playwright interaction testing",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T12:14:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "016804b4359c2daa55eb6f6312b67a642776f1c1",
          "body": "StyleProperty ran camelToKebab() unconditionally on every style key,\nturning a custom property like \"--siteHeaderHeight\" into\n\"--site-header-height\" in the emitted CSS. Any var(--siteHeaderHeight)\nreference elsewhere then resolved to nothing, since custom property\nnames are case-sensitive and never \n[…]\nckyHeader's real interaction test: the header\nregion never clamped to its expected height because the var it\ndepended on was silently broken.\n\nFix: skip camelToKebab() for any name starting with \"--\".",
          "is_bot": false,
          "headline": "fix(core): stop kebab-casing CSS custom property names",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T12:13:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "648d0bcc2fbd3729eab8ae89c110beffe453b922",
          "body": "…A pass\n\nRan the (now-working) visual-compare tool across all 252 components — local\nrender vs. public reference screenshot — then had review agents flag any\nthat looked genuinely broken (not just stylistically different, which is\nexpected for a clean-room reimplementation). ~35 confirmed real bugs,\n[…]\n `<h2>` inside `.block-box`, e.g. kineticText — scoped to\n`.card > h2`).\n\nRegenerated the 7 per-block doc pages whose registry.json status/notes\nchanged, and SOURCES.md, to reflect the post-fix state.",
          "is_bot": false,
          "headline": "fix(blocks): fix ~35 real rendering bugs found via full visual-diff Q…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T04:18:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "73081c574ada0ff7a7c3215dfcb8b756f59eab19",
          "body": "Two independent rendering bugs found while visually diffing @domphy/blocks'\nshadcn chart recipes against their references:\n\n1. BarRenderer: horizontal-orientation detection used `yScale.bandwidth() > 0`\n   to pick the axis branch, but the grid builds an ordinal Y-scale's pixel\n   range top-to-bottom\n[…]\n beneath it. Fixed by threading each series' pre-stack\n   running-total baseline through engine.ts into LineRenderer, and by\n   accumulating cumulative stack sums in grid.ts's axis-extent calculation.",
          "is_bot": false,
          "headline": "fix(chart): horizontal bar bandwidth sign + stacked-area baseline/extent",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T04:17:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "577c663e8895284810342a67ba3e9727a0fc48e8",
          "body": "…h class\n\n`class: props.className` is a common idiom for an optional caller-supplied\nclass name — when unset, `className` is `undefined`, and merge() was calling\n`attributes.set(\"class\", undefined)` unconditionally, clobbering the node's\nown auto-generated CSS-in-JS scoping class in the process. Any\n[…]\nences — statefulButton rendered as a completely unstyled native\n<button> because of this. Affected ~19 files across that package (only\nvisible where the wiped styling happened to matter cosmetically).",
          "is_bot": false,
          "headline": "fix(core): ElementNode.merge() must not wipe the class attr on nullis…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T04:17:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8729aa985cd03d66212b245c28cd2405dd16d426",
          "body": "Found while manually diffing globe3D's local render against its Aceternity\nreference: the local screenshot came back blank even though the canvas had\nreal rendered pixels moments before the capture. Three compounding causes:\n\n1. globe3D's WebGL context was created without preserveDrawingBuffer, the\n\n[…]\n's position between measuring its clip rect and\n   actually capturing — occasionally screenshotting the wrong card entirely.\n   Added disconnectLazyMount(), called once before the compare loop starts.",
          "is_bot": false,
          "headline": "fix(blocks): fix visual-compare screenshotting WebGL canvases as blank",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T00:44:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0afb150335bdb901051dc81b7aa22d5a9bf6b11f",
          "body": "… the page\n\n.code-block pre had no max-height/overflow-y — a highlighted source block\nrendered at its full natural height with no internal scroll. Never visible\nbefore since @domphy/ui patch demo files are all short (20-90 lines), but\n@domphy/blocks' code-group includes pull in some genuinely large \n[…]\n,000px tall block and\nstretched the whole page to ~20,600px.\n\nCapped at 32em with overflow-y:auto — short blocks are unaffected (they're\nalready shorter than the cap), long ones now scroll internally.",
          "is_bot": false,
          "headline": "fix(press): cap code-block height so large source files don't balloon…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-04T00:28:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "085f6112eb5e2dbf39652ca9ec1229d47ae70878",
          "body": "Each of the 252 blocks now gets its own doc page at /docs/blocks/<name>,\nmatching the @domphy/ui patch docs convention: an editable <CodeEditor>\n(CodeMirror + in-browser sucrase eval, same sandboxed shadow-DOM preview\npatches already use) seeded with `import { X } from \"@domphy/blocks\"; export\ndefau\n[…]\nge and a WebGL-heavy Aceternity page (globe3D) both render with\n0 console errors — confirmed via Playwright that the CodeEditor evaluates\n@domphy/blocks imports and renders the live preview correctly.",
          "is_bot": false,
          "headline": "feat(web): add live playground pages for every @domphy/blocks export",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-03T01:04:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "406eec5cfb569e5ece4d55e224a14b31bc4fc79b",
          "body": "…endency\n\nThe previous commit added @domphy/blocks to apps/web/package.json but the\nlockfile was never regenerated for that specific addition (only\npackages/blocks itself had been pnpm-installed), so Vercel's frozen-lockfile\ninstall failed with ERR_PNPM_OUTDATED_LOCKFILE.",
          "is_bot": false,
          "headline": "fix(web): update pnpm-lock.yaml for apps/web's new @domphy/blocks dep…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-02T18:47:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bee668c8b785a3bb2026a6f6b4ca82e35b101638",
          "body": "…blocks\n\nNew package: sidebar layouts, auth pages, a dashboard, and @domphy/chart\nrecipes from shadcn/ui (97), plus marketing/effect components from Magic UI\n(76) and Aceternity UI (79, deduplicated against Magic UI). Every export is a\nfactory function `name(props?) => DomphyElement` returning a ful\n[…]\ncs: /docs/blocks/ (overview, per-source catalogs, methodology, API), wired\ninto press.config.ts nav/sidebar. AI-surface (AGENTS.md, llms.txt,\nllms-full.mjs) and apps/web package.json updated to match.",
          "is_bot": false,
          "headline": "feat(blocks): add @domphy/blocks — 252 clean-room-ported composed UI …",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-02T18:43:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7403df6e56569cbe945f308dda681e8808a5dd88",
          "body": "… tags\n\nA synchronous 2-arg _onBeforeRemove hook (e.g. motion() with no exit frame)\nthat calls done() inline triggers disposal, clearing _hooks to {} before the\narity re-read that followed the hook call — throwing instead of completing\nremoval. Capture the hook reference before invoking it in both E\n[…]\nby\nnoise/dither-style filter effects.\n\nFound while building @domphy/blocks (a large port of composed UI components\nthat exercises core's lifecycle and SVG support far more heavily than typical\ndemos).",
          "is_bot": false,
          "headline": "fix(core): resolve BeforeRemove use-after-clear race + add SVG filter…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-02T18:42:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3159587a66036e9ff16eb00b1aa699c3ccef331a",
          "body": "…CRIPT fix pass",
          "is_bot": false,
          "headline": "chore(web): regenerate llms-full.txt after the mobile nav + RUNTIME_S…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-02T07:59:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8aaa780806bda0dafd45bc22ece353733c007163",
          "body": "index.md has no explicit title and its hero heading comes from\nfrontmatter (not a markdown H1), so renderDoc's title fallback chain\nlanded on titleFromFilePath — which resolved to \"web\" (apps/web's own\ndirectory name) instead of the site title. Every other page has an H1\nso this only ever showed up on \"/\".",
          "is_bot": false,
          "headline": "fix(web): home page <title> falls back to the \"web\" folder name",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-02T07:59:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb222bf9a8b3d6ad75e9a28d91e5313f18ed6b5a",
          "body": "…lers\n\napps/web/html-template.ts kept its own copy of the inline runtime\nscript instead of importing @domphy/press's (which wasn't exported).\nThe copy dated back to before backdrop-close, copy-code buttons,\ncollapsible sidebar groups, and dismissible announcement bars were\nadded to the real one in p\n[…]\nRIPT from @domphy/press and have apps/web import it\ninstead of maintaining a second copy. Added test coverage asserting the\nhandlers this specific copy was missing, so this can't silently drift\nagain.",
          "is_bot": false,
          "headline": "fix(web): stale duplicated RUNTIME_SCRIPT missing half its click hand…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-02T07:59:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e1b912b72fc645b89395a842c4350159cc69e1af",
          "body": "… docs sidebar\n\nThe mobile drawer mechanics (data-sidebar toggle, backdrop, CSS\ntransform) only ever targeted nav[aria-label=\"Documentation\"] — the\ndocs sidebar. Pages that render via homeShell/pageShell without a\nsidebar (layout: home, layout: page — the site's own home page and\n/docs/playground) n\n[…]\nss config contract (and the CLI) expect\n`export default`. Verifying this fix required apps/web to actually have a\n\"dev\" script — its README already claimed one existed but package.json\ndidn't have it.",
          "is_bot": false,
          "headline": "fix(press): mobile hamburger menu is a dead button on pages without a…",
          "author_name": "Nguyen Huu Khanh",
          "author_login": "huukhanhnguyen",
          "committed_at": "2026-07-02T07:58:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 2,
      "commits_last_year": 641,
      "latest_release_at": "2026-06-25T03:24:26Z",
      "latest_release_tag": "v0.18.0",
      "releases_from_tags": true,
      "days_since_last_push": 2,
      "active_weeks_last_year": 14,
      "days_since_latest_release": 30,
      "mean_days_between_releases": 95
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "domphy",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/domphy",
          "is_deprecated": false,
          "latest_version": "0.18.0",
          "repository_url": "https://github.com/domphy/domphy",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 178,
          "first_published_at": "2026-06-26T03:35:18.969000Z",
          "latest_published_at": "2026-06-26T03:35:19.458000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 29
        }
      ]
    },
    "popularity": {
      "forks": 1,
      "stars": 2,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-05",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "demos",
        "examples",
        "recipes"
      ],
      "has_llms_txt": true,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "apps/web/tsconfig.json",
        "bench/tsconfig.json",
        "packages/app/tsconfig.json",
        "packages/blocks/tsconfig.json",
        "packages/chart/tsconfig.json",
        "packages/core/tsconfig.json",
        "packages/create-domphy/tsconfig.json",
        "packages/dnd/tsconfig.json",
        "packages/doctor/tsconfig.json",
        "packages/floating/tsconfig.json",
        "packages/form/tsconfig.json",
        "packages/i18n/tsconfig.json",
        "packages/markdown/tsconfig.json",
        "packages/mcp/tsconfig.json",
        "packages/mermaid/tsconfig.json",
        "packages/palette/tsconfig.json",
        "packages/press/tsconfig.json",
        "packages/query/tsconfig.json",
        "packages/router/tsconfig.json",
        "packages/table/tsconfig.json",
        "packages/theme/tsconfig.json",
        "packages/three/tsconfig.json",
        "packages/ui/tsconfig.json",
        "packages/virtual/tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 104387,
      "source_files_sampled": 1478,
      "oversized_source_files": 6,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 25622
    },
    "dependencies": {
      "manifests": [
        "bench/package.json",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "openai",
          "manifest": "bench/package.json",
          "ecosystem": "npm",
          "version_constraint": "^4.0.0"
        },
        {
          "name": "@domphy/core",
          "manifest": "bench/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "@domphy/doctor",
          "manifest": "bench/package.json",
          "ecosystem": "npm",
          "version_constraint": "workspace:*"
        },
        {
          "name": "esbuild",
          "manifest": "bench/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.25.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "huukhanhnguyen",
          "commits": 642,
          "avatar_url": "https://avatars.githubusercontent.com/u/107380766?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        "biome.json"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "pnpm-lock.yaml"
      ],
      "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": null,
            "reason": "no pull request found",
            "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/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": 0,
            "reason": "no 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 0 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": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file 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": 0,
            "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": "63 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "916ada6e9abe6ea63eba629512bfb9d8fa49d9e7",
        "ran_at": "2026-07-25T11:02:03Z",
        "aggregate_score": 3.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T12:25:07Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/domphy/domphy",
    "host": "github.com",
    "name": "domphy",
    "owner": "domphy"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 48,
      "inputs": {
        "security": 33,
        "vitality": 76,
        "community": 27,
        "governance": 29,
        "engineering": 70
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 76,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 74,
            "inputs": {
              "commits_last_year": 641,
              "human_commit_share": 1,
              "days_since_last_push": 2,
              "active_weeks_last_year": 14
            },
            "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": "14/52 weeks with commits",
                "points": 9.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 14
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "641 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 641
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "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": 80,
            "inputs": {
              "releases_count": 2,
              "latest_release_tag": "v0.18.0",
              "releases_from_tags": true,
              "days_since_latest_release": 30,
              "mean_days_between_releases": 95
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "2 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 30 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~95 days",
                "points": 19.8,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 95
                    }
                  }
                ],
                "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": "critical",
        "name": "Community & Adoption",
        "value": 27,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 1,
              "stars": 2,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "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": "at_risk",
            "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": 38,
            "inputs": {
              "packages": [
                "domphy"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 178
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "178 downloads/month across npm",
                "points": 30,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 178,
                      "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": "critical",
        "name": "Sustainability & Governance",
        "value": 29,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "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,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "domphy",
              "public_repos": 1,
              "account_age_days": 419
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of domphy",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "domphy"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~1 yr old",
                "points": 4.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "good",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "packages": [
                "domphy"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 29
            },
            "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 29 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 29
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "1 published versions",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": 70,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "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": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": "https://domphy.com",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": false
            },
            "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://domphy.com",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 33,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 33,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 3.3
            },
            "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "no update tool detected",
                "points": 0,
                "status": "missed",
                "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 0 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 not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "63 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "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": 1
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 77,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 25622
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": "llms.txt present",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "llms_txt_present",
                    "params": {}
                  }
                ],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "pnpm-lock.yaml"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "apps/web/tsconfig.json",
                "bench/tsconfig.json",
                "packages/app/tsconfig.json",
                "packages/blocks/tsconfig.json",
                "packages/chart/tsconfig.json",
                "packages/core/tsconfig.json",
                "packages/create-domphy/tsconfig.json",
                "packages/dnd/tsconfig.json",
                "packages/doctor/tsconfig.json",
                "packages/floating/tsconfig.json",
                "packages/form/tsconfig.json",
                "packages/i18n/tsconfig.json",
                "packages/markdown/tsconfig.json",
                "packages/mcp/tsconfig.json",
                "packages/mermaid/tsconfig.json",
                "packages/palette/tsconfig.json",
                "packages/press/tsconfig.json",
                "packages/query/tsconfig.json",
                "packages/router/tsconfig.json",
                "packages/table/tsconfig.json",
                "packages/theme/tsconfig.json",
                "packages/three/tsconfig.json",
                "packages/ui/tsconfig.json",
                "packages/virtual/tsconfig.json"
              ],
              "agent_commit_share": 0.26,
              "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": "apps/web/tsconfig.json, bench/tsconfig.json, packages/app/tsconfig.json, packages/blocks/tsconfig.json, packages/chart/tsconfig.json, packages/core/tsconfig.json, packages/create-domphy/tsconfig.json, packages/dnd/tsconfig.json, packages/doctor/tsconfig.json, packages/floating/tsconfig.json, packages/form/tsconfig.json, packages/i18n/tsconfig.json, packages/markdown/tsconfig.json, packages/mcp/tsconfig.json, packages/mermaid/tsconfig.json, packages/palette/tsconfig.json, packages/press/tsconfig.json, packages/query/tsconfig.json, packages/router/tsconfig.json, packages/table/tsconfig.json, packages/theme/tsconfig.json, packages/three/tsconfig.json, packages/ui/tsconfig.json, packages/virtual/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "apps/web/tsconfig.json, bench/tsconfig.json, packages/app/tsconfig.json, packages/blocks/tsconfig.json, packages/chart/tsconfig.json, packages/core/tsconfig.json, packages/create-domphy/tsconfig.json, packages/dnd/tsconfig.json, packages/doctor/tsconfig.json, packages/floating/tsconfig.json, packages/form/tsconfig.json, packages/i18n/tsconfig.json, packages/markdown/tsconfig.json, packages/mcp/tsconfig.json, packages/mermaid/tsconfig.json, packages/palette/tsconfig.json, packages/press/tsconfig.json, packages/query/tsconfig.json, packages/router/tsconfig.json, packages/table/tsconfig.json, packages/theme/tsconfig.json, packages/three/tsconfig.json, packages/ui/tsconfig.json, packages/virtual/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "26 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 26,
                      "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": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": 104387,
              "source_files_sampled": 1478,
              "oversized_source_files": 6
            },
            "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": "6/1478 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 1478,
                      "oversized": 6
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "demos",
                "examples",
                "recipes"
              ],
              "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": "demos, examples, recipes",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "demos, examples, recipes"
                    }
                  }
                ],
                "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",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T11:02:09.690146Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/domphy/domphy.svg",
  "full_name": "domphy/domphy",
  "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.