Public record
Software health reportschema 0.23.0 · metrics 1.13.0 · 2026-07-21 20:29 UTC

ktprime / emhash

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

C++ · CMIT★ 722 stars⑂ 73 forkssince Sep 2019View on GitHub ↗

ktprime/emhash holds a health index of 65 out of 100, placing it in the Moderate band. It scores highest on Vitality (80/100) and lowest on Security (47/100). It was last updated 5 days ago. A single contributor accounts for most of its recent work.

65
overall / 100
Moderate

Software health index

Metrics are grouped into weighted categories on one standardized 1–100 scale. Overall starts as their weighted mean; when public evidence triggers the High-Risk Jurisdiction Policy, the rating is adjusted and receives an At risk ceiling of 49. AI Readiness sits outside the overall score.

65
Excellent85-100Exemplary; meets essentially all checked criteria
Good70-84Healthy; minor gaps
Moderate50-69Acceptable with notable gaps; review recommended
At risk30-49Significant weaknesses; adoption warrants caution
Critical1-29Severe problems (abandoned, single-maintainer, no hygiene)
VitalityCommunity &AdoptionSustainability &GovernanceEngineeringQualitySecurityAI Readiness

Score profile

Each axis is a category. The shape matters more than the average — a healthy subject fills the whole shape, while a spike-and-crater profile means strength in one dimension is masking risk in another.

Ownership

hybPersonal account
63 followers35 public repossince Feb 2012

This repository is owned by a personal account. A single-owner project carries more continuity risk than an organization-backed one.

Metrics by category

Vitality

Is the project alive — is code being written and are releases shipping?

80Good · 22% of overall
How it's scored
36/36Push recency — last push 5 days ago
18.7/36Commit cadence — 27/52 weeks with commits
18/18Commit volume — 255 commits in the last year
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year255
human_commit_share0.96
days_since_last_push5
active_weeks_last_year27
How it's scored
27/27Ships releases — 1 releases published
36/36Release recency — latest release 6 days ago
12.6/27Release cadence — cadence unknown (single release)
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Inputs used
releases_count1
latest_release_tagv1.2.0
releases_from_tagsno
days_since_latest_release6
mean_days_between_releases

Community & Adoption

Does the project have users, downloads, attention, and a welcoming setup for contributors?

72Good · 18% of overall
How it's scored
46.4/60Stars — 722 stars
15.5/25Forks — 73 forks
6.4/15Watchers — 15 watchers
Inputs used
forks73
stars722
watchers15
growth_stateorganic
growth_factor_pct100
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (MIT)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
6.3/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateyes

Sustainability & Governance

Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?

54Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
1.1/22.5Commit distribution — top contributor authored 95% of commits
13.5/13.5Contributor breadth — 19 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled19
top_contributor_share0.95
How it's scored
45.1/46.8Issue resolution — 96% of issues closed
37.3/38.3PR acceptance — 41/42 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Inputs used
merged_prs41
open_issues2
closed_issues54
issue_closed_ratio0.964
closed_unmerged_prs1
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
13/25Owner reach — 63 followers of ktprime
23.3/25Track record — 35 public repos, account ~14 yr old
Inputs used
followers63
owner_typeUser
is_verified
owner_loginktprime
public_repos35
account_age_days5,263
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.

Engineering Quality

Are baseline engineering and documentation practices in place?

71Good · 20% of overall
How it's scored
24/24CI workflows — 3 workflow(s)
24/24Tests present
0/16Linter config
0/9.6Pre-commit hooks
6.4/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — no data
Inputs used
has_ciyes
has_testsyes
has_editorconfigyes
has_linter_configno
has_precommit_configno
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.
How it's scored
30/30README
25/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
0/10Topics
10/10Wiki
Inputs used
topics
has_wikiyes
homepage
has_readmeyes
has_docs_diryes
has_descriptionyes

Security

Are visible security and supply-chain practices strong, without unresolved high-risk jurisdiction exposure?

47At risk · 16% of overall
How it's scored
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 — no data
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 — no data
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5License — 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 — no data
0/5Pinned-Dependencies — no data
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 — no data
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate4.7
Excluded from scoring (no data or not applicable): ci_tests, dangerous_workflow, packaging, pinned_dependencies, token_permissions. Remaining weights renormalized.

AI Readiness

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.

58Moderate · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
38.3/40Legible commit history — 69 of 96 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share0.719
agent_instruction_files
agent_instruction_max_bytes
How it's scored
18/18One-command bootstrap — bench/Makefile
22/22Automated tests
0/11Lint / format config
11/11Static type checking — C++ (statically typed)
0/10Reproducible environment
0/10Demonstrated agent practice — no agent-authored commits among the last 100
8/8Automated maintenance — 4 of the last 100 commits are automated dependency updates
0/10OpenSSF Scorecard: Pinned-Dependencies — no data
Inputs used
has_nixno
has_testsyes
lockfiles
has_dockerfileno
typed_languageyes
bootstrap_filesbench/Makefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0.04
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Pinned-Dependencies. Remaining weights renormalized.
How it's scored
45/45Type-checkable code — C++ (statically typed)
51.5/55Manageable file sizes — 10/156 source files over 60KB
Inputs used
primary_languageC++
largest_source_bytes484,176
source_files_sampled156
oversized_source_files10
How it's scored
0/40API schema (OpenAPI/GraphQL/proto)
0/20MCP server
40/40Runnable examples — examples
Inputs used
example_dirsexamples
has_mcp_signalno
api_schema_files

Key facts

722GitHub stars
19contributors
255commits, last 12 months
5days since last push
1releases
1bus factor
2open issues
package ecosystems

More detail

Star and fork history 722 ★ / 73 ⇿
722Stars
73Forks

When each star and fork was added, collected from GitHub and bucketed by day. Cumulative growth sits directly above the daily additions it is made of, so the two read against each other: steady organic accretion looks nothing like an abrupt, short-lived burst. Where that difference is measurable, it is reported as growth authenticity.

012525037550062575072271322019-092023-022026-07

Each point covers 7 days.

OpenSSF Scorecard 4.7 / 10
4.7aggregate

Independent, tool-agnostic security assessment from the open-source OpenSSF Scorecard. Each check rewards a security practice, not a specific vendor's tool. Checks Scorecard could not determine are marked n/a and excluded from the security score (never counted as zero).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/aCI-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/aDangerous-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/aPackagingpackaging workflow not detected
n/aPinned-Dependenciesno dependencies found
0SASTno SAST tool detected
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
n/aToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
All dependencies 0

Full resolved dependency set from the GitHub dependency graph: 0 direct and 0 indirect (transitive) packages. The transitive closure is complete when the repository commits a lockfile.

RegistryPackageVersionRelation
Dependency advisories not assessed

Advisory matching could not run for this report: No resolved dependencies to assess

Raw JSON report machine-readable
{
  "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"
}

Scores are signals, not warranties. They reflect publicly visible practices on GitHub — not a code audit, and not a security guarantee.

Missing data is excluded and weights renormalized, never scored as zero. Methodology is versioned and open: metrics v1.13.0, schema v0.23.0 — full methodology · metrics wiki.

How one result sits in the wider record: aggregate statistics.