Public record
Software health reportschema 0.26.0 · metrics 1.13.0 · 2026-07-22 08:51 UTC

tphakala / go-audio-resampler

High-quality audio resampling library for Go, based on libsoxr. Polyphase FIR filtering with Kaiser window design, SIMD acceleration, and professional-grade quality.

GoLGPL-2.1★ 9 stars⑂ 4 forkssince Nov 2025View on GitHub ↗

tphakala/go-audio-resampler holds a health index of 69 out of 100, placing it in the Moderate band. It scores highest on Security (87/100) and lowest on Community & Adoption (43/100). It was last updated 2 days ago. A single contributor accounts for most of its recent work.

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

69
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

Tomi P. HakalaPersonal account
77 followers63 public repossince Mar 2014

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

Package ecosystems

RegistryPackageVersionDownloads / moVersionsLast publish
Gogithub.com/tphakala/go-audio-resamplerv1.5.0-74 days ago

Metrics by category

Vitality

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

83Good · 22% of overall
How it's scored
36/36Push recency — last push 2 days ago
7.6/36Commit cadence — 11/52 weeks with commits
18/18Commit volume — 100 commits in the last year
10/10OpenSSF Scorecard: Maintained — 28 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
Inputs used
commits_last_year100
human_commit_share0.93
days_since_last_push2
active_weeks_last_year11

Release discipline

100Excellent
How it's scored
27/27Ships releases — 7 releases published
36/36Release recency — latest release 4 days ago
27/27Release cadence — a release every ~20.7 days
0/10OpenSSF Scorecard: Signed-Releases — no data
Inputs used
releases_count7
latest_release_tagv1.5.0
releases_from_tagsno
days_since_latest_release4
mean_days_between_releases20.7
Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.

Community & Adoption

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

43At risk · 18% of overall
How it's scored
14.6/60Stars — 9 stars
4/25Forks — 4 forks
0/15Watchers — 1 watchers
Inputs used
forks4
stars9
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold
How it's scored
22.5/22.5README
22.5/22.5License — recognized license (LGPL-2.1)
18/18CONTRIBUTING guide
0/13.5Code of conduct
0/7.2Issue template
0/6.3PR template
Inputs used
has_readmeyes
has_licenseyes
has_contributingyes
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sustainability & Governance

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

60Moderate · 24% of overall
How it's scored
9/54Bus factor — 1 contributor(s) cover half of all commits
1.9/22.5Commit distribution — top contributor authored 91% of commits
4.1/13.5Contributor breadth — 3 contributors
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Inputs used
bus_factor1
contributors_sampled3
top_contributor_share0.914
How it's scored
46.8/46.8Issue resolution — 100% of issues closed
30/38.3PR acceptance — 29/37 decided PRs merged
0/15OpenSSF Scorecard: Code-Review — Found 1/24 approved changesets -- score normalized to 0
Inputs used
merged_prs29
open_issues0
closed_issues21
issue_closed_ratio1
closed_unmerged_prs8
How it's scored
10/30Ownership backing — personal (user) account
0/20Verified domain — not applicable to user accounts
13.6/25Owner reach — 77 followers of tphakala
25/25Track record — 63 public repos, account ~12 yr old
Inputs used
followers77
owner_typeUser
is_verified
owner_logintphakala
public_repos63
account_age_days4,504
Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.
How it's scored
25/25Published & resolvable — 1 package(s) on go
35/35Publish recency — latest publish 4 days ago
20/20Version history — 7 published versions
20/20Not deprecated — active, not deprecated or yanked
Inputs used
packagesgithub.com/tphakala/go-audio-resampler
ecosystemsgo
any_deprecatedno
min_days_since_publish4

Engineering Quality

Are baseline engineering and documentation practices in place?

73Good · 20% of overall
How it's scored
24/24CI workflows — 8 workflow(s)
24/24Tests present
16/16Linter config — .golangci.yaml
0/9.6Pre-commit hooks
0/6.4.editorconfig
18/20OpenSSF Scorecard: CI-Tests — 18 out of 19 merged PRs checked by a CI test -- score normalized to 9
Inputs used
has_ciyes
has_testsyes
has_editorconfigno
has_linter_configyes
has_precommit_configno

Documentation

60Moderate
How it's scored
30/30README
0/25Documentation directory
0/15Documentation / homepage site
10/10Repository description
10/10Topics — 9 topics
10/10Wiki
Inputs used
topicsaudio, audio-processing, dsp, fir-filter, golang, resampling, sample-rate-conversion, simd, soxr
has_wikiyes
homepage
has_readmeyes
has_docs_dirno
has_descriptionyes

Security

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

87Excellent · 16% of overall
How it's scored
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — no data
2.2/2.5CI-Tests — 18 out of 19 merged PRs checked by a CI test -- score normalized to 9
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/24 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5License — license file detected
7.5/7.5Maintained — 28 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — no data
4/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
4.5/5SAST — SAST tool detected but not run on all commits
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — no data
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Inputs used
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate8.4
Excluded from scoring (no data or not applicable): branch_protection, packaging, signed_releases. Remaining weights renormalized.
How it's scored
35/35Direct dependencies free of known advisories — no direct dependency carries a known advisory
0/25Indirect dependencies free of known advisories — transitive set not separable from development and test dependencies in this scope
0/40No advisories left outstanding — no advisory carries a publication date
Inputs used
sourceosv
advisories0
affected_packages0
assessed_packages10
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 10 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.

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.

72Good · 0% of overall
How it's scored
0/45Agent instructions — no CLAUDE.md / AGENTS.md / editor rules
0/15Machine-readable docs (llms.txt)
40/40Legible commit history — 93 of 93 human commits state their intent (structured subject or explanatory body)
Inputs used
has_llms_txtno
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
How it's scored
18/18One-command bootstrap — Taskfile.yml, test-reference/Makefile
22/22Automated tests
11/11Lint / format config — .golangci.yaml
11/11Static type checking — Go (statically typed)
10/10Reproducible environment — lockfile
10/10Demonstrated agent practice — 16 of the last 100 commits agent-authored or agent-credited
8/8Automated maintenance — 7 of the last 100 commits are automated dependency updates
8/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
Inputs used
has_nixno
has_testsyes
lockfilesgo.sum
has_dockerfileno
typed_languageyes
bootstrap_filesTaskfile.yml, test-reference/Makefile
has_devcontainerno
has_linter_configyes
typecheck_configs
agent_commit_share0.16
toolchain_manifestsgo.mod
dependency_bot_commit_share0.07
How it's scored
45/45Type-checkable code — Go (statically typed)
55/55Manageable file sizes — 0/118 source files over 60KB
Inputs used
primary_languageGo
largest_source_bytes34,884
source_files_sampled118
oversized_source_files0
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

9GitHub stars
3contributors
100commits, last 12 months
2days since last push
7releases
1bus factor
0open issues
Gopackage ecosystems

More detail

Star and fork history 9 ★ / 4 ⇿
9Stars
4Forks
6Releases

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.

02468109412025-112026-032026-07
Major 1Minor 4Patch 1
OpenSSF Scorecard 8.4 / 10
8.4aggregate

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-22 08:51 UTC

10Binary-Artifactsno binaries found in the repo
n/aBranch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
9CI-Tests18 out of 19 merged PRs checked by a CI test -- score normalized to 9
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/24 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained28 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
n/aPackagingpackaging workflow not detected
8Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 8
9SASTSAST tool detected but not run on all commits
10Security-Policysecurity policy file detected
n/aSigned-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Direct dependencies 5
RegistryPackageVersion constraintManifest
Gogithub.com/go-audio/audiov1.0.0go.mod
Gogithub.com/go-audio/wavv1.1.0go.mod
Gogithub.com/quasilyte/go-ruleguard/dslv0.3.23go.mod
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogithub.com/tphakala/simdv1.6.0go.mod
All dependencies 10

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

RegistryPackageVersionRelation
Gogithub.com/go-audio/audiov1.0.0direct
Gogithub.com/go-audio/wavv1.1.0direct
Gogithub.com/quasilyte/go-ruleguard/dslv0.3.23direct
Gogithub.com/stretchr/testifyv1.11.1direct
Gogithub.com/tphakala/simdv1.6.0direct
Gogithub.com/davecgh/go-spewv1.1.1indirect
Gogithub.com/go-audio/riffv1.0.0indirect
Gogithub.com/pmezard/go-difflibv1.0.0indirect
Gogolang.org/x/sysv0.45.0indirect
Gogopkg.in/yaml.v3v3.0.1indirect
Dependency advisories 0

This repository publishes no package the index resolves, so its own dependency graph was assessed — 10 packages, which also include development and test pins that never ship: 0 carry known advisories, of which 0 are direct.

No known advisories affect the assessed dependencies.

An advisory means the version recorded in the dependency graph falls inside an advisory’s affected range. Reachability is not analysed, and the graph includes development and test pins — a finding may concern tooling rather than shipped software.

