Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-26 17:08 UTC

openmindednewby / ui-tables

Shared RN-web table/stat components for the dloizides.com portfolio (StatCard; DataTable/StatGrid to follow)

TypeScriptMIT★ 0 estrellas⑂ 0 forksdesde jun 2026Ver en GitHub ↗

openmindednewby/ui-tables tiene un índice de salud de 35 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (65/100) y la más baja, Security (19/100). Se actualizó por última vez hace 4 días. Una sola persona concentra la mayor parte del trabajo reciente.

35
global / 100
En riesgo

Índice de salud del software

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

35
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

Demetrios LoizidesCuenta personal
8 seguidores78 repositorios públicosdesde ago 2017

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npm@dloizides/ui-tables1.15.0340721hace 6 díasreactreact-nativereact-native-webuitablestat-carddloizides

Métricas por categoría

Vitalidad

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

32En riesgo · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 4 días
2.8/36Cadencia de commits — 4/52 semanas con commits
14.4/18Volumen de commits — 39 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year39
human_commit_share1
days_since_last_push4
active_weeks_last_year4
Cómo se puntúa
0/27Publica versiones — sin versiones publicadas
0/36Recencia de las versiones — sin versiones
0/27Cadencia de publicación — sin versiones
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count0
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?

33En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
47.1/80Descargas mensuales — 3407 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packages@dloizides/ui-tables
dependents
ecosystemsnpm
total_downloads
monthly_downloads3407
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?

37En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.6/22.5Distribución de commits — el principal contribuyente firma el 97% de los commits
2.7/13.5Amplitud de contribuyentes — 2 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled2
top_contributor_share0,974
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
6.9/25Alcance del propietario — 8 seguidores de openmindednewby
25/25Trayectoria — 78 repos públicos, cuenta de ~8 años
Datos de entrada utilizados
followers8
owner_typeUser
is_verified
owner_loginopenmindednewby
public_repos78
account_age_days3273
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 6 días
20/20Historial de versiones — 21 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packages@dloizides/ui-tables
ecosystemsnpm
any_deprecatedno
min_days_since_publish6

Calidad de Ingeniería

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

50Moderado · 20% del índice global
Cómo se puntúa
0/24Flujos de trabajo de CI
24/24Pruebas presentes
16/16Configuración de linter — .eslintrc.js
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_cino
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.

Documentación

50Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
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?

19Crítico · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — sin datos
3/7.5Vulnerabilities — 6 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate1,9
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, signed_releases, token_permissions. Los pesos restantes se han renormalizado.

Preparación para IA

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

65Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 38 de 39 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,974
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .eslintrc.js
11/11Verificación estática de tipos — tsconfig.json
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 24 de los últimos 39 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfilespackage-lock.json
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configstsconfig.json
agent_commit_share0,615
toolchain_manifests
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — TypeScript (tipado estático)
55/55Tamaños de archivo manejables — 0/67 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageTypeScript
largest_source_bytes17.804
source_files_sampled67
oversized_source_files0

Datos clave

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

