Registro público
Informe de salud del softwareesquema 0.23.0 · métricas 1.13.0 · 2026-07-21 20:29 UTC

ktprime / emhash

Fast and memory efficient c++ flat hash table/map/set

C++ · CMIT★ 722 estrellas⑂ 73 forksdesde sept 2019Ver en GitHub ↗

ktprime/emhash tiene un índice de salud de 65 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (80/100) y la más baja, Security (47/100). Se actualizó por última vez hace 5 días. Una sola persona concentra la mayor parte del trabajo reciente.

65
global / 100
Moderado

Índice de salud del software

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

65
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

hybCuenta personal
63 seguidores35 repositorios públicosdesde feb 2012

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.

Métricas por categoría

Vitalidad

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

80Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 5 días
18.7/36Cadencia de commits — 27/52 semanas con commits
18/18Volumen de commits — 255 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year255
human_commit_share0,96
days_since_last_push5
active_weeks_last_year27
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
36/36Recencia de las versiones — última versión hace 6 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_tagv1.2.0
releases_from_tagsno
days_since_latest_release6
mean_days_between_releases

Comunidad y Adopción

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

72Bueno · 18% del índice global
Cómo se puntúa
46.4/60Estrellas — 722 estrellas
15.5/25Forks — 73 forks
6.4/15Observadores — 15 observadores
Datos de entrada utilizados
forks73
stars722
watchers15
growth_stateorganic
growth_factor_pct100
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
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributing
has_issue_templateno
has_code_of_conductno
has_pull_request_template

Sostenibilidad y Gobernanza

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

54Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
1.1/22.5Distribución de commits — el principal contribuyente firma el 95% de los commits
13.5/13.5Amplitud de contribuyentes — 19 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled19
top_contributor_share0,95
Cómo se puntúa
45.1/46.8Resolución de issues — 96% de issues cerradas
37.3/38.3Aceptación de PR — 41/42 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs41
open_issues2
closed_issues54
issue_closed_ratio0,964
closed_unmerged_prs1
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
13/25Alcance del propietario — 63 seguidores de ktprime
23.3/25Trayectoria — 35 repos públicos, cuenta de ~14 años
Datos de entrada utilizados
followers63
owner_typeUser
is_verified
owner_loginktprime
public_repos35
account_age_days5263
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

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

71Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 3 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — sin datos
Datos de entrada utilizados
has_ci
has_tests
has_editorconfig
has_linter_configno
has_precommit_configno
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: CI-Tests. Los pesos restantes se han renormalizado.
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

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

