Öffentliches Register
Software-GesundheitsberichtSchema 0.23.0 · Metriken 1.13.0 · 2026-07-21 16:27 UTC

wangyu16 / orz-mdhtml

Markdown → one .md.html file that reads like a webpage and edits itself in the browser. Ships agent skills.

JavaScript · TypeScriptMIT★ 0 Sterne⑂ 0 Forksseit Juni 2026Auf GitHub ansehen ↗

wangyu16/orz-mdhtml erreicht einen Gesundheitsindex von 40 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei Vitality (68/100) ab, am schwächsten bei Security (27/100). Zuletzt vor 4 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

40
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.

40
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

Yu WangPersönliches Konto
0 Follower26 öffentliche Reposseit Sept. 2014University of Louisiana at Lafayette

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlichtTags
npmorz-mdhtml0.9.33.29619vor 4 Tagenmarkdownorz-markdownself-containedhtmleditorsingle-file
npmorz-mdhtml-browser0.9.33.24019vor 4 Tagenorz-markdownorz-mdhtmlmarkdownbrowsercdn

Metriken nach Kategorie

Vitalität

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

68Mittel · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 4 Tagen
2.8/36Commit-Rhythmus — 4/52 Wochen mit Commits
15.5/18Commit-Volumen — 52 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year52
human_commit_share1
days_since_last_push4
active_weeks_last_year4
Wie die Bewertung erfolgt
16.2/27Liefert Releases aus — 5 Versions-Tags (keine GitHub-Releases)
36/36Release-Aktualität — letztes Release vor 13 Tagen
27/27Release-Rhythmus — ein Release etwa alle 0,5 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count5
latest_release_tagv0.7.1
releases_from_tagsja
days_since_latest_release13
mean_days_between_releases0,5
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?

34Gefährdet · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
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
50.9/80Downloads pro Monat — 6.536 Downloads/Monat über npm
0/20Abhängige in der Registry — von diesem Ökosystem nicht ausgewiesen
Verwendete Eingangsdaten
packagesorz-mdhtml, orz-mdhtml-browser
dependents
ecosystemsnpm
total_downloads
monthly_downloads6.536
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Abhängige in der Registry. Die verbleibenden Gewichte wurden renormalisiert.

Nachhaltigkeit & Governance

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

34Gefährdet · 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
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
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
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
0/25Reichweite des Inhabers — 0 Follower von wangyu16
22.4/25Kontohistorie — 26 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers0
owner_typeUser
is_verified
owner_loginwangyu16
public_repos26
account_age_days4.333
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 2 Paket(e) auf npm
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 4 Tagen
20/20Versionshistorie — 19 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesorz-mdhtml, orz-mdhtml-browser
ecosystemsnpm
any_deprecatednein
min_days_since_publish4

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

31Gefährdet · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
0/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsnein
has_editorconfignein
has_linter_confignein
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://markdown.orz.how
10/10Repository-Beschreibung
10/10Topics — 11 Topics
10/10Wiki
Verwendete Eingangsdaten
topicsagent-skills, ai-agents, claude, editable, html, markdown, markdown-it, markdown-to-html, self-contained, single-file, offline-document
has_wikija
homepagehttps://markdown.orz.how
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

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

27Kritisch · 16 % des Gesamtindex

Sicherheitslage

27Kritisch
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.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — keine Daten
0/5Pinned-Dependencies — keine Daten
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. 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.

57Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
45/45Agentenanweisungen — CLAUDE.md
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 43 von 52 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,827
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes5.060
Wie die Bewertung erfolgt
0/18Bootstrap mit einem Befehl
0/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — tsconfig.json
10/10Reproduzierbare Umgebung — lockfile
10/10Belegte Agentenpraxis — 44 der letzten 52 Commits von Agenten verfasst oder ihnen zugeschrieben
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — keine Daten
Verwendete Eingangsdaten
has_nixnein
has_testsnein
lockfilespackage-lock.json
has_dockerfilenein
typed_languagenein
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configstsconfig.json
agent_commit_share0,846
toolchain_manifests
dependency_bot_commit_share0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Pinned-Dependencies. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
27/45Typprüfbarer Code — JavaScript mit Typprüfungs-Konfiguration (tsconfig.json)
55/55Handhabbare Dateigrößen — 0/5 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageJavaScript
largest_source_bytes44.912
source_files_sampled5
oversized_source_files0
Wie die Bewertung erfolgt
0/40API-Schema (OpenAPI/GraphQL/proto)
0/20MCP-Server
40/40Lauffähige Beispiele — examples
Verwendete Eingangsdaten
example_dirsexamples
has_mcp_signalnein
api_schema_files

