Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-23 04:47 UTC

abilisoft / usbip-go

Pure-Go reimplementation of USB/IP userspace for Linux

GoApache-2.0★ 3 estrellas⑂ 0 forksdesde abr 2026Ver en GitHub ↗

abilisoft/usbip-go tiene un índice de salud de 65 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Engineering Quality (84/100) y la más baja, Community & Adoption (39/100). Se actualizó por última vez hace 3 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

65
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

AbiliSoftOrganización
1 seguidor4 repositorios públicosdesde abr 2026

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/abilisoft/usbip-gov1.0.2-6hace 4 días

Métricas por categoría

Vitalidad

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

69Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 3 días
3.5/36Cadencia de commits — 5/52 semanas con commits
18/18Volumen de commits — 599 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year599
human_commit_share0,92
days_since_last_push3
active_weeks_last_year5
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
36/36Recencia de las versiones — última versión hace 4 días
12.6/27Cadencia de publicación — cadencia desconocida (una sola versión)
10/10OpenSSF Scorecard: Signed-Releases — 1 out of the last 1 releases have a total of 2 signed artifacts.
Datos de entrada utilizados
releases_count1
latest_release_tagv1.0.2
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases

Comunidad y Adopción

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

39En riesgo · 18% del índice global
Cómo se puntúa
4.9/60Estrellas — 3 estrellas
0/25Forks — 0 forks
0/15Observadores — 1 observadores
Datos de entrada utilizados
forks0
stars3
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
18/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_template

Sostenibilidad y Gobernanza

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

51Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
36.6/38.3Aceptación de PR — 43/45 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs43
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs2
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
2.2/25Alcance del propietario — 1 seguidores de abilisoft
5.6/25Trayectoria — 4 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers1
owner_typeOrganization
is_verified
owner_loginabilisoft
public_repos4
account_age_days95
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 4 días
20/20Historial de versiones — 6 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/abilisoft/usbip-go
ecosystemsgo
any_deprecatedno
min_days_since_publish4

Calidad de Ingeniería

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

84Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 13 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yaml, .golangci.yml
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_configno
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

84Bueno · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
6.8/7.5Branch-Protection — branch protection is not maximal on development and all release branches
2.5/2.5CI-Tests — 11 out of 11 merged PRs checked by a CI test -- score normalized to 10
1.2/2.5CII-Best-Practices — badge detected: Passing
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
4/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
5/5SAST — SAST tool is run on all commits
5/5Security-Policy — security policy file detected
7.5/7.5Signed-Releases — 1 out of the last 1 releases have a total of 2 signed artifacts.
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate8
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.
Cómo se puntúa
35/35Dependencias directas libres de avisos conocidos — ninguna dependencia directa tiene un aviso conocido
0/25Dependencias indirectas libres de avisos conocidos — el conjunto transitivo no es separable de las dependencias de desarrollo y prueba en este alcance
0/40Sin avisos pendientes — ningún aviso tiene fecha de publicación
Datos de entrada utilizados
sourceosv
advisories0
affected_packages0
assessed_packages244
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluidos de la puntuación (sin datos o no aplicable): Dependencias indirectas libres de avisos conocidos, Sin avisos pendientes. Los pesos restantes se han renormalizado. Se cotejaron 244 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.

82Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, vendor/github.com/clipperhouse/displaywidth/AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 92 de 92 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesAGENTS.md, vendor/github.com/clipperhouse/displaywidth/AGENTS.md
agent_instruction_max_bytes6677
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, vendor/charm.land/lipgloss/v2/Taskfile.yaml, vendor/github.com/charmbracelet/fang/Taskfile.yml, vendor/github.com/spf13/cobra/Makefile, vendor/go.uber.org/goleak/Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yaml, .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
8/8Mantenimiento automatizado — 8 de los últimos 100 commits son actualizaciones automáticas de dependencias
8/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_filesMakefile, vendor/charm.land/lipgloss/v2/Taskfile.yaml, vendor/github.com/charmbracelet/fang/Taskfile.yml, vendor/github.com/spf13/cobra/Makefile, vendor/go.uber.org/goleak/Makefile
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod, tools/go.mod
dependency_bot_commit_share0,08
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54.8/55Tamaños de archivo manejables — 1/357 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes66.581
source_files_sampled357
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

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

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Más detalle

OpenSSF Scorecard 8.0 / 10
8.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-23 04:47 UTC

10Binary-Artifactsno binaries found in the repo
9Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests11 out of 11 merged PRs checked by a CI test -- score normalized to 10
5CII-Best-Practicesbadge detected: Passing
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
8Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 8
10SASTSAST tool is run on all commits
10Security-Policysecurity policy file detected
10Signed-Releases1 out of the last 1 releases have a total of 2 signed artifacts.
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 11
RegistroPaqueteRestricción de versiónManifiesto
Gocharm.land/lipgloss/v2v2.0.5go.mod
Gogithub.com/charmbracelet/colorprofilev0.4.3go.mod
Gogithub.com/charmbracelet/fangv1.0.0go.mod
Gogithub.com/coreos/go-systemd/v22v22.7.0go.mod
Gogithub.com/lmittmann/tintv1.2.0go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogo.uber.org/goleakv1.3.0go.mod
Gogolang.org/x/sysv0.47.0go.mod
Gogolang.org/x/termv0.45.0go.mod
Gogolang.org/x/timev0.15.0go.mod
Todas las dependencias 244

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

RegistroPaqueteVersiónRelación
Gocharm.land/lipgloss/v2v2.0.5directa
Gogithub.com/charmbracelet/colorprofilev0.4.3directa
Gogithub.com/charmbracelet/fangv1.0.0directa
Gogithub.com/coreos/go-systemd/v22v22.7.0directa
Gogithub.com/lmittmann/tintv1.2.0directa
Gogithub.com/spf13/cobrav1.10.2directa
Gogithub.com/stretchr/testifyv1.11.1directa
Gogo.uber.org/goleakv1.3.0directa
Gogolang.org/x/sysv0.47.0directa
Gogolang.org/x/termv0.45.0directa
Gogolang.org/x/timev0.15.0directa
Go4d63.com/gocheckcompilerdirectivesv1.4.0indirecta
Go4d63.com/gochecknoglobalsv0.2.2indirecta
Gocodeberg.org/chavacava/garifv0.2.1indirecta
Gocodeberg.org/polyfloyd/go-errorlintv1.9.0indirecta
Godev.gaijin.team/go/exhaustruct/v4v4.0.0indirecta
Godev.gaijin.team/go/golibv0.8.1indirecta
Gogithub.com/4meepo/tagalignv1.4.3indirecta
Gogithub.com/abirdcfly/dupwordv0.1.8indirecta
Gogithub.com/adminbenni/iota-mixingv1.0.0indirecta
Gogithub.com/alecthomas/chroma/v2v2.27.0indirecta
Gogithub.com/alecthomas/go-check-sumtypev0.3.1indirecta
Gogithub.com/alexkohler/nakedret/v2v2.0.6indirecta
Gogithub.com/alexkohler/preallocv1.1.0indirecta
Gogithub.com/alfatraining/structtagv1.0.0indirecta
Gogithub.com/alingse/asasalintv0.0.11indirecta
Gogithub.com/alingse/nilnesserrv0.2.0indirecta
Gogithub.com/alwxsin/noinlineerrv1.0.5indirecta
Gogithub.com/antonboom/errnamev1.1.2indirecta
Gogithub.com/antonboom/nilnilv1.1.2indirecta
Gogithub.com/antonboom/testifylintv1.6.4indirecta
Gogithub.com/ashanbrown/forbidigo/v2v2.3.1indirecta
Gogithub.com/ashanbrown/makezero/v2v2.2.1indirecta
Gogithub.com/beorn7/perksv1.0.1indirecta
Gogithub.com/bkielbasa/cyclopv1.2.3indirecta
Gogithub.com/blizzy78/varnamelenv0.8.0indirecta
Gogithub.com/bluekeyes/go-gitdiffv0.8.1indirecta
Gogithub.com/bombsimon/wsl/v4v4.7.0indirecta
Gogithub.com/bombsimon/wsl/v5v5.8.0indirecta
Gogithub.com/breml/bidichkv0.3.3indirecta
Gogithub.com/breml/errchkjsonv0.4.1indirecta
Gogithub.com/burntsushi/tomlv1.6.0indirecta
Gogithub.com/butuzov/ireturnv0.4.1indirecta
Gogithub.com/butuzov/mirrorv1.3.3indirecta
Gogithub.com/catenacyber/perfsprintv0.10.1indirecta
Gogithub.com/ccojocar/zxcvbn-gov1.0.4indirecta
Gogithub.com/cespare/xxhash/v2v2.3.0indirecta
Gogithub.com/charithe/durationcheckv0.0.11indirecta
Gogithub.com/charmbracelet/ultravioletv0.0.0-20260703014108-f5a850f9c2b7indirecta
Gogithub.com/charmbracelet/x/ansiv0.11.7indirecta
Gogithub.com/charmbracelet/x/exp/charmtonev0.0.0-20260705004817-2cc9a8fe1146indirecta
Gogithub.com/charmbracelet/x/exp/goldenv0.0.0-20260705004817-2cc9a8fe1146indirecta
Gogithub.com/charmbracelet/x/termv0.2.2indirecta
Gogithub.com/charmbracelet/x/termiosv0.1.1indirecta
Gogithub.com/charmbracelet/x/windowsv0.2.2indirecta
Gogithub.com/checkmake/checkmakev0.3.2indirecta
Gogithub.com/ckaznocha/intrangev0.3.1indirecta
Gogithub.com/clickhouse/clickhouse-go-linterv1.2.1indirecta
Gogithub.com/clipperhouse/displaywidthv0.11.0indirecta
Gogithub.com/clipperhouse/uax29/v2v2.7.0indirecta
Gogithub.com/curioswitch/go-reassignv0.3.0indirecta
Gogithub.com/daixiang0/gciv0.14.0indirecta
Gogithub.com/dave/dstv0.27.4indirecta
Gogithub.com/davecgh/go-spewv1.1.1indirecta
Gogithub.com/davecgh/go-spewv1.1.2-0.20180830191138-d8f796af33ccindirecta
Gogithub.com/denis-tingaikin/go-headerv0.5.0indirecta
Gogithub.com/djarvur/go-err113v0.1.1indirecta
Gogithub.com/dlclark/regexp2/v2v2.3.0indirecta
Gogithub.com/ettle/strcasev0.2.0indirecta
Gogithub.com/fatih/colorv1.19.0indirecta
Gogithub.com/fatih/structtagv1.2.0indirecta
Gogithub.com/firefart/nonamedreturnsv1.0.8indirecta
Gogithub.com/fsnotify/fsnotifyv1.10.1indirecta
Gogithub.com/fzipp/gocyclov0.6.0indirecta
Gogithub.com/ghostiam/protogetterv0.3.21indirecta
Gogithub.com/go-critic/go-criticv0.14.4indirecta
Gogithub.com/go-gremlins/gremlinsv0.6.0indirecta
Gogithub.com/go-ini/iniv1.67.0indirecta
Gogithub.com/go-toolsmith/astcastv1.1.0indirecta
Gogithub.com/go-toolsmith/astcopyv1.1.0indirecta
Gogithub.com/go-toolsmith/astequalv1.2.0indirecta
Gogithub.com/go-toolsmith/astfmtv1.1.0indirecta
Gogithub.com/go-toolsmith/astpv1.1.0indirecta
Gogithub.com/go-toolsmith/strparsev1.1.0indirecta
Gogithub.com/go-toolsmith/typepv1.1.0indirecta
Gogithub.com/go-viper/mapstructure/v2v2.5.0indirecta
Gogithub.com/go-xmlfmt/xmlfmtv1.1.3indirecta
Gogithub.com/gobwas/globv0.2.3indirecta
Gogithub.com/goccy/go-jsonv0.10.6indirecta
Gogithub.com/godoc-lint/godoc-lintv0.11.2indirecta
Gogithub.com/gofrs/flockv0.13.0indirecta
Gogithub.com/golangci/asciicheckv0.5.0indirecta
Gogithub.com/golangci/duplv0.0.0-20260401084720-c99c5cf5c202indirecta
Gogithub.com/golangci/go-printf-func-namev0.1.1indirecta
Gogithub.com/golangci/gofmtv0.0.0-20250106114630-d62b90e6713dindirecta
Gogithub.com/golangci/golangci-lint/v2v2.12.2indirecta
Gogithub.com/golangci/golinesv0.15.0indirecta
Gogithub.com/golangci/misspellv0.8.0indirecta
Gogithub.com/golangci/plugin-module-registerv0.1.2indirecta
Gogithub.com/golangci/revgrepv0.8.0indirecta
Gogithub.com/golangci/rowserrcheckv0.0.0-20260701145345-399602f983c8indirecta
Gogithub.com/golangci/swaggoswagv0.0.0-20250504205917-77f2aca3143eindirecta
Gogithub.com/golangci/unconvertv0.0.0-20250410112200-a129a6e6413eindirecta
Gogithub.com/google/go-cmpv0.7.0indirecta
Gogithub.com/google/pprofv0.0.0-20260709232956-b9395ee17fa0indirecta
Gogithub.com/google/renameiov1.0.1indirecta
Gogithub.com/gordonklaus/ineffassignv0.2.0indirecta
Gogithub.com/gostaticanalysis/analysisutilv0.7.1indirecta
Gogithub.com/gostaticanalysis/commentv1.5.0indirecta
Gogithub.com/gostaticanalysis/forcetypeassertv0.2.0indirecta
Gogithub.com/gostaticanalysis/nilerrv0.1.2indirecta
Gogithub.com/gostaticanalysis/testutilv0.6.1indirecta
Gogithub.com/hako/durafmtv0.0.0-20210608085754-5c1018a4e16bindirecta
Gogithub.com/hashicorp/go-immutable-radix/v2v2.1.0indirecta
Gogithub.com/hashicorp/go-versionv1.9.0indirecta
Gogithub.com/hashicorp/golang-lru/v2v2.0.7indirecta
Gogithub.com/hectane/go-aclv1.0.0indirecta
Gogithub.com/hexops/gotextdiffv1.0.3indirecta
Gogithub.com/inconshreveable/mousetrapv1.1.0indirecta
Gogithub.com/jgautheron/goconstv1.10.2indirecta
Gogithub.com/jjti/go-spancheckv0.6.5indirecta
Gogithub.com/julz/importasv0.2.0indirecta
Gogithub.com/karamaru-alpha/copyloopvarv1.2.2indirecta
Gogithub.com/kisielk/errcheckv1.20.0indirecta
Gogithub.com/kkhaike/contextcheckv1.1.6indirecta
Gogithub.com/kr/prettyv0.3.1indirecta
Gogithub.com/kulti/thelperv0.7.1indirecta
Gogithub.com/kunwardeep/paralleltestv1.0.15indirecta
Gogithub.com/lasiar/canonicalheaderv1.1.2indirecta
Gogithub.com/ldez/exptostdv0.4.5indirecta
Gogithub.com/ldez/gomoddirectivesv0.9.0indirecta
Gogithub.com/ldez/grignotinv0.10.1indirecta
Gogithub.com/ldez/structtagsv0.6.1indirecta
Gogithub.com/ldez/tagliatellev0.7.2indirecta
Gogithub.com/ldez/usetestingv0.5.0indirecta
Gogithub.com/leonklingele/grouperv1.1.2indirecta
Gogithub.com/lucasb-eyer/go-colorfulv1.4.0indirecta
Gogithub.com/macabu/inamedparamv0.2.0indirecta
Gogithub.com/makenowjust/heredocv1.0.0indirecta
Gogithub.com/manuelarte/embeddedstructfieldcheckv0.4.0indirecta
Gogithub.com/manuelarte/funcorderv0.6.0indirecta
Gogithub.com/maratori/testableexamplesv1.0.1indirecta
Gogithub.com/maratori/testpackagev1.1.2indirecta
Gogithub.com/masterminds/semver/v3v3.5.0indirecta
Gogithub.com/matoous/godoxv1.1.0indirecta
Gogithub.com/matryer/isv1.4.1indirecta
Gogithub.com/mattn/go-colorablev0.1.15indirecta
Gogithub.com/mattn/go-isattyv0.0.22indirecta
Gogithub.com/mattn/go-runewidthv0.0.24indirecta
Gogithub.com/mgechev/revivev1.15.0indirecta
Gogithub.com/mirrexone/unqueryvetv1.5.4indirecta
Gogithub.com/mitchellh/go-homedirv1.1.0indirecta
Gogithub.com/moricho/tparallelv0.3.2indirecta
Gogithub.com/muesli/cancelreaderv0.2.2indirecta
Gogithub.com/muesli/mangov0.2.0indirecta
Gogithub.com/muesli/mango-cobrav1.3.0indirecta
Gogithub.com/muesli/mango-pflagv0.2.0indirecta
Gogithub.com/muesli/roffv0.1.0indirecta
Gogithub.com/munnerz/goautonegv0.0.0-20191010083416-a7dc8b61c822indirecta
Gogithub.com/nakabonne/nestifv0.3.1indirecta
Gogithub.com/nishanths/exhaustivev0.12.0indirecta
Gogithub.com/nishanths/predeclaredv0.2.2indirecta
Gogithub.com/nunnatsa/ginkgolinterv0.23.0indirecta
Gogithub.com/olekukonko/catv0.0.0-20250911104152-50322a0618f6indirecta
Gogithub.com/olekukonko/errorsv1.3.0indirecta
Gogithub.com/olekukonko/llv0.1.8indirecta
Gogithub.com/olekukonko/tablewriterv1.1.4indirecta
Gogithub.com/onsi/ginkgo/v2v2.32.0indirecta
Gogithub.com/onsi/gomegav1.42.1indirecta
Gogithub.com/openpeedeep/depguard/v2v2.2.1indirecta
Gogithub.com/pelletier/go-toml/v2v2.4.3indirecta
Gogithub.com/pmezard/go-difflibv1.0.0indirecta
Gogithub.com/pmezard/go-difflibv1.0.1-0.20181226105442-5d4384ee4fb2indirecta
Gogithub.com/prometheus/client_golangv1.23.2indirecta
Gogithub.com/prometheus/client_modelv0.6.2indirecta
Gogithub.com/prometheus/commonv0.70.0indirecta
Gogithub.com/prometheus/procfsv0.21.1indirecta
Gogithub.com/quasilyte/go-ruleguardv0.4.5indirecta
Gogithub.com/quasilyte/go-ruleguard/dslv0.3.23indirecta
Gogithub.com/quasilyte/gogrepv0.5.0indirecta
Gogithub.com/quasilyte/regex/syntaxv0.0.0-20210819130434-b3f0c404a727indirecta
Gogithub.com/quasilyte/stdinfov0.0.0-20220114132959-f7386bf02567indirecta
Gogithub.com/raeperd/recvcheckv0.3.0indirecta
Gogithub.com/rivo/unisegv0.4.7indirecta
Gogithub.com/rogpeppe/go-internalv1.15.0indirecta
Gogithub.com/ryancurrah/gomodguardv1.4.1indirecta
Gogithub.com/ryancurrah/gomodguard/v2v2.1.3indirecta
Gogithub.com/ryanrolds/sqlclosecheckv0.6.0indirecta
Gogithub.com/sagikazarmark/locaferov0.12.0indirecta
Gogithub.com/sanposhiho/wastedassign/v2v2.1.0indirecta
Gogithub.com/santhosh-tekuri/jsonschema/v6v6.0.2indirecta
Gogithub.com/sashamelentyev/interfacebloatv1.1.0indirecta
Gogithub.com/sashamelentyev/usestdlibvarsv1.29.0indirecta
Gogithub.com/securego/gosec/v2v2.27.1indirecta
Gogithub.com/sergi/go-diffv1.4.0indirecta
Gogithub.com/sirupsen/logrusv1.9.4indirecta
Gogithub.com/sivchari/containedctxv1.0.3indirecta
Gogithub.com/sonatard/noctxv0.5.1indirecta
Gogithub.com/sourcegraph/go-diffv0.8.0indirecta
Gogithub.com/spf13/aferov1.15.0indirecta
Gogithub.com/spf13/castv1.10.0indirecta
Gogithub.com/spf13/pflagv1.0.10indirecta
Gogithub.com/spf13/viperv1.21.0indirecta
Gogithub.com/ssgreg/nlreturn/v2v2.2.1indirecta
Gogithub.com/stbenjam/no-sprintf-host-portv0.3.1indirecta
Gogithub.com/stretchr/objxv0.5.3indirecta
Gogithub.com/subosito/gotenvv1.6.0indirecta
Gogithub.com/tenntenn/text/transformv0.0.0-20250402111347-ba836492e880indirecta
Gogithub.com/tetafro/godotv1.5.6indirecta
Gogithub.com/timakin/bodyclosev0.0.0-20260129054331-73d1f95b84b4indirecta
Gogithub.com/timonwong/loggercheckv0.11.0indirecta
Gogithub.com/tomarrell/wrapcheck/v2v2.12.0indirecta
Gogithub.com/tommy-muehle/go-mnd/v2v2.5.1indirecta
Gogithub.com/ultraware/funlenv0.2.0indirecta
Gogithub.com/ultraware/whitespacev0.2.0indirecta
Gogithub.com/uudashr/gocognitv1.2.1indirecta
Gogithub.com/uudashr/ifacev1.5.0indirecta
Gogithub.com/xen0n/gosmopolitanv1.3.0indirecta
Gogithub.com/xo/terminfov0.0.0-20220910002029-abceb7e1c41eindirecta
Gogithub.com/yagipy/maintidxv1.0.0indirecta
Gogithub.com/yeya24/promlinterv0.3.0indirecta
Gogithub.com/ykadowak/zerologlintv0.1.5indirecta
Gogitlab.com/bosi/decorderv0.4.2indirecta
Gogo-simpler.org/musttagv0.14.0indirecta
Gogo-simpler.org/sloglintv0.12.0indirecta
Gogo.augendre.info/arangolintv0.4.0indirecta
Gogo.augendre.info/fatcontextv0.10.0indirecta
Gogo.uber.org/multierrv1.11.0indirecta
Gogo.uber.org/zapv1.28.0indirecta
Gogo.yaml.in/yaml/v3v3.0.4indirecta
Gogolang.org/x/expv0.0.0-20260709172345-9ea1abe57597indirecta
Gogolang.org/x/exp/typeparamsv0.0.0-20260709172345-9ea1abe57597indirecta
Gogolang.org/x/modv0.38.0indirecta
Gogolang.org/x/syncv0.22.0indirecta
Gogolang.org/x/telemetryv0.0.0-20260710170516-c325552849a7indirecta
Gogolang.org/x/textv0.40.0indirecta
Gogolang.org/x/toolsv0.48.0indirecta
Gogolang.org/x/vulnv1.6.0indirecta
Gogoogle.golang.org/protobufv1.36.11indirecta
Gogopkg.in/check.v1v1.0.0-20201130134442-10cb98267c6cindirecta
Gogopkg.in/yaml.v3v3.0.1indirecta
Gohonnef.co/go/toolsv0.7.0indirecta
Gomvdan.cc/gofumptv0.10.0indirecta
Gomvdan.cc/unparamv0.0.0-20251027182757-5beb8c8f8f15indirecta
Avisos de dependencias 0

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

