Registro público
Informe de salud del softwareesquema 0.23.0 · métricas 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 estrellas⑂ 0 forksdesde jun 2026Ver en GitHub ↗

wangyu16/orz-mdhtml tiene un índice de salud de 40 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (68/100) y la más baja, Security (27/100). Se actualizó por última vez hace 4 días. Una sola persona concentra la mayor parte del trabajo reciente.

40
global / 100
En riesgo

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

40
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Yu WangCuenta personal
0 seguidores26 repositorios públicosdesde sept 2014University of Louisiana at Lafayette

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npmorz-mdhtml0.9.3329619hace 4 díasmarkdownorz-markdownself-containedhtmleditorsingle-file
npmorz-mdhtml-browser0.9.3324019hace 4 díasorz-markdownorz-mdhtmlmarkdownbrowsercdn

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

68Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 4 días
2.8/36Cadencia de commits — 4/52 semanas con commits
15.5/18Volumen de commits — 52 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year52
human_commit_share1
days_since_last_push4
active_weeks_last_year4
Cómo se puntúa
16.2/27Publica versiones — 5 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 13 días
27/27Cadencia de publicación — una versión cada ~0,5 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count5
latest_release_tagv0.7.1
releases_from_tags
days_since_latest_release13
mean_days_between_releases0,5
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

34En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
50.9/80Descargas mensuales — 6536 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagesorz-mdhtml, orz-mdhtml-browser
dependents
ecosystemsnpm
total_downloads
monthly_downloads6536
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

34En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de wangyu16
22.4/25Trayectoria — 26 repos públicos, cuenta de ~11 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginwangyu16
public_repos26
account_age_days4333
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 2 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 4 días
20/20Historial de versiones — 19 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesorz-mdhtml, orz-mdhtml-browser
ecosystemsnpm
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

31En riesgo · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
0/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_testsno
has_editorconfigno
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://markdown.orz.how
10/10Descripción del repositorio
10/10Topics — 11 topics
10/10Wiki
Datos de entrada utilizados
topicsagent-skills, ai-agents, claude, editable, html, markdown, markdown-it, markdown-to-html, self-contained, single-file, offline-document
has_wiki
homepagehttps://markdown.orz.how
has_readme
has_docs_dirno
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

27Crítico · 16% del índice global
Cómo se puntúa
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 — sin datos
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 — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,7
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

57Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 43 de 52 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,827
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes5060
Cómo se puntúa
0/18Arranque con un solo comando
0/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 44 de los últimos 52 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_testsno
lockfilespackage-lock.json
has_dockerfileno
typed_languageno
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configstsconfig.json
agent_commit_share0,846
toolchain_manifests
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
27/45Código verificable por tipos — JavaScript con configuración de verificación de tipos (tsconfig.json)
55/55Tamaños de archivo manejables — 0/5 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageJavaScript
largest_source_bytes44.912
source_files_sampled5
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

0estrellas de GitHub
1contribuidores
52commits en los últimos 12 meses
4días desde el último push
5versiones publicadas
1factor bus
0issues abiertas
npmecosistemas de paquetes

Advertencias de recopilación de datos

  • 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

Más detalle

OpenSSF Scorecard 2.7 / 10
2.7agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).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
n/dCI-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
n/dDangerous-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
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 1
RegistroPaqueteRestricción de versiónManifiesto
npmorz-markdown^1.6.3package.json
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.23.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasnpm.