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

dimframework / dim

Framework Go sederhana untuk RESTful API

GoMIT★ 0 estrellas⑂ 0 forksdesde ene 2026Ver en GitHub ↗

dimframework/dim tiene un índice de salud de 58 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (78/100) y la más baja, Community & Adoption (33/100). Se actualizó por última vez hace 8 días. Una sola persona concentra la mayor parte del trabajo reciente.

58
global / 100
Moderado

Índice de salud del software

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

58
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

Dim FrameworkOrganización
0 seguidores2 repositorios públicosdesde ene 2026

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/dimframework/dimv0.7.3-14hace 8 días

Métricas por categoría

Vitalidad

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

78Bueno · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 8 días
8.3/36Cadencia de commits — 12/52 semanas con commits
16.5/18Volumen de commits — 67 commits en el último año
10/10OpenSSF Scorecard: Maintained — 17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year67
human_commit_share1
days_since_last_push8
active_weeks_last_year12
Cómo se puntúa
27/27Publica versiones — 13 versiones publicadas
36/36Recencia de las versiones — última versión hace 8 días
27/27Cadencia de publicación — una versión cada ~19,3 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count13
latest_release_tagv0.7.3
releases_from_tagsno
days_since_latest_release8
mean_days_between_releases19,3
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?

33En riesgo · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
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?

54Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
38.2/38.3Aceptación de PR — 8/8 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/28 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs8
open_issues0
closed_issues3
issue_closed_ratio1
closed_unmerged_prs0
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
0/25Alcance del propietario — 0 seguidores de dimframework
4.5/25Trayectoria — 2 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers0
owner_typeOrganization
is_verified
owner_logindimframework
public_repos2
account_age_days191
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 — 14 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/dimframework/dim
ecosystemsgo
any_deprecatedno
min_days_since_publish8

Calidad de Ingeniería

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

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

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://pkg.go.dev/github.com/dimframework/dim
10/10Descripción del repositorio
10/10Topics — 9 topics
10/10Wiki
Datos de entrada utilizados
topicscli, framework, go, golang, middleware, pgx, postgresql, rest-api, web-framework
has_wiki
homepagehttps://pkg.go.dev/github.com/dimframework/dim
has_readme
has_docs_dir
has_description

Seguridad

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

38En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2/2.5CI-Tests — 7 out of 8 merged PRs checked by a CI test -- score normalized to 8
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/28 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
0/7.5Vulnerabilities — 20 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate3,8
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. 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.

63Moderado · 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)
40/40Historial de commits legible — 66 de 67 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,985
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
10/10Práctica demostrada con agentes — 5 de los últimos 67 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,075
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/95 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes31.045
source_files_sampled95
oversized_source_files0

Datos clave

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

Advertencias de recopilación de datos

  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.8 / 10