Eckdaten

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

Warnungen zur Datenerhebung

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:orz-mdhtml@0.9.3; advisories assessed against the repository dependency graph instead

Weitere Details

OpenSSF Scorecard 2.7 / 10
2.7Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-21 16:27 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
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
k. A.Packagingpackaging workflow not detected
k. A.Pinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 1
RegistryPaketVersionsvorgabeManifest
npmorz-markdown^1.6.3package.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": [
        "agent-skills",
        "ai-agents",
        "claude",
        "editable",
        "html",
        "markdown",
        "markdown-it",
        "markdown-to-html",
        "self-contained",
        "single-file",
        "offline-document"
      ],
      "is_fork": false,
      "size_kb": 260,
      "has_wiki": true,
      "homepage": "https://markdown.orz.how",
      "languages": {
        "JavaScript": 50865,
        "TypeScript": 35058
      },
      "pushed_at": "2026-07-17T00:12:50Z",
      "created_at": "2026-06-24T07:52:53Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T00:12:55Z",
      "description": "Markdown → one .md.html file that reads like a webpage and edits itself in the browser. Ships agent skills.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "JavaScript",
      "significant_languages": [
        "JavaScript",
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Yu Wang",
      "type": "User",
      "login": "wangyu16",
      "company": "University of Louisiana at Lafayette",
      "location": "Lafayette, Louisiana",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/8711631?v=4",
      "created_at": "2014-09-09T15:39:06Z",
      "is_verified": null,
      "public_repos": 26,
      "account_age_days": 4333
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-07-08T09:26:05Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-07-08T09:11:20Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-07-08T08:07:16Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-07-08T07:35:22Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-07-06T09:31:20Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a4e89871a0d211c52cebd8a93c960bd5d33e276d",
          "body": null,
          "is_bot": false,
          "headline": "release: update metadata and prepare v0.9.3",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-17T00:12:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f5c09623265ca0ccdee23afabe10de0744defa6",
          "body": null,
          "is_bot": false,
          "headline": "docs: lead with \"Markdown that edits itself\" (positioning)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-16T10:19:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8834259058efc03a970f3237665aae0c79688bf2",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Changelog: record 0.9.0 (orz-host-include@1)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-11T09:08:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "282eabc7d5ddb357a97080d373fdb0d46eed24d1",
          "body": "…view (0.9.0)\n\nThe in-file editor now speaks orz-host-include@1 (sibling of orz-host-save /\norz-host-ai): when a host answers the hello, `{{md-include https://…}}` /\n`{{markdown https://…}}` directives are resolved by the host (which owns the\nfetch + allowlist) and inlined into the PREVIEW render. T\n[…]\nRO network requests to the include\nURL. PROTOCOL.md documents the messages; browser bundle rebuilt; version 0.9.0\n(root + browser in lockstep).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "orz-host-include@1: host-resolved web transclusion in the in-file pre…",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-11T08:50:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "036626f5a6cc5feb30c0cdfed7e77adfe3fb306d",
          "body": null,
          "is_bot": false,
          "headline": "Release 0.8.1",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-11T02:00:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83b4b7eb6251050606b5238807bc485d633328a2",
          "body": "buildMdHtml gains a `metadata` option threaded through composeInlineMdHtml into\nthe <head> (meta/link rel=license + JSON island via orz-markdown/doc-meta). A\n`{{nyml kind: meta}}` block in the source is read and stripped; the host wins\nfield by field.\n\nPlacement in <head> is load-bearing: serializeD\n[…]\n a\nframework self-update.\n\nRequires orz-markdown ^1.4.0. Additive. Emission verified against real output;\nbare documents emit no metadata tags.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Accept host-injected document metadata (0.8.0)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-11T00:12:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c5c36c31b30e5461ef405a5336ec3849907db148",
          "body": "…actor\n\nThe 0.7.0 guide embedded a literal <script id=orz-src> string; a regex\nsource-extractor (host re-import/adapt) matched it as the source island and\nextracted the comment. Reword to reference the 'embedded source island' in prose,\nno tag literal. Runtime DOM-based save was unaffected.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.7.1 — fix: agent-guide comment no longer matched by the source extr…",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-08T09:26:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4bda7e34f93c1977dd966c4742576521edc52e73",
          "body": "A comment at the top of <body> tells an external AI app how to edit the file —\nwhat it is, where the editable source is (<script id=orz-src>), the block-ID\nrules, and how to fetch the official orz-mdhtml agent skill from jsDelivr.\nInvisible to readers; readable by an agent opening the source.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.7.0: embed an invisible agent guide in every generated .md.html",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-08T09:11:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "afffee9b53ab362276bafb6f4177f9a718273748",
          "body": "- Page-wide AI: a toolbar AI button (shown when the host advertises operations)\n  runs an op on the WHOLE document, not just a selection. The AI popover now\n  anchors to whatever opened it (selection coords or the button), refactored via\n  an explicit anchor rect; apply replaces the selection or the\n[…]\nnow sends the file's current theme id, so a host can persist the\n  author's theme choice (additive; standalone unchanged). PROTOCOL.md updated.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.7.0 — page-wide AI button + theme in the save handshake",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-08T08:57:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a50e068fceb30a75b97743a2128baff8c82bd57",
          "body": "The Improve-selection menu / suggestion panel positioned only below the selection\nwith a fixed 60px bottom reserve, so a selection low in the viewport pushed it\noff-screen. aiPlace now measures the element (positioned after DOM insertion) and\nflips it ABOVE the selection when it would overflow the bottom, pinning + scrolling\nif it fits neither; it re-runs when the suggestion loads (the panel grows).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.6.1 — fix AI assistant popover running off the bottom of the screen",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-08T08:07:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "653e79d3fb6dda79ad5a5ae96dc26b8aefe8e8ea",
          "body": "- Bump orz-mdhtml + orz-mdhtml-browser to 0.6.0 (browser bundle unchanged —\n  still orz-markdown@1.3.2 — republished at the matching version for the CDN pin).\n- CHANGELOG.md (0.6.0): the orz-host-ai@1 assistant.\n- README + orz-mdhtml-skills: document the save + AI host protocols.\n- CLAUDE.md: record\n[…]\n.0 + the new app.js.\n\nCoherency verified: orz-host-ai message names match across app.js, PROTOCOL.md,\nand @alembic/editor-kit's host-ai client.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release 0.6.0 — orz-host-ai@1 in-file AI assistant",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-08T07:35:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a11f49d49269aa51004cfcee80e1c291e579cc26",
          "body": "When an embedding host advertises AI operations (orz-host-ai-hello), the editor\nshows a selection assistant: select text -> a floating 'Improve selection' chip\n-> pick an op -> the passage is sent to the host (orz-host-ai-request) -> the\nreturned suggestion (orz-host-ai-result) is shown for review a\n[…]\n with\norz-host-save unchanged. Slides/paged (orz-slides/orz-paged) file half is a\nlater follow-up (Alembic treats them as derived views today).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "orz-host-ai@1: in-file AI assistant (file half of the bridge)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-08T06:08:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2c4d658d2fdc28b5732d4ee5c054b99e63c2309f",
          "body": null,
          "is_bot": false,
          "headline": "Update documentation for current renderer",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-07T08:03:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62639e84e874b8dbb1f0d2ed417db5eeea823c5c",
          "body": null,
          "is_bot": false,
          "headline": "v0.5.0 — expose delivery:'cdn' in buildMdHtml; orz-markdown ^1.3.2",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-06T09:31:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59b80b4b710c5800fee176688cd3255d437002d1",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release 0.4.0: programmatic library entry (buildMdHtml)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-04T14:05:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "98835ef5df6335432ef1763553cf50fc83c250a0",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Library entry: buildMdHtml() for in-process generation",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-04T13:57:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9d495d150b20189a7489df0ffbda36a9eb4317f0",
          "body": "…ec in PROTOCOL.md)\"\n\nThis reverts commit f40fbf0c38ba636cb723be843dd28c6b0e71c5ef.",
          "is_bot": false,
          "headline": "Revert \"Hosted chrome: hide the orz logo after the host handshake (sp…",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-04T13:35:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f40fbf0c38ba636cb723be843dd28c6b0e71c5ef",
          "body": "…OTOCOL.md)\n\nAfter a completed orz-host-save@1 handshake the runtime sets\ndocument.documentElement.dataset.orzHosted = \"1\" and the chrome CSS hides\nthe toolbar orz logo — the embedding host shows the same branding in its own\nheader. Runtime-only: the flag is stripped on serialization; unhosted files\nare unchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Hosted chrome: hide the orz logo after the host handshake (spec in PR…",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-04T09:36:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fce853f6fda92d029c436cfcb15377eb39f87022",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release 0.3.0: host embedding (orz-host-save@1)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-04T08:51:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "efd6d4b4d770319073ed6adb84a037c4b507c84b",
          "body": "A platform embedding a .md.html in an iframe can announce itself with a\npostMessage handshake; after a verified hello from window.parent, Save\nposts { source, html } to the host instead of the FS Access / download\npath, with a ~10s acknowledgement watchdog and an orz-host-dirty signal\non edit-state \n[…]\n are unchanged; Export keeps\nworking. PROTOCOL.md is the canonical versioned spec for all three\norz-family runtimes (kinds md / slides / paged).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Host embedding: implement orz-host-save@1 (spec in PROTOCOL.md)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-07-04T08:37:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d0d8a08f7ad5448ee72728cf137d9edec30a882a",
          "body": null,
          "is_bot": false,
          "headline": "Refresh orz-markdown lockfile",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-30T03:02:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79b4403f12452545d9ecc76a47bb97bbbf7f4f41",
          "body": null,
          "is_bot": false,
          "headline": "Release 0.2.1 with shared CDN pins",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-30T02:26:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15516e70eebfb2a6b6b305a4e0b558c257592449",
          "body": "The editorLibs.splitJs CDN URL was set in cli.ts, declared in template.ts, and\nembedded wholesale into every generated .md.html config — but never loaded:\nensureLibs() only fetches morphdom + CodeMirror, and the editor/preview divider is\na custom wireDivider() implementation driving --orz-split (no \n[…]\ner ships an unused library URL. The\ndivider is unaffected. Follow-up to the docs audit that removed the Split.js\nmention from the README/SKILL.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove dead splitJs config",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-29T13:42:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "66ecda27c8635a646537c157cf5450331d6a871a",
          "body": "…rz-markdown dep\n\nThe in-file runtime has no font-size/text-resize control, and Split.js is\nconfigured but never loaded (the editor/preview divider is custom). Remove\nboth stale claims from README and SKILL, and state the actual orz-markdown\ndependency (^1.3.0) instead of only the historical feature minimums.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Docs: drop non-existent font/text-resize & Split.js claims; clarify o…",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-29T08:45:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7c07034d0ba8959cfdae58d576ce02a98eba6e36",
          "body": "Point an agent at the bundled skill via its stable jsDelivr SKILL.md URL, or copy\nit into ~/.claude/skills for Claude Code. Links to markdown.orz.how/agents.html\nfor all install routes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "README: add a 'Use with an AI agent' section",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-29T01:19:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "03175205a0859b1e70323e74f53acb5dbe9ba05e",
          "body": "- Make light-neat-3 ('Orchard') the default theme (CLI + docs).\n- Bump orz-mdhtml + orz-mdhtml-browser to 0.2.0 (same version).\n- Doc coherency: refresh the theme-id list (adds light-neat-3 + dark-elegant-3),\n  drop the removed font-size control from the SKILL feature list.\n\nShips the editor redesign (slide-away popout, canonical icons, GitHub link,\n© footer, theme menu matching the PWA editor) and the orz-markdown ^1.3.0 bump.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release 0.2.0: default to Orchard; new editor chrome on npm",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-29T00:00:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9eefcf959a245dc08e7f5df14e77291e12b95d48",
          "body": "Align the theme dropdown with orz-markdown's PWA editor — same set, names, and\norder — which adds the two themes new in orz-markdown 1.3.0: light-neat-3\n('Orchard') and dark-elegant-3 ('Nocturne'). Their CSS resolves from the pinned\norz-markdown@<version> CDN base. Default theme unchanged.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Editor: match the PWA editor's theme menu (add Orchard + Nocturne)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-28T23:52:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce097e1da72a7161670e7ffc98a8ce3dbb9dd894",
          "body": "A thin footer below the CodeMirror editor, linking to markdown.orz.how. Shows only\nwhile the editor panel is open, so the document view is unaffected.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Editor: add a '© orz-markdown' footer to the editor panel",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-28T23:37:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a847db4ce1b868ff3fd10109a46d297b3496bc39",
          "body": "…trol\n\nReplace the full-width top bar + left-arrow 'done' + bottom-right reader-tools\ncluster with the shared popout: a left panel (dark header only over the editor)\nthat slides in via a bottom-left pencil and closes via a small tab on its right\nedge; the iframe preview animates to make room. Adopt \n[…]\nve everything\noff data-mode=\"edit\". Live incremental preview, scroll sync, dirty tracking,\nself-update and self-reproducing save are preserved.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Editor: slide-away popout matching the orz family; drop font-size con…",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-28T14:54:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0970a8eedb74b1abb86ac6cc9ce450c7a570df50",
          "body": "Pulls in the {{chart}} plugin, the preview-frame export, the theme refresh, and\nthe improved copy-as-Markdown runtime (now recovers block math, {{sp}} spans, and\n::: containers). Rebuilt bundle is orz-markdown@1.3.0.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Upgrade orz-markdown to ^1.3.0",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-28T12:57:47Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b474d8ebc09ee27a0eef19c6e9286f671b073a4",
          "body": "#3 Harden self-update: the update fetch URLs were built from the file's config\n(enginePkg/appPkg/versionManifest), so a tampered/forged file could redirect\n'Update' to attacker-controlled code. The source (CDN host + package names +\nmanifest) is now HARDCODED in the editor (app.js), never read from \n[…]\nat the browser\nsandbox bounds; the update is opt-in + fixed-source; and integrity can't be\nself-verified (verify out-of-band for authenticity).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Security: harden self-update source + document the trust model",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-26T00:23:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e1b3f0e67771156d2427e42bc0f0b85b029fd0e3",
          "body": "When a newer lockstep framework version is published, the editor offers a\none-click update — checked ONLY on entering edit view, so plain viewers never see\nthe banner. Apply re-fetches the engine bundle + app.js from the lockstep CDN at\nthe latest version, re-inlines them, bumps the embedded version\n[…]\ner bakes in the (edit-only) banner\n\nVerified (mocked CDN): banner hidden in view, shown in edit; Update swaps\nengine+app and bumps the version.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Editor: one-click framework self-update (edit-view only)",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-25T23:45:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fffd5b6a0040537f528112fa48c7bcace02c8f9d",
          "body": "Add a brand link at the left of the editor toolbar: the orz green-seal\nwordmark logo + \"mdhtml\" + a GitHub mark, linking to\nhttps://github.com/wangyu16/orz-mdhtml (the seal already reads \"orz\", so the\ntext is just the variant). Themed via the chrome CSS variables; the logo SVG\n(from wangyu16/logoes-and-icons) is inlined with its filter/mask IDs\nnamespaced orzlogo-* so they can't collide with SVGs in user content.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Editor header: orz logo + app name + GitHub link",
          "author_name": "Yu Wang",
          "author_login": "wangyu16",
          "committed_at": "2026-06-25T12:13:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "425964bed8b1cb9c8f5e49560804f260f4ec5a02",
          "body": "Editing text next to a SMILES structure made it disappear: morphdom diffed the\nclient-drawn <canvas> against the freshly-rendered blank one, reset its size\n(clearing the drawing) while the already-drawn flag persisted, so it never\nredrew. Generalize the mermaid-preservation rule to any data-md const\n[…]\nanged, skip the whole\nsubtree so the canvas / SVG / iframe is preserved across incremental updates.\n\n(Folded into the still-unpublished 0.1.3.)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Keep generated constructs intact when nearby text is edited",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T12:09:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "40c6c7871d9520a9f2bae2acebc27344f9ff93dd",
          "body": "smiles-drawer mutates the canvas width/height when it draws (e.g. devicePixel\nscaling), so redrawing after a theme switch fed the already-mutated size back\nin, making structures progressively narrower/taller. Record each canvas's\noriginal dimensions once and reset to them before every (re)draw; theme-switch\nredraw now just clears the done flag instead of cloning the mutated canvas.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.1.3: keep SMILES canvas size stable across re-renders",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T12:03:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fc73d7851cd12af379fa16113444497078a6528a",
          "body": "- The preview iframe now loads smiles-drawer and draws each canvas[data-smiles]\n  in __orzEnhance (tracked via a JS prop so morphdom keeps drawn canvases across\n  edits). SMILES theme follows the document light/dark scheme and re-draws on\n  theme switch. Previously the canvases stayed blank.\n- Version check now compares semver (isNewer), so an older or equal resolved\n  version no longer shows a bogus \"update available\" banner.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "0.1.2: render SMILES structures; fix version-check downgrade banner",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T11:55:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ddaf7d90e146e8b7ea20f0f1474ab45d25304103",
          "body": "- Bundle: inject a minimal `process` shim so transitive Node `process` refs\n  (e.g. markdown-include's cwd fallback) don't throw \"process is not defined\"\n  in the browser — fixes a blank preview when a document uses many constructs.\n- Tabs: the iframe re-runs OrzMarkdownRuntime.initTabs after conten\n[…]\norz-markdown ≥ 1.2.2 provides initTabs and the data-js marker).\n- Bump orz-mdhtml + orz-mdhtml-browser to 0.1.1; depend on orz-markdown ^1.2.2.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Release 0.1.1: fix process crash and tabs; depend on orz-markdown ^1.2.2",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T11:35:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "78f88b5545d2f86a91ecf31be932728ff34d7263",
          "body": "Project overview, commands, architecture (CLI, template, in-file app.js, browser\nbundle), conventions/gotchas, two-package release flow, and a standing reminder\nto re-check README + agent skill coherency after each major revision.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add CLAUDE.md for AI-agent guidance",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:59:15Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "baf96fa89b2bb9baa36f2ff7201b260a0d03b89d",
          "body": "- Use `npx orz-mdhtml` (the CLI is published) instead of clone-and-build.\n- --cdn is the default now (small files; renderer fetched from jsDelivr);\n  --inline documented as the embed-the-renderer alternative.\n- Mark the npm-publish roadmap item done; clarify view-time CDN fetches.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update README and agent skill for the npm release",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:54:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1214fceb0299cb02cf578ec4bf426bc1e8f71781",
          "body": "- CLI defaults to --cdn: generated .md.html reference the renderer from\n  jsDelivr (orz-mdhtml-browser@<version>), so files are small and fetch the\n  renderer from the web on first open (cached after). --inline still embeds it.\n- Renderer bundle is versioned independently (selfVersion) and staged into a\n  small browser/ package (orz-mdhtml-browser) for CDN delivery.\n- prepublishOnly builds before publish.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Publish to npm: orz-mdhtml CLI + orz-mdhtml-browser bundle",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:45:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "633364ae00a4098d7cc5754c05e69c5eaeb35d9f",
          "body": "Picks up the fix where selecting a whole table/blockquote/code block copies\nits full Markdown source.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Bump orz-markdown to ^1.2.1 (whole-block copy fix)",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:33:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "08ce46ce36aa1a58a103adb5f348c36b1681ef3d",
          "body": "The download reminder is gated on unsaved edits, so it never appears on open\nor on a no-op save — only when a reader has edited and then tries to save to a\nlocation they can't write (a served page).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Only show the published-page save notice after an actual edit",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:30:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3d55b7d110a77fd53ee19598c37ca9943c961556",
          "body": "- Preview body gets 84px bottom padding so the last content clears the floating\n  reader tools on narrow screens.\n- Rewrite README as a public-facing overview (features, install/generate, CLI\n  options, browser support, teaching use case, how it works).\n- Add orz-mdhtml-skills/SKILL.md so future AI agents can create and use .md.html\n  correctly (generation, authoring via orz-markdown, deployment, gotchas);\n  ship it via package \"files\".\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add bottom padding, public README, and an agent skill",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:26:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "317b7ef8fdfefc72dc0dea90b5b23c3bdc83ba75",
          "body": "Reading view gains a small floating tool cluster beside the edit button:\n- Font size A-/A+ (zoom on the preview body), for comfortable reading;\n  persisted in localStorage and embedded in saved/exported copies.\n- Export — download a local .md.html copy (works for any reader).\n\nSave guidance for publ\n[…]\nials as web pages;\nstudents download their own copy to add personal notes.\n\nBrowser-verified: font scaling, export, and the served-page notice.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add reader font-size control, export, and served-page save guidance",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:20:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "84cb0cc4f185fa062ee8e37922e9580a3bd65a0d",
          "body": "Sometimes you want to scroll one pane independently to check something. A\ntoolbar toggle (linked-arrows icon) enables/disables editor↔preview scroll\nsync; the choice persists in localStorage. Sync is on by default.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add a scroll-sync toggle to the editor toolbar",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T08:08:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4c0f3c9b630155fc884a120e205bf4073641fb73",
          "body": "Scroll sync (source-line mapped, not percentage):\n- The browser bundle stamps each block element with data-src-line from\n  markdown-it's token.map (bundle-only; copy-as-markdown ignores it).\n- app.js maps CodeMirror lines to preview offsets via these anchors,\n  interpolating between them; bidirectio\n[…]\n the picker.\n\nBrowser-verified both scroll directions (editor→preview aligns the matched\nblock to the top; preview→editor lands within a line).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add editor↔preview scroll sync and persist save handle in IndexedDB",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T07:46:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9e6db16d58361efab2711e13caed46856c6dbb6a",
          "body": "- Editing is now always the two-panel source + preview split. Removed the\n  editor-only / split / preview-only sub-mode toggle (and its toolbar segment).\n- Unsaved-changes safety: a beforeunload guard prompts before close/reload/\n  navigate when there are unsaved edits; the read-mode edit button shows a red\n  badge while dirty; leaving edit mode dirty shows a \"press Cmd/Ctrl+S\" toast.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Simplify edit to a single split view; warn on unsaved changes",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T07:23:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b6aea5ea333b187f61d3000b575651cb026dbb61",
          "body": "The .md.html is now a document first that is quietly editable, not an\neditor app:\n\n- Read mode (default): the rendered document fills an isolated <iframe>\n  (full theme isolation, true WYSIWYG) with one small floating edit button —\n  reads like a normal themed webpage.\n- Edit mode: minimal light/dar\n[…]\ncument, persists theme choice).\n\nBrowser-verified: read/edit, incremental updates, theme switching (light+dark),\nand in-frame copy-as-markdown.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Redesign UI: document-first, iframe preview, CodeMirror, live updates",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T07:16:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7453f25c370901284d76ead0d7a3a1b4b091882f",
          "body": "Switch from the local file:../orz-markdown link to the npm-published\norz-markdown@^1.2.0 now that copy-as-markdown is released. The browser bundle\nand generated .md.html are unchanged; verified the bundle builds against the\nregistry tarball and still ships the core copy runtime.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Depend on published orz-markdown ^1.2.0",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T06:45:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c944d4cc4cedc4e03b681faf426b4b1678493287",
          "body": "orz-markdown 1.2.0 ships copy-as-markdown in its browser runtime, so the\ngenerated .md.html now inlines getBrowserRuntimeScript() and relies on the\ncore DOM->Markdown walker instead of the CDN Turndown stopgap:\n\n- template.ts: inline the orz-markdown runtime <script>; remove the turndown +\n  turndow\n[…]\nelds Markdown for paragraphs (inline + math), lists,\nand tables; the editor textarea is not hijacked; mermaid/qr copy their source\nvia data-md.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Use orz-markdown core copy-as-markdown; drop Turndown stopgap",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T06:32:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "138da1738b9b7e4adcc10ff839e045bcc93fd98f",
          "body": "Inlined JS (app + bundle) could contain the literal </script> (e.g. in a\ncomment), prematurely closing the <script> tag so the in-file runtime never\nbooted. Escape </script> in all inline script payloads, matching the embedded\nsource guard.\n\nAdd build/serve.cjs, a dependency-free static server, for \n[…]\nerified end to end: preview render, Edit toggle, live re-render on\ninput, and copy-as-markdown (heading, list, table, code block, inline bold).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix inline-script </script> breakage; add local preview server",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T05:34:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "50a57c321127b4e9fc4c39863210974f74fe5056",
          "body": "Generates single-file .md.html documents from Markdown via orz-markdown:\npreview/edit modes, source-aware copy (Turndown stopgap), self-reproducing\nin-place save (File System Access API + download fallback), and a renderer\nversion check.\n\nValidated: orz-markdown bundles for the browser (esbuild) with fs/path and\nthe imsize fs-reader shimmed; window.orzmd.render() works client-side;\nserver-side pre-render + embedded source verified.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Scaffold orz-mdhtml: self-contained editable .md.html generator",
          "author_name": "Yu Wang",
          "author_login": null,
          "committed_at": "2026-06-24T04:29:17Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 5,
      "commits_last_year": 52,
      "latest_release_at": "2026-07-08T09:26:05Z",
      "latest_release_tag": "v0.7.1",
      "releases_from_tags": true,
      "days_since_last_push": 4,
      "active_weeks_last_year": 4,
      "days_since_latest_release": 13,
      "mean_days_between_releases": 0.5
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "orz-mdhtml",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "markdown",
            "orz-markdown",
            "self-contained",
            "html",
            "editor",
            "single-file"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/orz-mdhtml",
          "is_deprecated": false,
          "latest_version": "0.9.3",
          "repository_url": "https://github.com/wangyu16/orz-mdhtml",
          "versions_count": 19,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3296,
          "first_published_at": "2026-06-24T08:45:34.406000Z",
          "latest_published_at": "2026-07-17T00:13:21.713000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        },
        {
          "name": "orz-mdhtml-browser",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "orz-markdown",
            "orz-mdhtml",
            "markdown",
            "browser",
            "cdn"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/orz-mdhtml-browser",
          "is_deprecated": false,
          "latest_version": "0.9.3",
          "repository_url": "https://github.com/wangyu16/orz-mdhtml",
          "versions_count": 19,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3240,
          "first_published_at": "2026-06-24T08:45:03.817000Z",
          "latest_published_at": "2026-07-17T00:13:24.879000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 44912,
      "source_files_sampled": 5,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 5060
    },
    "dependencies": {
      "manifests": [
        "browser/package.json",
        "package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "orz-markdown",
          "manifest": "package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.6.3"
        }
      ],
      "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": "wangyu16",
          "commits": 33,
          "avatar_url": "https://avatars.githubusercontent.com/u/8711631?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": false,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "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": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "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": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "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": null,
            "reason": "no dependencies found",
            "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": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a4e89871a0d211c52cebd8a93c960bd5d33e276d",
        "ran_at": "2026-07-21T16:27:46Z",
        "aggregate_score": 2.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/wangyu16/orz-mdhtml",
    "host": "github.com",
    "name": "orz-mdhtml",
    "owner": "wangyu16"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 40,
      "inputs": {
        "security": 27,
        "vitality": 68,
        "community": 34,
        "governance": 34,
        "engineering": 31
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "commits_last_year": 52,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 4
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "4/52 weeks with commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "52 commits in the last year",
                "points": 15.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 52
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 5,
              "latest_release_tag": "v0.7.1",
              "releases_from_tags": true,
              "days_since_latest_release": 13,
              "mean_days_between_releases": 0.5
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "5 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 13 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 13
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.5 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.5
                    }
                  }
                ],
                "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": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 34,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "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": "moderate",
            "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": 64,
            "inputs": {
              "packages": [
                "orz-mdhtml",
                "orz-mdhtml-browser"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 6536
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "6,536 downloads/month across npm",
                "points": 50.9,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 6536,
                      "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 34,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "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": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 40,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "wangyu16",
              "public_repos": 26,
              "account_age_days": 4333
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of wangyu16",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "wangyu16"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "26 public repos, account ~11 yr old",
                "points": 22.4,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 26
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "orz-mdhtml",
                "orz-mdhtml-browser"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "19 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 31,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "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": 1,
            "inputs": {
              "has_ci": false,
              "has_tests": false,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [
                "agent-skills",
                "ai-agents",
                "claude",
                "editable",
                "html",
                "markdown",
                "markdown-it",
                "markdown-to-html",
                "self-contained",
                "single-file",
                "offline-document"
              ],
              "has_wiki": true,
              "homepage": "https://markdown.orz.how",
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://markdown.orz.how",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "11 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "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": "critical",
        "name": "Security",
        "value": 27,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 27,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "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": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 57,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.827,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 5060
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "43 of 52 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 43,
                      "sampled": 52
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "at_risk",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 34,
            "inputs": {
              "has_nix": false,
              "has_tests": false,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": false,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.846,
              "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "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": "44 of the last 52 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 44,
                      "sampled": 52
                    }
                  }
                ],
                "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": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "good",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "primary_language": "JavaScript",
              "largest_source_bytes": 44912,
              "source_files_sampled": 5,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "JavaScript with type-check config (tsconfig.json)",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "typecheck_config_language",
                    "params": {
                      "files": "tsconfig.json",
                      "language": "JavaScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/5 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 5,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:orz-mdhtml@0.9.3; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-21T16:27:51.007563Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wangyu16/orz-mdhtml.svg",
  "full_name": "wangyu16/orz-mdhtml",
  "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.23.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte Statistikennpm.