Advertencias de recopilación de datos

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 1.9 / 10
1.9agregado

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-26 17:08 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
4Vulnerabilities6 existing vulnerabilities detected
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": [],
      "is_fork": false,
      "size_kb": 2002,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "JavaScript": 1598,
        "PowerShell": 23707,
        "TypeScript": 281455
      },
      "pushed_at": "2026-07-21T18:24:01Z",
      "created_at": "2026-06-16T08:17:14Z",
      "owner_type": "User",
      "updated_at": "2026-07-21T18:24:24Z",
      "description": "Shared RN-web table/stat components for the dloizides.com portfolio (StatCard; DataTable/StatGrid to follow)",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "TypeScript",
      "significant_languages": [
        "TypeScript"
      ]
    },
    "owner": {
      "blog": "https://dloizides.com/",
      "name": "Demetrios Loizides",
      "type": "User",
      "login": "openmindednewby",
      "company": null,
      "location": "Cyprus",
      "followers": 8,
      "avatar_url": "https://avatars.githubusercontent.com/u/30867114?v=4",
      "created_at": "2017-08-09T12:57:29Z",
      "is_verified": null,
      "public_repos": 78,
      "account_age_days": 3273
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "433ee177f0f36cfc2be1eaf700906370eabf82e5",
          "body": "Get-Content returns a SCALAR STRING when the file has exactly one matching\nline, so '$carriedLines + \"//registry...\"' performed string CONCATENATION\nrather than array append. The temp npm config collapsed to a single corrupt\nline:\n\n  legacy-peer-deps=true//registry.npmjs.org/:_authToken=<token>\n\nnpm\n[…]\nig now has two lines and\n'npm whoami' authenticates.\n\nAll 32 per-package publish.ps1 copies are byte-identical and carry this bug.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(publish): force array append when seeding the temp npmrc",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-21T18:17:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "813a79a2d69bc0a5bc0eaaec31f42d46ba1253d2",
          "body": "The per-package publish scripts relied PURELY on ambient ~/.npmrc auth. When that\nauth lapsed, every publish died with an E404-from-401 while a perfectly good token\nsat in SaaS/.env.local the whole time -- @dloizides/design-tokens@1.3.0 passed its\nfull gate, bumped and committed, then failed at npm \n[…]\nr's NPM_CONFIG_USERCONFIG exactly as found\n\nNo token found still falls through to ambient auth, so existing setups are unaffected.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(publish): fall back to NPM_TOKEN from the repo-root .env.local",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-20T13:57:47Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4ce7d4d2c1940498dc989d773160dedfaa94df65",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.15.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-20T11:16:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d51ac3b9e472245c909ecb6795f622900a5fac22",
          "body": "…king the grid\n\n`if (loading) return stateView(...)` was unconditional, so every re-fetch threw away the\nrows the user was already looking at. On a server-paged grid that IS the paging bug:\nclicking Next replaced the table with \"Loading...\", the grid visibly emptied, and only\nrefilled when the next \n[…]\nre byte-identical, which keeps this a MINOR bump.\n266 pre-existing tests pass unmodified; 3 added for retained-rows / busy / swap.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(DataTable): keep rows on screen during a re-fetch instead of blan…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-20T09:38:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "f57ae1192d80192826da450fca5a6a8df1d0a8f0",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.14.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-19T12:03:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2240750a2b4b6d4e5cced04010e63031695da643",
          "body": "…eldShell fork (F2)\n\nThis package held a complete, themed, a11y-wired set of form controls inside its\nFilters bar and exported none of them. Six portals could see them working and none\ncould import them, so the fleet reimplemented them: 6 selects, 5 date fields, 2\ntypeaheads. They now live in @dloiz\n[…]\n selectTriggerLabel accessible name here and\npasses the finished string down. The i18n stayed with the package that owns the keys.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor(filters): consume ui-forms' promoted controls; delete the Fi…",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-19T11:59:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "26b82986455cf8268046420202f39014c9d33575",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.13.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-18T19:26:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cfe90e1fe59873db524525398a4fd95296f246e1",
          "body": "Promoted from the byte-identical PaginatedList twins in erevna-web and\nkatalogos-web as part of de-fork wave W1.1.\n\nDeliberately a hook rather than a component: the app-side PaginatedList\nhard-bound a FlatList plus app-specific empty/loading states, which must stay\napp-side. Only the paging maths is\n[…]\nx (only clamped when totalPages>0)\n- a pageSize of 0 produced Infinity pages\n- setPage did not clamp out-of-range input\n\n11 tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add usePagedRows client-side pagination hook",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-18T19:25:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39a2886856b348a6c2d631de059358fde16d8a81",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.12.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-18T15:46:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73619e89c7be8cd808a20aaf2cb9900019ae970d",
          "body": "The rows-per-page trigger rendered aria-label=\"50\" — a screen-reader user\nheard the value and nothing about the control. Fixed there and in four more\ninstances of the same defect class found while auditing the package:\n\n- Pager rows-per-page trigger + options (dropdown variant)\n- Pager rows-per-page\n[…]\ne ships silently and hurts only\nscreen-reader users — the zygos failure mode. Visible copy keeps the kit's\nfallback-free contract.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(a11y): give bare-number controls a real accessible name",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-18T15:45:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39b4838abe638d9618003f323e26de3aebce4c79",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.11.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-17T22:02:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f9ad192049f1503ddef588beffcf6c48e6b11a3",
          "body": "…, singularisation, responsive\n\nAdd a declarative, configurable Filters bar built ON the existing FilterBar shell:\na `fields` schema (select/text/number/dateRange/typeahead/boolean), a live-or-draft/apply\nvalue model (useFilterDraft), pre-localized labels/options, an injectable select\n(renderSelect \n[…]\np files small. All additive + backward compatible; no app\nmigrated (see ADOPTION.md).\n\n228 unit tests, tsc/eslint/build all green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(Filters+Pager): shared declarative filter bar + pager first/last…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-17T21:59:56Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0dec3ee1ef5927b87f5305be60607ce7adad77de",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.10.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-17T07:05:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00e044bfaffbc779053b1f998a1408268e4a59e6",
          "body": "MINOR — every new prop is optional and controlled. Omit them all and the\ntable renders exactly as before: the 75 pre-existing tests pass untouched,\nso compatibility is demonstrated rather than asserted. erevna, katalogos,\nkefi and agora are unaffected.\n\nNew (all optional): selectedRowKeys / onSelect\n[…]\nied: lint 0, typecheck 0, 178/178, build CJS 46.91KB / ESM 45.00KB.\nNot published — publish.ps1 -Bump minor owns the version bump.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(DataTable): bulk-select + keyboard navigation (1.10.0)",
          "author_name": "dloizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-16T23:09:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2df8815cb7a4ed9c8deb15c930d38ccb4f3d6535",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.9.2",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-16T13:03:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79c628473e9a840eba7f4fcc9806de2383232580",
          "body": "… View)\n\nA NON-interactive DataTable row (no onRowPress) was rendered as a Pressable. On\nreact-native-web a Pressable installs pointer responders on the row container that\ncapture a real mouse/touch gesture and cancel the press of any interactive child in a\ncell. So a Delete/Stop/Edit button inside \n[…]\n tables (onRowPress) unchanged. Shared fix -\nalso repairs Agora products/coupons grids and any DataTable with cell action buttons.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "in-cell action buttons fire on a real gesture (non-interactive row ->…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-16T13:02:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "926d66bd32fc1fb02119bab632951ff8586fc634",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.9.1",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-14T17:13:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f7cf87f8d2fa6157fa31fb72455387bc9813069",
          "body": "…ckable\n\nThe row Pressable was rendered `disabled={!onRowPress}`. On RN Web a disabled\nPressable gets aria-disabled=\"true\" AND pointer-events: none on the row container\n— which also kills every interactive child INSIDE the row.\n\nSo any table that puts controls in its cells (Edit/Delete buttons, an i\n[…]\nt DO pass onRowPress are\nunaffected (for them the prop was always false); consumers that don't simply get\ntheir row controls back.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(DataTable): a non-pressable row made its own cell controls un-cli…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-14T17:05:49Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "47d1ae10712d678acfefe044efbf5fa2d62805cc",
          "body": "…e.json\n\nOn a failed publish, publish.ps1 \"rolled back\" the version like this:\n\n    $pj = Get-Content $packageJsonPath -Raw | ConvertFrom-Json\n    $pj.version = $currentVersion\n    WriteAllText($packageJsonPath, ($pj | ConvertTo-Json -Depth 100))\n\nIt re-serialised the WHOLE document to change one fi\n[…]\nackage.json files were carrying the damage and 2 had it COMMITTED.\n\nFix: rewrite ONLY the version string in the raw text. Every other byte is untouched.\nAll 30 publish.ps1 patched; all 30 parse clean.",
          "is_bot": false,
          "headline": "fix(publish): stop the failed-publish rollback from CORRUPTING packag…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-12T18:31:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bcaf74960265e700a2496719184b631f47c95f58",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.9.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T20:10:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c14c2f9e135a9e8b526d03af7ecfe093b0b8308e",
          "body": "… web\n\nThe Pager dropdown-variant rows menu opened but painted UNDER the table on\nwide web: react-native-web gives every View position:relative;z-index:0, so\nthe in-tree absolute menu's zIndex was trapped inside the anchor's stacking\ncontext. On web the open menu now renders in a portal to document.\n[…]\nchor and the portalled menu node. react-dom becomes an\noptional peer. Adds a SizeDropdown test asserting the portalled/fixed menu.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(SizeDropdown): portal the rows-per-page menu to document.body on…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T20:09:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "fed2dc9fb9d4dd8486d01b596099927d059e7328",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.8.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T19:07:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42345209813dac7433b3a4218e7c1e4cfc1cce5c",
          "body": "…-page select\n\nAdds an additive, default-off rowsVariant prop to Pager. 'pills' (default) is\nbyte-identical to before; 'dropdown' renders a compact <select>-style anchored\ndropdown (trigger + chevron + popover, close on select/outside-click/Escape) with\na mixed-case 'Rows' caption, matching the v1 AML console. Implemented self-contained\nvia a new SizeDropdown (no hard dep on @dloizides/ui-layout).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(Pager): add rowsVariant='dropdown' — compact v1-console rows-per…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T19:06:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c6a9c413ebc50905407464e0899142e7aed22270",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.7.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T18:04:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc93ebe13c4be8b48addf24824c988c1c347de2b",
          "body": "- FilterBar: results count as role=status/aria-live=polite live region\n- Pager: hitSlop on Prev/Next + rows-per-page pills for ~44px touch targets\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(a11y): WCAG 2.1 AA hardening for table components",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T17:59:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0eddacd98430b325756a8b0b72b00ec8835ec0d2",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.6.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T15:26:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd4be41548b74202f6959fb63c72d4e97815ecef",
          "body": "…able:hover parity)\n\nOnly interactive rows (onRowPress set) tint on hover with the theme's soft brand\nfill (softBrandTint helper), re-theming per tenant; native-safe via Pressable\nonHoverIn/onHoverOut no-ops; backward-compatible for non-interactive tables.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(DataTable): web row-hover highlight on clickable rows (v1 .click…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T15:25:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8abb2403019c8c348fc3483976edd9d19fd68abe",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.5.0",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T14:14:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8bf200ccfc64980ed28df0727f666f2368301f7c",
          "body": "…o parity\n\nAdditive, default-off; count line byte-identical when omitted.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(Pager): add infoPrefix + boldNumbers props for v1 .ui-pager__inf…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T14:13:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f318f345a1253a9bc608cfe90a16992b456064fd",
          "body": null,
          "is_bot": false,
          "headline": "release: @dloizides/ui-tables v1.4.2",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T12:35:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "558069fd75d3984149b3b420543dd9ee10aef60b",
          "body": "…errors)\n\nReact Native sets `global.window = global`, so `typeof window === \"undefined\"` is\nNOT a native guard: on a device `window` EXISTS while window.location / matchMedia /\nlocalStorage / document do not. Code using that idiom believed itself native-safe and\nwould THROW on the first native rende\n[…]\n(graceful non-sticky header). The documented web-only escape hatch\nis preserved, not ripped out. 55/55 tests (+4 sticky-platform).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(native): resolve the sticky-header style per platform (Yoga hard-…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T12:32:57Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7ae3da1c4ad24d18237bf7dd4d14d1b61c61e1d0",
          "body": "… guard majors\n\nTwo real incidents this prevents:\n- PUBLISHED WITHOUT A COMMIT: auth-client 4.0.0 and ui-layout 1.2.0 went LIVE on npm\n  while their repos still said 3.4.1 / 1.1.0 — no commit, no changelog. Nobody could\n  tell what was inside the published version.\n- ACCIDENTAL MAJOR: auth-client 4.\n[…]\ne version bump (\"release: <pkg> v<x>\") before\n`npm publish` runs — if that commit fails it aborts rather than publish uncommitted.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(publish): refuse to publish from a dirty tree; commit the release;…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T12:22:24Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6fa9643fa26c5e79b0a1e75f0280d9b6504ffd1c",
          "body": "…gaps\n\nkefi's pixel-parity work surfaced the one slot that was missing: the desktop cell's\nwrapping <View> was not overridable. `cell` is a TextStyle, so it only reaches cells\nwhose column renders a string/number — a cell rendering a custom NODE (badge, link,\naction menu) could not be styled at all,\n[…]\n 0, lint 0, 51/51 unit.\n\nWith this, \"shared by default, pixel-perfect on demand, fork never\" holds with no\nescape hatches missing.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(table): add the cellWrap slot — the override surface now has no …",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T10:23:45Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a3f5440b110bcfa7111cca42be522dbdeda8c263",
          "body": "…el-perfect\n\nThe shared components must never FORCE a look. kefi hit a visual delta it couldn't\nfix without forking (radius 12 vs its 10, header bg from theme `background` vs its\n`surfaceMuted`, plus a card-stack it never had). Add an opt-in override surface:\n\n  DataTableStyleOverrides  wrap headRow\n[…]\nED: rendered HTML for 7 fixtures diffed byte-identical against\npre-change HEAD. typecheck 0, lint 0, 49/49 unit, tsup build green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(table): 1.4.0 — per-slot styleOverrides so a consumer can be pix…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T10:06:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6be9d5a19b8a9d7cc3c5041a6ea3a74f5d7d0735",
          "body": "The card-stack branch rendered `col.render(row)` straight into a <View>. A bare\nstring/number child of a <View> warns on RN-web (\"Unexpected text node\") and THROWS\non real React Native — and these apps ship as web + PWA + NATIVE, so every consumer\nwas carrying a latent native crash on any table view\n[…]\nted-text-node error in either branch (string + numeric\ncolumns) and that the values still render. typecheck 0, lint 0, 34/34 unit.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(table): wrap raw cell text in <Text> — card-stack threw on native",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T08:41:59Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8e9d3568706f1b79ef94bb2905ae00fc96c73c1c",
          "body": "…dRowKeys)\n\nkefi's audit log could not adopt the shared DataTable: its expandable before/after\n-JSON row needs a full-width detail panel between a row and the next, which the\ntable had no slot for — so kefi kept a local table. Add it upstream so kefi's audit\nlog AND erevna/katalogos all gain expanda\n[…]\nctly additive: omitting both props renders byte-identically (asserted by test).\ntypecheck 0, lint 0, 31/31 unit, tsup build green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(table): 1.3.0 — expandable row detail (renderRowDetail + expande…",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-11T08:38:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "97f928ed2417186d8982d938df9136068f432b1e",
          "body": "Add an optional `unitLabel?: string` prop to `Pager`. When supplied it appends\nan already-translated unit noun to the count line, e.g. `unitLabel=\"leadership\nterms\"` renders `1-50 of 3,023 leadership terms` (v1 parity). Backward-compatible:\nwhen omitted (or empty) the count line stays the generic `f\n[…]\ntest compilations.\n\nVerified: typecheck, lint, jest (20/20, 4 suites), tsup build all green.\nPublished @dloizides/ui-tables@1.2.0.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Pager: optional unitLabel suffix on the count line (1.2.0)",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-10T08:51:03Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6f23055ace5f47046a905c2dfa7e279119502122",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add DataTable + FilterBar + Pager (1.1.0)",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-07-09T17:14:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5479fd2f1d2d5a0aa206c98dc6c9238343e537b6",
          "body": "StatCard (proven erevna+katalogos dup) sharing the @dloizides/ui-feedback UI context.\nDataTable/StatGrid deferred (kefi-only n=1). Capability Wave C1, batch 3.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Initial release: @dloizides/ui-tables 1.0.1",
          "author_name": "Demetrios Loizides",
          "author_login": "openmindednewby",
          "committed_at": "2026-06-16T08:17:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 0,
      "commits_last_year": 39,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 4,
      "active_weeks_last_year": 4,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "@dloizides/ui-tables",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "react",
            "react-native",
            "react-native-web",
            "ui",
            "table",
            "stat-card",
            "dloizides"
          ],
          "ecosystem": "npm",
          "matches_repo": true,
          "registry_url": "https://www.npmjs.com/package/@dloizides/ui-tables",
          "is_deprecated": false,
          "latest_version": "1.15.0",
          "repository_url": "https://github.com/openmindednewby/ui-tables",
          "versions_count": 21,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 3407,
          "first_published_at": "2026-06-16T08:16:56.292000Z",
          "latest_published_at": "2026-07-20T11:34:04.868000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [
        "tsconfig.json"
      ],
      "toolchain_manifests": [],
      "largest_source_bytes": 17804,
      "source_files_sampled": 67,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "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": [],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "openmindednewby",
          "commits": 38,
          "avatar_url": "https://avatars.githubusercontent.com/u/30867114?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.974
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [
        ".eslintrc.js"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 4,
            "reason": "6 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "433ee177f0f36cfc2be1eaf700906370eabf82e5",
        "ran_at": "2026-07-26T17:08:23Z",
        "aggregate_score": 1.9,
        "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-21T18:24:02Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/openmindednewby/ui-tables",
    "host": "github.com",
    "name": "ui-tables",
    "owner": "openmindednewby"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 35,
      "inputs": {
        "security": 19,
        "vitality": 32,
        "community": 33,
        "governance": 37,
        "engineering": 50
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 32,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "commits_last_year": 39,
              "human_commit_share": 1,
              "days_since_last_push": 4,
              "active_weeks_last_year": 4
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "4/52 weeks with commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "39 commits in the last year",
                "points": 14.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 39
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "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": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 33,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          },
          {
            "key": "ecosystem_adoption",
            "band": "moderate",
            "name": "Ecosystem adoption (downloads)",
            "note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "registry_dependents"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 59,
            "inputs": {
              "packages": [
                "@dloizides/ui-tables"
              ],
              "dependents": null,
              "ecosystems": "npm",
              "total_downloads": null,
              "monthly_downloads": 3407
            },
            "components": [
              {
                "key": "monthly_downloads",
                "name": "Monthly downloads",
                "detail": "3,407 downloads/month across npm",
                "points": 47.1,
                "status": "partial",
                "details": [
                  {
                    "code": "downloads_monthly",
                    "params": {
                      "count": 3407,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 80
              },
              {
                "key": "registry_dependents",
                "name": "Registry dependents",
                "detail": "not reported by this ecosystem",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_reported_by_this_ecosystem",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 37,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 12,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.974
            },
            "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 97% of commits",
                "points": 0.6,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 97
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 52,
            "inputs": {
              "followers": 8,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "openmindednewby",
              "public_repos": 78,
              "account_age_days": 3273
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "8 followers of openmindednewby",
                "points": 6.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 8,
                      "login": "openmindednewby"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "78 public repos, account ~8 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 78
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 8
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "@dloizides/ui-tables"
              ],
              "ecosystems": "npm",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on npm",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "npm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "21 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 21
                    }
                  }
                ],
                "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": 50,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 50,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".eslintrc.js",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "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": null,
                "points": 0,
                "status": "missed",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 19,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 19,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 1.9
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "6 existing vulnerabilities detected",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 65,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.974,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "38 of 39 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 38,
                      "sampled": 39
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 71,
            "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": true,
              "typecheck_configs": [
                "tsconfig.json"
              ],
              "agent_commit_share": 0.615,
              "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": ".eslintrc.js",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".eslintrc.js"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "24 of the last 39 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 24,
                      "sampled": 39
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "TypeScript",
              "largest_source_bytes": 17804,
              "source_files_sampled": 67,
              "oversized_source_files": 0
            },
            "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": "0/67 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 67,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T17:08:28.215785Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/o/openmindednewby/ui-tables.svg",
  "full_name": "openmindednewby/ui-tables",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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