3.8agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
8CI-Tests7 out of 8 merged PRs checked by a CI test -- score normalized to 8
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/28 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
0Vulnerabilities20 existing vulnerabilities detected
Dependencias directas 5
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/atfromhome/goreusv1.2.0go.mod
Gogithub.com/golang-jwt/jwt/v5v5.3.0go.mod
Gogithub.com/jackc/pgx/v5v5.8.0go.mod
Gogolang.org/x/cryptov0.46.0go.mod
Gomodernc.org/sqlitev1.51.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": [
        "cli",
        "framework",
        "go",
        "golang",
        "middleware",
        "pgx",
        "postgresql",
        "rest-api",
        "web-framework"
      ],
      "is_fork": false,
      "size_kb": 391,
      "has_wiki": true,
      "homepage": "https://pkg.go.dev/github.com/dimframework/dim",
      "languages": {
        "Go": 642072
      },
      "pushed_at": "2026-07-19T14:03:13Z",
      "created_at": "2026-01-17T10:51:36Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-19T14:02:22Z",
      "description": "Framework Go sederhana untuk RESTful API",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Dim Framework",
      "type": "Organization",
      "login": "dimframework",
      "company": null,
      "location": "Indonesia",
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/255514454?v=4",
      "created_at": "2026-01-17T10:50:16Z",
      "is_verified": null,
      "public_repos": 2,
      "account_age_days": 191
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.7.3",
          "kind": "patch",
          "published_at": "2026-07-19T14:03:13Z"
        },
        {
          "tag": "v0.7.2",
          "kind": "patch",
          "published_at": "2026-06-20T08:03:52Z"
        },
        {
          "tag": "v0.7.1",
          "kind": "patch",
          "published_at": "2026-06-11T09:31:05Z"
        },
        {
          "tag": "v0.7.0",
          "kind": "minor",
          "published_at": "2026-06-08T11:15:42Z"
        },
        {
          "tag": "v0.6.2",
          "kind": "patch",
          "published_at": "2026-06-04T08:33:53Z"
        },
        {
          "tag": "v0.6.1",
          "kind": "patch",
          "published_at": "2026-05-30T06:12:18Z"
        },
        {
          "tag": "v0.6.0",
          "kind": "minor",
          "published_at": "2026-05-06T22:11:14Z"
        },
        {
          "tag": "v0.5.0",
          "kind": "minor",
          "published_at": "2026-02-10T06:27:26Z"
        },
        {
          "tag": "v0.4.0",
          "kind": "minor",
          "published_at": "2026-01-27T06:38:54Z"
        },
        {
          "tag": "v0.3.1",
          "kind": "patch",
          "published_at": "2026-01-26T11:41:20Z"
        },
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-01-25T12:46:33Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-01-18T13:16:32Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-01-17T11:03:35Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "729cc0e1945fe988df7ffe2cfb6ab3d4750f80d8",
          "body": "…llowed (405), ServiceUnavailable (503) response helpers (#11)\n\n* Initial plan\n\n* feat: add Gone (410), UnprocessableEntity (422), MethodNotAllowed (405), ServiceUnavailable (503) response helpers\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat(response): add Gone (410), UnprocessableEntity (422), MethodNotA…",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-07-19T14:02:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "bed9eb335aa07d7372e8e651311a7324f575b676",
          "body": "feat: add WritePool() and ReadPools() accessors on PostgresDatabase",
          "is_bot": false,
          "headline": "Merge pull request #9 from dimframework/feat/postgres-pool-accessors",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-06-20T08:03:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "730dd66860d4a593efeef507dfb5b2a9a9538467",
          "body": "Expose the underlying *pgxpool.Pool via exported accessors so consumers\ncan integrate libraries that require direct pgx access (River job queue,\nLISTEN/NOTIFY brokers) without creating a second pool. Mirrors the\nexisting PostgresTx.PgxTx() escape-hatch pattern. Interface Database\nis unchanged; accessors live only on the concrete *PostgresDatabase type.\n\nCloses #8\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add WritePool() and ReadPools() accessors on PostgresDatabase",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-06-20T08:02:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6be4f1b9f33ea9939bf2efdc0b88b0a8bcc71e9f",
          "body": null,
          "is_bot": false,
          "headline": "chore: add BC warning to ErrorMap() type change",
          "author_name": "Nuradiyana",
          "author_login": null,
          "committed_at": "2026-06-11T09:30:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8703c0b05eed2854f155c133969a314e5f8c427",
          "body": null,
          "is_bot": false,
          "headline": "chore: update CHANGELOG for v0.7.1 (ErrorMap/WithFullErrors)",
          "author_name": "Nuradiyana",
          "author_login": null,
          "committed_at": "2026-06-11T09:28:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d88ec6470ca5a1a323d38de291b6ee529e5fa3da",
          "body": "…field (#7)\n\n* feat: introduce FieldErrors for single and multiple errors per field\n\nReplace map[string]string with FieldErrors (map[string]any) across all\nerror response APIs. Single storage, consistent API, no dual-field\ncomplexity.\n\nBreaking changes (compile-time only):\n- AppError.Errors: map[str\n[…]\nieldErrorsFrom → v.ErrorMap()\n- 07-response-helpers.md: fix map[string]string → FieldErrors, fix FieldErrorsFrom usage\n\n---------\n\nCo-authored-by: Nuradiyana <nuradiyana@Nuradiyanas-MacBook-Air.local>",
          "is_bot": false,
          "headline": "feat: introduce FieldErrors — support single and multiple errors per …",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-06-11T09:26:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e56de0349205dd635087d967f377463d5957c009",
          "body": null,
          "is_bot": false,
          "headline": "chore(changelog): prepare release v0.7.0",
          "author_name": "Nuradiyana",
          "author_login": null,
          "committed_at": "2026-06-08T11:14:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "002b0c500c1659ae4265b5fcc5c120240b4048e6",
          "body": "Adds opt-in dim.Of(w, r) wrapper that bundles ResponseWriter and Request\ninto a single *Ctx object. No breaking changes — existing handlers are\nunaffected.",
          "is_bot": false,
          "headline": "feat(ctx): add Ctx helper for ergonomic handler syntax (#6)",
          "author_name": "Nuradiyana",
          "author_login": null,
          "committed_at": "2026-06-08T11:13:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "623e870129041c2b038c5e425c1ed2f37db29ea7",
          "body": null,
          "is_bot": false,
          "headline": "chore(deps): replace go-sqlite3 (CGO) with modernc.org/sqlite (pure Go)",
          "author_name": "Nuradiyana",
          "author_login": null,
          "committed_at": "2026-06-04T08:33:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f481768da193c3bff9cfb746e1dd98834c7d9df4",
          "body": "…using Branca\n\n- Validate() now decodes BRANCA_KEY early so invalid keys fail at startup\n- JWT_SECRET no longer required when BRANCA_KEY is set\n- Update TestValidate_BrancaKeySkipsJWTSecretRequirement to use valid key\n- Add TestValidate_InvalidBrancaKey",
          "is_bot": false,
          "headline": "fix(config): validate BRANCA_KEY at startup and skip JWT_SECRET when …",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-05-30T06:11:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "605d84f5efeaf9351f127c3d520ca94a92333a4b",
          "body": null,
          "is_bot": false,
          "headline": "test(auth): add WithClaimsProvider tests and docs",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-05-30T06:11:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c0c0718423831b106173e4fb5a434dde40426ac2",
          "body": null,
          "is_bot": false,
          "headline": "chore(changelog): prepare release v0.6.0",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-05-06T22:10:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f226e1a0890117c86846cb03ef8e374300fa992c",
          "body": "* feat(auth): introduce TokenManager interface and TokenClaims type alias\n\nAbstracts token operations behind a common interface so JWT and Branca\n(and any future provider) can be used interchangeably without changing\napplication code.\n\n* refactor(jwt): change VerifyToken return type to TokenClaims\n\n\n[…]\n.\n\n* bench(router): add scale benchmarks with 100 and 500 routes\n\nTests static, param, and mixed route lookup across route counts to\ndemonstrate O(1) map and O(k) tree performance at real-world scale.",
          "is_bot": false,
          "headline": "feat(router): hybrid static map + radix tree router (#5)",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-05-06T22:05:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "27398a70f95d22799e31f26a37427ca4b93d1ac8",
          "body": "* feat(auth): introduce TokenManager interface and TokenClaims type alias\n\nAbstracts token operations behind a common interface so JWT and Branca\n(and any future provider) can be used interchangeably without changing\napplication code.\n\n* refactor(jwt): change VerifyToken return type to TokenClaims\n\n\n[…]\nverwriting reserved\n  claims (sub, sid, jti, email, iat, exp, nbf, typ)\n- Document Year 2038 limitation on uint32 timestamp header\n- Document intentional expiry bypass in GetTokenExpiry/IsTokenExpired",
          "is_bot": false,
          "headline": "feat(auth): add Branca token provider with TokenManager interface (#3)",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-05-06T22:01:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "257788d703a61b062497f5589d0e9787a6b78bda",
          "body": "* feat(config): add migration-specific database connection fields\n\nAdd MigrationHost, MigrationPort, MigrationUsername, MigrationPassword to\nDatabaseConfig, loaded from DB_MIGRATION_* env vars. All fields are optional\nand fall back to their Write connection counterparts when empty.\n\n* feat(database)\n[…]\n\n* docs: document dedicated migration database connection\n\nUpdate migrations, configuration, and CLI guides with DB_MIGRATION_*\nenv vars, NewMigrationDatabase usage, and WithMigrationDB setup pattern.",
          "is_bot": false,
          "headline": "feat(migration): dedicated database connection with Write fallback (#4)",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-05-06T21:35:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "532db0b2ce9a6b404eb414c4cbe88e6e8562b9d0",
          "body": "…(#2)\n\n* feat(config): add base64-encoded PEM support for JWT keys\n\nresolveKeyContent now handles three formats: raw PEM string,\nbase64-encoded PEM (recommended for Docker/K8s env vars), and file path.\n\n* test(config): add tests for resolveKeyContent base64 PEM decoding\n\n* docs: document base64 PEM format support for JWT_PRIVATE_KEY\n\n* docs: add asymmetric JWT algorithms and base64 PEM guide to auth docs",
          "is_bot": false,
          "headline": "feat(config): add base64-encoded PEM support for JWT asymmetric keys …",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-05-04T10:20:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f31647ab740bacf9c0274dc8e562ea3604144c78",
          "body": null,
          "is_bot": false,
          "headline": "docs: fix incorrect API usage in 01-getting-started.md",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-04-29T22:12:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2478d7ecd7041540666861197d17073e373c2832",
          "body": null,
          "is_bot": false,
          "headline": "chore: release v0.5.0",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-02-10T02:43:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ddfcdb2af893a8976a58b37159397f9be007ee6d",
          "body": null,
          "is_bot": false,
          "headline": "docs: update documentation and changelog for middleware improvements",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-02-10T02:33:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da62b0ed794a53139b79ff1425afd9fc9d927940",
          "body": null,
          "is_bot": false,
          "headline": "refactor(auth): support flexible token extraction (Bearer/Cookie)",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-02-10T02:33:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c42ec75a39455e32fc94309b77e10365e93a34c8",
          "body": null,
          "is_bot": false,
          "headline": "feat(csrf): add token expiration validation and change error code to 419",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-02-10T02:32:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f8929532fe4bfd06a29ebf299aabc6f8367844c",
          "body": null,
          "is_bot": false,
          "headline": "fix(cors): fix MaxAge type, add Vary header and ExposedHeaders support",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-02-10T02:32:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9619eb7b59bce6b56caa1f2623d9fe702199753",
          "body": "…RFConfig",
          "is_bot": false,
          "headline": "feat(config): add ExposedHeaders to CORSConfig and CookieMaxAge to CS…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-02-10T02:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84212dd8dea2410c3364d40a84723b544fe7a598",
          "body": "- Add typ header \"at+jwt\" for access tokens and \"rt+jwt\" for refresh tokens\n  following RFC 9068 (JSON Web Token Profile for OAuth 2.0 Access Tokens)\n- VerifyToken now rejects tokens without typ=\"at+jwt\" header\n- VerifyRefreshToken now rejects tokens without typ=\"rt+jwt\" header\n- Add optional logger\n[…]\n for security\n\nThis prevents token confusion attacks where refresh tokens could be used\nas access tokens on protected endpoints, or vice versa.\n\nCo-authored-by: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(jwt): add token type validation using JWT typ header (#1)",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-27T06:37:32Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3e57703a1745865a180fe8706f62cad1035f8fb2",
          "body": null,
          "is_bot": false,
          "headline": "test: add verification for make:migration template generation",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-26T11:34:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88051be7ae4f0fdecc6421641b60b9a0c18508ed",
          "body": null,
          "is_bot": false,
          "headline": "fix: update migration template to use dim.Database interface",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-26T11:26:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "74a7592f33342ff3b3062651ea21097d2513befc",
          "body": null,
          "is_bot": false,
          "headline": "chore: apply go fmt and cleanup",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-26T11:00:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43b1708433d7f3f86368c45fe16da558379e748e",
          "body": "…nents",
          "is_bot": false,
          "headline": "chore(dim): update dependencies and add missing email/migration compo…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-25T12:41:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6f1d486ae1d356cb74ceb43e3a7032e31c73608",
          "body": "…ic features",
          "is_bot": false,
          "headline": "docs(dim): update configuration and documentation for database-agnost…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-25T12:39:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bfceae626aa29fcbb9e9b1b2f3eee3a1bd359fa",
          "body": null,
          "is_bot": false,
          "headline": "refactor(dim): update console context and cleanup router logging",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-25T12:39:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "581f41e280a2c31afed8c3b4397b99d92e8d8c96",
          "body": "…igrations",
          "is_bot": false,
          "headline": "feat(dim): update migration system to support multi-database schema m…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-25T12:39:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0bff033b9ad1ca99de2abb877f2ec5f43ce6460f",
          "body": "…or handling",
          "is_bot": false,
          "headline": "fix(dim): ensure unique token generation with jti and robust auth err…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-25T12:39:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a6614f70a3a19e7eb5761fda9dbe622088ac035",
          "body": "…interface",
          "is_bot": false,
          "headline": "refactor(dim): make core stores database-agnostic using new Database …",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-25T12:39:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1f8a587324c7d082b7cc120450526c3661c7a92",
          "body": "…e implementation and tests",
          "is_bot": false,
          "headline": "feat(dim): add DriverName and Rebind to Database interface with SQLit…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-25T12:39:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af5e409bb3c0511cb0a8dc0b509a834ef8e27a1c",
          "body": null,
          "is_bot": false,
          "headline": "docs(auth): update authentication documentation for session binding",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-18T13:15:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a0d7c058ffab398a9517d66bc1233a340e1b89e",
          "body": null,
          "is_bot": false,
          "headline": "test(auth): update unit tests for session id changes",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-18T13:14:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a590d26f04afa6603d0c6a4b74d22c97693cffdf",
          "body": null,
          "is_bot": false,
          "headline": "fix(router): improve handler name extraction and cleanup",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-18T13:14:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1e236847db3691cb018baf3299bfb9e7e8d9008",
          "body": null,
          "is_bot": false,
          "headline": "feat(auth): add token blocklist support and middleware check",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-18T13:14:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d6d3f4788c27079cb956882737a8790a1e85864",
          "body": null,
          "is_bot": false,
          "headline": "feat(auth): implement session id binding for access tokens",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-18T13:14:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1da0949c686b9854bd5948c2365f189bb6943389",
          "body": null,
          "is_bot": false,
          "headline": "docs: update import paths and references to new module name",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-17T10:56:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de2e3a3a3e8b0ac52ffa85a1776f907927a4cc5e",
          "body": null,
          "is_bot": false,
          "headline": "refactor: rename module to github.com/dimframework/dim",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-17T10:56:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "116795a47d2e26f54a5d689bb11ef710d90f1f94",
          "body": null,
          "is_bot": false,
          "headline": "chore: add project governance, license, and CI configuration",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-17T10:55:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "577208fb8585501f4d1c7a18e4a3aa61f6ec91f5",
          "body": null,
          "is_bot": false,
          "headline": "docs: refresh migration and CLI guides",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-16T02:49:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8c544b0f0a69b423d44946130661dd4e78b0a17",
          "body": "…tion",
          "is_bot": false,
          "headline": "feat(cli): enhance help command with auto-grouping and better indenta…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-16T02:49:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "608a2c833982c8e95530ae586735635fa5261224",
          "body": "…nerator, and auto-discovery",
          "is_bot": false,
          "headline": "feat(migration): implementation of timestamp-based migrations, CLI ge…",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-16T02:49:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e21c916ee5cd047150824b7d0e666b590c9c1031",
          "body": null,
          "is_bot": false,
          "headline": "docs: update main README with CLI features and new quick start guide",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T22:43:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1805d597c43f44fabc87e06d3eb522535c1e5698",
          "body": "All identified issues in the audit have been addressed and verified.",
          "is_bot": false,
          "headline": "docs: finalize CLI implementation and remove audit report",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T22:41:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "296aa4a7f51c0043ee96843aad435776a35ad9f1",
          "body": "- Add IO injection to Console for better output testing\\n- Improve function name detection for stripped binaries\\n- Add warning in route:list for missing debug symbols\\n- Update help command to use injected output writer",
          "is_bot": false,
          "headline": "feat(cli): enhance testability and robustness",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T22:35:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7c827a88b143d569ed3afd79c2f6c8c0f92d416d",
          "body": null,
          "is_bot": false,
          "headline": "docs: restructure documentation for better navigation and flow",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T22:35:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6366219927858c580b7b5f72980d5d418da4b60f",
          "body": "Add comprehensive audit report for CLI framework implementation covering:\n- Architecture analysis (command pattern, dependency injection)\n- Issue identification (help consistency, sorting, table width, safety)\n- Technical recommendations with priority levels\n- Test coverage and file structure analys\n[…]\npriority\nenhancements (anonymous handler naming, output testing).\n\nAll medium-high priority issues have been addressed in the implementation.\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add CLI implementation audit report",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T22:24:40Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c8c38a194e5b7d1ffa6c5a9e99eac8ee6c226e6e",
          "body": "Add extensible CLI framework for Dim with built-in commands for server\nmanagement, database migrations, and route introspection. Includes\nsafety guards, proper testing, and production-ready features.\n\nFeatures:\n- Command pattern with hybrid interface design (Command + FlaggedCommand)\n- Built-in comm\n[…]\nmendations\n\nFiles modified:\n- router.go: Added route tracking and GetRoutes() method\n- router_test.go: Added 13 tests for route introspection\n\nCo-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: implement comprehensive CLI system with command pattern",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T22:24:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7d0d4324e036fb8dc3d1b976b32eec57fdc2d326",
          "body": null,
          "is_bot": false,
          "headline": "docs: add migration info to middleware and authentication guides",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T11:41:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78277e13437b41ebacb25bb955c33271a1e67829",
          "body": "- Added JSON:API Parser methods (Filter, Sort, Pagination).\n- Added Rate Limit Store and variadic middleware signatures.\n- Added Migration and Framework Migration helpers.\n- Added Static and SPA router methods.\n- Corrected GetUser signature to return Authenticatable.\n- Added TooManyRequests response helper.",
          "is_bot": false,
          "headline": "docs: update API reference with new features and correct signatures",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T11:40:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a82bac0a89a405efe56daf84299e2020e158b35",
          "body": "- Added user_migration.go and ratelimit_migration.go.\n- Updated token_migration.go to include blocklist table.\n- Added GetFrameworkMigrations() helper in migration.go.\n- Updated docs to reflect the new migration system.",
          "is_bot": false,
          "headline": "feat: consolidate framework migrations into a unified system",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T11:37:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9513b8ab442321eeba34efda893eb87f0f3dbd57",
          "body": null,
          "is_bot": false,
          "headline": "docs: update middleware guide with rate limiting storage options",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T11:29:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6accc1dd246146082dba6d1540a5c8a82e7654e3",
          "body": "- Update middleware to use new RateLimitStore interface.\n- Support variadic store injection in RateLimit middleware.\n- Update unit tests to match new API signatures.",
          "is_bot": false,
          "headline": "refactor: clean up rate limit middleware and update tests",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T11:29:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a22468445136b5ce6edfc71db2ed28342c5780ea",
          "body": "- Add RateLimitStore interface.\n- Implement InMemoryRateLimitStore using goreus cache.\n- Implement PostgresRateLimitStore with atomic UPSERT logic.\n- Extract RateLimiter core logic to ratelimit.go.",
          "is_bot": false,
          "headline": "feat: implement pluggable storage for rate limiting",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T11:29:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55e008f3e47ffc95f3d91b71ada211a4c5ed2cd1",
          "body": null,
          "is_bot": false,
          "headline": "feat: add TooManyRequests helper to response utilities",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T11:28:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b3265888c4daa43d060ce1571452d7687a14723",
          "body": "- Updated 01-getting-started with modern server start and examples.\n- Refactored 02-architecture to reflect Go 1.22 router and DB tracer.\n- Updated 03-routing with new {id} syntax and Static/SPA support.\n- Enhanced 04-middleware with correct order and chaining helpers.\n- Updated 05-authentication wi\n[…]\nBinary Deployment guide to 17-deployment.\n- Replaced 20-query-filtering with 20-jsonapi-features (Filter, Pagination, Sort).\n- Synchronized all docs with actual framework code and Indonesian language.",
          "is_bot": false,
          "headline": "docs: comprehensive audit and update of documentation",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T10:55:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "107fc9d9cd594acb14d21274340becac8fc49c84",
          "body": "- Add Static and SPA methods to Router with fs.FS support.\n- Implement automatic security headers (nosniff) for static assets.\n- Implement anti-cache strategy for SPA index file.\n- Add support for route-specific middleware on Static and SPA routes.\n- Update README with comprehensive Quick Start in Indonesian.\n- Add unit tests for all new routing features.",
          "is_bot": false,
          "headline": "feat: enhance router with secure static and SPA support",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T10:23:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b345af2078ab48a8bbb56f2a3269951bfd3c1079",
          "body": null,
          "is_bot": false,
          "headline": "feat(server): add StartServer utility with graceful shutdown",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T09:04:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc39fe8408e71f1021c32df6844f151f40831628",
          "body": null,
          "is_bot": false,
          "headline": "feat(auth): add TokenBlocklist interface definition",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T09:03:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e86703c4075453756955330866e86cd2d83e0552",
          "body": "feat: implement hookManager for db connections\n\nfeat: add database tracer for observability",
          "is_bot": false,
          "headline": "feat(database): add query hook system and tracer support",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T09:03:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "615f2f4704c0281d057bc839a7621f08d4e453b3",
          "body": "fix: update auth service and tests to handle potential errors during JWT manager initialization",
          "is_bot": false,
          "headline": "refactor(auth): propagate NewJWTManager error handling",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T09:02:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e01adcba9c1f3bd8b3328a06468595128fa2f4b5",
          "body": "feat(config): support loading private/public keys from file paths via env vars\n\ndocs(jwt): translate comments to Indonesian\n\nfix(jwt): refactor NewJWTManager to return error",
          "is_bot": false,
          "headline": "refactor(jwt): support pem file paths and update docs",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-13T09:01:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dddd0acc7feb2d38a42960a086c01e1ed38f98c3",
          "body": "- Added Pagination and PaginationParser for handling pagination in JSON:API format.\n- Introduced SortField and SortParser for sorting capabilities based on query parameters.\n- Created tests for pagination and sorting functionalities to ensure correctness.\n\nfeat: Enhance router group functionality\n\n-\n[…]\nto facilitate testing.\n\nfeat: Define user authentication interface\n\n- Introduced Authenticatable interface for user entities.\n- Implemented TokenUser struct for representing users derived from tokens.",
          "is_bot": false,
          "headline": "feat: Implement JSON:API pagination and sorting",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-12T17:40:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dde05808a0743fd80776cd496d4e2f788410f1b7",
          "body": null,
          "is_bot": false,
          "headline": "wip",
          "author_name": "Nuradiyana",
          "author_login": "nuradiyana",
          "committed_at": "2026-01-12T04:48:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 13,
      "commits_last_year": 67,
      "latest_release_at": "2026-07-19T14:03:13Z",
      "latest_release_tag": "v0.7.3",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 12,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 19.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/dimframework/dim",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/dimframework/dim",
          "is_deprecated": false,
          "latest_version": "v0.7.3",
          "repository_url": "https://github.com/dimframework/dim",
          "versions_count": 14,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T14:02:18Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "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": 31045,
      "source_files_sampled": 95,
      "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/atfromhome/goreus",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.0"
        },
        {
          "name": "github.com/golang-jwt/jwt/v5",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.3.0"
        },
        {
          "name": "github.com/jackc/pgx/v5",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.8.0"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.46.0"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.51.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": 8,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 3,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "nuradiyana",
          "commits": 61,
          "avatar_url": "https://avatars.githubusercontent.com/u/1073802?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "test.yml"
      ],
      "has_docs_dir": true,
      "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": 8,
            "reason": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
            "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/28 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file 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": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 0,
            "reason": "20 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "729cc0e1945fe988df7ffe2cfb6ab3d4750f80d8",
        "ran_at": "2026-07-28T05:46:08Z",
        "aggregate_score": 3.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-19T14:03:29Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-19T14:02:18Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/dimframework/dim",
    "host": "github.com",
    "name": "dim",
    "owner": "dimframework"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 58,
      "inputs": {
        "security": 38,
        "vitality": 78,
        "community": 33,
        "governance": 54,
        "engineering": 78
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 78,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "commits_last_year": 67,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 12
            },
            "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": "12/52 weeks with commits",
                "points": 8.3,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 12
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "67 commits in the last year",
                "points": 16.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 67
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "17 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": 100,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v0.7.3",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 19.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "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 ~19.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 19.3
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Community & Adoption",
        "value": 33,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "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 (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 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": "moderate",
        "name": "Sustainability & Governance",
        "value": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 8,
              "open_issues": 0,
              "closed_issues": 3,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "8/8 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 8,
                      "decided": 8
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 34,
            "inputs": {
              "followers": 0,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "dimframework",
              "public_repos": 2,
              "account_age_days": 191
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of dimframework",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "dimframework"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "2 public repos, account ~0 yr old",
                "points": 4.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 2
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 0
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/dimframework/dim"
              ],
              "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": "14 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 14
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 78,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": 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": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
                "points": 16,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "topics": [
                "cli",
                "framework",
                "go",
                "golang",
                "middleware",
                "pgx",
                "postgresql",
                "rest-api",
                "web-framework"
              ],
              "has_wiki": true,
              "homepage": "https://pkg.go.dev/github.com/dimframework/dim",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://pkg.go.dev/github.com/dimframework/dim",
                "points": 15,
                "status": "met",
                "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": "9 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 38,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 38,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 3.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "7 out of 8 merged PRs checked by a CI test -- score normalized to 8",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "17 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "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": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "20 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 63,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.985,
              "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": "66 of 67 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 66,
                      "sampled": 67
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 66,
            "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.075,
              "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": "5 of the last 67 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 5,
                      "sampled": 67
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 31045,
              "source_files_sampled": 95,
              "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/95 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 95,
                      "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": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T05:46:16.198210Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/dimframework/dim.svg",
  "full_name": "dimframework/dim",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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