Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 14:01 UTC

Kong / kong-mesh-v3-readiness

Kuma 3.0 upgrade readiness preflight CLI for Kong Mesh / Kuma 2.x control planes

GoSin licencia detectada★ 0 estrellas⑂ 0 forksdesde jun 2026Ver en GitHub ↗

Kong/kong-mesh-v3-readiness tiene un índice de salud de 56 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (83/100) y la más baja, Community & Adoption (12/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

56
global / 100
Moderado

Índice de salud del software

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

56
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

KongOrganización
1773 seguidores581 repositorios públicosdesde ago 2011

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/Kong/kong-mesh-v3-readinessv0.4.0-4hace 30 días

Métricas por categoría

Vitalidad

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

68Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
2.1/36Cadencia de commits — 3/52 semanas con commits
14.7/18Volumen de commits — 42 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_year42
human_commit_share1
days_since_last_push0
active_weeks_last_year3
Cómo se puntúa
27/27Publica versiones — 4 versiones publicadas
36/36Recencia de las versiones — última versión hace 30 días
27/27Cadencia de publicación — una versión cada ~0,7 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count4
latest_release_tagv0.4.0
releases_from_tagsno
days_since_latest_release30
mean_days_between_releases0,7

Comunidad y Adopción

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

12Crítico · 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
0/22.5Licencia — no se detectó ningún archivo de licencia
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

63Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
38.2/38.3Aceptación de PR — 28/28 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs28
open_issues0
closed_issues10
issue_closed_ratio1
closed_unmerged_prs0
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
23.4/25Alcance del propietario — 1773 seguidores de Kong
25/25Trayectoria — 581 repos públicos, cuenta de ~14 años
Datos de entrada utilizados
followers1773
owner_typeOrganization
is_verified
owner_loginKong
public_repos581
account_age_days5467
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 30 días
12/20Historial de versiones — 4 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/Kong/kong-mesh-v3-readiness
ecosystemsgo
any_deprecatedno
min_days_since_publish30

Calidad de Ingeniería

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

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

Documentación

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

42En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.2/2.5CI-Tests — 26 out of 27 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Licencia — license file not detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
5/5Pinned-Dependencies — all dependencies are pinned
4/5SAST — SAST tool is not run on all commits -- score normalized to 8
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate4,2

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.

75Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 42 de 42 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesCLAUDE.md
agent_instruction_max_bytes3731
Cómo se puntúa
18/18Arranque con un solo comando — mise.toml
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
0/10Entorno reproducible
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 42
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
10/10OpenSSF Scorecard: Pinned-Dependencies — all dependencies are pinned
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_filesmise.toml
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/20 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes59.921
source_files_sampled20
oversized_source_files0
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

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

Más detalle

OpenSSF Scorecard 4.2 / 10
4.2agregado

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-25 14:00 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
9CI-Tests26 out of 27 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
10Pinned-Dependenciesall dependencies are pinned
8SASTSAST tool is not run on all commits -- score normalized to 8
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Todas las dependencias 0

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 0 paquetes directos y 0 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Avisos de dependencias sin evaluar

El cotejo de avisos no pudo ejecutarse para este informe: No resolved dependencies to assess

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "team-mesh"
      ],
      "is_fork": false,
      "size_kb": 311,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 273658
      },
      "pushed_at": "2026-07-24T14:38:50Z",
      "created_at": "2026-06-17T12:14:37Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-24T14:38:52Z",
      "description": "Kuma 3.0 upgrade readiness preflight CLI for Kong Mesh / Kuma 2.x control planes",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://konghq.com",
      "name": "Kong",
      "type": "Organization",
      "login": "Kong",
      "company": null,
      "location": "San Francisco",
      "followers": 1773,
      "avatar_url": "https://avatars.githubusercontent.com/u/962416?v=4",
      "created_at": "2011-08-06T02:08:16Z",
      "is_verified": null,
      "public_repos": 581,
      "account_age_days": 5467
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-06-25T11:42:04Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-06-24T17:05:59Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-06-24T15:11:00Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-23T12:32:33Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "987787ed98b2c69bf047ecf97d872c14083aa54e",
          "body": "* refactor(audit): prune and refine 3.0 checks\n\nAudit-side changes for the 3.0 preflight report:\n\n- Remove the Gateway-in-Dataplane check: it fires for delegated\n  gateways too, so it is not a 3.0 signal.\n- Remove the container-resources and Gateway-API/GAMMA manual\n  checks.\n- Stop emitting the wor\n[…]\nd), and a comment referenced a\nnon-existent categoryRemoved identifier.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(audit): prune and refine 3.0 checks (#37)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-07-24T14:38:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "deb593fb3c97e2a7060a623865f3d98996d80c60",
          "body": "* ci(actions): block merge on stale example reports\n\nRe-render examples/html from the committed JSON fixtures in CI and fail if\nthe result differs from what is checked in, so a template change that\nskips regeneration cannot merge.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* ci(acti\n[…]\nendered HTML\nfails the gate; a bare `git diff` ignores untracked files.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "ci(actions): block merge on stale example reports (#26)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T09:38:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e8abb37085a9a057f1e2dbf86e72580841f612cc",
          "body": "MeshGlobalRateLimit is a Kong Mesh enterprise policy removed entirely in\n3.0 with no replacement, but the preflight had no check for it, so a CP\ncarrying these policies got a clean report.\n\nAdd checkRemovedEnterprisePolicies: list meshglobalratelimits and flag\nevery instance as a blocker. List via l\n[…]\nrage gap that flips the run to\ninconclusive.\n\nFix the deprecated-features doc row that wrongly claimed only the legacy\nOPA policy is removed.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): flag removed MeshGlobalRateLimit (#25)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T08:48:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8a8bc6cfcac5a2da23a81363e388948c20f1f1ac",
          "body": "* feat(report): redesign report + example gallery\n\nRebuild the embedded HTML report (html.go) to stay readable on large\nmulti-mesh estates, and add a static example gallery rendered from\ncommitted fixtures.\n\nReport:\n- sticky sidebar table-of-contents with live per-severity/per-group\n  counts and scr\n[…]\n CLI's own error) only when the render fails; a normal run stays quiet.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): redesign report + example gallery (#24)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T08:06:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e9527adae41408d3366b6ece401333a94a45784",
          "body": "* refactor(report): share JSON render helper\n\nrenderJSON and renderClassificationJSON were byte-identical;\nextract marshalIndentJSON(any) and drop the now-unused\nencoding/json import from classify_model.go.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* docs(examples): drop stale mark\n[…]\ninstall does not force\nCGO_ENABLED=0) in favor of the stdlib-only fact.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "chore(repo): prune stale docs/examples, simplify README (#23)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T06:57:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "07074f4fdf03638f0df820f3f19259ee29702297",
          "body": "* fix(client): clearer error for non-Kuma endpoint\n\nA 200 with a non-JSON body (HTML login/ingress page, wrong subpath\nlike /gui) decoded as the CP index leaked a raw \"invalid character\n'<'\" error. Treat a 200 whose body is not a JSON index as not-a-Kuma\nCP so audit() reports the friendly message. C\n[…]\nate the\nrest with their distinct message. Add a body-read-timeout test.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "fix(client): clearer error for non-Kuma endpoint (#22)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T06:26:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aab484ee3e0f3d0bb1567c94690b90efbb147fa4",
          "body": "* feat(report): link blockers to Kong Mesh 3.0 docs\n\nEach blocker finding now carries a doc URL pointing at the Kong\nMesh page that explains its 3.0 replacement API/feature, surfaced\nin the JSON contract (doc, omitempty) and as a gated hyperlink on\nevery HTML finding card.\n\nNew addDoc() carries the \n[…]\n a whitespace-tolerant regex so spacing variants can't\nevade the guard.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): link blockers to Kong Mesh 3.0 docs (#21)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-25T04:37:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6dbf4f767b938b45c013a9048c84a19d5c165ce1",
          "body": "Add .golangci.yml modeled on kumahq/kuma (same pinned 2.12.2),\ntrimmed for this stdlib-only single-package CLI: drop Kuma-only\nlinters/rules (protobuf depguard, importas aliases, ginkgolinter,\nloggercheck, tracing forbidigo), use gomodguard_v2, point gci/gofumpt\nat this module. Gofumpt+gci formattin\n[…]\nuiltin\nshadow), drop always-constant targetMinor param (unparam), unname\nreturns, modernize loops (slices.Backward/Contains, range-int, min).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "build(lint): kuma golangci config + nilaway gate (#20)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:48:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d33e0fd00c62c763d8926d5b27c1e5a6eb24964a",
          "body": "Add detail + kubectl/jq detector command to the Gateway\nAPI / GAMMA manual check, and gate it on observed\nKubernetes: the dropped support is gateway.networking.k8s.io\nCRDs, absent on Universal.\n\nCommand lists Kuma GatewayClasses, the Gateways bound to\nthem and Service-attached (GAMMA) HTTPRoutes; empty output\nmeans nothing to migrate. Refresh golden reports.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): enrich gateway-api manual check (#17)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:44:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de1b3685f51da84d724333cd00bf9cf950b682de",
          "body": "Detail + endpoint code block for the old-inspect-API card.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): inspect-API manual check detail (#19)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:38:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a56440b61210102ad9fe124ec1491de8ced6457c",
          "body": "* feat(report): HMAC256 signing-key detector card\n\nWire a detail + dual-platform (kubectl/kumactl) detector script into\nthe HMAC256 signing-key manual check, which was title-only. The script\nreads the token-signing-key Secrets and classifies each as RSA or a\nlegacy HMAC256 key; it never prints key m\n[…]\nhole\nscript is safe to paste in either a Kubernetes or Universal shell.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): HMAC256 signing-key detector card (#18)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:27:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "506cb625a49a6a635ef8edba6dc276d61a1b9393",
          "body": "Read the coredns dependency kuma-dp reports in\n/dataplanes+insights (already fetched by checkDataplaneVersions)\nand block any proxy still on the legacy embedded-DNS path. This\ndetection is free and covers every connected proxy.\n\nDrop the DNS manual-check item (now auto-detected) and keep\n--inspect-dataplanes as the deep Envoy-config confirmation.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): auto-detect legacy CoreDNS dataplanes (#16)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T19:01:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fae2afed055bc6bb31c8cf0fb1af46ad07a94b58",
          "body": "Move \"Pod resources instead of container resources\" off the\nalways-on list into the Kubernetes-gated cards (report.k8sObserved),\nadding an explanation and a kubectl version self-check command via\nthe manualCheck{title,detail,command} mechanism from #14. Universal\nand non-k8s runs no longer show it.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): pod-resources k8s manual check card (#12)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T18:27:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e6173b5f35d43a817ef415614fd41865b56e7c2",
          "body": "* feat(report): k8s mesh-label manual check card\n\nAdd a Kubernetes-only manual check for the kuma.io/mesh\nannotation->label deprecation, rendered as a warning-style\ncard with an explanation and a copyable kubectl validation\ncommand (clipboard API + execCommand fallback for file://).\n\nManual checks b\n[…]\ns render as\nNamespace/<name> instead of an ambiguous Namespace//<name>.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): k8s mesh-label manual check card (#14)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T17:20:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8140a30d31ed033c8b41f523411885c8e562831d",
          "body": "ZoneIngress/ZoneEgress are replaced by the unified Zone Proxy in\n3.0, so their presence is an actionable upgrade item, not an\ninformational count. Elevate the \"Zone proxies\" finding from info\nto blocker (gates CI, exit 1) and make the detail actionable.\n\nRemaining info findings are non-actionable co\n[…]\nled-dataplane inspection coverage; no-zones-connected).\n\nUpdate render/classify tests, golden ref, severity-rule table,\nREADME and test docs.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): flag zone proxies as blocker (#15)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T17:16:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "835d0304deca8dd6f0eb35885e287e363fdb3a76",
          "body": "* feat(report): tables + global group in classify\n\nClassify report repeated the same cross-cutting fixes (inline mTLS,\nshared MeshTimeout/MeshTrafficPermission defaults) in nearly every\nsuite, drowned in per-row emojis.\n\n- Lift recurring non-removable fixes (>=3 suites) into one Global\n  migrations \n[…]\n. Word as\n\"when present\" to match the renderer (len(m.Global)==0 skip).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): tables + global group in classify (#13)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T17:04:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c23e9bc67c7ce69dc55c8af1b21d4dd8672d3d64",
          "body": "Convert the manual \"adopt Workload for proxy grouping\" item into\nauto-detected findings from CP config and Dataplane labels:\n\n- k8s: warn when runtime.kubernetes.workloadLabels is unset\n  (kuma.io/workload falls back to the pod ServiceAccount)\n- Universal: blocker for a Dataplane missing the kuma.io\n[…]\ng < info) that\ndoes not gate CI; a run with only warnings stays clean (exit 0).\nRender it across JSON + HTML; summary gains a warnings count.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(audit): detect Workload grouping readiness (#10)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T16:39:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f34eb3aa053d4a65a66f3d846efa37559c0e1db4",
          "body": "* refactor(audit): drop zone-pinned manual check\n\nEvery legacy ExternalService is already flagged a blocker by\ncheckLegacyResources, so the manual reminder added no coverage.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* refactor(audit): drop observability manual check\n\nRemove the 'install observability' manual reminder from the\nmanual-checks list.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(audit): drop redundant manual checks (#11)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T16:29:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f87cc90320c5112eb0335c7a6a392a594016cb74",
          "body": "Flag any control plane (and, on a global, every connected zone) not on\nthe latest 2.14 patch — the only supported 3.0 upgrade source. Latest\npatch resolved from kumahq/kuma GitHub releases (Link-paginated, on its\nown timeout); --latest-version overrides for offline/deterministic runs.",
          "is_bot": false,
          "headline": "feat(audit): check control plane patch version (#9)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T15:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04697df6949d2e4fe4d5c7c68a03c70ab916078e",
          "body": "* ci(actions): auto-bump+tag, allow manual version\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* ci(actions): tighten semver prerelease regex\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "ci(actions): auto-bump+tag, allow manual version (#8)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T15:09:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "675231835f27bceb85188fdf3bd85dd551576059",
          "body": "Prettify the --classify markdown (the Kuma e2e job summary): wrap\neach env in a collapsible <details open> with headline counts, nest\neach test suite in its own <details>, add a per-recommendation summary\ntable, and mark severity (remove/rewrite) and category with emoji. The\n~2,000-line job summary \n[…]\nay: --classify\ningests the audit's per-spec JSON snapshots. The JSON contract for both\nreports is unchanged. Tests and docs updated to match.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): collapsible emoji classify report (#7)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T14:57:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b79e0b030790920445d9b58821c6b6daaee9e018",
          "body": "to[].targetRef.kind: Mesh is valid in Kuma 3.0 (canonical\nall-outbound form, and the only kind permitted for\nMeshGateway-targeted policies); MeshHTTPRoute is valid too. The\naudit flagged both as removed, producing false-positive blockers\non the CP's own auto-generated default policies (verified agai\n[…]\nven ones with no finding. Make ref() pure and count via\ncountSystem only when a resource actually yields a finding\n(tracked by report.total).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "fix(audit): allow to[] targetRef Mesh kind (#6)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T14:42:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81232b7921e7bc7d118110f548fd38aef806a784",
          "body": "* feat(report): group findings into sections\n\nFindings are organized into six top-level groups above the existing\ncategory subheadings: Control plane, Mesh object, Policies, Removed\nresources, Data plane & workloads, Other. Each category maps to one\ngroup via a single table; an unmapped category fal\n[…]\nender identically. Adds a regression test for\nthe group-less load path.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(report): group findings into sections (#5)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T13:52:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e173b2e8af58d9c5ee0368c2bc1fde5aa3d14c7",
          "body": "* feat(html): clickable mesh chips filter findings\n\nMesh chips in the report header become toggle buttons; clicking one\nfilters the findings list to that mesh, narrowing each finding's\nexamples and counts. Control-plane-wide findings (no mesh) stay\nvisible under any mesh filter since they apply to e\n[…]\nops the earlier per-mesh floor marker,\nwhich understated the same case.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(html): clickable mesh chips filter findings (#4)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-24T13:18:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a8066f0f52e8029f4ddc137d151042dd155d2eb",
          "body": "* feat(preflight): add e2e classification mode\n\nAdd a --classify mode that reuses the deprecation catalog (legacyMeshScoped, audit.go) to classify an e2e test tree by which Kuma-3.0-removed features each test exercises: static source scan + optional per-spec snapshot ingestion, grouped into remove/r\n[…]\natch.\n- Skip (do not abort on) a non-report .json in the snapshots dir.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): add e2e classification + release (#2)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-23T12:29:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02ca07b77f06679cf764b51776c9e858ac717c90",
          "body": "* ci(actions): lint, test, build on PR and main\n\nAdd a CI workflow that runs gofmt, go vet, golangci-lint, go test,\nand go build on every pull request and on pushes to main. Tooling is\npinned via mise (go + golangci-lint).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n* ci(actions): go\n[…]\nfmt already recurses; this just\nwidens coverage and removes ambiguity.)\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>\n\n---------\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "ci(actions): lint, test, build on PR and main (#3)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-23T12:19:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dea659c5c852719dc4cfa181f710f4c26c4e400f",
          "body": "Remove the warning severity tier; every actionable finding is now a\nblocker (exit 1). Only blocker + info remain. Drop summary.warnings and\nbump reportSchema to v2 (incompatible JSON change).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): treat all warnings as blockers (#1)",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-22T11:11:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d09c2cac2564869cf3c24b7ac97b89e9532406c",
          "body": "Detect global mode from /config and source each zone's control-plane\nconfig from /zones+insights (ZoneInsight), so one run against the\nglobal covers the whole multizone estate. The global keeps only the\nglobal-on-k8s blocker; data-plane config checks run per zone, tagged\n\"zone <name>\". The CP mode (\n[…]\n failures (auth, timeout) to\ncoverage gaps instead of aborting the run, and document --token for\nKong Mesh CPs that gate /config behind RBAC.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): audit all zones from global CP",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-22T09:13:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f6b2f7d9cd49e64eab382f094210dfb530e3b76",
          "body": "- CLI README: add --inspect-dataplanes flag and new checks.\n- test-setup §6 + test-plan B-15..B-17: cover /config, dataplane\n  version/metrics, and opt-in Envoy DNS-filter inspection.\n- adding-checks rule: refresh the severity table.\n- Add a captured HTML example report (examples/html).\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(preflight): document API-derived checks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-19T08:11:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec342f4289a576eea46e3a846a0049860ed2a17b",
          "body": "Audit settings the CP exposes that the resource scan can't see:\n\n- checkControlPlaneConfig (GET /config): blockers for global-on-k8s,\n  autoReachableServices, eBPF, unified-naming off, inbound-tags\n  enabled; warnings for deltaXds/KDS-watchdog/sidecar off.\n- checkDataplaneVersions (/dataplanes+insig\n[…]\nplanes N: opt-in Envoy config-dump scan for the\n  legacy envoy.filters.udp.dns_filter.\n- Promote meshServices.mode != Exclusive to a blocker.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): add CP config + dataplane checks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-19T08:11:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4fbef182bf9ddecb615ecffdef2a1d3b55fea7a0",
          "body": "- drop countBlockers; use count(blocker)\n- audit() check chain -> slice loop\n- failureContent delegates to renderFormat\n- add listIfServed (404 = not-applicable, not a gap)\n- add unmarshalSpec parse-error guard\n- table-drive Mesh hasJSON blockers\n\nNo behavior change; tests/vet/gofmt/lint clean.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(preflight): dedupe audit + render helpers",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T13:32:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "295c74747bb842eed43a4a9925ddd6cd175639da",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "test(preflight): parametrize dataplane checks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T13:15:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "93ee8bde283a3308c247f95fc227bb5212a9dcd6",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "test(preflight): parametrize mesh deprecations",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T13:02:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15133cfed14aba69f9d45f215fd5c442376336ae",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(claude): document golden test harness",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:47:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "021828e3d8344bb9fcf9cbe479a72608f8203d2a",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "test(preflight): add mock-CP golden JSON tests",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:46:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9524b6a590f619d4a19ef93d7bfd963ca419696d",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "refactor(module): rename module path",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bde102c0d6a82b81c769d8a294015ce298d001b2",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(claude): add project instructions and rules",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:16:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3a7c1a34b903140c42c7c4251b2919fbbe93c4a",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "build(mise): add build, test, check tasks",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1762328946d9856ce8ed7411e1593769d3841f5a",
          "body": "Signed-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): add model + HTML/JSON renderers",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T12:16:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e107c9270b7f5e26717ceea06b9149e7911d3de",
          "body": "Blocker count is already in the header and the Blockers section\nlists them; the redundant banner line is removed. Examples\nregenerated. Adds mise.toml toolchain pin.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "fix(report): drop blocker banner from summary",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T09:28:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aea7d16e51009cc4fe061e93874024cb1a111ed0",
          "body": "Captured against live 2.x CPs with the test-setup fixtures. Shows the\nk8s-vs-universal policy-role:system labeling difference.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "docs(examples): add real k8s + universal reports",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T09:18:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "809ee7b6b9689fed31311a063738d68d58fdd25e",
          "body": "Standalone repo for the Kuma 2.x -> 3.0 upgrade pre-flight CLI\nand its manual test plan/results/setup. stdlib-only; audits a CP\nover REST and reports blockers/warnings/manual checks. Verified\nagainst k3d (k8s) and a local universal CP.\n\nSigned-off-by: Marcin Skalski <skalskimarcin33@gmail.com>",
          "is_bot": false,
          "headline": "feat(preflight): import v3-readiness audit tool",
          "author_name": "Marcin Skalski",
          "author_login": "Automaat",
          "committed_at": "2026-06-17T09:15:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 42,
      "latest_release_at": "2026-06-25T11:42:04Z",
      "latest_release_tag": "v0.4.0",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 30,
      "mean_days_between_releases": 0.7
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 25,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/Kong/kong-mesh-v3-readiness",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/Kong/kong-mesh-v3-readiness",
          "is_deprecated": false,
          "latest_version": "v0.4.0",
          "repository_url": "https://github.com/Kong/kong-mesh-v3-readiness",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-06-25T09:38:19Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 30
        }
      ]
    },
    "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": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "mise.toml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 59921,
      "source_files_sampled": 20,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3731
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "scope": "repository_graph",
        "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": [
        "go"
      ],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 28,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 10,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "Automaat",
          "commits": 42,
          "avatar_url": "https://avatars.githubusercontent.com/u/9156357?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "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": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 9,
            "reason": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 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": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 10,
            "reason": "all dependencies are pinned",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 8,
            "reason": "SAST tool is not run on all commits -- score normalized to 8",
            "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": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "987787ed98b2c69bf047ecf97d872c14083aa54e",
        "ran_at": "2026-07-25T14:00:51Z",
        "aggregate_score": 4.2,
        "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-24T14:39:50Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-24T14:38:48Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/Kong/kong-mesh-v3-readiness",
    "host": "github.com",
    "name": "kong-mesh-v3-readiness",
    "owner": "Kong"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 56,
      "inputs": {
        "security": 42,
        "vitality": 68,
        "community": 12,
        "governance": 63,
        "engineering": 83
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 68,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 53,
            "inputs": {
              "commits_last_year": 42,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "42 commits in the last year",
                "points": 14.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 42
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v0.4.0",
              "releases_from_tags": false,
              "days_since_latest_release": 30,
              "mean_days_between_releases": 0.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 30 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "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": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 63,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 28,
              "open_issues": 0,
              "closed_issues": 10,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "28/28 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 28,
                      "decided": 28
                    }
                  }
                ],
                "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": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 78,
            "inputs": {
              "followers": 1773,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "Kong",
              "public_repos": 581,
              "account_age_days": 5467
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1,773 followers of Kong",
                "points": 23.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1773,
                      "login": "Kong"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "581 public repos, account ~14 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 581
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/Kong/kong-mesh-v3-readiness"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 30
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 30 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 30
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 83,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "team-mesh"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "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": "1 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 42,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 4.2
            },
            "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 is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "26 out of 27 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "all dependencies are pinned",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 8",
                "points": 4,
                "status": "partial",
                "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": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 75,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3731
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "42 of 42 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 42,
                      "sampled": 42
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "mise.toml"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "mise.toml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "mise.toml"
                    }
                  }
                ],
                "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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 42",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 42
                    }
                  }
                ],
                "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": "all dependencies are pinned",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 59921,
              "source_files_sampled": 20,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/20 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 20,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [],
  "report_type": "repository",
  "generated_at": "2026-07-25T14:01:07.062624Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/Kong/kong-mesh-v3-readiness.svg",
  "full_name": "Kong/kong-mesh-v3-readiness",
  "license_state": "absent",
  "license_spdx": null
}

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

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

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