47En 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.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — sin datos
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — sin datos
0/5SAST — no SAST tool detected
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 — sin datos
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate4,7
Excluidos de la puntuación (sin datos o no aplicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, token_permissions. Los pesos restantes se han renormalizado.

Preparación para IA

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

58Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
38.3/40Historial de commits legible — 69 de 96 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,719
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
18/18Arranque con un solo comando — bench/Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — C++ (tipado estático)
0/10Entorno reproducible
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
8/8Mantenimiento automatizado — 4 de los últimos 100 commits son actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — sin datos
Datos de entrada utilizados
has_nixno
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_filesbench/Makefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0,04
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Pinned-Dependencies. Los pesos restantes se han renormalizado.
Cómo se puntúa
45/45Código verificable por tipos — C++ (tipado estático)
51.5/55Tamaños de archivo manejables — 10/156 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageC++
largest_source_bytes484.176
source_files_sampled156
oversized_source_files10
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

722estrellas de GitHub
19contribuidores
255commits en los últimos 12 meses
5días desde el último push
1versiones publicadas
1factor bus
2issues abiertas
ecosistemas de paquetes

Más detalle

Historial de estrellas y forks 722 ★ / 73 ⇿
722Estrellas
73Forks

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

012525037550062575072271322019-092023-022026-07

Cada punto abarca 7 días.

OpenSSF Scorecard 4.7 / 10
4.7agregado

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-21 20:29 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
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
n/dDangerous-Workflowno workflows found
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
n/dPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
n/dToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Todas las dependencias 0

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

RegistroPaqueteVersiónRelación
Avisos de dependencias sin evaluar

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

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 91176,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C": 485409,
        "C++": 2530544,
        "HTML": 336841,
        "CMake": 18392,
        "Shell": 25606,
        "Python": 2080,
        "Makefile": 3312,
        "JavaScript": 122941,
        "PowerShell": 11361
      },
      "pushed_at": "2026-07-16T13:48:22Z",
      "created_at": "2019-09-11T05:16:39Z",
      "owner_type": "User",
      "updated_at": "2026-07-16T13:48:45Z",
      "description": "Fast and memory efficient c++ flat hash table/map/set",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "C++",
      "significant_languages": [
        "C++",
        "C"
      ]
    },
    "owner": {
      "blog": null,
      "name": "hyb",
      "type": "User",
      "login": "ktprime",
      "company": null,
      "location": "GuangZhou-China",
      "followers": 63,
      "avatar_url": "https://avatars.githubusercontent.com/u/1461362?v=4",
      "created_at": "2012-02-22T14:04:15Z",
      "is_verified": null,
      "public_repos": 35,
      "account_age_days": 5263
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-07-15T14:13:24Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "912adcd6316cbfcda608458972ca2c7e2b96e4cb",
          "body": "After disabling prefetch with EMH_NO_READ_PREFETCH/EMH_NO_WRITE_PREFETCH macros,\nthe prefetch_read/prefetch_write/prefetch_heap_block functions had empty bodies\ncausing -Wunused-parameter warnings. Add (void)ctrl; in the else branch to suppress.",
          "is_bot": false,
          "headline": "fix: suppress unused parameter warning when prefetch is disabled",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T13:48:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "280842c5b7f7b34bd8e7b97ebe2c9847d2a7f0d3",
          "body": "Following martinus/unordered_dense experiments (E4), __builtin_prefetch in find\nhot paths hurts performance on modern CPUs because hardware speculation already\nissues the loads. Verified: no measurable improvement from prefetch in emhash.\n\nAdd EMH_NO_READ_PREFETCH/EMH_NO_WRITE_PREFETCH macros in con\n[…]\n\n- hash_table5.hpp: find_hash_bucket, find_or_allocate\n- hash_table7.hpp: prefetch_heap_block\n- hash_table8.hpp: prefetch_read, prefetch_write (already had macros)\n- hash_set8.hpp: prefetch_heap_block",
          "is_bot": false,
          "headline": "perf: disable prefetch by default in emhash5-8 (no performance gain)",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T12:55:40Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0d5fdc38f445eb7ce862d42bbd1fe117f14e6eb7",
          "body": "Three optimizations from martinus/unordered_dense (commit e5b9441):\n\n1. Short-key 4-7 bytes: two wyr4 reads instead of four wyr4 + shift/or\n   - a=wyr4(p), b=wyr4(p+len-4) instead of half-offset approach\n2. Long-key >96 bytes: 6-lane 96-byte loop doubles ILP vs 3-lane 48-byte\n   - 6 independent mix \n[…]\n  emhash5 Insert: 234ms -> 152ms (-35%)\n  emhash5 FindHit: 146ms -> 140ms (-4%)\n  emhash8 FindHit: 150ms -> 120ms (-20%)\n\nAll 25 ctest cases pass. Hash values change for 4-16 byte and >48 byte inputs.",
          "is_bot": false,
          "headline": "perf: adopt martinus wyhash optimizations from unordered_dense",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T12:47:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "02093de0d0fdb3d33f52d4efefdf5b41dc2d3ce4",
          "body": null,
          "is_bot": false,
          "headline": "style: re-format all headers with clang-format-20 for CI consistency",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T12:23:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73a41da8fc6c23298813e2feee0b6eeb12477e3a",
          "body": null,
          "is_bot": false,
          "headline": "style: clang-format all headers for format-check CI",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T12:17:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4be865a753145086378e59da40c731464e20d688",
          "body": null,
          "is_bot": false,
          "headline": "fix: update script to use renamed test_stress_correctness.cpp",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T12:16:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "506d1899211e846730c9cb9e9e9b109f7b37dcaa",
          "body": "…tion",
          "is_bot": false,
          "headline": "fix(clang-tidy): rename emh_wyp to EMH_WYP for constant naming conven…",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T12:12:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65d6e978547f801f5dd21961cb9859d50a767f4a",
          "body": "…unction\n\nAdd NOLINT comment for cppcoreguidelines-pro-bounds-pointer-arithmetic\nin config.hpp wyr3() - this is intentional low-level hash implementation",
          "is_bot": false,
          "headline": "fix(clang-tidy): suppress pointer arithmetic warning in wyhash wyr3 f…",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T00:29:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38ab5d2d03242e74629cdfb3063288622ce00392",
          "body": "- hash_table5: replace GCC-only __builtin_prefetch with cross-platform version (adds MSVC _mm_prefetch)\n\n- hash_table7: add prefetch_heap_block in find_filled_hash/find_filled_bucket/find_or_allocate collision chain loops\n\n- Reduces cache miss latency on long collision chains for both MSVC and GCC/Clang",
          "is_bot": false,
          "headline": "perf: add cross-platform prefetch to hash_table5/7 collision chains",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T00:12:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de6aaf0672373dcac21ad1bfbd30ea082fb06900",
          "body": "…8 maps\n\n- Rename test_emihmap4.cpp to test_stress_correctness.cpp (tests all 8 hashmap implementations)\n- Add per-implementation Mod2Hash collision tests for emhash6/7, emilib1/2/3\n- Add per-implementation LargeValue tests for emhash6/7, emilib1/2/3\n- Add imap1_sv/imap3_sv to AllIntStringMaps type \n[…]\ntest_emihmap4 -> test_stress_correctness\n- Delete test_runtime_stats.cpp (referenced non-existent API)\n- Remove WILL_FAIL from reproduce_emhash8_bug in CMakeLists.txt\n- clang-format all modified files",
          "is_bot": false,
          "headline": "test: rename test_emihmap4 -> test_stress_correctness, expand to all …",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-16T00:04:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7cab9771b8afa49b2a22de95f1c4522914a630da",
          "body": "- Add noexcept to safe const getters in hash_table8/hash_set8\n\n- Define RESERVE_SLOTS/PAIRS_CAPACITY_BUFFER replacing +2/+4 magic numbers\n\n- Add test_iterator_invalidation.cpp (96 cases, 3224 assertions)\n\n- Add C++20 to CI compat matrix and register new test in all CI jobs",
          "is_bot": false,
          "headline": "refactor: noexcept getters, named constants, iterator invalidation tests",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T23:54:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8231d3951bbc0b03a72caf3376e529d9102751c",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove deploy-docs workflow (not needed)",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T23:14:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a2df12f3a29c382bf06220ea3809201576c29104",
          "body": "- Remove trivial API smoke tests (operator[] default, contains/count, const iterator, empty iteration, etc.)\n\n- Add high-value tests: erase+reinsert oscillation (tombstone stress), overflow probe chain (Mod2Hash), group boundary sizes (14/15/16/29/30/31), copy-then-mutate capacity check, fuzz consistency vs unordered_map, reserve-to-capacity-boundary, clear+reuse lifecycle, moved-from state validation, string key lifecycle (copy/move/assign)",
          "is_bot": false,
          "headline": "refactor(test): rewrite test_emihmap4 with bug-focused test cases",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T14:30:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17d6c3cd6a63e2e58ae4834d02129e9ada7c0fd5",
          "body": null,
          "is_bot": false,
          "headline": "chore: add test_emihmap4.cpp to clang-tidy representative files",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T14:18:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9cb1e3ee25c2c2ed432f794008238f3c9c3edab",
          "body": "…ity calc\n\n- Use max(num_buckets*load_factor+4, num_filled+2) formula to match rebuild()\n\n- Preserves memory optimization while fixing small data size crash\n\n- Add test_small_data.cpp to CI for comprehensive edge case coverage\n\n- Fix clang-format violations across multiple files",
          "is_bot": false,
          "headline": "fix(hash_table8/hash_set8): correct copy ctor/assignment _pairs_capac…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T14:12:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "998f5c187e35bc0de934b4b4e762434b02919b47",
          "body": "…capacity\n\n- emihmap4: memset entire malloc buffer to avoid MSan use-of-uninitialized-value\n\n- hash_table8/hash_set8: use rhs._pairs_capacity directly in copy ctor/assignment\n\n- MSan CI: add halt_on_error=0:print_stats=1 for better diagnostics",
          "is_bot": false,
          "headline": "fix(msan): zero-init malloc buffer in emihmap4, fix copy ctor _pairs_…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T14:00:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6f7fe8fecc66eed9d4506eb604a9f9b62dbd7364",
          "body": null,
          "is_bot": false,
          "headline": "fix msvc ci",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T11:53:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "72e3203a8e7a612c9fddad278b30b31e5d07a31a",
          "body": null,
          "is_bot": false,
          "headline": "fix ci eror",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T11:43:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "546c3ff1b38ef0c27877b1044254d8bdb22b5eea",
          "body": "emilib4 uses lazy allocation, empty map has bucket_count()==0",
          "is_bot": false,
          "headline": "fix(test): allow bucket_count()==0 for lazy-alloc maps",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T11:40:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed743788a965288d4dd40c99b01cedc943863ee1",
          "body": "Rename inner 'loc' to 'slot_loc' to avoid -Wshadow warning",
          "is_bot": false,
          "headline": "fix(emihmap4): resolve variable shadowing warning",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T11:40:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d718a3de3e6b06fb6e7bd5e8d3b1358b4e549caf",
          "body": null,
          "is_bot": false,
          "headline": "fix:miss file head",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-15T11:34:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1b705655397674783e77e6633e69ca211020ae19",
          "body": "emilib4 uses lazy allocation, empty map has bucket_count()==0",
          "is_bot": false,
          "headline": "fix(test): allow bucket_count()==0 for lazy-alloc maps",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-14T13:45:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7294db039c1122c776053f5d98be9a51e3d1afb1",
          "body": "- Remove obsolete debug files in tests/archive/ and tests/debug/\n\n- Add new benchmark files for various performance comparisons\n\n- Format existing benchmark files\n\n- Add test_emihmap4.cpp and test_runtime_stats.cpp",
          "is_bot": false,
          "headline": "chore: cleanup debug files, add benchmarks and tests",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-14T13:40:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "18c977586bede3afc66c4cea2344a1bfff0acf12",
          "body": "- Add missing ccache installation step for macOS runners in asan job\n\n- Fix clang-format violations in hash_table7.hpp and test_small_data.cpp\n\n- Minor formatting updates in hash_table8.hpp, hash_set8.hpp, emihmap3.hpp",
          "is_bot": false,
          "headline": "fix(ci): add ccache installation for macOS in asan job",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-14T13:38:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "371332c91e7d5beb7969105fffac2d5a90d946d2",
          "body": "…gnment\n\nThe copy constructor and copy assignment operator were calculating _pairs_capacity using a formula (num_buckets * load_factor + 4) but clone() then overwrote it with rhs._pairs_capacity. This caused heap corruption when rhs had more elements than the calculated capacity.\n\nBug case: initiali\n[…]\nslots. clone() wrote 31 elements causing heap overflow.\n\nFix: use rhs._pairs_capacity directly for allocation.\n\nAdd test_small_data.cpp with comprehensive tests for sizes 1,2,3,5,7,8,9,15,16,17,31,32.",
          "is_bot": false,
          "headline": "fix(hash_table8/hash_set8): correct _pairs_capacity in copy ctor/assi…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-14T13:09:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3cf7fcbc3ae018683aff56fd116c574370cd86d9",
          "body": "…rable alignment\n\n- Place bitmask at the start of the single allocation, aligned to\n  EMH_MALIGN (default 16 bytes), followed by pairs and tail sentinels.\n- Keep object size unchanged by deriving both _bitmask and _pairs from\n  the allocation base instead of adding a new member.\n- Update alloc/dealloc, copy constructor, operator=, destructor, clone,\n  and rehash to use the front layout consistently.\n- Add EMH_MALIGN to hash_table6.hpp to match hash_table5/7.",
          "is_bot": false,
          "headline": "feat(hash_table6/7): move bitmask to front of allocation with configu…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-11T08:24:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67fafd31038dbd256807acb03b90504ab172e88a",
          "body": "- Add try_get/try_set/set_get/merge/erase_if to emilib hash maps/sets\n- Fix undefined _num_buckets usage in lru_size.hpp/lru_time.hpp rehash\n- Extend format-check to tests/ and broaden ASan coverage in CI\n- Harden MSan false-positive handling for libc++ iostream output\n- Apply clang-format across include/ and tests/ directories\n- Fix const-correctness and iterator conversion issues in hash_set/hash_table",
          "is_bot": false,
          "headline": "feat: extend emilib API, harden rehash, expand CI/format coverage",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-05T13:10:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "651ee7b7a1a6da293a52ca4ec73970ff7c80f20c",
          "body": null,
          "is_bot": false,
          "headline": "fix:some tips op",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T02:59:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4a3493f60f98a0a7ba38c1e13b632dd9d9ad972",
          "body": null,
          "is_bot": false,
          "headline": "Fix ccache config: CCACHE_HARDLINK=0 -> CCACHE_NOHARDLINK=true",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T02:50:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ed2764d819280f7d0c5dff7645671c9a9703717",
          "body": null,
          "is_bot": false,
          "headline": "fix clang format",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T02:45:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa66639250a7401f803794dad9adf1295b0c244d",
          "body": null,
          "is_bot": false,
          "headline": "Apply clang-format to all recently modified files",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T02:42:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e71c9e6739a68fa6bdfb24d9e9943e8240973cf",
          "body": "Add (void) casts where do_insert()/emplace() return values are\nintentionally ignored in constructors, range insert, and initializer-\nlist insert overloads across all hash map/set implementations.\n\nAlso add (void) casts to emplace() calls in test_sanitizer.cpp and\ntest_collision_hardening.cpp that intentionally ignore insertion\nresults, and fix 0xDEADBEEFu -> 0xDEADBEEFU literal suffix.\n\nBuild now compiles with zero warnings under -Wunused-result.",
          "is_bot": false,
          "headline": "Suppress -Wunused-result warnings on intentional nodiscard discards",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T02:32:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "222554d16261482b3bd3012fafdb5415079542e8",
          "body": "Reduce clang-tidy warnings from 63 to 0 across 14 test files:\n- Replace lowercase float/integer literal suffixes (f->F, u->U) in 6 files\n- Split multi-variable declarations (Map a, b -> Map a; Map b;) in 3 files\n- Add NOLINT annotations for test-specific patterns: intentional copies\n  for copy-seman\n[…]\ng-parentheses (doctest macro false positive)\n- Disable cert-msc32-c/cert-msc51-cpp (test reproducibility requires\n  fixed seeds)\n\nNo behavioral changes; all tests pass (crud, hashset, million-stress).",
          "is_bot": false,
          "headline": "Fix clang-tidy warnings and improve .clang-tidy configuration",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T02:03:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6d23afaae2198d95c5a67315b7eae922c67b267e",
          "body": "…ments\n\nRemove 60+ lines of commented-out dead code (asserts, returns, using\ndeclarations, conditional branches) across 15 header files that had\naccumulated from past debugging iterations. Replace 3 vague TODOs in\nlru_size.hpp / lru_time.hpp with descriptive comments; keep the one\nactionable TODO in\n[…]\ne8 kickout: note the split-index design where only _index[]\n  links are rewired while _pairs[] stays dense (iterator stability).\n\nNo behavioral changes; all tests pass (million-stress, hashset, crud).",
          "is_bot": false,
          "headline": "Clean up dead commented-out code and improve collision resolution com…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T01:12:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ec2339d5c333e14c3891c1bc945f4e808c70d6ea",
          "body": "Rename the private load-factor member _loadlf to _mlf across the 5\nfiles that used the non-standard name (hash_set2/3/4, lru_size,\nlru_time). The other 8 implementations already used _mlf, so this\nmakes the convention uniform across all 13 hash map/set headers.\n\nPrivate members only; no public API change. Verified via compilation\nand full stress + hashset test suites.",
          "is_bot": false,
          "headline": "Unify member variable naming: _loadlf -> _mlf",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T00:53:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27eb4b1009245f27f92355ecb1ec55b52221e77a",
          "body": "- New tests/stress/test_million_stress.cpp: 1M-element CRUD cycle\n  across all 7 maps and 5 sets (insert/find/erase-half/reinsert/\n  iterate/overwrite/clear). Runs in ~2s with 48.5M assertions.\n  Scale configurable via -DEMH_MILLION_N for sanitizer builds.\n- CMake: add emhash::emhash ALIAS target so\n[…]\nind_package consumers; tests/CMakeLists\n  respects the same option instead of hardcoding -msse2.\n- CI: wire test_million_stress into build, cmake, windows-msvc\n  (Release only), and gcc-versions jobs.",
          "is_bot": false,
          "headline": "Add million-element stress test and CMake improvements",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T00:48:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f19a5abc9b590c302be637bcb5e5474e1de83ddd",
          "body": "- Remove incorrect TODO suggesting value_type should be const KeyT;\n  C++ standard requires set::value_type to be Key (non-const)\n- Replace 22 C-style function casts (int(x), float(x), etc.) with\n  static_cast<T>(x) for type safety and consistency\n- Remove 7 undescriptive bare \"// TODO\" comments that added no value\n- Retain 4 TODOs with concrete implementation notes",
          "is_bot": false,
          "headline": "Clean up code: remove misleading TODOs and replace C-style casts",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-04T00:39:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "947ffac7bd86c1d94f1469b4524d3e065dd05d89",
          "body": "…sions",
          "is_bot": false,
          "headline": "Fix MSan false positives: add missing doctest and std::string suppres…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T13:24:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "959ee1b21bdd355a46acdffa462a7feb019f8aef",
          "body": "…rage",
          "is_bot": false,
          "headline": "Add copy constructor low load factor test for insert_unique loop cove…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T12:16:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0217a3f8bdc5a2867f785d22949658ad695ea87b",
          "body": null,
          "is_bot": false,
          "headline": "Add iterator::init() on end() test for _bmask=0 branch coverage",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T12:13:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3445b552229b3329736937d5795f884567167bf0",
          "body": null,
          "is_bot": false,
          "headline": "Add HashSet edge case tests for merge empty and copy from empty",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T12:08:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1e22768f09c5934ee1891aa6268c52b747f6ccd",
          "body": null,
          "is_bot": false,
          "headline": "Fix clang-format violations in emilib files",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T12:03:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1333e77978632f8945f8da6a92812197d258827",
          "body": "Convert (type)value casts to static_cast<type>(value) for better\ntype safety and consistency with modern C++ style. Changes in:\n- emihmap1.hpp, emihmap2.hpp, emihmap3.hpp (HashMap)\n- emihset2.hpp, emihset3.hpp (HashSet)\n- .gitignore updates\n\nNo functional changes, purely stylistic cleanup.",
          "is_bot": false,
          "headline": "Replace C-style casts with static_cast in emilib",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T11:58:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc6623dc82552394981196bd9e47cd97c264bb05",
          "body": "The next() function had wrong order: goto_next_element() then\n_bmask &= _bmask - 1. This cleared the NEXT element's bit after\nfinding it, causing erase_if and merge to skip every other element.\n\nThe fix: next() should only call goto_next_element() without any\nbit clearing, because it.erase() already\n[…]\nt() to find next filled\nbucket. If next() also clears a bit, it skips that element.\n\nTests: erase_if now correctly removes 50 even elements (not 25),\nmerge now correctly transfers 10 elements (not 5).",
          "is_bot": false,
          "headline": "Fix hash_set4 iterator next() causing erase_if/merge skip",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T11:53:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5aa21a500cd52670b8c99a5aa38328b2356eca08",
          "body": "erase_bucket (called by erase(iterator)) has a separate\nis_trivially_copyable branch from erase_key (called by erase(key)).\nPrevious test only covered erase_key path via key-based erase. New test\nuses iterator-based erase with CollisionHash to cover erase_bucket\noperator= path in hash_table7 line 1416, which had 0 executions in\ncoverage data.\n\nAll 209 tests pass (18044 assertions).",
          "is_bot": false,
          "headline": "Add iterator-based erase_bucket coverage for trivially copyable types",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T00:35:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "302bb25950a284593d4ec4d42ea898aa2ef27dcd",
          "body": "Covers the is_trivially_copyable() == true branch in emhash5/6/7 erase_bucket (operator= path instead of swap). Previous int-key tests didn't trigger main bucket promotion because key range < bucket_count meant no hash collisions.\n\nUses CollisionHash (k/4) to force keys 0-3 into bucket 0, then erase\n[…]\nbucket) to trigger promotion via operator= path. emhash8 excluded — its erase_bucket operates on _index, not _pairs, so no is_trivially_copyable branch.\n\n206 test cases, 18011 assertions, all passing.",
          "is_bot": false,
          "headline": "Add erase_bucket main bucket promotion test for trivially copyable types",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T00:25:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c48fcd5452085b8b7c20fd6682b8ce6235d68230",
          "body": "Covers the 'rhs.load_factor() < EMH_MIN_LOAD_FACTOR' branch in emhash5/6/7/8 operator= (lines 581-589 in hash_table5.hpp, etc). When source map is sparse, operator= takes a special path: clear + dealloc + rehash + insert_unique instead of bulk-copying buckets.\n\nThree scenarios:\n- copy assign to pre-filled dst (verifies old elements removed)\n- copy assign to empty dst\n- copy assign after mass erase (erase doesn't shrink buckets, load_factor drops)\n\n203 test cases, 17984 assertions, all passing.",
          "is_bot": false,
          "headline": "Add low load factor operator= coverage tests",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T00:22:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6e0acc7f1771f9b91be1d8a3a32f34cccd2f812",
          "body": "- rehash(0) on empty map: must not crash, allocates minimum buckets, map remains usable\n- rehash(0) on non-empty map: no-op (0 < _num_filled guard returns immediately), size and bucket_count unchanged\n\n191 test cases, 17812 assertions, all passing.",
          "is_bot": false,
          "headline": "Add rehash(0) boundary tests",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T00:20:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d1152b611815923dcade844ae1b91b8cc2c4d48",
          "body": "The erase_if tests in test_full_api.cpp and test_hashset.cpp were skipped with 'TODO: fix erase_if bug in emilib'. The root cause was actually emhash6/7's lazy _bmask init bug in erase(), now fixed. emilib's erase_if uses erase(it++) which is safe because _erase only modifies _states without moving \n[…]\ns of erase_if + re-insert)\n  - return value and idempotency (second erase_if on same predicate = 0)\n\n177 test cases in test_api_coverage (was 142), 88 in test_full_api (was 81+7 skipped). All passing.",
          "is_bot": false,
          "headline": "Add erase_if coverage tests (was skipped due to emhash6/7 erase bug)",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T00:19:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "91920ff8bb75d0c59ad73ec07e4fb41912aa1aea",
          "body": "- Add test_api_coverage.cpp to CI coverage job build and run steps (was missing from coverage measurement).\n\n- Add 7 new test categories to test_api_coverage.cpp covering:\n  - load_factor / max_load_factor / bucket_count (AllIntMaps)\n  - max_load_factor setter (EmhashIntMaps only — emilib's is a no-\n[…]\nsertions, all passing on MSVC Release.\n\nBenchmark job verified: CMake configures and builds successfully after debug target removal; emhash_bench runs and produces JSON output for 25% regression gate.",
          "is_bot": false,
          "headline": "Deepen test coverage: add test_api_coverage to CI, expand boundary tests",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T00:08:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8bd71bd640f89629e14425258406b61e4322f33c",
          "body": "…plate\n\n- Remove assert(!contains(key)) from insert_unique/do_unique in hash_table8/hash_set8: it triggered MSan false positives by reading potentially uninitialized _index memory, and negated the 20-40% performance advantage of insert_unique. The precondition is now documented-only with no runtime \n[…]\ne-merge checklist covering build, file tracking, sanitizer, and code quality.\n\n- Add tests/debug/README.md documenting tracked vs scratch files and conventions to prevent debug files from breaking CI.",
          "is_bot": false,
          "headline": "Quality improvements: fix MSan assert, expand merge tests, add PR tem…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-02T00:03:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "57ae2af80544626ad5404b1f68ae4fa075159887",
          "body": null,
          "is_bot": false,
          "headline": "fix ci error",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-01T23:53:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50da686615fe78ae0e6a675fa445373bbb33ceab",
          "body": "… scripts\n\nCMake configure failed on CI because debug targets referenced .cpp files that exist locally but are not committed. Removed the hard-coded debug targets and added a comment explaining how to build them locally.\n\nAlso added scripts/run_clang_tidy.sh, run_audit.sh, run_test_leak.sh which were missing from the repo but referenced by CI jobs.",
          "is_bot": false,
          "headline": "Fix CI: remove uncommitted debug targets from CMakeLists, add missing…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-01T23:20:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "573a11ebe9c5203b012b66891a720041f787a267",
          "body": "Root cause: emhash6/7 iterator uses lazy _bmask init for performance. When erase() called clear_bucket() before init(), the subsequent ++it triggered init() loading from the already-updated _bitmask where the current bucket was empty, making the lowest _bmask bit point to the NEXT element instead of\n[…]\nerase(rit) pattern; add assert to insert_unique/do_unique; add string key merge tests; enable previously skipped merge test cases; move clang-tidy CI job to ci.yml; add debug targets to CMakeLists.txt",
          "is_bot": false,
          "headline": "Fix emhash6/7 erase iterator skip bug and implement merge for all maps",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-07-01T23:08:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "159ea71246e56e162cad2da57367d4cd156ed1fe",
          "body": "…71d40a9\n\nbuild(deps): bump thirdparty from `bbdc474` to `71d40a9`",
          "is_bot": false,
          "headline": "Merge pull request #94 from ktprime/dependabot/submodules/thirdparty-…",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-01T12:17:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ae7b4f4a43d36939d240f7ca5bac2e77026fd21",
          "body": "…/upload-artifact-7\n\nbuild(deps): bump actions/upload-artifact from 4 to 7",
          "is_bot": false,
          "headline": "Merge pull request #96 from ktprime/dependabot/github_actions/actions…",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-01T12:17:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d27c9784b6f908df25f7bc53fca7bcab5325a923",
          "body": "…/action-download-artifact-21\n\nbuild(deps): bump dawidd6/action-download-artifact from 6 to 21",
          "is_bot": false,
          "headline": "Merge pull request #97 from ktprime/dependabot/github_actions/dawidd6…",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-01T12:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "73de90d5e827c19f52a1e650d0d69094794c414c",
          "body": "…/checkout-7\n\nbuild(deps): bump actions/checkout from 6 to 7",
          "is_bot": false,
          "headline": "Merge pull request #95 from ktprime/dependabot/github_actions/actions…",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-07-01T12:15:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7292e297b3d909a0cc8d40a24be802495ac7d57d",
          "body": "Bumps [dawidd6/action-download-artifact](https://github.com/dawidd6/action-download-artifact) from 6 to 21.\n- [Release notes](https://github.com/dawidd6/action-download-artifact/releases)\n- [Commits](https://github.com/dawidd6/action-download-artifact/compare/v6...v21)\n\n---\nupdated-dependencies:\n- d\n[…]\nme: dawidd6/action-download-artifact\n  dependency-version: '21'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump dawidd6/action-download-artifact from 6 to 21",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T07:47:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6373d4712dbff9e340754d76cbfc4657d3f4022c",
          "body": "Bumps [actions/upload-artifact](https://github.com/actions/upload-artifact) from 4 to 7.\n- [Release notes](https://github.com/actions/upload-artifact/releases)\n- [Commits](https://github.com/actions/upload-artifact/compare/v4...v7)\n\n---\nupdated-dependencies:\n- dependency-name: actions/upload-artifact\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/upload-artifact from 4 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T07:47:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3c7f5515fa34e782734ca42586bce708c44e33a",
          "body": "Bumps [actions/checkout](https://github.com/actions/checkout) from 6 to 7.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/v6...v7)\n\n---\nupdated-dependenc\n[…]\n:\n- dependency-name: actions/checkout\n  dependency-version: '7'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump actions/checkout from 6 to 7",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T07:47:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2e3989f29363a40863416e4d6d30807089efdec9",
          "body": "Bumps [thirdparty](https://github.com/ktprime/emhash-bench-deps) from `bbdc474` to `71d40a9`.\n- [Commits](https://github.com/ktprime/emhash-bench-deps/compare/bbdc4749c1adc4d25a56f25a6893778173fd12ff...71d40a91e56a09ed8641d0d1f8c4d41617637786)\n\n---\nupdated-dependencies:\n- dependency-name: thirdparty\n  dependency-version: 71d40a91e56a09ed8641d0d1f8c4d41617637786\n  dependency-type: direct:production\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "build(deps): bump thirdparty from `bbdc474` to `71d40a9`",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-01T07:47:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2f882063ebc4f81cbc6785a32f418deb4b760479",
          "body": null,
          "is_bot": false,
          "headline": "fix ci assert fail",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T13:11:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fb0cffac70bd2a633113e127c43ebfb3012fa9ef",
          "body": null,
          "is_bot": false,
          "headline": "fix ci assert fail",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T13:05:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34ec2258d719a466b41f1d58a6bb44c3411c2a1f",
          "body": null,
          "is_bot": false,
          "headline": "fix ci error",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T12:59:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8b983b57412af99f0497845e9ad52cc01dae70b",
          "body": "Ensure MsanStreamUnpoisoner is constructed after libc++\nstd::ios_base::Init by using init_priority(102), so that\nstd::cout/cerr/clog are fully initialized before unpoisoning.",
          "is_bot": false,
          "headline": "fix msan unpoison init priority",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T12:16:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2461c4fe5bd5b4585eccbfb455e9e4241e99cf75",
          "body": null,
          "is_bot": false,
          "headline": "remove explicit throws and add noexcept in emhash5-8 rehash/alloc paths",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T10:37:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ac8463d6a043164515e027001de46b959f46cf5",
          "body": null,
          "is_bot": false,
          "headline": "fix ci error",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T09:19:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7762560f210ce575fb600f9b76bcc9a66264a935",
          "body": null,
          "is_bot": false,
          "headline": "add ci file",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T08:34:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "919dc7f138becca6efe03655f94e0533a529e928",
          "body": null,
          "is_bot": false,
          "headline": "fix ci issuse",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T08:33:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0482f93f4939500c71b5747ecfbd30d521f95b05",
          "body": null,
          "is_bot": false,
          "headline": "fix:ci crashed",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T08:01:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d12da1b3fce990e84753038617393c5fdc68d6ae",
          "body": null,
          "is_bot": false,
          "headline": "fix:format include",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T06:37:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a66c1d5936d1ce17770ba33cd97484fbc30e655c",
          "body": "emihset2.hpp: break long try_emplace line and split single-line if\n(clang-format -i, pure whitespace).\n\nformat-check.yml: switch from clang-format-18 to clang-format-20 so CI\nmatches the local development environment. clang-format-20 is installed\nfrom the LLVM apt repository (not in Ubuntu 24.04 default repos).\nemihmap2.hpp and hash_table6.hpp need no changes under clang-format-20.",
          "is_bot": false,
          "headline": "style: fix clang-format violations and align CI to clang-format-20",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T01:39:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "525987802593f4fe17e704bf973ef1ce95aa7cae",
          "body": "Source headers (fix -Wshadow / -Wunneeded-internal-declaration):\n- hash_set8.hpp, hash_table8.hpp: rename `index` param to `slot` (param\n  shadowed member function name)\n- hash_set4.hpp: `static CTZ` -> `static inline CTZ` (Clang\n  -Wunneeded-internal-declaration in header)\n- emihmap1/2/3.hpp, emihs\n[…]\n (emhash5/6/7/8) instead of AllIntMaps\n\nVerified locally: g++ -std=c++17/23 strict warnings pass on all headers;\ntest_crud (63/63), test_sanitizer (58/58), test_bad_hash (12/12) pass\nunder ASan+UBSan.",
          "is_bot": false,
          "headline": "fix: resolve CI strict-warning failures across headers and tests",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T01:24:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf2e837a452e5d56c1cf6d79fc7ae234571845da",
          "body": "- Migrate verify/*.cpp tests into unit/ (doctest TEMPLATE) and memory/\n  (leak/sanitizer/lifecycle) directories with shared common/ headers\n- CI: keep C++17+C++23 only (drop C++20), add 80% coverage gate (bc -l),\n  benchmark regression gate (25% threshold, rolling baseline artifact),\n  ensure MSan c\n[…]\nhash_set2/4 (is_trivially_copyable guards, memcpy -> char* casts)\n- Archive obsolete debug/test_uint/test_asm into tests/archive/\n- merge() bug in emhash6/7 deferred (doctest::skip); to be fixed later",
          "is_bot": false,
          "headline": "refactor: restructure tests into unit/memory/stress/attack and harden CI",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-28T00:36:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f63bf896879602fc82f8664cbe414fb590b385d3",
          "body": "Remove more tracked files that should never be in version control:\n\nBuild directories (CMake-generated .vcxproj, .rule, .tlog, compiler ABI\ndetection files):\n- tests/vsbuild/ (806 files)\n- tests/build_attack/ (684 files)\n- tests/build_wsl/ (661 files)\n- tests/build_check/ (159 files)\n\nCompiled binar\n[…]\nh garbage name)\n\nUpdate .gitignore to add tests/build_attack/, tests/build_check/,\ntests/build_wsl/, tests/vsbuild/ to prevent future accidental commits.\n\nTotal: 2410 files removed (138738 deletions).",
          "is_bot": false,
          "headline": "chore: remove remaining build artifacts, binaries, and junk files",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-27T02:25:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "802bf35a7d9522eca4d7c80fa90703a14b829f42",
          "body": "Remove ~2779 build artifact files that were accidentally committed to\nthe repository across multiple directories:\n- build_asan/, build_ci/, build_verify/ (root-level CMake build dirs)\n- tests/CMakeFiles/, tests/build_msvc/, tests/build_bench/, tests/cov_build/\n\nThese are all CMake-generated files (c\n[…]\ny and\ncause noise in diffs.\n\nAlso add build_asan/, build_ci/, build_msan/, build_verify/ to .gitignore\nto prevent future accidental commits. The files remain on disk locally\n(only untracked from git).",
          "is_bot": false,
          "headline": "chore: remove tracked build artifacts and update .gitignore",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-27T02:08:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a1dc2c60d64ebb55de9c96f40d2be6ec268c9185",
          "body": "Add EMH_MSAN_UNPOISON macro to config.hpp that calls __msan_unpoison when\nMSan is active (no-op otherwise). Apply it in hash_key/hash_bucket for\nstd::string overloads across all hash table variants to mark string\nobjects and their heap data as initialized before hashing.\n\nThe CI MSan job uses -stdli\n[…]\n/MSan/Coverage)\n- Add cross-bucket copy and empty/single copy leak tests\n- Unify overflow guards in hash_table5/6/7/8 alloc_bucket\n- Remove redundant early bucket check in hash_table5 find_or_allocate",
          "is_bot": false,
          "headline": "fix: resolve MSan false positives with uninstrumented libc++ std::string",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-27T01:51:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a437344848514d58db50f3f1e8d49fa9c6c8dc28",
          "body": null,
          "is_bot": false,
          "headline": "Fix MSan use-of-uninitialized-value in hash_table5 find_or_allocate",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T16:08:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9512d4e0f42d10c5a203de42e993cfe3a8cfba5",
          "body": null,
          "is_bot": false,
          "headline": "clang-format: fix formatting in emilib and hash_table6",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T15:59:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54afb51d751c9d7999ff2efb59e7083006f92971",
          "body": null,
          "is_bot": false,
          "headline": "Add missing test_lifecycle_audit.cpp tracked by CI",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T15:53:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e12c982e84e1b5e03c97eaec75da81efa3d9f152",
          "body": "…sets",
          "is_bot": false,
          "headline": "Remove unnecessary sentinel placement-new/destructors in emilib maps/…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T15:48:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20f4889683fc1163e06ebff19e34123b07aba115",
          "body": "…ehash/destructor handle non-trivial sentinel",
          "is_bot": false,
          "headline": "fix: hash_set2 clone() include 2 tail sentinels in memcpy, emihmap1 r…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T14:37:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77ceae0945f221e19ec69839b3196ba955169044",
          "body": null,
          "is_bot": false,
          "headline": "fix: emihset2 clone() remove unnecessary sentinel destruct/reconstruct",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T14:27:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d82a70bbcf4f7be0b807936077588035a77bb3ae",
          "body": null,
          "is_bot": false,
          "headline": "fix: emihset2 clone() avoid double sentinel construction after rehash",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T14:25:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "430ae71a4b90d03afae9b8e77e60e6d54e9683c7",
          "body": "…_copyable memcpy",
          "is_bot": false,
          "headline": "fix: emihmap3 and emihset3 clone() include tail sentinel in trivially…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T14:19:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "535679a1942ecb0a55281fbe19811df6e8231965",
          "body": "…ypes",
          "is_bot": false,
          "headline": "fix: emihmap2 clone() simplify - skip tail sentinel for non-trivial t…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T14:17:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "912a783d5684881fb00dac1805096f26cafd41e5",
          "body": null,
          "is_bot": false,
          "headline": "fix: emihmap2 clone() add _num_buckets > 0 check for safety",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-26T14:13:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8e21aeb31d432ba6f2d1f7348e65b5095ce7802",
          "body": null,
          "is_bot": false,
          "headline": "fix: clang-format for emihmap2.hpp and hash_table6.hpp",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-25T15:02:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e8c7f07967eb21b6de538769894504cd922874b4",
          "body": "HashSet/Map implementations with tail sentinels used memset/memcpy on the entire PairT/KeyT, which reads uninitialized bytes for non-trivially-copyable types (e.g. std::string), causing MSan use-of-uninitialized-value. Fixes across 6 files: hash_set2/4, emihmap1/3, emihset2/3. Adds Section 11 MSan regression test (N=5000).",
          "is_bot": false,
          "headline": "fix: MSan UB in tail sentinels memset for non-trivially-copyable types",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-25T13:43:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3705df7736bbee947623f4f46a77c52537f5b33a",
          "body": "… clang-format\n\n- hash_table6.hpp clone(): For non-trivially-copyable types (e.g. std::string value),\n  the memcpy of tail sentinels (PACK_SIZE * sizeof(PairT)) was UB. Fixed by only\n  initializing bucket field of tail sentinels and copying bitmask separately.\n\n- clang-format: Reformat all headers with clang-format-20 to match CI (clang-format-18).",
          "is_bot": false,
          "headline": "fix: hash_table6 clone() memcpy UB for non-trivially-copyable types +…",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-24T13:24:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3d5b871f0f031189d924696b4bab90fdec67cb39",
          "body": "In clear() when need_explicit_dtor(), the code incorrectly assigned\nINACTIVE to _pairs[bucket].second. For default EMH_BUCKET_INDEX=1,\nPairT=entry<KeyT,ValueT> where .second is ValueT (e.g. std::string),\nnot size_type. This caused implicit conversion warnings and potential\nUB when ValueT is not integral.\n\nChanged to EMH_ADDR(_pairs, bucket) = INACTIVE which correctly sets\nthe bucket field (entry::bucket) to INACTIVE, matching EMH_EMPTY macro\nthat checks p[n].bucket for emptiness.",
          "is_bot": false,
          "headline": "fix: hash_table6 clear() use EMH_ADDR instead of .second for INACTIVE",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-24T13:17:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42bf0700d76b6dc758339d004d6d748a7d5ae53c",
          "body": "- test_all_maps.cpp: add run_string_full_tests to run the full common test\n  suite (CRUD/iterator/copy_move/reserve/edge/size_sweep/erase_patterns)\n  with <string,int> keys for emhash5/6/7/8, not just int keys.\n- test_string_key_leak.cpp: add emhash5/6 to LeakTracker balance, copy\n  balance, rehash \n[…]\ntests (previously\n  only emhash7/8 were covered).\n- Fix make_kv to handle const-qualified key types (emhash8 key_type is\n  const std::string) and test_iterator to recover int index from string\n  keys.",
          "is_bot": false,
          "headline": "test: expand string key coverage for mainstream cases",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-23T12:08:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cab28193c2fe5c5fefa749d2f930dfb2af4a61bb",
          "body": null,
          "is_bot": false,
          "headline": "fix: MSan uninitialized-value and PairAllocTraits build errors",
          "author_name": "hyb",
          "author_login": "ktprime",
          "committed_at": "2026-06-22T23:43:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb2db92692144467dca2ee54b544ab71e95546b6",
          "body": "The previous memcpy-only fix broke EMH_FIND_HIT which relies on memset to initialize key fields to INACTIVE for integer types. Now use memset for trivially destructible types (int etc.) and memcpy for non-trivial types (std::string etc.). Also clang-format all headers and exclude sse2neon.h from format check.",
          "is_bot": false,
          "headline": "fix: use need_explicit_dtor to conditionally memset/memcpy in rehash",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-22T22:50:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a15c2856d877f4278683dff17c013362997a9d0a",
          "body": "Fix [[nodiscard]] compile errors in test_collision_hardening.cpp and test_sanitizer_aggregate.cpp by adding (void) casts. Fix MSan use-of-uninitialized-value: replace memset on non-trivial entry types with memcpy of bucket field only in hash_table5/6 rehash. Remove unused M5S type alias causing -Wunused-local-typedef error.",
          "is_bot": false,
          "headline": "fix: resolve nodiscard warnings and MSan UB in rehash",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-22T15:37:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "542ab73bc4b9ef318834a15ee3d3ecb19c572175",
          "body": "…n-trivial types",
          "is_bot": false,
          "headline": "fix: use offsetof to init only bucket field, avoiding memset UB on no…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-22T15:18:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2ae1f7c43dcf4d834340cadf74ecc380e7154bf3",
          "body": "…x MSan error\"\n\nThis reverts commit f64c75f88c3ff24eca962d885c85759df996f016.",
          "is_bot": false,
          "headline": "Revert \"fix: avoid memset for non-trivial types in rehash/clear to fi…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-22T15:04:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f64c75f88c3ff24eca962d885c85759df996f016",
          "body": "…rror",
          "is_bot": false,
          "headline": "fix: avoid memset for non-trivial types in rehash/clear to fix MSan e…",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-22T15:01:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c86809c3e8d528d7281412a09715f8aeceaf727c",
          "body": null,
          "is_bot": false,
          "headline": "fix: use smaller int64 keys on 32-bit platforms to avoid hash collision",
          "author_name": "huangyuanbing",
          "author_login": "ktprime",
          "committed_at": "2026-06-22T14:52:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 1,
      "commits_last_year": 255,
      "latest_release_at": "2026-07-15T14:13:24Z",
      "latest_release_tag": "v1.2.0",
      "releases_from_tags": false,
      "days_since_last_push": 5,
      "active_weeks_last_year": 27,
      "days_since_latest_release": 6,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 85,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 73,
      "stars": 722,
      "watchers": 15,
      "fork_history": {
        "days": [
          {
            "date": "2020-06-10",
            "count": 1
          },
          {
            "date": "2020-08-01",
            "count": 1
          },
          {
            "date": "2020-08-15",
            "count": 1
          },
          {
            "date": "2021-10-12",
            "count": 1
          },
          {
            "date": "2022-03-01",
            "count": 1
          },
          {
            "date": "2022-08-10",
            "count": 1
          },
          {
            "date": "2022-09-10",
            "count": 1
          },
          {
            "date": "2022-10-12",
            "count": 1
          },
          {
            "date": "2022-11-09",
            "count": 2
          },
          {
            "date": "2022-11-15",
            "count": 1
          },
          {
            "date": "2022-12-15",
            "count": 1
          },
          {
            "date": "2022-12-25",
            "count": 1
          },
          {
            "date": "2023-01-30",
            "count": 1
          },
          {
            "date": "2023-02-17",
            "count": 1
          },
          {
            "date": "2023-03-06",
            "count": 1
          },
          {
            "date": "2023-04-05",
            "count": 1
          },
          {
            "date": "2023-04-19",
            "count": 1
          },
          {
            "date": "2023-04-29",
            "count": 1
          },
          {
            "date": "2023-05-17",
            "count": 1
          },
          {
            "date": "2023-06-05",
            "count": 1
          },
          {
            "date": "2023-06-14",
            "count": 1
          },
          {
            "date": "2023-06-20",
            "count": 1
          },
          {
            "date": "2023-12-02",
            "count": 1
          },
          {
            "date": "2023-12-04",
            "count": 1
          },
          {
            "date": "2024-03-22",
            "count": 1
          },
          {
            "date": "2024-03-26",
            "count": 1
          },
          {
            "date": "2024-04-27",
            "count": 1
          },
          {
            "date": "2024-07-21",
            "count": 1
          },
          {
            "date": "2024-08-30",
            "count": 1
          },
          {
            "date": "2024-09-04",
            "count": 1
          },
          {
            "date": "2024-09-22",
            "count": 1
          },
          {
            "date": "2024-09-29",
            "count": 1
          },
          {
            "date": "2024-12-06",
            "count": 1
          },
          {
            "date": "2024-12-30",
            "count": 1
          },
          {
            "date": "2025-01-21",
            "count": 1
          },
          {
            "date": "2025-01-26",
            "count": 1
          },
          {
            "date": "2025-02-14",
            "count": 1
          },
          {
            "date": "2025-02-15",
            "count": 1
          },
          {
            "date": "2025-02-18",
            "count": 1
          },
          {
            "date": "2025-02-20",
            "count": 1
          },
          {
            "date": "2025-02-21",
            "count": 1
          },
          {
            "date": "2025-03-04",
            "count": 1
          },
          {
            "date": "2025-03-07",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 2
          },
          {
            "date": "2025-03-17",
            "count": 1
          },
          {
            "date": "2025-03-19",
            "count": 1
          },
          {
            "date": "2025-03-23",
            "count": 1
          },
          {
            "date": "2025-03-26",
            "count": 1
          },
          {
            "date": "2025-03-28",
            "count": 1
          },
          {
            "date": "2025-03-31",
            "count": 1
          },
          {
            "date": "2025-04-09",
            "count": 1
          },
          {
            "date": "2025-05-11",
            "count": 1
          },
          {
            "date": "2025-05-12",
            "count": 1
          },
          {
            "date": "2025-05-23",
            "count": 1
          },
          {
            "date": "2025-06-04",
            "count": 1
          },
          {
            "date": "2025-06-27",
            "count": 1
          },
          {
            "date": "2025-08-01",
            "count": 2
          },
          {
            "date": "2025-08-16",
            "count": 1
          },
          {
            "date": "2025-10-11",
            "count": 1
          },
          {
            "date": "2025-10-15",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 1
          },
          {
            "date": "2025-11-03",
            "count": 1
          },
          {
            "date": "2025-11-21",
            "count": 1
          },
          {
            "date": "2026-02-12",
            "count": 1
          },
          {
            "date": "2026-02-17",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-06-09",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 71,
        "total_forks": 73
      },
      "star_history": {
        "days": [
          {
            "date": "2019-09-11",
            "count": 3
          },
          {
            "date": "2019-09-19",
            "count": 2
          },
          {
            "date": "2019-11-24",
            "count": 1
          },
          {
            "date": "2019-12-27",
            "count": 1
          },
          {
            "date": "2020-02-13",
            "count": 1
          },
          {
            "date": "2020-02-17",
            "count": 4
          },
          {
            "date": "2020-03-22",
            "count": 1
          },
          {
            "date": "2020-03-29",
            "count": 1
          },
          {
            "date": "2020-03-30",
            "count": 2
          },
          {
            "date": "2020-03-31",
            "count": 1
          },
          {
            "date": "2020-04-02",
            "count": 1
          },
          {
            "date": "2020-04-25",
            "count": 1
          },
          {
            "date": "2020-06-01",
            "count": 1
          },
          {
            "date": "2020-07-08",
            "count": 1
          },
          {
            "date": "2020-07-12",
            "count": 1
          },
          {
            "date": "2020-07-22",
            "count": 3
          },
          {
            "date": "2020-08-30",
            "count": 1
          },
          {
            "date": "2020-09-02",
            "count": 3
          },
          {
            "date": "2020-09-03",
            "count": 2
          },
          {
            "date": "2020-09-06",
            "count": 1
          },
          {
            "date": "2020-09-10",
            "count": 1
          },
          {
            "date": "2020-09-16",
            "count": 1
          },
          {
            "date": "2020-09-25",
            "count": 1
          },
          {
            "date": "2020-10-02",
            "count": 1
          },
          {
            "date": "2020-10-06",
            "count": 1
          },
          {
            "date": "2020-10-13",
            "count": 1
          },
          {
            "date": "2020-10-26",
            "count": 1
          },
          {
            "date": "2020-11-19",
            "count": 1
          },
          {
            "date": "2021-01-06",
            "count": 1
          },
          {
            "date": "2021-02-01",
            "count": 1
          },
          {
            "date": "2021-02-10",
            "count": 1
          },
          {
            "date": "2021-03-26",
            "count": 1
          },
          {
            "date": "2021-04-20",
            "count": 1
          },
          {
            "date": "2021-05-11",
            "count": 2
          },
          {
            "date": "2021-05-12",
            "count": 2
          },
          {
            "date": "2021-05-22",
            "count": 1
          },
          {
            "date": "2021-07-05",
            "count": 1
          },
          {
            "date": "2021-07-27",
            "count": 1
          },
          {
            "date": "2021-08-31",
            "count": 1
          },
          {
            "date": "2021-09-07",
            "count": 1
          },
          {
            "date": "2021-09-24",
            "count": 1
          },
          {
            "date": "2021-10-11",
            "count": 2
          },
          {
            "date": "2022-01-04",
            "count": 1
          },
          {
            "date": "2022-01-09",
            "count": 1
          },
          {
            "date": "2022-02-13",
            "count": 1
          },
          {
            "date": "2022-02-28",
            "count": 1
          },
          {
            "date": "2022-03-01",
            "count": 3
          },
          {
            "date": "2022-03-04",
            "count": 1
          },
          {
            "date": "2022-03-09",
            "count": 2
          },
          {
            "date": "2022-03-11",
            "count": 1
          },
          {
            "date": "2022-03-20",
            "count": 1
          },
          {
            "date": "2022-03-21",
            "count": 1
          },
          {
            "date": "2022-03-23",
            "count": 2
          },
          {
            "date": "2022-03-29",
            "count": 1
          },
          {
            "date": "2022-03-31",
            "count": 2
          },
          {
            "date": "2022-04-05",
            "count": 1
          },
          {
            "date": "2022-04-12",
            "count": 1
          },
          {
            "date": "2022-04-15",
            "count": 1
          },
          {
            "date": "2022-04-16",
            "count": 1
          },
          {
            "date": "2022-04-24",
            "count": 1
          },
          {
            "date": "2022-05-02",
            "count": 1
          },
          {
            "date": "2022-05-11",
            "count": 2
          },
          {
            "date": "2022-05-14",
            "count": 1
          },
          {
            "date": "2022-05-15",
            "count": 1
          },
          {
            "date": "2022-05-18",
            "count": 1
          },
          {
            "date": "2022-05-24",
            "count": 1
          },
          {
            "date": "2022-05-25",
            "count": 1
          },
          {
            "date": "2022-06-06",
            "count": 1
          },
          {
            "date": "2022-06-12",
            "count": 3
          },
          {
            "date": "2022-06-14",
            "count": 1
          },
          {
            "date": "2022-06-19",
            "count": 1
          },
          {
            "date": "2022-06-20",
            "count": 1
          },
          {
            "date": "2022-06-27",
            "count": 1
          },
          {
            "date": "2022-07-06",
            "count": 2
          },
          {
            "date": "2022-07-07",
            "count": 1
          },
          {
            "date": "2022-07-11",
            "count": 1
          },
          {
            "date": "2022-07-19",
            "count": 3
          },
          {
            "date": "2022-08-09",
            "count": 1
          },
          {
            "date": "2022-08-11",
            "count": 1
          },
          {
            "date": "2022-08-15",
            "count": 1
          },
          {
            "date": "2022-08-22",
            "count": 1
          },
          {
            "date": "2022-08-23",
            "count": 1
          },
          {
            "date": "2022-09-07",
            "count": 3
          },
          {
            "date": "2022-09-08",
            "count": 1
          },
          {
            "date": "2022-09-09",
            "count": 1
          },
          {
            "date": "2022-09-16",
            "count": 1
          },
          {
            "date": "2022-09-21",
            "count": 1
          },
          {
            "date": "2022-10-07",
            "count": 1
          },
          {
            "date": "2022-10-10",
            "count": 1
          },
          {
            "date": "2022-10-12",
            "count": 1
          },
          {
            "date": "2022-10-14",
            "count": 1
          },
          {
            "date": "2022-10-16",
            "count": 1
          },
          {
            "date": "2022-10-17",
            "count": 1
          },
          {
            "date": "2022-10-19",
            "count": 1
          },
          {
            "date": "2022-10-26",
            "count": 1
          },
          {
            "date": "2022-10-27",
            "count": 1
          },
          {
            "date": "2022-10-28",
            "count": 1
          },
          {
            "date": "2022-10-31",
            "count": 1
          },
          {
            "date": "2022-11-03",
            "count": 3
          },
          {
            "date": "2022-11-07",
            "count": 1
          },
          {
            "date": "2022-11-08",
            "count": 1
          },
          {
            "date": "2022-11-11",
            "count": 1
          },
          {
            "date": "2022-11-15",
            "count": 1
          },
          {
            "date": "2022-11-17",
            "count": 1
          },
          {
            "date": "2022-11-18",
            "count": 1
          },
          {
            "date": "2022-11-20",
            "count": 1
          },
          {
            "date": "2022-11-27",
            "count": 1
          },
          {
            "date": "2022-11-30",
            "count": 1
          },
          {
            "date": "2022-12-04",
            "count": 1
          },
          {
            "date": "2022-12-05",
            "count": 2
          },
          {
            "date": "2022-12-07",
            "count": 1
          },
          {
            "date": "2022-12-09",
            "count": 2
          },
          {
            "date": "2022-12-10",
            "count": 1
          },
          {
            "date": "2022-12-12",
            "count": 1
          },
          {
            "date": "2022-12-14",
            "count": 1
          },
          {
            "date": "2022-12-23",
            "count": 1
          },
          {
            "date": "2022-12-25",
            "count": 1
          },
          {
            "date": "2022-12-30",
            "count": 1
          },
          {
            "date": "2023-01-15",
            "count": 1
          },
          {
            "date": "2023-01-17",
            "count": 1
          },
          {
            "date": "2023-01-18",
            "count": 1
          },
          {
            "date": "2023-01-23",
            "count": 1
          },
          {
            "date": "2023-01-25",
            "count": 1
          },
          {
            "date": "2023-01-26",
            "count": 1
          },
          {
            "date": "2023-01-29",
            "count": 2
          },
          {
            "date": "2023-01-30",
            "count": 4
          },
          {
            "date": "2023-01-31",
            "count": 3
          },
          {
            "date": "2023-02-04",
            "count": 1
          },
          {
            "date": "2023-02-06",
            "count": 1
          },
          {
            "date": "2023-02-07",
            "count": 4
          },
          {
            "date": "2023-02-08",
            "count": 16
          },
          {
            "date": "2023-02-09",
            "count": 11
          },
          {
            "date": "2023-02-10",
            "count": 3
          },
          {
            "date": "2023-02-11",
            "count": 1
          },
          {
            "date": "2023-02-13",
            "count": 1
          },
          {
            "date": "2023-02-16",
            "count": 1
          },
          {
            "date": "2023-02-17",
            "count": 1
          },
          {
            "date": "2023-02-18",
            "count": 1
          },
          {
            "date": "2023-02-19",
            "count": 1
          },
          {
            "date": "2023-02-20",
            "count": 2
          },
          {
            "date": "2023-02-21",
            "count": 1
          },
          {
            "date": "2023-02-22",
            "count": 1
          },
          {
            "date": "2023-02-28",
            "count": 1
          },
          {
            "date": "2023-03-03",
            "count": 1
          },
          {
            "date": "2023-03-04",
            "count": 1
          },
          {
            "date": "2023-03-11",
            "count": 2
          },
          {
            "date": "2023-03-14",
            "count": 2
          },
          {
            "date": "2023-03-22",
            "count": 1
          },
          {
            "date": "2023-03-23",
            "count": 1
          },
          {
            "date": "2023-03-27",
            "count": 1
          },
          {
            "date": "2023-03-28",
            "count": 1
          },
          {
            "date": "2023-04-02",
            "count": 1
          },
          {
            "date": "2023-04-04",
            "count": 1
          },
          {
            "date": "2023-04-05",
            "count": 1
          },
          {
            "date": "2023-04-07",
            "count": 1
          },
          {
            "date": "2023-04-08",
            "count": 1
          },
          {
            "date": "2023-04-09",
            "count": 3
          },
          {
            "date": "2023-04-10",
            "count": 3
          },
          {
            "date": "2023-04-11",
            "count": 1
          },
          {
            "date": "2023-04-14",
            "count": 1
          },
          {
            "date": "2023-04-17",
            "count": 1
          },
          {
            "date": "2023-04-19",
            "count": 1
          },
          {
            "date": "2023-04-20",
            "count": 1
          },
          {
            "date": "2023-04-22",
            "count": 1
          },
          {
            "date": "2023-04-23",
            "count": 2
          },
          {
            "date": "2023-04-25",
            "count": 1
          },
          {
            "date": "2023-04-26",
            "count": 1
          },
          {
            "date": "2023-04-29",
            "count": 1
          },
          {
            "date": "2023-05-04",
            "count": 1
          },
          {
            "date": "2023-05-12",
            "count": 1
          },
          {
            "date": "2023-05-18",
            "count": 1
          },
          {
            "date": "2023-05-22",
            "count": 1
          },
          {
            "date": "2023-05-25",
            "count": 1
          },
          {
            "date": "2023-05-29",
            "count": 1
          },
          {
            "date": "2023-06-04",
            "count": 1
          },
          {
            "date": "2023-06-07",
            "count": 1
          },
          {
            "date": "2023-06-09",
            "count": 1
          },
          {
            "date": "2023-06-13",
            "count": 1
          },
          {
            "date": "2023-06-14",
            "count": 2
          },
          {
            "date": "2023-06-20",
            "count": 1
          },
          {
            "date": "2023-06-21",
            "count": 3
          },
          {
            "date": "2023-06-22",
            "count": 1
          },
          {
            "date": "2023-06-23",
            "count": 1
          },
          {
            "date": "2023-06-26",
            "count": 2
          },
          {
            "date": "2023-06-27",
            "count": 1
          },
          {
            "date": "2023-07-03",
            "count": 1
          },
          {
            "date": "2023-07-04",
            "count": 3
          },
          {
            "date": "2023-07-05",
            "count": 1
          },
          {
            "date": "2023-07-06",
            "count": 1
          },
          {
            "date": "2023-07-09",
            "count": 1
          },
          {
            "date": "2023-07-11",
            "count": 1
          },
          {
            "date": "2023-07-12",
            "count": 1
          },
          {
            "date": "2023-07-13",
            "count": 1
          },
          {
            "date": "2023-07-14",
            "count": 1
          },
          {
            "date": "2023-07-19",
            "count": 2
          },
          {
            "date": "2023-07-20",
            "count": 2
          },
          {
            "date": "2023-07-23",
            "count": 1
          },
          {
            "date": "2023-07-25",
            "count": 1
          },
          {
            "date": "2023-07-26",
            "count": 1
          },
          {
            "date": "2023-07-29",
            "count": 1
          },
          {
            "date": "2023-08-04",
            "count": 1
          },
          {
            "date": "2023-08-07",
            "count": 2
          },
          {
            "date": "2023-08-09",
            "count": 1
          },
          {
            "date": "2023-08-11",
            "count": 2
          },
          {
            "date": "2023-08-21",
            "count": 1
          },
          {
            "date": "2023-08-25",
            "count": 2
          },
          {
            "date": "2023-08-26",
            "count": 1
          },
          {
            "date": "2023-09-02",
            "count": 1
          },
          {
            "date": "2023-09-06",
            "count": 1
          },
          {
            "date": "2023-09-07",
            "count": 1
          },
          {
            "date": "2023-09-15",
            "count": 1
          },
          {
            "date": "2023-10-01",
            "count": 1
          },
          {
            "date": "2023-10-02",
            "count": 1
          },
          {
            "date": "2023-10-17",
            "count": 1
          },
          {
            "date": "2023-10-18",
            "count": 2
          },
          {
            "date": "2023-10-20",
            "count": 1
          },
          {
            "date": "2023-10-24",
            "count": 1
          },
          {
            "date": "2023-10-30",
            "count": 1
          },
          {
            "date": "2023-10-31",
            "count": 1
          },
          {
            "date": "2023-11-01",
            "count": 2
          },
          {
            "date": "2023-11-03",
            "count": 1
          },
          {
            "date": "2023-11-05",
            "count": 1
          },
          {
            "date": "2023-11-06",
            "count": 1
          },
          {
            "date": "2023-11-09",
            "count": 2
          },
          {
            "date": "2023-11-14",
            "count": 1
          },
          {
            "date": "2023-11-20",
            "count": 2
          },
          {
            "date": "2023-11-27",
            "count": 3
          },
          {
            "date": "2023-12-02",
            "count": 1
          },
          {
            "date": "2023-12-03",
            "count": 1
          },
          {
            "date": "2023-12-04",
            "count": 2
          },
          {
            "date": "2023-12-05",
            "count": 1
          },
          {
            "date": "2023-12-09",
            "count": 1
          },
          {
            "date": "2023-12-11",
            "count": 1
          },
          {
            "date": "2023-12-13",
            "count": 1
          },
          {
            "date": "2023-12-15",
            "count": 1
          },
          {
            "date": "2023-12-20",
            "count": 1
          },
          {
            "date": "2023-12-21",
            "count": 1
          },
          {
            "date": "2023-12-27",
            "count": 1
          },
          {
            "date": "2023-12-29",
            "count": 1
          },
          {
            "date": "2023-12-30",
            "count": 1
          },
          {
            "date": "2023-12-31",
            "count": 1
          },
          {
            "date": "2024-01-01",
            "count": 1
          },
          {
            "date": "2024-01-03",
            "count": 1
          },
          {
            "date": "2024-01-06",
            "count": 1
          },
          {
            "date": "2024-01-09",
            "count": 1
          },
          {
            "date": "2024-01-10",
            "count": 1
          },
          {
            "date": "2024-01-11",
            "count": 2
          },
          {
            "date": "2024-01-13",
            "count": 1
          },
          {
            "date": "2024-01-14",
            "count": 1
          },
          {
            "date": "2024-01-17",
            "count": 2
          },
          {
            "date": "2024-01-20",
            "count": 1
          },
          {
            "date": "2024-01-26",
            "count": 1
          },
          {
            "date": "2024-01-28",
            "count": 1
          },
          {
            "date": "2024-01-29",
            "count": 1
          },
          {
            "date": "2024-01-31",
            "count": 1
          },
          {
            "date": "2024-02-02",
            "count": 1
          },
          {
            "date": "2024-02-04",
            "count": 1
          },
          {
            "date": "2024-02-09",
            "count": 1
          },
          {
            "date": "2024-02-12",
            "count": 1
          },
          {
            "date": "2024-02-20",
            "count": 1
          },
          {
            "date": "2024-02-23",
            "count": 2
          },
          {
            "date": "2024-02-25",
            "count": 1
          },
          {
            "date": "2024-02-26",
            "count": 3
          },
          {
            "date": "2024-02-27",
            "count": 1
          },
          {
            "date": "2024-02-29",
            "count": 2
          },
          {
            "date": "2024-03-02",
            "count": 1
          },
          {
            "date": "2024-03-05",
            "count": 1
          },
          {
            "date": "2024-03-07",
            "count": 2
          },
          {
            "date": "2024-03-12",
            "count": 1
          },
          {
            "date": "2024-03-13",
            "count": 1
          },
          {
            "date": "2024-03-25",
            "count": 2
          },
          {
            "date": "2024-03-28",
            "count": 2
          },
          {
            "date": "2024-03-29",
            "count": 4
          },
          {
            "date": "2024-03-30",
            "count": 1
          },
          {
            "date": "2024-03-31",
            "count": 3
          },
          {
            "date": "2024-04-05",
            "count": 1
          },
          {
            "date": "2024-04-08",
            "count": 2
          },
          {
            "date": "2024-04-12",
            "count": 1
          },
          {
            "date": "2024-04-15",
            "count": 3
          },
          {
            "date": "2024-04-16",
            "count": 1
          },
          {
            "date": "2024-04-17",
            "count": 1
          },
          {
            "date": "2024-04-19",
            "count": 1
          },
          {
            "date": "2024-04-25",
            "count": 2
          },
          {
            "date": "2024-04-29",
            "count": 1
          },
          {
            "date": "2024-05-06",
            "count": 1
          },
          {
            "date": "2024-05-10",
            "count": 1
          },
          {
            "date": "2024-05-13",
            "count": 1
          },
          {
            "date": "2024-05-14",
            "count": 1
          },
          {
            "date": "2024-05-15",
            "count": 1
          },
          {
            "date": "2024-05-18",
            "count": 1
          },
          {
            "date": "2024-05-19",
            "count": 1
          },
          {
            "date": "2024-05-20",
            "count": 1
          },
          {
            "date": "2024-05-23",
            "count": 2
          },
          {
            "date": "2024-05-26",
            "count": 1
          },
          {
            "date": "2024-05-27",
            "count": 1
          },
          {
            "date": "2024-05-28",
            "count": 1
          },
          {
            "date": "2024-05-31",
            "count": 1
          },
          {
            "date": "2024-06-02",
            "count": 1
          },
          {
            "date": "2024-06-07",
            "count": 1
          },
          {
            "date": "2024-06-18",
            "count": 1
          },
          {
            "date": "2024-06-28",
            "count": 1
          },
          {
            "date": "2024-06-30",
            "count": 1
          },
          {
            "date": "2024-07-01",
            "count": 3
          },
          {
            "date": "2024-07-06",
            "count": 1
          },
          {
            "date": "2024-07-07",
            "count": 1
          },
          {
            "date": "2024-07-17",
            "count": 1
          },
          {
            "date": "2024-07-24",
            "count": 1
          },
          {
            "date": "2024-07-25",
            "count": 1
          },
          {
            "date": "2024-07-28",
            "count": 1
          },
          {
            "date": "2024-07-29",
            "count": 1
          },
          {
            "date": "2024-08-04",
            "count": 2
          },
          {
            "date": "2024-08-06",
            "count": 1
          },
          {
            "date": "2024-08-12",
            "count": 1
          },
          {
            "date": "2024-08-13",
            "count": 2
          },
          {
            "date": "2024-08-14",
            "count": 1
          },
          {
            "date": "2024-08-17",
            "count": 1
          },
          {
            "date": "2024-08-18",
            "count": 1
          },
          {
            "date": "2024-08-21",
            "count": 1
          },
          {
            "date": "2024-08-22",
            "count": 1
          },
          {
            "date": "2024-08-23",
            "count": 1
          },
          {
            "date": "2024-08-24",
            "count": 2
          },
          {
            "date": "2024-08-26",
            "count": 1
          },
          {
            "date": "2024-08-28",
            "count": 1
          },
          {
            "date": "2024-08-31",
            "count": 1
          },
          {
            "date": "2024-09-01",
            "count": 1
          },
          {
            "date": "2024-09-03",
            "count": 2
          },
          {
            "date": "2024-09-05",
            "count": 1
          },
          {
            "date": "2024-09-08",
            "count": 1
          },
          {
            "date": "2024-09-09",
            "count": 2
          },
          {
            "date": "2024-09-18",
            "count": 2
          },
          {
            "date": "2024-09-20",
            "count": 2
          },
          {
            "date": "2024-09-24",
            "count": 1
          },
          {
            "date": "2024-09-25",
            "count": 1
          },
          {
            "date": "2024-09-27",
            "count": 1
          },
          {
            "date": "2024-09-28",
            "count": 1
          },
          {
            "date": "2024-09-30",
            "count": 1
          },
          {
            "date": "2024-10-02",
            "count": 1
          },
          {
            "date": "2024-10-11",
            "count": 1
          },
          {
            "date": "2024-10-14",
            "count": 1
          },
          {
            "date": "2024-10-15",
            "count": 3
          },
          {
            "date": "2024-10-16",
            "count": 1
          },
          {
            "date": "2024-10-18",
            "count": 1
          },
          {
            "date": "2024-10-19",
            "count": 2
          },
          {
            "date": "2024-10-20",
            "count": 1
          },
          {
            "date": "2024-10-21",
            "count": 1
          },
          {
            "date": "2024-10-22",
            "count": 1
          },
          {
            "date": "2024-10-23",
            "count": 1
          },
          {
            "date": "2024-10-24",
            "count": 1
          },
          {
            "date": "2024-10-25",
            "count": 2
          },
          {
            "date": "2024-10-26",
            "count": 1
          },
          {
            "date": "2024-10-28",
            "count": 1
          },
          {
            "date": "2024-10-29",
            "count": 1
          },
          {
            "date": "2024-10-30",
            "count": 2
          },
          {
            "date": "2024-11-01",
            "count": 1
          },
          {
            "date": "2024-11-05",
            "count": 2
          },
          {
            "date": "2024-11-12",
            "count": 2
          },
          {
            "date": "2024-11-14",
            "count": 2
          },
          {
            "date": "2024-11-19",
            "count": 1
          },
          {
            "date": "2024-11-21",
            "count": 2
          },
          {
            "date": "2024-11-29",
            "count": 1
          },
          {
            "date": "2024-11-30",
            "count": 1
          },
          {
            "date": "2024-12-02",
            "count": 1
          },
          {
            "date": "2024-12-03",
            "count": 3
          },
          {
            "date": "2024-12-04",
            "count": 3
          },
          {
            "date": "2024-12-05",
            "count": 1
          },
          {
            "date": "2024-12-06",
            "count": 1
          },
          {
            "date": "2024-12-08",
            "count": 2
          },
          {
            "date": "2024-12-11",
            "count": 1
          },
          {
            "date": "2024-12-12",
            "count": 2
          },
          {
            "date": "2024-12-13",
            "count": 1
          },
          {
            "date": "2024-12-14",
            "count": 1
          },
          {
            "date": "2024-12-18",
            "count": 1
          },
          {
            "date": "2024-12-23",
            "count": 2
          },
          {
            "date": "2024-12-24",
            "count": 1
          },
          {
            "date": "2024-12-30",
            "count": 1
          },
          {
            "date": "2025-01-03",
            "count": 1
          },
          {
            "date": "2025-01-05",
            "count": 1
          },
          {
            "date": "2025-01-10",
            "count": 1
          },
          {
            "date": "2025-01-11",
            "count": 1
          },
          {
            "date": "2025-01-14",
            "count": 2
          },
          {
            "date": "2025-01-16",
            "count": 2
          },
          {
            "date": "2025-01-18",
            "count": 2
          },
          {
            "date": "2025-01-19",
            "count": 1
          },
          {
            "date": "2025-01-24",
            "count": 1
          },
          {
            "date": "2025-01-25",
            "count": 1
          },
          {
            "date": "2025-01-27",
            "count": 1
          },
          {
            "date": "2025-01-29",
            "count": 2
          },
          {
            "date": "2025-01-31",
            "count": 1
          },
          {
            "date": "2025-02-02",
            "count": 2
          },
          {
            "date": "2025-02-03",
            "count": 1
          },
          {
            "date": "2025-02-04",
            "count": 1
          },
          {
            "date": "2025-02-07",
            "count": 3
          },
          {
            "date": "2025-02-12",
            "count": 1
          },
          {
            "date": "2025-02-15",
            "count": 1
          },
          {
            "date": "2025-02-18",
            "count": 1
          },
          {
            "date": "2025-02-21",
            "count": 1
          },
          {
            "date": "2025-02-22",
            "count": 1
          },
          {
            "date": "2025-03-05",
            "count": 3
          },
          {
            "date": "2025-03-06",
            "count": 1
          },
          {
            "date": "2025-03-07",
            "count": 1
          },
          {
            "date": "2025-03-11",
            "count": 1
          },
          {
            "date": "2025-03-14",
            "count": 2
          },
          {
            "date": "2025-03-18",
            "count": 1
          },
          {
            "date": "2025-03-19",
            "count": 4
          },
          {
            "date": "2025-03-22",
            "count": 4
          },
          {
            "date": "2025-03-23",
            "count": 2
          },
          {
            "date": "2025-03-25",
            "count": 1
          },
          {
            "date": "2025-03-28",
            "count": 2
          },
          {
            "date": "2025-03-30",
            "count": 1
          },
          {
            "date": "2025-03-31",
            "count": 1
          },
          {
            "date": "2025-04-03",
            "count": 1
          },
          {
            "date": "2025-04-08",
            "count": 1
          },
          {
            "date": "2025-04-14",
            "count": 1
          },
          {
            "date": "2025-04-15",
            "count": 1
          },
          {
            "date": "2025-04-16",
            "count": 3
          },
          {
            "date": "2025-04-17",
            "count": 2
          },
          {
            "date": "2025-04-18",
            "count": 2
          },
          {
            "date": "2025-04-19",
            "count": 1
          },
          {
            "date": "2025-04-24",
            "count": 2
          },
          {
            "date": "2025-04-25",
            "count": 1
          },
          {
            "date": "2025-04-29",
            "count": 1
          },
          {
            "date": "2025-04-30",
            "count": 1
          },
          {
            "date": "2025-05-02",
            "count": 1
          },
          {
            "date": "2025-05-03",
            "count": 1
          },
          {
            "date": "2025-05-08",
            "count": 1
          },
          {
            "date": "2025-05-12",
            "count": 2
          },
          {
            "date": "2025-05-15",
            "count": 1
          },
          {
            "date": "2025-05-21",
            "count": 1
          },
          {
            "date": "2025-05-26",
            "count": 1
          },
          {
            "date": "2025-05-30",
            "count": 1
          },
          {
            "date": "2025-06-07",
            "count": 1
          },
          {
            "date": "2025-06-08",
            "count": 1
          },
          {
            "date": "2025-06-13",
            "count": 3
          },
          {
            "date": "2025-06-16",
            "count": 1
          },
          {
            "date": "2025-06-19",
            "count": 1
          },
          {
            "date": "2025-06-20",
            "count": 1
          },
          {
            "date": "2025-06-21",
            "count": 1
          },
          {
            "date": "2025-06-22",
            "count": 1
          },
          {
            "date": "2025-06-25",
            "count": 1
          },
          {
            "date": "2025-06-26",
            "count": 2
          },
          {
            "date": "2025-07-07",
            "count": 1
          },
          {
            "date": "2025-07-08",
            "count": 1
          },
          {
            "date": "2025-07-26",
            "count": 1
          },
          {
            "date": "2025-07-28",
            "count": 1
          },
          {
            "date": "2025-08-07",
            "count": 2
          },
          {
            "date": "2025-08-10",
            "count": 1
          },
          {
            "date": "2025-08-14",
            "count": 1
          },
          {
            "date": "2025-08-20",
            "count": 2
          },
          {
            "date": "2025-08-26",
            "count": 1
          },
          {
            "date": "2025-08-28",
            "count": 1
          },
          {
            "date": "2025-08-29",
            "count": 1
          },
          {
            "date": "2025-08-30",
            "count": 2
          },
          {
            "date": "2025-09-09",
            "count": 1
          },
          {
            "date": "2025-09-11",
            "count": 1
          },
          {
            "date": "2025-09-28",
            "count": 1
          },
          {
            "date": "2025-09-30",
            "count": 3
          },
          {
            "date": "2025-10-01",
            "count": 1
          },
          {
            "date": "2025-10-04",
            "count": 1
          },
          {
            "date": "2025-10-09",
            "count": 1
          },
          {
            "date": "2025-10-10",
            "count": 1
          },
          {
            "date": "2025-10-11",
            "count": 2
          },
          {
            "date": "2025-10-12",
            "count": 1
          },
          {
            "date": "2025-10-14",
            "count": 1
          },
          {
            "date": "2025-10-19",
            "count": 1
          },
          {
            "date": "2025-10-21",
            "count": 1
          },
          {
            "date": "2025-10-24",
            "count": 1
          },
          {
            "date": "2025-10-28",
            "count": 1
          },
          {
            "date": "2025-11-01",
            "count": 1
          },
          {
            "date": "2025-11-07",
            "count": 1
          },
          {
            "date": "2025-11-08",
            "count": 2
          },
          {
            "date": "2025-11-09",
            "count": 1
          },
          {
            "date": "2025-11-11",
            "count": 1
          },
          {
            "date": "2025-11-12",
            "count": 1
          },
          {
            "date": "2025-11-13",
            "count": 1
          },
          {
            "date": "2025-11-17",
            "count": 1
          },
          {
            "date": "2025-11-19",
            "count": 1
          },
          {
            "date": "2025-11-20",
            "count": 1
          },
          {
            "date": "2025-11-22",
            "count": 1
          },
          {
            "date": "2025-11-27",
            "count": 1
          },
          {
            "date": "2025-11-28",
            "count": 1
          },
          {
            "date": "2025-12-05",
            "count": 1
          },
          {
            "date": "2025-12-11",
            "count": 1
          },
          {
            "date": "2025-12-15",
            "count": 1
          },
          {
            "date": "2025-12-17",
            "count": 1
          },
          {
            "date": "2025-12-22",
            "count": 1
          },
          {
            "date": "2025-12-30",
            "count": 2
          },
          {
            "date": "2026-01-03",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-01-08",
            "count": 1
          },
          {
            "date": "2026-01-10",
            "count": 1
          },
          {
            "date": "2026-01-15",
            "count": 1
          },
          {
            "date": "2026-01-18",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 1
          },
          {
            "date": "2026-01-20",
            "count": 1
          },
          {
            "date": "2026-01-21",
            "count": 1
          },
          {
            "date": "2026-01-26",
            "count": 1
          },
          {
            "date": "2026-01-27",
            "count": 1
          },
          {
            "date": "2026-02-01",
            "count": 1
          },
          {
            "date": "2026-02-02",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-05",
            "count": 1
          },
          {
            "date": "2026-02-09",
            "count": 1
          },
          {
            "date": "2026-02-10",
            "count": 2
          },
          {
            "date": "2026-02-12",
            "count": 1
          },
          {
            "date": "2026-02-13",
            "count": 1
          },
          {
            "date": "2026-02-16",
            "count": 1
          },
          {
            "date": "2026-02-17",
            "count": 1
          },
          {
            "date": "2026-02-21",
            "count": 1
          },
          {
            "date": "2026-02-27",
            "count": 1
          },
          {
            "date": "2026-03-02",
            "count": 2
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-04",
            "count": 1
          },
          {
            "date": "2026-03-06",
            "count": 1
          },
          {
            "date": "2026-03-08",
            "count": 1
          },
          {
            "date": "2026-03-13",
            "count": 1
          },
          {
            "date": "2026-03-17",
            "count": 1
          },
          {
            "date": "2026-03-19",
            "count": 1
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-03-23",
            "count": 2
          },
          {
            "date": "2026-03-27",
            "count": 1
          },
          {
            "date": "2026-03-30",
            "count": 2
          },
          {
            "date": "2026-04-04",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-04-13",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 1
          },
          {
            "date": "2026-04-18",
            "count": 1
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-05-04",
            "count": 1
          },
          {
            "date": "2026-05-11",
            "count": 1
          },
          {
            "date": "2026-05-12",
            "count": 1
          },
          {
            "date": "2026-05-13",
            "count": 1
          },
          {
            "date": "2026-05-14",
            "count": 1
          },
          {
            "date": "2026-05-15",
            "count": 1
          },
          {
            "date": "2026-05-28",
            "count": 1
          },
          {
            "date": "2026-05-31",
            "count": 1
          },
          {
            "date": "2026-06-01",
            "count": 1
          },
          {
            "date": "2026-06-08",
            "count": 1
          },
          {
            "date": "2026-06-17",
            "count": 1
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-22",
            "count": 1
          },
          {
            "date": "2026-06-29",
            "count": 1
          },
          {
            "date": "2026-06-30",
            "count": 1
          },
          {
            "date": "2026-07-05",
            "count": 1
          },
          {
            "date": "2026-07-13",
            "count": 1
          },
          {
            "date": "2026-07-15",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 722,
        "total_stars": 722
      },
      "open_issues_and_prs": 2
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "bench/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 484176,
      "source_files_sampled": 156,
      "oversized_source_files": 10,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "scope": "repository_graph",
        "source": null,
        "findings": [],
        "collected": false,
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 41,
        "open_issues": 2,
        "closed_ratio": 0.964,
        "closed_issues": 54,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "ktprime",
          "commits": 593,
          "avatar_url": "https://avatars.githubusercontent.com/u/1461362?v=4"
        },
        {
          "type": "User",
          "login": "orgads",
          "commits": 8,
          "avatar_url": "https://avatars.githubusercontent.com/u/1246544?v=4"
        },
        {
          "type": "User",
          "login": "LazyDodo",
          "commits": 5,
          "avatar_url": "https://avatars.githubusercontent.com/u/1330470?v=4"
        },
        {
          "type": "User",
          "login": "apocelipes",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/21255940?v=4"
        },
        {
          "type": "User",
          "login": "cppLawyer",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/76749832?v=4"
        },
        {
          "type": "User",
          "login": "bytesiz3d",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/44498156?v=4"
        },
        {
          "type": "User",
          "login": "blueloveTH",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/28104173?v=4"
        },
        {
          "type": "User",
          "login": "brenfwd",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/44183550?v=4"
        },
        {
          "type": "User",
          "login": "Evador",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/88352789?v=4"
        },
        {
          "type": "User",
          "login": "shines77",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/2806664?v=4"
        }
      ],
      "contributors_sampled": 19,
      "top_contributor_share": 0.95
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "format-check.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": true,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 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": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": null,
            "reason": "no workflows found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": null,
            "reason": "no dependencies found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 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": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "912adcd6316cbfcda608458972ca2c7e2b96e4cb",
        "ran_at": "2026-07-21T20:29:02Z",
        "aggregate_score": 4.7,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/ktprime/emhash",
    "host": "github.com",
    "name": "emhash",
    "owner": "ktprime"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 47,
        "vitality": 80,
        "community": 72,
        "governance": 54,
        "engineering": 71
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 80,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 83,
            "inputs": {
              "commits_last_year": 255,
              "human_commit_share": 0.96,
              "days_since_last_push": 5,
              "active_weeks_last_year": 27
            },
            "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": "27/52 weeks with commits",
                "points": 18.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 27
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "255 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 255
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "good",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "releases_count": 1,
              "latest_release_tag": "v1.2.0",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "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 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 5,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 5 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "good",
        "name": "Community & Adoption",
        "value": 72,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "moderate",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 68,
            "inputs": {
              "forks": 73,
              "stars": 722,
              "watchers": 15,
              "growth_state": "organic",
              "growth_factor_pct": 100
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "722 stars",
                "points": 46.4,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 722
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "73 forks",
                "points": 15.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 73
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "15 watchers",
                "points": 6.4,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (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": 6.3,
                "status": "met",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 54,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 27,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 19,
              "top_contributor_share": 0.95
            },
            "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 95% of commits",
                "points": 1.1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 95
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "19 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 19
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 41,
              "open_issues": 2,
              "closed_issues": 54,
              "issue_closed_ratio": 0.964,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "96% of issues closed",
                "points": 45.1,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "41/42 decided PRs merged",
                "points": 37.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 41,
                      "decided": 42
                    }
                  }
                ],
                "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": 58,
            "inputs": {
              "followers": 63,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "ktprime",
              "public_repos": 35,
              "account_age_days": 5263
            },
            "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": "63 followers of ktprime",
                "points": 13,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 63,
                      "login": "ktprime"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "35 public repos, account ~14 yr old",
                "points": 23.3,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 35
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 14
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 71,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "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": 68,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": true,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 6.4,
                "status": "met",
                "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": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 47,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Pinned-Dependencies, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "pinned_dependencies",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 47,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 4.7
            },
            "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file 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": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 7
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 58,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.719,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "69 of 96 human commits state their intent (structured subject or explanatory body)",
                "points": 38.3,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 69,
                      "sampled": 96
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_pinned_dependencies"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 66,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "bench/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0.04
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "bench/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "bench/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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "C++ (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "4 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 4,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "no dependencies found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 96,
            "inputs": {
              "primary_language": "C++",
              "largest_source_bytes": 484176,
              "source_files_sampled": 156,
              "oversized_source_files": 10
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C++ (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "10/156 source files over 60KB",
                "points": 51.5,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 156,
                      "oversized": 10
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [],
  "report_type": "repository",
  "generated_at": "2026-07-21T20:29:14.937467Z",
  "schema_version": "0.23.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/k/ktprime/emhash.svg",
  "full_name": "ktprime/emhash",
  "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.23.0 — metodología completa · wiki de métricas.

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