Registro público
Informe de salud del softwareesquema 0.26.0 · métricas 1.13.0 · 2026-07-22 19:54 UTC

refrakt-md / refrakt

Markdoc-powered content platform with semantic runes — structured, themeable, schema-rich sites from plain Markdown

TypeScriptSin licencia detectada★ 1 estrella⑂ 0 forksdesde feb 2026Ver en GitHub ↗

refrakt-md/refrakt tiene un índice de salud de 54 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (87/100) y la más baja, Community & Adoption (26/100). Se actualizó por última vez hace 2 días. Una sola persona concentra la mayor parte del trabajo reciente.

54
global / 100
Moderado

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

54
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

refrakt.mdOrganización
0 seguidores1 repositorio públicodesde feb 2026

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
npm@refrakt-md/ai0.28.0165561hace 5 días
npm@refrakt-md/cli0.28.0165561hace 5 días
npm@refrakt-md/mcp0.28.0126734hace 5 días
npm@refrakt-md/html0.28.0169050hace 5 días
npm@refrakt-md/next0.28.0125643hace 5 días
npm@refrakt-md/nuxt0.28.0126343hace 5 días
npm@refrakt-md/astro0.28.0128343hace 5 días
npm@refrakt-md/react0.28.0127643hace 5 días

Métricas por categoría

Vitalidad

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

87Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 2 días
15.2/36Cadencia de commits — 22/52 semanas con commits
18/18Volumen de commits — 2810 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year2810
human_commit_share0,96
days_since_last_push2
active_weeks_last_year22
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~0 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count100
latest_release_tag@refrakt-md/mcp@0.28.0
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases0
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?

26Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 1 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars1
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
0/22.5Licencia — no se detectó ningún archivo de licencia
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_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
54.1/80Descargas mensuales — 11.345 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@refrakt-md/ai, @refrakt-md/cli, @refrakt-md/mcp, @refrakt-md/html, @refrakt-md/next, @refrakt-md/nuxt, @refrakt-md/astro, @refrakt-md/react
dependents
ecosystemsnpm
total_downloads
monthly_downloads11.345
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?

54Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
10.9/22.5Distribución de commits — el principal contribuyente firma el 52% de los commits
4.1/13.5Amplitud de contribuyentes — 3 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled3
top_contributor_share0,515
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.1/38.3Aceptación de PR — 561/563 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/6 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs561
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs2
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
0/25Alcance del propietario — 0 seguidores de refrakt-md
3.1/25Trayectoria — 1 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_loginrefrakt-md
public_repos1
account_age_days160
Cómo se puntúa
25/25Publicado y resoluble — 8 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 61 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@refrakt-md/ai, @refrakt-md/cli, @refrakt-md/mcp, @refrakt-md/html, @refrakt-md/next, @refrakt-md/nuxt, @refrakt-md/astro, @refrakt-md/react
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

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

55Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 8 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

65Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://refrakt.md
10/10Descripción del repositorio
10/10Topics — 3 topics
0/10Wiki
Datos de entrada utilizados
topicsmarkdoc, planning, static-site
has_wikino
homepagehttps://refrakt.md
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?

37En riesgo · 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 — 0 out of 8 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/6 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Licencia — license file not detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
6.8/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 141 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,7
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. 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.

72Bueno · 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 — 96 de 96 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes25.946
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — packages/ai/tsconfig.json, packages/astro/tsconfig.json, packages/behaviors/tsconfig.json, packages/cli/tsconfig.json, packages/content/tsconfig.json, packages/create-refrakt/template-astro/tsconfig.json, packages/create-refrakt/template-html/tsconfig.json, packages/create-refrakt/template-next/tsconfig.json, packages/create-refrakt/template-nuxt/tsconfig.json, packages/create-refrakt/template/tsconfig.json, packages/create-refrakt/tsconfig.json, packages/editor/app/tsconfig.json, packages/editor/tsconfig.json, packages/eleventy/tsconfig.json, packages/gallery-harness/tsconfig.json, packages/highlight/tsconfig.json, packages/html/tsconfig.json, packages/language-server/tsconfig.json, packages/lumina/tsconfig.json, packages/mcp/tsconfig.json, packages/next/tsconfig.json, packages/nuxt/tsconfig.json, packages/react/tsconfig.json, packages/runes/tsconfig.json, packages/skeleton/tsconfig.json, packages/sveltekit/tsconfig.json, packages/transform/tsconfig.json, packages/types/tsconfig.json, packages/vue/tsconfig.json, plan-site/tsconfig.json, plugins/business/tsconfig.json, plugins/design/tsconfig.json, plugins/docs/test/fixtures/tsconfig.json, plugins/docs/tsconfig.json, plugins/learning/tsconfig.json, plugins/marketing/tsconfig.json, plugins/media/tsconfig.json, plugins/places/tsconfig.json, plugins/plan/tsconfig.json, plugins/storytelling/tsconfig.json, site/tsconfig.json, tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 70 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configspackages/ai/tsconfig.json, packages/astro/tsconfig.json, packages/behaviors/tsconfig.json, packages/cli/tsconfig.json, packages/content/tsconfig.json, packages/create-refrakt/template-astro/tsconfig.json, packages/create-refrakt/template-html/tsconfig.json, packages/create-refrakt/template-next/tsconfig.json, packages/create-refrakt/template-nuxt/tsconfig.json, packages/create-refrakt/template/tsconfig.json, packages/create-refrakt/tsconfig.json, packages/editor/app/tsconfig.json, packages/editor/tsconfig.json, packages/eleventy/tsconfig.json, packages/gallery-harness/tsconfig.json, packages/highlight/tsconfig.json, packages/html/tsconfig.json, packages/language-server/tsconfig.json, packages/lumina/tsconfig.json, packages/mcp/tsconfig.json, packages/next/tsconfig.json, packages/nuxt/tsconfig.json, packages/react/tsconfig.json, packages/runes/tsconfig.json, packages/skeleton/tsconfig.json, packages/sveltekit/tsconfig.json, packages/transform/tsconfig.json, packages/types/tsconfig.json, packages/vue/tsconfig.json, plan-site/tsconfig.json, plugins/business/tsconfig.json, plugins/design/tsconfig.json, plugins/docs/test/fixtures/tsconfig.json, plugins/docs/tsconfig.json, plugins/learning/tsconfig.json, plugins/marketing/tsconfig.json, plugins/media/tsconfig.json, plugins/places/tsconfig.json, plugins/plan/tsconfig.json, plugins/storytelling/tsconfig.json, site/tsconfig.json, tsconfig.json
agent_commit_share0,7
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
54.8/55Tamaños de archivo manejables — 3/868 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes89.209
source_files_sampled868
oversized_source_files3
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
20/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signal
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository
  • deps.dev does not index npm:@refrakt-md/ai@0.28.0; advisories assessed against the repository dependency graph instead

Más detalle

