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

hgg-6 / pkgTool

封装一些golang工具库

GoApache-2.0★ 42 estrellas⑂ 9 forksdesde jul 2025Ver en GitHub ↗

hgg-6/pkgTool tiene un índice de salud de 46 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es Vitality (81/100) y la más baja, Security (26/100). Se actualizó por última vez hace 8 días. Una sola persona concentra la mayor parte del trabajo reciente.

46
global / 100
En riesgo

Índice de salud del software

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

46
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

hgg-6Cuenta personal
0 seguidores1 repositorio públicodesde may 2025

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/hgg-6/pkgTool/v2v2.2.4-91hace 8 días

Métricas por categoría

Vitalidad

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

81Bueno · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 8 días
19.4/36Cadencia de commits — 28/52 semanas con commits
18/18Volumen de commits — 160 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year160
human_commit_share1
days_since_last_push8
active_weeks_last_year28
Cómo se puntúa
16.2/27Publica versiones — 100 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 8 días
27/27Cadencia de publicación — una versión cada ~13 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count100
latest_release_tagv2.2.4
releases_from_tags
days_since_latest_release8
mean_days_between_releases13
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

53Moderado · 18% del índice global
Cómo se puntúa
26.2/60Estrellas — 42 estrellas
7.5/25Forks — 9 forks
4.7/15Observadores — 8 observadores
Datos de entrada utilizados
forks9
stars42
watchers8
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
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

28Crítico · 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
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
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
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de hgg-6
4.5/25Trayectoria — 1 repos públicos, cuenta de ~1 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginhgg-6
public_repos1
account_age_days428
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 8 días
20/20Historial de versiones — 91 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/hgg-6/pkgTool/v2
ecosystemsgo
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

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

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

Documentación

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

Seguridad

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

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

Preparación para IA

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

56Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
26.1/40Historial de commits legible — 49 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,49
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/215 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes25.414
source_files_sampled215
oversized_source_files0

Datos clave

42estrellas de GitHub
1contribuidores
160commits en los últimos 12 meses
8días desde el último push
100versiones 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
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

Historial de estrellas y forks 0 ★ / 9 ⇿
0Estrellas
9Forks
2Versiones

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

