Registro público
Informe de salud del softwareesquema 0.23.0 · métricas 1.13.0 · 2026-07-21 21:33 UTC

BrandonKowalski / gabagool

Revenge is like serving cold cuts.

GoMIT★ 11 estrellas⑂ 7 forksdesde abr 2025Ver en GitHub ↗

BrandonKowalski/gabagool tiene un índice de salud de 55 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (89/100) y la más baja, Engineering Quality (34/100). Se actualizó por última vez hace 3 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

55
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

Brandon T. KowalskiCuenta personal
28 seguidores30 repositorios públicosdesde ene 2012@CUL-IT, @AbstractElemental

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/BrandonKowalski/gabagool/v2v2.24.0-91hace 3 días

Métricas por categoría

Vitalidad

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

89Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 3 días
27/36Cadencia de commits — 39/52 semanas con commits
18/18Volumen de commits — 232 commits en el último año
8/10OpenSSF Scorecard: Maintained — 10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8
Datos de entrada utilizados
commits_last_year232
human_commit_share1
days_since_last_push3
active_weeks_last_year39
Cómo se puntúa
16.2/27Publica versiones — 47 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 3 días
27/27Cadencia de publicación — una versión cada ~11,2 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count47
latest_release_tagv2.24.0
releases_from_tags
days_since_latest_release3
mean_days_between_releases11,2
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

36En riesgo · 18% del índice global
Cómo se puntúa
16.2/60Estrellas — 11 estrellas
6.5/25Forks — 7 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks7
stars11
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

63Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
2/22.5Distribución de commits — el principal contribuyente firma el 91% de los commits
8.1/13.5Amplitud de contribuyentes — 6 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 7 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled6
top_contributor_share0,91
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
32.2/38.3Aceptación de PR — 16/19 PR decididos fusionados
3/15OpenSSF Scorecard: Code-Review — Found 6/21 approved changesets -- score normalized to 2
Datos de entrada utilizados
merged_prs16
open_issues0
closed_issues1
issue_closed_ratio1
closed_unmerged_prs3
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
10.5/25Alcance del propietario — 28 seguidores de BrandonKowalski
22.9/25Trayectoria — 30 repos públicos, cuenta de ~14 años
Datos de entrada utilizados
followers28
owner_typeUser
is_verified
owner_loginBrandonKowalski
public_repos30
account_age_days5304
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 3 días
20/20Historial de versiones — 91 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/BrandonKowalski/gabagool/v2
ecosystemsgo
any_deprecatedno
min_days_since_publish3

Calidad de Ingeniería

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

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

Documentación

50Moderado
Cómo se puntúa
30/30README
0/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 3 topics
0/10Wiki
Datos de entrada utilizados
topicsnextui, retrogaming, sdl2
has_wikino
homepage
has_readme
has_docs_dirno
has_description

Seguridad

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

42En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
2.2/7.5Branch-Protection — branch protection is not maximal on development and all release branches
0/2.5CI-Tests — 0 out of 7 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
1.5/7.5Code-Review — Found 6/21 approved changesets -- score normalized to 2
2.5/2.5Contributors — project has 7 contributing companies or organizations
0/10Dangerous-Workflow — sin datos
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
6/7.5Maintained — 10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8
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 — sin datos
0/7.5Token-Permissions — sin datos
0/7.5Vulnerabilities — 17 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated14
scorecard_versionv5.5.0
checks_inconclusive4
scorecard_aggregate3
Excluidos de la puntuación (sin datos o no aplicable): dangerous_workflow, packaging, signed_releases, token_permissions. Los pesos restantes se han renormalizado.
Cómo se puntúa
26.6/35Dependencias directas libres de avisos conocidos — 1 afectados: golang.org/x/text v0.33.0 (unknown)
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
40/40Sin avisos pendientes — ningún aviso lleva público más de 90 días
Datos de entrada utilizados
sourceosv
advisories20
affected_packages3
assessed_packages11
unassessed_packages0
affected_by_severityhigh 1, moderate 1, unknown 1
direct_affected_packages1
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos. Los pesos restantes se han renormalizado. Se cotejaron 11 dependencias resueltas con OSV. Este repositorio no publica ningún paquete que el índice resuelva, por lo que se evaluó en su lugar el grafo de dependencias del repositorio. Ese grafo mezcla fijaciones de desarrollo y prueba con las dependencias distribuidas, de modo que solo se puntúan las dependencias declaradas en tiempo de ejecución; los hallazgos transitivos se informan como contexto y quedan excluidos de la puntuación. No se analiza la alcanzabilidad.

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.

52Moderado · 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)
16.5/40Historial de commits legible — 31 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,31
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — Dockerfile, lockfile
4/10Práctica demostrada con agentes — 2 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_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,02
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/49 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes46.469
source_files_sampled49
oversized_source_files0

Datos clave

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

Más detalle

Historial de estrellas y forks 11 ★ / 7 ⇿
11Estrellas
7Forks
43Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

02468101211712025-072026-012026-06
Mayor 0Menor 15Parche 28
OpenSSF Scorecard 3.0 / 10
3.0agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-21 21:33 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
0CI-Tests0 out of 7 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
2Code-ReviewFound 6/21 approved changesets -- score normalized to 2
10Contributorsproject has 7 contributing companies or organizations
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
8Maintained10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8
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
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities17 existing vulnerabilities detected
Dependencias directas 9
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/BrandonKowalski/certifiablev1.3.0go.mod
Gogithub.com/BurntSushi/tomlv1.6.0go.mod
Gogithub.com/holoplot/go-evdevv0.0.0-20250804134636-ab1d56a1fe83go.mod
Gogithub.com/nicksnyder/go-i18n/v2v2.6.1go.mod
Gogithub.com/srwiley/oksvgv0.0.0-20221011165216-be6e8873101cgo.mod
Gogithub.com/srwiley/rasterxv0.0.0-20220730225603-2ab79fcdd4efgo.mod
Gogithub.com/veandco/go-sdl2v0.4.40go.mod
Gogo.uber.org/atomicv1.11.0go.mod
Gogolang.org/x/textv0.33.0go.mod
Todas las dependencias 11

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

