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

MohamedBenTaher / test-scale

Distributed HTTP load testing with YAML plans, autoscaling workers, and histogram-correct metrics.

Go · HTML · ShellMIT★ 1 estrella⑂ 0 forksdesde jun 2026Ver en GitHub ↗

MohamedBenTaher/test-scale tiene un índice de salud de 50 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es AI Readiness (86/100) y la más baja, Security (32/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

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

50
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

Mohamed Ben Taher Cuenta personal
59 seguidores30 repositorios públicosdesde may 2020

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

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
Gogithub.com/MohamedBenTaher/test-scalev0.1.1-2hace 16 días
npmwebsiteapunta a otro repositorio; no se puntúa0.1.112712hace 4822 díasscrapingweb

Métricas por categoría

Vitalidad

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

63Moderado · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
2.8/36Cadencia de commits — 4/52 semanas con commits
14.8/18Volumen de commits — 44 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year44
human_commit_share1
days_since_last_push5
active_weeks_last_year4
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
36/36Recencia de las versiones — última versión hace 16 días
12.6/27Cadencia de publicación — cadencia desconocida (una sola versión)
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count1
latest_release_tagv0.1.1
releases_from_tagsno
days_since_latest_release16
mean_days_between_releases

Comunidad y Adopción

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

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

Sostenibilidad y Gobernanza

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

36En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
0/38.3Aceptación de PR — sin PR decididos o sin datos
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues, Aceptación de PR. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
12.8/25Alcance del propietario — 59 seguidores de MohamedBenTaher
22.9/25Trayectoria — 30 repos públicos, cuenta de ~6 años
Datos de entrada utilizados
followers59
owner_typeUser
is_verified
owner_loginMohamedBenTaher
public_repos30
account_age_days2260
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.
Cómo se puntúa
25/25Publicado y resoluble — 1 paquete(s) en go
35/35Recencia de publicación — última publicación hace 16 días
12/20Historial de versiones — 2 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagesgithub.com/MohamedBenTaher/test-scale
ecosystemsgo
any_deprecatedno
min_days_since_publish16

Calidad de Ingeniería

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

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

Documentación

90Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://mohamedbentaher.github.io/test-scale/
10/10Descripción del repositorio
10/10Topics — 9 topics
0/10Wiki
Datos de entrada utilizados
topicsdocker, golang, grafana, http, kubernetes, load-testing, performance-testing, prometheus, yaml
has_wikino
homepagehttps://mohamedbentaher.github.io/test-scale/
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?

32En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — sin datos
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
5/5Packaging — packaging workflow detected
1.5/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
0/5SAST — no SAST tool detected
2/5Security-Policy — security policy file detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
3/7.5Vulnerabilities — 6 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,1
Excluidos de la puntuación (sin datos o no aplicable): ci_tests. Los pesos restantes se han renormalizado.
Cómo se puntúa
17.9/35Dependencias directas libres de avisos conocidos — 1 afectados: request 2.20.0 (moderate 6.1)
2.4/25Dependencias indirectas libres de avisos conocidos — 8 afectados: underscore 1.4.4 (critical 9.8), form-data 0.0.10 (high 7.5), hawk 0.10.2 (high 7.5), +5 más
15.2/40Sin avisos pendientes — 9 paquete(s) con avisos sin atender más allá de 90 días; el más antiguo publicado hace 3198 días
Datos de entrada utilizados
sourceosv
advisories18
affected_packages9
assessed_packages40
unassessed_packages0
affected_by_severitycritical 1, high 6, moderate 2
direct_affected_packages1
Se cotejó el cierre de dependencias en tiempo de ejecución de npm:website@0.1.1 —lo que arrastra la instalación del paquete publicado—: 40 paquetes. No se analiza la alcanzabilidad.

Preparación para IA

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

86Excelente · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — website/AGENTS.md, website/CLAUDE.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 44 de 44 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share1
agent_instruction_fileswebsite/AGENTS.md, website/CLAUDE.md
agent_instruction_max_bytes874
Cómo se puntúa
18/18Arranque con un solo comando — Makefile
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — website/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
9.1/10Práctica demostrada con agentes — 2 de los últimos 44 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
3/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 3
Datos de entrada utilizados
has_nixno
has_tests
lockfilesgo.sum, package-lock.json
has_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainerno
has_linter_config
typecheck_configswebsite/tsconfig.json
agent_commit_share0,045
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
55/55Tamaños de archivo manejables — 0/92 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes18.879
source_files_sampled92
oversized_source_files0
Cómo se puntúa
40/40Esquema de API (OpenAPI/GraphQL/proto) — docs/openapi.yaml
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_filesdocs/openapi.yaml

Datos clave

1estrellas de GitHub
1contribuidores
44commits en los últimos 12 meses
5días desde el último push
1versiones publicadas
1factor bus
0issues abiertas
Go, npmecosistemas de paquetes

Advertencias de recopilación de datos

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token
  • npm package 'website' points at a different repository (https://github.com/akoenig/node-website); excluded from ecosystem scoring
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 3.1 / 10
3.1agregado

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
n/dCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
10Packagingpackaging workflow detected
3Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 3
0SASTno SAST tool detected
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
4Vulnerabilities6 existing vulnerabilities detected
Dependencias directas 25
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/gin-gonic/ginv1.12.0go.mod
Gogithub.com/google/uuidv1.6.0go.mod
Gogithub.com/joho/godotenvv1.5.1go.mod
Gogithub.com/nats-io/nats-server/v2v2.14.2go.mod
Gogithub.com/nats-io/nats.gov1.52.0go.mod
Gogithub.com/prometheus/client_golangv1.23.2go.mod
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogo.opentelemetry.io/otelv1.44.0go.mod
Gogo.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpcv1.44.0go.mod
Gogo.opentelemetry.io/otel/metricv1.44.0go.mod
Gogo.opentelemetry.io/otel/sdkv1.44.0go.mod
Gogo.opentelemetry.io/otel/sdk/metricv1.44.0go.mod
Gogo.opentelemetry.io/proto/otlpv1.10.0go.mod
Gogoogle.golang.org/grpcv1.81.1go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gogorm.io/datatypesv1.2.7go.mod
Gogorm.io/driver/postgresv1.6.0go.mod
Gogorm.io/driver/sqlitev1.6.0go.mod
Gogorm.io/gormv1.31.2go.mod
npm@astrojs/markdown-satteri^0.3.4website/package.json
npm@astrojs/starlight^0.41.3website/package.json
npmastro^7.0.2website/package.json
npmastro-mermaid^2.1.0website/package.json
npmmermaid^11.16.0website/package.json
npmsharp^0.34.5website/package.json
Todas las dependencias no recopilado

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

Avisos de dependencias 9

Instalar npm:website@0.1.1 arrastra 40 paquetes, directos y transitivos: 9 tienen avisos conocidos, de los cuales 1 son dependencias directas.

PaqueteVersiónRelaciónGravedadAvisosCorregido en
underscore1.4.4indirectacrítica21.13.8
form-data0.0.10indirectaalta24.0.6
hawk0.10.2indirectaalta29.0.1
hoek0.7.6indirectaalta29.0.3
http-signature0.9.11indirectaalta10.10.0
mime1.2.11indirectaalta12.0.3
qs0.5.6indirectaalta56.14.1
request2.20.0directamoderada23.0.0
tunnel-agent0.3.0indirectamoderada10.6.0

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [
        "docker",
        "golang",
        "grafana",
        "http",
        "kubernetes",
        "load-testing",
        "performance-testing",
        "prometheus",
        "yaml"
      ],
      "is_fork": false,
      "size_kb": 721,
      "has_wiki": false,
      "homepage": "https://mohamedbentaher.github.io/test-scale/",
      "languages": {
        "Go": 283705,
        "CSS": 695,
        "MDX": 2234,
        "HTML": 43355,
        "Shell": 40229,
        "Makefile": 7125,
        "Dockerfile": 161,
        "JavaScript": 2820,
        "TypeScript": 269,
        "Go Template": 1834
      },
      "pushed_at": "2026-07-22T20:19:20Z",
      "created_at": "2026-06-29T15:14:44Z",
      "owner_type": "User",
      "updated_at": "2026-07-22T20:19:26Z",
      "description": "Distributed HTTP load testing with YAML plans, autoscaling workers, and histogram-correct metrics.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "HTML",
        "Shell"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Mohamed Ben Taher ",
      "type": "User",
      "login": "MohamedBenTaher",
      "company": null,
      "location": "Tangier Morocco",
      "followers": 59,
      "avatar_url": "https://avatars.githubusercontent.com/u/65641001?v=4",
      "created_at": "2020-05-20T03:33:42Z",
      "is_verified": null,
      "public_repos": 30,
      "account_age_days": 2260
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-07-12T11:25:56Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "a02f04116c50ece361145ab1ad58699d5777c85e",
          "body": "- Introduced a new document for the Web UI, detailing its features, authentication, and usage instructions.\n- Updated the README and other documentation to include links to the new Web UI guide for improved accessibility.\n- Enhanced the first-run guide to include steps for opening the Web UI after setup.\n- Updated the index and CLI documentation to reference the embedded Web UI, promoting its use for plan submission and monitoring.",
          "is_bot": false,
          "headline": "feat: add Web UI documentation and enhance navigation",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-22T20:19:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "447d9902d3790f949deabe436dea5ab43e6d7938",
          "body": "- Added `astro-mermaid` and `@astrojs/markdown-satteri` dependencies to support rendering of mermaid diagrams in markdown.\n- Updated `astro.config.mjs` to configure the mermaid integration and markdown processor.\n- Enhanced CSS styles for mermaid diagrams to ensure proper display and responsiveness.",
          "is_bot": false,
          "headline": "feat: integrate mermaid diagrams and markdown processing",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-22T19:46:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8dfc8dda2aa09cda9afb4269f052f3fdc6c9e10c",
          "body": "- Updated `golang.org/x/sync` from v0.20.0 to v0.21.0, `golang.org/x/text` from v0.37.0 to v0.39.0 in `go.mod` and `go.sum` for better compatibility and features.\n- Enhanced the `setup.sh` script to ensure the script directory is correctly determined, improving robustness in various environments.\n- Modified the `port_free` function in `up.sh` to streamline port availability checks, enhancing reliability in service startup.",
          "is_bot": false,
          "headline": "chore: update dependencies and improve setup script",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-22T19:35:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ad18f62be0bd1573798ed617513ecf57fcf2c75",
          "body": "- Updated the README to include a centered logo, title, and description for better presentation.\n- Added a favicon endpoint in the router for serving the new favicon.svg.\n- Introduced new SVG assets for the logo in light and dark themes.\n- Updated HTML templates to reference the favicon and improved logo display.\n- Enhanced the documentation site configuration to include the new favicon and logo assets.",
          "is_bot": false,
          "headline": "feat: enhance README and add favicon support",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-22T10:46:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b4202cec44986fc46a2384ae92b1cbd158f32a7",
          "body": "- Introduced new `docs-dev` and `docs-build` targets in the Makefile for local development and production builds of the documentation site.\n- Updated the README to include a link to the documentation site and instructions for running it locally.\n- Enhanced the first-run guide with a link to the online version of the documentation for easier access.\n- Improved the documentation index for better navigation and clarity on available resources.",
          "is_bot": false,
          "headline": "feat: add documentation site commands and enhance README",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-22T10:46:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9910ad19a1b9b4fc254ac7cef6aa39a868dd7d1c",
          "body": "- Updated documentation to recommend using environment variables for JWT and session tokens to enhance security and prevent credential exposure in version control.\n- Modified example YAML files to utilize `${TOURBA_JWT}` and `${SESSION_COOKIE}` placeholders instead of hardcoded values.\n- Added tests\n[…]\nnt variable expansion, ensuring proper handling of missing variables.\n- Implemented a function to expand environment variables in plan specifications, improving the flexibility of test configurations.",
          "is_bot": false,
          "headline": "feat: implement environment variable expansion for authentication tokens",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-12T10:51:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed1c4ed0818a34fa6ea92b2d6919602ed8f66efd",
          "body": "- Introduced a new `quickstart` target in the Makefile to streamline the initial setup and testing process.\n- Updated the help section in the Makefile to include instructions for the new `quickstart` command.\n- Modified the README to reflect the new quickstart process, emphasizing its role in runnin\n[…]\nlow to utilize the `quickstart` command for a more efficient setup in automated tests.\n- Improved error handling in scripts and added checks for required commands to ensure a smoother user experience.",
          "is_bot": false,
          "headline": "feat: enhance quickstart process and update Makefile commands",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-12T10:44:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f02bdc29734e4fdc77ef975c689f8a722415efed",
          "body": "- Modified the build command in the Docker script to include the worker service alongside the ctrl-plane.\n- Updated echo statements for clarity regarding the rebuilding process of both services.",
          "is_bot": false,
          "headline": "fix: update ctrl-plane build process to include worker",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-11T20:55:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66ea5cfe04c88b5c8de8fd760301f78653b77998",
          "body": "…lans\n\n- Added support for various authentication methods (bearer, jwt, cookie, session, header) in test plans.\n- Introduced structured JSON payloads for requests, allowing for better content-type management.\n- Updated documentation to reflect new auth and payload features, including examples.\n- Enhanced the UI to accommodate new auth fields and improve user experience in plan creation.\n- Implemented normalization of auth and JSON fields into headers and body during plan execution.",
          "is_bot": false,
          "headline": "feat: implement HTTP authentication and structured payloads in test p…",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-11T18:16:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "910ef98a240e10ee4b455db2dac42a645d0c48f5",
          "body": "- Changed Homebrew cask ID from 'cli' to 'default' for better clarity.\n- Refactored Makefile to use 'bash -c' for script execution, enhancing compatibility and reliability.\n- Removed cost estimation section from test plan configuration to streamline the setup.",
          "is_bot": false,
          "headline": "fix: update Homebrew cask ID and improve Makefile script execution",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-11T14:42:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe3420e0aa12faeb0448fe0c43d1de924b001a2e",
          "body": "Establish the safe, versioned distribution and operational contracts required for the first public release.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "feat: prepare v0.1.0 package release",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-11T14:07:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0e8d295f55d86058db005260eaf49a261e02ba1",
          "body": "- Added support for Ingress with cert-manager to enable external access to the control plane with TLS.\n- Updated Makefile with new targets for managing Ingress setup and verification.\n- Enhanced README and documentation to include instructions for using Ingress and TLS.\n- Modified smoke test scripts\n[…]\n- Updated Helm values to support Ingress configuration options, including TLS settings and host definitions.\n- Improved deployment models documentation to reflect the addition of Ingress capabilities.",
          "is_bot": false,
          "headline": "feat: implement Ingress and TLS support for Kubernetes deployment",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-10T20:45:26Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3a7286d63550cc4c28a9afa6cb5cc2eb38c2a5ce",
          "body": "- Added functionality for the orchestrator to replace dead workers mid-run by scaling up additional replicas and dispatching them with the remaining time.\n- Updated the `waitForReportsWithHeartbeats` method to handle worker replacements and ensure that the run can continue with partial data if neces\n[…]\nement feature and its implications for worker health assessment.\n- Added tests to validate the new worker replacement logic and ensure proper handling of heartbeats and reports from surviving workers.",
          "is_bot": false,
          "headline": "feat: implement mid-run worker replacement and enhance failure handling",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-10T20:38:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "92cd8278ef77365138379cfae9d135c19b78ad4f",
          "body": "The project uses GORM AutoMigrate, not SQL migration files. The COPY\nline caused ctrl-plane image builds to fail in CI smoke tests.\n\nCo-authored-by: Cursor <cursoragent@cursor.com>",
          "is_bot": false,
          "headline": "fix: remove missing migrations COPY from Dockerfiles",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-08T19:46:54Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "75fc179d967c0ecd5ebb0f02e38e9425a6acf10a",
          "body": "…ult interpretation\n\n- Added sections in README and functional overview to clarify the limitations of local stress tests and when to trust results.\n- Included guidance on interpreting results, deployment modes, and recommendations for obtaining trustworthy performance metrics.\n- Updated links in README for better navigation to the new content on interpreting results and limitations.",
          "is_bot": false,
          "headline": "docs: enhance README and functional overview with limitations and res…",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-08T19:41:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "411c2fe60a6dfa5b94a004952ca90e91ed1a7c3f",
          "body": "- Introduced new CLI commands for improved usability: `open` to launch the web UI, and aliases for existing commands.\n- Updated README and CLI guide with detailed instructions on using the CLI and environment variables.\n- Added a changelog to document notable changes and version history.\n- Enhanced \n[…]\nnning end-to-end tests.\n- Included a smoke test script for validating the Docker Compose setup.\n- Updated environment variable examples in `.env.example` for better clarity on optional configurations.",
          "is_bot": false,
          "headline": "feat: add CLI enhancements and documentation updates",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-08T19:10:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7e4c8b2298b41ae47fbe0a26a410bf3893b6f0e8",
          "body": "- Updated .env.example to include a demo verification token for safety checks.\n- Added Kubernetes build and deployment commands to the Makefile for easier management.\n- Enhanced Docker Compose configuration to serve the safety verification token.\n- Improved README with details on using the mock-targ\n[…]\nn Helm values for better resource management.\n- Added Prometheus metrics endpoint for monitoring KEDA scaling behavior.\n- Updated CLI commands to support JSON output and live watching of run statuses.",
          "is_bot": false,
          "headline": "feat: enhance Kubernetes integration and safety verification",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-08T15:08:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "338941d4253675d81107a9101a8f8946c3502f02",
          "body": "- Updated README to include cost estimation details in the UI and CLI.\n- Added cost estimation to run comparisons, displaying deltas in the UI.\n- Modified RunSummary to include EstimatedCost and updated related services.\n- Enhanced tests to validate cost delta calculations during run comparisons.\n- Improved UI elements to show estimated costs alongside performance metrics.",
          "is_bot": false,
          "headline": "feat: enhance cost estimation and comparison features",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-06T00:15:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f471746d27f9eeb87aff9a8a54cbbdff61e1a807",
          "body": "- Added support for optional plan name in CreateTestPlanInput and updated ToPlan method.\n- Modified RerunPlan handler to bind JSON input for run name.\n- Updated index.html to include a dropdown for selecting saved plans and a new input for plan name.\n- Implemented logic to load saved plans and apply their configurations when selected.\n- Improved form submission handling to accommodate saved plans and their attributes.",
          "is_bot": false,
          "headline": "feat: enhance plan creation and UI for saved plans",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-06T00:09:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bce2e9d3ee5f2239b3f5165b21e7a73c3de57a17",
          "body": "- StartWatchdog runs every 30s, cleans up runs stuck > 5min\n- FindStuckRuns queries DB for pending/running runs past cutoff\n- UpdateRunRef marks stuck runs as failed with completed_at\n- Prevents runs from being stuck forever if control plane restarts\n- Wired into ctrl-plane via go orch.StartWatchdog()",
          "is_bot": false,
          "headline": "feat: stuck-run watchdog — recovers from orchestrator crashes",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T21:32:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09ccce969b33d9f38ee97f1420061eff4a449a2a",
          "body": "- Re-run button on completed runs in Runs table\n- Calls POST /api/v1/plans/:id/runs, shows result in Submit tab\n- Stop-run button on running runs in Runs table\n- POST /api/v1/runs/:id/stop marks run as failed with completed_at\n- Service.StopRun only stops runs currently in 'running' status\n- Confirmation dialog before stopping",
          "is_bot": false,
          "headline": "feat: re-run from UI + stop-run API",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T21:19:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eff6c05d5b449190d8fa890bfd7b666fe2ad2ccc",
          "body": "- Introduced SetUIVersion function to set the version string displayed in the UI header.\n- Updated UI rendering to include the version information.\n- Modified HTML template to support dynamic version display.\n- Enhanced form submission and runs loading functionality for improved user experience.",
          "is_bot": false,
          "headline": "feat: add UI versioning to embedded header",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T20:57:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "182157dc1badd4a7e78be86c1d528fe003098c09",
          "body": "- HTMX 2.0: submit, runs table, cost estimate all use hx-* attributes\n- Template reduced from 720 to ~195 lines (JS from ~250 to ~50 lines)\n- Cost estimate card: live updates via hx-get on keyup\n- Runs table: auto-refresh every 10s via hx-trigger\n- Form POST uses ShouldBind for both JSON + URL-encoded\n- Flat SLO form fields (slo_p95_ms, slo_error_rate_max) accepted\n- Compare tab: cost delta shown alongside latency comparison",
          "is_bot": false,
          "headline": "feat: HTMX-powered UI with cost estimate integration",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T20:43:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0773cbb1f3985ccd08c42bad7b5b7600085c2ed1",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove accidentally committed coverage.out",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T20:27:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6215b0c8e726ab5421d56b32d911ff2ce74c7d9",
          "body": "- internal/cost/ with PriceProvider interface\n- StaticProvider: configurable hourly rate\n- AzureProvider: Azure Retail Prices API with 24h cache\n- Estimator: WorkersFor, Estimate, ActualCost\n- GET /api/v1/cost/estimate?target_rps=&duration_sec=\n- CostConfig in test-scale.yaml + env overrides\n- EstimatedCost in RunSummary (computed on-the-fly from worker-seconds)\n- Wired into ctrl-plane via service.WithCostEstimator()",
          "is_bot": false,
          "headline": "feat: cost estimation package with Azure + static providers",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T20:27:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "861a5865d968c51f9a5c7fea2053d36084a45dd2",
          "body": "- Implemented ListRuns handler to retrieve all runs.\n- Added slug generation for runs based on their names, ensuring uniqueness.\n- Updated service methods to support retrieval and management of runs by slug.\n- Enhanced tests to validate slug functionality and compatibility checks between runs.",
          "is_bot": false,
          "headline": "feat: add ListRuns endpoint and slug generation for runs",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T18:15:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eda8df8be11bfbe6810863b71e72ca8784597d18",
          "body": "- Compare tab: side-by-side runs with deltas and regression detection\n- Runs table: one-click 'Compare' button on each row\n- Cost estimate: live workers × duration calculation in Submit tab\n- CLI status: human-readable summary line with cost + SLO\n- Per-worker RPS 500, /bin/zsh.0001/sec/worker rate",
          "is_bot": false,
          "headline": "feat: compare UI tab + cost estimate",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T15:56:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a61cab35fbd0df61046032c87781ca45b9ac6d7",
          "body": "- Chart.yaml and values.yaml for test-scale Helm chart\n- keda-scaledobject.yaml: scales worker via Prometheus metric\n- Min: 0, Max: 500, cooldown 30s, Prometheus trigger\n- Configurable perWorkerRPS and replica counts",
          "is_bot": false,
          "headline": "feat: KEDA ScaledObject + Helm chart for Kubernetes mode",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T15:08:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8eb4a6758e603d3dbbbb536bb5455c3c2bcbcea2",
          "body": "- Workers support --crash-after 5s to simulate mid-run crash\n- Crash cancels load context, stops heartbeats, no report sent\n- Orchestrator detects via heartbeat timeout, collects remaining reports\n- Tests distributed system failure tolerance",
          "is_bot": false,
          "headline": "feat: chaos injection --crash-after flag on worker",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T15:07:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e35117fb38a679f07fab4ff6992a6d532ce8c74",
          "body": "- CI: go test -race on every push/PR with NATS service\n- Release: goreleaser on v* tags, publishes to Homebrew tap",
          "is_bot": false,
          "headline": "ci: add GitHub Actions test + goreleaser release workflows",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T15:06:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "838b0a90df421029c39e6e0fec970a861b72d2c0",
          "body": "- LoadGenerator.ExecuteLoadWithPattern accepts ramp profile\n- constant: fixed RPS (existing)\n- ramp: linear 0→target over duration\n- step: 50% for first 25%, then 100%\n- spike: burst at midpoint, 10% otherwise\n- RampPattern propagated through NATS StartMessage\n- Phase 0 runner and NATS agent both use pattern",
          "is_bot": false,
          "headline": "feat: linear ramp, step, and spike load patterns",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T15:05:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a6da81b6114d73280e7b167304ac951136d329a",
          "body": "- SLO model: p95_ms, error_rate_max on TestPlan\n- Auto-evaluate SLO on report creation (buildReport)\n- SLOPassed field on WorkerReport + RunSummary\n- Regression detection in CompareRuns (p95 > 20% baseline)\n- UI: SLO fields in submit form, pass/fail badges in runs table\n- CLI: compare --fail-on-regression exits non-zero",
          "is_bot": false,
          "headline": "feat: SLO gates + regression detection",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T14:49:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53d1724a3faba5211a4f89460888319c017ec2a4",
          "body": null,
          "is_bot": false,
          "headline": "docs: add installation, embedded UI, and dev sections to README",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T13:17:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f8093f638c57aa242bf402d3b5caa62522f8a26",
          "body": "- Embedded status page at / (submit, runs, Grafana dashboard)\n- .goreleaser.yaml for cross-platform releases\n- Auto-publish to homebrew-tap via goreleaser\n- setup.sh for one-liner Docker Compose install\n- --version flag on CLI",
          "is_bot": false,
          "headline": "feat: embedded UI, goreleaser, homebrew, setup script",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T13:10:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34596c9c759deb88b39713c735c8d420850892d1",
          "body": "…ence docs",
          "is_bot": false,
          "headline": "docs: add mermaid architecture diagrams, update README, publish refer…",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T12:30:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da59563cf8e90445b1f8f70f2811984f83d84833",
          "body": "- Changed target URL in test-plan.yaml to use a mock target for testing.\n- Added a new mock-target service in docker-compose.yml for local testing.\n- Refactored orchestrator to handle worker registrations more efficiently by removing unnecessary goroutines and subscribing to worker registration messages.\n- Updated the monitorRun function to include worker registration handling, improving orchestration logic.",
          "is_bot": false,
          "headline": "Update test plan configuration and enhance orchestrator functionality",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-05T10:55:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13f6db78be61f4122026930ac437aaea5ba393e8",
          "body": "- Introduced autoscaler backend configuration options in .env.example and test-scale.yaml.\n- Updated README.md to document new autoscaling features and usage instructions.\n- Modified control plane to integrate autoscaler for dynamic worker management based on target RPS.\n- Enhanced orchestrator to u\n[…]\nscaling with Docker Compose.\n- Refactored API handlers to improve run dispatch logic and error handling for worker availability.\n- Added tests to validate autoscaling behavior and orchestration logic.",
          "is_bot": false,
          "headline": "Enhance autoscaling functionality and update configurations",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-04T18:57:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "798678f31f5a27d07053ae9ea99c9b75a748676f",
          "body": "- Implemented ListTestPlans handler in API to retrieve all test plans.\n- Added RerunPlan handler to create a new run for a specified test plan.\n- Updated service layer with ListTestPlans method to fetch plans from the database.\n- Enhanced router to include new endpoints for listing and rerunning test plans.\n- Introduced new CLI commands for managing test plans and reruns.",
          "is_bot": false,
          "headline": "Add ListTestPlans and RerunPlan functionality to API and CLI",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-03T12:01:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a19bf808ae508208cadcdca471e100e9c24d8fe4",
          "body": "…strator\n\n- Added worker health gauge to monitor per-worker liveness in the aggregator.\n- Enhanced orchestrator to handle dispatch acknowledgments and worker heartbeats.\n- Introduced a worker tracker to assess worker health based on heartbeat timestamps.\n- Updated API handlers to return specific error messages when no workers are available.\n- Added new message types for heartbeats and dispatch acknowledgments in the queue.\n- Implemented tests for worker health tracking and heartbeat detection.",
          "is_bot": false,
          "headline": "Implement worker health tracking and dispatch acknowledgment in orche…",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-02T21:31:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6555c9eedd631dde7505af4d0761ae9c1a5742d0",
          "body": "- Added SAFETY_VERIFICATION_TOKEN to .env.example for target ownership verification.\n- Updated test-scale.yaml to include safety verification token configuration.\n- Refactored control plane to utilize safety verification token during run creation.\n- Enhanced service layer with verification logic for\n[…]\nerror handling for verification failures in service methods.\n- Updated model to include new error types for verification status.\n- Modified API router to accommodate changes in service initialization.",
          "is_bot": false,
          "headline": "Implement safety verification feature in control plane and service",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-02T20:25:48Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1617ffe0fc2aafd3c3491a3a97dfaa3968f1e32f",
          "body": "- Enhanced README.md to clarify test plan submission and run initiation.\n- Updated Docker Compose configuration to change Grafana port from 3000 to 3001.\n- Upgraded Go version in Dockerfiles for aggregator, control plane, and worker from 1.24 to 1.25.\n- Removed obsolete OpenTelemetry collector confi\n[…]\nemented new functionality in the control plane to create runs and return results upon submitting test plans.\n- Added tests for the new run creation and comparison features in the control plane client.",
          "is_bot": false,
          "headline": "Update README, Docker configurations, and control plane functionality",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-02T17:50:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0421f18193a25e1e2403cea48ad11029efe3f42e",
          "body": "- Updated .env.example to clarify metrics endpoint configuration.\n- Enhanced go.mod with new dependencies for OpenTelemetry metrics.\n- Added aggregator service to Docker Compose for metrics collection.\n- Introduced new API endpoint for comparing run metrics.\n- Implemented logic for calculating and r\n[…]\ns reporting and added percentiles to worker reports.\n- Enhanced tests for run comparison and metrics aggregation functionality.\n- Refactored existing code to integrate new metrics features seamlessly.",
          "is_bot": false,
          "headline": "Implement metrics aggregation and comparison features",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-07-02T11:07:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18ba3c6460b405a254ae89bfbc3cfb18b12fc091",
          "body": "- Integrated NATS messaging into the control plane and worker services.\n- Updated main function in control plane to include orchestrator for run dispatching.\n- Modified worker to support distributed mode with NATS, including signal handling for graceful shutdown.\n- Enhanced Docker Compose configurat\n[…]\nd updated environment variables.\n- Refactored API handlers to utilize a dispatcher for run management.\n- Added unit tests for new dispatcher functionality and updated existing tests for compatibility.",
          "is_bot": false,
          "headline": "Enhance control plane and worker functionality with NATS integration",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-06-30T09:10:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1eb97935aa2376932d2fc4b238a45104003b7b94",
          "body": "- Created .env.example for environment variable configuration.\n- Added .gitignore to exclude unnecessary files.\n- Initialized go.mod for dependency management.\n- Added Makefile for build and run commands.\n- Created README.md with project overview and quick start instructions.\n- Added test-plan.yaml \n[…]\ns and runs.\n- Implemented database connection and migration logic.\n- Added unit tests for API handlers and control plane client.\n- Established project structure for internal packages and CLI commands.",
          "is_bot": false,
          "headline": "Add initial project structure and configuration files",
          "author_name": "Mohamed Ben Taher",
          "author_login": "MohamedBenTaher",
          "committed_at": "2026-06-29T15:11:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 1,
      "commits_last_year": 44,
      "latest_release_at": "2026-07-12T11:25:56Z",
      "latest_release_tag": "v0.1.1",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 4,
      "days_since_latest_release": 16,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/MohamedBenTaher/test-scale",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/MohamedBenTaher/test-scale",
          "is_deprecated": false,
          "latest_version": "v0.1.1",
          "repository_url": "https://github.com/MohamedBenTaher/test-scale",
          "versions_count": 2,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-12T10:51:41Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 16
        },
        {
          "name": "website",
          "exists": true,
          "license": "MIT",
          "keywords": [
            "scraping",
            "web"
          ],
          "ecosystem": "npm",
          "matches_repo": false,
          "registry_url": "https://www.npmjs.com/package/website",
          "is_deprecated": false,
          "latest_version": "0.1.1",
          "repository_url": "https://github.com/akoenig/node-website",
          "versions_count": 2,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": 1,
          "monthly_downloads": 1271,
          "first_published_at": "2013-04-29T19:45:26.593000Z",
          "latest_published_at": "2013-05-14T20:47:23.347000Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4822
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 1,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [
        "docs/openapi.yaml"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [
        "website/tsconfig.json"
      ],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 18879,
      "source_files_sampled": 92,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        "website/AGENTS.md",
        "website/CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 874
    },
    "dependencies": {
      "manifests": [
        "go.mod",
        "website/package.json"
      ],
      "advisories": {
        "error": null,
        "scope": "published_package",
        "source": "osv",
        "findings": [
          {
            "name": "underscore",
            "direct": false,
            "version": "1.4.4",
            "severity": "critical",
            "ecosystem": "npm",
            "cvss_score": 9.8,
            "advisory_ids": [
              "GHSA-cf4h-3jhx-xvhq",
              "GHSA-qpx9-hpmf-5gmw"
            ],
            "fixed_version": "1.13.8",
            "advisory_count": 2,
            "oldest_advisory_days": 1908
          },
          {
            "name": "form-data",
            "direct": false,
            "version": "0.0.10",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-fjxv-7rqg-78g4",
              "GHSA-hmw2-7cc7-3qxx"
            ],
            "fixed_version": "4.0.6",
            "advisory_count": 2,
            "oldest_advisory_days": 371
          },
          {
            "name": "hawk",
            "direct": false,
            "version": "0.10.2",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-44pw-h2cw-w3vq",
              "GHSA-jcpv-g9rr-qxrc"
            ],
            "fixed_version": "9.0.1",
            "advisory_count": 2,
            "oldest_advisory_days": 2918
          },
          {
            "name": "hoek",
            "direct": false,
            "version": "0.7.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 8.8,
            "advisory_ids": [
              "GHSA-c429-5p7v-vgjp",
              "GHSA-jp4x-w63m-7wgm"
            ],
            "fixed_version": "9.0.3",
            "advisory_count": 2,
            "oldest_advisory_days": 3014
          },
          {
            "name": "http-signature",
            "direct": false,
            "version": "0.9.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-q257-vv4p-fg92"
            ],
            "fixed_version": "0.10.0",
            "advisory_count": 1,
            "oldest_advisory_days": 2817
          },
          {
            "name": "mime",
            "direct": false,
            "version": "1.2.11",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-wrvr-8mpx-r7pp"
            ],
            "fixed_version": "2.0.3",
            "advisory_count": 1,
            "oldest_advisory_days": 2929
          },
          {
            "name": "qs",
            "direct": false,
            "version": "0.5.6",
            "severity": "high",
            "ecosystem": "npm",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-6rw7-vpxm-498p",
              "GHSA-f9cm-p3w6-xvr3",
              "GHSA-gqgv-6jq5-jjj9",
              "GHSA-hrpp-h998-j3pp",
              "GHSA-jjv7-qpx3-h62q"
            ],
            "fixed_version": "6.14.1",
            "advisory_count": 5,
            "oldest_advisory_days": 3198
          },
          {
            "name": "request",
            "direct": true,
            "version": "2.20.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": 6.1,
            "advisory_ids": [
              "GHSA-7xfp-9c55-5vqj",
              "GHSA-p8p7-x288-28g6"
            ],
            "fixed_version": "3.0.0",
            "advisory_count": 2,
            "oldest_advisory_days": 2817
          },
          {
            "name": "tunnel-agent",
            "direct": false,
            "version": "0.3.0",
            "severity": "moderate",
            "ecosystem": "npm",
            "cvss_score": null,
            "advisory_ids": [
              "GHSA-xc7v-wxcw-j472"
            ],
            "fixed_version": "0.6.0",
            "advisory_count": 1,
            "oldest_advisory_days": 2611
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 6,
          "critical": 1,
          "moderate": 2
        },
        "advisory_count": 18,
        "affected_count": 9,
        "assessed_count": 40,
        "malicious_count": 0,
        "assessed_package": "npm:website@0.1.1",
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "go",
        "npm"
      ],
      "dependencies": [
        {
          "name": "github.com/gin-gonic/gin",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.12.0"
        },
        {
          "name": "github.com/google/uuid",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "github.com/joho/godotenv",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.1"
        },
        {
          "name": "github.com/nats-io/nats-server/v2",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v2.14.2"
        },
        {
          "name": "github.com/nats-io/nats.go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.52.0"
        },
        {
          "name": "github.com/prometheus/client_golang",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.23.2"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "go.opentelemetry.io/otel",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/metric",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/otel/sdk/metric",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.44.0"
        },
        {
          "name": "go.opentelemetry.io/proto/otlp",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.0"
        },
        {
          "name": "google.golang.org/grpc",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.81.1"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "gorm.io/datatypes",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.7"
        },
        {
          "name": "gorm.io/driver/postgres",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "gorm.io/driver/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        },
        {
          "name": "gorm.io/gorm",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.31.2"
        },
        {
          "name": "@astrojs/markdown-satteri",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.3.4"
        },
        {
          "name": "@astrojs/starlight",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.41.3"
        },
        {
          "name": "astro",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^7.0.2"
        },
        {
          "name": "astro-mermaid",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^2.1.0"
        },
        {
          "name": "mermaid",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^11.16.0"
        },
        {
          "name": "sharp",
          "manifest": "website/package.json",
          "ecosystem": "npm",
          "version_constraint": "^0.34.5"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "MohamedBenTaher",
          "commits": 44,
          "avatar_url": "https://avatars.githubusercontent.com/u/65641001?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "docs.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum",
        "package-lock.json"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": 10,
            "reason": "packaging workflow detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 3,
            "reason": "dependency not pinned by hash detected -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "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": 4,
            "reason": "6 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "a02f04116c50ece361145ab1ad58699d5777c85e",
        "ran_at": "2026-07-28T11:53:53Z",
        "aggregate_score": 3.1,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T06:48:54Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/MohamedBenTaher/test-scale",
    "host": "github.com",
    "name": "test-scale",
    "owner": "MohamedBenTaher"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 50,
      "inputs": {
        "security": 32,
        "vitality": 63,
        "community": 33,
        "governance": 36,
        "engineering": 84
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "moderate",
        "name": "Vitality",
        "value": 63,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 54,
            "inputs": {
              "commits_last_year": 44,
              "human_commit_share": 1,
              "days_since_last_push": 5,
              "active_weeks_last_year": 4
            },
            "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": "4/52 weeks with commits",
                "points": 2.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "44 commits in the last year",
                "points": 14.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 44
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "v0.1.1",
              "releases_from_tags": false,
              "days_since_latest_release": 16,
              "mean_days_between_releases": null
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "1 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 16 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 16
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "cadence unknown (single release)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "release_cadence_unknown",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 33,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 1,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "1 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 36,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "followers": 59,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "MohamedBenTaher",
              "public_repos": 30,
              "account_age_days": 2260
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "59 followers of MohamedBenTaher",
                "points": 12.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 59,
                      "login": "MohamedBenTaher"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "30 public repos, account ~6 yr old",
                "points": 22.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 30
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/MohamedBenTaher/test-scale"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 16
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 16 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 16
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "2 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 84,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 80,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "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": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "docker",
                "golang",
                "grafana",
                "http",
                "kubernetes",
                "load-testing",
                "performance-testing",
                "prometheus",
                "yaml"
              ],
              "has_wiki": false,
              "homepage": "https://mohamedbentaher.github.io/test-scale/",
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://mohamedbentaher.github.io/test-scale/",
                "points": 15,
                "status": "met",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "9 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 32,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 31,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 3.1
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow 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 3",
                "points": 1.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "6 existing vulnerabilities detected",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "at_risk",
            "name": "Dependency advisories",
            "note": "Matched the npm:website@0.1.1 runtime dependency closure — what installing the published package pulls in — 40 packages. Reachability is not analyzed.",
            "notes": [
              {
                "code": "advisories_scope_published",
                "params": {
                  "package": "npm:website@0.1.1",
                  "assessed": 40
                }
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 36,
            "inputs": {
              "source": "osv",
              "advisories": 18,
              "affected_packages": 9,
              "assessed_packages": 40,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 6, moderate 2",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: request 2.20.0 (moderate 6.1)",
                "points": 17.9,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "request 2.20.0 (moderate 6.1)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "8 affected: underscore 1.4.4 (critical 9.8), form-data 0.0.10 (high 7.5), hawk 0.10.2 (high 7.5), +5 more",
                "points": 2.4,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 8,
                      "packages": "underscore 1.4.4 (critical 9.8), form-data 0.0.10 (high 7.5), hawk 0.10.2 (high 7.5)"
                    }
                  },
                  {
                    "code": "advisories_affected_more",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "9 advisory-carrying package(s) unaddressed past 90 days; oldest published 3198 days ago",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 9,
                      "oldest": 3198
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 40,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "excellent",
        "name": "AI Readiness",
        "value": 86,
        "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": [
                "website/AGENTS.md",
                "website/CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 874
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "website/AGENTS.md, website/CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "website/AGENTS.md, website/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": "44 of 44 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 44,
                      "sampled": 44
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum",
                "package-lock.json"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [
                "website/tsconfig.json"
              ],
              "agent_commit_share": 0.045,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "website/tsconfig.json",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "website/tsconfig.json"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "2 of the last 44 commits agent-authored or agent-credited",
                "points": 9.1,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 2,
                      "sampled": 44
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 18879,
              "source_files_sampled": 92,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/92 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 92,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "good",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 80,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": [
                "docs/openapi.yaml"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "docs/openapi.yaml",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "docs/openapi.yaml"
                    }
                  }
                ],
                "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",
    "npm package 'website' points at a different repository (https://github.com/akoenig/node-website); excluded from ecosystem scoring",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T11:53:58.545310Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/m/MohamedBenTaher/test-scale.svg",
  "full_name": "MohamedBenTaher/test-scale",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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