0246810932025-102025-102025-10
Mayor 0Menor 0Parche 2
OpenSSF Scorecard 2.6 / 10
2.6agregado

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-28 04:02 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
n/dDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
n/dToken-PermissionsNo tokens found
0Vulnerabilities42 existing vulnerabilities detected
Dependencias directas 34
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/IBM/saramav1.46.1go.mod
Gogithub.com/dgraph-io/ristretto/v2v2.3.0go.mod
Gogithub.com/fsnotify/fsnotifyv1.8.0go.mod
Gogithub.com/gin-contrib/sessionsv1.0.4go.mod
Gogithub.com/gin-gonic/ginv1.11.0go.mod
Gogithub.com/go-kratos/aegisv0.2.0go.mod
Gogithub.com/go-kratos/kratos/contrib/registry/etcd/v2v2.0.0-20250912104010-25b6c0fb9f38go.mod
Gogithub.com/go-kratos/kratos/v2v2.9.1go.mod
Gogithub.com/go-redsync/redsync/v4v4.13.0go.mod
Gogithub.com/go-sql-driver/mysqlv1.9.0go.mod
Gogithub.com/golang-jwt/jwt/v5v5.3.0go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gogithub.com/prometheus/client_golangv1.23.2go.mod
Gogithub.com/redis/go-redis/v9v9.14.0go.mod
Gogithub.com/robfig/cron/v3v3.0.1go.mod
Gogithub.com/rs/zerologv1.34.0go.mod
Gogithub.com/shirou/gopsutil/v4v4.25.8go.mod
Gogithub.com/spf13/viperv1.20.1go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogithub.com/zeromicro/go-zerov1.9.2go.mod
Gogo.etcd.io/etcd/client/v3v3.6.5go.mod
Gogo.opentelemetry.io/otelv1.38.0go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpcv1.24.0go.mod
Gogo.opentelemetry.io/otel/sdkv1.38.0go.mod
Gogo.opentelemetry.io/otel/tracev1.38.0go.mod
Gogo.uber.org/mockv0.6.0go.mod
Gogo.uber.org/zapv1.27.0go.mod
Gogolang.org/x/cryptov0.42.0go.mod
Gogolang.org/x/syncv0.17.0go.mod
Gogoogle.golang.org/grpcv1.71.1go.mod
Gogoogle.golang.org/protobufv1.36.10go.mod
Gogopkg.in/natefinch/lumberjack.v2v2.2.1go.mod
Gogorm.io/driver/mysqlv1.6.0go.mod
Gogorm.io/gormv1.30.0go.mod
Todas las dependencias no recopilado

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 1265,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 864722,
        "Lua": 4322
      },
      "pushed_at": "2026-07-19T06:45:20Z",
      "created_at": "2025-07-28T07:10:36Z",
      "owner_type": "User",
      "updated_at": "2026-07-19T06:45:13Z",
      "description": "封装一些golang工具库",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "master",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "hgg-6",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/213376465?v=4",
      "created_at": "2025-05-26T03:29:00Z",
      "is_verified": null,
      "public_repos": 1,
      "account_age_days": 428
    },
    "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": "v2.2.4",
          "kind": "patch",
          "published_at": "2026-07-19T06:44:37Z"
        },
        {
          "tag": "v2.2.3",
          "kind": "patch",
          "published_at": "2026-05-23T11:34:43Z"
        },
        {
          "tag": "v2.2.2",
          "kind": "patch",
          "published_at": "2026-04-30T19:17:14Z"
        },
        {
          "tag": "v2.2.1",
          "kind": "patch",
          "published_at": "2026-04-10T09:26:45Z"
        },
        {
          "tag": "v2.2.0",
          "kind": "minor",
          "published_at": "2026-04-06T04:03:47Z"
        },
        {
          "tag": "v2.1.41",
          "kind": "patch",
          "published_at": "2026-04-02T09:10:27Z"
        },
        {
          "tag": "v2.1.40",
          "kind": "patch",
          "published_at": "2026-03-30T18:17:59Z"
        },
        {
          "tag": "v2.1.39",
          "kind": "patch",
          "published_at": "2026-03-30T09:54:14Z"
        },
        {
          "tag": "v2.1.38",
          "kind": "patch",
          "published_at": "2026-03-30T09:31:33Z"
        },
        {
          "tag": "v2.1.37",
          "kind": "patch",
          "published_at": "2026-03-24T04:05:17Z"
        },
        {
          "tag": "v2.1.36",
          "kind": "patch",
          "published_at": "2026-02-02T17:33:08Z"
        },
        {
          "tag": "v2.1.35",
          "kind": "patch",
          "published_at": "2026-02-02T11:02:16Z"
        },
        {
          "tag": "v2.1.34",
          "kind": "patch",
          "published_at": "2026-02-02T10:59:47Z"
        },
        {
          "tag": "v2.1.33",
          "kind": "patch",
          "published_at": "2026-01-30T07:39:50Z"
        },
        {
          "tag": "v2.1.32",
          "kind": "patch",
          "published_at": "2026-01-26T08:57:41Z"
        },
        {
          "tag": "v2.1.31",
          "kind": "patch",
          "published_at": "2026-01-25T14:02:59Z"
        },
        {
          "tag": "v2.1.30",
          "kind": "patch",
          "published_at": "2026-01-25T09:30:02Z"
        },
        {
          "tag": "v2.1.29",
          "kind": "patch",
          "published_at": "2026-01-25T08:32:11Z"
        },
        {
          "tag": "v2.1.28",
          "kind": "patch",
          "published_at": "2025-12-31T08:14:20Z"
        },
        {
          "tag": "v2.1.27",
          "kind": "patch",
          "published_at": "2025-12-29T14:56:31Z"
        },
        {
          "tag": "v2.1.26",
          "kind": "patch",
          "published_at": "2025-12-29T11:52:56Z"
        },
        {
          "tag": "v2.1.25",
          "kind": "patch",
          "published_at": "2025-12-28T04:26:38Z"
        },
        {
          "tag": "v2.1.24",
          "kind": "patch",
          "published_at": "2025-12-28T04:10:45Z"
        },
        {
          "tag": "v2.1.23",
          "kind": "patch",
          "published_at": "2025-12-18T14:26:27Z"
        },
        {
          "tag": "v2.1.22",
          "kind": "patch",
          "published_at": "2025-12-17T04:43:24Z"
        },
        {
          "tag": "v2.1.21",
          "kind": "patch",
          "published_at": "2025-12-16T14:42:38Z"
        },
        {
          "tag": "v2.1.20",
          "kind": "patch",
          "published_at": "2025-12-15T14:39:21Z"
        },
        {
          "tag": "v2.1.19",
          "kind": "patch",
          "published_at": "2025-12-12T12:02:53Z"
        },
        {
          "tag": "v2.1.18",
          "kind": "patch",
          "published_at": "2025-12-12T11:10:22Z"
        },
        {
          "tag": "v2.1.17",
          "kind": "patch",
          "published_at": "2025-11-23T10:31:36Z"
        },
        {
          "tag": "v2.1.16",
          "kind": "patch",
          "published_at": "2025-11-15T06:03:46Z"
        },
        {
          "tag": "v2.1.15",
          "kind": "patch",
          "published_at": "2025-11-02T09:56:39Z"
        },
        {
          "tag": "v2.1.14",
          "kind": "patch",
          "published_at": "2025-10-30T08:53:55Z"
        },
        {
          "tag": "v2.1.13",
          "kind": "patch",
          "published_at": "2025-10-28T17:01:50Z"
        },
        {
          "tag": "v2.1.12",
          "kind": "patch",
          "published_at": "2025-10-27T14:07:15Z"
        },
        {
          "tag": "v2.1.11",
          "kind": "patch",
          "published_at": "2025-10-27T13:25:11Z"
        },
        {
          "tag": "v2.1.10",
          "kind": "patch",
          "published_at": "2025-10-25T17:42:49Z"
        },
        {
          "tag": "v2.1.9",
          "kind": "patch",
          "published_at": "2025-10-25T08:24:55Z"
        },
        {
          "tag": "v2.1.8",
          "kind": "patch",
          "published_at": "2025-10-23T14:34:09Z"
        },
        {
          "tag": "v2.1.7",
          "kind": "patch",
          "published_at": "2025-10-23T11:30:24Z"
        },
        {
          "tag": "v2.1.6",
          "kind": "patch",
          "published_at": "2025-10-20T14:03:39Z"
        },
        {
          "tag": "v2.1.5",
          "kind": "patch",
          "published_at": "2025-10-20T10:18:19Z"
        },
        {
          "tag": "v2.1.4",
          "kind": "patch",
          "published_at": "2025-10-15T10:39:16Z"
        },
        {
          "tag": "v2.1.3",
          "kind": "patch",
          "published_at": "2025-10-15T08:39:36Z"
        },
        {
          "tag": "v2.1.2",
          "kind": "patch",
          "published_at": "2025-10-14T10:20:27Z"
        },
        {
          "tag": "v2.1.1",
          "kind": "patch",
          "published_at": "2025-10-13T08:58:11Z"
        },
        {
          "tag": "v2.1.0",
          "kind": "minor",
          "published_at": "2025-10-05T14:10:02Z"
        },
        {
          "tag": "v2.0.44",
          "kind": "patch",
          "published_at": "2025-09-29T08:30:55Z"
        },
        {
          "tag": "v2.0.43",
          "kind": "patch",
          "published_at": "2025-09-25T11:45:58Z"
        },
        {
          "tag": "v2.0.42",
          "kind": "patch",
          "published_at": "2025-09-24T09:02:07Z"
        },
        {
          "tag": "v2.0.41",
          "kind": "patch",
          "published_at": "2025-09-24T06:31:19Z"
        },
        {
          "tag": "v2.0.40",
          "kind": "patch",
          "published_at": "2025-09-23T13:13:54Z"
        },
        {
          "tag": "v2.0.39",
          "kind": "patch",
          "published_at": "2025-09-23T12:07:50Z"
        },
        {
          "tag": "v2.0.38",
          "kind": "patch",
          "published_at": "2025-09-23T07:01:28Z"
        },
        {
          "tag": "v2.0.37",
          "kind": "patch",
          "published_at": "2025-09-18T06:59:44Z"
        },
        {
          "tag": "v2.0.36",
          "kind": "patch",
          "published_at": "2025-09-18T06:59:44Z"
        },
        {
          "tag": "v2.0.35",
          "kind": "patch",
          "published_at": "2025-09-15T18:32:07Z"
        },
        {
          "tag": "v2.0.34",
          "kind": "patch",
          "published_at": "2025-09-15T03:28:16Z"
        },
        {
          "tag": "v2.0.33",
          "kind": "patch",
          "published_at": "2025-09-14T10:09:57Z"
        },
        {
          "tag": "v2.0.32",
          "kind": "patch",
          "published_at": "2025-09-14T09:31:48Z"
        },
        {
          "tag": "v2.0.31",
          "kind": "patch",
          "published_at": "2025-09-13T18:49:07Z"
        },
        {
          "tag": "v2.0.30",
          "kind": "patch",
          "published_at": "2025-09-12T15:56:49Z"
        },
        {
          "tag": "v2.0.29",
          "kind": "patch",
          "published_at": "2025-09-12T15:50:10Z"
        },
        {
          "tag": "v2.0.28",
          "kind": "patch",
          "published_at": "2025-09-12T06:03:01Z"
        },
        {
          "tag": "v2.0.27",
          "kind": "patch",
          "published_at": "2025-09-12T05:29:20Z"
        },
        {
          "tag": "v2.0.26",
          "kind": "patch",
          "published_at": "2025-09-12T03:58:50Z"
        },
        {
          "tag": "v2.0.25",
          "kind": "patch",
          "published_at": "2025-09-11T19:07:12Z"
        },
        {
          "tag": "v2.0.24",
          "kind": "patch",
          "published_at": "2025-09-11T18:59:20Z"
        },
        {
          "tag": "v2.0.23",
          "kind": "patch",
          "published_at": "2025-09-11T18:46:53Z"
        },
        {
          "tag": "v2.0.22",
          "kind": "patch",
          "published_at": "2025-09-11T13:49:18Z"
        },
        {
          "tag": "v2.0.21",
          "kind": "patch",
          "published_at": "2025-09-10T10:27:46Z"
        },
        {
          "tag": "v2.0.20",
          "kind": "patch",
          "published_at": "2025-09-09T09:23:57Z"
        },
        {
          "tag": "v2.0.19",
          "kind": "patch",
          "published_at": "2025-09-09T08:54:51Z"
        },
        {
          "tag": "v2.0.18",
          "kind": "patch",
          "published_at": "2025-09-09T08:48:57Z"
        },
        {
          "tag": "v2.0.17",
          "kind": "patch",
          "published_at": "2025-09-06T12:14:38Z"
        },
        {
          "tag": "v2.0.16",
          "kind": "patch",
          "published_at": "2025-09-04T10:42:42Z"
        },
        {
          "tag": "v2.0.15",
          "kind": "patch",
          "published_at": "2025-09-02T03:56:22Z"
        },
        {
          "tag": "v2.0.14",
          "kind": "patch",
          "published_at": "2025-09-02T03:47:15Z"
        },
        {
          "tag": "v2.0.13",
          "kind": "patch",
          "published_at": "2025-09-02T03:42:11Z"
        },
        {
          "tag": "v2.0.12",
          "kind": "patch",
          "published_at": "2025-09-02T03:09:25Z"
        },
        {
          "tag": "v2.0.11",
          "kind": "patch",
          "published_at": "2025-09-01T13:31:24Z"
        },
        {
          "tag": "v2.0.10",
          "kind": "patch",
          "published_at": "2025-09-01T13:23:09Z"
        },
        {
          "tag": "v2.0.8",
          "kind": "patch",
          "published_at": "2025-09-01T12:51:35Z"
        },
        {
          "tag": "v2.0.7",
          "kind": "patch",
          "published_at": "2025-09-01T12:51:35Z"
        },
        {
          "tag": "v2.0.6",
          "kind": "patch",
          "published_at": "2025-09-01T11:38:50Z"
        },
        {
          "tag": "v2.0.5",
          "kind": "patch",
          "published_at": "2025-08-30T08:31:52Z"
        },
        {
          "tag": "v2.0.4",
          "kind": "patch",
          "published_at": "2025-08-28T15:44:39Z"
        },
        {
          "tag": "v2.0.3",
          "kind": "patch",
          "published_at": "2025-08-26T11:57:10Z"
        },
        {
          "tag": "v2.0.2",
          "kind": "patch",
          "published_at": "2025-08-26T11:38:20Z"
        },
        {
          "tag": "v2.0.1",
          "kind": "patch",
          "published_at": "2025-08-26T11:31:51Z"
        },
        {
          "tag": "v2.0.0",
          "kind": "major",
          "published_at": "2025-08-26T11:31:51Z"
        },
        {
          "tag": "v1.0.19",
          "kind": "patch",
          "published_at": "2025-08-25T17:12:28Z"
        },
        {
          "tag": "v1.0.18",
          "kind": "patch",
          "published_at": "2025-08-25T16:44:20Z"
        },
        {
          "tag": "v1.0.17",
          "kind": "patch",
          "published_at": "2025-08-25T16:28:16Z"
        },
        {
          "tag": "v1.0.16",
          "kind": "patch",
          "published_at": "2025-08-25T15:55:11Z"
        },
        {
          "tag": "v1.0.15",
          "kind": "patch",
          "published_at": "2025-08-25T15:39:15Z"
        },
        {
          "tag": "v1.0.14",
          "kind": "patch",
          "published_at": "2025-08-25T15:01:27Z"
        },
        {
          "tag": "v1.0.13",
          "kind": "patch",
          "published_at": "2025-08-25T09:56:55Z"
        },
        {
          "tag": "v1.0.12",
          "kind": "patch",
          "published_at": "2025-08-24T05:01:46Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2025-12-29T14:56:31Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "0b1c0738376297b9bf6408c8a3713712c042fab7",
          "body": "tryAcquireLock/releaseLock/startRenewal 调用 redsync 的无 context 版本,\nStop 的 cancel+wg.Wait 无法中断正在阻塞的 redsync 调用,Stop 可能卡到 redsync\n内部重试超时为止。\n\n改用 LockContext/ExtendContext 传 dl.ctx,让 cancel 能中断;\nreleaseLock 改用独立带超时的 background ctx(Stop 流程里 dl.ctx 已 cancel,\n若用 dl.ctx 会让 Unlock 立即失败导致锁泄漏)。",
          "is_bot": false,
          "headline": "fix(P0-28): redsync 用无 ctx 的 Lock/Unlock/Extend 导致 Stop 可能阻塞",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-19T06:44:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f08f3e7b1b4105a6742b20fca1099a4988e4568b",
          "body": "future.do 用 sync.Once.Do,fn panic 时 Once 仍标记 done 并传播 panic,\nLoadOrStoreFunc 的 m.futures.Delete 清理不会执行,future 永久残留。\n后续同 key 调用拿到同 future,once 已 done 直接返回零值,调用方感知不到。\n\n在 do 内 recover panic 转 error,保证调用方能正常返回并清理 future。",
          "is_bot": false,
          "headline": "fix(P0-27): LoadOrStoreFunc 的 fn panic 导致 future 泄漏并返回零值",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:12:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25a3240c8c99dd01ae732b4639e55fc48ee7e5d2",
          "body": "server/client 拦截器用 kratos errors.FromError(err) 解析错误码,但纯 gRPC status\nerror 会被解析成 Code=0,导致 RPCGRPCStatusCodeKey 永远记 0,trace/metrics 的\ngrpc 状态码全部失真。\n\n改用 google.golang.org/grpc/status.FromError 解析 gRPC 错误码(成功时显式记 OK=0)。",
          "is_bot": false,
          "headline": "fix(P0-26): otleTraceX 用 kratos errors 解析 gRPC 错误导致 code 永远记 0",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:11:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d98c60518029335c002569032a898d50af27bb54",
          "body": "status.FromError(nil) 返回 (status{Code:OK}, true),st != nil 恒真,导致成功请求\n也走 b.l.Error 分支,所有正常 RPC 被记为错误日志,淹没监控报警。\nrecover 时收集的 stack 变量从未使用,panic 堆栈丢失。\n\n改为按 err != nil 判断错误(成功走 Info),并把 panic stack 记入日志字段。",
          "is_bot": false,
          "headline": "fix(P0-25): grpcLogX 成功请求被记为 ERROR 日志且 panic 堆栈丢失",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:10:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7f8a2a2149fb64cd14ce21ffb992a30d7c5e97f",
          "body": "NewTokenBucketLimiter 不校验入参:interval<=0 会让 time.NewTicker(0) 直接 panic;\ncapacity<=0 产生无缓冲 channel,令牌 goroutine 永远发不进,限流器完全拒绝。\n(对比同仓库 leakyBucket 有兜底,此处缺失。)\n\n加默认值兜底:interval<=0 取 100ms,capacity<=0 取 1。",
          "is_bot": false,
          "headline": "fix(P0-24): grpcx tokenBucket interval<=0 触发 time.NewTicker panic",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:10:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "61c362ca9a5abe9eafe608159e8c30b476875ed6",
          "body": "Handle 调用 ov.Fix 后忽略返回的 err 直接 return nil,消费者向 broker ACK,\n修复失败的不一致数据被永久丢失(消息已提交)。\n\n改为检查 Fix 错误并返回 error,让上游不 ACK 以便重试(至少一次语义)。",
          "is_bot": false,
          "headline": "fix(P0-23): myMovex consumer 修复失败仍 ACK 导致不一致数据丢失",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:09:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0bed6eaceaf021d85fce78f1f5a65dcc0fd1cad",
          "body": "incrFromBase 用 Offset(offset)+Where(utime>?), offset 每次++ 但 utime 窗口随新数据\n移动,offset 指向的逻辑行漂移,导致静默跳过/重复校验。改为去掉 offset,纯按 utime\n游标取第一条。\n\nvalidateTargetToBase 增量模式(sleepInterval>0)下 offset 永不重置,OFFSET(N) 随 N\n增长导致 MySQL 二次方性能;查询出错时 offset+=len(ts) 跳过该批记录。\n改为增量模式扫到末尾重置 offset=0 继续监控新数据;出错时不递增 offset(重试同批)。\n全量模式保持扫完即止。",
          "is_bot": false,
          "headline": "fix(P0-22): validator 增量校验 offset 累加导致二次方性能与跳过/重复",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:09:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4be3c7e1e86503b1f3beeb14c4ea04e372f18682",
          "body": "双写 Commit/ExecContext(含事务内)在 src-first/dst-first 模式下,先提交/写入的库\n成功、后写入的库失败时,非严格模式只记日志不返回 error,调用方完全感知不到双写\n不一致。\n\n改为无论严格与否都返回带 inconsistency risk 的 error,让调用方能感知并补偿\n(重试/对账)。覆盖 DoubleWritePool.ExecContext、DoubleWriteTx.Commit、\nDoubleWriteTx.ExecContext 共 6 个分支。",
          "is_bot": false,
          "headline": "fix(P0-21): myMovex 双写非原子在非严格模式下静默分歧",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:07:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecbb4d073ea2b352d518d4fbba850be8eafa513c",
          "body": "旧 Close 先 kp.cancel() 再 flushLocked(),而 flushLocked 用 select 监听 ctx.Done,\ncancel 后 flush 立即走 done 分支返回 'producer closed during flush',\n剩余缓冲消息被丢弃。\n\n改为 Close 先 flush 剩余消息再 cancel;flushLocked 不再响应 ctx(Close 时\n必须把剩余消息发完),后台 batchTimeoutLoop 仍由 ctx.Done 正常退出。",
          "is_bot": false,
          "headline": "fix(P0-19): mqX 生产者 Close 先 cancel 再 flush 导致剩余消息丢弃",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:06:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c03adcedba4ad385a2d76d10f05a0e09908a8b8",
          "body": "异步批量模式用非阻塞 select 顺带检查 timer,只在 SendBatch 调用时才检查。\n调用方停止发送后,buffer 里的消息永远不会被 flush,直到 Close。\n\n新增后台 batchTimeoutLoop goroutine 监听 timerC 到点自动 flush,\nSendBatch 去掉非阻塞超时检查(仅保留达批立即 flush)。",
          "is_bot": false,
          "headline": "fix(P0-20): mqX 生产者批量超时不触发",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:05:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f9ea0d1d70e0e80156220d55921c4d48d7f19912",
          "body": "批量消费用 'for msg := range claim.Messages()' 配非阻塞 select 检查 timer,\n只有'恰好又收到一条消息'时才顺带检查超时。消息流变慢、长时间无新消息时,\ntimer 到期也不会被检查,这批消息一直停留 buffer 直到下次有消息或 claim 关闭,\n与'超时自动 flush'的设计意图相反。\n\n改为三路阻塞 select(msg / timerC),超时到期能立即 flush,\n与同仓库 OffsetConsumer 的正确实现保持一致。",
          "is_bot": false,
          "headline": "fix(P0-18): mqX 消费者批量超时不触发",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:03:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "789d499946c16d83e5786481eedbaab5cbbfd6e7",
          "body": "server(tracer) 调用 server.Run(\":8082\") 会阻塞监听,go test 跑到此 case 必须手动 kill。\n且测试硬依赖外部 collector(localhost:4317),无 mock 无 short 模式。\n\n重写为:集成测试默认跳过(testing.Short 或 OTEL_INTEGRATION=1 启用),\nserver 改用 httptest 启动后请求一次即关闭,不再阻塞;新增不依赖外部的\nTestNewOtelTracerStr(noop tracer provider)。",
          "is_bot": false,
          "headline": "fix(P0-17): otel_test 调用 gin server.Run 阻塞导致测试永不结束",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:03:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "337ea1ea5b137162f25ab925766c5fde272117f7",
          "body": "newTraceProvider 永远返回 nil error,旧实现用它的返回值覆盖了 newResource 的错误,\n导致 NewOtelStr 即使 resource 创建失败也返回 nil error;且失败后仍继续用 nil resource\n初始化 trace provider。\n\n改为 newResource 失败立即返回 error 中止初始化;initOtel 增加 ForceFlush。",
          "is_bot": false,
          "headline": "fix(P0-16): NewOtelStr 返回的 error 永远为 nil,掩盖 resource 初始化失败",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:03:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "343d52ab34ff377c94bc43635e29c38eea7018a5",
          "body": "旧 Register 遇到 AlreadyRegisteredError 时丢弃 ExistingCollector,工厂方法\n(NewCounter 等) 返回的是未注册的新实例,调用方 Inc 等操作不会出现在 /metrics。\n\n新增 registerOrGet 返回已注册的 collector,工厂方法改用 registerOrReuse\n(重复注册视为正常返回 existing,其它错误才 panic) 并做类型断言还原具体类型。\n补充回归测试 TestNewCounter_DuplicateReturnsRegisteredCollector。",
          "is_bot": false,
          "headline": "fix(P0-15): prometheusX 重复注册返回未生效 collector 导致指标静默丢失",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T15:01:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "383d1d00fdc1abd8354c437256c36d39cb01ed16",
          "body": "旧 RefreshToken 用'当前请求' deviceID 删 deviceKey,但旧会话可能来自别的设备,\n删除无意义,A/B 旧设备 deviceKey→ssid 映射永久残留;并发 refresh 是 TOCTOU\n(无原子保护),redis 状态不可预测。devicesSetKey TTL 硬编码 30 天与 deviceKey\n的 LongDurationExpiresIn(默认 7 天)不一致,残留最长 29 天的幽灵设备。\n\n修复:\n- UserClaims 增加 DeviceID 字段,SetToken 写入会话绑定的真实设备\n- devicesSetKey TTL 改用\n[…]\neviceKey 一致\n- RefreshToken 用 Lua CAS(Compare-And-Delete 旧 refresh session 值)保证原子性,\n  并发 refresh 时第二个请求发现 session 已被替换会中止,避免重复签发\n- RefreshToken/DeleteToken 用 claims.DeviceID 精确清理 deviceKey 与 devicesSet",
          "is_bot": false,
          "headline": "fix(P0-14): jwtX2 RefreshToken 多设备竞态与幽灵 deviceKey 映射",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:56:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4e1dfb5d77059697077aad2c8d08eb2ec48e7092",
          "body": "旧实现从 JSON body 读 user_id,路由仅挂在需登录的 userGroup 上,任何已登录用户\n都能传任意 user_id 修改任意账户的密码(严重越权)。\n\n移除请求体的 user_id 字段,统一从 JWT 中间件注入的 ctx.Get(\"user_id\") 取当前\n登录用户 ID(与 GetProfile 一致),只能改自己的密码。",
          "is_bot": false,
          "headline": "fix(P0-13): ChangePassword 从请求体读 user_id 导致任意用户越权改密",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:55:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be95449801b2c0dfb756bcdb1dcb82d8669f6b6f",
          "body": "旧实现把 map[string]interface{} 作为 conn.Invoke 的请求传入,但 Invoke 要求\nproto.Message,map 在 gRPC 序列化阶段必然失败(且 P0-12 修复前失败还会被吞掉)。\n\n基于已通过反射拿到的 FileDescriptorProto 正确构造动态消息:\n- protodesc.NewFiles 把 FileDescriptorProto 注册为 protoreflect 描述符\n- 按 methodDesc.InputType/OutputType 全限定名定位 message descriptor\n- dynamicpb.NewMessage 创建请求/响应实例\n- protojson.Unmarshal 把 RequestData(JSON) 填充进请求消息\n- protojson.Marshal 把响应消息序列化回 JSON\n\nInvoke 现在收到的是合法 proto.Message,可正确完成动态 gRPC 调用。",
          "is_bot": false,
          "headline": "fix(P0-11): grpc executor 用 map 调 conn.Invoke 必然序列化失败",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:54:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8bcfaf0a7fc40537826371a1fa136801be2ffb7",
          "body": "旧实现 AddCronJob/AddCronJobs 只写库不调 scheduler.AddJob,新增的 active 任务\n要重启进程才生效;DelCronJob/DelCronJobs 只删数据库记录不调 scheduler.RemoveJob,\n删除后内存里的 cron Entry 仍存在并被周期触发。\n\n修复:\n- Scheduler 接口增加 AddJob/RemoveJob 方法(CronScheduler 已实现)\n- AddCronJob(s) 写库后对 active 任务调用 scheduler.AddJob\n- DelCronJob(s) 删库后调用 scheduler.RemoveJob(任务不在调度器时忽略错误)",
          "is_bot": false,
          "headline": "fix(P0-10): cron 新增/删除任务不通知调度器导致不生效",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:53:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "547a9f1ead655cb1b30ca609c220b371aa8e8c78",
          "body": "旧实现在执行结果 Success=false 时只 Warn + 告警,最后 return nil,导致上层\ncreateJobFunc 的'执行失败'分支永远进不去,MaxRetry/失败计数等对外可见的失败\n语义全部失效(执行器内部重试对外不可见)。改为返回 error,让上层正确感知。",
          "is_bot": false,
          "headline": "fix(P0-12): executeJob 在 result.Success==false 时吞错返回 nil",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:52:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c1a0ded14a9c38d7bcfb34a4c2802942e5a3295",
          "body": "旧实现拿到锁后整个执行期不再续约,而锁默认 TTL 仅 30s。任何执行超过 30s 的\n任务,锁会被 Redis 自动释放,另一节点即可抢到锁,造成同一任务被两节点同时执行。\n\n新增续约 goroutine:续约间隔取锁有效期的 1/3(最低 1s),定期 mutex.Extend;\ndefer 时先 cancel 续约 ctx 并 Wait goroutine 退出,再 Unlock,避免释放后续约\n又把锁加回去。续约失败(锁已被释放/Redis 故障)记录错误并停止续约。",
          "is_bot": false,
          "headline": "fix(P0-8): cron 任务执行期锁无续约导致长任务双机并发",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:51:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "391b31f458e4c5d8c3b3646a8fe37464d88c03cf",
          "body": "调度器用 cron.WithSeconds() 创建(6 字段),却用 cron.ParseStandard(5 字段)\n解析表达式,导致任何 cron 表达式都无法正确工作:6 字段被拒绝、5 字段在 6 字段\n调度器里行为错乱。改用与 WithSeconds 配套的 6 字段 parser(含 Descriptor)。",
          "is_bot": false,
          "headline": "fix(P0-9): cron WithSeconds() 调度器配 ParseStandard 格式不兼容",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:51:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e970c42d76e4a5e45f842cd9650659bfe1f86acb",
          "body": "gin 的 ctx.Bind 即 MustBindWith,校验失败时自动 AbortWithError 并写入 400\n响应,wrapper 紧接着又 ctx.JSON 会产生 superfluous response.WriteHeader 警告,\n响应体可能损坏。改用 ShouldBind(失败只返回 error 不写响应),由 wrapper 统一\n返回错误响应。",
          "is_bot": false,
          "headline": "fix(P0-7): WrapBody/WrapBodyAndClaims 用 Bind 导致校验失败时双重响应",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:48:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a0ec73ae08c85f314345fbec653fccadb0e250d4",
          "body": "请求阶段(c.Next 之前)响应尚未产生,al.Status 必为 0。旧实现按 Status\n分级的 Warn/Error 分支永远不会进入,所有请求日志都走 Info,分级逻辑形同虚设。\n\n请求日志的职责是记录'请求到达',本就不应依赖响应状态。改为统一 Info 级别,\n状态码分级由 RespLogPrint 在拿到真实响应状态后完成。",
          "is_bot": false,
          "headline": "fix(P0-6): ReqLogPrint 在 c.Next 前调用导致 Status 永远为 0、日志分级失效",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:48:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3e7707ea2ea59dfe59546f5e30a4ccf8bb4d93e",
          "body": "旧实现达到 1MB 阈值时直接把 c.Request.Body 置为空 reader,业务 handler\n读到 EOF,大文件上传/大 JSON 接口全部被破坏;且硬编码 1MB 未使用\nSetMaxBodySize 配置项,io.ReadAll 的错误也被丢弃。\n\n修复:\n- 用 io.MultiReader 把已读部分与剩余 Body 拼接回去,保证下游能读完整请求体\n- 用 g.maxBodySize 取代硬编码 1MB,配置项真正生效\n- io.ReadAll 错误以 Warn 记录而非静默丢弃",
          "is_bot": false,
          "headline": "fix(P0-5): logx 中间件请求体超过 1MB 被丢弃导致业务 handler 拿到空 body",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:34:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26ae0b7b6152e9944215c7d9ca026e36036d6706",
          "body": "旧实现 T(v) 直接截断,ToAny[int8](int(200)) 返回 -56 且 ok=true。\n增加目标类型边界检查(int64Range 用 math.Min/MaxIntN 常量分发),\n所有源类型(含窄类型如 uint8/int16 跨窄目标)都做范围校验。\nfloat 仍保留截断语义但加边界检查。\n\n新增测试覆盖:int/int64/uint8/int16/string 各源到 int8 的边界场景。",
          "is_bot": false,
          "headline": "fix(P0-4): convertInt 无边界检查导致静默截断/溢出",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:26:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04f8fe442aa5d82f7fe0300af2950cc835487a4a",
          "body": "原测试输入 map[string]string 却用 ToAny[[]map[string]any] 期望成功,\n且 assert.Equal 比较的 wanRes(map[string]string) 与 s([]map[string]any)\n类型不同,运行必 FAIL。\n\n重写为覆盖各类转换路径的有效测试:int<->string、string->int、\nfloat->int、int64/json.Number->uint64(P0-2 回归)、\n[]map[string]string->[]map[string]any、JSON string->map、\nint64->time.Duration、nil 失败等。",
          "is_bot": false,
          "headline": "fix(P0-3): 修复 toanyx 测试用例(原用例类型不匹配必 FAIL)",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:22:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6a39d60eac104cabeef24d330aae544dfe9c0b3",
          "body": "当 T=uint64 时 ^T(0)=MaxUint64,强转 int64 溢出为 -1,导致\n'v <= int64(^T(0))' 恒为 false,所有 int64/json.Number → uint64\n的转换永远返回失败。\n\n统一用 uint64 作为比较基准 maxT = uint64(^T(0)),\n并在 int64/float32/float64/json.Number 各分支改用 uint64 比较。",
          "is_bot": false,
          "headline": "fix(P0-2): convertUint 的 int64(^T(0)) 溢出导致 int64→uint64 永远失败",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:20:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd5df59ea3369c9794e4b901772916beffeef820",
          "body": "Get 用 GetTTL 的返回值 <= 0 判定未命中,但 ristretto 对无 TTL 的永久\n条目返回 (0, true),导致所有用 Set 设置的永久缓存被误判为查询失败。\n改用 Get 判定 key 是否存在。",
          "is_bot": false,
          "headline": "fix(P0-1): ristretto 永久缓存失效",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-07-18T14:17:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b20fdf959ca6382c2c9cf99de3597cf469434edc",
          "body": "- convertToType 拆分 int/int64 合并 case 分支,修复类型断言 panic\n- initLuaGetRankScripts 删除错误的 LuaCnt 脚本加载逻辑\n- AsyncProducer.Close() 增加 sync.Once 防止重复关闭 channel panic\n- RWMutexMap.CapMax() 添加读锁保护,修复数据竞争\n- slideWindow 移除包级 context.Background(),改为参数传入\n- RedisSlideWindowKLimiter/ViperConfigStr setter 方法添加互斥锁保护\n- netX 类型断言改为安全断言,失败返回 error 而非 panic\n- convertx.Deref 零值返回改为惯用的 var zero T\n- 删除 sliceX/queueX 未使用的 maxx 函数",
          "is_bot": false,
          "headline": "fix: 修复多个并发安全和类型断言问题",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-05-23T11:34:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38bbbc2c3951d800d3aff1180b0ec75ccaba72aa",
          "body": null,
          "is_bot": false,
          "headline": "feat: prometheusX 统一封装 Prometheus 指标,支持 Option 配置和 DI 注入",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-04-30T19:17:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b3546e50ee6a1fd683ec53f2f9d7624dea83675",
          "body": null,
          "is_bot": false,
          "headline": "chore: 更新 .gitignore 忽略规则",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-04-10T09:26:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0428c0b7c53725e6e14491b71e3a1ebdd3119156",
          "body": null,
          "is_bot": false,
          "headline": "migrate: module path from gitee to github (github.com/hgg-6/pkgTool/v2)",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-04-06T04:03:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d9ece903cd13524bed044a0977e859ee5898347",
          "body": null,
          "is_bot": false,
          "headline": "fix:文档补充",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-04-05T10:34:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f97d590cef782260b426aa020c06cabf05620b91",
          "body": null,
          "is_bot": false,
          "headline": "feat: sliceX 新增排序工具函数 ReverseSlice/SortAsc/SortDesc",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-04-02T09:10:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dbed6107a4d4a9563ed1265209338647d30e5e48",
          "body": "- Executor接口新增Validate方法,三种执行器分别实现校验逻辑\n  function: 检查function_name是否已注册\n  http: 校验URL格式并HEAD探测连通性\n  grpc: 校验必填字段并探测服务连通性\n- CronMysql暴露RegisterFunction方法,支持外部注册业务函数\n- Service层AddCronJob/AddCronJobs创建前自动校验,拒绝僵尸任务\n- Web层新增ErrTaskValidateFailed错误处理,返回400+具体原因\n- 更新帮助文档:三种任务类型用法、校验机制、完整操作流程",
          "is_bot": false,
          "headline": "feat: lock_cron_mysql 任务创建校验 + 外部函数注册 + 帮助文档完善",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-03-30T18:17:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ef82f07bab765bf1faeba1372b2e5db55cf67fc",
          "body": null,
          "is_bot": false,
          "headline": "fix:配置修改",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-03-30T09:54:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d771322d75fd8193e8849773666b758796abaa32",
          "body": "- 引入完整RBAC权限体系(UserRole/RolePermission/CronPermission)\n- 集成JWT认证中间件,支持Access/Refresh双Token\n- 修复测试文件空Config导致JWT初始化panic的问题\n- 补充调用方式示例文档(LoadConfig/手动构造/热更新/动态管理)\n- 完善executor工厂注册(Function/HTTP/GRPC执行器)\n- 调度器支持任务启动/暂停/恢复及分布式锁续期",
          "is_bot": false,
          "headline": "fix: lock_cron_mysql集成层完善 - RBAC权限体系、JWT认证、测试配置修复",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-03-30T09:31:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59e5d1bde21a1fb59e2739484ae154d80d5cba82",
          "body": null,
          "is_bot": false,
          "headline": "update-1.26大版本新版部分特性添加,例如new语法糖等。",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-03-24T04:05:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "01788662dee5dd5593375c3b437bdfddad090ff8",
          "body": null,
          "is_bot": false,
          "headline": "create-完善贡献",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-03-24T03:49:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b2cece7d7c806d3114d99d786095b5824f20c47",
          "body": null,
          "is_bot": false,
          "headline": "移除意外文件",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-02-02T17:33:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e60e7fadc546a6e8a1bb97a8fcd3611e5b2d15eb",
          "body": "…修复 - JWT/Prometheus改为error返回 - LimitPool计数防御 - HMSet改用HSet - go.mod移除v1依赖 - failover.go重命名为测试文件",
          "is_bot": false,
          "headline": "fix: 代码审查问题修复 - Kafka生产者重复发送/错误忽略修复 - 排行榜ctx初始化/刷新冗余控制 - fixer.go资源泄露…",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-02-02T11:02:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e504e315cc92843db201c6065cbb0f1cdb59f42",
          "body": "高优先级修复:\n- cronX: 修复addTask死锁和系统负载监控goroutine泄漏\n- counterLimiter: 修复TOCTOU竞态条件,使用shouldDecrement标志\n- syncX.Map: 修复LoadOrStoreFunc竞态条件,使用future机制\n- limitPool: 修复used计数可能为负的问题,使用CAS循环\n- redsync: 修复goroutine泄漏和通道关闭时序问题\n\n中优先级修复:\n- wrapper_func: 使用sync.Once保护全局变量初始化\n- sliceX/map: 优化deduplicateFunc算法从O(n²)\n[…]\nutboundIPWithError函数\n- sliceX/slicex: 新增MaxSafe/MinSafe函数处理空切片\n- viperX: 修复配置互相覆盖问题\n\n低优先级修复:\n- slidingWindow: 使用Size()替代Len()确保线程安全\n- atomicx: 新增LoadSafe/SwapSafe方法避免panic\n- queueX: 无界队列默认初始容量16减少重新分配",
          "is_bot": false,
          "headline": "fix: 修复并发安全、资源泄漏和性能问题",
          "author_name": "hu",
          "author_login": "hgg-6",
          "committed_at": "2026-01-30T07:39:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a2a53ff9451aeb560870ef642a4804cb65bc7529",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修复多个并发安全和类型安全问题",
          "author_name": "hu",
          "author_login": "hgg-6",
          "committed_at": "2026-01-26T08:57:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cbf333dda4de2a5358c715d744884e19a0e67b0b",
          "body": "🔴 高优先级:\n- convertx/toanyx: 修复浮点数时间戳转换Bug\n- syncX/rwMutexMap: 修复Range方法竞态条件\n- jwtX2: 使用Pipeline保证Redis操作原子性\n\n🟡 中优先级:\n- configx/viperX: 移除冗余锁\n- sliceX: 统一定义EqualFunc类型\n- etcd_test: 修复goroutine资源泄露\n- syncX/atomicx: 添加类型断言安全保护",
          "is_bot": false,
          "headline": "fix: 修复多个并发安全和类型安全问题",
          "author_name": "hu",
          "author_login": "hgg-6",
          "committed_at": "2026-01-25T14:02:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64d92efbbbba457a94839b946b595efc4ead10d8",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修复P0/P1优先级问题:syncX.Map nil值处理、浮点转换精度丢失、cron状态管理、jwtx错误处理遗漏、rpc熔断器逻辑",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-01-25T09:30:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2fcb931914b2fe10c4d0253b39b749afe01c9a4c",
          "body": "- convertx: 修复float类型转换为时间戳的错误\n- configx: 修复配置文件路径被忽略的问题\n- serviceLogicX: 修复变量作用域错误\n- systemLoad: 修复系统负载评估逻辑\n- webx: 优化Redis错误处理\n- rpc: 修复熔断器逻辑错误",
          "is_bot": false,
          "headline": "fix: 修复6个严重bug",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2026-01-25T08:32:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ed8404dbb112ddd5dfd25609c429ead56f0414a",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of gitee.com:hgg_test/pkg_tool",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-31T16:34:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc8414f184d4b56aff0923c616bdf883ba1e75c0",
          "body": null,
          "is_bot": false,
          "headline": "分布式锁调整",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-31T16:33:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb503d0553a0505d02f7f5fdaab59279d4732a35",
          "body": null,
          "is_bot": false,
          "headline": "t",
          "author_name": "JustHu",
          "author_login": "hgg-6",
          "committed_at": "2025-12-31T08:14:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3310cd2422600c320245a3ae8fefba96fdf7c1ab",
          "body": "# Conflicts:\n#\tDBx/mysqlX/gormx/dbMovex/myMovex/scheduler/scheduler_test.go",
          "is_bot": false,
          "headline": "Merge branch 'master' of gitee.com:hgg_test/pkg_tool",
          "author_name": "JustHu",
          "author_login": "hgg-6",
          "committed_at": "2025-12-31T08:07:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e056e8d53dd6649ba5f57862bb3b7b77170d39a",
          "body": null,
          "is_bot": false,
          "headline": "t",
          "author_name": "JustHu",
          "author_login": "hgg-6",
          "committed_at": "2025-12-31T08:06:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4753abccddb204ba29d635e5b13c16fb989a388b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of gitee.com:hgg_test/pkg_tool",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-30T10:00:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ca68791a03ab59ec0297318503fdf93f56a6e48",
          "body": null,
          "is_bot": false,
          "headline": "test",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-30T09:55:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "496e4e08b8a4a2aec429cca2feb970225c1a6a58",
          "body": null,
          "is_bot": false,
          "headline": "feat: 完善配置模块,支持自动发现和变更监听",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-30T09:46:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5e2c30ddf4f2f4ab09dd9742d31b9b4f411f0198",
          "body": null,
          "is_bot": false,
          "headline": "feat: 完善配置模块,支持自动发现和变更监听",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-29T14:56:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f3b92b74b40ee438ee2b8b6c0dec830c7790c61e",
          "body": null,
          "is_bot": false,
          "headline": "移除.idea/.gitignore文件的git跟踪",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-29T11:52:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7899ca4c85850279c8e2b35db27c14391e7e5fee",
          "body": null,
          "is_bot": false,
          "headline": "从git跟踪中移除所有以.开头的文件(.gitignore除外)",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-29T11:49:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "755f97d1e019b9daf2d48359106d5533cdd3fc79",
          "body": null,
          "is_bot": false,
          "headline": "更新.gitignore文件,忽略所有以.开头的文件",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-29T11:47:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd1c516883cc2873c4835c7f734ef6ae03da6471",
          "body": null,
          "is_bot": false,
          "headline": "修复文件名中的中文括号,解决go mod下载问题",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-28T04:26:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b234b20962abb4644e200550376737d5aba7349",
          "body": null,
          "is_bot": false,
          "headline": "完善分布式任务调度平台实现,修复已知bug",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-28T04:10:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cdb1b46db87da3fc4f70b01b66540862a144ffd",
          "body": "- 修复令牌桶限流器(Gin/gRPC)每次调用Build时重复启动goroutine导致泄漏\n- 修复双写池指标收集可能重复启动的问题\n- 优化测试代码错误处理,将panic改为log.Fatal/t.Fatal",
          "is_bot": false,
          "headline": "fix: 修复多个关键bug - 令牌桶限流器goroutine泄漏、双写池重复启动、测试代码panic使用",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-18T14:26:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "becfa7cf9cd95954c5434bda28d671e3d05c35c9",
          "body": "- 修复 rpc/grpcx/limiter/tokenBucket/tokenBocket.go ticker未停止导致的资源泄漏\n- 添加 defer ticker.Stop() 确保资源正确释放",
          "is_bot": false,
          "headline": "fix: 修复grpc tokenBucket限流器ticker资源泄漏",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-17T04:43:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eef2bcbddc7cc63b76337e3d472413cd25895356",
          "body": "- 修复 rankingServiceRdbZset.go 递归调用导致的无限循环和goroutine泄漏\n- 修复 tokenBocket.go ticker未停止导致的资源泄漏\n- 修复 prometheusGinBuild.go 重复注册导致panic的问题,改用优雅降级",
          "is_bot": false,
          "headline": "fix: 修复关键bug - 递归调用无限循环、ticker资源泄漏、Prometheus重复注册",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-16T14:42:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c238a41785081d9f9101cb1165eb62c013e6bcb0",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修复producer_test.go使用已废弃API和未使用的log导入问题",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-15T14:39:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d8343570b6b012214580d2518872bf21a128516",
          "body": null,
          "is_bot": false,
          "headline": "fix: 修复多个bug - JsonColumn JSON序列化、scheduler接口类型不匹配、消费者/生产者空指针问题",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-12T12:02:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e23087bbb21f460cb3cefda30962d670d94d306a",
          "body": "1. 修复syncX/LimitPool中的竞态条件\n2. 修复configx/viperX中GetUnmarshalKey的错误处理\n3. 修复limiter/Lua脚本返回值类型错误\n4. 修复systemLoad中的逻辑错误\n5. 修复webx包中的多个bug:\n   - JWT格式化错误\n   - Wrapper函数错误处理问题\n   - JWT资源泄漏问题\n   - 日志中间件内存消耗问题\n   - 限流中间件日志记录问题",
          "is_bot": false,
          "headline": "fix: 修复多个包中的bug",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-12-12T11:10:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eba984a8ae3d52c6aab6948a81f97953fb441098",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.17 包名调整",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-11-29T18:11:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4a23ab27bc6b8f05ef5b1a9f0f911cbc59a09df",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.17 包名调整",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-11-23T10:31:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "041cb73fe641d70e3072cdc9bb643d43e936613b",
          "body": null,
          "is_bot": false,
          "headline": "~",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-11-15T06:03:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "013cdabfb2006b785e34838b8b72eb6b7072820d",
          "body": null,
          "is_bot": false,
          "headline": "cfg修复",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-11-09T15:20:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d8f462aa0d16fe804d842d26bb4b64b2eb95bce",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.15 调整web中间件限流算法",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-11-02T09:56:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74d92933a3f11177b79d734c6ca832042108cd3a",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.14 修复已知bug",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-30T08:53:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27f89d104a6f62a6628c8feb9fed1a75fe4f104c",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.13 消息队列mq顶级接口封装,实现sarama接口",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-28T17:01:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2ecf69ba7ef7ceb4845e5db01e87710c27d2736",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.12 修复jwtx2多端登录问题",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-27T14:07:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "57fa1e7343f0649af70f46e58507844df89759a7",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.10 jwt2版本支持、sql支持NULL的泛型JSON列包装器",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-27T13:25:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cc1f4bf5977b1f2868324755986a63afcdabdb8",
          "body": null,
          "is_bot": false,
          "headline": "合并",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-25T17:52:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec76251de6fc2db0f4e352fb573f668b39bad92d",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.10 修复本地缓存封装set时异常,实现榜单服务计算,支持数据库/缓存一些榜单方案",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-25T17:42:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ebb5464464ddc8cad085200902cff59f701f677",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.9",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-25T08:24:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fad676ab3841968608f8a15c11cf6b82805739f4",
          "body": null,
          "is_bot": false,
          "headline": "补充单元测试",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-23T14:34:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7be922675238538dfe011c18e443c906ee3bebb5",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.7 补充单元测试",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-23T11:30:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "494c97debd5b8d55bd5c659ca6e026521fedc0cb",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of gitee.com:hgg_test/pkg_tool",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-22T10:10:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1c64ee41677cee51b8cb5a69b9041a4420e8ece1",
          "body": null,
          "is_bot": false,
          "headline": "合并冲突",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-22T10:04:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de04ec466c5a1cb84386904fa2cec285ff735a93",
          "body": "Signed-off-by: hgg <hgg1122567@163.com>",
          "is_bot": false,
          "headline": "update README.md.",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-22T10:00:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "22bd8c5600f65155ee22ac76f589fd3fcaa04666",
          "body": "Signed-off-by: hgg <hgg1122567@163.com>",
          "is_bot": false,
          "headline": "update README.md.",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-22T09:58:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39d750a8b8deb76fbe185cb7c0002445c38617a0",
          "body": "Signed-off-by: hgg <hgg1122567@163.com>",
          "is_bot": false,
          "headline": "update README.md.",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-22T09:56:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "19276aaae3cc57f88d28cd3142f10469083cd998",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.6 sync.map泛型封装",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-20T14:03:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44e1a8734f1ca2508536f9001f392fd7cc4e9993",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.5 新增sync泛型封装、system信息获取",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-20T10:18:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13b314baa5f4441c90ae33f24c423ec4ec1a9dcd",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.4 新增rpc可观测性相关",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-15T10:39:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb91d28318f76b51afb0e140a81ad3d24cd76275",
          "body": null,
          "is_bot": false,
          "headline": "更新rpc限流算法,新增令牌桶、漏桶算法实现",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-15T09:06:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79649bba810344a425b414fcbb52e96c66d69cf0",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.3 新增rpc滑动窗口限流、queue优先级队列封装并发安全",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-15T08:39:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db61542809c8aa3c0284160bdfc1d9e9a75cfc36",
          "body": null,
          "is_bot": false,
          "headline": "解决合并冲突",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-14T10:27:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2387a1491ce249416b76fb425fc418c7fbc4d5b",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'master' of gitee.com:hgg_test/pkg_tool",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-14T10:24:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "39cdf3a74d3eeaa53925a0e50675623bb0b62ac6",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.2 一些rpc的负载均衡算法",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-14T10:20:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "018f00f9831c42ae989d9309fc6eb593c5937723",
          "body": "Signed-off-by: hgg <hgg1122567@163.com>",
          "is_bot": false,
          "headline": "add LICENSE.",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-13T14:51:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "23e12e170b924767a57b8b1874ff2ef1b045ed81",
          "body": "Merge pull request !3 from gitee-agent/N/A",
          "is_bot": false,
          "headline": "!3 Update README.md",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-13T14:43:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37bc29dba4aae9dcf0b9e09667f5daf411474901",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "gitee-bot",
          "author_login": null,
          "committed_at": "2025-10-13T14:42:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcdb2bf6ddd8876a023a7a9fcc95f38b2b2fc776",
          "body": "Signed-off-by: hgg <hgg1122567@163.com>",
          "is_bot": false,
          "headline": "update README.md.",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-13T09:10:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78ec244d01da4cfe21ae44d1c1e9fcf99d453fed",
          "body": "Merge pull request !2 from gitee-agent/N/A",
          "is_bot": false,
          "headline": "!2 Add README.md",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-13T09:08:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f175a32ed1f0b6d4e1c4cba7afa7e9afd8e49d24",
          "body": null,
          "is_bot": false,
          "headline": "Add README.md",
          "author_name": "gitee-bot",
          "author_login": null,
          "committed_at": "2025-10-13T09:06:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "deeb5ce01f0e4428f2f380f777ba7a58d16f6ebb",
          "body": null,
          "is_bot": false,
          "headline": "v2.1.1 新增基于gorm数据迁移方案",
          "author_name": "hgg",
          "author_login": "hgg-6",
          "committed_at": "2025-10-13T08:58:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 160,
      "latest_release_at": "2026-07-19T06:44:37Z",
      "latest_release_tag": "v2.2.4",
      "releases_from_tags": true,
      "days_since_last_push": 8,
      "active_weeks_last_year": 28,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 13
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/hgg-6/pkgTool/v2",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/hgg-6/pkgTool/v2",
          "is_deprecated": false,
          "latest_version": "v2.2.4",
          "repository_url": "https://github.com/hgg-6/pkgTool",
          "versions_count": 91,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T06:44:37Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 9,
      "stars": 42,
      "watchers": 8,
      "fork_history": {
        "days": [
          {
            "date": "2025-10-17",
            "count": 1
          },
          {
            "date": "2025-10-18",
            "count": 2
          },
          {
            "date": "2025-10-19",
            "count": 1
          },
          {
            "date": "2025-10-20",
            "count": 1
          },
          {
            "date": "2025-10-21",
            "count": 3
          },
          {
            "date": "2025-10-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 9,
        "total_forks": 9
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 25414,
      "source_files_sampled": 215,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/IBM/sarama",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.46.1"
        },
        {
          "name": "github.com/dgraph-io/ristretto/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.3.0"
        },
        {
          "name": "github.com/fsnotify/fsnotify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.8.0"
        },
        {
          "name": "github.com/gin-contrib/sessions",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.4"
        },
        {
          "name": "github.com/gin-gonic/gin",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.0"
        },
        {
          "name": "github.com/go-kratos/aegis",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.0"
        },
        {
          "name": "github.com/go-kratos/kratos/contrib/registry/etcd/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.0.0-20250912104010-25b6c0fb9f38"
        },
        {
          "name": "github.com/go-kratos/kratos/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.9.1"
        },
        {
          "name": "github.com/go-redsync/redsync/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.13.0"
        },
        {
          "name": "github.com/go-sql-driver/mysql",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.0"
        },
        {
          "name": "github.com/golang-jwt/jwt/v5",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.3.0"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/redis/go-redis/v9",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v9.14.0"
        },
        {
          "name": "github.com/robfig/cron/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "github.com/rs/zerolog",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.34.0"
        },
        {
          "name": "github.com/shirou/gopsutil/v4",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v4.25.8"
        },
        {
          "name": "github.com/spf13/viper",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.20.1"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/zeromicro/go-zero",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.9.2"
        },
        {
          "name": "go.etcd.io/etcd/client/v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.6.5"
        },
        {
          "name": "go.opentelemetry.io/otel",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.38.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.24.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.38.0"
        },
        {
          "name": "go.opentelemetry.io/otel/trace",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.38.0"
        },
        {
          "name": "go.uber.org/mock",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.0"
        },
        {
          "name": "go.uber.org/zap",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.27.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.42.0"
        },
        {
          "name": "golang.org/x/sync",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.17.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.71.1"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.36.10"
        },
        {
          "name": "gopkg.in/natefinch/lumberjack.v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.2.1"
        },
        {
          "name": "gorm.io/driver/mysql",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "gorm.io/gorm",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.30.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "hgg-6",
          "commits": 162,
          "avatar_url": "https://avatars.githubusercontent.com/u/213376465?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "42 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "0b1c0738376297b9bf6408c8a3713712c042fab7",
        "ran_at": "2026-07-28T04:02:39Z",
        "aggregate_score": 2.6,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/hgg-6/pkgTool",
    "host": "github.com",
    "name": "pkgTool",
    "owner": "hgg-6"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 46,
      "inputs": {
        "security": 26,
        "vitality": 81,
        "community": 53,
        "governance": 28,
        "engineering": 38
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 81,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 160,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 28
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "28/52 weeks with commits",
                "points": 19.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 28
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "160 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 160
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 100,
              "latest_release_tag": "v2.2.4",
              "releases_from_tags": true,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 13
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~13 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "moderate",
        "name": "Community & Adoption",
        "value": 53,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "forks": 9,
              "stars": 42,
              "watchers": 8,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "42 stars",
                "points": 26.2,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 42
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "9 forks",
                "points": 7.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "8 watchers",
                "points": 4.7,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 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": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "critical",
        "name": "Sustainability & Governance",
        "value": 28,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "critical",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 18,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "hgg-6",
              "public_repos": 1,
              "account_age_days": 428
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of hgg-6",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "hgg-6"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "1 public repos, account ~1 yr old",
                "points": 4.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 1
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 1
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/hgg-6/pkgTool/v2"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "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 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "91 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 91
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "at_risk",
        "name": "Engineering Quality",
        "value": 38,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 26,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 26,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.6
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "42 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 56,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "critical",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 26,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.49,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "49 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 26.1,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 49,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 62,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "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": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 25414,
              "source_files_sampled": 215,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/215 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 215,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T04:02:43.091645Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hgg-6/pkgTool.svg",
  "full_name": "hgg-6/pkgTool",
  "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.