RegistroPaqueteVersiónRelación
Gogithub.com/brandonkowalski/certifiablev1.3.0directa
Gogithub.com/burntsushi/tomlv1.6.0directa
Gogithub.com/holoplot/go-evdevv0.0.0-20250804134636-ab1d56a1fe83directa
Gogithub.com/nicksnyder/go-i18n/v2v2.6.1directa
Gogithub.com/srwiley/oksvgv0.0.0-20221011165216-be6e8873101cdirecta
Gogithub.com/srwiley/rasterxv0.0.0-20220730225603-2ab79fcdd4efdirecta
Gogithub.com/veandco/go-sdl2v0.4.40directa
Gogo.uber.org/atomicv1.11.0directa
Gogolang.org/x/textv0.33.0directa
Gogolang.org/x/imagev0.34.0indirecta
Gogolang.org/x/netv0.48.0indirecta
Avisos de dependencias 3

Este repositorio no publica ningún paquete que el índice resuelva, así que se evaluó su propio grafo de dependencias — 11 paquetes, que incluyen también fijaciones de desarrollo y prueba que nunca se distribuyen: 3 tienen avisos conocidos, de los cuales 1 son directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
golang.org/x/imagev0.34.0indirectaalta100.43.0
golang.org/x/netv0.48.0indirectamoderada91.26.3
golang.org/x/textv0.33.0directadesconocida10.39.0

