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

kdex-tech / kdex-crds

The APIs for the KDEX CRDs

GoApache-2.0★ 0 estrellas⑂ 0 forksdesde sept 2025Ver en GitHub ↗

kdex-tech/kdex-crds 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 Vitality (90/100) y la más baja, Community & Adoption (24/100). Se actualizó por última vez hace 3 días. 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

kdex-techOrganización
2 seguidores17 repositorios públicosdesde may 2023

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

Métricas por categoría

Vitalidad

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

90Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 3 días
25.6/36Cadencia de commits — 37/52 semanas con commits
18/18Volumen de commits — 601 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year601
human_commit_share1
days_since_last_push3
active_weeks_last_year37
Cómo se puntúa
27/27Publica versiones — 32 versiones publicadas
36/36Recencia de las versiones — última versión hace 3 días
27/27Cadencia de publicación — una versión cada ~3,8 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count32
latest_release_tagv0.14.234
releases_from_tagsno
days_since_latest_release3
mean_days_between_releases3,8

Comunidad y Adopción

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

24Crí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
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

46En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
43.6/46.8Resolución de issues — 93% de issues cerradas
38.2/38.3Aceptación de PR — 2/2 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs2
open_issues1
closed_issues14
issue_closed_ratio0,933
closed_unmerged_prs0
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
3.4/25Alcance del propietario — 2 seguidores de kdex-tech
15.6/25Trayectoria — 17 repos públicos, cuenta de ~3 años
Datos de entrada utilizados
followers2
owner_typeOrganization
is_verified
owner_loginkdex-tech
public_repos17
account_age_days1174

Calidad de Ingeniería

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

80Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 2 out of 2 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno
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
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
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?

31En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 2 out of 2 merged PRs checked by a CI test -- score normalized to 10
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
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 28 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,1
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.

Preparación para IA

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

59Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
17.1/40Historial de commits legible — 32 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,32
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
10/10Práctica demostrada con agentes — 20 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,2
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
53.2/55Tamaños de archivo manejables — 2/61 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes109.663
source_files_sampled61
oversized_source_files2
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — samples
Datos de entrada utilizados
example_dirssamples
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • Could not fetch go package 'kdex.dev/crds' from its registry
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.1 / 10
3.1agregado

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 05:45 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests2 out of 2 merged PRs checked by a CI test -- score normalized to 10
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
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
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
0Vulnerabilities28 existing vulnerabilities detected
Dependencias directas 14
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/go-logr/zaprv1.3.0go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogo.uber.org/zapv1.27.1go.mod
Gogolang.org/x/textv0.34.0go.mod
Gok8s.io/apiv0.35.2go.mod
Gok8s.io/apimachineryv0.35.2go.mod
Gosigs.k8s.io/controller-runtimev0.23.1go.mod
Gosigs.k8s.io/gateway-apiv1.5.0go.mod
Gosigs.k8s.io/yamlv1.6.0go.mod
Gogithub.com/Masterminds/sprig/v3v3.3.0go.mod
Gogithub.com/daveshanley/vacuumv0.24.0go.mod
Gogithub.com/getkin/kin-openapiv0.133.0go.mod
Gogithub.com/go-logr/logrv1.4.3go.mod
Gogithub.com/kdex-tech/dmapperv0.1.1go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1550,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 304676,
        "Makefile": 6638
      },
      "pushed_at": "2026-07-22T03:55:35Z",
      "created_at": "2025-09-14T19:59:03Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-22T03:55:43Z",
      "description": "The APIs for the KDEX CRDs",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "Organization",
      "login": "kdex-tech",
      "company": null,
      "location": null,
      "followers": 2,
      "avatar_url": "https://avatars.githubusercontent.com/u/132834090?v=4",
      "created_at": "2023-05-07T15:01:59Z",
      "is_verified": null,
      "public_repos": 17,
      "account_age_days": 1174
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.14.234",
          "kind": "patch",
          "published_at": "2026-07-22T03:57:08Z"
        },
        {
          "tag": "v0.14.233",
          "kind": "patch",
          "published_at": "2026-07-19T01:39:30Z"
        },
        {
          "tag": "v0.14.232",
          "kind": "patch",
          "published_at": "2026-07-18T23:02:14Z"
        },
        {
          "tag": "v0.14.231",
          "kind": "patch",
          "published_at": "2026-07-09T16:50:49Z"
        },
        {
          "tag": "v0.14.230",
          "kind": "patch",
          "published_at": "2026-07-06T02:47:23Z"
        },
        {
          "tag": "v0.14.229",
          "kind": "patch",
          "published_at": "2026-07-05T19:44:11Z"
        },
        {
          "tag": "v0.14.228",
          "kind": "patch",
          "published_at": "2026-07-05T19:13:25Z"
        },
        {
          "tag": "v0.14.227",
          "kind": "patch",
          "published_at": "2026-07-05T18:24:40Z"
        },
        {
          "tag": "v0.14.226",
          "kind": "patch",
          "published_at": "2026-07-01T19:41:35Z"
        },
        {
          "tag": "v0.14.225",
          "kind": "patch",
          "published_at": "2026-06-18T05:07:30Z"
        },
        {
          "tag": "v0.14.224",
          "kind": "patch",
          "published_at": "2026-06-11T02:00:15Z"
        },
        {
          "tag": "v0.14.223",
          "kind": "patch",
          "published_at": "2026-06-02T16:44:37Z"
        },
        {
          "tag": "v0.14.222",
          "kind": "patch",
          "published_at": "2026-05-30T20:43:58Z"
        },
        {
          "tag": "v0.14.221",
          "kind": "patch",
          "published_at": "2026-05-28T02:56:55Z"
        },
        {
          "tag": "v0.14.220",
          "kind": "patch",
          "published_at": "2026-05-26T13:39:49Z"
        },
        {
          "tag": "v0.14.219",
          "kind": "patch",
          "published_at": "2026-05-26T02:45:24Z"
        },
        {
          "tag": "v0.14.218",
          "kind": "patch",
          "published_at": "2026-05-25T01:24:40Z"
        },
        {
          "tag": "v0.14.217",
          "kind": "patch",
          "published_at": "2026-05-24T18:09:15Z"
        },
        {
          "tag": "v0.14.216",
          "kind": "patch",
          "published_at": "2026-05-24T17:52:03Z"
        },
        {
          "tag": "v0.14.215",
          "kind": "patch",
          "published_at": "2026-05-23T16:05:57Z"
        },
        {
          "tag": "v0.14.213",
          "kind": "patch",
          "published_at": "2026-05-20T16:18:42Z"
        },
        {
          "tag": "v0.14.212",
          "kind": "patch",
          "published_at": "2026-05-20T15:00:20Z"
        },
        {
          "tag": "v0.14.211",
          "kind": "patch",
          "published_at": "2026-05-19T15:19:37Z"
        },
        {
          "tag": "v0.14.210",
          "kind": "patch",
          "published_at": "2026-05-18T19:54:04Z"
        },
        {
          "tag": "v0.14.209",
          "kind": "patch",
          "published_at": "2026-05-16T20:31:48Z"
        },
        {
          "tag": "v0.14.208",
          "kind": "patch",
          "published_at": "2026-05-16T19:05:45Z"
        },
        {
          "tag": "v0.14.207",
          "kind": "patch",
          "published_at": "2026-05-16T16:42:30Z"
        },
        {
          "tag": "v0.14.206",
          "kind": "patch",
          "published_at": "2026-05-16T03:45:54Z"
        },
        {
          "tag": "v0.14.205",
          "kind": "patch",
          "published_at": "2026-05-14T20:06:59Z"
        },
        {
          "tag": "v0.14.204",
          "kind": "patch",
          "published_at": "2026-03-31T00:40:52Z"
        },
        {
          "tag": "v0.14.203",
          "kind": "patch",
          "published_at": "2026-03-30T19:24:43Z"
        },
        {
          "tag": "v0.14.202",
          "kind": "patch",
          "published_at": "2026-03-30T19:16:37Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "108d10a2dcd9270e04aa711f4c6a010ca20c0d69",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.234",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-22T03:55:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb1db3c1d9cf8f0a1685044225b692c1e046df51",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.233",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-19T01:37:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26051e10625ab9a49374d2031d6bc0fdbb6b3f8d",
          "body": "…imator (#17)\n\nThe v0.14.232 CRD fails to install on any cluster: the apiserver CEL cost\nestimator rejects PolicyRule's four rule-level validations because the array\nfields (resources/verbs/resourceNames/scopes) and their string items were\nunbounded, so it assumes worst-case. `scopes.all(s, !s.conta\n[…]\nspecs\npass). Surfaced by the Task 4 integration test — the Go-decode Task 1 review\ncould not catch an apiserver-side cost failure.\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(kdexrole): bound PolicyRule fields so the CEL passes the cost est…",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-19T01:37:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2632fbd72278f131aed7a0cf1bd86f8fca1172f5",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.232",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-18T23:00:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca4dbd44243b2c43998d940f6fb785070da4beda",
          "body": "…(#16)\n\n* docs(spec): opaque capability grants on KDexRole (PolicyRule.scopes)\n\nDesign for kdex-crds#15: give PolicyRule a first-class `scopes` field for\nopaque (colon-less) capability entitlements, immune to wildcard grants. Each\nrule becomes structured (resources+verbs) XOR opaque (scopes), enforc\n[…]\nn in a scope. Resolves kdex-crds#15 (grant side).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(kdexrole): opaque capability grants via PolicyRule.scopes (#15) …",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-18T22:59:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4a39f08e338ef1292b26af73638f64dbc36ee24a",
          "body": "Scaling was reachable only via spec.origin.executable.scaling, so\nsource/generator/backend origins could not configure autoscaling even\nthough delivery is origin-agnostic. Move it to a top-level spec.scaling\nfield and drop Executable.Scaling (greenfield, pre-1.0 — no shim).\n\nCloses #14\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: promote Scaling from Executable to top-level KDexFunctionSpec",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-09T16:48:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9e1ebb87142e1a0463672a86a36b19542663d960",
          "body": "…#14)\n\nRefs #14\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: implementation plan for promoting Scaling to KDexFunctionSpec (…",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-09T16:44:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b9dad56e36823c398df42e1bc576f3cc6a9fd1ea",
          "body": "Greenfield breaking move: add Spec.Scaling, remove Executable.Scaling.\nCross-repo (crds API + host-manager consumer + nexus-manager dep bump),\nwith a green-main sequencing via updateCrdUsage.sh -t -n.\n\nRefs #14\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: design for promoting Scaling to top-level KDexFunctionSpec (#14)",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-09T16:18:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "88ad0de5e11323bb1cfc2eec4e305326db1a8c9a",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.230",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-06T02:45:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "640659715bc9fd89e70c7d6d77500f5e35a8b7af",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.229",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-05T19:42:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9700d9574fb332fa6081390da1390be39ea7d2a",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.228",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-05T19:11:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff4f2d5fbe0d02962c26e980293b8955dbdb0529",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.227",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-05T18:22:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a174c37e37f5f382a6f771ec095bbbb1032576e6",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "delete old generated",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-04T18:33:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11f5dbe912cd26d850ce8d2ce2f0cb96bf22b9d9",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add spec.auth.mintToken to KDexHost",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-07-01T19:39:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d514db446219572b758220878cf061218d7a7e9c",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.225",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-06-18T05:05:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b7c592b45445799bf882ccdd98498651623f3f53",
          "body": "…-in)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(auth): add spec.auth.dynamicClientRegistration (RFC 7591 DCR opt…",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-06-18T05:01:58Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "695f3e216a524781069c0ea140613272945eeac4",
          "body": "…r chart values, observer pod placement\n\n- NexusConfiguration: add optional DefaultImageSecretRef / DefaultNpmSecretRef\n  (*KDexObjectReference) so the consuming operator can apply a cluster-default\n  credential as a fallback for the default registries (#11).\n- Chart: add optional Values (*runtime.R\n[…]\ncompatible. Regenerated deepcopy, CRD manifests, and docs;\nadded TestLoadConfiguration round-trip cases for the new config fields.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "configuration + Observer: cluster-default registry creds, host-manage…",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-06-11T01:57:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5aa1e2f19f653f99c6261b82dd9d1b695131f2a6",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.223",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-06-02T16:42:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9ee29d730fce27093919fa4e82f24c291587ba8",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.222",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-30T20:42:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d71f083a9ac7285fa50569d9841e54a0af3449a",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "update to latest dmapper",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-28T02:52:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "868f3bda528fbfba1330426d053c8990bdc87c5b",
          "body": "Adds CodegenConfig struct with a Resources field to NexusConfiguration\nso operators can tune the generate-code init container's memory limits\nvia the NexusConfiguration file rather than having them baked in.\nDefault is 2Gi request / 4Gi limit — matches the kpack builder defaults\nand keeps heavy-dep functions (cloudsqlconn + grpc + pgx) from OOM-ing\nunder the namespace LimitRange default.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "configuration: add CodegenConfig.Resources for codegen Job memory tuning",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-26T13:36:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ab821e102e6f64b2fdf2d3ed8de56cc9f6d25f7e",
          "body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update CRD version to v0.14.219",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-26T02:43:08Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d3870356c8756a9346b2ff8320cd837ec184d461",
          "body": "When spec.origin.source.regenerate=true, the host-manager controller\nwill run the codegen Job on every reconcile even though source is\nset. This lets functions with hand-authored code opt into the\ncluster-side regen path so spec.api shape changes flow through\nfngogen/fnnodejsgen without local 'go generate' coordination.\n\nDefault false preserves the current behavior (source is the truth,\nno codegen).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "kdexfunction: add Source.Regenerate field for opt-in codegen",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-26T02:42:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6eeb10d9fa3713c168a8aff457dbfa1c6195c02d",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.217",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-25T01:14:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcbf7180f4a3226dce045407f72f5a510bb90352",
          "body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "kdexfunction: regenerate manifests + deepcopy for Builder.Cache",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-25T01:14:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fdc608d7e8cc9ab8b5f2d9a6513a8db0684cf294",
          "body": "The kpack mutating webhook defaults Image.spec.cache.volume.size to \"2G\"\nwhen absent, which is too small for typical Go/Rust dep trees: builds\nexhaust the cache, repeatedly re-pull base layers, and link/compile\npeaks blow past container memory. Operators have been growing the\nunderlying PVCs by hand\n[…]\nng a different default set it via the chart values\non the FaaSAdaptor's builders[]; per-function override via the\nKDexFunction CR.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "kdexfunction: add Builder.Cache field for kpack PVC sizing",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-25T01:14:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "82646610dca33217903b5100391059b2a984d062",
          "body": "The old rule has(self.origin) was always true because Origin is a\nvalue-type field with json:\",omitempty\" — Go's omitempty does not\nsuppress zero-value structs, so spec.origin: {} is always present\nin marshaled JSON. The new rule checks origin's three pointer\nsubfields (executable, generator, source) — each properly honors\nomitempty — so Origin is treated as \"present\" only when at least\none variant is populated.",
          "is_bot": false,
          "headline": "kdexfunction: fix mutex CEL to check origin subfields",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T18:04:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd3706cc8470ebfbb5b76ea493d90117ad440b0b",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.216",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:50:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0d56666110142e7e07599426ee065b676b2d786",
          "body": null,
          "is_bot": false,
          "headline": "kdexfunction: unit tests for ServiceBackend + FunctionBackend types",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:47:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "71950adaacd6bf1f5d287bb435dae797b5b8539f",
          "body": "Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "kdexfunction: goimports order (intstr after apis/meta/v1)",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:45:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0f1c086fe07c6c74df1eee75d1517145338c129b",
          "body": null,
          "is_bot": false,
          "headline": "kdexfunction: regenerate manifests + deepcopy for spec.backend",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:44:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a66e163a3a2deffc7f14a55e6c9dd0cfcfe2247",
          "body": null,
          "is_bot": false,
          "headline": "kdexfunction: add spec.backend with origin/backend mutex CEL",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:39:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "159124f3562fd387829f4bf7233c1874f332ae1a",
          "body": "Use +kubebuilder:validation:Optional consistently (matches existing\nfile convention, 17:0).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "kdexfunction: unify Optional marker style on new backend types",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:37:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "57014a7fa9d0de97634bcfffb4d5e67da62fe338",
          "body": null,
          "is_bot": false,
          "headline": "kdexfunction: add FunctionBackend and ServiceBackend types",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:32:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d4386d5b024229b433fb9d64f273b2e053ff606c",
          "body": "TDD plan spanning kdex-crds (schema) and kdex-host-manager (reconciler\nbranch, watches, proxy basePath-strip). Single deviation from the spec\ndocumented in the header: ships only the origin/backend mutex CEL, not\nthe completeness CEL, to avoid retroactively invalidating origin-less\nKDexFunction CRs.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "kdexfunction: implementation plan for spec.backend Service-backed mode",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:11:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5cefcc463e62c7ec1612782ddc58ccfcbba16cd9",
          "body": "Captures the agreed design for a KDexFunction whose API is fronted by an\nexisting in-cluster Service (e.g. knowdb via Helm), bypassing the kpack +\nKnative build/deploy pipeline. Discriminated spec.backend.{type,service}\non the CRD, exactly-one CEL with spec.origin, EndpointSlice-aware\nreadiness in the host-manager reconciler, basePath-strip in the proxy.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "kdexfunction: design for spec.backend Service-backed mode",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-24T17:01:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c4374d0f2e339240a1cabfc97dd989efde108bc9",
          "body": "…ed it)\n\ngolangci-lint v2.10's unparam catches that formatDate never reads its\ntag argument because today's supported styles (year, short, RFC3339\nfallback) are all locale-neutral. Rename to _ to silence; expand the\ndocstring noting the param stays for signature symmetry + future CLDR\ndate pattern support.\n\nFollow-up to v0.14.214 (which failed CI on this rule).",
          "is_bot": false,
          "headline": "render: silence unparam lint on formatDate's tag (year+short don't ne…",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-23T16:04:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a71d61945370efc2aa32ae11d3c99971e0c76995",
          "body": "…es/date)\n\nNew render/format.go wraps golang.org/x/text/{number,currency,message}\nbehind unexported helpers; new FuncMap entries in render.go bind them\nto the renderer's parsed language.Tag (closes over a per-RenderOne\nparse, mirroring how l10n closes over r.MessagePrinter).\n\nTests cover en-CA + fr-\n[…]\ndep\n- byte-unit suffix uses a hand-rolled en/fr table; x/text/feature/unit\n  is not GA\n\nCompanion: knowdrive-site/docs/superpowers/plans/2026-05-23-localized-units-of-measure.md\n(Side B, Tasks B1-B3).",
          "is_bot": false,
          "headline": "render: add locale-aware FuncMap helpers (number/currency/percent/byt…",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-23T15:59:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a6619afb1b37fcd475b100f3f7c09290f655f94a",
          "body": "Companion to v0.14.212's Builder.{Tolerations,NodeSelector,Resources}\nwhich control kpack BUILD pod placement: this pair controls the\nKnative Service RUNTIME pod placement (closes #7).\n\nFaaSAdaptor.Deployer gains Tolerations + NodeSelector as cluster-wide\ndefaults applied to every function deployed \n[…]\nodeselector\nfeature flags. The chart-side prerequisite is documented in the\nconsuming repos.\n\nCRD yaml + deepcopy + reference docs regenerated.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Deployer + KDexFunctionSpec: runtime-pod Tolerations + NodeSelector",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-20T16:13:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "72d05df0b2c2eea850ab6bde2ba915c0eb52dcf4",
          "body": "…y policy\n\nTwo paired additions, both purely additive (existing CRs unchanged):\n\nBuilder gains Tolerations, NodeSelector, Resources (closes #5). All\nthree forward onto kpack.io/Image.spec.build.{tolerations,nodeSelector,\nresources} and from there onto the per-Build Pod. Unblocks landing\nbuilds on a \n[…]\nacks\n(3 retries, 4 * schedule cooldown ~20m).\n\nCRD yaml + deepcopy + reference docs regenerated via make manifests +\nmake generate + make docs.\n\nCo-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Builder + Observer: pod-scheduling fields for kpack BUILD pods + retr…",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-20T14:58:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1d2945ec0301cd2ede8d23272d6f7e188a2e59bf",
          "body": null,
          "is_bot": false,
          "headline": "kdexfunction: regenerate manifests + docs for serviceAccountName",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-19T15:17:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c28098cf71b11dd992ccfda7b2edc8c966efac0b",
          "body": null,
          "is_bot": false,
          "headline": "kdexfunction: add spec.serviceAccountName (optional)",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-19T15:17:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ec7e7a26d4a076c5754cd6a2ac55e4e578fb134",
          "body": "Adds a SecretSelector entry for the kdex.dev/secret-type=http-lookup-auth\nSecret used by host-manager's new HTTPLookup auth.Lookup implementation,\nincluding the wire-level request/response contract (HMAC signature header\nformat, JSON body, success/failure shape with the next_step Stage-2-MFA\nreservation) and a sniffer-shaped curl example for generating a matching\nKDexFunction CR via DevMode.",
          "is_bot": false,
          "headline": "auth: document http-lookup-auth secret-type + HTTP endpoint contract",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-18T19:49:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd47e45564166008dd6048123175cc15544ad0a8",
          "body": "GitLab's npm registry returns a per-version manifest that omits\ntype/main/module/exports/browser - it carries only name, version,\ndist, and devDependencies. hasESModule then rejects valid ES-module\npackages with \"package does not contain an ES module\" even though\nthe tarball's actual package.json de\n[…]\nthe tarball *also* lacks\nESM markers (still rejected), the sparse-manifest-no-tarball case,\nand the tarball-fetch-error case (original error joined with the\nfetch error). Closes kdex-tech/kdex-crds#2.",
          "is_bot": false,
          "headline": "npm: fall back to tarball package.json when manifest is sparse",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-16T20:29:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d9b85f632233271fbffe10983723e4772ca7657a",
          "body": "Registry stored only the DNS host. GetPackageInfo then built fetch\nURLs as <scheme>://<host>/<package>, collapsing the registry path\nand producing 403/404 against the registry root for any npm\nregistry served from a URL sub-path (GitLab, Verdaccio behind\nreverse proxies, JFrog, etc.).\n\nAdd Registry.\n[…]\nkup matches both fields exactly.\n\nAdds GetAddress, NewRegistry, ParseNpmrc, and ValidatePackage test\ncases covering sub-path hosts and same-host/different-path\nisolation. Closes kdex-tech/kdex-crds#1.",
          "is_bot": false,
          "headline": "npm: preserve URL path in Registry for sub-path registries",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-16T19:04:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d8ca1ce1052c7336d1c7a861780e729b14f1c893",
          "body": "LoadConfiguration's embedded default is the canonical source for\nhost-manager's BackendDefault.Deployment template (the operator's\nchart values just override individual leaf fields like serverImage).\nUntil now that default had no securityContext at any level and used\ncontainerPort 80, making host-ma\n[…]\n/backend-static@d13d830). The operator's chart values.yaml\nin kdex-tech/nexus-manager needs a matching serverImage bump to\n:0.1.6.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "default backend Deployment template now PSS-restricted compliant",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-16T16:20:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6c934210a25c72a80db7bdb2a7224b6bf4df2c69",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.206",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-16T03:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24e5b1df7d8a5c1798939261c3092f7186900a71",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.205",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-05-14T20:02:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42df5b903f22653bc6c46551d8d6708eb634eb85",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.204",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-31T00:39:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2eea4ebda73bf19e9ff18a8ec8e0e35d872580ce",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "use recommended approach",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-30T19:22:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66383f0254475d1579fa7c8fc174336e729604b1",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "create a release",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-30T19:14:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9415bf9c814bbba94d8c4b71dea8f9dc6b12fdce",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "update ci",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-30T19:08:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "deb48b89c740ffe8261e974d232c0a7ea2ceba0b",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "crd dist",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-30T19:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "666deb77572a6dcdcc4cdfa44ed70f8777bd6ad8",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.200",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-24T04:09:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e6b8c5e6c313dacdfb668ff28f532efb6ac9c59",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.199",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-22T20:12:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "438f42731492ad51376685bc777f595624cadee1",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.198",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-22T16:56:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd5810a9ea7fa668b867575f8c0313268d3154b6",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "modernize",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-22T16:37:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88fd7203e0792a839f0014a01364ea8406b29fd2",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.197",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-22T15:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03cab4f9045058cf02a9c679c134005914a6e40f",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.196",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-22T15:23:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4489d2c196f4091753f1ef87e42c0e7271639d5f",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.195",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-22T15:11:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d93bc455d29cbc47ece4657417e2a7fb8b17c170",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "types test",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-21T22:10:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5070a8cc0e1a99a2b010397e6db3a1284b68bb6f",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.193",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-21T21:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bdf4684e5632114f13cedc908451fe2019e8e5a1",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.192",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-21T17:16:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b6bdb747a8cd22a2146d11021309c0efec295f5b",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.191",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-21T01:47:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ae5e36392646a874e3e26def832314e26e9b5df",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.190",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-20T19:54:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22311f7b299f377f72854d9c34f3f282a5d1016f",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.189",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-20T19:18:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bf2f4182baf76ee5ab41dd06b2b220a7759e7b8c",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.188",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-19T17:49:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b92fe7eb95c4d749607cef3eed2aca5862d499d",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "go mod tidy",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-19T16:53:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b89d1bfedc0a846ac463492b5c62217bdac0145b",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.187",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-19T16:51:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1a758635f9583eab6dabd49de38fcc7502461ab",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.186",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-16T17:55:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec1314ed46d216b1a641f51d989b6ac09a9b2331",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.185",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-16T03:49:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcacf2446a574cfe1345e5b95c23af56b658e85c",
          "body": null,
          "is_bot": false,
          "headline": "feat: extend KDexHost spec with Helm configuration",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-16T03:25:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8a0878c7f366cb3a18e94861fe02cdf41da61b4",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "moved to docs-app/content/src/en",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-15T17:35:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed82dced9be50530e0e70ecc144446e928e3be10",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.184",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-11T13:01:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f985add7c8eb311cb8c6a859bb17d1ad4973e6f",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.183",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-09T03:45:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2abdff3e5b03ec57c231000d6ee2ec723db35411",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "make sure docs use correct spec reference",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-08T18:37:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a5a2092a4990a10d580858c5ce3c176a5369e03",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "revert erroneous validation",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-08T00:24:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2aeba483a9813e365136b77c64fc78431bec27b9",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "strict exclusion of script and style in structural templates",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-07T01:46:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92416e7a6f039d35b7c4351229e2d00828d8b3e2",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "todos",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-07T00:37:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39db0d2fcc7583dbf9f4324de02eb93be68d9f06",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.181",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-06T21:57:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c854efab8364c330365013f49b63e9e09685279b",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.179",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-06T17:39:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c38fa05d1f0dfd69a2d7807fce81b5712d9def79",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.178",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-05T21:08:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f3a45efaef2d48c5626a93b5c1700ec89714128",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.177",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-05T20:07:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94efe5b8c493ae7adb8a0ca5e083e243994f9163",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "docs",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-05T19:18:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a4fe150ee54c609086cda29998a2ac6fd391eba1",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "docs",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-05T15:09:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e71fb64563f05954d36c4b1df77c62963ab36e4",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "dep ups",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-04T15:36:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "58cceca7eb660abbbe69b3723824b8c2497a6e5b",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "docs",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-04T15:36:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c83a32eadc05a568039f118e9c0ae335269d989",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "docs",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-04T14:37:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42fb446455e9a41e0084c5cc557105845ec209c3",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.176",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-03T20:27:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c8830935d73e7412648cef43a98aefc7249a72c",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.175",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-03T20:19:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98d5250882650e2ce8c0f6221c0985d0a806302e",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "remove comment because we are implementing it",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-03T19:29:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d83285a89c875baae4fd86ca0e9082a804b187b3",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.174",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-03T04:19:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "675b5a06f7d4f15d86d2c5a4705326adaa152d80",
          "body": "Signed-off-by: Raymond Augé <rayauge@doublebite.com>",
          "is_bot": false,
          "headline": "update configuration",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T20:54:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f818b8c0c2502c323d582531a068c6621c5c8c7",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.173",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T19:02:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b19d87e998a021b0873efda82ae4a648e75d4c2",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.172",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T18:43:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2852512c6ad3a7873da6a859f8281a1f0d4669e7",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.171",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T18:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "717fafb6fa438c4a0ee6b8698a46ba43b7098d08",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.170",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T15:29:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ec8a60c529e62a93b31c48985cc7492a90c7d4a",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.169",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T15:14:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b40c5804ea4f36015636e9ddcd02ab34f5587ff2",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.168",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T15:04:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "709f85173bf3aca393a48b19ead60d00061f953a",
          "body": null,
          "is_bot": false,
          "headline": "Update CRD version to v0.14.167",
          "author_name": "Raymond Augé",
          "author_login": "rotty3000",
          "committed_at": "2026-03-02T13:19:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 32,
      "commits_last_year": 601,
      "latest_release_at": "2026-07-22T03:57:08Z",
      "latest_release_tag": "v0.14.234",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 37,
      "days_since_latest_release": 3,
      "mean_days_between_releases": 3.8
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "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": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "samples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 109663,
      "source_files_sampled": 61,
      "oversized_source_files": 2,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/go-logr/zapr",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.0"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "go.uber.org/zap",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.27.1"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.34.0"
        },
        {
          "name": "k8s.io/api",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.35.2"
        },
        {
          "name": "k8s.io/apimachinery",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.35.2"
        },
        {
          "name": "sigs.k8s.io/controller-runtime",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.23.1"
        },
        {
          "name": "sigs.k8s.io/gateway-api",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "sigs.k8s.io/yaml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/Masterminds/sprig/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.3.0"
        },
        {
          "name": "github.com/daveshanley/vacuum",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.24.0"
        },
        {
          "name": "github.com/getkin/kin-openapi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.133.0"
        },
        {
          "name": "github.com/go-logr/logr",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.3"
        },
        {
          "name": "github.com/kdex-tech/dmapper",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 2,
        "open_issues": 1,
        "closed_ratio": 0.933,
        "closed_issues": 14,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "rotty3000",
          "commits": 600,
          "avatar_url": "https://avatars.githubusercontent.com/u/146764?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
            "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": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 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": 0,
            "reason": "28 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "108d10a2dcd9270e04aa711f4c6a010ca20c0d69",
        "ran_at": "2026-07-25T05:45:28Z",
        "aggregate_score": 3.1,
        "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-22T03:57:11Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-19T01:37:28Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 9,
          "created_at": "2026-05-31T15:02:09Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/kdex-tech/kdex-crds",
    "host": "github.com",
    "name": "kdex-crds",
    "owner": "kdex-tech"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 56,
      "inputs": {
        "security": 31,
        "vitality": 90,
        "community": 24,
        "governance": 46,
        "engineering": 80
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 90,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "commits_last_year": 601,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 37
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "37/52 weeks with commits",
                "points": 25.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 37
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "601 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 601
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 32,
              "latest_release_tag": "v0.14.234",
              "releases_from_tags": false,
              "days_since_latest_release": 3,
              "mean_days_between_releases": 3.8
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "32 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 32
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.8 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.8
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 3,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 3 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Sustainability & Governance",
        "value": 46,
        "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": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 1,
              "closed_issues": 14,
              "issue_closed_ratio": 0.933,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "93% of issues closed",
                "points": 43.6,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 93
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/2 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 2
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 49,
            "inputs": {
              "followers": 2,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "kdex-tech",
              "public_repos": 17,
              "account_age_days": 1174
            },
            "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": "2 followers of kdex-tech",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2,
                      "login": "kdex-tech"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "17 public repos, account ~3 yr old",
                "points": 15.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 17
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 3
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 80,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "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": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".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": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 31,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "2 out of 2 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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 detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "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": "28 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 1
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 59,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.32,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "32 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 17.1,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 32,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.2,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "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": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "20 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 20,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 109663,
              "source_files_sampled": 61,
              "oversized_source_files": 2
            },
            "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": "2/61 source files over 60KB",
                "points": 53.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 61,
                      "oversized": 2
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "samples"
              ],
              "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": "samples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "samples"
                    }
                  }
                ],
                "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": [
    "Could not fetch go package 'kdex.dev/crds' from its registry",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-25T05:45:34.776878Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/kdex-tech/kdex-crds.svg",
  "full_name": "kdex-tech/kdex-crds",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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