OpenSSF Scorecard 3.7 / 10
3.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-22 19:54 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 8 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/6 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
9Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities141 existing vulnerabilities detected
Dependencias directas 100
RegistroPaqueteRestricción de versiónManifiesto
npm@markdoc/markdoc0.4.0plan-site/package.json
npm@refrakt-md/content0.28.0plan-site/package.json
npm@refrakt-md/highlight0.28.0plan-site/package.json
npm@refrakt-md/lumina0.28.0plan-site/package.json
npm@refrakt-md/plan0.28.0plan-site/package.json
npm@refrakt-md/runes0.28.0plan-site/package.json
npm@refrakt-md/svelte0.28.0plan-site/package.json
npm@refrakt-md/sveltekit0.28.0plan-site/package.json
npm@refrakt-md/types0.28.0plan-site/package.json
npm@markdoc/markdoc0.4.0site/package.json
npm@refrakt-md/content0.28.0site/package.json
npm@refrakt-md/runes0.28.0site/package.json
npm@refrakt-md/svelte0.28.0site/package.json
npm@refrakt-md/sveltekit0.28.0site/package.json
npm@refrakt-md/lumina0.28.0site/package.json
npm@refrakt-md/highlight0.28.0site/package.json
npm@refrakt-md/types0.28.0site/package.json
npm@refrakt-md/marketing0.28.0site/package.json
npm@refrakt-md/docs0.28.0site/package.json
npm@refrakt-md/storytelling0.28.0site/package.json
npm@refrakt-md/places0.28.0site/package.json
npm@refrakt-md/business0.28.0site/package.json
npm@refrakt-md/design0.28.0site/package.json
npm@refrakt-md/learning0.28.0site/package.json
npm@refrakt-md/media0.28.0site/package.json
npm@refrakt-md/plan0.28.0site/package.json
npm@refrakt-md/behaviors0.28.0packages/astro/package.json
npm@refrakt-md/content0.28.0packages/astro/package.json
npm@refrakt-md/transform0.28.0packages/astro/package.json
npm@refrakt-md/types0.28.0packages/astro/package.json
npm@markdoc/markdoc0.4.0packages/cli/package.json
npm@refrakt-md/ai0.28.0packages/cli/package.json
npm@refrakt-md/editor0.28.0packages/cli/package.json
npm@refrakt-md/html0.28.0packages/cli/package.json
npm@refrakt-md/runes0.28.0packages/cli/package.json
npm@refrakt-md/transform0.28.0packages/cli/package.json
npmesbuild^0.27.5packages/cli/package.json
npmpostcss^8.4.0packages/cli/package.json
npm@refrakt-md/highlight0.28.0packages/content/package.json
npm@refrakt-md/runes0.28.0packages/content/package.json
npm@refrakt-md/transform0.28.0packages/content/package.json
npm@refrakt-md/types0.28.0packages/content/package.json
npm@markdoc/markdoc0.4.0packages/content/package.json
npmyaml^2.4.0packages/content/package.json
npm@clack/prompts^1.2.0packages/create-refrakt/package.json
npm@refrakt-md/plan0.28.0packages/create-refrakt/package.json
npm@refrakt-md/runes0.28.0packages/create-refrakt/package.json
npm@refrakt-md/transform0.28.0packages/create-refrakt/package.json
npm@markdoc/markdoc0.4.0packages/editor/package.json
npm@refrakt-md/content0.28.0packages/editor/package.json
npm@refrakt-md/highlight0.28.0packages/editor/package.json
npm@refrakt-md/runes0.28.0packages/editor/package.json
npm@refrakt-md/transform0.28.0packages/editor/package.json
npm@refrakt-md/types0.28.0packages/editor/package.json
npm@refrakt-md/behaviors0.28.0packages/eleventy/package.json
npm@refrakt-md/content0.28.0packages/eleventy/package.json
npm@refrakt-md/transform0.28.0packages/eleventy/package.json
npm@refrakt-md/types0.28.0packages/eleventy/package.json
npm@refrakt-md/types0.28.0packages/highlight/package.json
npm@refrakt-md/transform0.28.0packages/highlight/package.json
npmshiki^3.0.0packages/highlight/package.json
npm@refrakt-md/behaviors0.28.0packages/html/package.json
npm@refrakt-md/content0.28.0packages/html/package.json
npm@refrakt-md/transform0.28.0packages/html/package.json
npm@refrakt-md/types0.28.0packages/html/package.json
npm@refrakt-md/runes0.28.0packages/language-server/package.json
npm@refrakt-md/transform0.28.0packages/language-server/package.json
npm@markdoc/markdoc0.4.0packages/language-server/package.json
npmreflect-metadata^0.2.0packages/language-server/package.json
npmvscode-languageserver^9.0.1packages/language-server/package.json
npmvscode-languageserver-textdocument^1.0.12packages/language-server/package.json
npm@refrakt-md/runes0.28.0packages/lumina/package.json
npm@refrakt-md/skeleton0.28.0packages/lumina/package.json
npm@refrakt-md/transform0.28.0packages/lumina/package.json
npm@refrakt-md/types0.28.0packages/lumina/package.json
npm@modelcontextprotocol/sdk^1.29.0packages/mcp/package.json
npm@refrakt-md/cli0.28.0packages/mcp/package.json
npm@refrakt-md/runes0.28.0packages/mcp/package.json
npm@refrakt-md/transform0.28.0packages/mcp/package.json
npm@refrakt-md/types0.28.0packages/mcp/package.json
npm@refrakt-md/behaviors0.28.0packages/next/package.json
npm@refrakt-md/content0.28.0packages/next/package.json
npm@refrakt-md/transform0.28.0packages/next/package.json
npm@refrakt-md/types0.28.0packages/next/package.json
npm@refrakt-md/behaviors0.28.0packages/nuxt/package.json
npm@refrakt-md/content0.28.0packages/nuxt/package.json
npm@refrakt-md/transform0.28.0packages/nuxt/package.json
npm@refrakt-md/types0.28.0packages/nuxt/package.json
npm@refrakt-md/skeleton0.28.0packages/proof-skin/package.json
npm@refrakt-md/transform0.28.0packages/react/package.json
npm@refrakt-md/types0.28.0packages/react/package.json
npm@refrakt-md/types0.28.0packages/runes/package.json
npm@refrakt-md/transform0.28.0packages/runes/package.json
npm@markdoc/markdoc0.4.0packages/runes/package.json
npmreflect-metadata^0.2.0packages/runes/package.json
npmfast-xml-parser4.5.1packages/runes/package.json
npmpath-browserify1.0.1packages/runes/package.json
npmiso8601-duration2.1.2packages/runes/package.json
npmyaml2.8.2packages/runes/package.json
npm@refrakt-md/types0.28.0packages/skeleton/package.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": [
        "markdoc",
        "planning",
        "static-site"
      ],
      "is_fork": false,
      "size_kb": 14786,
      "has_wiki": false,
      "homepage": "https://refrakt.md",
      "languages": {
        "CSS": 524015,
        "Vue": 3599,
        "HTML": 34134,
        "Astro": 7800,
        "Shell": 1944,
        "Svelte": 407636,
        "Nunjucks": 2157,
        "JavaScript": 103849,
        "TypeScript": 4808744
      },
      "pushed_at": "2026-07-19T21:58:26Z",
      "created_at": "2026-02-12T08:37:45Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-17T19:17:56Z",
      "description": "Markdoc-powered content platform with semantic runes — structured, themeable, schema-rich sites from plain Markdown",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": null,
      "name": "refrakt.md",
      "type": "Organization",
      "login": "refrakt-md",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/261148987?v=4",
      "created_at": "2026-02-12T08:36:34Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 160
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "@refrakt-md/mcp@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:14:11Z"
        },
        {
          "tag": "@refrakt-md/storytelling@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:14:08Z"
        },
        {
          "tag": "@refrakt-md/marketing@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:14:05Z"
        },
        {
          "tag": "@refrakt-md/media@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:14:02Z"
        },
        {
          "tag": "@refrakt-md/places@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:59Z"
        },
        {
          "tag": "@refrakt-md/skeleton@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:56Z"
        },
        {
          "tag": "@refrakt-md/plan@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:53Z"
        },
        {
          "tag": "@refrakt-md/sveltekit@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:50Z"
        },
        {
          "tag": "@refrakt-md/design@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:47Z"
        },
        {
          "tag": "@refrakt-md/docs@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:44Z"
        },
        {
          "tag": "@refrakt-md/business@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:41Z"
        },
        {
          "tag": "@refrakt-md/react@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:38Z"
        },
        {
          "tag": "@refrakt-md/lumina@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:35Z"
        },
        {
          "tag": "@refrakt-md/learning@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:32Z"
        },
        {
          "tag": "@refrakt-md/transform@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:29Z"
        },
        {
          "tag": "@refrakt-md/vue@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:26Z"
        },
        {
          "tag": "@refrakt-md/language-server@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:23Z"
        },
        {
          "tag": "@refrakt-md/types@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:20Z"
        },
        {
          "tag": "@refrakt-md/svelte@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:17Z"
        },
        {
          "tag": "@refrakt-md/nuxt@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:14Z"
        },
        {
          "tag": "@refrakt-md/next@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:11Z"
        },
        {
          "tag": "@refrakt-md/eleventy@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:08Z"
        },
        {
          "tag": "@refrakt-md/content@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:05Z"
        },
        {
          "tag": "@refrakt-md/runes@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:13:02Z"
        },
        {
          "tag": "@refrakt-md/behaviors@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:59Z"
        },
        {
          "tag": "@refrakt-md/cli@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:56Z"
        },
        {
          "tag": "@refrakt-md/highlight@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:53Z"
        },
        {
          "tag": "@refrakt-md/html@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:50Z"
        },
        {
          "tag": "create-refrakt@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:47Z"
        },
        {
          "tag": "@refrakt-md/ai@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:44Z"
        },
        {
          "tag": "@refrakt-md/editor@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:41Z"
        },
        {
          "tag": "@refrakt-md/astro@0.28.0",
          "kind": "other",
          "published_at": "2026-07-17T15:12:38Z"
        },
        {
          "tag": "@refrakt-md/docs@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:21Z"
        },
        {
          "tag": "@refrakt-md/nuxt@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:18Z"
        },
        {
          "tag": "@refrakt-md/plan@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:15Z"
        },
        {
          "tag": "@refrakt-md/media@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:12Z"
        },
        {
          "tag": "@refrakt-md/types@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:09Z"
        },
        {
          "tag": "@refrakt-md/marketing@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:06Z"
        },
        {
          "tag": "@refrakt-md/skeleton@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:03Z"
        },
        {
          "tag": "@refrakt-md/react@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:19:00Z"
        },
        {
          "tag": "@refrakt-md/design@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:57Z"
        },
        {
          "tag": "@refrakt-md/transform@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:54Z"
        },
        {
          "tag": "@refrakt-md/learning@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:51Z"
        },
        {
          "tag": "@refrakt-md/places@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:48Z"
        },
        {
          "tag": "@refrakt-md/vue@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:45Z"
        },
        {
          "tag": "@refrakt-md/storytelling@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:42Z"
        },
        {
          "tag": "@refrakt-md/sveltekit@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:39Z"
        },
        {
          "tag": "@refrakt-md/business@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:36Z"
        },
        {
          "tag": "@refrakt-md/svelte@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:30Z"
        },
        {
          "tag": "@refrakt-md/runes@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:21Z"
        },
        {
          "tag": "@refrakt-md/mcp@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:33Z"
        },
        {
          "tag": "@refrakt-md/astro@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:27Z"
        },
        {
          "tag": "@refrakt-md/html@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:24Z"
        },
        {
          "tag": "@refrakt-md/editor@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:18Z"
        },
        {
          "tag": "create-refrakt@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:15Z"
        },
        {
          "tag": "@refrakt-md/behaviors@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:12Z"
        },
        {
          "tag": "@refrakt-md/language-server@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:09Z"
        },
        {
          "tag": "@refrakt-md/next@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:06Z"
        },
        {
          "tag": "@refrakt-md/cli@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:03Z"
        },
        {
          "tag": "@refrakt-md/lumina@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:18:00Z"
        },
        {
          "tag": "@refrakt-md/eleventy@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:17:57Z"
        },
        {
          "tag": "@refrakt-md/content@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:17:54Z"
        },
        {
          "tag": "@refrakt-md/highlight@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:17:51Z"
        },
        {
          "tag": "@refrakt-md/ai@0.26.0",
          "kind": "other",
          "published_at": "2026-06-30T07:17:48Z"
        },
        {
          "tag": "@refrakt-md/skeleton@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:13:19Z"
        },
        {
          "tag": "@refrakt-md/storytelling@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:13:16Z"
        },
        {
          "tag": "@refrakt-md/plan@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:13:13Z"
        },
        {
          "tag": "@refrakt-md/mcp@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:13:10Z"
        },
        {
          "tag": "@refrakt-md/transform@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:13:07Z"
        },
        {
          "tag": "@refrakt-md/types@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:13:04Z"
        },
        {
          "tag": "@refrakt-md/media@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:13:01Z"
        },
        {
          "tag": "@refrakt-md/business@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:58Z"
        },
        {
          "tag": "@refrakt-md/marketing@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:55Z"
        },
        {
          "tag": "@refrakt-md/learning@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:52Z"
        },
        {
          "tag": "@refrakt-md/design@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:49Z"
        },
        {
          "tag": "@refrakt-md/highlight@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:46Z"
        },
        {
          "tag": "@refrakt-md/docs@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:43Z"
        },
        {
          "tag": "@refrakt-md/react@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:40Z"
        },
        {
          "tag": "@refrakt-md/vue@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:37Z"
        },
        {
          "tag": "@refrakt-md/runes@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:34Z"
        },
        {
          "tag": "@refrakt-md/places@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:31Z"
        },
        {
          "tag": "create-refrakt@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:28Z"
        },
        {
          "tag": "@refrakt-md/sveltekit@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:25Z"
        },
        {
          "tag": "@refrakt-md/lumina@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:22Z"
        },
        {
          "tag": "@refrakt-md/language-server@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:19Z"
        },
        {
          "tag": "@refrakt-md/svelte@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:16Z"
        },
        {
          "tag": "@refrakt-md/eleventy@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:13Z"
        },
        {
          "tag": "@refrakt-md/next@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:10Z"
        },
        {
          "tag": "@refrakt-md/cli@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:07Z"
        },
        {
          "tag": "@refrakt-md/nuxt@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:04Z"
        },
        {
          "tag": "@refrakt-md/html@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:12:01Z"
        },
        {
          "tag": "@refrakt-md/ai@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:11:58Z"
        },
        {
          "tag": "@refrakt-md/astro@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:11:55Z"
        },
        {
          "tag": "@refrakt-md/editor@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:11:52Z"
        },
        {
          "tag": "@refrakt-md/content@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:11:49Z"
        },
        {
          "tag": "@refrakt-md/behaviors@0.25.1",
          "kind": "other",
          "published_at": "2026-06-24T20:11:46Z"
        },
        {
          "tag": "@refrakt-md/media@0.25.0",
          "kind": "other",
          "published_at": "2026-06-24T19:24:13Z"
        },
        {
          "tag": "@refrakt-md/svelte@0.25.0",
          "kind": "other",
          "published_at": "2026-06-24T19:24:10Z"
        },
        {
          "tag": "@refrakt-md/next@0.25.0",
          "kind": "other",
          "published_at": "2026-06-24T19:24:07Z"
        },
        {
          "tag": "@refrakt-md/plan@0.25.0",
          "kind": "other",
          "published_at": "2026-06-24T19:24:04Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "9c7bd86104cff9e5d909c15ffa1d88eb9e00d703",
          "body": "…-spec-5zzt9q",
          "is_bot": false,
          "headline": "Merge pull request #567 from refrakt-md/claude/multi-language-support…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-07-17T19:17:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d92ad0c249bd74f39d34ac21db035e6d2a3e28dd",
          "body": "- Flip SPEC-035 (multi-language support) draft -> accepted.\n- Add milestone v0.29.0 \"Multi-language support (i18n foundation)\".\n- Break the spec into 11 work items (WORK-502..512), assigned to v0.29.0\n  and sourced to SPEC-035, following the spec's priority table:\n    502 resolution foundation (P0) \n[…]\no `plan next` surfaces WORK-502\n  (and the independent WORK-510) first.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Avk4pxudSU1DkZcHWxvy3E",
          "is_bot": false,
          "headline": "plan: accept SPEC-035, add v0.29.0 milestone + i18n work breakdown",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-17T15:40:38Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7e69e1cb845315a01783d1e2a6e4bcb7ec90f2f6",
          "body": "…(v2.2)\n\nMulti-locale sites (route-based trees, switcher, auto-detect) stay a\ndemand-driven Non-Goal, but record the constraints that keep it addable\nlater without breaking changes:\n\n- Locale is render-scoped LocaleContext, never module-global state.\n- Keys stay locale-independent ({scope}.{block}.{\n[…]\n- canonicalSlug (Zone 7) keeps anchors/URLs stable across locale trees.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Avk4pxudSU1DkZcHWxvy3E",
          "is_bot": false,
          "headline": "plan: add multi-locale forward-compatibility constraints to SPEC-035 …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-17T15:35:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "81bc77e8ad828d3b4bc27b925568d5181e261e76",
          "body": "Settle all six open questions plus two scope decisions and fold the chosen\nanswers into the design:\n\n- D1 Key derivation: auto-derive {plugin}.{block}.{ref} keys + optional\n  i18nKey override; discoverability via a new `refrakt i18n extract` tool.\n- D2 Plurals: Intl.PluralRules + PluralMap values + \n[…]\nable, and replaces\nthe Open Questions section with a Decisions section.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Avk4pxudSU1DkZcHWxvy3E",
          "is_bot": false,
          "headline": "plan: resolve SPEC-035 open questions (v2.0 -> v2.1)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-17T15:35:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "197451ab35de0e872864984f3fc5794bcab50d0d",
          "body": "Revise the multi-language-support spec in place (v1.0 -> v2.0) to match the\narchitecture as it stands today:\n\n- RunePackage -> Plugin (mergePackages -> mergePlugins, loadRunePackage ->\n  loadPlugin); relocate the proposed translations bundle onto Plugin.\n- Add the SPEC-080 metaFields/blocks label pa\n[…]\napter lang attribute) and an Open Question on config\n  threading scope.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Avk4pxudSU1DkZcHWxvy3E",
          "is_bot": false,
          "headline": "plan: reconcile SPEC-035 (multi-language support) with current codebase",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-17T15:35:26Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "56ce015a2869743cbdd1c2df168b14bd5dd67ea4",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #566 from refrakt-md/changeset-release/main",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-07-17T15:08:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b7d5e2c6002553b2d319af4a1574cabdf917747",
          "body": null,
          "is_bot": true,
          "headline": "chore: version packages",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-14T12:59:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf13ce106bae786efabccaa25ba97eadee094c00",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #565 from refrakt-md/claude/milestone-v0-28-0-llvtfa",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-07-14T12:57:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c13ef43cf6c94e25593efa6c48aa877560e36fed",
          "body": "The `pr` (work/bug), `released-in` (spec), and `supersedes` (work) fields\nadded in this milestone change the generated structure contract. Regenerate\nboth committed copies (root + Lumina) so the contracts drift guard passes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Fd6UPkMKomK5isQCcmctQX",
          "is_bot": false,
          "headline": "plan: regenerate structure contracts for new plan attributes",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T21:49:56Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c731b6931677c6c913c5256de0e9dace16140ac9",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Fd6UPkMKomK5isQCcmctQX",
          "is_bot": false,
          "headline": "plan: mark SPEC-114 work item done (WORK-443); accept SPEC-114",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T21:46:10Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0063b668880408ac0a652bd9c301e11f1c596568",
          "body": "…C-114)\n\nReplace the undirected `## Dependencies` model with two directed sections so\nthe validator's cycle detection stops firing on prose cross-references.\n\nWORK-443:\n- scanner-core: `KNOWN_SECTIONS` (work + bug) gains canonical `Blocked by`\n  and `Blocks` sections with aliases; `Dependencies` bec\n[…]\nscanner tests for the\ndirected semantics. Full plan suite: 477 passing.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Fd6UPkMKomK5isQCcmctQX",
          "is_bot": false,
          "headline": "plan: directional dependency model + cycle-check fix + migration (SPE…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T21:45:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "74979c1475b88a53c6a0e0ac995855a25413bc5d",
          "body": "Check off criteria, set the pr attribute, record resolutions for the\nbatch-2 items; mark SPEC-049 accepted.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Fd6UPkMKomK5isQCcmctQX",
          "is_bot": false,
          "headline": "plan: mark SPEC-049 work items done (WORK-495..499)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T21:28:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "47ae0d75d40da88290a9a7c6a0fb5c1235831f6d",
          "body": "…EC-049)\n\nClose the loop between a spec, the work that implements it, and the PRs\nthat ship it.\n\nWORK-495 — lifecycle statuses:\n- `spec` gains `implemented` / `shipped` + a `released-in` attribute;\n  `decision` gains a terminal `rejected`. All wired into `enums.ts`\n  terminal/achieving sets, config \n[…]\n+ migrate-pr-attrs.test.ts (git-fixture).\nFull plan suite: 466 passing.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Fd6UPkMKomK5isQCcmctQX",
          "is_bot": false,
          "headline": "plan: spec lifecycle statuses + PR linkage + traceability rollups (SP…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T21:27:19Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "80473b128edea7855f3931661f8ce234e286ccd8",
          "body": "Check off acceptance criteria and record resolutions for the batch-1\nitems; mark SPEC-117 accepted. WORK-500 stays pending by decision.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Fd6UPkMKomK5isQCcmctQX",
          "is_bot": false,
          "headline": "plan: mark SPEC-117 work items done (WORK-491/492/493/494/501)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T21:03:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "81896e6b5c4796fe3d06df4343fe6341f3e87051",
          "body": "…117)\n\nMake `enums.ts` the single source of truth for the plan status/severity/\npriority/complexity vocabularies, and give work items honest terminal\nstates so retiring stops masquerading as completion.\n\nWORK-492 — vocabulary consolidation:\n- `enums.ts` gains derived `TERMINAL_STATUSES` / `ACHIEVING\n[…]\ning unbuilt-rune items) is\ndeferred by decision — those stay `pending`.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Fd6UPkMKomK5isQCcmctQX",
          "is_bot": false,
          "headline": "plan: consolidate status vocabulary + add terminal work states (SPEC-…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T21:00:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3b310b9b84a52d2c9be91776d86c991eb716a2f8",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #562 from refrakt-md/changeset-release/main",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-07-09T20:27:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "283ce5a3d512ed99165008e1f5b2b24383d0bb0d",
          "body": "…b-jcq1tx",
          "is_bot": false,
          "headline": "Merge pull request #563 from refrakt-md/claude/plan-runes-status-voca…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-07-09T20:27:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22fb2982435358a2c0ad4b81beb5d904fa9c47f6",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #564 from refrakt-md/claude/spec-103-data-rune",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-07-09T14:18:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "816b0d17916a22df26d50d5c2c1abdff1b6a4072",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "chore: changeset for the data rune (SPEC-103, minor)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T14:08:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e35e24b7a87bba6d2f3f733d0d3bc0ca1cdc3f19",
          "body": "Author-facing docs for the data rune (SPEC-103):\n- live CSV examples (bare table, chart, sortable datatable) backed by a\n  committed site/examples/revenue.csv\n- shaping (where/sort/columns/limit/offset) + the typing/data-value channel\n- JSON/NDJSON (root/orient/key-column/dotted paths) worked exampl\n[…]\nr-tier note; grouped attributes reference\n- registered in the runes nav\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "docs(runes): data rune page with live CSV/JSON examples (WORK-488)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T14:06:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b26cd4d3d6850bf0b6166b5503f8b823086451d2",
          "body": "Extend the datatable sort comparator to prefer a cell's data-value over its\ntext (mirroring chart's dataset.value ?? textContent), so human-formatted\nnumbers (currency, thousands separators, units) sort by their real value.\n\n- RowData carries a per-cell dataValues array (data-value ?? null)\n- numeri\n[…]\ne one host-side change SPEC-103 takes; also fixes hand-authored tables.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "feat(behaviors): datatable data-value-aware sort (WORK-487)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T14:02:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82b66b8fbf50f389511e52d4630a265bd7f65487",
          "body": "The JSON-family adapters on the WORK-417 { headers, rows } contract.\n\n- jsonAdapter: root (dotted path or JSON Pointer), orient records/values\n  (auto-detected) + index (explicit, key-column), nested objects flattened\n  to dotted headers so columns plucks them by exact match; array leaves join\n- ndj\n[…]\nover\nJSON/NDJSON — indistinguishable from CSV downstream. 21 new tests.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "feat(runes): data rune JSON + NDJSON adapters (WORK-486)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T13:58:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9a519fdd8020da26f53e29042ee42d94f3a5f3c0",
          "body": "Creates milestone v0.28.0 grouping the plan status/lifecycle work:\n- SPEC-117: WORK-491 (drift fixes), WORK-492 (vocab consolidation),\n  WORK-493 (cancelled/superseded work statuses), WORK-494 (docs)\n- SPEC-049: WORK-495 (spec implemented/shipped + ADR rejected),\n  WORK-496 (pr attribute), WORK-497 \n[…]\ne pending unbuilt runes),\n  WORK-501 (general status-correctness audit)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BBXuNbHZgAkKkPZ44WLvvR",
          "is_bot": false,
          "headline": "plan: add v0.28.0 plan-model-hardening milestone and work breakdown",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T13:57:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4b44b9e7b3c859a312995b403e844cd4e8213745",
          "body": "…tates\n\nAdds a draft spec covering:\n- New terminal `work` statuses `cancelled` and `superseded` (+ `supersedes` attr)\n- Consolidating the status vocabulary into a true single source of truth\n  in enums.ts, with derived terminal/actionable/achieving helpers\n- Fixing live drift bugs where the MCP serv\n[…]\nrejected), which stays as the owner of the spec-side lifecycle changes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BBXuNbHZgAkKkPZ44WLvvR",
          "is_bot": false,
          "headline": "plan: add SPEC-117 for status vocab consolidation and terminal work s…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-09T13:33:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "48a70bb74fec8d44501929cbd097ba7bb4dcb0c5",
          "body": "…re (WORK-417)\n\nThe tier-1 spine of SPEC-103: a preprocess-time `{% data %}` rune that reads\nan external CSV/TSV file through the SPEC-113 ProjectFiles seam and emits a\nMarkdoc `table` node that chart and datatable consume with no structural edits.\n\n- data-adapters: RFC-4180 delimited parser + CSV/T\n[…]\nNo edits to chart.ts/datatable.ts. 37 new tests; contracts regenerated.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "feat(runes): data rune preprocessor + CSV/TSV adapter + projection co…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T09:57:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b39c45bbbc15e91fbc755855644d3438c928692e",
          "body": null,
          "is_bot": true,
          "headline": "chore: version packages",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T09:37:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0a71fe987ebb575f6ab6f24db65165dafa16ef2",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #561 from refrakt-md/claude/milestone-v0-27-0-yqiu8v",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-30T09:34:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "971fa1f2dca344a6ee700a578f32b6bb42a35a79",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "chore: changeset for the ProjectFiles seam (SPEC-113, minor)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T09:20:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "82cb66022af4f189efd8decdf984b65f82a092f6",
          "body": "…n (WORK-485)\n\nNew \"Hosted & In-Memory Builds\" page documenting the SPEC-113 seam for\nadapter/host and plugin authors:\n- the ProjectFiles contract (keys-not-paths, containment, sync boundary)\n  and the three stock providers, plus when to read through it\n- the fetch-then-build recipe (tarball-at-SHA \n[…]\nADR-025\n\nRegistered in the Extend nav and linked from the Extend index.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "docs(extend): ProjectFiles contract + fetch-then-build materializatio…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T09:19:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "dd8f8710c493b1c53c8c1e906d200b3dc6025112",
          "body": "…ructure-1fakg6",
          "is_bot": false,
          "headline": "Merge pull request #560 from refrakt-md/claude/refrakt-plan-docs-rest…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-30T09:06:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2d06751ceb4deafb2b8ed462051652673895258",
          "body": "…build (WORK-484)\n\nFinish the SPEC-113 consumer migration and the virtual entry point, and\nprove a complete site builds from a pure in-memory Map with no fs access.\n\n- loadContentFromTree: accepts projectFiles + gitTimestamps (+ a\n  sandboxExamplesDir key), threading the provider so snippet/sandbox/\n[…]\n is\nunchanged; the provider path is exercised by the new fs-free tests.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "feat(content): fileRoots/plan scan via ProjectFiles + in-memory full …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T09:01:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "811027afd52bba26509ba301573c2114bc70c2bf",
          "body": "PlanHub was launched prematurely and isn't fully capable yet, so stop\ndocumenting it in the /plan docs until it's ready. Replace it with\ncoverage of the publishing paths that ship today.\n\n- Delete the dedicated PlanHub reference page\n- Add \"Publish a plan site\": plan serve / plan build for local bro\n[…]\n\ncontributing guide, nav rune example) are intentionally left in place.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01FgyQG4vKk2SLusjmsLVAKY",
          "is_bot": false,
          "headline": "docs(plan): remove PlanHub, focus on publishing and integration",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T08:59:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a173baaf209f7790d161357bee87d9d7f86e2bec",
          "body": "…483)\n\nClose the main SPEC-113 gap: read-file.ts and the snippet/expand/file-ref\npipelines called node:fs directly, bypassing the injectable seam, so tree\nmode was not actually fs-free. Delegate all I/O to the WORK-481 provider.\n\n- read-file.ts: drop node:fs + the resolveSnippetPath containment\n  re\n[…]\nmoryProjectFiles map (and a root-escape is still denied in memory mode)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "feat(runes): snippet/expand/file-ref read through ProjectFiles (WORK-…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T07:46:13Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "802bbad7509e15577d90caee5a3731a41864269c",
          "body": "…ersal gap (WORK-482)\n\nRoute the sandbox example read seam through the WORK-481 ProjectFiles\nprovider. The `examplesDir + '/' + src` directory join was previously an\nunguarded string concat that could climb out of the project; resolving it\nthrough the provider means a root-escaping `src=\"../…\"` is d\n[…]\n and never\n  leaks an out-of-root file, in both memory and fs providers\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "feat(sandbox): migrate sandbox reads to ProjectFiles + close src trav…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-30T07:29:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0fec15c361b136f78edb2ba60ed84f6026101b29",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #556 from refrakt-md/changeset-release/main",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-30T07:13:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eea8cb7ba9fc76bd18ef9d3889471169418dda46",
          "body": null,
          "is_bot": true,
          "headline": "chore: version packages",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T19:38:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe64a3281eeb3f1400188b87cf989977481e6922",
          "body": "…hake\n\nfix(transform): always ship carousel.css in tree-shaken builds",
          "is_bot": false,
          "headline": "Merge pull request #559 from refrakt-md/claude/fix-carousel-css-trees…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-29T19:36:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d6b7567deadb6cbe458563fcbcd446e6ef821425",
          "body": "Carousel is a shared layout mode (data-layout=\"carousel\", SPEC-100) adopted\nby feature/cast/gallery, not a data-rune=\"carousel\" — so per-rune CSS usage\nanalysis never saw it and the production tree-shaker dropped the theme's\ncarousel.css skin. The JS-injected .rf-carousel__nav buttons then rendered \n[…]\n + UA gray; with the fix it is border-radius:50% +\nsurface bg + shadow.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "fix(transform): always ship carousel.css in tree-shaken builds",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-29T19:30:22Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2ceade9bfa8b7a0beb2989fc45a05bc96b25e059",
          "body": "changesets: add SPEC-099/100/108 milestone features for v0.26.0",
          "is_bot": false,
          "headline": "Merge pull request #558 from refrakt-md/claude/v0.26.0-changesets",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-29T18:45:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7988847c03a694bf37589b2740954758f03d5f58",
          "body": "The 15 milestone work items (WORK-466–480) were merged without changesets,\nso the pending set would only cut a patch (0.25.2). Add three spec-scoped\nminor changesets covering the feature layout axis, carousel shared layout\nmode, and reading register — bumping the fixed-mode group to 0.26.0.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "changesets: add SPEC-099/100/108 milestone features for v0.26.0",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-26T08:38:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dcfa65e55f96d9c4c369a7bb506846c6a1359a7f",
          "body": "feat(preview): toolbar code-view tidy + container-query collapse, responsive feature examples",
          "is_bot": false,
          "headline": "Merge pull request #557 from refrakt-md/claude/preview-viewport-examples",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T08:22:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54a7d9571aea31e0edd152bf1b0a860095b350c9",
          "body": "…l corners\n\nRemove the toolbar's horizontal padding (controls sit flush to the\ncanvas edges) and the .rf-preview__toolbar-left gap. Clip\n.rf-preview__source with overflow:hidden so its rounded border holds at\nthe bottom too (the code block's square fill was bleeding past it) —\nmatching the canvas clip.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(preview): flush toolbar, drop left-group gap, round source pane…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T08:16:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fb3765548355b1d175a58fc221155ccccfa1cfb5",
          "body": "The media-position=\"end\" hero with a wireframe sandbox beside the\ncontent was cramped at the md breakpoint; collapse at lg so the sandbox\nhas room. Pre-existing rough edge, surfaced while reviewing the\ncontainer-query collapse change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(hero): collapse the beside sandbox example at lg, not md",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T08:10:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "63077cb69914c8ae3c53d485d9f570361e5c67af",
          "body": "… examples\n\nConvert split.css beside→stack collapse from @media to @container so it\nkeys off the rune's available width (its nearest query container —\n.rf-page-content on a page) instead of the global viewport. Make the\npreview viewport frame a container so the collapse — and carousel\ncollapse-to — \n[…]\nss (most visible on docs sidebar\npages). Composes with WORK-489 carousel collapse-to (host-as-container\nstays a closer container).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "WORK-490: container-query beside-layout collapse + responsive feature…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T07:58:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "693cf13f01df1936ed0da640dd3c7fc5ecef5b2a",
          "body": "…code view\n\nMove the view-mode toggle (preview ⇄ code) into its own left-hand toolbar\ngroup, apart from the controls that tune the rendered preview. Hide the\nviewport selector and theme toggle while the code view is active — they\nact on a canvas that isn't shown — retaining and reapplying their state\non switch back. Adds a left toolbar group + [hidden] override in CSS and\ntwo behavior tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(preview): split view toggle left, hide preview-only controls in …",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T07:43:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "06c49ea0639b1ed6a7d3838dc9e638a033b4fbce",
          "body": "…av-fix\n\nfix(carousel): feature carousel gap + nav buttons, container-query collapse-to",
          "is_bot": false,
          "headline": "Merge pull request #555 from refrakt-md/claude/feature-carousel-gap-n…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T07:35:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87837157eeb3f28e48028c35ad345da53c832a6f",
          "body": "Make collapse-to=\"carousel\" container-query driven by turning the host\ninto its own query container ([data-collapse-to=\"carousel\"] gets\ncontainer-type: inline-size) and converting the sm/md/lg collapse-to\nblocks in skeleton carousel.css from @media to @container. The flip now\nkeys off the rune's own\n[…]\nfeature-grid @media→@container migration is deferred (noted in\nWORK-489 non-goals — high blast radius, needs cross-layout review).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "WORK-489: container-query collapse-to-carousel + preview simulation",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T07:27:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ff73f124a4b67db0c8387ab674147e5faa4b221",
          "body": "Incidental lockfile normalization (npm added a `peer: true` marker on an\noptional darwin dependency during install). No dependency changes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "chore: sync package-lock peer flag from install",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-26T07:25:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4b66426f5f3963e34373fbbaef9bc53af145379c",
          "body": "Foundation of SPEC-113: one synchronous ProjectFiles interface\n(read/list/exists over normalized POSIX project-root-relative keys, with\ncontainment as a contract) plus filesystem, in-memory, and recording\nproviders, consolidating the ad-hoc fs seams at the pipeline edges.\n\n- ProjectFiles interface +\n[…]\nport\n- 19 unit tests covering normalization, containment, and recording\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01WSxGnPtB3nBcbLQQ4Px33Q",
          "is_bot": false,
          "headline": "feat(types): add ProjectFiles seam interface + providers (WORK-481)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-26T07:24:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "34464bb393a38eafd23ee56fd616c42fc674cecd",
          "body": "WORK-481 was claimed by newly-merged milestone work on main; pick the\nnext free ID (highest on main is WORK-488).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "plan: renumber carousel CQ work item WORK-481 → WORK-489",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T07:15:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "decb8d5fb16dce91fa4eb77abf6327ec950ce202",
          "body": "The shared carousel behavior computed its scroll distance from\ngetComputedStyle(track).gap; an unset flex gap computes to \"normal\",\nso parseFloat→NaN made scrollBy a silent no-op. Read columnGap and\nguard non-finite values. Add the missing gap on Lumina's\n[data-layout=\"carousel\"] feature track. Fix \n[…]\naffolds WORK-481 for the container-query migration that would let\ncollapse-to=\"carousel\" be demonstrated via the preview selector.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(carousel): gap between feature slides + working prev/next nav",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T07:15:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "069cc698b6fda066a2676fe294fb6a9733233c6b",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #554 from refrakt-md/claude/v0-27-0-planning-sgq68k",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T07:10:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24abc73c9b6996f708a130fe3b443d5f2566fffd",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #553 from refrakt-md/claude/spec-108-editor-dropcap",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T06:56:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da3260879be7cd8a9b058d3510f52aed29f00648",
          "body": "Surface the dropcap toggle in the block editor only when a block's body\nresolves to reading=\"prose\", derived from the same shared contract the\nengine uses — no per-rune allowlist.\n\n- server: makeRuneConfigResolver() joins each rune to its RuneConfig\n  (typeName for core, separator-insensitive name f\n[…]\nes gate free.\n- test: rune-config-resolver covers the name↔config join.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-479: editor dropcap toggle derived from reading register",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-26T06:50:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "12ad0c6611a0e280945cb83e5ee84c9904ee3fcf",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-479: start editor dropcap affordance",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-26T06:43:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "45a852e19f97b133b1ef218ac5448b21926243f9",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #552 from refrakt-md/claude/docs-markdoc-fences",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-26T06:33:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcb80af75676ea225fcfc2f72a4e496da2582c7f",
          "body": "Several code blocks demonstrating Markdoc rune syntax ({% ... %}) were\nfenced as ```md / ```markdown, which Shiki highlights as plain Markdown —\nso the {% %} tags rendered unhighlighted. Retag them ```markdoc (the\nlanguage that highlights rune tags, attributes, and string values) across\nsurfaces, di\n[…]\ne strings, or the\nJinja .njk template — stay on their correct language.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "docs: tag rune-syntax code blocks as markdoc, not md/markdown",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T16:14:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "70e98c1c4fcf18f080c7df51196bdcfdb38d7d87",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #551 from refrakt-md/claude/spec-108-gallery-docs",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-25T16:00:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1cddfa61b110c65f37d4c02b1feb6b9bdfe9cd24",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-480: mark done — reading-role gallery subject + docs",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T15:19:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5d456064efb8147acd3aa36cb42be18af063c109",
          "body": "Add a dedicated reading subject to the gallery — a long body rendered at\neach register (fine/ui/prose) plus the editorial-header composition\n(width=full + reading=prose at a capped measure) — emitted as a synthetic\n`reading` group so it rides the existing light/dark documents and per-cell\nclipping. \n[…]\nan author-facing Reading section + axes-table\nrow in runes/surfaces.md.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-480: reading-role gallery subject + docs",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T15:18:35Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9aa2b77fbbc85909910626e1ea579c78f9228f83",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #550 from refrakt-md/claude/spec-108-lumina-prose",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-25T14:58:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd6daae339b387d423f0366513b7d9fa2860fdc6",
          "body": "Lumina now interprets [data-reading]: dimensions/reading.css caps the measure\n(--rf-measure, distinct from width), sets paragraph rhythm + running-text niceties\n(text-wrap, hanging punctuation, link underline) for prose, and a quieter treatment\nfor fine — keyed on the attribute, not rune-name lists.\n[…]\nry visual guard for the\neditorial-header composition lands in WORK-480.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-478: Lumina prose interpretation + generalised dropcap",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T13:30:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "04bd2a41f899287884d7eb4b55e97c0967f1faf5",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #549 from refrakt-md/claude/spec-108-reading-defaults",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-25T13:19:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5477161471828097f890430525b4c7b662871e46",
          "body": "Make the reading register actually drive output. Per-rune: defaultReading 'prose'\non PullQuote/TextBlock/Lore, 'fine' on Sidenote — each emits data-reading on its\nbody section. Layout/region: the layout engine emits data-reading on a content-\nsource slot when its reading is set (ui suppressed); blog\n[…]\nck data-reading). Lumina styling of [data-reading=\"prose\"] is WORK-478.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-477: reading per-rune + layout/region defaults",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T12:19:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f49038ccd968d252a36ece23896e416f9f2a05c0",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #548 from refrakt-md/claude/spec-108-reading-role",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-25T12:01:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef476679ead0c5ff1331680bc26e18151c12825c",
          "body": "The shared SPEC-108 contract: packages/transform/src/reading.ts defines the\nReadingRegister vocabulary (fine|ui|prose), coerceRegister (validate-or-undefined),\nresolveReading() with precedence author ▸ rune ▸ region ▸ ui, and the\nREADING_CAPABILITIES table (only prose enables dropcap). RuneConfig.de\n[…]\n32 transform/runes tests\ngreen incl. the new resolver + emission tests.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-476: reading-register engine resolver + data-reading emission",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T10:54:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f916348c4df72a7beeb4af3f9e2858374574623c",
          "body": "…ut-mode",
          "is_bot": false,
          "headline": "Merge pull request #547 from refrakt-md/claude/spec-100-carousel-layo…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-25T10:43:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4eab338452d042f88d9a9a886bda0508925ccdb0",
          "body": "- Accept SPEC-113 (ProjectFiles seam) and SPEC-103 (data rune); both draft → accepted.\n- SPEC-113 breakdown: WORK-481 (interface + fs/memory providers + recordable\n  wrapper) → WORK-482 (sandbox migration + src containment), WORK-483\n  (snippet/expand/file-ref), WORK-484 (fileRoots + plan scan +\n  l\n[…]\nestone doc \"Before starting\" updated to reflect acceptance + breakdown.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YW2V4hEHLke61dTXMUWfYX",
          "is_bot": false,
          "headline": "plan: accept SPEC-103 + SPEC-113, break into v0.27.0 work items",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T10:22:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "df2985697024d261d5bb808143221a569c154bf3",
          "body": "Second adopter proving zero-per-rune-behavior-code adoption: cast accepts\nlayout=\"carousel\" (matches migrated onto the canonical const), its members <ul>\nbecomes the carousel track (data-name members→items), and .rf-cast--carousel sets\ncast's --rf-carousel-slide — the track, snap, and nav all come f\n[…]\n regenerated; 288 business +\nlumina tests green; site prerenders clean.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-475: cast adopts carousel + carousel docs",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T10:20:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5493faecf78c6c3fc738b10869797618d3f80001",
          "body": null,
          "is_bot": false,
          "headline": "plan: mark WORK-473/474 done",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T10:13:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcafeb41ceae309a283f0ae19af3eac125d066c4",
          "body": "Feature adoption (WORK-474): feature accepts layout=\"carousel\" (from the canonical\nconst) and its feature-items container is now the carousel track — autoLabel marks\nthe dl data-name=\"items\" (the shared contract token; renamed from \"definitions\",\n.rf-feature__definitions → .rf-feature__items). The s\n[…]\neting/lumina/behaviors tests green (contracts + CSS\ncoverage included).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-473/474: feature adopts carousel + collapse-to dial",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T10:12:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1ec61ede691ccbcd42488aada0972413800ccf7f",
          "body": "…ildren\n\nSlides are now the track's direct element children rather than requiring\ndata-name=\"item\" on each. A rune keeps its own item marker (gallery's\ndata-name=\"item\" figures, feature's definition items) and adopts with no renaming —\nthe zero-per-rune-code goal. Gallery is unaffected (its items ar\n[…]\nared CSS, the const contract doc, and the rune-authoring guide updated.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-470/472: refine carousel slide contract to the track's direct ch…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T10:04:16Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "91700693f2b9a49f8cdb8f70c513a7c76b49556d",
          "body": "Pressure-test edits grounded in chart/datatable behaviour and the SPEC-070\nmatcher:\n\n- Typing & the data-value channel: structure composes for free but typing does\n  not. chart already honours per-cell data-value (parseFloat); datatable sorts\n  on text via localeCompare(numeric). Narrow the \"zero ch\n[…]\n\n  an architectural limit. Error node = callout, not a malformed table.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YW2V4hEHLke61dTXMUWfYX",
          "is_bot": false,
          "headline": "SPEC-103: sharpen typing story and re-anchor src read on ProjectFiles",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T10:01:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8058ef61ca4f0882b64cd840d97dbadb152c80aa",
          "body": "Generalise gallery's setupCarousel into a standalone carousel behavior bound on\n[data-layout=\"carousel\"] via the WORK-471 dispatch — works on any rune emitting the\nshared contract, zero per-rune behavior code. It scopes slides to the track\n(:scope > [data-name=\"item\"]), mounts nav into the track's c\n[…]\nbehavior tests cover prev/next, keyboard, nav mount point, and\ncleanup.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-472: lift the carousel behavior out of gallery (block-agnostic)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:59:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "af14bbd6183947f4aea0687b4562218363c323da",
          "body": "Add a dispatch path that mounts a behavior by data-layout value, independent of\ndata-rune — the linchpin that makes carousel adoption config-only. New\nlayoutModeBehaviors registry + registerLayoutModeBehaviors() (add-only) +\ngetLayoutModeBehaviorNames(); initRuneBehaviors now scans [data-layout] and\n[…]\nross\nrune/no-rune hosts, single-mount, cleanup, and add-only semantics.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-471: attribute-triggered behavior dispatch path",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:50:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0f8d1381f782c707164f20b42551e50c6f3e887f",
          "body": "Graduate `carousel` into the ADR-018 canonical pool (LAYOUT.carousel) now that it\nhas 3+ identified consumers. Document the shared carousel DOM/behavior contract —\nhost data-layout=\"carousel\", track data-name=\"items\", items data-name=\"item\",\nblock-agnostic behavior bound on [data-layout=\"carousel\"] \n[…]\ny keeps its inline values until\nWORK-472 migrates it onto the contract.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-470: carousel canonical token + shared DOM contract",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:47:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "234409aa7835e62dab1b6a6fa1e75a7a4f158037",
          "body": "The Vite adapters' content HMR has the same whole-corpus shape as the hosted\npath — a single .md save nulls the binary site cache and full-reloads. Record\nthat the incremental engine pays off twice (hosted latency + local DX) and\nunlocks scoped reloads in place of the blanket full-reload.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YW2V4hEHLke61dTXMUWfYX",
          "is_bot": false,
          "headline": "ADR-025: note local dev HMR as the second beneficiary",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:44:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7328210b7d2d3f268b1553019732aabe7b7a2b51",
          "body": "…t-axis",
          "is_bot": false,
          "headline": "Merge pull request #546 from refrakt-md/claude/spec-099-feature-layou…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-25T09:44:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc27f2f6a978c3e0cfa313d29247a5b85919d7c8",
          "body": "…ng image\n\nThe new layout example referenced ![diagram](/shot.png), which doesn't exist in\nthe site's static assets; SvelteKit's prerender treats the broken link as a fatal\n404 and failed the Cloudflare Pages build. Swap the media for a codegroup, matching\nthe existing media-position examples on this page. Site build prerenders clean.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-469: fix feature docs example — use codegroup media, not a missi…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:40:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9f5c7638d23052d6cb930a237f088d2094a1f3bf",
          "body": "…posed)\n\nRecords the target architecture for per-file incremental rebuild and the one\npiece of groundwork the SPEC-113 seam should carry (a recordable read wrapper),\ndeferring the engine to a future spec.\n\n- Registry-as-firewall model with three blast-radius tiers (content-only,\n  registry-delta, st\n[…]\nySet}.\n- Links SPEC-113's \"no incremental rebuild\" non-goal to the ADR.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YW2V4hEHLke61dTXMUWfYX",
          "is_bot": false,
          "headline": "ADR-025: incremental rebuild via dependency-tracked invalidation (pro…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:35:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "50a780d1f17a879025f38b96bf1ecef9a456e229",
          "body": "…scope\n\n- Correct the sync claim: the preprocess phase is already async (hooks are\n  awaited); the irreducible sync surface is the transform-time sandbox read,\n  not the whole pipeline. Preprocess readers stay sync for uniformity.\n- Document the one-map / tree-derived-from-it materialization and the\n[…]\nile invalidation (it makes\n  reads recordable) but does not deliver it.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YW2V4hEHLke61dTXMUWfYX",
          "is_bot": false,
          "headline": "SPEC-113: sharpen sync rationale, add warm-map + incremental-rebuild …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:29:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4216f8b0e420ad9dfcf6cb764e0e3253a5e5bc50",
          "body": "Removing the media-position → definitions-grid variant collapses feature's\nper-variant contract entries (3× → 1×) and drops the .rf-feature--definitions-grid\nselector. Regenerated via `refrakt contracts --site main` to both the repo-level\nfile and Lumina's shipped copy; packages/lumina/test/contract\n[…]\nedes the WORK-468 deferral note — contracts are updated,\nnot deferred.)\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-468: regenerate structure contracts for the layout axis",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:24:15Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8528ebbaf3d06eb7ef1d549af37c5ce0047924fe",
          "body": "Check off acceptance criteria and record resolution summaries for the feature\nlayout-axis work. WORK-468 notes the deferred structure-contracts regeneration.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "plan: mark SPEC-099 work items (WORK-467/468/469) done",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:21:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2af08ee922d0fc523a2978fb05e9ce9efe10c23d",
          "body": "Below the existing `collapse` breakpoint, a `grid` layout reflows to a single\ncolumn — CSS-only, sharing the same `data-collapse` hook the media split uses\n(default sm/640px, mirroring layouts/split.css; `never` opts out). No new\nattribute, no behavior code. Document the `layout` axis and the shared\n[…]\n / axis-independence / unchanged-when-unset tests landed with WORK-467.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-469: feature grid collapse reflow + docs",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:20:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f8b004f376fc114c3d946a164f74091fb3a782cd",
          "body": "Move the feature grid/stack decision entirely onto [data-layout], decoupled from\nmedia placement. Remove the SPEC-091 media-position → definitions-grid config\nvariant; the skeleton arrangement (display: grid vs block) and the lumina item\nchrome (carded tiles vs flat rows) now key off [data-layout=\"g\n[…]\nmmand\nis itself stale. Deferred to avoid shipping a divergent artifact.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-468: retire media-position → definitions-grid coupling",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:18:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "acc1120906a8da4c517dc86e509a4d5b9fa7df85",
          "body": "Add a `layout` attribute (grid|list, imported from the ADR-018 canonical const) to\nthe feature rune. The effective value is resolved in the transform —\nattrs.layout ?? derive(media-position) (stacked → grid, beside → list) — and emitted\nas a single always-present `layout` meta, so author override an\n[…]\nsition → definitions-grid\ncoupling and the CSS move follow in WORK-468.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-467: feature layout axis + transform-level default resolution",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T09:10:04Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b7e08bcb6e84769916d192e03f510d951f08931d",
          "body": "Add the shared canonical-layout-token const that ADR-018 establishes, seeded with\ngrid and list. LAYOUT named tokens + CanonicalLayout type + CANONICAL_LAYOUTS\narray + a layoutMatches(canonical, ...local) helper that composes canonical picks\nwith rune-local literals. Re-exported from @refrakt-md/run\n[…]\nuthoring guide; unit\ntest locks the seed set and composition behaviour.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "WORK-466: canonical layout vocabulary const (ADR-018)",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T08:39:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ad0a14217ef824493de7a0f66c354dca1a286ef8",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #545 from refrakt-md/claude/v0.26.0-milestone-2vuxi9",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-25T08:33:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b03e164cc9efcb099ce862aeabc91925775f6cb",
          "body": "Pin the decision that layout=\"carousel\" and \"grid desktop → carousel mobile\" are\ndistinct intents. layout=\"carousel\" is an all-viewport carousel with graceful\ndegradation (static row when items fit; scroll + JS nav only on overflow), never\nautomatic. The responsive case is a separate composition: a \n[…]\n99 ruled out. Reflected in the acceptance criteria and in WORK-473/474.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "SPEC-100: define collapse-to dial; fix carousel scope as all-viewport",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T08:27:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "17d26786ac3e3c09cf69aa5d72c4eb02afea5d89",
          "body": "…tems\n\nAccept the canonical-layout-vocabulary decision and all three milestone specs,\nand scaffold the work breakdown (WORK-466..480), all assigned to v0.26.0 with\nsource links and dependency ordering:\n\n- SPEC-099 (feature layout axis): WORK-466 canonical const → 467 layout axis +\n  transform-level \n[…]\nof the bodies so the validator's ref-parsing builds no\nspurious cycles.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "v0.26.0: accept ADR-018 + SPEC-099/100/108, break down into 15 work i…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T08:10:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "029208c7ab8d52d50fcc7ae80e1689138e5e46ca",
          "body": "Pin the two pre-breakdown decisions: the media-derived layout default resolves in\nthe feature transform (attrs.layout ?? derive(media-position), single always-emitted\ndata-layout) rather than a config variant that would collide with the author\noverride; and SPEC-099, as ADR-018's first consumer, cre\n[…]\ned CSS\nhook for the grid reflow. Threaded into the acceptance criteria.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "SPEC-099: record default-resolution and const-ownership decisions",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T08:00:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c37d9e345e0c2c4a4da03045383fd9503130fa0c",
          "body": "…ilestone\n\nRecord the load-bearing decisions SPEC-100's phasing left implicit: the carousel\nbehavior needs a new attribute-triggered dispatch path ([data-layout=\"carousel\"],\nnot the current data-rune-keyed map), keeps gallery's items/item data-name tokens\nas the shared contract (lightbox couples to \n[…]\n\ncan proceed in parallel; only Phase B adoption needs SPEC-099 landed).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "SPEC-100/v0.26.0: pin carousel design notes, pull SPEC-099 into the m…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T07:51:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b757d395ee65d898f0cb613086dedac81da73d0d",
          "body": "Add §6 defining the shared resolution contract: the ordered ReadingRegister\nvocabulary, the three sources (author attr, RuneConfig.defaultReading, content\nLayoutSlot reading default), a pure resolveReading() with author ▸ rune ▸ region\n▸ ui precedence, the ui-suppression emission guard, and a declar\n[…]\ntor consumes. Threaded into the acceptance criteria and\nwork breakdown.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "SPEC-108: pin down the register-resolution data shape",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T07:41:58Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "987cfec85acd9386e34447a1c5dbb93f98fe85ec",
          "body": "Capture the decision that dropcap is gated on the resolved `prose` reading\nregister rather than a rune allowlist (with `textblock` as the reach-in for the\nnon-rune article body), and that a visual editor derives the dropcap toggle from\nthe resolved register instead of a per-rune list. Reflected in §3, the acceptance\ncriteria, and the provisional work breakdown.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_014RDL9XUNCFGbhYuo2dEANS",
          "is_bot": false,
          "headline": "SPEC-108: record dropcap prose-gating and editor-affordance decisions",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-25T07:37:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "354d7e244c9963ccbbbb38092b0f8cf563d9a507",
          "body": null,
          "is_bot": false,
          "headline": "Merge pull request #544 from refrakt-md/changeset-release/main",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-24T20:07:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "835d89d48e06a96b32f892f093f94a51798da6d1",
          "body": null,
          "is_bot": true,
          "headline": "chore: version packages",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-24T20:06:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d5fb9f61c8db04711b87b0f75e6eca57d08d8c3",
          "body": "…s-hhwiym",
          "is_bot": false,
          "headline": "Merge pull request #543 from refrakt-md/claude/steps-diagram-docs-bug…",
          "author_name": "Björn Andersson",
          "author_login": "bjornolofandersson",
          "committed_at": "2026-06-24T20:03:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35d765897c5c7799a9f5f753bea4f8b1b870445f",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BNQ48HwdBnixtKxBWEGrHJ",
          "is_bot": false,
          "headline": "Add changesets for steps, diagram, and mobile docs nav fixes",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-24T19:54:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ca607805724f7e653b0cfaee97d291a993e2a848",
          "body": "The .rf-mobile-panel--nav top override and the base .rf-mobile-panel top rule\nhave equal specificity (0,1,0) and both live in @layer skeleton, but mobile.css\nis imported after docs.css — so on source order the base rule won and the panel\ndocked at the site-header height, leaving its first link cover\n[…]\n to a two-class selector (0,2,0) so it\nwins regardless of import order.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BNQ48HwdBnixtKxBWEGrHJ",
          "is_bot": false,
          "headline": "Fix mobile docs nav panel docking under site header instead of toolbar",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-24T19:45:30Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "47d46c0ab2bac52739d8c479c4a8780052a5fbe6",
          "body": "… overlap\n\n- steps: scope the title block-display to the leading bold of the first\n  paragraph (.rf-step__content > p:first-child > strong:first-child) so inline\n  <strong> in step body text no longer breaks onto its own line.\n- diagram: resolve theme tokens to hex before handing them to mermaid. Me\n[…]\n  which (with the toolbar's higher z-index) hid the first sidenav link.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01BNQ48HwdBnixtKxBWEGrHJ",
          "is_bot": false,
          "headline": "Fix steps strong line-breaks, mermaid non-hex colors, mobile docs nav…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-06-24T19:33:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        }
      ],
      "releases_count": 100,
      "commits_last_year": 2810,
      "latest_release_at": "2026-07-17T15:14:11Z",
      "latest_release_tag": "@refrakt-md/mcp@0.28.0",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 22,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 0
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@refrakt-md/ai",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/ai",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 61,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1655,
          "first_published_at": "2026-02-12T09:38:32.299000Z",
          "latest_published_at": "2026-07-17T15:12:24.155000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@refrakt-md/cli",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/cli",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 61,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1655,
          "first_published_at": "2026-02-12T09:38:33.989000Z",
          "latest_published_at": "2026-07-17T15:12:24.404000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@refrakt-md/mcp",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/mcp",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 34,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1267,
          "first_published_at": "2026-05-03T09:04:41.053000Z",
          "latest_published_at": "2026-07-17T15:12:28.111000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@refrakt-md/html",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/html",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 50,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1690,
          "first_published_at": "2026-03-16T14:42:21.302000Z",
          "latest_published_at": "2026-07-17T15:12:23.890000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@refrakt-md/next",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/next",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 43,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1256,
          "first_published_at": "2026-04-07T07:13:36.630000Z",
          "latest_published_at": "2026-07-17T15:12:28.518000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@refrakt-md/nuxt",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/nuxt",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 43,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1263,
          "first_published_at": "2026-04-07T07:13:55.574000Z",
          "latest_published_at": "2026-07-17T15:12:28.331000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@refrakt-md/astro",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/astro",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 43,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1283,
          "first_published_at": "2026-04-07T07:12:56.015000Z",
          "latest_published_at": "2026-07-17T15:12:24.267000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "@refrakt-md/react",
          "exists": true,
          "license": "MIT",
          "keywords": [],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@refrakt-md/react",
          "is_deprecated": false,
          "latest_version": "0.28.0",
          "repository_url": "https://github.com/refrakt-md/refrakt",
          "versions_count": 43,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1276,
          "first_published_at": "2026-04-07T07:14:25.842000Z",
          "latest_published_at": "2026-07-17T15:12:28.634000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 6
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "packages/ai/tsconfig.json",
        "packages/astro/tsconfig.json",
        "packages/behaviors/tsconfig.json",
        "packages/cli/tsconfig.json",
        "packages/content/tsconfig.json",
        "packages/create-refrakt/template-astro/tsconfig.json",
        "packages/create-refrakt/template-html/tsconfig.json",
        "packages/create-refrakt/template-next/tsconfig.json",
        "packages/create-refrakt/template-nuxt/tsconfig.json",
        "packages/create-refrakt/template/tsconfig.json",
        "packages/create-refrakt/tsconfig.json",
        "packages/editor/app/tsconfig.json",
        "packages/editor/tsconfig.json",
        "packages/eleventy/tsconfig.json",
        "packages/gallery-harness/tsconfig.json",
        "packages/highlight/tsconfig.json",
        "packages/html/tsconfig.json",
        "packages/language-server/tsconfig.json",
        "packages/lumina/tsconfig.json",
        "packages/mcp/tsconfig.json",
        "packages/next/tsconfig.json",
        "packages/nuxt/tsconfig.json",
        "packages/react/tsconfig.json",
        "packages/runes/tsconfig.json",
        "packages/skeleton/tsconfig.json",
        "packages/sveltekit/tsconfig.json",
        "packages/transform/tsconfig.json",
        "packages/types/tsconfig.json",
        "packages/vue/tsconfig.json",
        "plan-site/tsconfig.json",
        "plugins/business/tsconfig.json",
        "plugins/design/tsconfig.json",
        "plugins/docs/test/fixtures/tsconfig.json",
        "plugins/docs/tsconfig.json",
        "plugins/learning/tsconfig.json",
        "plugins/marketing/tsconfig.json",
        "plugins/media/tsconfig.json",
        "plugins/places/tsconfig.json",
        "plugins/plan/tsconfig.json",
        "plugins/storytelling/tsconfig.json",
        "site/tsconfig.json",
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 89209,
      "source_files_sampled": 868,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 25946
    },
    "dependencies": {
      "manifests": [
        "package.json",
        "plan-site/package.json",
        "site/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "npm"
      ],
      "dependencies": [
        {
          "name": "@markdoc/markdoc",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.4.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/highlight",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/lumina",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/plan",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/svelte",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/sveltekit",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "plan-site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@markdoc/markdoc",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.4.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/svelte",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/sveltekit",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/lumina",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/highlight",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/marketing",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/docs",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/storytelling",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/places",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/business",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/design",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/learning",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/media",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/plan",
          "manifest": "site/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/behaviors",
          "manifest": "packages/astro/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "packages/astro/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/astro/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/astro/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@markdoc/markdoc",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.4.0"
        },
        {
          "name": "@refrakt-md/ai",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/editor",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/html",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "esbuild",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.27.5"
        },
        {
          "name": "postcss",
          "manifest": "packages/cli/package.json",
          "ecosystem": "npm",
          "version_constraint": "^8.4.0"
        },
        {
          "name": "@refrakt-md/highlight",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@markdoc/markdoc",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.4.0"
        },
        {
          "name": "yaml",
          "manifest": "packages/content/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.4.0"
        },
        {
          "name": "@clack/prompts",
          "manifest": "packages/create-refrakt/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.2.0"
        },
        {
          "name": "@refrakt-md/plan",
          "manifest": "packages/create-refrakt/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "packages/create-refrakt/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/create-refrakt/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@markdoc/markdoc",
          "manifest": "packages/editor/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.4.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "packages/editor/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/highlight",
          "manifest": "packages/editor/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "packages/editor/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/editor/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/editor/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/behaviors",
          "manifest": "packages/eleventy/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "packages/eleventy/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/eleventy/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/eleventy/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/highlight/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/highlight/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "shiki",
          "manifest": "packages/highlight/package.json",
          "ecosystem": "npm",
          "version_constraint": "^3.0.0"
        },
        {
          "name": "@refrakt-md/behaviors",
          "manifest": "packages/html/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "packages/html/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/html/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/html/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "packages/language-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/language-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@markdoc/markdoc",
          "manifest": "packages/language-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.4.0"
        },
        {
          "name": "reflect-metadata",
          "manifest": "packages/language-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.0"
        },
        {
          "name": "vscode-languageserver",
          "manifest": "packages/language-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^9.0.1"
        },
        {
          "name": "vscode-languageserver-textdocument",
          "manifest": "packages/language-server/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.0.12"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "packages/lumina/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/skeleton",
          "manifest": "packages/lumina/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/lumina/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/lumina/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@modelcontextprotocol/sdk",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "^1.29.0"
        },
        {
          "name": "@refrakt-md/cli",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/runes",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/mcp/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/behaviors",
          "manifest": "packages/next/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "packages/next/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/next/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/next/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/behaviors",
          "manifest": "packages/nuxt/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/content",
          "manifest": "packages/nuxt/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/nuxt/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/nuxt/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/skeleton",
          "manifest": "packages/proof-skin/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/react/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/react/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@refrakt-md/transform",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        },
        {
          "name": "@markdoc/markdoc",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.4.0"
        },
        {
          "name": "reflect-metadata",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.2.0"
        },
        {
          "name": "fast-xml-parser",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "4.5.1"
        },
        {
          "name": "path-browserify",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "1.0.1"
        },
        {
          "name": "iso8601-duration",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.1.2"
        },
        {
          "name": "yaml",
          "manifest": "packages/runes/package.json",
          "ecosystem": "npm",
          "version_constraint": "2.8.2"
        },
        {
          "name": "@refrakt-md/types",
          "manifest": "packages/skeleton/package.json",
          "ecosystem": "npm",
          "version_constraint": "0.28.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 6,
        "merged_prs": 561,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 2
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "claude",
          "commits": 1432,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "bjornolofandersson",
          "commits": 1333,
          "avatar_url": "https://avatars.githubusercontent.com/u/14282149?v=4"
        },
        {
          "type": "User",
          "login": "TESTPERSONAL",
          "commits": 18,
          "avatar_url": "https://avatars.githubusercontent.com/u/6664588?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.515
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml"
      ],
      "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": 0,
            "reason": "0 out of 8 merged PRs checked by a CI test -- score normalized to 0",
            "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/6 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": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 9,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "141 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "9c7bd86104cff9e5d909c15ffa1d88eb9e00d703",
        "ran_at": "2026-07-22T19:54:21Z",
        "aggregate_score": 3.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-17T19:21:29Z",
      "oldest_open_prs": [
        {
          "number": 161,
          "created_at": "2026-03-31T08:45:25Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 196,
          "created_at": "2026-04-08T17:00:27Z",
          "last_comment_at": "2026-04-08T17:00:54Z",
          "last_comment_author": "cloudflare-workers-and-pages"
        },
        {
          "number": 254,
          "created_at": "2026-04-14T12:24:10Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 530,
          "created_at": "2026-06-22T19:42:17Z",
          "last_comment_at": "2026-06-22T19:49:24Z",
          "last_comment_author": "cloudflare-workers-and-pages"
        },
        {
          "number": 568,
          "created_at": "2026-07-17T21:48:58Z",
          "last_comment_at": "2026-07-17T21:49:55Z",
          "last_comment_author": "cloudflare-workers-and-pages"
        },
        {
          "number": 569,
          "created_at": "2026-07-19T20:23:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-17T19:17:51Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/refrakt-md/refrakt",
    "host": "github.com",
    "name": "refrakt",
    "owner": "refrakt-md"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 54,
      "inputs": {
        "security": 37,
        "vitality": 87,
        "community": 26,
        "governance": 54,
        "engineering": 55
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 87,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 79,
            "inputs": {
              "commits_last_year": 2810,
              "human_commit_share": 0.96,
              "days_since_last_push": 2,
              "active_weeks_last_year": 22
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "22/52 weeks with commits",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 22
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "2810 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 2810
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "@refrakt-md/mcp@0.28.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0
                    }
                  }
                ],
                "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": "critical",
        "name": "Community & Adoption",
        "value": 26,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "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": 68,
            "inputs": {
              "packages": [
                "@refrakt-md/ai",
                "@refrakt-md/cli",
                "@refrakt-md/mcp",
                "@refrakt-md/html",
                "@refrakt-md/next",
                "@refrakt-md/nuxt",
                "@refrakt-md/astro",
                "@refrakt-md/react"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 11345
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "11,345 downloads/month across npm",
                "points": 54.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 11345,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 27,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.515
            },
            "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 52% of commits",
                "points": 10.9,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 52
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 561,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 2
            },
            "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": "561/563 decided PRs merged",
                "points": 38.1,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 561,
                      "decided": 563
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/6 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 33,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "refrakt-md",
              "public_repos": 1,
              "account_age_days": 160
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of refrakt-md",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "refrakt-md"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~0 yr old",
                "points": 3.1,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@refrakt-md/ai",
                "@refrakt-md/cli",
                "@refrakt-md/mcp",
                "@refrakt-md/html",
                "@refrakt-md/next",
                "@refrakt-md/nuxt",
                "@refrakt-md/astro",
                "@refrakt-md/react"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "8 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 8,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "61 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 61
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 55,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 48,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": 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": "0 out of 8 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [
                "markdoc",
                "planning",
                "static-site"
              ],
              "has_wiki": false,
              "homepage": "https://refrakt.md",
              "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://refrakt.md",
                "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": "3 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 37,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 37,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.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": "0 out of 8 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/6 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 dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "141 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 72,
        "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": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 25946
            },
            "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": "96 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 96,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "package-lock.json"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [
                "packages/ai/tsconfig.json",
                "packages/astro/tsconfig.json",
                "packages/behaviors/tsconfig.json",
                "packages/cli/tsconfig.json",
                "packages/content/tsconfig.json",
                "packages/create-refrakt/template-astro/tsconfig.json",
                "packages/create-refrakt/template-html/tsconfig.json",
                "packages/create-refrakt/template-next/tsconfig.json",
                "packages/create-refrakt/template-nuxt/tsconfig.json",
                "packages/create-refrakt/template/tsconfig.json",
                "packages/create-refrakt/tsconfig.json",
                "packages/editor/app/tsconfig.json",
                "packages/editor/tsconfig.json",
                "packages/eleventy/tsconfig.json",
                "packages/gallery-harness/tsconfig.json",
                "packages/highlight/tsconfig.json",
                "packages/html/tsconfig.json",
                "packages/language-server/tsconfig.json",
                "packages/lumina/tsconfig.json",
                "packages/mcp/tsconfig.json",
                "packages/next/tsconfig.json",
                "packages/nuxt/tsconfig.json",
                "packages/react/tsconfig.json",
                "packages/runes/tsconfig.json",
                "packages/skeleton/tsconfig.json",
                "packages/sveltekit/tsconfig.json",
                "packages/transform/tsconfig.json",
                "packages/types/tsconfig.json",
                "packages/vue/tsconfig.json",
                "plan-site/tsconfig.json",
                "plugins/business/tsconfig.json",
                "plugins/design/tsconfig.json",
                "plugins/docs/test/fixtures/tsconfig.json",
                "plugins/docs/tsconfig.json",
                "plugins/learning/tsconfig.json",
                "plugins/marketing/tsconfig.json",
                "plugins/media/tsconfig.json",
                "plugins/places/tsconfig.json",
                "plugins/plan/tsconfig.json",
                "plugins/storytelling/tsconfig.json",
                "site/tsconfig.json",
                "tsconfig.json"
              ],
              "agent_commit_share": 0.7,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "packages/ai/tsconfig.json, packages/astro/tsconfig.json, packages/behaviors/tsconfig.json, packages/cli/tsconfig.json, packages/content/tsconfig.json, packages/create-refrakt/template-astro/tsconfig.json, packages/create-refrakt/template-html/tsconfig.json, packages/create-refrakt/template-next/tsconfig.json, packages/create-refrakt/template-nuxt/tsconfig.json, packages/create-refrakt/template/tsconfig.json, packages/create-refrakt/tsconfig.json, packages/editor/app/tsconfig.json, packages/editor/tsconfig.json, packages/eleventy/tsconfig.json, packages/gallery-harness/tsconfig.json, packages/highlight/tsconfig.json, packages/html/tsconfig.json, packages/language-server/tsconfig.json, packages/lumina/tsconfig.json, packages/mcp/tsconfig.json, packages/next/tsconfig.json, packages/nuxt/tsconfig.json, packages/react/tsconfig.json, packages/runes/tsconfig.json, packages/skeleton/tsconfig.json, packages/sveltekit/tsconfig.json, packages/transform/tsconfig.json, packages/types/tsconfig.json, packages/vue/tsconfig.json, plan-site/tsconfig.json, plugins/business/tsconfig.json, plugins/design/tsconfig.json, plugins/docs/test/fixtures/tsconfig.json, plugins/docs/tsconfig.json, plugins/learning/tsconfig.json, plugins/marketing/tsconfig.json, plugins/media/tsconfig.json, plugins/places/tsconfig.json, plugins/plan/tsconfig.json, plugins/storytelling/tsconfig.json, site/tsconfig.json, tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "packages/ai/tsconfig.json, packages/astro/tsconfig.json, packages/behaviors/tsconfig.json, packages/cli/tsconfig.json, packages/content/tsconfig.json, packages/create-refrakt/template-astro/tsconfig.json, packages/create-refrakt/template-html/tsconfig.json, packages/create-refrakt/template-next/tsconfig.json, packages/create-refrakt/template-nuxt/tsconfig.json, packages/create-refrakt/template/tsconfig.json, packages/create-refrakt/tsconfig.json, packages/editor/app/tsconfig.json, packages/editor/tsconfig.json, packages/eleventy/tsconfig.json, packages/gallery-harness/tsconfig.json, packages/highlight/tsconfig.json, packages/html/tsconfig.json, packages/language-server/tsconfig.json, packages/lumina/tsconfig.json, packages/mcp/tsconfig.json, packages/next/tsconfig.json, packages/nuxt/tsconfig.json, packages/react/tsconfig.json, packages/runes/tsconfig.json, packages/skeleton/tsconfig.json, packages/sveltekit/tsconfig.json, packages/transform/tsconfig.json, packages/types/tsconfig.json, packages/vue/tsconfig.json, plan-site/tsconfig.json, plugins/business/tsconfig.json, plugins/design/tsconfig.json, plugins/docs/test/fixtures/tsconfig.json, plugins/docs/tsconfig.json, plugins/learning/tsconfig.json, plugins/marketing/tsconfig.json, plugins/media/tsconfig.json, plugins/places/tsconfig.json, plugins/plan/tsconfig.json, plugins/storytelling/tsconfig.json, site/tsconfig.json, 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": "70 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 70,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 89209,
              "source_files_sampled": 868,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "TypeScript (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "TypeScript"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/868 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 868,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "moderate",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": true,
              "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": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
    "deps.dev does not index npm:@refrakt-md/ai@0.28.0; advisories assessed against the repository dependency graph instead"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-22T19:54:37.948419Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/r/refrakt-md/refrakt.svg",
  "full_name": "refrakt-md/refrakt",
  "license_state": "absent",
  "license_spdx": null
}

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.26.0 — metodología completa · wiki de métricas.

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