Un aviso significa que la versión registrada en el grafo de dependencias cae dentro del rango afectado de un aviso. No se analiza la alcanzabilidad, y el grafo incluye fijaciones de desarrollo y prueba: un hallazgo puede referirse al utillaje y no al software distribuido.

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "nextui",
        "retrogaming",
        "sdl2"
      ],
      "is_fork": false,
      "size_kb": 23629,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 398816,
        "Shell": 206,
        "Dockerfile": 303
      },
      "pushed_at": "2026-07-18T03:51:39Z",
      "created_at": "2025-04-30T05:27:01Z",
      "owner_type": "User",
      "updated_at": "2026-07-18T03:51:33Z",
      "description": "Revenge is like serving cold cuts.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "https://kowalski.io",
      "name": "Brandon T. Kowalski",
      "type": "User",
      "login": "BrandonKowalski",
      "company": "@CUL-IT,  @AbstractElemental",
      "location": "Ithaca, NY, USA",
      "followers": 28,
      "avatar_url": "https://avatars.githubusercontent.com/u/1323467?v=4",
      "created_at": "2012-01-12T01:50:49Z",
      "is_verified": null,
      "public_repos": 30,
      "account_age_days": 5304
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v2.24.0",
          "kind": "minor",
          "published_at": "2026-07-18T03:51:26Z"
        },
        {
          "tag": "v2.23.0",
          "kind": "minor",
          "published_at": "2026-07-18T03:23:23Z"
        },
        {
          "tag": "v2.22.0",
          "kind": "minor",
          "published_at": "2026-07-16T22:40:59Z"
        },
        {
          "tag": "v2.21.0",
          "kind": "minor",
          "published_at": "2026-06-24T22:46:11Z"
        },
        {
          "tag": "v2.20.0",
          "kind": "minor",
          "published_at": "2026-06-17T01:36:32Z"
        },
        {
          "tag": "v2.19.0",
          "kind": "minor",
          "published_at": "2026-04-15T21:48:51Z"
        },
        {
          "tag": "v2.18.0",
          "kind": "minor",
          "published_at": "2026-04-11T17:48:58Z"
        },
        {
          "tag": "v2.17.0",
          "kind": "minor",
          "published_at": "2026-04-08T03:56:18Z"
        },
        {
          "tag": "v2.16.0",
          "kind": "minor",
          "published_at": "2026-04-08T03:10:21Z"
        },
        {
          "tag": "v2.15.0",
          "kind": "minor",
          "published_at": "2026-04-07T23:16:47Z"
        },
        {
          "tag": "v2.14.0",
          "kind": "minor",
          "published_at": "2026-03-28T00:43:02Z"
        },
        {
          "tag": "v2.13.7",
          "kind": "patch",
          "published_at": "2026-03-22T00:05:55Z"
        },
        {
          "tag": "v2.13.6",
          "kind": "patch",
          "published_at": "2026-03-21T21:59:47Z"
        },
        {
          "tag": "v2.13.5",
          "kind": "patch",
          "published_at": "2026-03-21T21:28:25Z"
        },
        {
          "tag": "v2.13.4",
          "kind": "patch",
          "published_at": "2026-03-21T20:58:35Z"
        },
        {
          "tag": "v2.13.3",
          "kind": "patch",
          "published_at": "2026-03-21T20:42:35Z"
        },
        {
          "tag": "v2.13.2",
          "kind": "patch",
          "published_at": "2026-03-21T20:17:19Z"
        },
        {
          "tag": "v2.13.1",
          "kind": "patch",
          "published_at": "2026-03-21T19:23:52Z"
        },
        {
          "tag": "v2.13.0",
          "kind": "minor",
          "published_at": "2026-03-12T04:23:42Z"
        },
        {
          "tag": "v2.12.0",
          "kind": "minor",
          "published_at": "2026-03-04T01:23:06Z"
        },
        {
          "tag": "v2.11.0",
          "kind": "minor",
          "published_at": "2026-03-03T23:40:04Z"
        },
        {
          "tag": "v2.10.1",
          "kind": "patch",
          "published_at": "2026-03-03T01:09:50Z"
        },
        {
          "tag": "v2.10.0",
          "kind": "minor",
          "published_at": "2026-03-03T01:02:40Z"
        },
        {
          "tag": "v2.9.6",
          "kind": "patch",
          "published_at": "2026-02-22T17:33:22Z"
        },
        {
          "tag": "v2.9.5",
          "kind": "patch",
          "published_at": "2026-02-22T17:05:54Z"
        },
        {
          "tag": "v2.9.4",
          "kind": "patch",
          "published_at": "2026-02-21T22:13:08Z"
        },
        {
          "tag": "v2.9.3",
          "kind": "patch",
          "published_at": "2026-02-15T16:26:13Z"
        },
        {
          "tag": "v2.9.2",
          "kind": "patch",
          "published_at": "2026-02-14T14:00:25Z"
        },
        {
          "tag": "v2.9.1",
          "kind": "patch",
          "published_at": "2026-02-12T22:42:51Z"
        },
        {
          "tag": "v2.9.0",
          "kind": "minor",
          "published_at": "2026-02-12T03:38:34Z"
        },
        {
          "tag": "v2.8.5",
          "kind": "patch",
          "published_at": "2026-02-08T22:27:36Z"
        },
        {
          "tag": "v2.8.4",
          "kind": "patch",
          "published_at": "2026-02-08T20:14:59Z"
        },
        {
          "tag": "v2.8.3",
          "kind": "patch",
          "published_at": "2026-02-01T18:24:41Z"
        },
        {
          "tag": "v2.8.2",
          "kind": "patch",
          "published_at": "2026-01-31T15:07:37Z"
        },
        {
          "tag": "v2.8.1",
          "kind": "patch",
          "published_at": "2026-01-31T03:32:40Z"
        },
        {
          "tag": "v2.8.0",
          "kind": "minor",
          "published_at": "2026-01-29T05:03:06Z"
        },
        {
          "tag": "v2.7.4",
          "kind": "patch",
          "published_at": "2026-01-28T04:57:32Z"
        },
        {
          "tag": "v2.7.3",
          "kind": "patch",
          "published_at": "2026-01-27T03:23:52Z"
        },
        {
          "tag": "v2.7.2",
          "kind": "patch",
          "published_at": "2026-01-25T21:13:52Z"
        },
        {
          "tag": "v2.7.1",
          "kind": "patch",
          "published_at": "2026-01-21T04:59:16Z"
        },
        {
          "tag": "v2.7.0",
          "kind": "minor",
          "published_at": "2026-01-21T02:22:35Z"
        },
        {
          "tag": "v2.6.4",
          "kind": "patch",
          "published_at": "2026-01-17T05:50:16Z"
        },
        {
          "tag": "v2.6.3",
          "kind": "patch",
          "published_at": "2026-01-12T04:29:44Z"
        },
        {
          "tag": "v2.6.2",
          "kind": "patch",
          "published_at": "2026-01-11T01:56:58Z"
        },
        {
          "tag": "v2.6.1",
          "kind": "patch",
          "published_at": "2026-01-11T01:05:10Z"
        },
        {
          "tag": "v2.6.0",
          "kind": "minor",
          "published_at": "2026-01-10T21:48:45Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2025-12-03T05:33:00Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0cb8c7995720abfda8c77161f26ec55af9d126d7",
          "body": null,
          "is_bot": false,
          "headline": "H700 support for input",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-07-18T03:51:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ef782af74da0f4855071d776e85194d3137fa23",
          "body": null,
          "is_bot": false,
          "headline": "H700 support for NextUI",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-07-18T03:23:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f5f7ec2897bcb5000df883b9b52048ac9c4eee5",
          "body": "fix: harden translucent-shape rendering and NextUI theme parsing",
          "is_bot": false,
          "headline": "Merge pull request #22 from BrandonKowalski/fix/pr21-followups",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-07-16T22:40:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b1e19215009315206d598d0b75c72db79203c8f4",
          "body": "Follow-ups to #21:\n\nRendering:\n- Draw the fallback circle at its real position (not the screen corner)\n  when the translucent scratch texture is unavailable\n- Clear the scratch texture to the shape's chroma at alpha 0 instead of\n  transparent black, removing the dark fringe on anti-aliased edges\n- D\n[…]\nand \"0X\" prefixes alongside \"0x\"\n- Document that color7 is the background key; NextUI never emitted a\n  bgcolor key, so no legacy alias is needed\n- Add parseHexColor/resolveBackgroundColor table tests",
          "is_bot": false,
          "headline": "fix: harden translucent-shape rendering and NextUI theme parsing",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-07-16T22:39:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a0a13f2cb9a8b31ffa367ebd8e6e114fd61e0566",
          "body": "Fix NextUI RGBA theme colors + SDL2_gfx blend artifacts",
          "is_bot": false,
          "headline": "Merge pull request #21 from frysee/matt/fix-nextui-rgba-theme-colors",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-07-14T22:42:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9151bf10390f1a513a1c6295eb8f12b6d67e29c0",
          "body": "NextUI now emits 8-digit RRGGBBAA hex for theme colors (was RRGGBB);\nparseHexColor ignored the alpha byte, corrupting colors. Also fixes\nthe bgcolor->color7 json key drift (background always fell back to\nred) and a broken UTF-8-adjacent hex trim.\n\nEnabling alpha exposed SDL2_gfx double-blend artifac\n[…]\ng opaque\nonto a scratch texture (opaque draws are blend-mode-safe/idempotent)\nand applying real translucency once via texture alpha modulation.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix NextUI RGBA theme colors + SDL2_gfx blend artifacts",
          "author_name": "frysee",
          "author_login": "frysee",
          "committed_at": "2026-07-12T19:18:05Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "17d19f90e2a1f2be8e87ede52f57ab9bb214356f",
          "body": "feat: add OnL1 and OnR1 callbacks to list component",
          "is_bot": false,
          "headline": "Merge pull request #20 from jtbrough/feature/shoulder-button-callbacks",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-06-24T22:46:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27524a525f90d4746c560ac6b2f327128a397689",
          "body": null,
          "is_bot": false,
          "headline": "feat: add OnL1 and OnR1 callbacks to list component",
          "author_name": "Jordan Brough",
          "author_login": "jtbrough",
          "committed_at": "2026-06-24T22:27:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7ca82e16f46554f1a6189ccd00e649b5790f0c7",
          "body": "…handler\n\ncloseWindow unconditionally called PowerButtonWG.Done() in non-dev mode, but\nAdd(1) runs only when the power-button handler actually starts (non-dev AND\nnon-empty DevicePath). Non-NextUI apps (Cannoli/default) leave DevicePath empty,\nso Done() drove the WaitGroup counter negative and panic\n[…]\n on exit with\n\"sync: negative WaitGroup counter\".\n\nTrack whether the handler started and release the WaitGroup only then. Teardown\nis now symmetric with Add(1) and idempotent against repeated cleanup.",
          "is_bot": false,
          "headline": "fix(window): guard power-button WaitGroup teardown against unstarted …",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-06-17T01:36:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "743dec6296bd78a037343dee9ed2ab26b4f3d219",
          "body": "Delete the cannoli platform package and the IsCannoli option. The no-flag\nfallback now uses a generic internal.DefaultTheme() carrying the same colors\ninstead of the Cannoli theme.",
          "is_bot": false,
          "headline": "Remove Cannoli CFW theming support",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-06-17T00:09:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a94af02374a67f91ae6a48c8405f06669a838c0c",
          "body": "…ller-too\n\nfeat(flipface): flip button for controller too",
          "is_bot": false,
          "headline": "Merge pull request #17 from pawndev/feat/flip-face-buttons-for-contro…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-04-15T21:48:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c88ea39b34c985088ac72f2043d039ae4cad4e2d",
          "body": null,
          "is_bot": false,
          "headline": "feat(flipface): flip button for controller too",
          "author_name": "pawndev",
          "author_login": "pawndev",
          "committed_at": "2026-04-14T13:07:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9e54d7f452cbd5cfe791b4c8313e0c49aee9ce5",
          "body": "…rces\n\nfeat(input): Ability to disable some input sources",
          "is_bot": false,
          "headline": "Merge pull request #16 from pawndev/feat/ability-to-disable-input-sou…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-04-11T17:48:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "838e541c0bbda20f00d625faac29fa431836302b",
          "body": null,
          "is_bot": false,
          "headline": "feat(input): Ability to disable some input sources",
          "author_name": "pawndev",
          "author_login": "pawndev",
          "committed_at": "2026-04-11T12:49:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a41f167c32f5328dc462147afb5e668bc44f3cce",
          "body": "…wards item count)",
          "is_bot": false,
          "headline": "fix option list scrolling when there are hidden items (don't count to…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-04-08T03:56:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd9d802c31facefea57b70aeab55e8d3f650c21f",
          "body": "…alled input_capture",
          "is_bot": false,
          "headline": "update the input logger to be a reusable component under a new name c…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-04-08T03:10:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8d087f5f874953f8a700552999fb6138b7e25e3",
          "body": "feat: expose input logger as component",
          "is_bot": false,
          "headline": "Merge pull request #15 from pawndev/feat/export-input-logger",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-04-07T23:16:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87446cc4279fc5868efd1a0696f01b047268c993",
          "body": null,
          "is_bot": false,
          "headline": "feat: expose input logger as component",
          "author_name": "pawndev",
          "author_login": "pawndev",
          "committed_at": "2026-04-07T21:27:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2f1c6794da9f640cbbe03d489f84850f68de4f4",
          "body": "… sizing\n\nFall back to OrientationNormal for unsupported values, swap dev mode\nwindow dimensions for 90/270° rotation, and add trailing newline.\n\nCo-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(orientation): validate orientation values and fix dev mode window…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-28T00:43:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e791e9d84765a06770ddff481cd1b49c54d732f0",
          "body": "Feat/change orientation",
          "is_bot": false,
          "headline": "Merge pull request #14 from pawndev/feat/change-orientation",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-28T00:39:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf5b32ccfa4d9f433c82595cdb7e77cd8044b045",
          "body": null,
          "is_bot": false,
          "headline": "fix(orientation): use logical width/height",
          "author_name": "pawndev",
          "author_login": "pawndev",
          "committed_at": "2026-03-27T22:41:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57ecdfcdde409c71eff400b3a482efeb7922889b",
          "body": null,
          "is_bot": false,
          "headline": "fix(orientation): setLogicalSize only when orientation standard",
          "author_name": "pawndev",
          "author_login": "pawndev",
          "committed_at": "2026-03-27T22:26:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b711478af0e3e7f71147fe1d3d995c34939f8ce7",
          "body": null,
          "is_bot": false,
          "headline": "feat: init orientation change",
          "author_name": "pawndev",
          "author_login": "pawndev",
          "committed_at": "2026-03-27T21:23:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd249dea8913989ee9337b922d75a3734573ac8c",
          "body": "Large images can exceed GPU texture size limits on devices with limited\nVRAM (e.g. ARM7). Load the image as a CPU-side surface first, scale it\ndown to the target dimensions using BlitScaled, then create the GPU\ntexture from the smaller surface. This matches the approach already used\nin detail.go for game art.",
          "is_bot": false,
          "headline": "fix: scale surface before creating GPU texture for embedded images",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-22T00:05:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3c5ec9c79d172ed8ef91b1e35e0b4131a48594f7",
          "body": "In-memory RWops loading can produce corrupt textures on some embedded\ndevices without returning an error, so the fallback never triggers.\nAlways write to a temp file and load via img.LoadTexture instead, which\nis the proven path used by list.go for game art.",
          "is_bot": false,
          "headline": "fix: always use temp file for loading images from bytes",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-21T21:59:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "551b0ecf60d63e6d524f64c0bbd6c452a4508e41",
          "body": "Remove ImageUseTempFile flag and instead automatically fall back to\nwriting bytes to a temp file when in-memory RWops loading fails. The\ntemp file path uses img.LoadTexture, matching what works in list.go.\nThis makes embedded image display work transparently on all devices.",
          "is_bot": false,
          "headline": "fix: auto-fallback to temp file for image loading from bytes",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-21T21:28:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e4645b16868adbb3f000c914a015c0331d03d84",
          "body": "SDL_image uses file extensions to determine image format. The temp file\nhad no extension, so format detection failed on devices that don't\nsupport header-based detection.",
          "is_bot": false,
          "headline": "fix: add file extension to temp file for SDL_image format detection",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-21T20:58:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "402f9964b69bc404f06e8bd41b9b4e5ddc068d77",
          "body": "img.LoadTexture creates textures directly on the GPU, which has the same\ncompatibility issue on embedded devices. Use img.Load (CPU surface) +\nCreateTextureFromSurface instead, matching detail.go and\nconfirmation_message.go.",
          "is_bot": false,
          "headline": "fix: use surface-based loading for temp file fallback path",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-21T20:42:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "172ae55469bf1398dc3552cd931283d9b23d94dd",
          "body": "…e devices\n\nAdd ImageUseTempFile option that writes image bytes to a temp file and\nloads via img.LoadTexture instead of from memory via RWops. This provides\na fallback for devices where in-memory image loading is unsupported.",
          "is_bot": false,
          "headline": "fix: add temp file fallback for embedded image loading on incompatibl…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-21T20:17:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4ecaca6bcad4d197a0043a1112e5298c17b33f4",
          "body": "…tibility\n\nLoad raster images into a CPU-side surface before creating GPU textures,\ninstead of using img.LoadTextureRW which creates textures directly on the\nGPU. This matches the pattern used in detail.go and is more compatible\nwith devices that have limited VRAM or driver support.",
          "is_bot": false,
          "headline": "fix: use surface-based image loading for better embedded device compa…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-21T19:23:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33ce5b396fc7e95121346357155ba263e485af51",
          "body": "… flipping face buttons",
          "is_bot": false,
          "headline": "feat: add ability to reload controller mappings on the fly to support…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-12T04:23:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eecfd00dea13df2a581c53b341539cb0d1bdfd2f",
          "body": null,
          "is_bot": false,
          "headline": "Make detail component accept input like other components",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-04T01:23:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "810c275af631db132ecb7943f88923298c7a14af",
          "body": "Add simple scaling logic for processMessage",
          "is_bot": false,
          "headline": "Merge pull request #13 from frysee/fix-splashscreen-scaling",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-03T23:40:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43a673b63aee8ce74accacbeacbac9c13937f646",
          "body": null,
          "is_bot": false,
          "headline": "Add simple scaling logic for processMessage",
          "author_name": "frysee",
          "author_login": "frysee",
          "committed_at": "2026-03-03T23:10:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4507e9b80750df1fed3019c850938b11d2617bc7",
          "body": null,
          "is_bot": false,
          "headline": "Fix syntax error for else",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-03T01:09:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ffe0f20739b855a8bcd9f14fe1a874c467a0463",
          "body": "Add platform support for my355",
          "is_bot": false,
          "headline": "Merge pull request #12 from frysee/my355",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-03-03T01:02:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f5d089431dad090b16edadb7397c51bf7cd4bfa",
          "body": null,
          "is_bot": false,
          "headline": "Add platform support for my355",
          "author_name": "frysee",
          "author_login": "frysee",
          "committed_at": "2026-03-02T22:25:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cc512f61ee151b3c667df2bba98b2006ec8c14f",
          "body": "…eft / right on d-pad",
          "is_bot": false,
          "headline": "Change table header font size and add jumping between sections with l…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-22T17:33:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "124ce2d1d9632f5325218f733d4e2532baef3288",
          "body": null,
          "is_bot": false,
          "headline": "Add new table section type to detail component",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-22T17:05:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cea1f8b63179182a9cb7ed44ed69138b1038731c",
          "body": null,
          "is_bot": false,
          "headline": "Implement power changes suggested by @Helaas",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-21T22:13:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "abe6b059258be24b8fc7b39ff4c44c9562958aac",
          "body": null,
          "is_bot": false,
          "headline": "Remove colon from key value when only key present",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-15T16:26:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f030b0b59a5411fedc424e0caa6b9b762e2660e9",
          "body": "…g labels",
          "is_bot": false,
          "headline": "Fix option list truncation to take into account short values with lon…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-14T14:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed9bc3365fec5fc8d8f19232caf88916831f61b2",
          "body": null,
          "is_bot": false,
          "headline": "Long items in option list now scroll, both labels and values",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-12T22:42:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "497c20089f38d2d8fbecb71029c8555b29d82414",
          "body": null,
          "is_bot": false,
          "headline": "Tertiary list action and footer groups",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-12T03:38:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f261dc86fcc93bf5aceba1e48cec57d32b76ab44",
          "body": "…ni Plus / Flip",
          "is_bot": false,
          "headline": "Scale the image before rendering as to not overload the poor Miyoo Mi…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-09T03:13:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94d1f65f94d696529b6de2f5eec0f7659205ae5a",
          "body": null,
          "is_bot": false,
          "headline": "Attempted fix for Miyoo screentear",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-08T22:27:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d65af053f7027b5903ad7b7476812009a3892953",
          "body": "…olling on the details page (focusing on the repeating key logic)",
          "is_bot": false,
          "headline": "Add logic for when V-Sync isn't present and attempt to smooth out scr…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-08T20:14:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c1d1e52a6cc879e25f9378e61856e635225c7acc",
          "body": null,
          "is_bot": false,
          "headline": "Add footers and ability to cancel to progress message",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-02-01T18:24:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "69b007cc9d0538f0c6127adab8e3a815b832ff3a",
          "body": null,
          "is_bot": false,
          "headline": "Add support for dynamic footer text",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-31T15:07:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9650e49d01af920befa1daf80df0a0ecda80e77",
          "body": null,
          "is_bot": false,
          "headline": "Deprecate Log File option, add Log Path option",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-31T03:32:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35459e47c76e9496416afa5cbd213924e8565a73",
          "body": null,
          "is_bot": false,
          "headline": "Conditional font bundling via compiler flag",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-29T05:03:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9920e202a286e40c9e50bfb4735a191d9536f2fa",
          "body": null,
          "is_bot": false,
          "headline": "Option list support showing a virtual list of options",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-28T04:57:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27ef7a9f8714f7061724e8ba9ad661ce2ba5933b",
          "body": null,
          "is_bot": false,
          "headline": "Add env var to flip face buttons (ABXY)",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-27T03:23:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "062235490e7925ee52b118fad345d78717fbdff2",
          "body": null,
          "is_bot": false,
          "headline": "Make all env vars constants",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-27T00:28:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bab0af595d18d16b4bfce30652402b6e899673f",
          "body": "Add configurable window options",
          "is_bot": false,
          "headline": "Merge pull request #10 from josegonzalez/add-configurable-window-options",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-26T23:31:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcb789fa2a601d605674b653fdeb5620b59453fa",
          "body": null,
          "is_bot": false,
          "headline": "Merge main into add-configurable-window-options",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-26T23:31:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9c6e82cccffb8ebf8b5c8166ed414fff591bec5",
          "body": null,
          "is_bot": false,
          "headline": "Custom MultiSelectConfirmButton",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-25T21:13:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8383f3e76c13d46897a231f6a02948b0caeeb564",
          "body": "…prise",
          "is_bot": false,
          "headline": "Refactor to use new gaba. Building out gaba to expect a fancy new sur…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-25T05:30:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41bf7b7c14df09a4ca9c23173e3ea90dfd73522e",
          "body": null,
          "is_bot": false,
          "headline": "Fix detail screen action button",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-21T04:59:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9143ba8ecdb38460080a35e0ed1d8303fdb8935c",
          "body": "Refactor",
          "is_bot": false,
          "headline": "Merge pull request #11 from BrandonKowalski/refactor",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-21T02:22:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a0ac75b12e1dba20b840ab8f3bc1a6740db386a",
          "body": null,
          "is_bot": false,
          "headline": "Documenting the beast",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-21T02:22:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bddf188c6133684612859e5b53cb5e8ec8a749f",
          "body": null,
          "is_bot": false,
          "headline": "Nuke dev resources",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-21T01:28:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd0abef82e1023d49a8ebc63ccd4dfa95e4432b1",
          "body": null,
          "is_bot": false,
          "headline": "More refactoring",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-21T01:02:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "51c03c30206f7741e6c4010cc30207b1aa58ddc5",
          "body": null,
          "is_bot": false,
          "headline": "Start of mass refactor v3",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-20T23:29:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2051d0e0caf279067966fadebdba4a96d4d2ebae",
          "body": null,
          "is_bot": false,
          "headline": "Fix status bar spacing when new icons added after the fact",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-17T05:50:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f13bcb2bd245f41535255f10a5f41b70121c99f",
          "body": null,
          "is_bot": false,
          "headline": "Add configurable window options",
          "author_name": "Jose Diaz-Gonzalez",
          "author_login": "josegonzalez",
          "committed_at": "2026-01-15T08:14:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05738f169d8013bdd8ca897bc57a0baa066e75c4",
          "body": null,
          "is_bot": false,
          "headline": "Fix action button for detail component",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-12T04:29:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2342019e7ff1151989ec82a44a8f8fa235cb32d",
          "body": null,
          "is_bot": false,
          "headline": "Update certifiable reference",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-11T01:56:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d9b2947d99fdb0f9ea05c6e5abe7eaa469b2e34",
          "body": null,
          "is_bot": false,
          "headline": "Add option to bypass SSL cert validation",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-11T01:05:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3806a42f7c3297d4113490c3388fbd2f92de80e0",
          "body": null,
          "is_bot": false,
          "headline": "Overload A button on detail component",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-10T21:48:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55f91172ae84c868c5b783dd3416c65326ef08a2",
          "body": null,
          "is_bot": false,
          "headline": "Remove start button for triggering the dropdown",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-10T06:52:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "379433ffce6d76a13c2df6c8364de18a295e8b3f",
          "body": null,
          "is_bot": false,
          "headline": "Add dropdown to detail component",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-10T06:14:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c19032a07ecb63d39c918b99f5180a0963f8a4eb",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-10T04:29:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "292b6e8aae325639b3adf4581a2ffc7ecfc1c15c",
          "body": null,
          "is_bot": false,
          "headline": "Add Ko-fi username to FUNDING.yml",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-10T04:22:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e27a3e984db4569e6eeaabf4784ae16d0811c997",
          "body": null,
          "is_bot": false,
          "headline": "Caching work and fixing save sync",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-06T23:53:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bd9c78525c563d5fe13741d99f72f1e647670e3b",
          "body": null,
          "is_bot": false,
          "headline": "Expose logger filename for cases where init has to happen after",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-02T20:04:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b74890bcda2677162832e85b9d1f8ca71d0fb979",
          "body": null,
          "is_bot": false,
          "headline": "Fix logger",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-01T17:10:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5282cd6704e0436b3e8f1ee469dd6598d7d212a0",
          "body": null,
          "is_bot": false,
          "headline": "Add select / deselect all support to list component.",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2026-01-01T14:56:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "94431f6c61ca2543153b4bce03ebccc83003e415",
          "body": null,
          "is_bot": false,
          "headline": "Update input mapper to properly output bindings",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-31T16:02:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c9ccb3fa76e1223a67aeeb9edbfacff776c0e0d",
          "body": null,
          "is_bot": false,
          "headline": "Add button combos / sequences",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-31T05:33:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee30338bc11361646546b18d0c959f0550206152",
          "body": null,
          "is_bot": false,
          "headline": "Fix the NextUi icon issue",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-31T03:05:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8591d4059ed88dee5973a806722b8a9d00fa2075",
          "body": "This reverts commit a6aec7d57153f9ca2b36ffc92bbc7226573b9a58.",
          "is_bot": false,
          "headline": "Revert \"Remove NextUI font for the time being\"",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-31T02:53:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6aec7d57153f9ca2b36ffc92bbc7226573b9a58",
          "body": null,
          "is_bot": false,
          "headline": "Remove NextUI font for the time being",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-31T00:48:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06568e33dbfb3672b620504fe366bbe90034d4ac",
          "body": null,
          "is_bot": false,
          "headline": "Fix download bar rendering",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-30T21:46:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3deb80aab57f5ed073936257fbc46410d43445ee",
          "body": null,
          "is_bot": false,
          "headline": "Texture cache",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-30T20:35:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4d3f82bdc0e8a57890c9bb9f794b982e8625f5d6",
          "body": null,
          "is_bot": false,
          "headline": "Revert status bar coloring",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-30T14:35:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5cc73f64bbaaa3d8325c97e96f8e40fee035019c",
          "body": null,
          "is_bot": false,
          "headline": "Fix small regression is list page jumping logic",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-30T14:03:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bfd6a1db1c69379729cfe86be136ebd4c052717a",
          "body": null,
          "is_bot": false,
          "headline": "Add update icon to constants",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-30T04:58:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7566e3137249613f06994ca14922b02f3eb9958",
          "body": null,
          "is_bot": false,
          "headline": "Update default font so it has glyphs for everything",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-30T03:10:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a5976503134995f04098a8543a60da8cfbb32d1",
          "body": null,
          "is_bot": false,
          "headline": "New default font (Next still uses nerdified versions of their fonts)",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-29T17:00:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06c50551759f3a6c8b3d0296cbacf2a8541117b8",
          "body": null,
          "is_bot": false,
          "headline": "Conditional option list options",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-29T04:54:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea58eb6d6a6a6a1857b4e44b8e840990da1fed68",
          "body": null,
          "is_bot": false,
          "headline": "Padding",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-28T05:32:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1a902c8e24b8c86c366c38e0a620aee659c9bdd",
          "body": "… how it interacts with list contents",
          "is_bot": false,
          "headline": "Fix regression with detail title centering. Fix status bar sizing and…",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-28T05:22:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "888a363cfef72bd2c7303f96869c010800d20b61",
          "body": null,
          "is_bot": false,
          "headline": "Atomically hidable footer help items",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-28T04:24:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "200c5bac8b05585ec734742bea77e8c15887f228",
          "body": null,
          "is_bot": false,
          "headline": "Add status bar with dynamic icon support",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-28T01:50:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bec06fc20fec224b4a8e6b74d61bcff382127096",
          "body": null,
          "is_bot": false,
          "headline": "Description message tied to current selection",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-26T22:11:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "400587a28d89bd07f3209c80e9c2f19dfeb2f26f",
          "body": null,
          "is_bot": false,
          "headline": "Fix how selection message rotates through options",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-26T22:02:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad3b0437396bc4a22f96e85929592bb140ce665d",
          "body": null,
          "is_bot": false,
          "headline": "VisibleStartIndex like list has",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-26T19:54:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1a29ec9d45f90ae50912fcf8eb32b60d93ed661",
          "body": null,
          "is_bot": false,
          "headline": "VisibleStartIndex like list has",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-26T19:28:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08aeb2108c9fe07db7f0144c4329363469d01274",
          "body": null,
          "is_bot": false,
          "headline": "Fix for option list VSI",
          "author_name": "Brandon T. Kowalski",
          "author_login": "BrandonKowalski",
          "committed_at": "2025-12-26T15:21:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 47,
      "commits_last_year": 232,
      "latest_release_at": "2026-07-18T03:51:26Z",
      "latest_release_tag": "v2.24.0",
      "releases_from_tags": true,
      "days_since_last_push": 3,
      "active_weeks_last_year": 39,
      "days_since_latest_release": 3,
      "mean_days_between_releases": 11.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/BrandonKowalski/gabagool/v2",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/BrandonKowalski/gabagool/v2",
          "is_deprecated": false,
          "latest_version": "v2.24.0",
          "repository_url": "https://github.com/BrandonKowalski/gabagool",
          "versions_count": 91,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T03:51:26Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 3
        }
      ]
    },
    "popularity": {
      "forks": 7,
      "stars": 11,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2025-07-18",
            "count": 1
          },
          {
            "date": "2025-12-23",
            "count": 1
          },
          {
            "date": "2026-01-15",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "date": "2026-06-02",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 7,
        "total_forks": 7
      },
      "star_history": {
        "days": [
          {
            "date": "2025-12-11",
            "count": 1
          },
          {
            "date": "2025-12-30",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 1
          },
          {
            "date": "2026-03-08",
            "count": 1
          },
          {
            "date": "2026-03-20",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-03-26",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 1
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-21",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 11,
        "total_stars": 11
      },
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 46469,
      "source_files_sampled": 49,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "golang.org/x/image",
            "direct": false,
            "version": "v0.34.0",
            "severity": "high",
            "ecosystem": "go",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-44p7-9xx4-hf2g",
              "GHSA-q675-qj96-32m9",
              "GO-2026-4815",
              "GO-2026-4961",
              "GO-2026-4962",
              "GO-2026-5031",
              "GO-2026-5032",
              "GO-2026-5061",
              "GO-2026-5062",
              "GO-2026-5066"
            ],
            "fixed_version": "0.43.0",
            "advisory_count": 10,
            "oldest_advisory_days": 118
          },
          {
            "name": "golang.org/x/net",
            "direct": false,
            "version": "v0.48.0",
            "severity": "moderate",
            "ecosystem": "go",
            "cvss_score": 6.5,
            "advisory_ids": [
              "GHSA-5cv4-jp36-h3mw",
              "GO-2026-4918",
              "GO-2026-5025",
              "GO-2026-5026",
              "GO-2026-5027",
              "GO-2026-5028",
              "GO-2026-5029",
              "GO-2026-5030",
              "GO-2026-5942"
            ],
            "fixed_version": "1.26.3",
            "advisory_count": 9,
            "oldest_advisory_days": 75
          },
          {
            "name": "golang.org/x/text",
            "direct": true,
            "version": "v0.33.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5970"
            ],
            "fixed_version": "0.39.0",
            "advisory_count": 1,
            "oldest_advisory_days": 7
          }
        ],
        "collected": true,
        "truncated": false,
        "by_severity": {
          "high": 1,
          "unknown": 1,
          "moderate": 1
        },
        "advisory_count": 20,
        "affected_count": 3,
        "assessed_count": 11,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/BrandonKowalski/certifiable",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.0"
        },
        {
          "name": "github.com/BurntSushi/toml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/holoplot/go-evdev",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20250804134636-ab1d56a1fe83"
        },
        {
          "name": "github.com/nicksnyder/go-i18n/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.6.1"
        },
        {
          "name": "github.com/srwiley/oksvg",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20221011165216-be6e8873101c"
        },
        {
          "name": "github.com/srwiley/rasterx",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.0.0-20220730225603-2ab79fcdd4ef"
        },
        {
          "name": "github.com/veandco/go-sdl2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.4.40"
        },
        {
          "name": "go.uber.org/atomic",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.0"
        },
        {
          "name": "golang.org/x/text",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.33.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/brandonkowalski/certifiable",
            "direct": true,
            "version": "v1.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/burntsushi/toml",
            "direct": true,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/holoplot/go-evdev",
            "direct": true,
            "version": "v0.0.0-20250804134636-ab1d56a1fe83",
            "ecosystem": "go"
          },
          {
            "name": "github.com/nicksnyder/go-i18n/v2",
            "direct": true,
            "version": "v2.6.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/srwiley/oksvg",
            "direct": true,
            "version": "v0.0.0-20221011165216-be6e8873101c",
            "ecosystem": "go"
          },
          {
            "name": "github.com/srwiley/rasterx",
            "direct": true,
            "version": "v0.0.0-20220730225603-2ab79fcdd4ef",
            "ecosystem": "go"
          },
          {
            "name": "github.com/veandco/go-sdl2",
            "direct": true,
            "version": "v0.4.40",
            "ecosystem": "go"
          },
          {
            "name": "go.uber.org/atomic",
            "direct": true,
            "version": "v1.11.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/text",
            "direct": true,
            "version": "v0.33.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/image",
            "direct": false,
            "version": "v0.34.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/net",
            "direct": false,
            "version": "v0.48.0",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 11,
        "direct_count": 9,
        "indirect_count": 2
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 2,
        "merged_prs": 16,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 1,
        "closed_unmerged_prs": 3
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "BrandonKowalski",
          "commits": 295,
          "avatar_url": "https://avatars.githubusercontent.com/u/1323467?v=4"
        },
        {
          "type": "User",
          "login": "redria7",
          "commits": 18,
          "avatar_url": "https://avatars.githubusercontent.com/u/67815291?v=4"
        },
        {
          "type": "User",
          "login": "pawndev",
          "commits": 6,
          "avatar_url": "https://avatars.githubusercontent.com/u/7567343?v=4"
        },
        {
          "type": "User",
          "login": "frysee",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/1319672?v=4"
        },
        {
          "type": "User",
          "login": "jtbrough",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/478187?v=4"
        },
        {
          "type": "User",
          "login": "josegonzalez",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/65675?v=4"
        }
      ],
      "contributors_sampled": 6,
      "top_contributor_share": 0.91
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "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": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 7 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 2,
            "reason": "Found 6/21 approved changesets -- score normalized to 2",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 7 contributing companies or organizations",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 8,
            "reason": "10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8",
            "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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "17 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "0cb8c7995720abfda8c77161f26ec55af9d126d7",
        "ran_at": "2026-07-21T21:33:19Z",
        "aggregate_score": 3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/BrandonKowalski/gabagool",
    "host": "github.com",
    "name": "gabagool",
    "owner": "BrandonKowalski"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 55,
      "inputs": {
        "security": 42,
        "vitality": 89,
        "community": 36,
        "governance": 63,
        "engineering": 34
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 89,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 89,
            "inputs": {
              "commits_last_year": 232,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 39
            },
            "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": "39/52 weeks with commits",
                "points": 27,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 39
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "232 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 232
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 47,
              "latest_release_tag": "v2.24.0",
              "releases_from_tags": true,
              "days_since_latest_release": 3,
              "mean_days_between_releases": 11.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "47 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 47
                    }
                  }
                ],
                "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 ~11.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 11.2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "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": "at_risk",
        "name": "Community & Adoption",
        "value": 36,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 23,
            "inputs": {
              "forks": 7,
              "stars": 11,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "11 stars",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 11
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "7 forks",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 63,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 29,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 6,
              "top_contributor_share": 0.91
            },
            "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 91% of commits",
                "points": 2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "6 contributors",
                "points": 8.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 16,
              "open_issues": 0,
              "closed_issues": 1,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 3
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "16/19 decided PRs merged",
                "points": 32.2,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 16,
                      "decided": 19
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 6/21 approved changesets -- score normalized to 2",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 54,
            "inputs": {
              "followers": 28,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "BrandonKowalski",
              "public_repos": 30,
              "account_age_days": 5304
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "28 followers of BrandonKowalski",
                "points": 10.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 28,
                      "login": "BrandonKowalski"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "30 public repos, account ~14 yr old",
                "points": 22.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 30
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/BrandonKowalski/gabagool/v2"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 3
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 3 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "91 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 91
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 34,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "critical",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 7 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [
                "nextui",
                "retrogaming",
                "sdl2"
              ],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "3 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 42,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "dangerous_workflow",
                    "packaging",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 14,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 4,
              "scorecard_aggregate": 3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 7 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 6/21 approved changesets -- score normalized to 2",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 7 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "10 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 8",
                "points": 6,
                "status": "partial",
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "17 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 11 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 11
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 89,
            "inputs": {
              "source": "osv",
              "advisories": 20,
              "affected_packages": 3,
              "assessed_packages": 11,
              "unassessed_packages": 0,
              "affected_by_severity": "high 1, moderate 1, unknown 1",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: golang.org/x/text v0.33.0 (unknown)",
                "points": 26.6,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "golang.org/x/text v0.33.0 (unknown)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory has been public longer than 90 days",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "advisories_none_stale",
                    "params": {
                      "days": 90
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 11,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "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": 10
            },
            "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": 52,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 16,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.31,
              "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": "31 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 16.5,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 31,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.02,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "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": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "2 of the last 100 commits agent-authored or agent-credited",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 2,
                      "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": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 46469,
              "source_files_sampled": 49,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/49 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 49,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [],
  "report_type": "repository",
  "generated_at": "2026-07-21T21:33:32.487807Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/BrandonKowalski/gabagool.svg",
  "full_name": "BrandonKowalski/gabagool",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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