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

galax-io / gatling-picatinny

Gatling DSL extensions — feeders, profile management, transactions, assertions, Redis integration, and utility functions

Scala · Java · ShellApache-2.0★ 12 estrellas⑂ 1 forkdesde mar 2024Ver en GitHub ↗

galax-io/gatling-picatinny tiene un índice de salud de 59 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (86/100) y la más baja, Community & Adoption (32/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

59
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

Galaxio TeamOrganización
18 seguidores15 repositorios públicosdesde oct 2023

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

Métricas por categoría

Vitalidad

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

86Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
11.8/36Cadencia de commits — 17/52 semanas con commits
18/18Volumen de commits — 292 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year292
human_commit_share0,76
days_since_last_push5
active_weeks_last_year17
Cómo se puntúa
27/27Publica versiones — 65 versiones publicadas
36/36Recencia de las versiones — última versión hace 5 días
27/27Cadencia de publicación — una versión cada ~3,3 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count65
latest_release_tagv1.25.0
releases_from_tagsno
days_since_latest_release5
mean_days_between_releases3,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?

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

Sostenibilidad y Gobernanza

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

42En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0.2/22.5Distribución de commits — el principal contribuyente firma el 99% de los commits
5.4/13.5Amplitud de contribuyentes — 4 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled4
top_contributor_share0,989
Cómo se puntúa
27.2/46.8Resolución de issues — 58% de issues cerradas
35.6/38.3Aceptación de PR — 150/161 PR decididos fusionados
1.5/15OpenSSF Scorecard: Code-Review — Found 1/8 approved changesets -- score normalized to 1
Datos de entrada utilizados
merged_prs150
open_issues61
closed_issues85
issue_closed_ratio0,582
closed_unmerged_prs11
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
9.2/25Alcance del propietario — 18 seguidores de galax-io
14.3/25Trayectoria — 15 repos públicos, cuenta de ~2 años
Datos de entrada utilizados
followers18
owner_typeOrganization
is_verified
owner_logingalax-io
public_repos15
account_age_days1006

Calidad de Ingeniería

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

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

Documentación

85Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 12 topics
10/10Wiki
Datos de entrada utilizados
topicsgatling, performance, performance-testing, gatling-plugin, dsl, feeders, java, jwt, kotlin, load-testing, redis, scala
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

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

67Moderado · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md, CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 76 de 76 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_filesAGENTS.md, CLAUDE.md
agent_instruction_max_bytes7798
Cómo se puntúa
0/18Arranque con un solo comando
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — Scala (tipado estático)
0/10Entorno reproducible
10/10Práctica demostrada con agentes — 73 de los últimos 100 commits con autoría o crédito de agente
8/8Mantenimiento automatizado — 2 de los últimos 100 commits son actualizaciones automáticas de dependencias
1/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 1
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0,73
toolchain_manifests
dependency_bot_commit_share0,02
Cómo se puntúa
45/45Código verificable por tipos — Scala (tipado estático)
54.8/55Tamaños de archivo manejables — 1/235 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageScala
largest_source_bytes65.616
source_files_sampled235
oversized_source_files1
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

12estrellas de GitHub
4contribuidores
292commits en los últimos 12 meses
5días desde el último push
65versiones publicadas
1factor bus
61issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

OpenSSF Scorecard 5.5 / 10
5.5agregado

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-27 01:01 UTC

10Binary-Artifactsno binaries found in the repo
3Branch-Protectionbranch protection is not maximal on development and all release branches
10CI-Tests12 out of 12 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
1Code-ReviewFound 1/8 approved changesets -- score normalized to 1
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow detected
1Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 1
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
n/dSigned-Releasesno releases found
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
Todas las dependencias 0

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

RegistroPaqueteVersiónRelación
Avisos de dependencias sin evaluar

El cotejo de avisos no pudo ejecutarse para este informe: No resolved dependencies to assess

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "gatling",
        "performance",
        "performance-testing",
        "gatling-plugin",
        "dsl",
        "feeders",
        "java",
        "jwt",
        "kotlin",
        "load-testing",
        "redis",
        "scala"
      ],
      "is_fork": false,
      "size_kb": 1570,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Java": 124903,
        "Scala": 645358,
        "Shell": 106242,
        "Python": 699,
        "PowerShell": 32608
      },
      "pushed_at": "2026-07-21T21:38:18Z",
      "created_at": "2024-03-24T11:08:27Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-21T21:38:42Z",
      "description": "Gatling DSL extensions — feeders, profile management, transactions, assertions, Redis integration, and utility functions",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Scala",
      "significant_languages": [
        "Scala",
        "Java",
        "Shell"
      ]
    },
    "owner": {
      "blog": "galaxio.org",
      "name": "Galaxio Team",
      "type": "Organization",
      "login": "galax-io",
      "company": null,
      "location": null,
      "followers": 18,
      "avatar_url": "https://avatars.githubusercontent.com/u/148836406?v=4",
      "created_at": "2023-10-24T03:08:39Z",
      "is_verified": null,
      "public_repos": 15,
      "account_age_days": 1006
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.25.0",
          "kind": "minor",
          "published_at": "2026-07-21T21:36:20Z"
        },
        {
          "tag": "v1.24.1",
          "kind": "patch",
          "published_at": "2026-07-19T14:01:42Z"
        },
        {
          "tag": "v1.24.0",
          "kind": "minor",
          "published_at": "2026-07-05T04:15:52Z"
        },
        {
          "tag": "v1.23.0",
          "kind": "minor",
          "published_at": "2026-06-28T07:47:46Z"
        },
        {
          "tag": "v1.22.0",
          "kind": "minor",
          "published_at": "2026-06-24T13:16:04Z"
        },
        {
          "tag": "v1.21.2",
          "kind": "patch",
          "published_at": "2026-06-23T23:59:42Z"
        },
        {
          "tag": "v1.21.1",
          "kind": "patch",
          "published_at": "2026-06-23T23:25:59Z"
        },
        {
          "tag": "v1.21.0",
          "kind": "minor",
          "published_at": "2026-06-23T23:07:53Z"
        },
        {
          "tag": "v1.20.0",
          "kind": "minor",
          "published_at": "2026-06-23T19:11:04Z"
        },
        {
          "tag": "v1.19.0",
          "kind": "minor",
          "published_at": "2026-06-22T15:03:35Z"
        },
        {
          "tag": "v1.18.0",
          "kind": "minor",
          "published_at": "2026-06-22T10:24:02Z"
        },
        {
          "tag": "v1.17.1",
          "kind": "patch",
          "published_at": "2026-06-21T22:47:46Z"
        },
        {
          "tag": "v1.17.0",
          "kind": "minor",
          "published_at": "2026-06-21T19:07:53Z"
        },
        {
          "tag": "v1.16.0",
          "kind": "minor",
          "published_at": "2026-06-21T11:28:05Z"
        },
        {
          "tag": "v1.15.7",
          "kind": "patch",
          "published_at": "2026-06-20T19:47:50Z"
        },
        {
          "tag": "v1.15.6",
          "kind": "patch",
          "published_at": "2026-06-03T01:51:32Z"
        },
        {
          "tag": "v1.15.5",
          "kind": "patch",
          "published_at": "2026-06-02T23:09:37Z"
        },
        {
          "tag": "v1.15.4",
          "kind": "patch",
          "published_at": "2026-06-02T22:12:39Z"
        },
        {
          "tag": "v1.13.17",
          "kind": "patch",
          "published_at": "2026-06-02T19:04:07Z"
        },
        {
          "tag": "v1.13.15",
          "kind": "patch",
          "published_at": "2026-06-01T17:01:44Z"
        },
        {
          "tag": "v1.13.14",
          "kind": "patch",
          "published_at": "2026-06-01T16:42:37Z"
        },
        {
          "tag": "v1.13.13",
          "kind": "patch",
          "published_at": "2026-06-01T16:25:50Z"
        },
        {
          "tag": "v1.13.12",
          "kind": "patch",
          "published_at": "2026-06-01T16:02:18Z"
        },
        {
          "tag": "v1.13.9",
          "kind": "patch",
          "published_at": "2026-06-01T01:44:30Z"
        },
        {
          "tag": "v1.13.8",
          "kind": "patch",
          "published_at": "2026-05-27T00:57:45Z"
        },
        {
          "tag": "v1.13.7",
          "kind": "patch",
          "published_at": "2026-05-27T00:15:47Z"
        },
        {
          "tag": "v1.13.6",
          "kind": "patch",
          "published_at": "2026-05-27T00:01:47Z"
        },
        {
          "tag": "v1.13.5",
          "kind": "patch",
          "published_at": "2026-05-26T13:48:05Z"
        },
        {
          "tag": "v1.13.4",
          "kind": "patch",
          "published_at": "2026-05-26T08:13:40Z"
        },
        {
          "tag": "v1.13.1",
          "kind": "patch",
          "published_at": "2026-05-26T07:30:14Z"
        },
        {
          "tag": "v1.13.0",
          "kind": "minor",
          "published_at": "2026-05-26T07:09:44Z"
        },
        {
          "tag": "v1.12.4",
          "kind": "patch",
          "published_at": "2026-05-25T21:25:31Z"
        },
        {
          "tag": "v1.12.3",
          "kind": "patch",
          "published_at": "2026-05-23T11:35:27Z"
        },
        {
          "tag": "v1.12.2",
          "kind": "patch",
          "published_at": "2026-05-23T10:43:59Z"
        },
        {
          "tag": "v1.12.0",
          "kind": "minor",
          "published_at": "2026-05-19T20:27:43Z"
        },
        {
          "tag": "v1.11.0",
          "kind": "minor",
          "published_at": "2026-05-19T00:14:26Z"
        },
        {
          "tag": "v1.10.5",
          "kind": "patch",
          "published_at": "2026-05-19T00:11:55Z"
        },
        {
          "tag": "v1.10.4",
          "kind": "patch",
          "published_at": "2026-05-17T19:07:32Z"
        },
        {
          "tag": "v1.10.3",
          "kind": "patch",
          "published_at": "2026-05-17T13:22:21Z"
        },
        {
          "tag": "v1.10.2-latest",
          "kind": "prerelease",
          "published_at": "2026-05-17T13:09:35Z"
        },
        {
          "tag": "v1.10.2",
          "kind": "patch",
          "published_at": "2026-05-17T13:07:49Z"
        },
        {
          "tag": "v1.10.1",
          "kind": "patch",
          "published_at": "2026-05-16T11:46:46Z"
        },
        {
          "tag": "v1.10.0",
          "kind": "minor",
          "published_at": "2026-05-15T17:24:26Z"
        },
        {
          "tag": "v1.8.0",
          "kind": "minor",
          "published_at": "2026-05-14T22:43:52Z"
        },
        {
          "tag": "v1.7.0",
          "kind": "minor",
          "published_at": "2026-05-14T16:31:58Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-05-14T03:22:22Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-05-14T03:22:21Z"
        },
        {
          "tag": "v1.4.1",
          "kind": "patch",
          "published_at": "2026-05-13T12:44:33Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-05-13T11:16:39Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-05-12T12:42:50Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-05-08T04:38:02Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-04-28T07:54:48Z"
        },
        {
          "tag": "v1.0.2",
          "kind": "patch",
          "published_at": "2026-04-26T22:48:25Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-02-10T11:51:38Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-02-10T11:41:55Z"
        },
        {
          "tag": "v0.18.2",
          "kind": "patch",
          "published_at": "2025-11-10T20:46:02Z"
        },
        {
          "tag": "v0.18.1",
          "kind": "patch",
          "published_at": "2025-08-18T04:31:57Z"
        },
        {
          "tag": "v0.18.0",
          "kind": "minor",
          "published_at": "2025-08-18T04:16:12Z"
        },
        {
          "tag": "v0.17.1",
          "kind": "patch",
          "published_at": "2024-12-11T08:16:19Z"
        },
        {
          "tag": "v0.17.0",
          "kind": "minor",
          "published_at": "2024-12-10T21:31:20Z"
        },
        {
          "tag": "v0.16.1",
          "kind": "patch",
          "published_at": "2024-09-27T10:23:57Z"
        },
        {
          "tag": "v0.16.0",
          "kind": "minor",
          "published_at": "2024-06-26T21:56:52Z"
        },
        {
          "tag": "v0.15.0",
          "kind": "minor",
          "published_at": "2024-05-22T23:37:22Z"
        },
        {
          "tag": "v0.14.1",
          "kind": "patch",
          "published_at": "2024-05-22T13:48:28Z"
        },
        {
          "tag": "v0.14.0",
          "kind": "minor",
          "published_at": "2024-04-29T12:52:06Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "1d1fe982f7691de288726629e51088064c7c49c3",
          "body": "Post-release step per the release process: binary-compatibility baseline\nmoves to the just-published v1.25.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(build): bump mimaPreviousArtifacts to 1.25.0",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T21:38:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ffa244769a70ff61e019c4aca050f936d5cdd509",
          "body": "GitHub's REST milestone filter can return stale members — observed PR #296\nappearing under milestone #12 while its own payload carries milestone #30\n(v1.24.1). Filter each listed item by its payload milestone.number instead\nof trusting the query filter, so tag-readiness doesn't fail on foreign PRs.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(tooling): re-verify milestone membership in check-linkage listing",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T21:06:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "445dabce8ccf31f7caab2894fb9a87d6aae8e56f",
          "body": "…t floor\n\nmain drifted below the enforced statement floor after #294-#300 (74.09% < 75.00\non 'sbt coverage test coverageReport'; branch 69.10% passes). All shortfall sat\nin pre-existing pure faker helpers, so per TESTING.md \"Coverage ratchet\" this\nbackfills layer-1 tests instead of moving the floor:\n[…]\n: 74.09% -> 76.06% stmt, 69.10% -> 73.51% branch (712 tests, +27).\nOfficial unit+it gate command: 81.13% stmt / 74.70% branch. Floors unchanged.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(feeders): backfill faker unit coverage to clear the 75% statemen…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:30:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "541c1c0606b4322493b006f0214138e88c3cd354",
          "body": "…task log\n\nBEFORE/AFTER gc.alloc.rate.norm tables (ipv6 -96.5% B/op and 8.4x faster,\nnarrow-long -100% i.e. zero allocation and 7.5x, lorem -66%, email -39%;\nraw JMH logs attached as a PR comment), draft evidence-closure comment for\n#130 (not posted — maintainer gate), tasks.md progress marks, and h\n[…]\n IntegrationTest (ci.yml Coverage job) and is green at 75/66 on this\nbranch; a unit-only local run under-measures and must not be read as drift.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 010 implementation evidence — benchmarks, #130 draft, …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "81589aa979eef53fca7bfb41366dbf903649d5a9",
          "body": "withDefaults rebuilt defaults.toMap for every record flowing through the\ntransform; the defaults are fixed at construction, so the map is now built\nonce in the closure. Per-record semantics unchanged: defaultsMap ++ record,\nrecord wins on collision, duplicate default keys keep varargs last-wins.\nNew multi-record test (record-wins / absent-fills / duplicate-last-wins in\none run) passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(feeders): hoist withDefaults static map to construction (#131)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4db05737b9404d347fe8af24c84f6b4f70844271",
          "body": "selectKeys built a MapView + function wrapper + full toMap rebuild per\nrecord; a direct filter on the widened record does one pass straight into\nthe result map. The hoisted keySet stays. New tests: mixed\npresent/absent/unselected keys, empty record, empty selection, plus a\nselectKeys -> prefixKeys -\n[…]\ns records\nwith suffixKeys and empty-affix identity boundaries (locks #130 behavior\nper FR-006). All passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(feeders): single-pass selectKeys record filtering (#129)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "4c02457b464d77d20795d1d7f08d414a65c2c258",
          "body": "nextLongInclusive classified narrow vs wide ranges with BigInt arithmetic,\nallocating 3+ BigInt per sample on the hot path of every long-derived\ngenerator (long, positiveLong, negativeLong, date.offset). The predicate is\nnow pure Long arithmetic: span = max - min; narrow iff span >= 0 &&\nspan < Long\n[…]\n at\nclassification-boundary ranges incl. negative-max wide range, tiny-range\nendpoint coverage. All passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): allocation-free narrow-range long classification (#304)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "3bf913f4e29910cd3aa6ba1ad0c11946a22187fd",
          "body": "lorem.words now appends catalog draws into one pre-sized StringBuilder\ninstead of building Vector.fill(count) and mkString-joining it — removes\nthe intermediate Vector and its arrays on a path sometimes called\nper-request in payload templates. require(count > 0) untouched. New tests\n(words(1) single-word/no-separator boundary, exact N words + N-1 single\nspaces with catalog membership) passed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): single-pass lorem words assembly (#123)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c53acc5770b6769b32a5980d0bef4971cf0c4385",
          "body": "…n (#125)\n\nGerman Steuer-ID: one StringBuilder with 11 direct digit appends instead of\nRange.map (boxed IndexedSeq) + prepend + mkString. Brazilian CPF: the\nformatted branch reuses a construction-time compiled Pattern instead of\nString.replaceFirst compiling one per call (stella generation and CNPJ\n\n[…]\n first-digit-never-0 boundary,\nformatted-CPF checksum validity, raw-CPF-has-no-separators negative)\npassed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): single-pass TIN assembly + precompiled CPF format patter…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb0871da6031539546ce8f97f5a2aa1a767550df",
          "body": "Replace Vector.fill(8)(RandomDataGenerators.hexString(4)).mkString(\":\") with\none StringBuilder drawing 32 hex digits from ThreadLocalRandom over an\nexplicit lowercase alphabet. Drops the per-group Iterator/map/take chain,\nthe Vector, the per-group strings, AND the shared scala.util.Random\ncontention\n[…]\non and 8x4 lowercase-hex\nshape unchanged; strengthened shape test (1000 samples, per-group charset)\npassed against the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): allocation-free IPv6 assembly off legacy RNG util (#124)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "317ba5121b03741ec3ebf392f5b9da270220c2dd",
          "body": "Replace the per-call regex chain (replaceAll compiles a Pattern every\ninvocation, plus strip intermediates) in companyEmailName and emailFromName\nwith one shared char-loop helper over the lowered string. toLowerCase stays:\nits locale-aware special casing (e.g. U+0130 -> two code units) is not\nreprod\n[…]\nse, accents, dotted-I,\nsymbols-only -> \"user\" fallback, non-BMP surrogate pairs incl. trailing\nruns); it passed on the old implementation first.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "perf(faker): single-pass email local-part normalization (#139)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0bcb9d0c4302ec7e02db072acfc05e6b7545176a",
          "body": "Adds fakerLoremWordsSample/fakerNarrowLongSample/fakerIpv6Sample to\nFakerBenchmark (email path already covered by fakerEmailSample) plus a\nlayer-1 smoke test asserting each returns a validly-shaped value, so the\nFR-007 allocation evidence for spec 010 has a pre-change baseline.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(faker): benchmark coverage for lorem/long/ipv6 hot paths",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40b787dabcdb635278d8e7590d7e511e836199d8",
          "body": "Spec, plan (Test Model per FR, constitution check, complexity entry for\nreference-style parity testing), research R1-R7 incl. the #304 Long-span\nequivalence proof, data-model parity invariants, parity-and-gates contract,\nquickstart, 24-task breakdown, verification harness (14 claims: 11 verified,\n3 \n[…]\n remediation\n(I1/C1/C2/C3/D1 + LOW batch) folded in.\n\nScope: milestone 12 (v1.25.0 — Perf: Faker), refs #123 #124 #125 #129 #130\n#131 #139 #304.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): add 010-faker-syntax-perf spec/plan/tasks",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:27:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8a684d302fe9234360686e89a861daa9af8e6cc5",
          "body": "…5) (#307)\n\nRule 5 read literally banned any force-push on PR branches, contradicting\nthe rebase-only workflow and AGENTS.md, which requires updating PR branches\nwith --force-with-lease after a rebase. Rescope: force-push prohibited on\nmain and release/* only; PR branches remain rebase-only (no merg\n[…]\n per governance versioning policy (clarification,\nno semantic change). Flagged as finding D2 by /speckit-analyze of\nspecs/010-faker-syntax-perf.\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(constitution): scope force-push ban to protected branches (v1.1.…",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-21T20:10:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "23f224384e68a5bf34f6b22852dd215a66088393",
          "body": "…ng.MaxValue (#297) (#300)",
          "is_bot": false,
          "headline": "fix(feeder): check both bounds when Faker.long range is wider than Lo…",
          "author_name": "Leonardo",
          "author_login": "Leonard013",
          "committed_at": "2026-07-21T03:20:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54c58da24ffc4d47bd288229ea67edd6c4930788",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-scalafmt from 2.6.1 to 2.6.2 (#302)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T03:17:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4aa5592ef8616118a4eaea1fa22209875b021539",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update scalafmt-core from 3.11.3 to 3.11.4 (#303)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-21T03:17:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b9ab7511b510c134a2a3d03829f2565eadf607c",
          "body": "Bumps the github-actions group with 1 update: [actions/setup-go](https://github.com/actions/setup-go).\n\n\nUpdates `actions/setup-go` from 6 to 7\n- [Release notes](https://github.com/actions/setup-go/releases)\n- [Commits](https://github.com/actions/setup-go/compare/v6...v7)\n\n---\nupdated-dependencies:\n\n[…]\nsion-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump actions/setup-go in the github-actions group (#298)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-19T13:25:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ce751b8e5eb028e2c39ecaf4e0da091b25b035e",
          "body": "* docs(speckit): add 009-faker-datetime-offset spec/plan/tasks (#294)\n\nSpecification, quality checklist, implementation plan, research\n(from-scratch API alternatives), data model, public API contract,\nquickstart, and the dependency-ordered task list (recorded with final\ncompletion notes) for the dis\n[…]\ne\ndefect in Faker.number.long is out of scope — tracked as #297.\n\nCloses #294\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat(faker): discrete LocalDateTime offset generator (#294) (#296)",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T13:24:48Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5e721a3ddfd566cdaf0c8776390d559df7a818a0",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 quickstart — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "591c6022e66ff29439e32311541c1d7db76aed0d",
          "body": "…(2026-07-19)\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 build-gates contract — active-milestone amendment …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1728f156de7d9d469ba4ce3682b5f0a38464773",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 data-model — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "41d0cf5ad28d0e4090fac941637528f407a2c20d",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 research — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "370feed86b8204d9361e617b842ac55e43c48197",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 plan — active-milestone amendment (2026-07-19)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c2e0a4b60eba1daa278836f81782a1b29131e79d",
          "body": "…milestone\n\nSupersedes clarification Q2 of 2026-07-03: bot dependency PRs are\nauto-assigned to the current active milestone; the standing \"maintenance\"\nmilestone (№29) is retired, its merged PRs reassigned to v1.25.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): 008 spec — clarification 2026-07-19, deps join active …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9f79601a031d499e4242c0b7d2b65c9e5fd0c4e4",
          "body": "Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(testing): bot PRs auto-assigned to the active milestone",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9bc6b1fa5d7310c1b94040507a05b5c25f5686ac",
          "body": "Resolve the target milestone dynamically (lowest-numbered open, same\ndefinition as scripts/check-linkage.sh) instead of the hardcoded standing\n\"maintenance\" milestone, which is retired: dependency updates ship with a\nrelease, so they are tracked in that release's milestone. Degrade to a\nworkflow warning when no open milestone exists.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "ci(steward): assign Steward PRs to the active milestone",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-19T09:51:07Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9a5218ce03764c1119c3fec9e45c1c508c4533bc",
          "body": "* build(deps): update sbt-ci-release from 1.11.2 to 1.12.0\n\n* fix(build): declare sbt-git explicitly for GitVersioning\n\nsbt-ci-release 1.12.0 dropped its transitive sbt-git dependency,\nbreaking build.sbt's enablePlugins(GitVersioning, ...). Version is\nstill derived via sbt-dynver (unchanged), so thi\n[…]\n-\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>\nCo-authored-by: John Axe <jigarkhwar88@gmail.com>\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-ci-release from 1.11.2 to 1.12.0 (#288)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T21:22:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "a360cea7692aa032ed14ffc4cc32afe11ec6b624",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update jackson-dataformat-yaml from 2.22.0 to 2.22.1 (#287)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:52:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b46327cd514e4618fec840387fb1b22cddacee8",
          "body": "…al (#289)\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update hibernate-validator from 9.1.1.Final to 9.1.2.Fin…",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:29:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b16e5ec410e2921b190ff9ee4399e6a9cd602922",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update postgresql from 42.7.12 to 42.7.13 (#291)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:29:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc228960d8ec1eb545a16d8e31b8394a58368f76",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update scalafmt-core from 3.11.1 to 3.11.3 (#293)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:29:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bff3575010fd4eaaa217309a38c69198342a1e6d",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update junit-jupiter from 6.1.1 to 6.1.2 (#290)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:28:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a77fdfe44345a2d75eb3116ed4367d6b91302e91",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update jackson-core from 2.22.0 to 2.22.1 (#286)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:22:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e478ff447ed7ea385ff8808865d99d23afb85352",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-bloop from 2.0.19 to 2.1.1 (#285)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-18T20:21:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a98bfd69424b460e5330e6390da14541185f8ac",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update slf4j-api from 2.0.17 to 2.0.18 (#284)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88a29a65aeb8e2bd9ecc30b96e0679fe48670d5c",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update postgresql from 42.7.11 to 42.7.12 (#283)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02e70a785f816770fff48e07c7b6146144ba3d8c",
          "body": "…al (#282)\n\nCo-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update hibernate-validator from 8.0.4.Final to 9.1.1.Fin…",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0647c987750b830f27b536975378164c11543229",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update typesafe:config from 1.4.5 to 1.4.9 (#281)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8907f96f340115e020d452dfd4ff963a444372f7",
          "body": "Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "build(deps): update sbt-bloop from 2.0.6 to 2.0.19 (#280)",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-07-10T12:43:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "627887979b2c65aab4272c292b95343bd7e89fcc",
          "body": "Enables bloop as Metals' BSP backend for warm-daemon incremental\ncompiles during dev loop (no JVM boot/task-graph tax per compile).\nCI is unaffected — workflows invoke sbt directly, no bloop daemon\npresent on runners, and .bloop/.bsp configs aren't committed.\n\nCo-authored-by: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(build): add sbt-bloop plugin for local BSP compile server (#279)",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-05T05:43:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "871f6e5939001bc940388dbf5576d87c6eb5cbca",
          "body": "… exception (#278)\n\n* fix(ci): overlay the example's logback.xml in the scala-sbt template test\n\nFollow-up to the earlier banner-rendering discussion: the CI script\nonly copied test Scala sources into the scaffolded scala-sbt project,\nnever the example's own logback.xml — so the CI run used whatever\n[…]\nhe release\n'requires... MAJOR' — no longer accurate after this explicit call.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\n\n---------\n\nCo-authored-by: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): scala-sbt banner logback overlay + record v1.24.0 versioning…",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-05T03:46:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7dc90f1805515db1e8b8c0ced76a03af0961157c",
          "body": "CI finding: 'Template / java-maven' failed with NoClassDefFoundError:\ncom/fasterxml/jackson/annotation/JsonSerializeAs, deep in WireMock's\nJacksonAnnotationIntrospector static init during Gatling's forked test\nrun.\n\nRoot cause reproduced locally by replaying the exact CI template-\nscaffolding steps \n[…]\n simulations to completion\nwith 0 failed events. Full regression still green (673 unit + 44 IT,\nlint zero findings, MiMa 0 unfiltered problems).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(deps): revert jackson-core -> jackson-databind swap (#276)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8750ff4642768b192714e2c17f746bcea59f2351",
          "body": "CI finding: the 'Publish Local' job runs publishLocal/publishM2, which\ninvokes scaladoc generation — a path none of this feature's regression\nruns (compile/test/IntegrationTest) exercise. Scaladoc could never\nresolve [[IllegalStateException]] (java.lang, needs external-doc\nmapping) or the @throws No\n[…]\nthe ci-local version override)\nsucceeds locally; full regression still green (673 unit + 44 IT, lint\nzero findings, MiMa 0 unfiltered problems).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): resolve Scaladoc link failures under -Werror in Templates.scala",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "9d6b14da3c6f06864f449de39acd78d37ef02ad4",
          "body": "…ements\n\nMark tasks.md T001-T032 complete with commit references and evidence\nper task; add baseline.md capturing pre/post-feature coverage and\nwall-clock measurements (SC-006/T029/T004 support data).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): record 008 implementation progress and baseline measur…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "49805a378ca9d6d35af482cfeab0ac3f875f6c61",
          "body": "…eeder.apply\n\nBREAKING CHANGE: the Seq[String] and Seq[Map] apply() overloads (and\ncsv/ssv/tsv built on them) no longer take an implicit GatlingConfiguration\nparameter. Review discussion: the parameter was never read in either\nmethod body (flagged unused by -Wunused during #275) and was already\ninco\n[…]\n advisory (exit 0) locally.\n\nFull regression green: 673 unit + 44 IT; scalafix zero findings; MiMa\nreports 0 unfiltered problems against 1.23.0.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix!: remove dead implicit GatlingConfiguration from SeparatedValuesF…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d8e44a10e28460d2863777d2e370aae319477793",
          "body": "New rules: NoValInForComprehension, RedundantSyntax, ExplicitResultTypes,\nDisableSyntax.noXml, plus two DisableSyntax regexes — Thread.sleep\n(sleep-based synchronization banned per #109; LogCapture's bounded 1 ms\npoll probe carries a justified suppression) and println (use the\nlogger). Auto-fixes la\n[…]\nified: zero findings on the branch; seeded println + Thread.sleep\nboth flagged naming the rule; full suite green (673 unit + 44 IT);\nMiMa clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(lint): extend the scalafix rule set (#273)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "889829879a53a534550e634b98ec415467e710de",
          "body": "…pins (#276)\n\nReview findings: (a) a missing/renamed 'maintenance' milestone would\nfail the whole (already successful) Steward run — the gh pr edit now\nsurfaces a ::warning:: per PR instead; (b) the explicit pins of\npreviously-transitive versions (slf4j-api, config, json4s/pureconfig\nmodules) get a header note in Dependencies.scala — Steward bumps them\nindependently of their parents, reviewers must keep them in step.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): degrade steward milestone step gracefully, document version …",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ad3771f9d79dac3783dbb816615ab7e6eda061d0",
          "body": "…211)\n\nReview finding: between releasing the ephemeral port and connecting to\nit, the OS may hand the same port to another process, sending the\ncrash-branch tests down an unintended path (suspected source of a rare\nsuite flake — 18/20 in one SC-006 series, unreproduced under\ndiagnostics). closedPort() now double-checks that connecting is\nactually refused and retries with a fresh port (up to 5 attempts).\n10/10 targeted runs green.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(redis): close the port-reuse race in the crash-branch fixture (#…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dac50f2f61f3a7ccd9cc4a43d24401dd3d34b72b",
          "body": "Review finding: the step was silently dead on CI. (a) Without pipefail\n$? captured tee's exit code, always 0 — the step could never go amber\nand continue-on-error was decorative. (b) The workflow-level color env\n(sbt.color=true, FORCE_COLOR=1) wraps [error] lines in ANSI codes, so\nthe grep never mat\n[…]\ns plain MiMa log through the exact\ngrep/sed pipeline (colored: nothing; plain: annotation emitted) and a\npipefail status-capture probe (0 -> 1).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(ci): make the advisory MiMa step actually emit annotations (#274)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6d1b8e388821bdfbd862cf22c9a66e8672bb2d1f",
          "body": "Reshapes the Option.when/.map/.collect chain introduced by the lint\nremediation into an equivalent for-comprehension with an intermediate\nbinding and guard — drops the artificial (parts, nameValue) tuple.\nMaintainer style feedback; belongs with the #273 lint changes (fixup\nsquash was blocked by an external file-watcher re-dirtying the worktree\nmid-rebase — squash on PR merge instead).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "style(storage): prefer for-comprehension in CookieParser (#273)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aa79cfb98fee610f358349041f2a5468b1e86b82",
          "body": "…#276)\n\nsbt-explicit-dependencies 0.3.1 (sbt 1.12.13 compatibility verified) as\na REPORT-ONLY task — never CI-gated (clarification Q4), run manually\nbefore each release. Triage to zero findings: direct bytecode deps\ndeclared explicitly (json4s modules replace the unused json4s-jackson\numbrella; pure\n[…]\no.gatling (host\nruntime is a deliberate maintainer decision). Full suite green after\nthe dependency-graph changes: 673 unit + 44 IT; MiMa clean.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(deps): steward milestone wiring and dependency-hygiene report (…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "64c580d9b0baf3df8458b8bc88e90cf099e41c42",
          "body": "scalacOptions gain -Xlint:_,-infer-any, -Wdead-code and -Werror on all\nscopes (Compile/Test/IntegrationTest), always on — local == CI.\nDocumented exclusion: infer-any (heterogeneous Map[String, Any] feeder\nrecords are the library's domain type). Remediation: four unused\nimports dropped; SeparatedVal\n[…]\nlation; a narrow\n@nowarn(cat=other-match-analysis) escape compiles. Full suite green\nunder -Werror: 673 unit + 44 IT. Docs: TESTING.md gate row.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(diagnostics): escalate curated compiler warnings to errors (#275)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bd69305d519141d129de4e900850b50736e2ea2d",
          "body": "sbt-mima-plugin 1.1.6, baseline org.galaxio %% gatling-picatinny %\n1.23.0 (clean pass). ADVISORY per clarification 2026-07-04: never fails\nthe build. Local: mimaFindBinaryIssues (prints findings, exits green).\nCI: new binary-compat job runs mimaReportBinaryIssues under\ncontinue-on-error and re-emits\n[…]\nNG.md gate row; AGENTS.md Release Process gains three\nentries (review warnings before tagging, run hygiene report, bump\nbaseline after release).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(compat): add advisory MiMa binary-compatibility check (#274)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0194b0a6997dfd414a2249908389add78b6450f5",
          "body": "sbt-scalafix 0.14.7 with SemanticDB on all scopes; rules: DisableSyntax\n(no return/asInstanceOf/isInstanceOf/finalize + a nullComparison regex\nper the AGENTS.md idiom rules — full noNulls would bury real findings\nunder JVM-interop suppressions), ProcedureSyntax, RemoveUnused (fed by\nnew -Wunused fla\n[…]\nmmands mirror.\nSeeded probes: null comparison fails naming rule/file/line; unused\nimport auto-removed by the fix command; fix+format idempotent.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "build(lint): add scalafix idiomatic lint gate (#273)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2a9b34db065784d18fa3297ff347a5e31a02af12",
          "body": "Real resource template through the production Templates path, resolved\nagainst a real Gatling session (loadForTest bootstrap, no mocked\nruntime): exact rendered output asserted byte-for-byte plus the\nmissing-session-variable failure naming the variable.\n\nIssue narrowed: JWT integration coverage land\n[…]\nconforms to the constitution's container-backed layer — verified green\nas part of this change. The template pipeline was the last remaining\ngap.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(templates): end-to-end template render coverage (#81)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b712cc0f903ecaf79bce5b89f8b1f02972766f63",
          "body": "RandomFeedersSpec now pins minSuccessful and maxDiscardedFactor via an\nexplicit PropertyCheckConfiguration instead of inheriting drifting\nScalaCheck defaults; the discard budget covers the suite's heavy\nwhenever-filters. Shrink verified: a deliberately failing length\nproperty reports the minimal boundary counter-example ('3 was not less\nthan 3'), not a long random sample.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(feeders): explicit property-check configuration (#121)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aa84d987af63c8431c30732b0006557cf779e018",
          "body": "All 5 asInstanceOf sites replaced with a ClassTag-guarded extraction\nhelper: a shape mismatch now fails with 'expected <type> but got\n<type>: <value>' instead of a bare ClassCastException. Negative case\nincluded (wrong-type extraction produces the descriptive message).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): typed extraction in Redis integration spec (#110)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8c44eac75c8e02ca9b7d9f5674621a8795189ceb",
          "body": "The missing-file case used a hardcoded absolute /tmp path — race-prone\nunder parallel runs and non-portable on Windows. It now derives the\npath from a per-run Files.createTempDirectory with cleanup.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): isolate storage specs in per-run temp dirs (#108)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0028eab7e2c8b7ab7c93869062b62a350ce3d201",
          "body": "- TemplatesSpec: drive the production Templates discovery (via\n  GatlingTestBootstrap providing Predef._configuration) instead of a\n  local re-implementation of the directory walk; mutation-probed\n  (broken production discovery turns the suite red).\n- NIR/NIF/PSRNSP: independent check-digit oracles \n[…]\nrect modes pinned (NEVER returns the 302 itself, NORMAL follows\n  to the exact final body).\n\nCoverage: 77.75/68.29 -> 78.77/69.97 (stmt/branch).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(test): de-tautologize suites and cover failure paths (#211)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d7cda80e22612603ebf3ed59c49c1f6b1ed1761c",
          "body": "…icy (#80)\n\nData-driven per constitution III: measured 77.75% stmt / 68.29% branch\n(2026-07-04, unit+it, benchmarks excluded) -> floors 75/66, within the\n5-point slack rule. Ratchet policy documented in TESTING.md (floors only\nmove up, no padding, shared benchmark exclusion); floor references\nupdated in AGENTS.md and constitution (v1.1.4, PATCH). Negative probe\nverified: floor 80 fails the build with 'Coverage minimum was not\nreached'.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(coverage): ratchet floors to 75/66 and document the ratchet pol…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1a62141fbfba2c46d3557388663b9c359f7f584",
          "body": "Shared benchmark-exclusion definition (files .*Benchmark.*, package\norg.galaxio.gatling.jmh.*) drives coverageExcludedFiles/Packages; the\nsame definition will feed the scalafix and -Werror source filters\n(FR-022). Honest post-exclusion measurement: 77.75% stmt / 68.29%\nbranch (was 75.77% stmt with benchmarks inflating the denominator).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(coverage): exclude benchmark sources from coverage (#210)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "694ab98c7f5697e32eec5e390c19e26779bfd0af",
          "body": "Milestone v1.24.0 (Coverage & test infra): spec with 8 user stories\n(coverage honesty, de-tautologization, integration gaps, test hygiene,\nscalafix lint gate, advisory MiMa check, strict diagnostics, dependency\nautomation), clarifications, plan with Test Model and constitution\ncheck, research R1-R9 \n[…]\nAnalysis findings I1-I6/A1-A2/C1-C4/U1\nremediated (real file paths, existing workflow/spec reuse, MiMa\nadvisory mechanism, both redirect modes).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(speckit): add 008-coverage-test-infra spec/plan/tasks",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-04T20:19:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7a9c74491b38870382d287665893892eef457a02",
          "body": "Metals MCP generates .bloop/, .metals/, metals.sbt, and .mcp.json under\nthe workspace and nested project/ dirs during BSP import; none are\nmeant to be checked in.",
          "is_bot": false,
          "headline": "chore(gitignore): ignore metals/bloop build-tool artifacts",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-03T02:35:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e94cb2ff8d99b3f9d90d8e00b869583f89572d1b",
          "body": "save/restore activeQueue instead of unconditional remove(), so a\ncapture window opened while another capture is already active on\nthe same thread doesn't wipe the outer window's queue.",
          "is_bot": false,
          "headline": "fix(test): restore prior ThreadLocal on nested LogCapture.events",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-03T02:26:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56caded0a50cf88c9cfd0d9309d8d95608c1c08c",
          "body": null,
          "is_bot": false,
          "headline": "style: reformat LogCapture with scalafmt",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-07-03T02:26:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a33670d25dcf0d48df411cee3a2f96dfb1b2f86",
          "body": "…(#259)\n\nThread names are not unique across JVM pools and can be mutated by the\ntest runner at suite boundaries, causing CookieParserSpec to either\ncapture too many or too few WARN events (~4.5 % flake rate — 2 of 44\nCI jobs failed on distinct commits over the last 7 days).\n\nReplace @volatile var si\n[…]\nronized wrapper is\nretained for level save/set/restore serialisation.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_013wXdKX6iGMtGdLSWjfgCkm",
          "is_bot": false,
          "headline": "fix(test): replace thread-name filter with ThreadLocal in LogCapture …",
          "author_name": "Claude",
          "author_login": "claude",
          "committed_at": "2026-07-03T02:26:36Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "eaebb90e078b53a09686d7e0a3235efbccd38994",
          "body": null,
          "is_bot": true,
          "headline": "Add 'Reformat with scalafmt 3.11.1' to .git-blame-ignore-revs",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T09:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ba8f487f64de963588426cb35ce29004ca3f3c42",
          "body": "Executed command: scalafmt --non-interactive",
          "is_bot": true,
          "headline": "Reformat with scalafmt 3.11.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T09:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27de7b08cfa6f8d301f44f37b6a9869d7ab5b2f5",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update scalafmt-core to 3.11.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-30T09:27:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25bf60acab3391de3a4d4ffe089a162b019adf58",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update junit-jupiter to 6.1.1",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T22:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "99d53a39276cc8c8ff0ae3095425ad99e54fa5b6",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update iban4j to 3.2.13-RELEASE",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T22:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff4dcc633de6fdea169ca4f7679110b47ede4510",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update caelum-stella-core to 2.2.2",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T22:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e349cb788215291c1420e494cf796ef4061c8ea",
          "body": "…stions preset\n\nThe preset overwrites speckit-clarify / speckit-checklist and, as shipped, drops\nfirst-party governance steps. Re-apply them on top of the AskUserQuestion picker so\nthe upgrade is additive, not a regression.\n\n- Re-insert constitution.md loading (clarify step 2, checklist step 1).\n- R\n[…]\ned.\n- Mark both SKILL.md files as LOCAL PATCH so a future `specify preset add` is a\n  conscious re-clobber, not a silent governance regression.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(speckit): preserve first-party governance over the claude-ask-que…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:38:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "d51a2646ad1833b9659458ec49f96cae3ca34fdf",
          "body": "…-questions preset\n\nVendor the installed extension/preset payloads, the manifest, and the generated\nslash-command skills so the toolkit works on a fresh clone without re-running the CLI.\n\n- Extensions: worktrees (dango85/spec-kit-worktree-parallel v1.3.2), harness\n  (formin/spec-kit-harness v1.0.0).\n[…]\nmespace; changelog: empty `requires`, no speckit_version).\n- Cursor-only worktrees examples and stray upstream correspondence are not vendored.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(speckit): install worktrees + harness extensions and claude-ask…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:38:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "5d13e04d45851b4fad7312fe5f7f0086124b00f9",
          "body": "Per spec-kit's guidance, the extension/preset manifests, payloads and generated\ncommands are the shared record; only local-machine state is ignored. Narrow the\npreviously over-broad ignores (from 907908e) so payloads can be tracked, and stop\ntracking the local install metadata.\n\n- .gitignore: ignore\n[…]\nand .specify/presets (was: the whole payload trees + worktrees skills).\n- Untrack .specify/extensions/.registry (per-machine install metadata).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(speckit): narrow version control to the spec-kit idiom",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:38:06Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "39c72aaa4911f60358c2910df016d1bbb054bbea",
          "body": "…kage (#254)\n\nPer the linkage contract, a PR may merge with just a milestone — closing an\nissue is optional, and we never fabricate issues to satisfy the gate. The\nchecker was stricter than the contract: it hard-failed any PR that closed no\nissue, in both the --pr merge gate and the audit/tag-readin\n[…]\ng PR and, at tag\n  time, be closed.\n\nVerified: `--pr 253` now PASS (exit 0); `--for-tag v1.24.0` still blocks\n(exit 1) because PR #253 is OPEN.\n\nCo-authored-by: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(scripts): make issue closure optional on the PR side of check-lin…",
          "author_name": "John",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-29T21:30:17Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "83147b96e914d0362876bdbe0e6206d3cae4fa77",
          "body": null,
          "is_bot": true,
          "headline": "chore(deps): update hibernate-validator to 8.0.4.Final",
          "author_name": "github-actions[bot]",
          "author_login": "github-actions[bot]",
          "committed_at": "2026-06-29T11:40:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fc3330bd6857683cc877fc17cadef65d3a4a389",
          "body": "Adds the spec-kit `bug` (assess/fix/test) and `git` (commit/feature/initialize/\nremote/validate) extensions: registry entries in .specify/ plus their generated\nspeckit-* skills.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(speckit): install bug and git extensions",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T19:44:34Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "55b8a38b9ddef3b5ba47570812de9fdd8eee27f5",
          "body": "Bumps the github-actions group with 2 updates: [EnricoMi/publish-unit-test-result-action](https://github.com/enricomi/publish-unit-test-result-action) and [actions/cache](https://github.com/actions/cache).\n\n\nUpdates `EnricoMi/publish-unit-test-result-action` from 2.9.0 to 2.24.0\n- [Release notes](ht\n[…]\nhe\n  dependency-version: '6'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump the github-actions group with 2 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-28T18:16:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2cb73ebff99c7cccf74a37ecc776c45c03c6f88d",
          "body": "Zero-token, deterministic gate for issue<->PR<->milestone linkage at release.\n\n- scripts/check-linkage.sh: --pr <N> gate one PR; --for-tag vX.Y.Z gate a\n  release (version -> its milestone, patch -> vX.Y.0); [milestone]/--tag audit.\n- .claude/hooks/linkage-guard.sh: PreToolUse(Bash) guard, fires onl\n[…]\nker blocks tags.\n- .claude/settings.json: registers the guard.\n- AGENTS.md: restore concise Milestones (ALWAYS) section (drop #244/#246 prose).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: linkage gate — check-linkage.sh + tag-only guard hook",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T17:48:10Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c24e0f47a39457861b4e31833ceb953ed06c0950",
          "body": "…#245)\n\nVerifies every milestone PR has a closing issue in the same milestone;\nwith --tag, asserts all issues closed and all PRs merged before a release tag.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore(scripts): add check-linkage.sh enforcing the linkage contract (…",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:39:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07bb60ac1a6444a12ed9343c078bdc33dce6c856",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agents): add concise issue/PR/milestone linkage contract (#245)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:39:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a77e683335a2db62d1fa991941df4c63c018e9fa",
          "body": "PR #244 duplicated existing milestone rules in prose and added an\nunenforced 'before tagging' bullet. Replaced by a concise entity\ncontract plus an executable check (scripts/check-linkage.sh).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "revert: drop over-verbose milestone/issue linkage block (#244)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:39:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "90950b36251aecc019e51a74e12d426e625a13bd",
          "body": "Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs(agents): require milestone + issue linkage before release tag",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T08:18:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "987ed96a9dfd46c950c341b93e9837bc28126699",
          "body": "boolean and gender tests drew unseeded ThreadLocalRandom samples and asserted\nevery possible value appeared (P(fail) ~ 1e-30 / 1e-18). Faker generators are\nnot seedable, so deterministic full-coverage isn't possible here: boolean\nbecomes a smoke test (samples without error); gender keeps a deterministic\ndomain-validity guard (every draw is a valid Gender — also catches a future\nsealed variant). Reuse the shared sampleCount constant.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: de-flake Faker boolean/gender coverage tests",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T07:31:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9a340f2a7ea1b9db0564559f323e29cb14a20c2b",
          "body": "ExampleSmokeSpec lived in the library's src/test under an `examples`\npackage but was a 521-line unit suite re-asserting feeder behavior that\nis already covered by RandomFeedersSpec, GeneratedFeederSpec, and\nSeparatedValuesFeederSpec. It had no Mocks/ActorSystem harness, no real\nSimulation, and no se\n[…]\nampleSmokeSpec\nreference from TESTING.md layer 2 (it never used the Mocks harness that\nlayer requires); keep TransactionsSpec as the reference.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test: remove mislabeled ExampleSmokeSpec unit suite",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T07:19:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7dccce116f133d4ec5f30c3dd68f2d5d0c31a95c",
          "body": "CookieParserSpec \"warn and drop a non-numeric Max-Age\" was flaky on the\nJava-17 CI job: it intermittently captured 0 WARN lines instead of 1\n(\"0 was not equal to 1\"). Root cause is a logback COWArrayList data race,\nnot a cookie-parsing bug.\n\nLogCapture attached/detached its appender to org.galaxio.g\n[…]\n000 captures under heavy foreign\nload); full `sbt test` green (825 passed) across 4 fresh runs.\n\nCookieParser production behavior is unchanged.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "test(testutil): make LogCapture deterministic under parallel suites",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T06:52:07Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "1640b674ed3ea47fbf5cce49416622be082d85b8",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: slim README to overview + docs catalog; de-hardcode versions",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "03e21f2b2f317e34cc1f703e4b771b2a0e2ea7b3",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: link logging guide into the migration guide; tag HOCON snippet",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "08636fd228a50c0a2a0545124524b4142772eb96",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add examples & testing guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "7bcbe7a451794a154b671f54b8913fad661fa30a",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add migration guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3942f4aa319609b5f8a02a942c62b3a0a692ac36",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add assertions guide + deprecation notice (#234)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e21d21f3d3a16a1da3cfd4076c2e6841c28f9ed8",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add profile guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "23cff8039e4befa82826c729f63408b4f89c28a5",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add templates guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9e456b7eb38465337863a73cf6e56d1b86b82526",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add Redis guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "215e749c1438900ee4a900a8e6141a771344fdf1",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add transactions guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0d58bfc870e4750087075adfde30e94435b5eac",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add JWT guide",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e9d0c9150094fb849fee8ef46123445a9a15e7c0",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add feeders guide (Faker API, legacy, Vault, CSV)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "977a64d85e890caa16fcb8efa8120f54ca9416c4",
          "body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "docs: add configuration guide (SimulationConfig)",
          "author_name": "John Axe",
          "author_login": "jigarkhwar",
          "committed_at": "2026-06-28T04:32:35Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 65,
      "commits_last_year": 292,
      "latest_release_at": "2026-07-21T21:36:20Z",
      "latest_release_tag": "v1.25.0",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 17,
      "days_since_latest_release": 5,
      "mean_days_between_releases": 3.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 50,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 1,
      "stars": 12,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-19",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 1,
        "total_forks": 1
      },
      "star_history": null,
      "open_issues_and_prs": 61
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 65616,
      "source_files_sampled": 235,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "AGENTS.md",
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 7798
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "scope": "repository_graph",
        "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": [],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 150,
        "open_issues": 61,
        "closed_ratio": 0.582,
        "closed_issues": 85,
        "closed_unmerged_prs": 11
      },
      "bus_factor": 1,
      "bot_contributors": 2,
      "top_contributors": [
        {
          "type": "User",
          "login": "jigarkhwar",
          "commits": 263,
          "avatar_url": "https://avatars.githubusercontent.com/u/11795372?v=4"
        },
        {
          "type": "User",
          "login": "claude",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
        },
        {
          "type": "User",
          "login": "Leonard013",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/95079472?v=4"
        },
        {
          "type": "User",
          "login": "chepk",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/41194083?v=4"
        }
      ],
      "contributors_sampled": 4,
      "top_contributor_share": 0.989
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release.yml",
        "scala-steward.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 3,
            "reason": "branch protection is not maximal on development and all release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 1,
            "reason": "Found 1/8 approved changesets -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 1,
            "reason": "dependency not pinned by hash detected -- score normalized to 1",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "1d1fe982f7691de288726629e51088064c7c49c3",
        "ran_at": "2026-07-27T01:01:10Z",
        "aggregate_score": 5.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-26T12:42:49Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-21T20:30:24Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 11,
          "created_at": "2025-02-05T11:03:15Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 79,
          "created_at": "2026-05-25T22:52:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 83,
          "created_at": "2026-05-25T22:53:03Z",
          "last_comment_at": "2026-06-21T05:37:28Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 84,
          "created_at": "2026-05-25T22:53:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 85,
          "created_at": "2026-05-25T22:53:07Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 86,
          "created_at": "2026-05-25T22:53:08Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 90,
          "created_at": "2026-05-25T22:53:15Z",
          "last_comment_at": "2026-06-21T05:37:29Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 91,
          "created_at": "2026-05-25T22:53:17Z",
          "last_comment_at": "2026-06-21T05:37:30Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 92,
          "created_at": "2026-05-25T22:53:18Z",
          "last_comment_at": "2026-06-21T05:37:32Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 95,
          "created_at": "2026-05-25T22:53:24Z",
          "last_comment_at": "2026-06-21T05:37:33Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 96,
          "created_at": "2026-05-25T22:53:25Z",
          "last_comment_at": "2026-06-21T05:37:34Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 97,
          "created_at": "2026-05-25T22:53:27Z",
          "last_comment_at": "2026-06-21T05:37:35Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 98,
          "created_at": "2026-05-25T22:53:28Z",
          "last_comment_at": "2026-06-21T05:37:37Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 99,
          "created_at": "2026-05-25T22:53:31Z",
          "last_comment_at": "2026-06-21T05:37:38Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 100,
          "created_at": "2026-05-25T22:53:33Z",
          "last_comment_at": "2026-06-21T05:37:39Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 101,
          "created_at": "2026-05-25T22:53:34Z",
          "last_comment_at": "2026-06-21T05:37:40Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 102,
          "created_at": "2026-05-25T22:53:36Z",
          "last_comment_at": "2026-06-21T05:37:41Z",
          "last_comment_author": "jigarkhwar"
        },
        {
          "number": 103,
          "created_at": "2026-05-25T22:53:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 104,
          "created_at": "2026-05-25T22:53:39Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 105,
          "created_at": "2026-05-25T22:53:41Z",
          "last_comment_at": "2026-06-21T05:37:42Z",
          "last_comment_author": "jigarkhwar"
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/galax-io/gatling-picatinny",
    "host": "github.com",
    "name": "gatling-picatinny",
    "owner": "galax-io"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 55,
        "vitality": 86,
        "community": 32,
        "governance": 42,
        "engineering": 75
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 86,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "commits_last_year": 292,
              "human_commit_share": 0.76,
              "days_since_last_push": 5,
              "active_weeks_last_year": 17
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "17/52 weeks with commits",
                "points": 11.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 17
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "292 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 292
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 65,
              "latest_release_tag": "v1.25.0",
              "releases_from_tags": false,
              "days_since_latest_release": 5,
              "mean_days_between_releases": 3.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "65 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 65
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 5 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~3.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 3.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": 5,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 5 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "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": 32,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 17,
            "inputs": {
              "forks": 1,
              "stars": 12,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "12 stars",
                "points": 16.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 42,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 15,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 4,
              "top_contributor_share": 0.989
            },
            "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 99% of commits",
                "points": 0.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "4 contributors",
                "points": 5.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "moderate",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "merged_prs": 150,
              "open_issues": 61,
              "closed_issues": 85,
              "issue_closed_ratio": 0.582,
              "closed_unmerged_prs": 11
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "58% of issues closed",
                "points": 27.2,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 58
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "150/161 decided PRs merged",
                "points": 35.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 150,
                      "decided": 161
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/8 approved changesets -- score normalized to 1",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "followers": 18,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "galax-io",
              "public_repos": 15,
              "account_age_days": 1006
            },
            "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": "18 followers of galax-io",
                "points": 9.2,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 18,
                      "login": "galax-io"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "15 public repos, account ~2 yr old",
                "points": 14.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 15
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 2
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 75,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "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": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "gatling",
                "performance",
                "performance-testing",
                "gatling-plugin",
                "dsl",
                "feeders",
                "java",
                "jwt",
                "kotlin",
                "load-testing",
                "redis",
                "scala"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "12 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "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": "moderate",
        "name": "Security",
        "value": 55,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection is not maximal on development and all release branches",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "12 out of 12 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/8 approved changesets -- score normalized to 1",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 0.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "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": 67,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "AGENTS.md",
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 7798
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md, CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.md, CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "76 of 76 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 76,
                      "sampled": 76
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 52,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.73,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.02
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "Scala (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Scala"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "73 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 73,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "2 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 1",
                "points": 1,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Scala",
              "largest_source_bytes": 65616,
              "source_files_sampled": 235,
              "oversized_source_files": 1
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Scala (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Scala"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "1/235 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 235,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T01:01:29.571823Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/g/galax-io/gatling-picatinny.svg",
  "full_name": "galax-io/gatling-picatinny",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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

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

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