公开记录
软件健康报告模式 0.26.0 · 指标 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 星标⑂ 4 复刻始于 2025年11月在 GitHub 上查看 ↗

tphakala/go-audio-resampler 的健康指数为 100 分中的 69 分,处于「中等」区间。 其得分最高的类别是Security(87/100),最低的是Community & Adoption(43/100)。 最近一次更新在 2 天前。 近期的大部分工作由 1 位贡献者完成。

69
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

69
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

Tomi P. Hakala个人账户
77 关注者63 个公开仓库始于 2014年3月

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Gogithub.com/tphakala/go-audio-resamplerv1.5.0-74 天前

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

83良好 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 2 天前
7.6/36提交节奏 — 52 周中有 11 周有提交
18/18提交量 — 最近一年 100 次提交
10/10OpenSSF Scorecard:Maintained — 28 commit(s) and 20 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year100
human_commit_share0.93
days_since_last_push2
active_weeks_last_year11

发布纪律

100优秀
评分方式
27/27有发布版本 — 已发布 7 个发布版本
36/36发布时效 — 最近一次发布版本于 4 天前
27/27发布节奏 — 约每 20.7 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — 无数据
所用输入
releases_count7
latest_release_tagv1.5.0
releases_from_tags
days_since_latest_release4
mean_days_between_releases20.7
已排除计分(无数据或不适用):OpenSSF Scorecard:Signed-Releases。 其余权重已重新归一化。

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

43存在风险 · 占总体的 18%
评分方式
14.6/60星标 — 9 个星标
4/25复刻 — 4 个复刻
0/15关注者 — 1 位关注者
所用输入
forks4
stars9
watchers1
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonbelow_threshold

社区健康

70良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(LGPL-2.1)
18/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

60中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
1.9/22.5提交分布 — 头号贡献者编写了 91% 的提交
4.1/13.5贡献者广度 — 3 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled3
top_contributor_share0.914
评分方式
46.8/46.8议题解决 — 100% 的议题已关闭
30/38.3PR 接受 — 已裁定的 PR 中 29/37 已合并
0/15OpenSSF Scorecard:Code-Review — Found 1/24 approved changesets -- score normalized to 0
所用输入
merged_prs29
open_issues0
closed_issues21
issue_closed_ratio1
closed_unmerged_prs8
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
13.6/25所有者影响力 — tphakala 有 77 位关注者
25/25既往记录 — 63 个公开仓库,账户约 12 年
所用输入
followers77
owner_typeUser
is_verified
owner_logintphakala
public_repos63
account_age_days4,504
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — go 上有 1 个软件包
35/35发布时效 — 最近一次发布于 4 天前
20/20版本历史 — 7 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgithub.com/tphakala/go-audio-resampler
ecosystemsgo
any_deprecated
min_days_since_publish4

工程质量

基础的工程与文档实践是否到位?

73良好 · 占总体的 20%

工程实践

82良好
评分方式
24/24CI 工作流 — 8 个工作流
24/24存在测试
16/16Linter 配置 — .golangci.yaml
0/9.6Pre-commit 钩子
0/6.4.editorconfig
18/20OpenSSF Scorecard:CI-Tests — 18 out of 19 merged PRs checked by a CI test -- score normalized to 9
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

60中等
评分方式
30/30README
0/25文档目录
0/15文档 / 主页站点
10/10仓库描述
10/10主题标签 — 9 个主题标签
10/10Wiki
所用输入
topicsaudio, audio-processing, dsp, fir-filter, golang, resampling, sample-rate-conversion, simd, soxr
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

87优秀 · 占总体的 16%

安全态势

84良好
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 无数据
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.5许可证 — 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 — 无数据
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 — 无数据
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated15
scorecard_versionv5.5.0
checks_inconclusive3
scorecard_aggregate8.4
已排除计分(无数据或不适用):branch_protection, packaging, signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories0
affected_packages0
assessed_packages10
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 10 个已解析依赖与 OSV 比对。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

72良好 · 占总体的 0%
评分方式
0/45代理指令 — 没有 CLAUDE.md / AGENTS.md / 编辑器规则
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 93 次人类提交中有 93 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
评分方式
18/18一条命令的引导启动 — Taskfile.yml, test-reference/Makefile
22/22自动化测试
11/11Lint / 格式化配置 — .golangci.yaml
11/11静态类型检查 — Go(静态类型)
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 16 次由代理编写或署名代理
8/8自动化维护 — 最近 100 次提交中有 7 次为自动依赖更新
8/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 8
所用输入
has_nix
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesTaskfile.yml, test-reference/Makefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.16
toolchain_manifestsgo.mod
dependency_bot_commit_share0.07
评分方式
45/45可类型检查的代码 — Go(静态类型)
55/55可控的文件大小 — 采样的 118 个源文件中有 0 个超过 60KB
所用输入
primary_languageGo
largest_source_bytes34,884
source_files_sampled118
oversized_source_files0

机器可读接口

40存在风险
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
0/20MCP 服务器
40/40可运行示例 — examples
所用输入
example_dirsexamples
has_mcp_signal
api_schema_files

关键数据

9GitHub 星标
3贡献者
100最近 12 个月提交数
2距最近推送天数
7发布版本数
1巴士系数(bus factor)
0开放议题
Go软件包生态系统数

更多细节

Star 与 Fork 历史 9 ★ / 4 ⇿
9Star
4Fork
6发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

02468109412025-112026-032026-07
主版本 1次版本 4修订 1
OpenSSF Scorecard 8.4 / 10
8.4综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-22 08:51 UTC

10Binary-Artifactsno binaries found in the repo
不适用Branch-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
不适用Packagingpackaging 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
不适用Signed-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
直接依赖 5
注册表软件包版本约束清单文件
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
全部依赖 10

来自 GitHub 依赖图的完整解析依赖集合:5 个直接依赖与 5 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

注册表软件包版本关系
Gogithub.com/go-audio/audiov1.0.0直接
Gogithub.com/go-audio/wavv1.1.0直接
Gogithub.com/quasilyte/go-ruleguard/dslv0.3.23直接
Gogithub.com/stretchr/testifyv1.11.1直接
Gogithub.com/tphakala/simdv1.6.0直接
Gogithub.com/davecgh/go-spewv1.1.1间接
Gogithub.com/go-audio/riffv1.0.0间接
Gogithub.com/pmezard/go-difflibv1.0.0间接
Gogolang.org/x/sysv0.45.0间接
Gogopkg.in/yaml.v3v3.0.1间接
依赖安全公告 0

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 10 个包,其中也包含从不交付的开发与测试版本固定:0 个存在已知公告,0 个为直接依赖。

没有已知公告影响已评估的依赖。

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "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"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.26.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计Go.