Raw JSON report machine-readable
{
  "data": {
    "repo": {
      "topics": [
        "audio",
        "audio-processing",
        "dsp",
        "fir-filter",
        "golang",
        "resampling",
        "sample-rate-conversion",
        "simd",
        "soxr"
      ],
      "is_fork": false,
      "size_kb": 2735,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "C": 49436,
        "Go": 872582,
        "Shell": 2876,
        "Python": 3877,
        "Makefile": 2132
      },
      "pushed_at": "2026-07-20T07:10:41Z",
      "created_at": "2025-11-24T15:41:26Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T07:10:52Z",
      "description": "High-quality audio resampling library for Go, based on libsoxr. Polyphase FIR filtering with Kaiser window design, SIMD acceleration, and professional-grade quality.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "LGPL-2.1",
      "default_branch": "master",
      "license_spdx_raw": "LGPL-2.1",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Tomi P. Hakala",
      "type": "User",
      "login": "tphakala",
      "company": null,
      "location": "Muurame, Finland",
      "followers": 77,
      "avatar_url": "https://avatars.githubusercontent.com/u/7030001?v=4",
      "created_at": "2014-03-22T09:31:18Z",
      "is_verified": null,
      "public_repos": 63,
      "account_age_days": 4504
    },
    "license": {
      "state": "standard",
      "spdx_id": "LGPL-2.1",
      "raw_spdx": "LGPL-2.1",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-17T18:05:56Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-05-29T20:32:10Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-05-04T07:51:37Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-03-15T09:35:22Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-03-15T09:09:59Z"
        },
        {
          "tag": "v1.0.1",
          "kind": "patch",
          "published_at": "2026-03-15T09:09:55Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-03-15T09:09:42Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "710675e6d3c96e572389134d2a6fe3bf5ceb6610",
          "body": "…(#58)\n\nBumps the go-non-major group with 1 update: [github.com/tphakala/simd](https://github.com/tphakala/simd).\n\n\nUpdates `github.com/tphakala/simd` from 1.3.0 to 1.6.0\n- [Release notes](https://github.com/tphakala/simd/releases)\n- [Commits](https://github.com/tphakala/simd/compare/v1.3.0...v1.6.0\n[…]\nersion-update:semver-minor\n  dependency-group: go-non-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump github.com/tphakala/simd in the go-non-major group …",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-20T07:10:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55aa35fe7195d4e82d7927b6f604d74feb19ebcd",
          "body": null,
          "is_bot": false,
          "headline": "docs: prepare CHANGELOG for v1.5.0 release",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T18:05:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fbae6024bb951ed3901678eece28f35e58c84db4",
          "body": "… table\n\nThe float32 precision row predated the #51 engine fixes and was 0.5 dB\npessimistic (measured -145.50 dB today vs the documented -145.01). The\nquality validation section only covered the exact-rational 44.1kHz to\n48kHz case; add the measured THD table for ratios that engage the\nsub-phase interpolation banks, guarded by\nTestQualityRegression_THD_ActiveInterpolation.",
          "is_bot": false,
          "headline": "docs: refresh float32 THD figure and add active-interpolation quality…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T18:04:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54dfd11abdcaca892bf29783c930a1a946c7c4ca",
          "body": "…ad code retirement (#57)\n\n* refactor(engine): extract shared cubic interp bank builder\n\nThe phase-wrap measurement test previously re-derived the Catmull-Rom\nbank construction to build its differential reference, so a formula\nchange would have required lockstep edits. NewPolyphaseStage and the\ntest\n[…]\n1 alongside PR #56\n\nCodeRabbit review: the CHANGELOG attributes the defect to #51, so the\nactive-interpolation THD comment now names both the reporting issue and\nthe fixing PR instead of the PR alone.",
          "is_bot": false,
          "headline": "fix: accurate GetLatency startup deficit, polyphase hardening, and de…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T17:58:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "823e02cff007e8a6a4aa0700561b56f597592832",
          "body": "… defects (#56)\n\n* test: pin chunked streaming equivalence with one-shot processing\n\n* fix: cap polyphase history consumption at available input positions\n\nAt severe non-integer downsampling ratios the fixed-point accumulator\novershoots the per-call limit by up to one step, making consumed exceed\nth\n[…]\n(assigning to an already-escaped var\ninside the closure does not allocate) and require.NoError after AllocsPerRun\nreturns, across all five sites (two warm helpers plus the three inline\nsibling tests).",
          "is_bot": false,
          "headline": "fix: streaming contract, flush lifecycle, and polyphase interpolation…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T13:24:30Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1f9143cd07294fcf439dd4780cb497ccdad3ed8",
          "body": "---\nupdated-dependencies:\n- dependency-name: github/codeql-action/init\n  dependency-version: 4.37.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n  dependency-group: github-actions\n- dependency-name: github/codeql-action/autobuild\n  dependency-version: 4.37.0\n  depe\n[…]\nsion-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump the github-actions group with 5 updates (#50)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-13T07:11:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d3a770876f29c6460a0bacc8a0ec5e31f5bacb35",
          "body": "Bumps the github-actions group with 6 updates:\n\n| Package | From | To |\n| --- | --- | --- |\n| [marocchino/sticky-pull-request-comment](https://github.com/marocchino/sticky-pull-request-comment) | `3.0.4` | `3.0.5` |\n| [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) \n[…]\nsion-update:semver-patch\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump the github-actions group with 6 updates (#49)",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-07-06T07:09:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1af7ac2dfea1947a407ebb1d84d293965d0466fc",
          "body": "… updates (#48)\n\nBumps the github-actions group with 11 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/checkout](https://github.com/actions/checkout) | `6.0.2` | `7.0.0` |\n| [actions/setup-go](https://github.com/actions/setup-go) | `6.4.0` | `6.5.0` |\n| [marocchi\n[…]\nsion-update:semver-minor\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump the github-actions group across 1 directory with 11…",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T07:31:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "38eb0ad828d16f6ce42d0ad99b8aabe632b1c097",
          "body": "…(#47)\n\nBumps the go-non-major group with 1 update: [github.com/tphakala/simd](https://github.com/tphakala/simd).\n\n\nUpdates `github.com/tphakala/simd` from 1.1.0 to 1.3.0\n- [Release notes](https://github.com/tphakala/simd/releases)\n- [Commits](https://github.com/tphakala/simd/compare/v1.1.0...v1.3.0\n[…]\nersion-update:semver-minor\n  dependency-group: go-non-major\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump github.com/tphakala/simd in the go-non-major group …",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-06-29T07:31:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d50ebcec88347ec877862e48ae00eeb17ecf8063",
          "body": "…k workflow\n\nREADME:\n- Centered header with tagline and badges grouped into status, CI/quality, and community rows\n- Add release, license, Go version, pure-Go, platforms, GitHub Sponsors, and PRs-welcome badges\n- Add a table of contents and a Sponsor section\n\nCI:\n- Add dedicated .github/workflows/go\n[…]\ncatches CVEs disclosed after the last commit\n- Remove the now-redundant vulncheck job from ci.yml to avoid running govulncheck twice per PR\n- Add .github/FUNDING.yml so GitHub shows the Sponsor button",
          "is_bot": false,
          "headline": "docs: polish README badges, add sponsorship; add scheduled govulnchec…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-09T10:44:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "440f901e3fed50cf5e5b4604d5c52c04b379e491",
          "body": "… and harden WAV writer (#45)\n\n* test(engine): check discarded errors in regression tests\n\nThe regression tests discarded the error returns from NewResampler,\nProcess, and Flush. If any of those failed, the test would continue\nwith empty output: count would be 0 and dcGain NaN, and the NaN\ntolerance\n[…]\nent (channels * bytesPerSample)\nexceeds 65535 would silently overflow when cast to uint16 and corrupt the\nheader. Reject it up front, alongside the existing sample-rate, channel,\nand bit-depth checks.",
          "is_bot": false,
          "headline": "Increase test coverage; fix multi-channel resample-wav frame counting…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-30T09:55:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f88c21474796042105fcd4472929a8df24022ce6",
          "body": "Add SPDX-FileCopyrightText and SPDX-License-Identifier headers to all 99\nGo source files so the per-file copyright and license grant are explicit\nand machine-readable. The grant is LGPL-2.1-or-later, matching the\noriginal LICENSE notice (\"version 2.1 ... or any later version\").\n\nHeaders sit above ex\n[…]\n tags and doc comments keep their\nsemantics.\n\nNo functional changes: go build and go vet pass, gofmt reports no new\nfindings, and the ruleguard build tag still excludes rules/* from the\ndefault build.",
          "is_bot": false,
          "headline": "chore: add SPDX license headers to all Go source files (#42)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-30T08:29:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "88fdaa956af22dcf8ac2a4d4ce0327769974c882",
          "body": "…ction\n\nGitHub's license detector (the licensee gem) classifies a repo by\nmatching the full canonical license body at >=98% confidence. The\nprevious LICENSE held only a short notice, so the GitHub API returned\nNOASSERTION / \"Other\" instead of recognizing the license.\n\nReplace it with the verbatim LG\n[…]\nzation\nit matches that reference byte-for-byte. GitHub will now report\n\"GNU Lesser General Public License v2.1\". This also makes the README's\n\"see the LICENSE file for the full license text\" accurate.",
          "is_bot": false,
          "headline": "docs: replace LICENSE summary with full LGPL-2.1 text for GitHub dete…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-30T08:12:52Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2c98eacde4112b37321f2d785a250c7c29999268",
          "body": "Both presets are 16-bit; the THD ordering comes from passband geometry\n(Low rolls off at 0.80 Nyquist, Medium at 0.90 with a sharper transition),\nnot precision. libsoxr's LQ/MQ recipes show the same ordering.",
          "is_bot": false,
          "headline": "docs: explain why Low shows better THD than Medium",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T20:49:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5194776e1d4fea8270d57244b4b3b0ce38822f77",
          "body": "The SNR comparison was dropped when the THD findings were rewritten. The\nlibsoxr reference figures are captured from actual soxr, so the SNR claim\nis valid; restore it.",
          "is_bot": false,
          "headline": "docs: restore SNR-vs-libsoxr key finding",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T20:46:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15d1bc0cf9716c300e6b036dd32ea54a1e060ad1",
          "body": "The Quality Validation table was generated at v1.0.0 and never updated.\nThe Low/Medium/High 44.1kHz -> 48kHz THD figures shifted in v1.0.1 (commit\n8788f0a, PR #4 \"Fix passband ripple and buffer integrity issues\"), which\nrecalculated the intermediate rate (Fs1). VeryHigh was unchanged, and the\nfigure\n[…]\ner than libsoxr by 0.4 dB)\n- VeryHigh: unchanged at -162.19 dB\n\nAlso refresh the float32/float64 precision table (-144.95/-144.96 ->\n-145.25/-145.01) and note the figures are reproducible via go test.",
          "is_bot": false,
          "headline": "docs: refresh quality validation table with current THD measurements",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T20:44:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "beafcd174261e8e76251a2a07aa7db962edf65bc",
          "body": "Document the APIs and changes merged since v1.3.0:\n- float32 zero-allocation streaming: ProcessInto/EstimateOutput on the\n  float32 engine and ProcessFloat32Into on the New path (#31)\n- FlushMulti / MultiFlusher for multi-channel pipeline draining (#41)\n\nAlso correct stale README facts found during \n[…]\n  runtime dependency\n- Go requirement is 1.26 (matches go.mod), not 1.25\n- Precision Modes example used the internal engine package; switch it to\n  the public NewEngine / NewEngineFloat32 constructors",
          "is_bot": false,
          "headline": "docs: add CHANGELOG and refresh README for v1.4.0",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T20:31:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "42d502c69f8864d47eb7494f7d8d2ccb94061569",
          "body": "* feat: add FlushMulti for multi-channel pipeline draining (#39)\n\nFlush() only drains channel 0, silently dropping the delay-line tails of\nchannels 1..N-1 after ProcessMulti. Add FlushMulti() ([][]float64, error)\nto the Resampler interface that flushes every channel independently using\nthe same per-\n[…]\nacement for MultiFlusher interface\n\nThe MultiFlusher doc comment was merged with the infoProvider doc,\ncausing golangci-lint godoclint to fail.\n\n* fix: deduplicate doc comments on Flush and FlushMulti",
          "is_bot": false,
          "headline": "feat: add FlushMulti for multi-channel pipeline draining (#41)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T20:21:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f06d673edb72b2d0d328529eda9a1eec8121c416",
          "body": "…over-padding (#37, #30) (#40)\n\n* fix: flush inter-stage tail in multi-stage pipelines, drop polyphase over-padding (#37, #30)\n\nconstantRateResampler.Flush() flushed each stage into the next stage's input\nbuffer but never ran that buffer back through the next stage, so any pipeline\nwith 2+ stages dr\n[…]\nt silence. The\ncanonical-length bounds already prove the delay line drained without dropping\nreal samples (under-padding shows up as a short total). Keep the non-empty\nguard, drop the value assertion.",
          "is_bot": false,
          "headline": "fix: flush inter-stage tail in multi-stage pipelines, drop polyphase …",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T19:56:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ee87a4558da2b7c32b4e1a2d4cd24b4ba6341f8b",
          "body": "…p dead mutex (#32, #33, #34) (#38)\n\n* perf,fix: reuse one engine for stereo, drain all-available in processChannel, drop dead mutex\n\nThree fixes from the PR #31 review, all on the constant-rate / convenience layer.\n\n- ResampleStereo and ResampleStereoFloat32 built a fresh engine per channel\n  via t\n[…]\np ran at\nmost once. Replace the for loop with an if to make the single-pass intent\nexplicit, per Gemini review feedback. Output is unchanged (still verified by\nTestNewPath_ProcessInto_MatchesProcess).",
          "is_bot": false,
          "headline": "perf,fix: stereo engine reuse, all-available processChannel read, dro…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T18:16:50Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "78dff32962333bc639e4fdc30175607ee84a6481",
          "body": "…m (#36)\n\nThe Benchmark Comparison job wrote pr.bench into the workspace, then ran\nactions/checkout a second time to get the base branch. That second checkout\ncleans the working tree (git clean -ffdx), deleting the untracked pr.bench\nbefore the compare step runs, so benchstat failed with:\n\n    bench\n[…]\ny got an empty benchmark comparison.\n\nWrite both pr.bench and base.bench to $RUNNER_TEMP, which lives outside the\ncheckout directory and survives the re-checkout, and point benchstat there.\n\nFixes #35",
          "is_bot": false,
          "headline": "ci: write benchmark results to $RUNNER_TEMP so benchstat can find the…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T18:09:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "664cf7ee64a6ba6da51b4cd59c95bdef6c46dacc",
          "body": "* feat: zero-allocation float32 streaming and batch APIs\n\nAdd float32 mirrors of the float64 caller-owned-output APIs so float32\naudio can be resampled without per-call allocations:\n\n- SimpleResamplerFloat32.ProcessInto + EstimateOutput (engine path,\n  float32-native zero-copy via engine.ProcessZero\n[…]\nwithout bound for the resampler's lifetime. Produced output is\nalways <= EstimateOutput, so this never trips the underestimate guard.\nReuses the computed required value for the buffer-too-small check.",
          "is_bot": false,
          "headline": "feat: zero-allocation float32 streaming and batch APIs (#31)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T16:57:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "81b18eced6e943d670e6e611c870d11195c39cfa",
          "body": "…lyphase split (#29)\n\nRemoves dead code (unused consts, FIFOBuffer, RingBuffer.Peek, the orphaned\nFFTConvolver, and the now-unused gonum/c128 deps), stabilizes the warm float64\nProcessInto buffers to 0 allocs/op, drops the four per-sample bounds checks in\nthe PolyphaseStage hot loop, and splits the \n[…]\n polyphase.go into focused\nfiles (resampler.go, polyphase_stage.go, dft_stage.go, filter_params.go). The\nsplit is pure relocation; output is bit-identical.\n\nCloses #23\nCloses #24\nCloses #25\nCloses #27",
          "is_bot": false,
          "headline": "engine: dead-code cleanup, warm-path zero-alloc, hot-loop BCE, and po…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T16:13:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0e2c53a67145a0c6160e03af0c2d22c8ea15605c",
          "body": "…ew (#21)\n\nThree related CI changes:\n\n1. precision tests: route precisionMeasureTHD/SNR through the existing\n   Cooley-Tukey fft() helper instead of an O(n^2) hand-rolled DFT that\n   called cmplx.Exp n^2 times (8192^2 ~= 67M per call, x4 per iteration).\n   TestPrecisionComparison dropped from ~200s \n[…]\n add a\n   concurrency group that cancels superseded runs, a job timeout, and\n   modest -benchtime/-count for a fast PR signal.\n\n3. remove the Claude Code review GitHub Action (claude-code-review.yml).",
          "is_bot": false,
          "headline": "ci: speed up benchmark workflow and precision tests, drop Claude revi…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T13:42:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fbddfcad6b695f9583a344c8b0dee4ac4deb6332",
          "body": "Upgrades github.com/tphakala/simd v1.0.22 -> v1.1.0 (pulls in\ngolang.org/x/sys v0.42.0 -> v0.45.0).\n\nRelevant changes for this module, which uses the c128, f64, f32 and\ncpu packages:\n\n- c128 Conj/Abs/AbsSq are 2-3.4x faster (used in the FFT-convolve path)\n- ARM64 NEON correctness fixes (FNEG/FRINTN \n[…]\nx: f32/f64 Exp and f32 Sigmoid/Tanh moved from\n  AVX to AVX2 gating, with a new FMA-free AVX dispatch tier\n- Min/Max no longer panic on empty slices\n\nBuild, vet and the full test suite pass on v1.1.0.",
          "is_bot": false,
          "headline": "chore(deps): bump tphakala/simd to v1.1.0 (#20)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-29T13:25:53Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3edc2668fddb9acf6f5d9a21ee9d048d36ad9d62",
          "body": "Add nolint directives for:\n- unparam: processZeroCopy error returns kept for symmetry with Process\n- dupl: Process/ProcessZeroCopy intentional parallel structure\n- staticcheck QF1008: explicit embedded field access for clarity",
          "is_bot": false,
          "headline": "fix: resolve lint warnings from ProcessZeroCopy merge",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-04T07:48:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "532ac8733d4429c66dd1706530291a0737df475d",
          "body": "…updates (#16)\n\nBumps the github-actions group with 8 updates in the / directory:\n\n| Package | From | To |\n| --- | --- | --- |\n| [actions/setup-go](https://github.com/actions/setup-go) | `6.3.0` | `6.4.0` |\n| [marocchino/sticky-pull-request-comment](https://github.com/marocchino/sticky-pull-request-\n[…]\nsion-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>\nCo-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>",
          "is_bot": true,
          "headline": "chore(deps): bump the github-actions group across 1 directory with 8 …",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-05-04T07:36:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5a8d20806b7ca3a4894549cf4efd6ca29f8cf758",
          "body": "* feat: add zero-allocation ProcessInto API\n\nEvery Process call allocates 384KB-5.2MB through defensive copies in the\ninternal stage pipeline. This adds a zero-allocation code path\n(ProcessInto) that eliminates these allocations for callers that\nimmediately consume the output, while preserving the e\n[…]\nn RingBuffer.ReadInto (modernize).\n- Preallocate test slices to avoid repeated growth.\n\n---------\n\nCo-authored-by: Cursor <cursoragent@cursor.com>\nCo-authored-by: Tomi P. Hakala <tomi.hakala@pobox.fi>",
          "is_bot": false,
          "headline": "feat: add zero-allocation ProcessInto API (#17)",
          "author_name": "Anya Sabo",
          "author_login": "anyasabo",
          "committed_at": "2026-05-04T07:33:39Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "bfa4efd72c34267fef7100a5ec399ddc3e7b70fd",
          "body": "- Fix staticcheck QF1012: use fmt.Fprintf instead of\n  WriteString(fmt.Sprintf) in halfband_test.go\n- Remove unused constants: hermiteCoeff0_5/1_5/2_5,\n  throughputTestSamples, regressionAmplitudeTolerance,\n  regressionMinAntiAliasing_*, soxrBitsQuick, soxrLowQualityBW0,\n  passbandTolerance, coeffTo\n[…]\nfreqTolerance, filterGainTarget,\n  phasePrecisionBits, phasePrecisionMask, prevPhaseLookback,\n  testPassbandFreq, testStopbandFreq, stopbandFloorDB\n- Remove unused function measureAntiAliasingInternal",
          "is_bot": false,
          "headline": "fix: resolve all lint warnings for zero-warning policy",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-03-15T09:30:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f00337f2d091e0907d3bbf5f016dd230f4c4a9bd",
          "body": "…eters\n\nAdd Go native fuzz tests for:\n- BesselI0, KaiserBeta, KaiserBetaWithTrBw, EstimateFilterLength (mathutil)\n- DesignLowPassFilter, KaiserWindow (filter)\n- New, ResampleMono (top-level API)\n\nBugs found and fixed by fuzzing:\n- KaiserWindow: NaN coefficients when BesselI0 overflows to +Inf for\n  \n[…]\nesignLowPassFilter: add maximum attenuation validation (500 dB) to\n  prevent BesselI0 overflow in downstream Kaiser window calculation.\n\nAlso adds CONTRIBUTING.md with development workflow guidelines.",
          "is_bot": false,
          "headline": "feat: add fuzz tests and fix Kaiser window overflow for extreme param…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-03-15T09:18:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e8faada2996475619e94b177c1d1535969381ac7",
          "body": null,
          "is_bot": false,
          "headline": "security: move write permissions to job level in dependabot-auto-merge",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-03-15T08:54:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27ccd2bcf75616bd4edd5492692a43e6cc0ce4ea",
          "body": "- Pin all GitHub Actions to commit SHAs\n- Add top-level permissions to all workflows (least privilege)\n- Move security-events permission to job level in CodeQL workflow\n- Add SECURITY.md with vulnerability reporting instructions\n- Remove binary artifacts (resample-wav, test-reference/test_quality)\n- Add binaries to .gitignore to prevent re-commit",
          "is_bot": false,
          "headline": "security: improve OpenSSF Scorecard compliance",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-03-15T08:50:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea3518505302b631890d8350f11d531fb8cb9abb",
          "body": "- Benchmark comparison on PRs using benchstat\n- Test coverage reporting via Codecov\n- OpenSSF Scorecard for security health scoring\n- Stale issue/PR cleanup (60 days inactive)\n- Add CI, coverage, and scorecard badges to README",
          "is_bot": false,
          "headline": "ci: add benchmark, coverage, scorecard, and stale workflows",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-03-15T08:31:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f07eb77ef34b6d8736bb23dd2e94f2ca665214c",
          "body": null,
          "is_bot": false,
          "headline": "ci: add Dependabot auto-merge for patch and minor updates",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-03-15T08:26:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "070a4b116c93dd9971cdad2cc43d253385938b09",
          "body": null,
          "is_bot": false,
          "headline": "chore: update golang.org/x/sys v0.41.0 -> v0.42.0",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-03-15T08:21:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e65f416aa039cd1dc1cc1b7cfa8cf7370ef96fb1",
          "body": "- Align inline comments in test files for readability\n- Reformat SOXR formula comments to code block style\n- Align const declarations\n- No functional changes",
          "is_bot": false,
          "headline": "style: align inline comments and formatting",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-15T08:26:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a346ebe8a9d449f22adac397869715d0e4de5782",
          "body": null,
          "is_bot": false,
          "headline": "feat: add Claude Code Review workflow for automated PR feedback",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-15T08:24:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "59ad9b8c5dc897f15c363d22fac6986e7b4484c4",
          "body": "* fix: use cubic interpolation for QualityQuick to match SOXR\n\nRoot cause: QualityQuick was using polyphase filtering instead of\ncubic interpolation like SOXR_QQ, resulting in poor THD (-88.23 dB\nvs SOXR's -152.72 dB).\n\nChanges:\n- Updated CubicStage to use SOXR's exact cubic formula from cr-core.c:5\n[…]\npensive precision test in short mode\n\nTestPrecisionComparison_Summary was timing out during race detection\ndue to O(N²) DFT calculations. Added testing.Short() check to skip\nthis expensive test in CI.",
          "is_bot": false,
          "headline": "fix: use cubic interpolation for QualityQuick to match SOXR (#13)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T17:57:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f83d5bfb0698281a49b5e97ccddf301e9e5d53cb",
          "body": "- Refactor resampleWAVGeneric from complexity 64 to <50\n- Fix output buffer silent data loss\n- Add -short flag to race detection\n- Handle output.Close() errors properly\n- Add .leann/ to .gitignore",
          "is_bot": false,
          "headline": "Merge pull request: Reduce cognitive complexity in resampleWAVGeneric",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T17:10:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bb125526c04da2b649a9fcebded04477edc5553a",
          "body": null,
          "is_bot": false,
          "headline": "fix: add .leann/ to .gitignore to prevent tracking of LEANN index files",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T17:06:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5e5b82add01cf50743429ab2007af6f80505fe6",
          "body": "Detect when interleaveInto returns 0 (buffer too small) and grow buffer\ndynamically. Prevents silent data loss if resampler produces more samples\nthan estimatedOutputSize.\n\nIssue identified by CodeRabbit - high severity data corruption path.",
          "is_bot": false,
          "headline": "fix: prevent silent data loss when output buffer is too small",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T16:42:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa5db61046586468f0bd5dceaaccb5b98b0769ee",
          "body": "Race detection was timing out on internal/engine tests after ~9m35s.\nThe race detector adds 5-10x overhead to compute-intensive tests.\nUsing -short flag skips long-running tests during race detection.",
          "is_bot": false,
          "headline": "fix: add -short flag to race detection to prevent timeout",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T16:32:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "513a6999eae5861ec653961ed8188c6caa140838",
          "body": "Address Gemini high-severity feedback - WAV Close() updates headers,\nerrors must not be silently ignored. Use named return to capture close\nerrors when main function succeeds.\n\nNot implementing sync.Once suggestion - current mutex approach preserves\nchannel number in error messages, which is valuable for debugging.",
          "is_bot": false,
          "headline": "fix: handle output.Close() errors on success path",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T15:50:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08592a59264b9c9f02e19185a53536f7d0c9a66c",
          "body": "- Add disclaimer to REFACTORING_PLAN.md that it's a design document\n- Document goroutine non-cancellation design choice (bounded channels)\n- Add comment that resampledChannels writes are safe (distinct indices)",
          "is_bot": false,
          "headline": "docs: clarify refactoring plan and goroutine behavior",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T15:40:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3d4429001a091fc70a51f88d27a8bd69250ce10",
          "body": "- Add progress clamping to prevent >100% display\n- Fix resource leak in wavOutputWriter.Close() - always close both writer and file\n- Add comment clarifying parallel error handling drops subsequent errors\n- Fix misleading 'sine wave' comments (data is constant signal)\n- Fix nil format parameter in test (use proper audio.Format)\n- Add markdown language specifier to code fence",
          "is_bot": false,
          "headline": "fix: address CodeRabbit review feedback",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T15:32:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a62bc4f00447ad7a5517222bd47d49a6f2cece5c",
          "body": "…o <50\n\nExtracted monolithic resampleWAVGeneric function into 9 focused, testable\nhelpers to address gocognit linter error.\n\nChanges:\n- Created helpers.go with 9 helper functions and types:\n  * openWAVInput() - Input validation and format extraction\n  * createChannelResamplers() - Resampler initiali\n[…]\nfixed\n  * Removed unused imports\n\nTesting:\n- All existing tests pass\n- 18 new unit tests added\n- Linter passes with 0 issues\n\nFixes: gocognit cognitive complexity error in cmd/resample-wav/main.go:217",
          "is_bot": false,
          "headline": "refactor: reduce cognitive complexity in resampleWAVGeneric from 64 t…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T15:15:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9ac4c2b85bbcaab7f256de37f72b290c1bbc7b05",
          "body": "…ilures (#11)\n\n* fix: correct alias measurement formula and fix test infrastructure failures\n\nFix 3 failing test functions (4 sub-test failures) in quality measurement\ninfrastructure:\n\n- Fix alias target region formula in measureDownsamplingAntiAliasing to\n  correctly compute where aliases fold: [ou\n[…]\n suggestion: use math.Abs(ratio-math.Round(ratio)) < 1e-9\ninstead of exact float equality for detecting integer downsampling ratios.\n\n---------\n\nCo-authored-by: Tomi P. Hakala <tomi.p.hakala@elisa.fi>",
          "is_bot": false,
          "headline": "fix: correct alias measurement formula and fix test infrastructure fa…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T14:44:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cedd339b3cbbc753f8343a6610b5ecf1d304f953",
          "body": "…-actions-4a349ddaed\n\nBump the github-actions group with 4 updates",
          "is_bot": false,
          "headline": "Merge pull request #10 from tphakala/dependabot/github_actions/github…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T12:40:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46b08f3082436b78003936ba23fc382932e5c3d2",
          "body": "Bumps the github-actions group with 4 updates: [actions/checkout](https://github.com/actions/checkout), [actions/setup-go](https://github.com/actions/setup-go), [golangci/golangci-lint-action](https://github.com/golangci/golangci-lint-action) and [github/codeql-action](https://github.com/github/code\n[…]\non\n  dependency-version: '4'\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n  dependency-group: github-actions\n...\n\nSigned-off-by: dependabot[bot] <support@github.com>",
          "is_bot": true,
          "headline": "Bump the github-actions group with 4 updates",
          "author_name": "dependabot[bot]",
          "author_login": "dependabot[bot]",
          "committed_at": "2026-02-13T12:23:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3abdfc759b1f7a50500b576377b099974f2ac01c",
          "body": "- Introduced rules for replacing deprecated functions and patterns:\n  - `runtime.SetFinalizer` with `runtime.AddCleanup`\n  - `runtime.GOROOT()` with `go env GOROOT`\n  - `sort.Ints`, `sort.Strings`, and `sort.Float64s` with `slices.Sort`\n  - Manual byte slice cloning with `bytes.Clone`\n  - Manual sli\n[…]\nc date/time format strings with named constants in `time`\n- Warned against using `len()` or `cap()` on timer/ticker channels\n- Detected deferred calls to `time.Since` and `time.Now` for correct timing",
          "is_bot": false,
          "headline": "Add modernization rules for Go 1.20+ to 1.26+",
          "author_name": "Tomi P. Hakala",
          "author_login": "tomiphakala",
          "committed_at": "2026-02-13T12:23:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "137ef38c8912c4eb84bf8e9c601acab5d449c78e",
          "body": "ci: add GitHub Actions workflows and Dependabot",
          "is_bot": false,
          "headline": "Merge pull request #8 from tphakala/ci/add-github-workflows",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T12:22:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f0adc3dc174ca2cf86cf09116b048c93eb13a623",
          "body": "Pin golangci-lint to v2.9.0 (released with Go 1.26 support) and\nupgrade to golangci-lint-action@v7 which is required for v2.x.",
          "is_bot": false,
          "headline": "ci: use golangci-lint v2.9.0 with action v7",
          "author_name": "Tomi P. Hakala",
          "author_login": "tomiphakala",
          "committed_at": "2026-02-13T12:13:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7618fe78de1bee5ce0d021ced6d72e1b7fb1361d",
          "body": "Use install-mode: goinstall so golangci-lint is compiled with the\nrunner's Go toolchain instead of using a pre-built binary that may\ntarget an older Go version.\n\nAdd dependency update grouping to reduce Dependabot PR noise.",
          "is_bot": false,
          "headline": "ci: fix golangci-lint Go version mismatch, add dependabot grouping",
          "author_name": "Tomi P. Hakala",
          "author_login": "tomiphakala",
          "committed_at": "2026-02-13T12:10:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91b2bee1973ba0b5ae86eeb50aad7ea2c83556bc",
          "body": "Add CI pipeline (lint, test across OS, race detection, govulncheck,\nbuild verification), CodeQL security analysis, and Dependabot\nconfiguration for Go module and Actions version updates.",
          "is_bot": false,
          "headline": "ci: add GitHub Actions workflows and Dependabot",
          "author_name": "Tomi P. Hakala",
          "author_login": "tomiphakala",
          "committed_at": "2026-02-13T11:59:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c7ac043123fa0242699e8d418aa2da777a9d48c",
          "body": "fix: modernize Go idioms flagged by golangci-lint",
          "is_bot": false,
          "headline": "Merge pull request #7 from tphakala/fix/linter-modernize-go-idioms",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-02-13T11:52:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56edb47028e68549be56661047b88c174b05a4d5",
          "body": "- Replace totalSamples accumulator with b.N * len(input) post-loop\n- Remove redundant b.ResetTimer() calls (handled by b.Loop())\n- Remove redundant b.StopTimer() call (handled by b.Loop())\n- Use time.Second for timeout readability",
          "is_bot": false,
          "headline": "refactor: apply CodeRabbit review suggestions for benchmarks",
          "author_name": "Tomi P. Hakala",
          "author_login": "tomiphakala",
          "committed_at": "2026-02-13T11:50:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2be71bda429e8603f4cbfc758737671e716be2cc",
          "body": "Replace sample-by-sample iteration with bulk copy operations in\nRingBuffer.Peek and FIFOBuffer.grow, handling wrap-around with\ntwo-segment copies. Addresses Gemini code review feedback.",
          "is_bot": false,
          "headline": "perf: use copy instead of element-by-element loops in ring buffer",
          "author_name": "Tomi P. Hakala",
          "author_login": "tomiphakala",
          "committed_at": "2026-02-13T11:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff09c8e763f967e3d5821d30d2b6900f01f6ba3a",
          "body": "- Convert classic for loops to integer range loops (Go 1.22+)\n- Convert benchmark loops to b.Loop() (Go 1.24+)\n- Thread context.Context through test helpers for t.Context() (Go 1.24+)\n- Preallocate output slice in examples/basic",
          "is_bot": false,
          "headline": "fix: modernize Go idioms flagged by golangci-lint",
          "author_name": "Tomi P. Hakala",
          "author_login": "tomiphakala",
          "committed_at": "2026-02-13T11:38:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82ef7ebf54dea628c5e5db5f7896111f6a426394",
          "body": "Add float32-native API for consistent float32 workflows",
          "is_bot": false,
          "headline": "Merge pull request #6 from tphakala/feature/float32-native-api",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-26T16:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "97c328af14060d336a515263dd8c7266f1d493d1",
          "body": "Previously, users working with float32 audio had an awkward mismatch:\nProcessFloat32() returned []float32, but Flush() returned []float64,\nrequiring manual conversion for the flushed samples.\n\nThis adds a complete float32-native API that keeps everything in float32:\n\nNew types and functions:\n- Simpl\n[…]\nite in convenience_float32_test.go\n- Verified float32/float64 consistency (diff ~2.6e-7)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add float32-native API for consistent float32 workflows",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-26T16:32:09Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0a55d5854bf8180107d454bdc8a548de0c9fc37b",
          "body": "Update test expectations for new Fs1 calculation",
          "is_bot": false,
          "headline": "Merge pull request #5 from tphakala/fix/update-test-expectations",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T16:48:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e5e5053a87b5c5741bfefb84e75993f5370fa4b",
          "body": "The branch changed how Fs1 is calculated in ComputePolyphaseFilterParams:\n- Old: Fs1 = 0.5 (hardcoded)\n- New: Fs1 = ratio (computed based on polyphase ratio)\n\nThis affects FsRaw = 3 + |Fs1 - 1| for downsampling with pre-stage.\n\nChanges:\n- Update TestComputePolyphaseFilterParams_FnNormalization to ca\n[…]\nagnostic from\n  error to log since Fc represents rolloff compensation, not filter cutoff\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update test expectations for new Fs1 calculation",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T16:42:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "130f35a277cb1a07c5f7c428fbd73d34dfdeb5cd",
          "body": "Fix passband ripple and buffer integrity issues",
          "is_bot": false,
          "headline": "Merge pull request #4 from tphakala/fix/passband-ripple-buffer-integrity",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T16:28:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cbddc8efb15caee20b5aada01c52a0f46e2b35b",
          "body": "- Fix decimation phase update formula: the correct formula is\n  (oldPhase - consumed) mod factor, not (factor - (oldPhase + consumed) mod factor).\n  The previous formula was coincidentally correct for factor=2 but wrong for\n  factor=3 or higher. This bug would manifest in non-2x decimation ratios.\n\n\n[…]\node correctly implements soxr's intentional\n  behavior (using Fn=1 formula when preM=0).\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix decimation phase calculation and clarify comment",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T16:22:51Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2e8a5cf2e1b165b7e7fa3aa781e4766149950789",
          "body": "- Fix contradictory comment about hasPreStage parameter:\n  Comment said \"hasPreStage = true\" but code passed false.\n  Updated to explain why false is correct (soxr uses preM=0 for\n  upsampling pre-stages, so polyphase uses Fn=1 normalization)\n- Fix hardcoded passbandVeryHigh in NewDFTDecimationStage:\n  Now uses qualityToPassbandEnd(quality) to respect quality parameter\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix additional code review issues from coderabbit",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T15:37:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e1ea917250b6036330b8a74ef6ed7cca6fcd15ee",
          "body": "- Use math.MaxFloat64 for minAtten initialization instead of fragile == 0.0 check\n- Add explicit check that -6dB crossing was found in filter test\n- Initialize minGain/maxGain with math.Inf to properly track actual measured gains\n- Handle NewResampler and Flush errors instead of ignoring them\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix code review issues from coderabbit",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T15:19:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "379054ab1032ba588e204432c1a870f0edac5671",
          "body": "- Merge duplicate if-else branches in ComputePolyphaseFilterParams\n  (upsampling and downsampling without pre-stage use same formula)\n- Remove duplicate package godoc comments from test files\n- Add named constants for passband frequencies (passbandLow, passbandMedium,\n  passbandHigh, passbandVeryHig\n[…]\ne cleanup\n\nRemaining: gocognit warning for resampleWAVGeneric (needs larger refactoring)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix golangci-lint issues",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T15:16:41Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b6a7b3e7314573b11057b6acb181ba326c837a24",
          "body": "- Remove unused MinAttenuation field from DecimationTestCase\n- Remove unused attenuationFromBits helper function\n- Add assertions to TestSoxrTapCountRanges for sensible ranges\n- Remove unused attenuation constant from TestFilterFrequencyResponse_Passband\n- Add proper error handling to diagnostic tes\n[…]\nction\n- Simplify test case name generation in TestBesselI0_KnownValues using fmt.Sprintf\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Address code review comments",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T14:59:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "8788f0ad4b2608654fe15bc094061bdca7de2cf8",
          "body": "Buffer integrity fix:\n- Return copy of internal buffer in DFTDecimationStage.Process()\n  to prevent caller from holding reference to reused internal slice\n\nPassband ripple fix for non-integer downsampling (e.g., 48→44.1):\n- Implement soxr's 2x DFT upsampling pre-stage architecture\n  (48→96→44.1 inst\n[…]\net validation against soxr\n- soxr_reference_test.go: Kaiser beta and filter length tests\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix passband ripple and buffer integrity issues",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T14:19:43Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0ee2a30f9792926966ac31ab4916e999b3a8dc0b",
          "body": "Add parallel channel processing for multi-channel audio",
          "is_bot": false,
          "headline": "Merge pull request #2 from tphakala/feature/parallel-channel-processing",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T11:43:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "27c55f4f7612c3092bc24cae79640e73b09718db",
          "body": "Address code review feedback:\n- Fix flush loop to collect all channels first, then interleave together\n  (previously wrote partial channel data with zeros, causing silence gaps)\n- Remove unused NumWorkers config field (more relevant for Strategy 2)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix flush loop interleaving and remove unused NumWorkers",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T11:43:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d3f6708332ec84591744741f131258e330a9cc79",
          "body": "Implements Strategy 1 from issue #1: Channel-Level Parallelism.\n\nChanges:\n- Add EnableParallel and NumWorkers fields to Config struct\n- Update constantRateResampler.ProcessMulti to process channels\n  concurrently when EnableParallel is true\n- Add -parallel flag to resample-wav CLI (enabled by defaul\n[…]\nnt\nfilter state. Mono audio falls back to sequential processing.\n\nCloses #1 (Strategy 1)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add parallel channel processing for multi-channel audio",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-25T11:36:33Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "067edb77c74e671ae1485d64fb929a77e4140247",
          "body": "- Adjusted formatting in `critical_functions_test.go`, `function_throughput_test.go`, and `precision_comparison_test.go` for better alignment and clarity.\n- Standardized spacing and indentation in various test cases to enhance code maintainability.\n- Updated comments in `polyphase.go` to improve clarity on cubic interpolation constants and quality attenuation thresholds.\n\nThis commit focuses on code style improvements without altering functionality.",
          "is_bot": false,
          "headline": "Refactor test files for improved readability and consistency",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:55:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70af5f0dc30cfddb30ce4cf4a3c4c924fdc0d4db",
          "body": "- Lead with 'only pure Go' positioning\n- Add float32/float64 selectable precision\n- Add cubic coefficient interpolation\n- Fix precision values (High=20-bit, VeryHigh=28-bit matching soxr)\n- Add attenuation dB values for each preset\n- Mention quality validation against libsoxr\n- Add cross-platform compatibility note\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update doc.go for pkg.go.dev with current features",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:55:02Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1d883b691b30b0be16e8754a3c551ff195b7bc89",
          "body": "- simd library automatically uses AVX2/SSE when available\n- GOAMD64=v3 only affects remaining non-SIMD Go code paths\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Clarify SIMD usage in performance section",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:53:28Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4bb64022a7d575f509741a3d88064907d0a54557",
          "body": "- Updated the opening line to specify the library as \"the only pure Go\" audio resampler known.\n- Removed the emphasis on CGO dependencies while maintaining the focus on the advantages of pure Go.\n- Streamlined the explanation of the library's capabilities and its basis on libsoxr.",
          "is_bot": false,
          "headline": "Clarify README description of the library's uniqueness",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:51:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ec62bd8f9cecf4599bdca5bb3d533ebde6c5f334",
          "body": "- Lead with 'the only pure Go' positioning\n- Explain why pure Go matters (cross-compilation, no linking)\n- Clarify this is a complete reimplementation, not a CGO wrapper\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Emphasize unique position as only pure Go audio resampler",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:50:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8f0d4d88c172fb41a6a93bdbf8c55b40f84ab708",
          "body": "- Add bold Pure Go callout in opening line\n- Add blockquote highlighting cross-platform compatibility\n- Move Pure Go and Cross-platform to top of features list\n- Emphasize no build complexity advantage\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Highlight Pure Go / no CGO as key differentiator in README",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:50:06Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2afb7e4704ee4c0c7501f0aa73f3a596386ddb50",
          "body": "- Updated the README to include new quality presets with precision and attenuation values, improving clarity on use cases.\n- Added a section comparing Total Harmonic Distortion (THD) measurements against libsoxr, highlighting performance metrics for different presets.\n- Introduced a new section on p\n[…]\n4) with examples and performance comparisons, emphasizing the library's flexibility.\n- Enhanced descriptions of features and architecture to reflect recent improvements in the audio processing engine.",
          "is_bot": false,
          "headline": "Enhance README with detailed quality presets and precision modes",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:46:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed70cf45f486cbb1add1de22da5aefcae91f2e5a",
          "body": "…ssing\n\n- Introduced a new test file `precision_comparison_test.go` to evaluate the accuracy and performance differences between float32 and float64 resampling paths.\n- Implemented comprehensive tests for DC gain, Total Harmonic Distortion (THD), Signal-to-Noise Ratio (SNR), and passband ripple acro\n[…]\nor test results to facilitate quality assessment and comparison.\n- Included benchmark tests to measure throughput for both float32 and float64 conversions, enhancing performance analysis capabilities.",
          "is_bot": false,
          "headline": "Add precision comparison tests for float32 and float64 in audio proce…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:20:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1b29dbd9099d0c2517428c8129476d03037b3237",
          "body": "- Updated the `github.com/tphakala/simd` dependency from v1.0.12 to v1.0.14 for improved performance and features.\n- Added `b.Helper()` calls in various benchmark functions to improve test output clarity and maintainability.\n- Refactored cubic interpolation logic in the `Process` method of the `PolyphaseStage` to utilize SIMD operations for better performance.\n- Initialized summary slices with a predefined capacity in test files to optimize memory allocation.",
          "is_bot": false,
          "headline": "Update dependencies and enhance benchmarking tests",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T15:13:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "96731c813a434de960cd4490ffa1dae9f1b5a2ff",
          "body": "- Introduced a new test file `quality_regression_test.go` to validate that quality metrics such as DC gain, THD, SNR, and passband ripple do not regress during optimization.\n- Implemented baseline thresholds for various quality levels, ensuring that any regression in audio processing quality is dete\n[…]\ncing the robustness of the audio processing validation framework.\n- Included internal measurement functions for THD, SNR, and passband ripple to facilitate accurate quality assessments during testing.",
          "is_bot": false,
          "headline": "Add quality regression tests for audio processing engine",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T14:10:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ccb1422a128bf3244391271451a76b24a6fb0b3d",
          "body": "- Introduced a new test file `function_throughput_test.go` to benchmark individual functions within the audio processing engine.\n- Implemented benchmarks for core operations including convolution, dot product, interleaving, and DFT stages, measuring performance across various configurations.\n- Added\n[…]\nng for identification of optimization targets in the audio processing pipeline.\n- Enhanced the testing framework to facilitate performance analysis and ensure robust validation of function efficiency.",
          "is_bot": false,
          "headline": "Add function throughput benchmarks for audio processing",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T14:07:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5ffd479514ec49e89a367e46a88565ae1f2564c0",
          "body": "- Introduced a new test file `throughput_comparison_test.go` to measure and compare throughput (samples/second) between the Go resampler and SOXR across various quality presets.\n- Implemented functions to measure throughput for both Go and SOXR, including detailed logging of results for different in\n[…]\no evaluate performance under different conditions.\n- Enhanced the `test_quality.c` file to include a new throughput measurement feature, allowing for comprehensive performance analysis during testing.",
          "is_bot": false,
          "headline": "Add throughput comparison tests for Go resampler and SOXR",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T14:00:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "67563feb1c3bb0b9071e53404e13d4969832e7dd",
          "body": "- Expanded the `TestTHD_AllQualityPresets` and `TestSNR_AllQualityPresets` functions in `quality_preset_comparison_test.go` to include new test cases for the conversion from 48kHz to 32kHz, specifically for BirdNET scenarios.\n- This addition enhances the coverage of quality preset comparisons, ensuring thorough validation of audio processing across different sample rates.",
          "is_bot": false,
          "headline": "Add additional quality preset test cases for BirdNET conversions",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T13:44:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1591c2ae40836c50dffac6cc7e8259191717dd9b",
          "body": "- Deleted the `bench_soxr`, `test_antialiasing`, and `test_soxr_reference` files as they are no longer needed, streamlining the test suite and removing outdated references.",
          "is_bot": false,
          "headline": "Remove obsolete binary test files for SOXR benchmarks",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T13:37:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c72bcfabf025190cd194e6fac4195186ae7312c3",
          "body": "- Introduced a new test file `quality_preset_comparison_test.go` to validate the performance of various Go quality presets against their corresponding SOXR presets.\n- Implemented comprehensive tests for THD, SNR, Passband Ripple, and Impulse Response across all quality presets, ensuring alignment wi\n[…]\npreset mappings and improved output formatting for clarity in test results.\n- Enhanced the overall testing framework to ensure robust validation of audio processing quality across different scenarios.",
          "is_bot": false,
          "headline": "Add quality preset comparison tests and update test quality tool",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T13:25:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "541c0709d1231b7a51d5133021871cf5fc15f0bc",
          "body": "- Updated the `createStage` function to pass the `config.Quality.Precision` to filter stages, ensuring consistent quality across the pipeline.\n- Modified the `newHalfBandStage`, `newPolyphaseStage`, and `newFFTStage` functions to accept precision as a parameter, improving filter design based on qual\n[…]\nbit precision to engine quality settings, aligning with soxr's approach for better audio processing.\n- Enhanced comments and documentation for clarity on the impact of precision on filter performance.",
          "is_bot": false,
          "headline": "Enhance pipeline stages with precision-based quality mapping",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T13:18:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "dc92db62c190faf84153467d1c067ef935896758",
          "body": "- Introduced a new test file `quality_preset_test.go` to validate quality presets and their corresponding attenuation values based on soxr's specifications.\n- Expanded the `qualityName` function in `critical_functions_test.go` to include mappings for additional quality levels: QualityQuick, QualityV\n[…]\nmprehensive tests to ensure that quality levels produce distinct filter parameters and that the attenuation values align with expected results, enhancing the robustness of the audio processing engine.",
          "is_bot": false,
          "headline": "Add quality presets and enhance quality name mapping in tests",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T13:06:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4940935c8d5020c19b5a7676612c2c8cc6ba641d",
          "body": "- Modified the `measureDownsamplingAntiAliasing` function calls in the `antialiasing_test.go` file to use `QualityVeryHigh` instead of `QualityHigh` for improved accuracy in downsampling tests.\n- Enhanced comments in `polyphase.go` to clarify the need for anti-aliasing filter parameters during downsampling without a pre-stage, aligning with best practices for filter design.",
          "is_bot": false,
          "headline": "Update anti-aliasing quality in downsampling tests to VeryHigh",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T12:55:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2930254eee0255aca6bddf9386d1e9b22f70e619",
          "body": "- Updated the `PolyphaseStage` structure to include cubic interpolation coefficients for improved filter performance.\n- Refactored the `Process` method to utilize cubic interpolation during resampling, enhancing audio quality.\n- Modified the `NewPolyphaseStage` function to accommodate new coefficien\n[…]\ninterpolation logic and ensure accurate audio processing across various scenarios.\n- Improved overall code clarity and maintainability by consolidating interpolation logic and enhancing documentation.",
          "is_bot": false,
          "headline": "Enhance polyphase filter design with cubic interpolation support",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T12:35:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a60daf085f0184d149ef127f136adf5aca9dbc1c",
          "body": "- Updated the `NewPolyphaseStage` function to accept a `hasPreStage` boolean parameter, affecting filter design calculations.\n- Modified existing tests across multiple files to reflect the new parameter, ensuring accurate handling of upsampling and downsampling scenarios.\n- Enhanced the `ComputePoly\n[…]\ntion to incorporate the `hasPreStage` logic, aligning with soxr's methodology for filter design.\n- Improved overall test coverage and clarity by updating assertions and logging in relevant test cases.",
          "is_bot": false,
          "headline": "Refactor PolyphaseStage to include hasPreStage parameter in constructor",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T12:19:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7bd25976a789f02bfae7a9acaa674e6394afeadd",
          "body": "- Modified test cases in `quality_comparison_test.go` to include updated naming conventions for BirdNET scenarios, reflecting version changes.\n- Added new test cases for 16kHz and 32kHz to 48kHz conversions, ensuring comprehensive coverage of audio quality comparisons.\n- Enhanced existing test cases for consistency and clarity in naming, improving overall test structure.",
          "is_bot": false,
          "headline": "Update quality comparison tests with new BirdNET versions",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T12:10:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "64414747c12c15a39390188b3673bc22fcdd5973",
          "body": "…sign logic\n\n- Introduced unit tests for the `ComputePolyphaseFilterParams` function, validating Fn normalization for both upsampling and downsampling scenarios.\n- Enhanced the `designPolyphaseFilter` function to utilize the new parameter computation logic, ensuring accurate filter design based on s\n[…]\nnsistent handling of edge cases in filter design.\n- Updated existing test files to reflect changes in filter design and added detailed logging for better debugging and validation of filter parameters.",
          "is_bot": false,
          "headline": "Add unit tests for ComputePolyphaseFilterParams and improve filter de…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T12:02:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "54d8fc6393f2646ac1ea7bad359cbcda47773b06",
          "body": "- Deleted `downsampling_bugs_test.go` and `isolated_bugs_test.go` as they contained redundant tests and were no longer aligned with the current filter design.\n- Refactored the `polyphase.go` file to improve the filter design logic, ensuring better handling of downsampling scenarios without unnecessa\n[…]\n parameter calculations for high attenuation scenarios, aligning with soxr's methodology.\n- Improved overall code clarity and maintainability by consolidating logic and removing deprecated test cases.",
          "is_bot": false,
          "headline": "Remove outdated tests and refactor polyphase filter design",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T11:36:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ca2f9860cdc44a1d181eed2f8a9c76819259a23d",
          "body": "- Introduced new test files for critical functions, including `critical_functions_test.go`, `downsampling_bugs_test.go`, `isolated_bugs_test.go`, and `export_test.go`, to ensure robust validation of the audio processing engine.\n- Implemented extensive unit tests for functions such as `isIntegerRatio\n[…]\ndation of filter design parameters.\n- Improved overall test structure and logging for clearer feedback during test execution, promoting maintainability and reliability of the audio resampling library.",
          "is_bot": false,
          "headline": "Add comprehensive tests for audio resampling functionality",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T11:16:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed4a6c4006d69c5c3cbe4f2158f361e1badd4522",
          "body": "- Updated test files to replace manual error handling with `testify` assertions for better clarity and maintainability.\n- Enhanced the `halfband_test.go`, `kaiser_test.go`, `polyphase_test.go`, and `bessel_test.go` files by incorporating helper functions from the new `testutil` package.\n- Improved logging and error messages in tests to provide clearer feedback during test failures.\n- Ensured consistency in testing practices across the codebase, promoting a more robust testing framework.",
          "is_bot": false,
          "headline": "Refactor tests to use testify assertions and improve readability",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T10:57:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aef731120e93a51c276631938a9bab4155a7dbbe",
          "body": "- Added new dependencies: `github.com/stretchr/testify`, `github.com/davecgh/go-spew`, `github.com/pmezard/go-difflib`, and `gopkg.in/yaml.v3` to enhance testing capabilities.\n- Introduced comprehensive tests for buffer integrity across various stages, including DFT, Polyphase, and Resampler, ensuri\n[…]\ns.\n- Implemented edge case tests to verify correct handling of empty inputs and single sample processing.\n- Enhanced existing tests to ensure robustness and reliability of the audio processing engine.",
          "is_bot": false,
          "headline": "Update dependencies and add extensive tests for buffer integrity",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T10:17:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7c311fd5bfefb9db2445e0305e8d127bbe136d91",
          "body": "- Updated the Process method in DFTStage to return a copy of the output slice, preventing potential corruption of the caller's data.\n- Introduced a new test file `thd_diagnostic_test.go` containing extensive unit tests for the DFT stage, including THD isolation, coefficient analysis, and performance\n[…]\nt validation of the resampling process.\n- Implemented various checks for output characteristics, including amplitude, frequency response, and THD calculations, to ensure high-quality audio processing.",
          "is_bot": false,
          "headline": "Enhance DFTStage functionality and add comprehensive tests",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T10:06:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d02270343ace12a95f6b0c51404886f038e80c7c",
          "body": "High-quality audio resampling library for Go with:\n- Multiple quality presets (Quick, Low, Medium, High, VeryHigh)\n- Configurable resampling pipeline\n- Internal engine with polyphase filtering\n- Example applications and test references\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Initial commit: Go audio resampler library",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2025-11-24T08:56:36Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 7,
      "commits_last_year": 100,
      "latest_release_at": "2026-07-17T18:05:56Z",
      "latest_release_tag": "v1.5.0",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 11,
      "days_since_latest_release": 4,
      "mean_days_between_releases": 20.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 71,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/tphakala/go-audio-resampler",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tphakala/go-audio-resampler",
          "is_deprecated": false,
          "latest_version": "v1.5.0",
          "repository_url": "https://github.com/tphakala/go-audio-resampler",
          "versions_count": 7,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-17T18:05:39Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 4
        }
      ]
    },
    "popularity": {
      "forks": 4,
      "stars": 9,
      "watchers": 1,
      "fork_history": {
        "days": [
          {
            "date": "2026-02-02",
            "count": 1
          },
          {
            "date": "2026-05-03",
            "count": 1
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-07-03",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 4,
        "total_forks": 4
      },
      "star_history": {
        "days": [
          {
            "date": "2025-11-25",
            "count": 1
          },
          {
            "date": "2026-01-07",
            "count": 1
          },
          {
            "date": "2026-03-03",
            "count": 1
          },
          {
            "date": "2026-03-14",
            "count": 1
          },
          {
            "date": "2026-03-25",
            "count": 1
          },
          {
            "date": "2026-04-05",
            "count": 1
          },
          {
            "date": "2026-04-10",
            "count": 1
          },
          {
            "date": "2026-06-12",
            "count": 1
          },
          {
            "date": "2026-06-23",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 9,
        "total_stars": 9
      },
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Taskfile.yml",
        "test-reference/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 34884,
      "source_files_sampled": 118,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 10,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/go-audio/audio",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.0"
        },
        {
          "name": "github.com/go-audio/wav",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/quasilyte/go-ruleguard/dsl",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.3.23"
        },
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "github.com/tphakala/simd",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.6.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/go-audio/audio",
            "direct": true,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-audio/wav",
            "direct": true,
            "version": "v1.1.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/quasilyte/go-ruleguard/dsl",
            "direct": true,
            "version": "v0.3.23",
            "ecosystem": "go"
          },
          {
            "name": "github.com/stretchr/testify",
            "direct": true,
            "version": "v1.11.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/tphakala/simd",
            "direct": true,
            "version": "v1.6.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/davecgh/go-spew",
            "direct": false,
            "version": "v1.1.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/go-audio/riff",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/pmezard/go-difflib",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sys",
            "direct": false,
            "version": "v0.45.0",
            "ecosystem": "go"
          },
          {
            "name": "gopkg.in/yaml.v3",
            "direct": false,
            "version": "v3.0.1",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 10,
        "direct_count": 5,
        "indirect_count": 5
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 29,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 21,
        "closed_unmerged_prs": 8
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "tphakala",
          "commits": 85,
          "avatar_url": "https://avatars.githubusercontent.com/u/7030001?v=4"
        },
        {
          "type": "User",
          "login": "tomiphakala",
          "commits": 7,
          "avatar_url": "https://avatars.githubusercontent.com/u/272442802?v=4"
        },
        {
          "type": "User",
          "login": "anyasabo",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1638148?v=4"
        }
      ],
      "contributors_sampled": 3,
      "top_contributor_share": 0.914
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "benchmark.yml",
        "ci.yml",
        "codeql.yml",
        "coverage.yml",
        "dependabot-auto-merge.yml",
        "govulncheck.yml",
        "scorecard.yml",
        "stale.yml"
      ],
      "has_docs_dir": false,
      "linter_configs": [
        ".golangci.yaml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 9,
            "reason": "18 out of 19 merged PRs checked by a CI test -- score normalized to 9",
            "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 1/24 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 10,
            "reason": "project is 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": "28 commit(s) and 20 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": 8,
            "reason": "dependency not pinned by hash detected -- score normalized to 8",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 9,
            "reason": "SAST tool detected but not run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "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": "710675e6d3c96e572389134d2a6fe3bf5ceb6610",
        "ran_at": "2026-07-22T08:51:08Z",
        "aggregate_score": 8.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": true,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-22T08:31:40Z",
      "oldest_open_prs": [
        {
          "number": 59,
          "created_at": "2026-07-20T07:09:22Z",
          "last_comment_at": "2026-07-20T07:13:04Z",
          "last_comment_author": "github-actions"
        }
      ],
      "last_merged_pr_at": "2026-07-20T07:10:33Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/tphakala/go-audio-resampler",
    "host": "github.com",
    "name": "go-audio-resampler",
    "owner": "tphakala"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 69,
      "inputs": {
        "security": 87,
        "vitality": 83,
        "community": 43,
        "governance": 60,
        "engineering": 73
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 83,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "commits_last_year": 100,
              "human_commit_share": 0.93,
              "days_since_last_push": 2,
              "active_weeks_last_year": 11
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "11/52 weeks with commits",
                "points": 7.6,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 11
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "100 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "28 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "releases_count": 7,
              "latest_release_tag": "v1.5.0",
              "releases_from_tags": false,
              "days_since_latest_release": 4,
              "mean_days_between_releases": 20.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "7 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 4 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~20.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 20.7
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 4,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 4 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "at_risk",
        "name": "Community & Adoption",
        "value": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 19,
            "inputs": {
              "forks": 4,
              "stars": 9,
              "watchers": 1,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "below_threshold"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "9 stars",
                "points": 14.6,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4 forks",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "1 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (LGPL-2.1)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "LGPL-2.1"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 60,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 18,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 3,
              "top_contributor_share": 0.914
            },
            "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 91% of commits",
                "points": 1.9,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 91
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "3 contributors",
                "points": 4.1,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": 77,
            "inputs": {
              "merged_prs": 29,
              "open_issues": 0,
              "closed_issues": 21,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 8
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "29/37 decided PRs merged",
                "points": 30,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 29,
                      "decided": 37
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/24 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": 61,
            "inputs": {
              "followers": 77,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "tphakala",
              "public_repos": 63,
              "account_age_days": 4504
            },
            "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": "77 followers of tphakala",
                "points": 13.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 77,
                      "login": "tphakala"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "63 public repos, account ~12 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 63
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 12
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/tphakala/go-audio-resampler"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 4
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 4 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "7 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 73,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "8 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yaml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "18 out of 19 merged PRs checked by a CI test -- score normalized to 9",
                "points": 18,
                "status": "partial",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 60,
            "inputs": {
              "topics": [
                "audio",
                "audio-processing",
                "dsp",
                "fir-filter",
                "golang",
                "resampling",
                "sample-rate-conversion",
                "simd",
                "soxr"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "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": 0,
                "status": "missed",
                "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": "9 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "excellent",
        "name": "Security",
        "value": 87,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "good",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 84,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 15,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 3,
              "scorecard_aggregate": 8.4
            },
            "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": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "18 out of 19 merged PRs checked by a CI test -- score normalized to 9",
                "points": 2.2,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 1/24 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "update tool detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is fuzzed",
                "points": 5,
                "status": "met",
                "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": "28 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 4,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool detected but not run on all commits",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 10 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 10
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 10,
              "unassessed_packages": 0,
              "affected_by_severity": "none",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 10,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 4
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 72,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "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": "93 of 93 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 93,
                      "sampled": 93
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "excellent",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 98,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Taskfile.yml",
                "test-reference/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.16,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0.07
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Taskfile.yml, test-reference/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Taskfile.yml, test-reference/Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yaml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yaml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "16 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 16,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "7 of the last 100 commits are automated dependency updates",
                "points": 8,
                "status": "met",
                "details": [
                  {
                    "code": "dependency_bot_commits",
                    "params": {
                      "count": 7,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 8",
                "points": 8,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 34884,
              "source_files_sampled": 118,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/118 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 118,
                      "oversized": 0
                    }
                  }
                ],
                "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-22T08:51:21.726319Z",
  "schema_version": "0.26.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/tphakala/go-audio-resampler.svg",
  "full_name": "tphakala/go-audio-resampler",
  "license_state": "standard",
  "license_spdx": "LGPL-2.1"
}

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.26.0 — full methodology · metrics wiki.

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