Ningún aviso conocido afecta a las dependencias evaluadas.

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": [],
      "is_fork": false,
      "size_kb": 13166,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 2192773,
        "Shell": 232352,
        "Makefile": 8847,
        "Starlark": 78146
      },
      "pushed_at": "2026-07-20T04:18:35Z",
      "created_at": "2026-04-25T16:50:05Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-19T02:13:08Z",
      "description": "Pure-Go reimplementation of USB/IP userspace for Linux",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "AbiliSoft",
      "type": "Organization",
      "login": "abilisoft",
      "company": null,
      "location": "United States of America",
      "followers": 1,
      "avatar_url": "https://avatars.githubusercontent.com/u/277256767?v=4",
      "created_at": "2026-04-18T12:23:30Z",
      "is_verified": null,
      "public_repos": 4,
      "account_age_days": 95
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-07-18T19:52:38Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "b46dc5467ef75f3d0a7c89069871ed9c9402db75",
          "body": "## Summary\n\n- add an opt-in BuildBuddy BES and remote-cache Bazel configuration\n- authenticate trusted GitHub Actions through a private ignored Bazel\noverride\n- keep fork pull requests on repository-local caching when secrets are\nunavailable\n- pass only the BuildBuddy secret through reusable workflo\n[…]\n passed\n\nRemote execution is intentionally not enabled: a fresh RBE proof exposed\nexisting non-remote-hermetic shell tests. This PR enables the requested\nshared cache without weakening or breaking CI.",
          "is_bot": false,
          "headline": "ci: enable BuildBuddy remote caching (#45)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-19T02:13:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "74a92760f88deaf0677994c1f5b79c1c4f0606bc",
          "body": "Use GitHub CLI-compatible streamed pagination for immutable release recovery and cover multi-row release state aggregation.",
          "is_bot": false,
          "headline": "fix(release): support GitHub CLI pagination (#44)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-18T19:32:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8c588542eba516521d82c1ac0e12d733905cc3b5",
          "body": "## Summary\n\n- correct normal release validation for annotated tag objects versus\npeeled commits\n- add a fixed, protected-main-only recovery workflow for the existing\nsigned `v1.0.2` tag\n- bind publication to one exact draft ID, asset roster, local/remote\ndigests, and SLSA subjects\n- synchronize regr\n[…]\nake ci-local`\n- `make release-snapshot`\n- `openspec validate --specs --strict`\n- `openspec validate --changes --strict`\n- focused actionlint, shellcheck, release/recovery validator, and\nworkflow tests",
          "is_bot": false,
          "headline": "fix(release): recover immutable v1.0.2 (#43)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-18T18:59:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "72aa5a6b585d1f5b6230c8362254ea2a6296ec75",
          "body": null,
          "is_bot": false,
          "headline": "fix(release): make stable version tags immutable",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-18T15:02:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "368605a9e7ea5937def55bcf61925e67be97571e",
          "body": null,
          "is_bot": false,
          "headline": "fix(release): keep publication fail closed (#41)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-18T05:15:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b377f09e67f70417cdbc2e76e8ed20ff0a679ee",
          "body": "## Summary\n\n- add fail-closed, three-cycle live USB/IP resilience coverage for\nrepeated attach/transfer/detach, delayed traffic, and daemon restart\n- add a tracked two-guest KVM test with distinct exporter/importer\nkernels, bidirectional ACM payloads, exact-port drain checks, and 25 ms\nnetem delay p\n[…]\n/15 passed\n- total coverage: 94.07%; changed executable lines: 96/96 (100%)\n\nThe two-guest KVM result is manual evidence because GitHub-hosted\nrunners do not provide this dedicated kernel environment.",
          "is_bot": false,
          "headline": "test(integration): add multi-VM resilience coverage (#40)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-15T23:29:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "978936ca8a4dee7158a0f217a986d4ad2c9c4d03",
          "body": "## Summary\n\n- make fresh-process CLI detach reconcile directly against live VHCI\nstate while preserving tracked-handle concurrency, retry, reservation,\nand shutdown semantics\n- keep VHCI bus IDs kernel-local and validate detach targets under the\nport-mutation lock\n- report remote metadata only for t\n[…]\n daemon-restart, and event tests\n- two-VM KVM exporter/importer proof with an exact 60-byte ACM payload\ntransfer and matching SHA-256\n`14df31f9b4a62c5fe4614121d701485c3ae53ef410b656dd78e033976b187d00`",
          "is_bot": false,
          "headline": "fix(importer): support one-shot CLI detach (#39)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-14T21:11:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4c663801abd4a6f922e717d19cadb16350d96a6e",
          "body": "… go-deps group (#38)\n\nBumps the go-deps group with 1 update:\n[github.com/lmittmann/tint](https://github.com/lmittmann/tint).\n\nUpdates `github.com/lmittmann/tint` from 1.1.3 to 1.2.0\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a\nhref=\"https://github.com/lmittmann/tint/releases\">g\n[…]\nre <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\n---------\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump github.com/lmittmann/tint from 1.1.3 to 1.2.0 in the…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-14T01:34:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "611dd0f76873e1830f2604ab3e4bde21442b778e",
          "body": "## Summary\n\n- preserve direct stable tag pushes as a release entry point\n- add an Actions **Release → Run workflow** form that validates the\ncurrent default-branch head, creates the requested stable tag\natomically, and hands off to the same tag-context release pipeline\n- roll back only the newly cre\n[…]\n*Release** workflow from the default branch with `vX.Y.Z`. The\nGitHub **Draft a new release** form remains intentionally outside the\npipeline. No live release tag was created while validating this PR.",
          "is_bot": false,
          "headline": "ci: add GitHub UI release trigger (#36)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-14T01:33:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3faa5ddc5c802be077cb2aa11ea60c4481849824",
          "body": "## Summary\n\n- add the repository-root Context7 ownership verification file\n- register `https://context7.com/abilisoft/usbip-go` with the supplied\npublic key\n\n## Validation\n\n- `jq -e` exact-content validation\n- `git diff --check`",
          "is_bot": false,
          "headline": "chore: add Context7 ownership config (#37)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-14T01:33:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3ce11796fe2bf71f8b954ea5f96adb8ea92575d",
          "body": "## Summary\n\n- make stable release automation runnable on standard free GitHub-hosted\nrunners by removing the privileged kernel job and its release dependency\n- keep `make test-integration` as an explicit manual maintainer check\ninstead of claiming unavailable kernel capabilities passed or skipped in\n[…]\naining 135\nverified by GitHub\n\n## Release impact\n\n- no public Go or CLI API break\n- no release version is hardcoded in README or operator documentation\n- no tag or GitHub release is created by this PR",
          "is_bot": false,
          "headline": "ci: prepare release for hosted runners (#35)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-12T16:50:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1fd9be0a879ed5042d749de639dcc78d3c5ccc8",
          "body": "## Summary\n\n- remove the dead Go Report Card badge from the README\n- keep the golangci-lint formatter rationale independent of the retired\nservice\n- retain the existing repository-controlled CI, security, supply-chain,\nand coverage signals\n\n## Validation\n\n- `make lint` (25/25 targets passed)\n- `git diff --check`",
          "is_bot": false,
          "headline": "docs: remove Go Report Card references (#34)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-12T02:53:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a26bea479c2898fabf2ed6dad40a3a0094089625",
          "body": "## Summary\n\n- eliminate intermittent `ETXTBSY` failures by replacing transient\nexecutable test stubs with deterministic command-output injection\n- make configfs gadget cleanup idempotent and add a focused missing-root\nregression target\n- require every USB/IP, gadget-function, and `dummy_hcd` prerequ\n[…]\n than left queued\nindefinitely. Root-only VUDC and `dummy_hcd` scenarios remain externally\nblocked until an online root-capable `usbip-kernel` runner uses a kernel\nwith `CONFIG_USB_DUMMY_HCD` enabled.",
          "is_bot": false,
          "headline": "fix(test): harden kernel integration (#33)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-12T02:19:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9a15f6b4a10c093b6839a27492aca704ab11dd28",
          "body": "## Summary\n\n- update Go, Bazel, GitHub Actions, lint, security, release, and\npackaging dependencies to current compatible versions\n- replace the parallel Nix, Task, and Docker Compose workflows with\nhermetic Bazel/Bzlmod behind stable Make targets\n- harden exporter/importer lifecycle ownership, tran\n[…]\ns, zero `RMriveraS`\nidentity/email occurrences, and zero commits without a signature header.\nAll 17 PR commits are GitHub-verified, use the intended identity, and\npreserve the exact pre-rewrite patch.",
          "is_bot": false,
          "headline": "fix: harden USB/IP and build pipeline (#32)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-07-11T19:53:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "89dc8fc9db85d3841d2a72115f01174a888b0eab",
          "body": "…ates (#31)\n\nBumps the github-actions group with 6 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/checkout](https://github.com/actions/checkout) | `6.0.2` |\n`7.0.0` |\n| [codecov/codecov-action](https://github.com/codecov/codecov-action) |\n`6.0.1` | `7.0.0` |\n|\n[g\n[…]\nabot unignore <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump the github-actions group across 1 directory with 6 upd…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-11T14:41:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3d40f28a5ab59bcd43547bd65b6ad28bc2d4ebc2",
          "body": "Bumps the go-deps group with 3 updates:\n[charm.land/lipgloss/v2](https://github.com/charmbracelet/lipgloss),\n[golang.org/x/sys](https://github.com/golang/sys) and\n[golang.org/x/term](https://github.com/golang/term).\n\nUpdates `charm.land/lipgloss/v2` from 2.0.3 to 2.0.4\n<details>\n<summary>Release not\n[…]\nabot unignore <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump the go-deps group with 3 updates (#29)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-11T14:41:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2978ede78fbd01084115f30f93164637a3c5779e",
          "body": "…s group (#26)\n\nBumps the go-deps group with 1 update:\n[golang.org/x/sys](https://github.com/golang/sys).\n\nUpdates `golang.org/x/sys` from 0.44.0 to 0.45.0\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a\nhref=\"https://github.com/golang/sys/commit/397d5f80920585bc27433d878aba498d062f81e1\"><code>397d\n[…]\nabot unignore <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump golang.org/x/sys from 0.44.0 to 0.45.0 in the go-dep…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-30T02:41:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "87816d5bdccc6e5bbba74edacf85136182a9bc13",
          "body": "Bumps the github-actions group with 3 updates:\n[codecov/codecov-action](https://github.com/codecov/codecov-action),\n[github/codeql-action](https://github.com/github/codeql-action) and\n[goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action).\n\nUpdates `codecov/codecov-action` f\n[…]\nabot unignore <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump the github-actions group with 3 updates (#27)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-30T02:41:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1f70f0f5e58f4790a6f61de84bcabd491dbcf256",
          "body": "## Summary\n\n- package gremlins v0.6.0 in `flake.nix` with fixed source/vendor hashes\n- add dedicated `.#mutation` shell and Docker compose `mutation` service\n- run local and CI mutation tests through `.#mutation` without runtime\ntool installation\n- include mutation tooling in `.#qa` while keeping th\n[…]\nmp GOMODCACHE=$PWD/build/gomodcache go vet\n./cmd/... ./pkg/... ./internal/... ./examples/... ./test/...'`\n\n## Signing\n\n- Head commit `f6e9018` is signed and GitHub reports verification reason\n`valid`.",
          "is_bot": false,
          "headline": "fix: provide gremlins from mutation shell (#25)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-18T23:24:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1907e09d27f0f271c6ec4f82c9f56358d4c526d3",
          "body": "…ub-actions group (#24)\n\nBumps the github-actions group with 1 update:\n[github/codeql-action](https://github.com/github/codeql-action).\n\nUpdates `github/codeql-action` from 4.35.4 to 4.35.5\n<details>\n<summary>Release notes</summary>\n<p><em>Sourced from <a\nhref=\"https://github.com/github/codeql-actio\n[…]\nabot unignore <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump github/codeql-action from 4.35.4 to 4.35.5 in the gith…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-18T11:46:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4b860ab84a92522d4bae3a0be0bc2b2148e3a3ac",
          "body": "## Summary\n\n- simplify CLI/domain event rendering helpers while preserving\nobservable event behavior\n- stabilize future-only session watcher lifecycle tests and document the\nWatchSessions contract in OpenSpec\n- centralize Nix Go toolchain selection for dev shells and the microVM\nclosure\n\n## Validati\n[…]\n./cmd/... ./pkg/... ./internal/...\n./test/... -count=1`\n\n## Notes\n\n- Nix-specific local gates were not run in this sandbox because `nix`,\n`nixpkgs-fmt`, `statix`, and `deadnix` are not installed here.",
          "is_bot": false,
          "headline": "chore: simplify Go and Nix cleanup (#23)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-18T02:59:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "68771b421c1247b903ff378e937aacaeb5424e80",
          "body": "Bumps the github-actions group with 2 updates:\n[vladopajic/go-test-coverage](https://github.com/vladopajic/go-test-coverage)\nand [github/codeql-action](https://github.com/github/codeql-action).\n\nUpdates `vladopajic/go-test-coverage` from 2.18.6 to 2.18.8\n<details>\n<summary>Release notes</summary>\n<p\n[…]\nabot unignore <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "ci(deps): bump the github-actions group with 2 updates (#22)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-11T13:23:31Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6ba9824ea77b2f15e1c3e8d5a8b10daaa3d226d4",
          "body": "…ps group (#21)\n\nBumps the go-deps group with 1 update:\n[golang.org/x/term](https://github.com/golang/term).\n\nUpdates `golang.org/x/term` from 0.42.0 to 0.43.0\n<details>\n<summary>Commits</summary>\n<ul>\n<li><a\nhref=\"https://github.com/golang/term/commit/3c3e4855f7d2eb06c3e48933554add9ec6b599b5\"><code\n[…]\nabot unignore <dependency name> <ignore condition>` will\nremove the ignore condition of the specified dependency and ignore\nconditions\n\n\n</details>\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "deps(deps): bump golang.org/x/term from 0.42.0 to 0.43.0 in the go-de…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-11T13:22:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2917c39530c680a2a7e32a089addb23779d1918",
          "body": "## Summary\n\n- make `usbip-go list` default to local exportable devices\n- add `usbip-go list HOST` for remote device discovery\n- remove list selector flags with no compatibility shims or deprecated\naliases\n- update README, docs, integration examples, OpenSpec specs, and\ntraceability for the new flow\n\n[…]\n/... ./pkg/... ./internal/... ./examples/... ./test/...\n-count=1`\n- `rtk openspec validate --specs --strict`\n- `task ci:fmt:go:check ci:fmt:markdown:check ci:lint:go\nci:lint:markdown ci:lint:openspec`",
          "is_bot": false,
          "headline": "feat(cli): simplify list command (#20)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-11T02:33:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "72620ebe9eff10418300a7ccb6e83ddf4eea92d9",
          "body": "## Summary\n- Add OpenSpec baseline specs and traceability as the canonical project\nreference.\n- Clean up stale documentation and include release packaging assets.\n- Split Nix tooling shells and expand local/CI QA gates for format,\nlint, tidy, vulnerability, and test checks.\n\n## Validation\n- `task ci:check`\n- `nix flake show --all-systems`\n- YAML/TOML parse and OpenSpec traceability reference check\n- `git diff --check`",
          "is_bot": false,
          "headline": "docs: document baseline specs and tighten QA gates (#19)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-11T01:32:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be57a48f49d245a90ab352f829f413c9ee8422d3",
          "body": "…ixed gates (#18)\n\n## Summary\n\nReplace the 7-workflow pile (15+ duplicated `actions/checkout` +\nNix-installer + FlakeHub-cache step blocks across 10 jobs in `ci.yml`\nalone) with a small library of reusable workflows + one composite\naction. Caller workflows become short orchestrators; gates have a si\n[…]\ncause GitHub does\nnot run a workflow at all on `labeled` events when `pull_request:\npaths:` is set and the diff misses → label-gate removed from inline;\nad-hoc PR runs use `workflow_dispatch` instead.",
          "is_bot": false,
          "headline": "ci: pipeline reorganization — reusable workflows, composite action, f…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-09T17:40:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa214fb20881ef416fbeda36bfb419151cfb6bdd",
          "body": "… (#17)\n\n## Summary\n\nFour-commit branch addressing one CI failure and three production bugs\nsurfaced while running `usbip-go serve` against an ASIX AX88179B\nUSB-Ethernet dongle.\n\n## Commits\n\n- **b07cb8a** `ci(coverage)` — pin `vladopajic/go-test-coverage` back to\nv2.18.6. v2.18.7's PR #308 changed f\n[…]\nX AX88179B (cdc_ncm bound)\nwithout operator-side rebind dance.\n- [x] Manual: `usbip-go list -l` now shows bound devices.\n- [x] Manual: all `serve` daemon log lines share the configured handler\nformat.",
          "is_bot": false,
          "headline": "fix(ci-kernel-cmd): coverage pin v2.18.6, bind order, log unification…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-09T03:59:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6b1182901d79978607025c905b53fd77558fe9e6",
          "body": "…nixpkgs pin\n\nThe bumped golangci-lint v2.12.1 (loaded via the new nixpkgs pin\n8e58c3dfe4bd) ships a stricter linter set than v2.11.4. Auto-fix\nresolved the bulk: gofmt/whitespace, modernize, perfsprint,\nintrange, paralleltest, thelper, testpackage, wsl_v5 cuddling.\n\nManual changes:\n\n- .golangci.yml\n[…]\nteral formatting, intrange loops, etc.) — no behavioural changes.\n\nVerified inside dev container: `task check` passes (gofmt, lint @ 0\nissues, govulncheck @ no vulnerabilities, full test suite green).",
          "is_bot": false,
          "headline": "chore(lint): apply golangci-lint v2.12.1 cleanup; flake.lock for new …",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f1f876787960749b2c9870fb4dc885ded0e445c",
          "body": "…n jobs\n\nDeterminateSystems/flakehub-cache-action v3.19.0+ requires\n`id-token: write` at job scope to exchange the runner's OIDC token\nfor cache authentication. The workflow's top-level\n`permissions: contents: read` block does not grant id-token, so\nwithout per-job override the cache action would fail at runtime on\nboth vm-smoke and vm-integration.\n\nMirrors the per-job id-token grants already in ci.yml, codeql.yml,\nnightly.yml, and release.yml for the same action.",
          "is_bot": false,
          "headline": "ci(vm-integration): grant id-token: write to vm-smoke + vm-integratio…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "241543eb63b559808ce740be7a772010771ec333",
          "body": "… deps\n\nBrings the spec's golangci-lint module dep into parity with main\n(PR #15). Transitive go.mod / go.sum changes:\n\n- github.com/tetafro/godot v1.5.4 -> v1.5.6\n- github.com/timakin/bodyclose pseudo-version refresh to 73d1f95b84b4\n- go-simpler.org/sloglint v0.11.1 -> v0.12.0\n- ClickHouse/clickhou\n[…]\n pulled in as new transitive deps for the\n  v2.12.1 linter set.\n\nVerified locally: golangci-lint run on the full code surface still\nreports 0 issues; go test -race for cmd/pkg/internal/test all green.",
          "is_bot": false,
          "headline": "chore(deps): bump golangci-lint v2.11.4 → v2.12.1 + transitive linter…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25be377e7a84dfb87484e26bc8c610fa22bf9ed6",
          "body": "…tch)\n\n- DeterminateSystems/flakehub-cache-action: v3.18.1 -> v3.19.0\n- github/codeql-action/init: v4.35.2 -> v4.35.3\n- github/codeql-action/analyze: v4.35.2 -> v4.35.3\n- github/codeql-action/upload-sarif: v4.35.2 -> v4.35.3\n- vladopajic/go-test-coverage: v2.18.6 -> v2.18.7\n\nSHA-pinned upgrades only — no behavioural workflow changes. Brings\nspec into parity with main's dependabot-driven action updates (PR #12\n+ #16). Touches all seven workflows in .github/workflows/.",
          "is_bot": false,
          "headline": "chore(deps): sync GitHub Actions pins with main (5 actions, latest pa…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cd37d52d2f3fb42eead4821b15b0e00eb4853f8",
          "body": "…pin nixpkgs to staging-next tip carrying go_1_26 1.26.3\n\nCloses two stdlib vulnerabilities surfaced by govulncheck on the\nprior Go 1.26.2 baseline:\n\n  - GO-2026-4971 (net@go1.26.2)\n  - GO-2026-4918 (net/http@go1.26.2)\n\nBoth fixed in Go 1.26.3.\n\n- go.mod: go 1.26.2 → 1.26.3.\n- go.sum/go.mod: golang.\n[…]\nulncheck (no\nvulnerabilities found).\n\nCI verification pending: nix flake update will refresh flake.lock to\nmatch the new pin; CI's nix develop --command surface picks up the new\ngo_1_26 automatically.",
          "is_bot": false,
          "headline": "chore(deps): bump Go to 1.26.3, x/sys to 0.44.0, charm tooling deps; …",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79b500be7dd0a570eb97ee71f37bf33780fa809c",
          "body": "Auto-fix: gofmt formatting (3 files), wsl_v5 whitespace cuddling\n(7 sites), noinlineerr deinlining (3 sites), testifylint\nrequire.Equal narrowing (2 sites).\n\nManual:\n- gosec G115 path-based exclusion in .golangci.yml for the new\n  internal/adapter/kernel/(attach|export).go uintptr↔int round-trips\n  \n[…]\n8 →\n  under cap).\n- gocognit: split Shutdown into captureShutdownState + spawnGraceful-\n  Disconnects helpers (20 → under cap); extract performImportHandshake\n  from attachOverDialed (13 → under cap).",
          "is_bot": false,
          "headline": "chore(lint): apply golangci-lint cleanup across recent refactors",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "08ea70801505531f35e116230e7e73bb449c1522",
          "body": "- app/limits: newAcceptLimiter rejects NaN and +/-Inf rps. Without\n  the guards a NaN slipped through the rps <= 0 check (NaN\n  comparisons are false), and rate.NewLimiter(NaN) produced a\n  limiter that permitted every connection — silently disabling the\n  accept-rate ceiling.\n- cmd/health: readines\n[…]\none branch returns 503\n  immediately so a wedged probe that ignores its ctx cannot stall\n  the /readyz handler; the orphaned probe goroutine completes on\n  its own time without holding the connection.",
          "is_bot": false,
          "headline": "fix: reject NaN/Inf accept-rate; race readiness probe against ctx",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "06cf8efefc4a1948a795fd746aacc3284061c22c",
          "body": "Each Subscribe call spawned a ctx-watcher goroutine that selected\non ctx.Done() or unsubSig. When the dispatcher exited unexpectedly\n(fatal netlink error), the cleanup goroutine closed subscriber\nchannels but never fired unsubSig — so every per-subscription\nwatcher leaked until its caller's ctx eventually cancelled. Add a\nthird select case on dispatcher.done so a dispatcher death tears\nevery watcher down promptly.",
          "is_bot": false,
          "headline": "fix(kernel): close per-subscription watcher on dispatcher exit",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf271a6f80055455e9a1766579f4b040b77860a3",
          "body": "The CLI defer-Close fired the moment runAttach returned, cancelling\nthe AutoReconnect watcher inside Importer the same instant the\nattach command finished printing its result. Effectively\n--auto-reconnect was a no-op for the CLI: the watcher had no\nopportunity to observe a detach before it was torn down. Now\nrunAttach blocks on ctx.Done() when AutoReconnect is set, closing\nonly after SIGINT/SIGTERM propagates through cobra's signal-aware\nctx. Without the flag the CLI remains one-shot.",
          "is_bot": false,
          "headline": "fix(cmd): keep Importer alive in `attach --auto-reconnect`",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c7f62af304e3e7d2f259e4326eeca60cb7c2657",
          "body": "… e.mu\n\n- runHandoff: replace tryHandoff with a wrapper that holds handoffMu\n  only while flipping the cancelled / handedOff flags, NOT during\n  the ExportOnConn sysfs write. Holding the lock across the kernel\n  call deadlocked Shutdown's signalCancel when ExportOnConn wedged.\n  The fundamental orph\n[…]\ncannot\n  race the channel initialisation and read nil. Capture the channel\n  before unlocking and pass it explicitly to waitDisconnectBounded;\n  the function no longer reads e.disconnectDone directly.",
          "is_bot": false,
          "headline": "fix(app): runHandoff narrows handoffMu; allocate disconnectDone under…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fe4b26624de3de230c533d40d19b36049ce40f0",
          "body": "…annel\n\n- session/exporter: per-handle handoffMu + tryHandoff/signalCancel\n  atomically resolves the runRegisteredSession-vs-Shutdown race. The\n  prior pre-handoff select-default check was best-effort; now\n  Shutdown observes whether the handler reached ExportOnConn before\n  scheduling Disconnect. A\n[…]\nompletion event instead of each spawning a\n  fresh wg.Wait helper that raced an already-cancelled drainCtx and\n  surfaced spurious wrapped-ctx errors. waitDisconnectBounded was\n  reworked accordingly.",
          "is_bot": false,
          "headline": "fix(app): per-handle handoffMu/signalCancel; shared disconnectDone ch…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bcfa5752ebbd9e23ddd8b3c57c1b6bc9663267ca",
          "body": "…test fixture\n\n- waitDisconnectBounded godoc: explicitly note the wg.Wait helper\n  goroutine remains parked until every Disconnect goroutine returns.\n  Same accepted leaked-goroutine trade-off documented in the wedged-\n  handler note in waitSessionsBounded; the leak is bounded (one\n  helper per Shut\n[…]\nown that fires between registerSession and ExportOnConn,\n  intermittently failing TestExporterShutdown_DeadlineExceeded\n  which expects the drain to time out with the handler parked in\n  ExportOnConn.",
          "is_bot": false,
          "headline": "fix(app): document waitDisconnectBounded helper-goroutine leak; sync …",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "558feadf435d439bafda2ea8cbe793e549ce681c",
          "body": "- session: pre-handoff cancel check in runRegisteredSession. After\n  registerSession returns, Shutdown can race the new handle:\n  snapshot, cancel, spawn Disconnect — all between the\n  registerSession-mu unlock and the ExportOnConn call. Without the\n  new select on handle.done + ctx.Done before Expo\n[…]\n gets a non-blocking re-check after drainCtx\n  fires and is skipped entirely when no goroutines were spawned\n  (handles empty), avoiding a spurious wrapped-ctx error on a no-op\n  second Shutdown call.",
          "is_bot": false,
          "headline": "fix(app): pre-handoff cancel check; surface bounded Disconnect error",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ada233d7096e0585adaaa918875f4bcbd460a223",
          "body": "The bounded shutdownTimeout backstop is applied via\napplyShutdownBackstop to derive drainCtx; previously the per-session\nDisconnect goroutines carried the original caller ctx, so the\nconfigured backstop could not cancel a stuck Disconnect — only\nwaitDisconnectBounded's wait was bounded. Reorder Shut\n[…]\nDisconnect goroutine. The kernel\nsysfs write itself is still uncancellable (kernel API limitation)\nbut the Go-side ctx now matches the documented backstop semantics\nfor any cancellable kernel adapter.",
          "is_bot": false,
          "headline": "fix(app): thread drainCtx into Shutdown's per-session Disconnect",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "03f22042c6bb5a276486d5da7a52fee831b1659d",
          "body": "Per-busid Disconnect goroutines previously outlived Shutdown silently.\nA wedged kernel sysfs write still leaks the goroutine (no userspace\ncancellation hook), but Shutdown now waits on them up to drainCtx and\nlogs a Warn if any remain pending when the deadline fires. Diagnostic-\nonly — the leaked-goroutine trade-off still applies, but the leak no\nlonger hides past the Shutdown return.",
          "is_bot": false,
          "headline": "fix(app): bound Shutdown Disconnect goroutines by drainCtx",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4cd49059b516e9cf41e183fb7394ec8b813f944f",
          "body": "The contract requires Shutdown to remain callable multiple times\n(Close paths and explicit shutdown race), so a hard idempotent early-\nreturn is not acceptable. Without a gate, repeat Shutdown calls\nre-spawn per-busid Disconnect goroutines on top of any already-wedged\nfrom the prior invocation.\n\nCap\n[…]\nly. Subsequent calls fall through to wait on the\nshared drain future, which is itself idempotent. waitSessionsBounded\nand the ctx-spurious-deadline race tests pass because the drain path\nis unchanged.",
          "is_bot": false,
          "headline": "fix(app): gate Shutdown side-effects behind firstShutdown flag",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6dc7d887c385c55e2fed56c48f870eec34e51b1b",
          "body": "… across reply\n\n- exporter Shutdown: cancel every session handle BEFORE issuing the\n  graceful kernel Disconnect, and run each Disconnect in its own\n  goroutine. The prior sequential loop blocked the bounded drain\n  when a single sysfs Disconnect wedged: h.cancel() never ran, the\n  drain never made \n[…]\nompletes. Previously the timeout was cleared right after the\n  request body decode, so a client that wrote a valid request and\n  then stopped reading parked the handler in EncodeOpRep*\n  indefinitely.",
          "is_bot": false,
          "headline": "fix(app): cancel handles before kernel Disconnect; arm import timeout…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1598b80cdec3d792b08766a2099ac0b5a96e4efe",
          "body": "…alidation\n\n- kernel/device: isExportable now hides a usbip-host bound device\n  when its usbip_status read fails. The prior permissive default\n  advertised devices the kernel had not finished attaching, so peers\n  attempted attaches the kernel rejected. Hiding briefly during\n  rebind is the safer tr\n[…]\nxportedDevices missing-status test\n  for the new strict semantics; per-conn busid pairing in concurrent\n  attach test (shared queue raced and mismatched encode/decode pairs\n  under parallel dispatch).",
          "is_bot": false,
          "headline": "fix(kernel-wire): strict isExportable; topology ENOENT alias; speed v…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5282db6251f0ae6b596480c1dadf26c6b959405d",
          "body": "…usid match\n\n- session: subscribe-failure path now sends an OP_REP_IMPORT-error\n  (ST_DEV_ERR) before returning. Previously the importer received\n  EOF on a registration that had already passed device lookup, with\n  no protocol-level rejection signal.\n- exporter: registerSession rejects a second con\n[…]\nn cannot\n  block daemon exit beyond the configured deadline.\n- tests: codec mocks track requested busid so reply matches; per-peer\n  cap test uses distinct busids per session (busid uniqueness guard).",
          "is_bot": false,
          "headline": "fix(app-cmd): subscribe-failure ST_DEV_ERR; busid uniqueness; reply b…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c6c9558cfdc899570bcbd8fb6188aaeb4fb60e8a",
          "body": "…wn ST_*\n\nHIGH protocol bug: serveImport never sent OP_REP_IMPORT before the\nkernel sockfd handoff, so a real client (upstream usbip or this Go\nimporter) parked indefinitely waiting for the reply.\n\n- session: serveImport now looks the requested device up in the\n  exported set BEFORE building any ses\n[…]\nt for\n  the stricter unknown-status mapping; thread ListExportedDevicesFunc\n  plus EncodeOpRepImportFunc / EncodeOpRepImportErrorFunc through\n  every exporter test that exercises the import handshake.",
          "is_bot": false,
          "headline": "fix(app-wire): send OP_REP_IMPORT before kernel handoff; reject unkno…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dce0c3b69c569368f7194eaa6b1aaacf345b7475",
          "body": "…oroutines\n\n- kernel: dup the fd inside the extractFD Control callback so a\n  concurrent conn.Close (e.g. exporter Shutdown force-close) cannot\n  release the underlying fd between extraction and the kernel sysfs\n  write; callers close the dup'd fd via defer after the write. Tests\n  updated: fd value\n[…]\nor OP_REP_IMPORT decode by\n  closing the connection from a separate goroutine. The watcher\n  exits cleanly on function return via a watchDone channel so there\n  is no goroutine leak on the happy path.",
          "is_bot": false,
          "headline": "fix(kernel-app): dup fd in extractFD (TOCTOU); importer ctx-watcher g…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e34b945bf77e27f1b5bd932dda6c72ed9bc6a962",
          "body": "- header: extend status=0 enforcement to request opcodes; the spec\n  mandates status=0 on all headers — prior code only checked reply\n  opcodes. Remove now-unused isReplyOpCode helper and update the\n  mutation-baseline comment.\n- importer: surface SetReadDeadline failures as errors on both the\n  dev\n[…]\nnstraint on the\n  usbip-host/unbind sysfs write; this is a kernel-API limitation\n  with no userspace cancellation path, so callers requiring a hard\n  deadline must rely on OS-level process management.",
          "is_bot": false,
          "headline": "fix(wire-app): status=0 for all opcodes; surface SetReadDeadline errors",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d9c1dcbfee57f7ac6059d373dcf26af3216df01",
          "body": "… ctx deadline\n\n- uevent: add cleanup goroutine on dispatcher start; when run() exits\n  unexpectedly (fatal netlink error) the goroutine closes all\n  subscriber channels (callers see end-of-events) and clears the\n  stale a.disp pointer so the next Subscribe dials a fresh connection\n  instead of atta\n[…]\ny after a vhci_hcd module reload.\n- importer: propagate ctx deadline to the attach connection's read\n  deadline before DecodeOpRepImport, matching the deadline already\n  applied to DecodeOpRepDevlist.",
          "is_bot": false,
          "headline": "fix(kernel): dispatcher exit cleanup; topology retry-on-error; attach…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6e392e8a5594fb9efc8e5eb1fcc49078f526d718",
          "body": "- exporter: wrap acceptLoopExited close in sync.Once so a panic inside\n  acceptLoop or spawnCtxListenerCloser still unblocks a concurrent\n  Shutdown (panic path previously left the channel open).\n- session: keep handshake timeout armed during EncodeOpRepDevlist write;\n  serveDevlist now receives and\n[…]\n- serve: remove status socket in the goroutine after fn() returns if\n  it bound successfully, ensuring cleanup when the caller timed out\n  on the ready signal without registering its own unlink defer.",
          "is_bot": false,
          "headline": "fix(app): panic-safe acceptLoopExited; arm devlist timeout across write",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "68695954e0bfe2b131aac88c9fcd4c053ef53ae5",
          "body": "…ted race\n\nReplace sync.WaitGroup with lifecycleWaitGroup (channel-counter) so\ndrain futures can be observed via select without spawning waiter\ngoroutines. Eliminates two MEDIUM goroutine leaks: importer\nwaitGroupBounded and exporter drainFuture both used fire-and-forget\ngoroutines blocked on WaitGr\n[…]\nlled.\n\nLog conn.Close failure in attachAtPort after kernel handoff at Debug\nlevel. The error is benign (kernel already holds its own fd ref) but\nsilent failures here obscure transient fd-table issues.",
          "is_bot": false,
          "headline": "fix(app): replace WaitGroup with channel-counter; close acceptLoopExi…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "edf5532d781cf1974a15a9f72a19ea22b5ef6d06",
          "body": "Remove \"(client)\" / \"(server)\" parentheticals from README — avoided\nterms per domain glossary. Fix install command in ops.md: binary is\n`usbip-go`, path is `/usr/local/bin/`.",
          "is_bot": false,
          "headline": "docs: fix terminology and binary name in README and ops",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f1645a84db7481fae6f837764e88a61dc11aec4",
          "body": "Replace ./... with explicit package paths in ci:test and ci:test:cover\nso the build module marker is no longer needed to stop go test from\ndescending into the module cache. Untrack build/go.mod and collapse\nthe gitignore exception to a plain /build/ rule.\n\nRename \"Flagged ambiguities\" section in CONTEXT.md to \"Term\ndisambiguation\"; remove \"Resolved:\" process prefixes throughout.",
          "is_bot": false,
          "headline": "chore: remove build/go.mod sentinel, clean spec term disambiguation",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83f844152f70d08630258ca17534232e1439027c",
          "body": "…face\n\nCollapses the two-binary tree (cmd/usbip + separate daemon) into a\nsingle cmd/usbip-go. All roles — importer, exporter, daemon — are\nexposed as flat top-level verbs. Daemon mode is `usbip-go serve`.\n\nKey changes:\n- cmd/usbip/ → cmd/usbip-go/ (directory rename, 77 files)\n- activationFdName: \"u\n[…]\ner.Attach/attachOverDialed\n- WatchSessions and Watch: lazy-subscribe so unranged iter.Seq leaks\n  no channel or goroutine\n- DisconnectReasonGraceful removed (unused constant)\n- Coverage: 92.4% → 93.7%",
          "is_bot": false,
          "headline": "feat(cmd): rename binary usbip → usbip-go, single flat-subcommand sur…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2acdc53098d5b62e41d0bb659648f707419490ab",
          "body": "Add .github/workflows/vm-integration.yml so the project's microVM\nintegration tests run on a schedule + on relevant PRs without\ngating every push on the slow path:\n\n- vm-smoke (5-10 min): builds the microVM closure via Nix, boots\n  qemu_kvm, asserts every required USBIP kernel module is present\n  in\n[…]\nueueing up VM boots.\n\nThe Taskfile.yml `task vm:smoke` and `task vm:test:integration`\nlocal commands are unchanged — operators can still iterate on the\nVM tests interactively without going through CI.",
          "is_bot": false,
          "headline": "ci: nightly VM-integration workflow exercises the full kernel surface",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7df7a7034072117bd1cbdb16389e71baecab2eab",
          "body": "Cover the largest uncovered functions surfaced by go-test-coverage:\n\ncmd/usbip/health_test.go (new) — covers the entire health.go module\nthat lived at 0%:\n- ready() truth table (all flags + each flipped false in turn,\n  zero-value safety)\n- newLivenessChecker constant 200\n- newReadinessChecker happy\n[…]\nEmptyIter (Subscribe error\n  path)\n\nCoverage delta:\n- 92.4% → 93.7% (+47 lines)\n- All new tests behavior-focused (no implementation coupling)\n\nTests: 1331 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "test: raise coverage 92.4% -> 93.7% (+1.3pp)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "62e0de7a0c4dd12495ab18476055fdd432c42f80",
          "body": "The branch made two intentional public-API deltas through the spec\n+ migration phases:\n\nADDITIONS to pkg/usbip:\n- PortAttachedEvent / PortDetachedEvent / PortErroredEvent /\n  DeviceBoundEvent / DeviceUnboundEvent / SessionStartedEvent /\n  SessionEndedEvent type aliases (round-2 facade re-exports so\n\n[…]\nstcoverage.yaml: 92.4% (>= 90%)\n- DDD boundary grep gates: clean\n- no-cgo gate: clean\n- Cross-compile linux/darwin/windows × amd64/arm64 ./pkg/...: clean\n- apidiff against regenerated baselines: clean",
          "is_bot": false,
          "headline": "chore(api): regenerate apidiff baselines after public-API delta",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b4cec6252b59c20c9b251cce095e84df60c7261e",
          "body": "Round 7 codex review caught residual stale references in:\n- docs/ops.md: header, install paths, systemd unit example bodies\n  (FileDescriptorName, ExecStart), --status-socket-group default,\n  daemon-flag table, journalctl unit name, drain-and-upgrade\n  recipe, troubleshooting checklist\n- cmd/usbip/s\n[…]\n,\nthe systemd units are `usbip.service` / `usbip.socket`, the daemon\nruns as `usbip serve`, and the default --status-socket-group is\n`usbip`.\n\nTests: 1305 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "docs: drop stale usbip-go/usbipd-go references after single-binary merge",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "385b382fedfcdd3e6a7de3e6265408aa3d60ca2b",
          "body": "Round 6 codex review found a stale claim in handleStatusDrain's doc\ncomment: \"Exporter.Shutdown wraps in sync.Once\". The actual\nimplementation at internal/app/exporter.go:331-349 uses a mutex-\nguarded flag-and-clear pattern (sets the shutdown flag under\nExporter.mu and captures-and-clears the listen\n[…]\n-op pass).\nADR-0012 was already corrected in earlier rounds; this comment was\nthe last surviving instance of the wrong claim.\n\nNo code change. Tests: 1305 pass with race detector. golangci-lint\nclean.",
          "is_bot": false,
          "headline": "docs: handleStatusDrain comment matches actual idempotency mechanism",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4f5ca619ead11e78b41f16c0475618bc42576405",
          "body": "…; clarify session-accounting reset\n\nRound 5 codex review: 3 BUGs.\n\n- runDrain wrote \"drain timed out after X\" directly to cmd.ErrOrStderr\n  AND returned errDrainTimeout. main's renderMainError formats every\n  returned error through FormatError, which renders errDrainTimeout\n  as \"usbip: drain timed\n[…]\n, daemon-layer accounting does not, and\n  operators needing accounting continuity must drain fully before\n  upgrading rather than mid-flight.\n\nTests: 1305 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix(drain): validate --poll-interval; remove duplicate timeout stderr…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "35a8036b04b34fd76c57fffceea8637819b0d7b6",
          "body": "…echanism\n\nRound 4 codex review found three remaining stale facts in\ndocs/adr/0012-drain-mechanism-http-over-uds.md:\n\n- \"Polls every 500ms\" — actual default at cmd/usbip/drain.go:25 is\n  drainPollInterval = 200 * time.Millisecond. Updated.\n- \"Default `usbip-go` group\" — actual default at\n  cmd/usbip\n[…]\nid-drain case —\n  Round 2 fixed the same claim on the adjacent row but missed this\n  one. Rewrote to match the actual flag-and-clear pattern.\n\nTests: 1302 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "docs: ADR-0012 fact-fix — poll interval, default group, idempotency m…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a6ee3206b74d898fec562cb77af84ab6d6e981c",
          "body": "Round 3 codex review: errStatusSocketDisabled fell through MapError's\nsentinel registry and landed on the ExitGeneric default (1). Empty\n--status-socket is a command configuration / preflight class fault,\nnot a runtime fault — it should exit with ExitUsage (2) so\nsupervisors and shell scripts can di\n[…]\nubcommandRejectsEmptyStatusSocket extended to assert\nMapError(err) == ExitUsage so a regression that drops the registry\nentry surfaces in CI.\n\nTests: 1302 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix(drain): map errStatusSocketDisabled to ExitUsage",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "48b415b14d3b9b12e8fd5d7dbe10fdceaf9c0afe",
          "body": "…t; ADR fact-fix\n\nRound 2 codex review of the drain phase:\n\n- ADR-0012 Idempotency section incorrectly described Exporter.Shutdown\n  as sync.Once-guarded. The actual mechanism is a `shutdown` flag set\n  under Exporter.mu plus the listener captured-and-cleared so\n  subsequent calls find an empty sess\n[…]\nerators\n  understand the configuration root cause rather than chasing\n  ENOENT/EINVAL. TestDrainSubcommandRejectsEmptyStatusSocket pins\n  it.\n\nTests: 1302 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix(serve): drain query-param rejection; preflight empty status-socke…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea987d4968c2aa63da611c1cb50ef7fabb14f0e5",
          "body": "Round 1 codex review of the drain phase surfaced one BUG, two\nSUSPECTs, and one ADR completeness gap.\n\nThe serveStatus closure used context.WithoutCancel(ctx) for drainCtx\nunder the comment \"cancels alongside daemon shutdown while ignoring\nper-request cancellation\" — but context.WithoutCancel return\n[…]\n failure — the daemon exits either way,\n  retry is via daemon restart with a bumped --shutdown-timeout.\n\nCross-reference to docs/ops.md added. Tests: 1300 pass with race\ndetector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix(serve): drainCtx propagates daemon cancel; 202 vs 200 split",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e12e2340ad3fec75a0029309ac27a4d6ebf84592",
          "body": "ADR-0012 captures the drain mechanism design (HTTP-over-UDS with\nclient-side polling) plus the rejected alternatives (signals,\nsd_notify, gRPC, custom binary protocol). The decisive trade-offs:\n\n- Signals collapse to one bit — no command parameters, no typed\n  ack, no operator-group permission model\n[…]\nmeout\nrelationship and recommends keeping the client bound > server bound\nso the operator-visible result tracks the daemon's actual behavior.\n\nTests: 1300 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "feat(serve): idempotent POST /drain handler; ADR-0012",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "61a7e11d999633755d0abb5756edd64180beee09",
          "body": "…up log\n\nRound 6 codex review:\n\n- classifySessionDeclineOutcome had ErrACLRejected and ErrRateLimited\n  branches that the round-5 wiring made unreachable: ACL and rate\n  rejections happen in acceptLoop BEFORE registerSession runs and emit\n  their outcome labels directly at those sites in exporter.go\n[…]\ntical future PR. Deferred — the symmetric concern is\n  not specific to this branch and would inflate the test surface for\n  conjectural risk.\n\nTests: 1299 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix: simplify session-decline classifier; test build-provenance start…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8e60aafc990439897817af09a0e358d7476b201a",
          "body": "…; LastError leak doc\n\nRound 5 codex review surfaced two BUGs and one SUSPECT:\n\n- runRegisteredSession's pre-subscribe failure path returned without\n  storing a typed DisconnectReason on the handle, so the deferred\n  endSession published the \"handler exited\" fallback instead of\n  kernel_error. The S\n[…]\nd scrub before forwarding to less-privileged audiences,\n  rather than silently leaking diagnostic strings to whoever consumes\n  Watch output.\n\nTests: 1298 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix: pre-subscribe failure stores typed reason; ACL/rate emit outcome…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ffd40e383d614344d4475c1cd4b82583c6620b5",
          "body": "…oc port_reconnect_exhausted\n\nRound 4 codex review surfaced two BUGs:\n\nDisconnectReason enum values were defined but never emitted:\nwaitForSessionEnd returned a typed DisconnectReason that\nrunRegisteredSession discarded; endSession logged a free-form\n\"handler exited\" string. The fix threads the type\n[…]\ne production\nevent union; the new event's record shape is documented with the\nattempts and last_error fields and an ADR-0009 cross-reference.\n\nTests: 1298 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix: wire DisconnectReason into endSession; drop dead Sysfs* enums; d…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "012231302457e54b089a2641a2bec3ff9719ea58",
          "body": "…tests\n\nRound 3 codex review surfaced three BUGs:\n\n- statusExporter.KernelModules's lock-then-probe-then-write pattern\n  had a write race: a probe started at t=0 finishing AFTER a probe\n  started at t=1 would overwrite the fresher cache with stale data.\n  The post-probe re-acquire now double-checks \n[…]\nas a false positive — paralleltest\nrecognises t.Setenv as a parallel-incompatible call and suppresses\nthe warning, so no exclusion is needed.\n\nTests: 1298 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix: KernelModules cache double-check; doc port/watch verbs; outcome …",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d6c71a29c704e2f74d4177336b7dc70c27583e6f",
          "body": "Round 2 codex review surfaced two BUGs and two SUSPECTs:\n\n- pkg/usbip did not re-export the new PortReconnectExhausted event\n  type or its EventKind constant. Public consumers had to reach into\n  pkg/domain to type-assert on a Watch yield, breaking the facade\n  boundary established by ADR-0003. The \n[…]\nImporterReconnectExhaustedAttemptsTable parametrised over\n  MaxAttempts in {1,3,5} so the off-by-one fix is locked in across\n  the cap range.\n\nTests: 1294 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix: re-export events on facade; classify Permission/NoFreePort attaches",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "acafa540bbd6c8e43f0f04dc0a318dfe7663ce76",
          "body": "Two findings from the second adversarial review on this branch:\n\n- Importer.Watch's merged select is pseudo-random per Go semantics.\n  When ctx.Done() and an event channel are simultaneously ready, the\n  iterator may yield ONE final event before terminating.\n  newImporterMergedSeq's doc comment now \n[…]\nle covering the v1\n  contract §7.4 catalog plus the new code 12 entry, and the daemon-\n  flag section now references `usbip serve --help` instead of the\n  retired `usbipd-go --help`.\n\nNo code changes.",
          "is_bot": false,
          "headline": "docs: exit-code table; document Importer.Watch cancellation semantics",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d7bb542e8d54ee3524cd3fd0836cecd3b73abeca",
          "body": "Codex adversarial review of the cmd/ merge surfaced three real issues:\n\n1. bindServeFlags re-declared --log-level / --log-format / --verbose\n   that the root command already exposes as persistent flags. Cobra\n   tolerates the parallel registration but the SHADOW masks the\n   root's parse: an operato\n[…]\nvery binary_*_test.go file in the\n  merged tree.\n- No importer test calls os.Chdir, so the relative TMPDIR cleanup\n  path stays well-defined.\n\nTests: 1290 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "fix(cmd): drop duplicate logging flags from serve; rename systemd units",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d977e8272069dfb8642f27b5cfde3d9f33b400e4",
          "body": "Per ADR-0011, the unified `usbip` binary exposes flat top-level verbs:\n\n  usbip list\n  usbip attach\n  usbip detach\n  usbip bind\n  usbip unbind\n  usbip serve     (replaces upstream `usbipd`, the daemon)\n  usbip drain\n  usbip version\n\nThe two-binary tree is gone. Daemon-side files (run.go, drain.go,\nh\n[…]\nlusions retargeted; .testcoverage.yaml +\n.github/codecov.yml exclusions retargeted; internal/testutil/binbuild.go\ncallers updated to \"usbip\".\n\nTests: 1290 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "refactor: merge cmd/usbip-go + cmd/usbipd-go into single cmd/usbip",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9c92e15d47b7b9bd1e7ddaed2e4837b05a62ea8c",
          "body": "Capture the decision for the impending cmd/ merge. The new `usbip`\nbinary exposes flat top-level verbs (`usbip attach`, `usbip serve`,\n`usbip drain`, ...) rather than grouped subcommands (`usbip device\nattach`, `usbip server start`, ...).\n\nReasoning:\n\n- Unix tradition: management tools (`lsusb`, `ud\n[…]\np server drain`. Scripts\n  that already use upstream `usbip attach -r host -b busid` keep\n  working without rename.\n\nCONTEXT.md operator-vocabulary table updated to enumerate every verb\nwith its role.",
          "is_bot": false,
          "headline": "docs: ADR-0011 single binary uses flat verbs",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "462ad442082acb5316a3a70f8567af2bf083bf27",
          "body": "Audited what the metrics layer told operators that journald + sysfs +\nsystemd did not already tell them. Of twelve metrics, only handshake\nduration histogram and reconnect-rate aggregations were uniquely\nPrometheus-only; the other ten duplicated information visible through\nusbip list, /sys/devices/.\n[…]\nly need Prometheus metrics run a\nsidecar that parses journalctl --output=json instead of adding the\nlibrary back into their dependency graph.\n\nTests: 1292 pass with race detector. golangci-lint clean.",
          "is_bot": false,
          "headline": "refactor: drop Prometheus metrics layer; observability via slog + sysfs",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1bd76aee7e11e283263a123d3f928dd5dd370229",
          "body": "Add docs/agents/ with three workflow conventions consumed by the\nmattpocock/skills engineering skill set: issue tracker workflow\n(GitHub via gh CLI), triage label vocabulary (the five canonical\nroles), and domain doc layout (single-context, references CONTEXT.md\nand docs/adr/).\n\nThese files document\n[…]\ne\nexisting CONTEXT.md and ADR set.\n\nGitignore CLAUDE.md and AGENTS.md (the AI-tool convention pointer\nfiles at the repo root): they're thin index files, the substantive\nworkflow lives in docs/agents/.",
          "is_bot": false,
          "headline": "chore: scaffold per-repo agent skills config",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9d4d5e781674594238a9e8b098e90b3fbb12a02f",
          "body": "Capture the project's domain language and foundational architectural\ndecisions, then add a new PortReconnectExhaustedEvent surfaced through\nImporter.Watch when the reconnect watcher gives up.\n\nSpec scaffold:\n- CONTEXT.md establishes the bounded-context vocabulary (Exporter,\n  Importer, Device, BusID\n[…]\ng mechanism that would emit them\n(WatchRemote) was never built and would be a connection-churn\npattern against the exporter rate limiter; defer to a concrete\nauto-attach use case before reintroducing.",
          "is_bot": false,
          "headline": "feat: domain spec scaffold + PortReconnectExhausted event",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c2d31601571202f404cb3ccee500a0390c3d4e70",
          "body": "## Summary\n\nFixes the bind path against composite USB devices (the original ASIX\nAX88179 USB-Ethernet trigger) and brings the bind/unbind implementation\ninto conformance with upstream Linux usbip-utils via a multi-pass review\nagainst the kernel's `usbip_bind.c`, `usbip_unbind.c`, and\n`drivers/usb/us\n[…]\nne defensive\n`ListDirEntries` error path in `busIDInterfaceDirs` untestable via MapFS\n— production-only)\n- [ ] Smoke test on Pi 5 (ASIX AX88179): bind → attach loopback → ping\nover the imported netdev",
          "is_bot": false,
          "headline": "fix: bind multi-interface devices + upstream-conformance audit (#14)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5e9c37fb49722d4fde2cf9066d04303de14aafff",
          "body": "## Summary\n\nBug fixes plus a CLI/UX refresh, all converged through TDD + Codex\nadversarial review.\n\n### Fixes\n\n- **Speed bug** — sysfs reports Mbps strings (`5000`, `10000`); old code\ncast raw to enum. New `ReadSpeedAttr` lookup table covers every Linux\n`speed_show()` output.\n- **Wire double-read** \n[…]\nd-trip succeeds without `0x332d`\nmismatch\n- [ ] `--output=json` consumers see no schema diff\n- [ ] After merge: tag `v1.1.0`, verify pkg.go.dev shows Apache 2.0\nlicense + retracted versions\n\n---------",
          "is_bot": false,
          "headline": "fix: sysfs speed + wire double-read + bind ergonomics + UX refresh (#13)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1efa4bbda100483b8a54d2fe0792bb5f42284ba",
          "body": "Bumps the github-actions group with 2 updates:\n[vladopajic/go-test-coverage](https://github.com/vladopajic/go-test-coverage)\nand\n[goreleaser/goreleaser-action](https://github.com/goreleaser/goreleaser-action).\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": false,
          "headline": "ci(deps): bump the github-actions group with 2 updates (#12)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a090456082366b88a9336efb9554e09fe8d0161c",
          "body": "## Summary\n\n- Adds `retract` directives for `v0.1.0` and `v1.0.0`, both published\naccidentally\n- `v0.2.x` is the correct release line\n- After merge, cut `v0.2.1` so pkg.go.dev indexes the retraction and\nre-detects the license\n\n## Test plan\n\n- [ ] Merge and tag `v0.2.1`\n- [ ] Verify pkg.go.dev shows `v0.1.0` and `v1.0.0` as retracted\n- [ ] Verify license detected on pkg.go.dev module page",
          "is_bot": false,
          "headline": "fix(module): retract v0.1.0 and v1.0.0 published accidentally (#11)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ebe262575ed3c4df757c5d77c68c85e9245eadb",
          "body": "Project 12654. Sits beside the existing Scorecard badge so the two OpenSSF signals are visually grouped.",
          "is_bot": false,
          "headline": "docs(readme): add OpenSSF Best Practices badge (#10)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c820e51cde0c0168b3817b79717920d26e72298",
          "body": "… body (#9)\n\n## Summary\n\n- **Root cause** of the empty release body on v1.0.0: `.goreleaser.yml`\nhad `changelog.disable: true`. In goreleaser v2\n(`internal/pipe/changelog/changelog.go:45-51`), that flag short-circuits\n`Pipe.Skip` to `true`, which **skips the entire changelog pipe** —\nincluding the b\n[…]\n7-453 (silent-empty\nacceptance).\n- goreleaser v2.15.2\n[`internal/pipe/release/body.go`](https://github.com/goreleaser/goreleaser/blob/v2.15.2/internal/pipe/release/body.go)\n— body template at line 13.",
          "is_bot": false,
          "headline": "fix(release): drop changelog.disable so --release-notes file lands in…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "10250ba174245a0326f740672c6e9430069fae34",
          "body": "…aracter (#8)\n\n## Summary\n\n- GitHub Actions rejected the `!v*.*.*+*` exclusion in `release.yml`\n`on:tags` with `push event contained invalid tags patterns`. `+` is a\nreserved glob metacharacter in GHA's tag-filter dialect (one-or-more\nquantifier), so the pattern fails the trigger validator before th\n[…]\nl excludes it.\n- [x] Push a probe build-metadata tag (`v0.0.0+build.7`) on a fork and\nconfirm the trigger fires but the ref_name guard step aborts the job\nwith \"tag is not a canonical stable release\".",
          "is_bot": false,
          "headline": "fix(release): drop ~/.ssh/config.*.*+* — GHA rejects + as glob metach…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f8c1f2fd7bc3e7e293a5c1d11b20eb296822990d",
          "body": "…rcement (#7)\n\n## Summary\n\n- **Empty release body on v1.0.0** — `git-cliff --unreleased --tag $TAG`\nreturns nothing when the tag is at HEAD (which `actions/checkout` always\ndoes on tag push). Switch to `git-cliff --latest`; verified locally\nproduces 36KB body covering all conventional commits.\n- **P\n[…]\n[ ] Next stable tag (v1.0.1+) lands with full body\n\n## Verification\n\nCodex CONVERGED across 4 review rounds (cliff invocation, pre-release\nexclusion, ref_name guard + doc scrub, formatter enablement).",
          "is_bot": false,
          "headline": "fix(release): cliff --latest, stable-tag-only pipeline, gofmt -s enfo…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47d1036da0e0abdf7e460dc455e73bb2f18b8407",
          "body": "## Summary\n\n- v0.1.0 tag-push release failed because cosign v3.0.6 removed the\nlegacy `--output-signature` / `--output-certificate` two-file artefact\ncontract. With those flags ignored and no `--bundle` path supplied,\ncosign refused to sign and the GoReleaser step exited 1.\n- Migrate goreleaser `sig\n[…]\ner verify-artifact ...`, `cosign\nverify-blob --bundle ...`, `sha256sum -c --ignore-missing ...`.\n- [x] Confirm SLSA Build Provenance job still attaches\n`multiple.intoto.jsonl` (independent of cosign).",
          "is_bot": false,
          "headline": "fix(release): migrate cosign signing to Sigstore bundle format (#6)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e2109ac8018fc9a6fc9494e7d33cd5c95ce45465",
          "body": "## Summary\n\n- Drop in-tree `CHANGELOG.md`; release notes generated at tag time via\n`git-cliff` and published as the GitHub Release body by goreleaser\n(`--release-notes` wiring through `ci:release` task; `release.draft:\nfalse` + `mode: replace`).\n- Add `govulncheck` SARIF emit + `upload-sarif` in `ci\n[…]\nHUB_TOKEN`).\n- [ ] Confirm README badges render: CI, CodeQL, Trivy, Scorecard,\nCodecov, Go Report Card, License.\n- [ ] `task lint` / `task test` / `task vuln` / `task ci:vuln:sarif` all\nclean locally.",
          "is_bot": false,
          "headline": "build(release): tag-driven notes + govulncheck/Trivy SARIF (#5)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "56d6665603c29e812a10640111cde880b1635413",
          "body": null,
          "is_bot": false,
          "headline": "test(coverage): lift total coverage to 90%",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79b6f0bed17b3f17909e2b8ed5c7d3f4d21023a3",
          "body": null,
          "is_bot": false,
          "headline": "ci(scorecard): goreleaser-action marker + codecov coverage badge (#3)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f25654754ca8a6bb2a9d12197bdc8f27686030f2",
          "body": "…ovenance (#2)\n\n## Summary\n\nLands the public `TransportOptions` surface and the adapter-side TCP tuning that honors it. Adds an option-honoring `Exporter.ListenAndServe` so accepted server-side connections inherit the configured tuning. Bundles supporting governance + supply-chain bits picked up alo\n[…]\nnternal/adapter/transport`; both reference `internal/netopts` only\n- [x] api-surface: `api/pkg_usbip.json` regenerated, diff is purely additive\n- [x] TDD discipline: every behavior change is RED-first",
          "is_bot": false,
          "headline": "feat(usbip-transport-ci): TransportOptions + ListenAndServe + SLSA pr…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c712aedefe923b67ea5c207f90ac47cec36b20bf",
          "body": "* test(app): RED for TransportOptions plumbing (PR 1a)\n\nLock in PR 1a contract from docs/high-latency-plan.md §3:\n\n- TransportOptions struct with eight fields (DialConnectTimeout,\n  TCPKeepAliveIdle/Interval/Probes, Send/ReceiveBufferBytes,\n  Read/WriteDeadline).\n- ValidateTransportOptions rejects n\n[…]\nat honors the stored options — but callers reading the\ngodoc cannot tell that today. Make the limitation explicit on both\nthe option function and the exporterConfig field comment.\n\nNo behavior change.",
          "is_bot": false,
          "headline": "feat(app): TransportOptions plumbing (PR 1a, internal-only) (#1)",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "64fa570c9d1e89a19f5e0981a813ed1b2a6365d7",
          "body": "Two OpenSSF Scorecard fixes:\n\n1. Token-Permissions: Scorecard flags any non-read permission granted\n   at workflow root. Move `id-token: write` (and, for release.yml,\n   `contents: write`) from each workflow's root `permissions` block\n   to per-job blocks on every job that needs them. Workflow roots\n[…]\nf\n   - Taskfile.yml ci:test:mutation: gremlins@v0.6.0\n\nThe pinned versions track go.mod so a `task tidy` followed by a\nversion bump there will surface a CI-time mismatch rather than\nsilently drifting.",
          "is_bot": false,
          "headline": "ci(workflows): scope writes to job level; pin go install versions",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aaac0827c84c38e095b0017a15394c460cbae3f9",
          "body": "Run `task fmt` after the ci:fmt scope-down. The previous root-recursive\ngofumpt invocation failed silently on build/cache/go-mod permissions,\nso this churn had been accumulating since the last successful pass.\nPure formatter output, no semantic changes.",
          "is_bot": false,
          "headline": "style: apply gofumpt struct-literal multi-line rule",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddd1e3e1d2634aa0a28b53c2196e0624de08da7c",
          "body": "ci:fmt was running `gofmt -s -w .` and `gofumpt -w .` from the repo\nroot. The recursion descended into build/cache/go-mod (the hermetic\nGo module cache) where module sources are stored read-only, surfacing\n\"permission denied\" rather than running cleanly. Limit the formatter\narguments to `cmd example\n[…]\n:push task description and rewrite the CONTRIBUTING.md\nmicroVM paragraph that pointed at a non-existent kvm-labelled CI\nrunner. Both followed from the integration.yml deletion in the\npreceding commit.",
          "is_bot": false,
          "headline": "build(taskfile): scope ci:fmt to source roots; refresh integration docs",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "228c44ba338ef184fd293715e745b033cddad5c9",
          "body": "Three CI changes:\n\n1. Replace DeterminateSystems/magic-nix-cache-action@v13 with\n   DeterminateSystems/flakehub-cache-action@v3.18.1 across ci, codeql,\n   nightly, release-validate, and release. FlakeHub Cache replaces\n   the deprecated magic-nix-cache and authenticates via GitHub OIDC,\n   so each a\n[…]\ny\n   push to main hung waiting for a runner. GitHub-hosted runners do\n   not expose `/dev/kvm` and TCG fallback is too slow for CI; the\n   integration tier runs locally via `task vm:test:integration`.",
          "is_bot": false,
          "headline": "ci(workflows): swap to FlakeHub Cache, gate CodeQL, drop integration",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "da38d5a4445b7c4d474f58556575a5cbd48ef5f1",
          "body": "TestReconnect_ResetsBackoffAfterSuccess used the replacement watcher's\nregistry subscription as a happens-before fence for the parent\nwatcher's Backoff.Reset call. They are unordered: the recursive Attach\nspawns the replacement watcher's goroutine inside finishAttach, and\nthe parent then calls finis\n[…]\nthe assert\nfired before Reset.\n\nSwitch the assertion to require.Eventually polling\nbackoff.ResetCalls() == 1, which observes the actual contract surface\nwithout depending on the subscription ordering.",
          "is_bot": false,
          "headline": "fix(app): poll Backoff.Reset counter instead of subscription fence",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e57443b08fcc21efec8d003d97146893e737563d",
          "body": "… public repo\n\nGitHub deprecated Node 20 actions (deprecation notice on every\nrun; forced default June 2026, removed September 2026). Bump\nevery \\`uses:\\` reference to the latest Node-24-compatible major,\npreserving SHA pins + \\`# vN\\` Dependabot anchors:\n\n  * actions/checkout v4 → v6.0.2 (de0fac2e)\n[…]\n\\`task test\\` race-clean, \\`task vuln\\`\nclean. \\`act push -j {ddd-boundary, no-cgo, lint-and-vet,\nunit-linux, conformance, coverage, cross-compile, api-surface}\\`\nall pass under the bumped action set.",
          "is_bot": false,
          "headline": "ci(deps): bump every action to its Node-24 release; gate Scorecard on…",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c4b76e94677e5301d184cdab2f4571852be2e99",
          "body": "Codex flagged the substring \\`container: nixos/nix\\` surviving in\na comment block at .github/workflows/ci.yml:24. The comment\nexplained why the workflow does not use that pattern, but a\nrelease-time grep that asserts the substring is absent would\nfire as a false positive. Reword without the literal token.",
          "is_bot": false,
          "headline": "docs(ci.yml): rephrase comment to avoid grep collision",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20f561ff997cd6dfa3a9f9f5008085f88fca288e",
          "body": "Three new test files in cmd/usbip-go/ cover every pure helper that\nsits below the cobra Action layer — parseBackoff (every accepted\ngrammar plus rejection paths), classifyEvent / eventHeader / every\nadapt* (sweeps each EventKind with a proper time-stamped fixture\nand pins the type-assertion rejectio\n[…]\npurely for testing — the user-facing\nexception clause.\n\ncross-compile, api-surface, conformance, coverage, no-cgo,\nunit-linux, lint-and-vet, ddd-boundary all replay clean under\n\\`act push -j <name>\\`.",
          "is_bot": false,
          "headline": "test(cmd-usbip-go-ci-coverage): add pure-helper tests + bump thresholds",
          "author_name": "Ricardo Rivera",
          "author_login": "silkrad",
          "committed_at": "2026-05-08T16:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 1,
      "commits_last_year": 599,
      "latest_release_at": "2026-07-18T19:52:38Z",
      "latest_release_tag": "v1.0.2",
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 5,
      "days_since_latest_release": 4,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 87,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/abilisoft/usbip-go",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/abilisoft/usbip-go",
          "is_deprecated": false,
          "latest_version": "v1.0.2",
          "repository_url": "https://github.com/abilisoft/usbip-go",
          "versions_count": 6,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T15:02:10Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 3,
      "watchers": 1,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "vendor/charm.land/lipgloss/v2/Taskfile.yaml",
        "vendor/github.com/charmbracelet/fang/Taskfile.yml",
        "vendor/github.com/spf13/cobra/Makefile",
        "vendor/go.uber.org/goleak/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod",
        "tools/go.mod"
      ],
      "largest_source_bytes": 66581,
      "source_files_sampled": 357,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "vendor/github.com/clipperhouse/displaywidth/AGENTS.md"
      ],
      "agent_instruction_max_bytes": 6677
    },
    "dependencies": {
      "manifests": [
        "go.mod",
        "tools/go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 244,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "charm.land/lipgloss/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.5"
        },
        {
          "name": "github.com/charmbracelet/colorprofile",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.4.3"
        },
        {
          "name": "github.com/charmbracelet/fang",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0"
        },
        {
          "name": "github.com/coreos/go-systemd/v22",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v22.7.0"
        },
        {
          "name": "github.com/lmittmann/tint",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "go.uber.org/goleak",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.47.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.45.0"
        },
        {
          "name": "golang.org/x/time",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.15.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "charm.land/lipgloss/v2",
            "direct": true,
            "version": "v2.0.5",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/colorprofile",
            "direct": true,
            "version": "v0.4.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/fang",
            "direct": true,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/coreos/go-systemd/v22",
            "direct": true,
            "version": "v22.7.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/lmittmann/tint",
            "direct": true,
            "version": "v1.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/spf13/cobra",
            "direct": true,
            "version": "v1.10.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/stretchr/testify",
            "direct": true,
            "version": "v1.11.1",
            "ecosystem": "go"
          },
          {
            "name": "go.uber.org/goleak",
            "direct": true,
            "version": "v1.3.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sys",
            "direct": true,
            "version": "v0.47.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/term",
            "direct": true,
            "version": "v0.45.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/time",
            "direct": true,
            "version": "v0.15.0",
            "ecosystem": "go"
          },
          {
            "name": "4d63.com/gocheckcompilerdirectives",
            "direct": false,
            "version": "v1.4.0",
            "ecosystem": "go"
          },
          {
            "name": "4d63.com/gochecknoglobals",
            "direct": false,
            "version": "v0.2.2",
            "ecosystem": "go"
          },
          {
            "name": "codeberg.org/chavacava/garif",
            "direct": false,
            "version": "v0.2.1",
            "ecosystem": "go"
          },
          {
            "name": "codeberg.org/polyfloyd/go-errorlint",
            "direct": false,
            "version": "v1.9.0",
            "ecosystem": "go"
          },
          {
            "name": "dev.gaijin.team/go/exhaustruct/v4",
            "direct": false,
            "version": "v4.0.0",
            "ecosystem": "go"
          },
          {
            "name": "dev.gaijin.team/go/golib",
            "direct": false,
            "version": "v0.8.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/4meepo/tagalign",
            "direct": false,
            "version": "v1.4.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/abirdcfly/dupword",
            "direct": false,
            "version": "v0.1.8",
            "ecosystem": "go"
          },
          {
            "name": "github.com/adminbenni/iota-mixing",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alecthomas/chroma/v2",
            "direct": false,
            "version": "v2.27.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alecthomas/go-check-sumtype",
            "direct": false,
            "version": "v0.3.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alexkohler/nakedret/v2",
            "direct": false,
            "version": "v2.0.6",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alexkohler/prealloc",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alfatraining/structtag",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alingse/asasalint",
            "direct": false,
            "version": "v0.0.11",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alingse/nilnesserr",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/alwxsin/noinlineerr",
            "direct": false,
            "version": "v1.0.5",
            "ecosystem": "go"
          },
          {
            "name": "github.com/antonboom/errname",
            "direct": false,
            "version": "v1.1.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/antonboom/nilnil",
            "direct": false,
            "version": "v1.1.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/antonboom/testifylint",
            "direct": false,
            "version": "v1.6.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ashanbrown/forbidigo/v2",
            "direct": false,
            "version": "v2.3.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ashanbrown/makezero/v2",
            "direct": false,
            "version": "v2.2.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/beorn7/perks",
            "direct": false,
            "version": "v1.0.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/bkielbasa/cyclop",
            "direct": false,
            "version": "v1.2.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/blizzy78/varnamelen",
            "direct": false,
            "version": "v0.8.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/bluekeyes/go-gitdiff",
            "direct": false,
            "version": "v0.8.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/bombsimon/wsl/v4",
            "direct": false,
            "version": "v4.7.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/bombsimon/wsl/v5",
            "direct": false,
            "version": "v5.8.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/breml/bidichk",
            "direct": false,
            "version": "v0.3.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/breml/errchkjson",
            "direct": false,
            "version": "v0.4.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/burntsushi/toml",
            "direct": false,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/butuzov/ireturn",
            "direct": false,
            "version": "v0.4.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/butuzov/mirror",
            "direct": false,
            "version": "v1.3.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/catenacyber/perfsprint",
            "direct": false,
            "version": "v0.10.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ccojocar/zxcvbn-go",
            "direct": false,
            "version": "v1.0.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/cespare/xxhash/v2",
            "direct": false,
            "version": "v2.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charithe/durationcheck",
            "direct": false,
            "version": "v0.0.11",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/ultraviolet",
            "direct": false,
            "version": "v0.0.0-20260703014108-f5a850f9c2b7",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/x/ansi",
            "direct": false,
            "version": "v0.11.7",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/x/exp/charmtone",
            "direct": false,
            "version": "v0.0.0-20260705004817-2cc9a8fe1146",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/x/exp/golden",
            "direct": false,
            "version": "v0.0.0-20260705004817-2cc9a8fe1146",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/x/term",
            "direct": false,
            "version": "v0.2.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/x/termios",
            "direct": false,
            "version": "v0.1.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/charmbracelet/x/windows",
            "direct": false,
            "version": "v0.2.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/checkmake/checkmake",
            "direct": false,
            "version": "v0.3.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ckaznocha/intrange",
            "direct": false,
            "version": "v0.3.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/clickhouse/clickhouse-go-linter",
            "direct": false,
            "version": "v1.2.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/clipperhouse/displaywidth",
            "direct": false,
            "version": "v0.11.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/clipperhouse/uax29/v2",
            "direct": false,
            "version": "v2.7.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/curioswitch/go-reassign",
            "direct": false,
            "version": "v0.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/daixiang0/gci",
            "direct": false,
            "version": "v0.14.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/dave/dst",
            "direct": false,
            "version": "v0.27.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/davecgh/go-spew",
            "direct": false,
            "version": "v1.1.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/davecgh/go-spew",
            "direct": false,
            "version": "v1.1.2-0.20180830191138-d8f796af33cc",
            "ecosystem": "go"
          },
          {
            "name": "github.com/denis-tingaikin/go-header",
            "direct": false,
            "version": "v0.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/djarvur/go-err113",
            "direct": false,
            "version": "v0.1.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/dlclark/regexp2/v2",
            "direct": false,
            "version": "v2.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ettle/strcase",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/fatih/color",
            "direct": false,
            "version": "v1.19.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/fatih/structtag",
            "direct": false,
            "version": "v1.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/firefart/nonamedreturns",
            "direct": false,
            "version": "v1.0.8",
            "ecosystem": "go"
          },
          {
            "name": "github.com/fsnotify/fsnotify",
            "direct": false,
            "version": "v1.10.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/fzipp/gocyclo",
            "direct": false,
            "version": "v0.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ghostiam/protogetter",
            "direct": false,
            "version": "v0.3.21",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-critic/go-critic",
            "direct": false,
            "version": "v0.14.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-gremlins/gremlins",
            "direct": false,
            "version": "v0.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-ini/ini",
            "direct": false,
            "version": "v1.67.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-toolsmith/astcast",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-toolsmith/astcopy",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-toolsmith/astequal",
            "direct": false,
            "version": "v1.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-toolsmith/astfmt",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-toolsmith/astp",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-toolsmith/strparse",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-toolsmith/typep",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-viper/mapstructure/v2",
            "direct": false,
            "version": "v2.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-xmlfmt/xmlfmt",
            "direct": false,
            "version": "v1.1.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gobwas/glob",
            "direct": false,
            "version": "v0.2.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/goccy/go-json",
            "direct": false,
            "version": "v0.10.6",
            "ecosystem": "go"
          },
          {
            "name": "github.com/godoc-lint/godoc-lint",
            "direct": false,
            "version": "v0.11.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gofrs/flock",
            "direct": false,
            "version": "v0.13.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/asciicheck",
            "direct": false,
            "version": "v0.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/dupl",
            "direct": false,
            "version": "v0.0.0-20260401084720-c99c5cf5c202",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/go-printf-func-name",
            "direct": false,
            "version": "v0.1.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/gofmt",
            "direct": false,
            "version": "v0.0.0-20250106114630-d62b90e6713d",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/golangci-lint/v2",
            "direct": false,
            "version": "v2.12.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/golines",
            "direct": false,
            "version": "v0.15.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/misspell",
            "direct": false,
            "version": "v0.8.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/plugin-module-register",
            "direct": false,
            "version": "v0.1.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/revgrep",
            "direct": false,
            "version": "v0.8.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/rowserrcheck",
            "direct": false,
            "version": "v0.0.0-20260701145345-399602f983c8",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/swaggoswag",
            "direct": false,
            "version": "v0.0.0-20250504205917-77f2aca3143e",
            "ecosystem": "go"
          },
          {
            "name": "github.com/golangci/unconvert",
            "direct": false,
            "version": "v0.0.0-20250410112200-a129a6e6413e",
            "ecosystem": "go"
          },
          {
            "name": "github.com/google/go-cmp",
            "direct": false,
            "version": "v0.7.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/google/pprof",
            "direct": false,
            "version": "v0.0.0-20260709232956-b9395ee17fa0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/google/renameio",
            "direct": false,
            "version": "v1.0.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gordonklaus/ineffassign",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gostaticanalysis/analysisutil",
            "direct": false,
            "version": "v0.7.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gostaticanalysis/comment",
            "direct": false,
            "version": "v1.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gostaticanalysis/forcetypeassert",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gostaticanalysis/nilerr",
            "direct": false,
            "version": "v0.1.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gostaticanalysis/testutil",
            "direct": false,
            "version": "v0.6.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/hako/durafmt",
            "direct": false,
            "version": "v0.0.0-20210608085754-5c1018a4e16b",
            "ecosystem": "go"
          },
          {
            "name": "github.com/hashicorp/go-immutable-radix/v2",
            "direct": false,
            "version": "v2.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/hashicorp/go-version",
            "direct": false,
            "version": "v1.9.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/hashicorp/golang-lru/v2",
            "direct": false,
            "version": "v2.0.7",
            "ecosystem": "go"
          },
          {
            "name": "github.com/hectane/go-acl",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/hexops/gotextdiff",
            "direct": false,
            "version": "v1.0.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/inconshreveable/mousetrap",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/jgautheron/goconst",
            "direct": false,
            "version": "v1.10.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/jjti/go-spancheck",
            "direct": false,
            "version": "v0.6.5",
            "ecosystem": "go"
          },
          {
            "name": "github.com/julz/importas",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/karamaru-alpha/copyloopvar",
            "direct": false,
            "version": "v1.2.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/kisielk/errcheck",
            "direct": false,
            "version": "v1.20.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/kkhaike/contextcheck",
            "direct": false,
            "version": "v1.1.6",
            "ecosystem": "go"
          },
          {
            "name": "github.com/kr/pretty",
            "direct": false,
            "version": "v0.3.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/kulti/thelper",
            "direct": false,
            "version": "v0.7.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/kunwardeep/paralleltest",
            "direct": false,
            "version": "v1.0.15",
            "ecosystem": "go"
          },
          {
            "name": "github.com/lasiar/canonicalheader",
            "direct": false,
            "version": "v1.1.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ldez/exptostd",
            "direct": false,
            "version": "v0.4.5",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ldez/gomoddirectives",
            "direct": false,
            "version": "v0.9.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ldez/grignotin",
            "direct": false,
            "version": "v0.10.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ldez/structtags",
            "direct": false,
            "version": "v0.6.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ldez/tagliatelle",
            "direct": false,
            "version": "v0.7.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ldez/usetesting",
            "direct": false,
            "version": "v0.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/leonklingele/grouper",
            "direct": false,
            "version": "v1.1.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/lucasb-eyer/go-colorful",
            "direct": false,
            "version": "v1.4.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/macabu/inamedparam",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/makenowjust/heredoc",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/manuelarte/embeddedstructfieldcheck",
            "direct": false,
            "version": "v0.4.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/manuelarte/funcorder",
            "direct": false,
            "version": "v0.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/maratori/testableexamples",
            "direct": false,
            "version": "v1.0.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/maratori/testpackage",
            "direct": false,
            "version": "v1.1.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/masterminds/semver/v3",
            "direct": false,
            "version": "v3.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/matoous/godox",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/matryer/is",
            "direct": false,
            "version": "v1.4.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mattn/go-colorable",
            "direct": false,
            "version": "v0.1.15",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mattn/go-isatty",
            "direct": false,
            "version": "v0.0.22",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mattn/go-runewidth",
            "direct": false,
            "version": "v0.0.24",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mgechev/revive",
            "direct": false,
            "version": "v1.15.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mirrexone/unqueryvet",
            "direct": false,
            "version": "v1.5.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/mitchellh/go-homedir",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/moricho/tparallel",
            "direct": false,
            "version": "v0.3.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/muesli/cancelreader",
            "direct": false,
            "version": "v0.2.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/muesli/mango",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/muesli/mango-cobra",
            "direct": false,
            "version": "v1.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/muesli/mango-pflag",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/muesli/roff",
            "direct": false,
            "version": "v0.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/munnerz/goautoneg",
            "direct": false,
            "version": "v0.0.0-20191010083416-a7dc8b61c822",
            "ecosystem": "go"
          },
          {
            "name": "github.com/nakabonne/nestif",
            "direct": false,
            "version": "v0.3.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/nishanths/exhaustive",
            "direct": false,
            "version": "v0.12.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/nishanths/predeclared",
            "direct": false,
            "version": "v0.2.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/nunnatsa/ginkgolinter",
            "direct": false,
            "version": "v0.23.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/olekukonko/cat",
            "direct": false,
            "version": "v0.0.0-20250911104152-50322a0618f6",
            "ecosystem": "go"
          },
          {
            "name": "github.com/olekukonko/errors",
            "direct": false,
            "version": "v1.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/olekukonko/ll",
            "direct": false,
            "version": "v0.1.8",
            "ecosystem": "go"
          },
          {
            "name": "github.com/olekukonko/tablewriter",
            "direct": false,
            "version": "v1.1.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/onsi/ginkgo/v2",
            "direct": false,
            "version": "v2.32.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/onsi/gomega",
            "direct": false,
            "version": "v1.42.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/openpeedeep/depguard/v2",
            "direct": false,
            "version": "v2.2.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/pelletier/go-toml/v2",
            "direct": false,
            "version": "v2.4.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/pmezard/go-difflib",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/pmezard/go-difflib",
            "direct": false,
            "version": "v1.0.1-0.20181226105442-5d4384ee4fb2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/client_golang",
            "direct": false,
            "version": "v1.23.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/client_model",
            "direct": false,
            "version": "v0.6.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/common",
            "direct": false,
            "version": "v0.70.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/prometheus/procfs",
            "direct": false,
            "version": "v0.21.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/quasilyte/go-ruleguard",
            "direct": false,
            "version": "v0.4.5",
            "ecosystem": "go"
          },
          {
            "name": "github.com/quasilyte/go-ruleguard/dsl",
            "direct": false,
            "version": "v0.3.23",
            "ecosystem": "go"
          },
          {
            "name": "github.com/quasilyte/gogrep",
            "direct": false,
            "version": "v0.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/quasilyte/regex/syntax",
            "direct": false,
            "version": "v0.0.0-20210819130434-b3f0c404a727",
            "ecosystem": "go"
          },
          {
            "name": "github.com/quasilyte/stdinfo",
            "direct": false,
            "version": "v0.0.0-20220114132959-f7386bf02567",
            "ecosystem": "go"
          },
          {
            "name": "github.com/raeperd/recvcheck",
            "direct": false,
            "version": "v0.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/rivo/uniseg",
            "direct": false,
            "version": "v0.4.7",
            "ecosystem": "go"
          },
          {
            "name": "github.com/rogpeppe/go-internal",
            "direct": false,
            "version": "v1.15.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ryancurrah/gomodguard",
            "direct": false,
            "version": "v1.4.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ryancurrah/gomodguard/v2",
            "direct": false,
            "version": "v2.1.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ryanrolds/sqlclosecheck",
            "direct": false,
            "version": "v0.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sagikazarmark/locafero",
            "direct": false,
            "version": "v0.12.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sanposhiho/wastedassign/v2",
            "direct": false,
            "version": "v2.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/santhosh-tekuri/jsonschema/v6",
            "direct": false,
            "version": "v6.0.2",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sashamelentyev/interfacebloat",
            "direct": false,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sashamelentyev/usestdlibvars",
            "direct": false,
            "version": "v1.29.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/securego/gosec/v2",
            "direct": false,
            "version": "v2.27.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sergi/go-diff",
            "direct": false,
            "version": "v1.4.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sirupsen/logrus",
            "direct": false,
            "version": "v1.9.4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sivchari/containedctx",
            "direct": false,
            "version": "v1.0.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sonatard/noctx",
            "direct": false,
            "version": "v0.5.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/sourcegraph/go-diff",
            "direct": false,
            "version": "v0.8.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/spf13/afero",
            "direct": false,
            "version": "v1.15.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/spf13/cast",
            "direct": false,
            "version": "v1.10.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/spf13/pflag",
            "direct": false,
            "version": "v1.0.10",
            "ecosystem": "go"
          },
          {
            "name": "github.com/spf13/viper",
            "direct": false,
            "version": "v1.21.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ssgreg/nlreturn/v2",
            "direct": false,
            "version": "v2.2.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/stbenjam/no-sprintf-host-port",
            "direct": false,
            "version": "v0.3.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/stretchr/objx",
            "direct": false,
            "version": "v0.5.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/subosito/gotenv",
            "direct": false,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/tenntenn/text/transform",
            "direct": false,
            "version": "v0.0.0-20250402111347-ba836492e880",
            "ecosystem": "go"
          },
          {
            "name": "github.com/tetafro/godot",
            "direct": false,
            "version": "v1.5.6",
            "ecosystem": "go"
          },
          {
            "name": "github.com/timakin/bodyclose",
            "direct": false,
            "version": "v0.0.0-20260129054331-73d1f95b84b4",
            "ecosystem": "go"
          },
          {
            "name": "github.com/timonwong/loggercheck",
            "direct": false,
            "version": "v0.11.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/tomarrell/wrapcheck/v2",
            "direct": false,
            "version": "v2.12.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/tommy-muehle/go-mnd/v2",
            "direct": false,
            "version": "v2.5.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ultraware/funlen",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ultraware/whitespace",
            "direct": false,
            "version": "v0.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/uudashr/gocognit",
            "direct": false,
            "version": "v1.2.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/uudashr/iface",
            "direct": false,
            "version": "v1.5.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/xen0n/gosmopolitan",
            "direct": false,
            "version": "v1.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/xo/terminfo",
            "direct": false,
            "version": "v0.0.0-20220910002029-abceb7e1c41e",
            "ecosystem": "go"
          },
          {
            "name": "github.com/yagipy/maintidx",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/yeya24/promlinter",
            "direct": false,
            "version": "v0.3.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/ykadowak/zerologlint",
            "direct": false,
            "version": "v0.1.5",
            "ecosystem": "go"
          },
          {
            "name": "gitlab.com/bosi/decorder",
            "direct": false,
            "version": "v0.4.2",
            "ecosystem": "go"
          },
          {
            "name": "go-simpler.org/musttag",
            "direct": false,
            "version": "v0.14.0",
            "ecosystem": "go"
          },
          {
            "name": "go-simpler.org/sloglint",
            "direct": false,
            "version": "v0.12.0",
            "ecosystem": "go"
          },
          {
            "name": "go.augendre.info/arangolint",
            "direct": false,
            "version": "v0.4.0",
            "ecosystem": "go"
          },
          {
            "name": "go.augendre.info/fatcontext",
            "direct": false,
            "version": "v0.10.0",
            "ecosystem": "go"
          },
          {
            "name": "go.uber.org/multierr",
            "direct": false,
            "version": "v1.11.0",
            "ecosystem": "go"
          },
          {
            "name": "go.uber.org/zap",
            "direct": false,
            "version": "v1.28.0",
            "ecosystem": "go"
          },
          {
            "name": "go.yaml.in/yaml/v3",
            "direct": false,
            "version": "v3.0.4",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/exp",
            "direct": false,
            "version": "v0.0.0-20260709172345-9ea1abe57597",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/exp/typeparams",
            "direct": false,
            "version": "v0.0.0-20260709172345-9ea1abe57597",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/mod",
            "direct": false,
            "version": "v0.38.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sync",
            "direct": false,
            "version": "v0.22.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/telemetry",
            "direct": false,
            "version": "v0.0.0-20260710170516-c325552849a7",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/text",
            "direct": false,
            "version": "v0.40.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/tools",
            "direct": false,
            "version": "v0.48.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/vuln",
            "direct": false,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "google.golang.org/protobuf",
            "direct": false,
            "version": "v1.36.11",
            "ecosystem": "go"
          },
          {
            "name": "gopkg.in/check.v1",
            "direct": false,
            "version": "v1.0.0-20201130134442-10cb98267c6c",
            "ecosystem": "go"
          },
          {
            "name": "gopkg.in/yaml.v3",
            "direct": false,
            "version": "v3.0.1",
            "ecosystem": "go"
          },
          {
            "name": "honnef.co/go/tools",
            "direct": false,
            "version": "v0.7.0",
            "ecosystem": "go"
          },
          {
            "name": "mvdan.cc/gofumpt",
            "direct": false,
            "version": "v0.10.0",
            "ecosystem": "go"
          },
          {
            "name": "mvdan.cc/unparam",
            "direct": false,
            "version": "v0.0.0-20251027182757-5beb8c8f8f15",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 244,
        "direct_count": 11,
        "indirect_count": 233
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 43,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 2
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "silkrad",
          "commits": 591,
          "avatar_url": "https://avatars.githubusercontent.com/u/25689973?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "_arch-checks.yml",
        "_conformance.yml",
        "_coverage.yml",
        "_security.yml",
        "_unit-tests.yml",
        "ci.yml",
        "codeql.yml",
        "mutation.yml",
        "nightly.yml",
        "recover-v1.0.2.yml",
        "release.yml",
        "scorecard.yml",
        "trivy.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yaml",
        ".golangci.yml"
      ],
      "has_editorconfig": true,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 9,
            "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": 10,
            "reason": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 5,
            "reason": "badge detected: Passing",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 8,
            "reason": "dependency not pinned by hash detected -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 10,
            "reason": "1 out of the last 1 releases have a total of 2 signed artifacts.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "b46dc5467ef75f3d0a7c89069871ed9c9402db75",
        "ran_at": "2026-07-23T04:47:26Z",
        "aggregate_score": 8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T07:13:24Z",
      "oldest_open_prs": [
        {
          "number": 46,
          "created_at": "2026-07-20T04:18:35Z",
          "last_comment_at": "2026-07-20T04:20:20Z",
          "last_comment_author": "codecov"
        }
      ],
      "last_merged_pr_at": "2026-07-19T02:13:03Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/abilisoft/usbip-go",
    "host": "github.com",
    "name": "usbip-go",
    "owner": "abilisoft"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 84,
        "vitality": 69,
        "community": 39,
        "governance": 51,
        "engineering": 84
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 69,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 58,
            "inputs": {
              "commits_last_year": 599,
              "human_commit_share": 0.92,
              "days_since_last_push": 3,
              "active_weeks_last_year": 5
            },
            "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": "5/52 weeks with commits",
                "points": 3.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "599 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 599
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 86,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "v1.0.2",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": null
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "1 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "cadence unknown (single release)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence_unknown",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "1 out of the last 1 releases have a total of 2 signed artifacts.",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 39,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 5,
            "inputs": {
              "forks": 0,
              "stars": 3,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "3 stars",
                "points": 4.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "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": 51,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 69,
            "inputs": {
              "merged_prs": 43,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 2
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "43/45 decided PRs merged",
                "points": 36.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 43,
                      "decided": 45
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "followers": 1,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "abilisoft",
              "public_repos": 4,
              "account_age_days": 95
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "1 followers of abilisoft",
                "points": 2.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1,
                      "login": "abilisoft"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "4 public repos, account ~0 yr old",
                "points": 5.6,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 4
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/abilisoft/usbip-go"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "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 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "6 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 6
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 84,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "excellent",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "13 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yaml, .golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml, .golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "good",
        "name": "Security",
        "value": 84,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 8
            },
            "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": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "11 out of 11 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "badge detected: Passing",
                "points": 1.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "1 out of the last 1 releases have a total of 2 signed artifacts.",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 244 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",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 244
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 244,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "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 carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "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": 244,
              "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": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "vendor/github.com/clipperhouse/displaywidth/AGENTS.md"
              ],
              "agent_instruction_max_bytes": 6677
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, vendor/github.com/clipperhouse/displaywidth/AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, vendor/github.com/clipperhouse/displaywidth/AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "92 of 92 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 92,
                      "sampled": 92
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 88,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "vendor/charm.land/lipgloss/v2/Taskfile.yaml",
                "vendor/github.com/charmbracelet/fang/Taskfile.yml",
                "vendor/github.com/spf13/cobra/Makefile",
                "vendor/go.uber.org/goleak/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod",
                "tools/go.mod"
              ],
              "dependency_bot_commit_share": 0.08
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, vendor/charm.land/lipgloss/v2/Taskfile.yaml, vendor/github.com/charmbracelet/fang/Taskfile.yml, vendor/github.com/spf13/cobra/Makefile, vendor/go.uber.org/goleak/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, vendor/charm.land/lipgloss/v2/Taskfile.yaml, vendor/github.com/charmbracelet/fang/Taskfile.yml, vendor/github.com/spf13/cobra/Makefile, vendor/go.uber.org/goleak/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yaml, .golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml, .golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "8 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 8,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 66581,
              "source_files_sampled": 357,
              "oversized_source_files": 1
            },
            "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": "1/357 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 357,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T04:47:35.911156Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/a/abilisoft/usbip-go.svg",
  "full_name": "abilisoft/usbip-go",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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