公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-26 03:45 UTC

tphakala / simd

High-performance SIMD library for Go with AVX/NEON support

Go · AssemblyMIT★ 17 星标⑂ 5 复刻始于 2025年11月在 GitHub 上查看 ↗

tphakala/simd 的健康指数为 100 分中的 68 分,处于「中等」区间。 其得分最高的类别是Engineering Quality(84/100),最低的是Community & Adoption(45/100)。 最近一次更新在 6 天前。 近期的大部分工作由 1 位贡献者完成。

68
总分 / 100
中等

软件健康指数

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

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

评分画像

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

所有权

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

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

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Gogithub.com/tphakala/simdv1.6.0-366 天前

按类别列示的指标

活力

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

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

发布纪律

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

社区与采用

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

45存在风险 · 占总体的 18%
评分方式
19.5/60星标 — 17 个星标
5/25复刻 — 5 个复刻
0/15关注者 — 2 位关注者
所用输入
forks5
stars17
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

70良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
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

可持续性与治理

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

59中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
1.2/22.5提交分布 — 头号贡献者编写了 95% 的提交
2.7/13.5贡献者广度 — 2 位贡献者
3/10OpenSSF Scorecard:Contributors — project has 1 contributing companies or organizations -- score normalized to 3
所用输入
bus_factor1
contributors_sampled2
top_contributor_share0.947
评分方式
38/46.8议题解决 — 81% 的议题已关闭
37.3/38.3PR 接受 — 已裁定的 PR 中 121/124 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/30 approved changesets -- score normalized to 0
所用输入
merged_prs121
open_issues14
closed_issues61
issue_closed_ratio0.813
closed_unmerged_prs3
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
13.6/25所有者影响力 — tphakala 有 78 位关注者
25/25既往记录 — 64 个公开仓库,账户约 12 年
所用输入
followers78
owner_typeUser
is_verified
owner_logintphakala
public_repos64
account_age_days4,508
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — go 上有 1 个软件包
35/35发布时效 — 最近一次发布于 6 天前
20/20版本历史 — 36 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgithub.com/tphakala/simd
ecosystemsgo
any_deprecated
min_days_since_publish6

工程质量

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

84良好 · 占总体的 20%

工程实践

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

文档

85优秀
评分方式
30/30README
25/25文档目录
0/15文档 / 主页站点
10/10仓库描述
10/10主题标签 — 10 个主题标签
10/10Wiki
所用输入
topicsavx, float32, float64, go, golang, math, neon, performance, simd, vectorization
has_wiki
homepage
has_readme
has_docs_dir
has_description

安全

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

64中等 · 占总体的 16%

安全态势

55中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 27 out of 27 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
5/5Fuzzing — project is fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not 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_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5.5
已排除计分(无数据或不适用):packaging, signed_releases。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories0
affected_packages0
assessed_packages6
unassessed_packages0
affected_by_severitynone
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 6 个已解析依赖与 OSV 比对。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

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

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

关键数据

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

数据采集警告

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

更多细节

Star 与 Fork 历史 0 ★ / 5 ⇿
0Star
5Fork
10发布

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

12345512026-012026-042026-07
主版本 0次版本 6修订 0
OpenSSF Scorecard 5.5 / 10
5.5综合

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests27 out of 27 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
10Fuzzingproject is fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 30 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
不适用Signed-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
直接依赖 3
注册表软件包版本约束清单文件
Gogithub.com/stretchr/testifyv1.11.1go.mod
Gogolang.org/x/archv0.27.0go.mod
Gogolang.org/x/sysv0.45.0go.mod
全部依赖 6

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

注册表软件包版本关系
Gogithub.com/stretchr/testifyv1.11.1直接
Gogolang.org/x/archv0.27.0直接
Gogolang.org/x/sysv0.45.0直接
Gogithub.com/davecgh/go-spewv1.1.1间接
Gogithub.com/pmezard/go-difflibv1.0.0间接
Gogopkg.in/yaml.v3v3.0.1间接
依赖安全公告 0

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

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

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

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "avx",
        "float32",
        "float64",
        "go",
        "golang",
        "math",
        "neon",
        "performance",
        "simd",
        "vectorization"
      ],
      "is_fork": false,
      "size_kb": 1603,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 1737250,
        "Shell": 2273,
        "Assembly": 982881
      },
      "pushed_at": "2026-07-19T18:35:51Z",
      "created_at": "2025-11-21T22:40:23Z",
      "owner_type": "User",
      "updated_at": "2026-07-24T14:22:29Z",
      "description": "High-performance SIMD library for Go with AVX/NEON support",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "Assembly"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Tomi P. Hakala",
      "type": "User",
      "login": "tphakala",
      "company": null,
      "location": "Muurame, Finland",
      "followers": 78,
      "avatar_url": "https://avatars.githubusercontent.com/u/7030001?v=4",
      "created_at": "2014-03-22T09:31:18Z",
      "is_verified": null,
      "public_repos": 64,
      "account_age_days": 4508
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-19T18:35:58Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-19T15:14:35Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-07-19T07:57:52Z"
        },
        {
          "tag": "v1.4.0-rc.2",
          "kind": "prerelease",
          "published_at": "2026-06-14T13:00:29Z"
        },
        {
          "tag": "v1.4.0-rc.1",
          "kind": "prerelease",
          "published_at": "2026-06-14T11:52:53Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-06-13T14:13:28Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-06-11T16:42:53Z"
        },
        {
          "tag": "v1.2.0-rc.2",
          "kind": "prerelease",
          "published_at": "2026-06-04T21:13:51Z"
        },
        {
          "tag": "v1.2.0-rc.1",
          "kind": "prerelease",
          "published_at": "2026-06-02T19:22:19Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-05-29T12:48:55Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c06683652b58e1dd15cd382708f708b874f4b20e",
          "body": null,
          "is_bot": false,
          "headline": "docs: document the f64 ButterflyComplex and RealFFTUnpack primitives",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T18:35:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a325e05a3c4faf4b48661728701d7c2c27dfac5",
          "body": "… (#195)\n\nAdds f64.RealFFTUnpack, the float64 counterpart of f32.RealFFTUnpack, with an\nAVX2/FMA kernel on amd64, a NEON kernel on arm64, and a pure-Go fallback. This is\nthe second of the f64 FFT building blocks issue #192 calls out; the first,\nf64.ButterflyComplex, shipped in #193. Together they ar\n[…]\nevery NEON WORD against arm64asm; no\ngoroutine-register clobber. Ran the full f64 package on real hardware: amd64\ni7-1260P (AVX2) and arm64 Raspberry Pi 5 (Cortex-A76 NEON), green on both.\n\nRefs #192.",
          "is_bot": false,
          "headline": "f64: add RealFFTUnpack, the AVX2/NEON real-FFT even/odd unpack (#192)…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T18:26:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b02444bc386dba2ffa480c68f31203046f7b6fd0",
          "body": "… (#193)\n\nThe FFT building blocks ButterflyComplex and RealFFTUnpack existed only in\npackage f32, so a float64 consumer (the bit-exact SoX/STFT path issue #192\ntargets) had no vectorized butterfly to reach for. This adds the first of the\ntwo: f64.ButterflyComplex, the float64 counterpart of f32.Butt\n[…]\nardware: amd64 i7-1260P (AVX2) and\narm64 Raspberry Pi 5 (Cortex-A76 NEON), green on both. On the i7-1260P the AVX\nkernel is ~4x the Go path (256: 76 ns vs 311 ns; 1024: 294 ns vs 1190 ns).\n\nRefs #192.",
          "is_bot": false,
          "headline": "f64: add ButterflyComplex, the AVX2/NEON complex FFT butterfly (#192)…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T17:30:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "25374549ad4bd72f0e93dfd287a90cc1b3cc919b",
          "body": "Refreshes README.md and doc.go for the additions since v1.4.0. The i32 operation\ntables and prose now cover NegWhereNeg, ScaleQ31, ScaleQ15, Butterfly, MaxAbs,\nand FIRValidQ15 (they were stale), and both files gain a section for the new\ncint package (fixed-point complex arithmetic: int32 data times int16 Q15 twiddle,\ntruncating C_MUL, for integer FFT butterflies). Documentation only; no code\nchange.",
          "is_bot": false,
          "headline": "docs: document the i32 fixed-point primitives and the cint package",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T15:13:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5ac53380c57140ab203d2a0cf32dbdcf57e2cc9",
          "body": "…(#180) (#191)\n\n* cint: add fixed-point complex arithmetic for integer FFT butterflies (#180)\n\nAdds the cint package: fixed-point complex arithmetic for integer FFT\nbutterflies, the integer analog of c64/c128. Complex data is int32 real and\nimaginary interleaved [r0,i0,r1,i1,...]; twiddles are int16\n[…]\nON\n(Raspberry Pi 5) hardware; TestArm64WordEncodings cross-checks every new WORD\nagainst arm64asm.\n\n* cint: harden plantExtremes, add SubGo bench, full kernel alloc-free, fix asm comment (review #191)",
          "is_bot": false,
          "headline": "cint: add fixed-point complex arithmetic for integer FFT butterflies …",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T15:02:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "71fd81617b352f28dc5bdf94960071fac8112a1a",
          "body": "… (#190)\n\n* i32: add FIRValidQ15, an int32 valid convolution with Q15 taps (#181)\n\nFIRValidQ15(dst, x []int32, taps []int16) writes the valid (correlation\norientation) convolution of x with the int16 Q15 taps into dst: for output i,\ndst[i] = sum over j in [0, len(taps)) of int32(int64(taps[j]) * int\n[…]\n and differential\nfuzz over x and taps bytes. Verified bit-exact on AVX2 (i7-1260P) and NEON\n(Raspberry Pi 5) hardware.\n\n* i32: tie firValidQ15Shift to scaleQ15Shift to prevent Q15 drift (review #190)",
          "is_bot": false,
          "headline": "i32: add FIRValidQ15, an int32 valid convolution with Q15 taps (#181)…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T14:25:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6a8dc6ccacb025bddc4d379e93bddbdbae63b62f",
          "body": "MaxAbs(a []int32) int32 returns the peak magnitude of a the way libopus\nceltMaxabs32 does: over a single signed min/max scan it returns\nmax(maxVal, -minVal), where -minVal is a wrapping int32 negate. This is\ndeliberately not a per-lane absolute-value-then-max, which diverges when a\nMinInt32 element \n[…]\n alloc-free,\ndispatch-pin, an over-read poison guard (extremes planted past n over a full-block\nslack), and differential fuzz. Verified bit-exact on AVX2 (i7-1260P) and NEON\n(Raspberry Pi 5) hardware.",
          "is_bot": false,
          "headline": "i32: add MaxAbs, the celtMaxabs32 peak-magnitude reduction (#181) (#189)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T13:37:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4368ca4278ffb61de9d952220c0c948db7ec880c",
          "body": "… (#188)\n\n* i32: add Butterfly, the in-place FWHT/Haar sum-difference step (#181)\n\nButterfly(lo, hi []int32) writes lo[i], hi[i] = lo[i]+hi[i], lo[i]-hi[i] for i\nin [0, n), n = min(len(lo), len(hi)). Both the sum and the difference wrap in\nint32 (two's complement, modulo 2^32) rather than saturating\n[…]\n-pin, and\ndifferential fuzz. Verified bit-exact on AVX2 (i7-1260P) and NEON (Raspberry Pi 5)\nhardware; 10M+ fuzz executions clean.\n\n* docs: Butterfly clamps to min(len), not equal-length (review #188)",
          "is_bot": false,
          "headline": "i32: add Butterfly, the in-place FWHT/Haar sum-difference step (#181)…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T12:58:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0fb58ffb8fbc0f14300a609ee8a7d5338020aa05",
          "body": "…r (#181) (#187)\n\nScaleQ31(dst, a []int32, k int32) writes dst[i] = int32(int64(a[i]) * int64(k) >> 31); ScaleQ15(dst, a []int32, k int16) writes dst[i] = int32(int64(k) * int64(a[i]) >> 15). Both are the truncating fixed-point scale-by-scalar of libopus MULT32_32_Q31 / MULT16_32_Q15: an arithmetic \n[…]\ng, unaligned, dispatch-pin, and differential fuzz (both operand and coefficient), and benchmarks. Verified bit-exact on AVX2 (i7-1260P) and NEON (Raspberry Pi 5) hardware; ~1.8M fuzz executions clean.",
          "is_bot": false,
          "headline": "i32: add ScaleQ31 and ScaleQ15, truncating fixed-point scale-by-scala…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T11:33:18Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "56a27ee52da099e8e2669dd1ee7e9bcf6b44b0fc",
          "body": "…#182) (#186)\n\n* i32: add NegWhereNeg, a branchless sign-transfer conditional-negate (#182)\n\nNegWhereNeg(dst, mag []int32, sign []float32) sets dst[i] = mag[i] negated where sign[i]'s IEEE sign bit is set: dst[i] = (mag[i] ^ m) - m with m = int32(math.Float32bits(sign[i])) >> 31. Sign-bit predicate \n[…]\na shifted dst/sign or dst/mag overlay could clobber input lanes a later iteration has not read yet. The prior comment overclaimed general lane-by-lane overlay safety. Comment-only, no behavior change.",
          "is_bot": false,
          "headline": "i32: add NegWhereNeg, a branchless sign-transfer conditional-negate (…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T10:52:57Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e0d6be9d153eeb3913e0b049064d3ea4467a2d75",
          "body": "* f32: add CopySign, an exact elementwise IEEE copysign (#182)\n\nCopySign(dst, mag, sign []float32) sets dst[i] = |mag[i]| carrying sign[i]'s IEEE sign bit: (bits(mag)&^0x80000000) | (bits(sign)&0x80000000), equal to math.Copysign elementwise and bit-for-bit for every non-NaN input. Sign-bit predicat\n[…]\nhe SIMD kernels bit-for-bit including NaN payloads, but equals math.Copysign only for non-NaN inputs (its float64 round trip does not guarantee the same NaN payload). Comment-only, no behavior change.",
          "is_bot": false,
          "headline": "f32: add CopySign, an exact elementwise IEEE copysign (#182) (#185)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T10:16:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "21f5a3d8ac3ad164bc430001046b44d47f0c62a6",
          "body": "…34 (#183) (#184)\n\n* f32: document Sqrt as correctly-rounded and add fused AbsPow34 (#183)\n\nDocuments f32.Sqrt as IEEE-754 correctly-rounded on every backend: VSQRTPS/SQRTPS and FSQRT are correctly-rounded by the ISA, and the Go fallback's float32(math.Sqrt(float64(x))) is a provably innocuous doubl\n[…]\nery small integer and half-integer up to 2048, of which only the perfect squares have exact roots; the rest have irrational roots that exercise the rounding decision. Comment-only, no behavior change.",
          "is_bot": false,
          "headline": "f32: document Sqrt as IEEE-754 correctly-rounded and add fused AbsPow…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-19T09:31:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7f6bdfc8f4000714c86c6deb8788ae8b3e5d8a6f",
          "body": "…ine (#159) (#179)\n\ndot_avx2_loop16 is 29 bytes, so whether it fits inside one 64-byte\ninstruction-fetch line depends entirely on where the linker places dotAVX2. Go\naligns amd64 functions to 32, not 64, so the loop straddling a line boundary is a\ncoin flip that any unrelated code-size change can fl\n[…]\n ~99% from the uop cache, so PCALIGN buys it nothing (idq.dsb_uops identical\nwith and without). Correctness verified on the amd64 AVX2 host: PCALIGN is NOP\npadding, and the i16 suite passes unchanged.",
          "is_bot": false,
          "headline": "i16: PCALIGN the dotAVX2 16-wide loop to stop it straddling a fetch l…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T21:59:41Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a83250ebb275a622b5b6fec09fcbc3a0b685f1ae",
          "body": "…lock (#149) (#178)\n\nToInt16 and ToInt32 widen int8 -> int16 / int32 with VPMOVSXBW / VPMOVSXBD over\n16- and 8-wide blocks, then a scalar tail (MOVBLSX + widening store) for the\n(n mod block) remainder. The tail is not branchy, but toI16's up to 15 serial\nload/store iterations still cost ~6-7 ns, ma\n[…]\nified on the amd64 AVX2 host (full i8 suite; TestToInt16/TestToInt32 sweep\nragged lengths through the shared table, and the overlap has no residue-dependent\nbranch). Completes the i8 kernels for #149.",
          "is_bot": false,
          "headline": "i8: replace toI16/toI32 conversion scalar tails with an overlapping b…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T21:42:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3778e8626cbc8d4a180cc2e7f9ba5fd5eb089c0",
          "body": "…blocks (#149) (#177)\n\n* i8: shrink the element-wise AVX2 scalar tails with forward 16/8-wide blocks (#149)\n\nThe 10 element-wise i8 AVX2 kernels (abs, neg, addSat, subSat, min, max, clamp,\nabsDiff, addScalarSat, subScalarSat) dropped from their 32-wide body to a scalar\ntail masked ANDQ $31. That tai\n[…]\ns verified on the amd64 AVX2 host (full i8 suite, residue parity, and\nin-place forward-block checks, 0 failures).\n\n* i8: fix element-wise residue-test comments; cover 8-wide block in-place (#177 gate)",
          "is_bot": false,
          "headline": "i8: shrink the element-wise AVX2 scalar tails with forward 16/8-wide …",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T21:22:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e81742332fd612ab0edb79a96e58f42fa79ef004",
          "body": "… (#149) (#176)\n\n* i8: replace maxAbs/minMax scalar tails with an overlapping SIMD block (#149)\n\nmaxAbsAVX2 and minMaxAVX2 dropped from their 32-wide VPMAXUB / VPMINSB+VPMAXSB\nbody to a scalar tail masked ANDQ $31, so a remainder of 1-31 bytes cost up to\n31 iterations of a serial compare / condition\n[…]\nged length (it has no residue-dependent branch). Correctness verified\non the amd64 AVX2 host (full i8 suite, 0 failures).\n\n* i8: fix stale 'scalar tail' wording in maxAbs/minMax headers (Copilot #176)",
          "is_bot": false,
          "headline": "i8: replace maxAbs/minMax scalar tails with an overlapping SIMD block…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T21:01:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f1756609ee777285c9618764d401dd4ed19e91e",
          "body": "…#150 item 3) (#175)\n\nxcorr4AVX2 and xcorr4AVXVNNI reduced their four YMM lag accumulators to four\nint32 lag sums with a 28-instruction per-lag fold (VEXTRACTI128 + two\nVPSHUFD/VPADDD pairs + MOVQ per lag). For the common n%4 == 0 case, where no\nscalar tail follows, the four sums can be folded toget\n[…]\n change)\n\nCorrectness verified on the amd64 AVX2 and AVX-VNNI host (XCorr ParityWithGo,\nMinInt16, ShortWindowIsBounded, LongWindowIsClamped, and fuzz on both the AVX2\nand AVXVNNI kernels, 0 failures).",
          "is_bot": false,
          "headline": "i16: fold XCorr AVX2 lag reduction with VPHADDD on the no-tail path (…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T20:50:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "633b2baa6d3bfe26ddae7aa5de8faf9f29eeae2c",
          "body": "…) (#174)\n\nsumAbsAVX2 and sadAVX2 dropped from their 32-wide VPSADBW body straight to a\nscalar tail masked ANDQ $31, so a remainder of 1-31 bytes cost up to 31\niterations of a serial ADDQ accumulator chain. This is the #145/#149 scalar-tail\nsawtooth; the sum/dot reductions already got the fix in #17\n[…]\n-wide-only tail block (n%32 in 16..23, 8-wide skipped) gets\ndeterministic correctness coverage for both kernels.\n\nCorrectness verified on the amd64 AVX2 host (TestSumAbs, TestSAD, fuzzer,\n0 failures).",
          "is_bot": false,
          "headline": "i8: add 16/8-wide AVX2 tail blocks to sumAbs and sad reductions (#149…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T20:50:07Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4b79eda2e8db7674174cb16f494a7bb5a1fafef",
          "body": "…s (#149) (#173)\n\nThe i8 Sum and DotProduct AVX2 kernels widen 16 bytes/iter (VPMOVSXBW -> VPMADDWD -> VPADDD into Y2) then drop to a serial scalar tail for the 0-15 remainder bytes, so a residue of 8-15 paid up to 15 iterations of a load -> (multiply) -> add dependency chain. Add one 8-wide XMM blo\n[…]\nt (real AVX2 and the SIMD_DISABLE=avx2 fallback) and on arm64.\n\nCovers the two reduction kernels; the remaining i8 element-wise/conversion AVX2 kernels are a separate benchmark-gated batch.\n\nRefs #149",
          "is_bot": false,
          "headline": "i8: add an 8-wide AVX2 tail block to the sum and dot reduction kernel…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T16:48:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9b27db18521f94deb10e0f7d7099f820391f79c1",
          "body": "…it slides (#161 item 3) (#172)\n\nMinIdxOfSumRows validated every processed row's k window with an O(m) incremental walk before dispatch. Only slide +1 and -1 reach a SIMD kernel, and for those the offset sequence base + r*slide is monotonic, so its two extremes decide the whole range in O(1): slide \n[…]\nIMD_DISABLE=avx2 pure-Go fallback) and arm64 NEON hosts: full f32 suite and the MinIdxOfSum parity, out-of-range panic, and zero-alloc tests pass with bit-identical results.\n\nRelates to #161 (item 3).",
          "is_bot": false,
          "headline": "f32: replace MinIdxOfSumRows bounds walk with an O(1) precheck for un…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T16:01:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13a0f7a2ab0fecfae6c8eb641c595fd160592483",
          "body": "…ng SIMD block (#161) (#171)\n\nPR #170 changed the remainder handling: a leftover of 2 or 3 rows is now\ncovered by one overlapping SIMD block (bit-identical, since each row is\nindependent and the kernel is pure) instead of the scalar reference; only\na lone leftover row and shapes below the block width stay scalar. The\nREADME still described the old \"compose any remainder with the scalar\npath\" behavior. Corrects it and notes the leftover>=2 rationale.",
          "is_bot": false,
          "headline": "docs: MinIdxOfSumRows now covers 2-3 remainder rows with an overlappi…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T14:02:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37f1940aeffaca0cd3b23b5b04eda3e4fb414b78",
          "body": "… block (#161 item 1) (#170)\n\nThe MinIdxOfSumRows dispatchers block rows in fixed widths (AVX2 8 then 4,\nNEON 4) and used to hand the 0-3 leftover rows to the scalar reference. At\nthe motivating ragged shapes that tail is a large fraction (m=11 leaves 3\nof 11 rows scalar). Each row's argmin is indep\n[…]\nerence (11x11/11x14/14x14). Width-aligned shapes are neutral (the\noverlap never runs). Parity is bit-exact vs the per-row Go oracle across\nthe full shape sweep for both slides on both hosts; 0 allocs.",
          "is_bot": false,
          "headline": "f32: lift MinIdxOfSumRows remainder rows onto SIMD via an overlapping…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T13:39:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "120503dd6b9c5414da2bf5271fac4c8e41bf80be",
          "body": "xcorr4AVXVNNI fuses the 16-wide loop's four VPMADDWD+VPADDD pairs into\nfour VPDPWSSD, the AVX-VNNI multiply-accumulate. It is bit-identical to\nthe pair it replaces (same wrapping int32 accumulation; VPDPWSSD, never\nthe saturating VPDPWSSDS), so XCorr's wrapping contract is preserved and\nthe kernel j\n[…]\n6, short-window, and long-window subtests pass, and objdump\nconfirms the VEX vpdpwssd encoding. Bonus: corrected three pre-existing\ndoc nits (README neon token row, applyDisable avx doc, ExampleInfo).",
          "is_bot": false,
          "headline": "i16: add an AVX-VNNI VPDPWSSD tier to XCorr (#150 item 1) (#169)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T10:46:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4791da543d5d7c7960b3e71b94b4e736d0201184",
          "body": "…168)\n\nThe kernel dropped from its 8-wide XMM block (added in #151) straight to a\n0-7 element scalar tail, and that tail is expensive across four lags: measured\n~2.7 cyc/element versus ~0.19 for a vectorized one on the i7-1260P, leaving a\nresidual period-8 sawtooth (the issue's item 2).\n\nA TESTQ $4-\n[…]\narity extended to 12/13/14 (both blocks + short tail) and 20/21/22\n(4-wide block only). n=247 added as a benchstat regression guard.\n\nRefs #150 (items 1 AVX-VNNI and 3 VPHADDD fold remain). #151, #145",
          "is_bot": false,
          "headline": "i16: add a 4-wide AVX2 remainder block to xcorr4AVX2 (#150 item 2) (#…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T09:09:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ac9dac6b18da57622b33368527f02c0c4ad0f4d5",
          "body": "…act (#156) (#167)\n\nCodifies the contract that #155 relies on so a future optimization cannot\nsilently fuse a multiply and add and change a downstream consumer's bits.\n\nDocumentation (f32 package doc): each floating-point operation is a single\nIEEE-754 rounded instruction; the elementwise scale/offs\n[…]\nen-add primitives are added.\n\nThe NaN behaviour of MinIdx/MaxIdx (the other #156 item) is already documented\non those functions (strict comparison, all-NaN returns 0), so no change there.\n\nCloses #156",
          "is_bot": false,
          "headline": "f32: document and asmcheck-enforce the single-rounding / no-FMA contr…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T08:41:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "df498ed7eef37fa06c9cf55abbed8f268089b7f6",
          "body": "… AVX2) (#155) (#166)\n\nNew elementwise primitive, the int32 sibling of Float32ToInt16Scale for the\nfloat -> fixed-point boundary with caller-supplied bounds and an additive\noffset:\n\n    dst[i] = int32(clamp(src[i]*scale + offset, minV, maxV))   // truncated toward zero\n\nThis is affine quantization /\n[…]\nth sweep through every\nresidue, clamp at both ends and inverted bounds, negative truncation, +/-Inf,\nNaN with bounds that exclude zero, the FMA detector, and a property fuzz\n(4.4M execs).\n\nCloses #155",
          "is_bot": false,
          "headline": "f32: add Float32ToInt32ScaleClamp fused affine-clamp-to-int32 (NEON +…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T08:26:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bcf7ddd5c1cd26d1bb5ac1ba93163f6eb6e83507",
          "body": "… spellings) (#148) (#165)\n\nRecords the instruction-selection constraints that shape every hand-written\nkernel in the repo, so the knowledge lives somewhere durable rather than in\nscattered kernel comments and issue threads. Content:\n\n- Go's arm64 assembler rejects every integer vector multiply / mu\n[…]\nrify-by-disassembly-or-execution rule.\n\nEvery claim re-verified against go1.26 (unrecognized-instruction / illegal-\ncombination probes). Linked from CONTRIBUTING.md's Assembly Guidelines.\n\nCloses #148",
          "is_bot": false,
          "headline": "docs: add assembly-encoding reference (arm64 integer multiply, Plan 9…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T07:43:17Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8240931f987fd20cc14cd739d5ced01a3c92fadb",
          "body": "…(#164)\n\ninterleave2AVX2 and deinterleave2AVX2 dropped from their 16-wide body\nstraight to a scalar MOVW tail, so a remainder of 8-15 pairs cost 8-15\nscalar iterations where the SSE2 sibling serves the same remainder in one\n8-wide block. The dispatcher routes len(a) >= 16 to AVX2, i.e. exactly\ninto \n[…]\n~12% wall-time either way); perf\ncounters show it is layout, not work (n=1000 retires fewer instructions\nyet takes more cycles). Pinning the loop is #159's separate remit.\n\nRefs #149, #160, #151, #159",
          "is_bot": false,
          "headline": "i16: add 8-wide AVX2 block to interleave2/deinterleave2 tails (#149) …",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T07:13:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1788a51bdc9b36944899cfc2eece756a2e662313",
          "body": "…58) (#163)\n\nThe bench:* and test:f32/f64 tasks targeted ./pkg/simd/f32 and\n./pkg/simd/f64, a layout the repo moved away from; the packages live at\nthe module root (./f32, ./f64, ...). Every one of those tasks failed\nimmediately with \"directory not found\", which matters now that\nbenchmarks are the o\n[…]\nng the full verbose test suite each time\n\nbench:compare's imports are Go import paths (github.com/tphakala/simd/f32),\nnot filesystem paths, so they were already correct and are untouched.\n\nCloses #158",
          "is_bot": false,
          "headline": "fix: repoint Taskfile bench/test tasks at the real package layout (#1…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-18T06:48:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6352e48888d96bb09d68cc8dd8548a15fe2663bc",
          "body": "The intro type list omitted int8 even though the i8 package has its own\nsection below; the \"80+ operations\" claim predates the i8 package and\nthe i16/i32 DSP and f32 argmin additions (the exported surface is past\n150 distinct operations); the f32/f64 function counts in the performance\nsummary were s\n[…]\ne AMD64 tier list omitted the\nAVX-without-FMA tier that the feature list and tier table both document.\nPer-package operation tables were audited against go doc and are\naccurate, so they are untouched.",
          "is_bot": false,
          "headline": "docs: refresh stale README claims found by a full API audit",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T19:54:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4344eaea946eacd36b328e2fde07e6421dcd2d31",
          "body": "…in) with NEON and AVX2 kernels (#162)\n\n* f32: document and test the MinIdx/MaxIdx tie-break and NaN contract\n\nStrict comparison means first-index-wins on ties and NaN never displaces\nthe incumbent (all-NaN input returns 0). Pin both properties with docs\nand characterization tests before any argmin \n[…]\nree at zero tolerance while the local baseline hid\nthese among pre-existing noise. Naming (idx, val) also matches the\nsignature issue #152 proposed. Pure rename, no behavioral change.\n\nRefs #152, #154",
          "is_bot": false,
          "headline": "f32: add MinIdxOfSum and MinIdxOfSumRows (batched sliding-window argm…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T19:44:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fd87f604866918de57e99850b44619e13f31b620",
          "body": "… (#160)\n\n* i16: fix dotAVX2's scalar tail (8-wide block before the 16-wide loop)\n\ndotAVX2 dropped from its 16-wide body straight to a scalar tail, so a remainder\nof 8-15 elements cost 8-15 iterations on a serial ADDL chain, where dotSSE2\nserved the same remainder in one 8-wide block. Because dotI16\n[…]\nk with a short tail, which is exactly the combination the sweep exists to\nreach. Saying only that the range covers every residue records the what and\ndrops the why.\n\nNo behaviour change; comment only.",
          "is_bot": false,
          "headline": "i16: fix dotAVX2's scalar tail (8-wide block before the 16-wide loop)…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T13:33:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8cfba611127829eb8474727f93b189fe15162d94",
          "body": "* i16/i32: add tier-3 integer DSP ops (Sum, Abs, MaxAbs, MulQ15)\n\nFinal part of the #142 stack, after DotProduct (#143) and XCorr (#146).\nAdds the fixed-point primitives the integer DSP path still lacked:\n\n  i16.Abs(dst, a)        wrapping |x|\n  i16.MaxAbs(a) int      headroom probe\n  i16.MulQ15(dst\n[…]\nan out-of-bounds read rather than observing a\npoisoned one. The kernel-direct AVX2 sibling already sized its slack to a\nfull block; this brings the portable test in line.\n\nReported by Copilot on #157.",
          "is_bot": false,
          "headline": "i16/i32: add tier-3 integer DSP ops (Sum, Abs, MaxAbs, MulQ15) (#157)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T11:46:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "acfc843daa5c063dc849b382388e3bdd9063f9c5",
          "body": "…) (#151)\n\n* i16: fix xcorr4AVX2 scalar tail (8-wide block before the 16-wide loop)\n\nxcorr4AVX2 dropped from its 16-wide body straight to a 4-lag scalar tail, so\na remainder of 8-15 elements cost 8-15 scalar iterations times four lags,\nwhere xcorr4SSE2 served the same remainder in a single 8-wide bl\n[…]\ntness round: #149 (dotAVX2 has this same\nsawtooth, measured at 1.41x slower than SSE2 at n=24, and the NEON sibling\nalready has the fix) and #150 (AVX-VNNI, a 4-wide block, a VPHADDD fold).\n\nRefs #145",
          "is_bot": false,
          "headline": "i16: fix xcorr4AVX2 scalar tail (8-wide block before the 16-wide loop…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-17T07:03:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1c86cc96f073adc88d56be3404f0e2a888d9dbc4",
          "body": "* i16: add XCorr (multi-lag widening cross-correlation)\n\nCross-correlation evaluates a dot product at every lag, and the naive\nshape re-reads x once per lag. XCorr instead loads x once and\nmultiply-accumulates it against four overlapping y windows at element\noffsets 0/1/2/3, which is the libopus xco\n[…]\ns left untouched\"\ncontract true on those paths. The test drives them directly with the\ndegenerate inputs the public API never delivers, and removing the guard\nmakes it fail.\n\nxcorrLags is now at 100%.",
          "is_bot": false,
          "headline": "i16: add XCorr (multi-lag widening cross-correlation) (#146)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-16T14:37:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8adb575f99c79f56ab87815ab0e970051f95f5c2",
          "body": "* i16: add widening DotProduct (int16 x int16 -> int32)\n\nFixed-point DSP (Opus/CELT, SILK, FLAC LPC) needs a widening integer\nmultiply-accumulate, and the integer packages had no equivalent of\nf32.DotProduct. This adds the primitive for int16 inputs accumulating\ninto int32.\n\nAccumulation wraps rathe\n[…]\n- The README example called DotProduct(samples, coeffs) while\n    declaring left and right, so the snippet did not compile. It uses\n    the variables it declares now, verified by building it verbatim.",
          "is_bot": false,
          "headline": "i16: add widening DotProduct (int16 x int16 -> int32) (#143)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-07-16T12:48:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4594d86456915a94d60861a1f2a79d43c542a5a6",
          "body": "…speedup) (#140)\n\n* f64: route ConvolveValidMaxAbs through dispatch (prep for fused kernel)\n\nMoves the Go-level fusion behind a convolveValidMaxAbsImpl function pointer so\na dedicated fused kernel can supersede it per backend. The fallback still loops\nover the dispatched dotProduct, so it stays bit-\n[…]\nre to validate (none\navailable), so the AVX-512 tier keeps the Go-level fusion over the dispatched\n16/8-wide dotProduct, which stays bit-exact. AVX2/AVX/SSE/NEON keep the fused\nkernel and its speedup.",
          "is_bot": false,
          "headline": "f64/f32: dedicated fused ConvolveValidMaxAbs kernels (peak-detection …",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-14T12:59:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ab23dffe55310667c333f48e93208bdfc7b6166",
          "body": "…ion) (#139)\n\n* docs: design spec for MaxAbs + fused ConvolveValid+MaxAbs (f64/f32)\n\nDesign for tphakala/simd#138: add MaxAbs infinity-norm reduction and the\nfused ConvolveValidMaxAbs / ConvolveValidMaxAbsMulti peak-detection helpers\nto the f64 and f32 packages.\n\n* docs: implementation plan for MaxA\n[…]\nsed path and ConvolveValid share the dispatched dotProduct, so the peak\nis bit-identical to max|ConvolveValid output|; drop the unnecessary tolerance\nto match the f32 test (CodeRabbit review on #139).",
          "is_bot": false,
          "headline": "f64/f32: add MaxAbs and fused ConvolveValidMaxAbs[Multi] (peak detect…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-14T11:50:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fb00cd956a4a7ed1c2bb5d7ffcf386bd6838e240",
          "body": "* feat(i8): add SumAbs (L1 norm) and SAD (sum of abs differences) (AVX2)\n\nSumAbs reduces sum|a[i]| via VPABSB + VPSADBW-against-zero. SAD reduces\nsum|a[i]-b[i]| via PSADBW after offsetting both operands by 128 (XOR\n0x80, mask built in-register), giving the true unsaturated |a-b|. Both\naccumulate int\n[…]\n trick needed. New WORD\nencodings cross-checked against arm64asm; verified natively on aarch64\n(rpi5).\n\n* test(i8): differential fuzz and benchmarks for SumAbs/SAD\n\n* docs(i8): document SumAbs and SAD",
          "is_bot": false,
          "headline": "i8: add SumAbs (L1 norm) and SAD (sum of absolute differences) (#136)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T17:40:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f327800f0b5d8167e0ffcbfdda48260b009c6303",
          "body": "* feat(i8): add AddScalarSaturate/SubScalarSaturate (AVX2)\n\nBroadcast a scalar and apply signed saturating add/subtract, completing\nthe saturating-arithmetic family alongside AddSaturate/SubSaturate.\nVPBROADCASTB + VPADDSB/VPSUBSB on AVX2; references reuse clampI8.\n\n* feat(i8): NEON kernels for AddS\n[…]\nubScalarSaturate\n\n* chore(i8): drop implementation plan doc from the PR\n\nScratch task list; the repo tracks committed design under\ndocs/superpowers/specs/. Also removes the leaked template-tag footer.",
          "is_bot": false,
          "headline": "i8: add AddScalarSaturate and SubScalarSaturate (#135)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T17:34:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4f60a22ac65196eec6504c37869392b20912d321",
          "body": "* feat(i8): add MaxAbs and AbsDiff (AVX2)\n\nMaxAbs returns max|a[i]| as int (range [0,128]) for dynamic-quantization\nscale: VPABSB + unsigned VPMAXUB reduction. AbsDiff writes saturating\n|a-b| clamped to [0,127] via max(sat(a-b), sat(b-a)). Pure-Go references\nare the source of truth; parity, zero-all\n[…]\nxAbs and AbsDiff\n\n* chore(i8): drop implementation plan doc from the PR\n\nScratch task list; the repo tracks committed design under\ndocs/superpowers/specs/. Also removes the leaked template-tag footer.",
          "is_bot": false,
          "headline": "i8: add MaxAbs and AbsDiff (abs-max + saturating abs-diff) (#137)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T17:27:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e10da8d97b10d0e5d06315d6ed4ef8ca7f6b0e41",
          "body": "* feat(i8): add Min/Max/Clamp/Abs/Neg element-wise primitives (AVX2)\n\nTier 2 element-wise group from #132: signed two-slice Min/Max, scalar\nClamp, and saturating Abs/Neg (abs(-128)=neg(-128)=127). Pure-Go\nreferences are the source of truth; AVX2 kernels (VPMINSB/VPMAXSB,\nVPBROADCASTB clamp, VPSUBSB-\n[…]\nrom the PR\n\ndocs/superpowers/plans/ holds scratch task lists, not committed docs (the\nrepo tracks design under docs/superpowers/specs/). Also removes the\nleaked template-tag footer CodeRabbit flagged.",
          "is_bot": false,
          "headline": "i8: add Min/Max/Clamp/Abs/Neg element-wise primitives (#133)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T17:18:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2f9e368382704d73bbb93f4bc17ab1b6d93b4b7e",
          "body": "…ng) (#131)\n\n* docs: i8 int8 primitives v1 design spec\n\n* i8: add int8 SIMD package (saturating arith, int32 reductions, widening)\n\nIntroduce the i8 package with seven high-impact int8 primitives, mirroring the\ni16/i32 package structure (pure-Go reference, AVX2 amd64 kernels, NEON arm64\nkernels, par\n[…]\nlow (3) and above (35) the\nSIMD dispatch thresholds, so the assembly kernels and their scalar tails are\nexercised for the leave-trailing-dst-untouched contract, not just the pure-Go\nfallback (Gemini).",
          "is_bot": false,
          "headline": "i8: add int8 SIMD package (saturating arith, int32 reductions, wideni…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T15:23:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "18ee77998af2c8294c3e4fe570af043911475f2a",
          "body": "Removes the FLAC-specific i32 kernels (fixed predictors, quantized-LPC residual/restore, mid/side decorrelation, Rice cost search) now owned in-tree by go-flac (tphakala/go-flac#27), keeping the generic int32 ops (Add, Sub, Interleave2, Deinterleave2, MinMax). Promotes the asm-verification harness to a public asmcheck package and drops FLAC-codec framing from the i32/crc docs.\n\nCloses #125",
          "is_bot": false,
          "headline": "i32: remove FLAC-specific kernels, keep generic int32 ops (#130)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T14:05:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe9f67f556aa3dacc1188102be83799344c9edb0",
          "body": "…ims (#129)\n\n* docs: re-measure README benchmarks and correct overstated speedup claims\n\nRe-ran every benchmark table on consistent hardware (Intel Core i7-1260P,\nAVX+FMA for amd64; Raspberry Pi 5 Cortex-A76 NEON for arm64, both pinned to the\nperformance governor) and refreshed the numbers across f3\n[…]\n\ndisplayed nanoseconds are rounded to whole ns while the speedup column is\ncomputed from the raw timings, so recomputing speedup from the rounded ns can\ndiffer slightly.\n\nNo benchmark numbers changed.",
          "is_bot": false,
          "headline": "docs: re-measure README benchmarks and correct overstated speedup cla…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T13:23:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "86a9ec741b5ac5628844c9420ffa544159696f77",
          "body": "…t (#128)\n\nFollow-up to #126. The exported STFT doc still described the old center=false /\npre-pad-yourself behavior; document the pad argument instead (NoPad vs\nPadZero/PadReflect centering). Also add a test-local refReflectIndex so the\ncentered reference and fuzz target no longer share the production reflectIndex\nmapping, matching the f32 package (#127).\n\nDoc/test only; no functional change. Refs #108.",
          "is_bot": false,
          "headline": "f64: fix stale STFT doc comment and make reference reflect independen…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T13:06:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "10ead3c22125a6c32f71042b8303e77f5328fa46",
          "body": "…(#127)\n\n* f32: add center=true framing, flat power output, and librosa parity to STFT\n\nMirror of the f64 STFT work (#126) for the float32 package: an explicit PadMode\n(NoPad/PadZero/PadReflect) so STFT/STFTPower can use librosa-style center=true\nframing, an exported NumFrames helper, and STFTPowerI\n[…]\nect reference independent of production: add a test-local\n  refReflectIndexF32 so the centered reference and fuzz target no longer share\n  the production reflectIndex mapping (CodeRabbit).\n\nRefs #108.",
          "is_bot": false,
          "headline": "f32: STFT center=true framing, flat power output, and librosa parity …",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T12:57:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1efe50f5c5bd16884fe866a5021246af027d26f7",
          "body": "…(#126)\n\n* chore: gitignore .codegraph/ and .venv-librosa/ tooling dirs\n\n* test: add librosa 0.11.0 STFT power golden vector and generator\n\n* f64: add center=true framing, flat power output, and librosa parity to STFT\n\nAdds an explicit PadMode (NoPad/PadZero/PadReflect) so STFT/STFTPower can use\nlib\n[…]\n for the centered complex STFT path (CodeRabbit).\n- Add TestSTFTGuards covering the zero-frame and short-window fallbacks, taking\n  STFT/STFTPower/STFTPowerInto to 100% statement coverage.\n\nRefs #108.",
          "is_bot": false,
          "headline": "f64: STFT center=true framing, flat power output, and librosa parity …",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-13T12:28:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ed059377584bf767927fa70f9919de6a6fbdebb3",
          "body": "… (#124)\n\n* f32: add SIMD Log, Log2, Log10, Pow, PowElem kernels (AVX2+FMA, NEON)\n\nVectorize the f32 transcendental log/pow family from #119, completing\nissue #109 (the f64 half landed separately).\n\nAlgorithm: the same x = m*2^e integer reduction as the f64 kernels\n(offset 0x3f350000, arithmetic shi\n[…]\ntly to memory\n\nAddress review feedback: the NaN/Inf special blocks in the logAVX\nscalar tail stored 32-bit immediates through AX; MOVL imm32 can write\nmemory directly, saving an instruction per block.",
          "is_bot": false,
          "headline": "f32: add SIMD Log, Log2, Log10, Pow, PowElem kernels (AVX2+FMA, NEON)…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T16:59:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3e5b09bda6310362239f9b5f79a1852be40aea7",
          "body": "… (#123)\n\n* f64: add SIMD Log, Log2, Log10, Pow, PowElem kernels (AVX2+FMA, NEON)\n\nVectorize the f64 transcendental log/pow family from #119 (f64 half of\nissue #109; f32 follows separately).\n\nAlgorithm: one shared log core computes x = m*2^e via the musl/ARM\noptimized-routines integer reduction (no \n[…]\nedback: refLn64 and the accuracy sweeps now reference\nthe package's dblMinNormal64 constant instead of repeating the literal,\nand TestLogLengths compares against refLn64 like the other accuracy\ntests.",
          "is_bot": false,
          "headline": "f64: add SIMD Log, Log2, Log10, Pow, PowElem kernels (AVX2+FMA, NEON)…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T16:37:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3681b44605c1557f84905eee3d8b14906adb14bc",
          "body": "* f32: add fused real-input STFT primitive (STFTPlan) (#108)\n\nPorts the f64 STFTPlan landed in #120 to float32, giving the f32 package the\nsame fused, real-input Short-Time Fourier Transform: a reusable plan with\nresident twiddle and bit-reversal tables, batched hop-spaced framing, a fused\nanalysis-\n[…]\n\nMirror both changes in f64 to keep the two implementations in lockstep.\n\nBenchmarkSTFT (f32, 16 kHz/1024/512) improves about 12 percent\n(1.40 ms/op to 1.23 ms/op) from removing the integer divisions.",
          "is_bot": false,
          "headline": "f32: add fused real-input STFT primitive (STFTPlan) (#108) (#122)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T16:37:20Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b43c32eb4e6838e27814ded6e99782f0355fa204",
          "body": "* test: differential fuzzing for c64, c128, i16, f16 (#101)\n\nCompletes the differential-fuzz coverage started in #118 (f32, f64, i32,\ncrc) by adding fuzz_test.go to the remaining packages. Each target runs the\ndispatched SIMD op and its pure-Go reference over fuzzer-chosen lengths and\nasserts they a\n[…]\nmment that still described low-payload NaNs\ncollapsing to infinity. Since fromFloat32Go forces the quiet bit,\nthose inputs now stay NaN and are handled by the NaN branch, not the\nbit-exact comparison.",
          "is_bot": false,
          "headline": "test: differential fuzzing for c64, c128, i16, f16 (#101) (#121)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T16:37:16Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47454b6b09963178c0c891f733fde62eb06a6d69",
          "body": "* f64: add fused real-input STFT primitive (STFTPlan)\n\nAdd a fused, real-input short-time Fourier transform so spectral feature\npipelines (mel-spectrogram, PCEN, log-mel front-ends for audio ML) can stay on\nthe fast path end to end. The library already covered everything around the\ntransform (c128.A\n[…]\nn STFT benchmarks (golangci-lint modernize/bloop)\n\nCI's golangci-lint flags the for-range-b.N benchmark loops; switch to the\nGo 1.24 b.Loop() form, which also makes the b.ResetTimer() calls redundant.",
          "is_bot": false,
          "headline": "f64: add fused real-input STFT primitive (STFTPlan) (#120)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T13:35:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "75c92ad1a87bf5749304a48586b111ac268a36ee",
          "body": "…ollow) (#119)\n\n* test: differential fuzzing of SIMD paths against the Go references\n\nThe parity tests use fixed lengths and curated values; the dominant SIMD bug\nclass is tail/remainder handling at arbitrary lengths (unroll-boundary\noff-by-ones). Go native fuzzing closes that gap cheaply, and the s\n[…]\ny\nover a wide magnitude range, in-place variants, length clamping, and\nzero-allocation; validated on amd64 and a Raspberry Pi 5 (arm64).\n\nAddresses #109 (API + scalar; AVX2/NEON Log kernel to follow).",
          "is_bot": false,
          "headline": "f32/f64: add Log, Log2, Log10, Pow, PowElem (scalar; SIMD kernel to f…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T13:35:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3e752435e30a400fa7b7da94f029646f30a2645",
          "body": "…#116)\n\n* docs: per-package amd64 tiers, SVE-detected-but-unused, scope notes\n\nSeveral documentation claims disagreed with each other or with the dispatch\ncode. None changed behavior, but they misled users evaluating the library.\n\n- README/doc.go claimed a single amd64 baseline (SSE4.1 in README, SS\n[…]\no.go behind //go:build arm64 so both\nplatform builds share one implementation.\n\nVerified on a Raspberry Pi 5 (linux/arm64): TestCpuInfoAllBranches and TestInfo\npass; darwin/arm64 cross-build is green.",
          "is_bot": false,
          "headline": "docs: per-package amd64 tiers, SVE-detected-but-unused, scope notes (…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T13:34:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0fe0a6ddc00ab18eec87d972292fd71aa058a351",
          "body": "* cpu: SIMD_DISABLE=avx now also masks F16C\n\nF16C is VEX-encoded and only detected when AVX is present (X86.AVX && CPUID\nleaf 1 ECX bit 29), but applyDisable's avx cascade (clearAVX) left F16C set.\nAfter SIMD_DISABLE=avx, cpu.HasF16C() stayed true and the f16 package kept\nusing the VEX-encoded VCVTP\n[…]\nle accordingly.\n\nCloses #114\n\n* cpu: rewrap clearAVX F16C comment for readability\n\nAddress review feedback: keep the avx2/fma/avx512 list on one line instead of\nsplitting it mid-token across the wrap.",
          "is_bot": false,
          "headline": "cpu: SIMD_DISABLE=avx now also masks F16C (#115)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T13:34:00Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "47189771b94f99b91d9c0c6b956a490eddddc101",
          "body": "…118)\n\nThe parity tests use fixed lengths and curated values; the dominant SIMD bug\nclass is tail/remainder handling at arbitrary lengths (unroll-boundary\noff-by-ones). Go native fuzzing closes that gap cheaply, and the seed corpus\nruns as a normal test under go test (no -fuzz needed) in CI.\n\nAdds f\n[…]\nd on a Raspberry Pi 5 (NEON) for the float, LPC, Rice, and crc paths.\nDocuments the fuzz invocation in CONTRIBUTING.md.\n\nAddresses #101 (priority packages f32/f64/i32/crc; c64/c128/i16/f16 to follow).",
          "is_bot": false,
          "headline": "test: differential fuzzing of SIMD paths against the Go references (#…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T13:33:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a80115974b06e01ea901d5045d000f8bbffadc70",
          "body": "The test matrix covered arm64 only via macos-latest (Apple Silicon), which\nexercises the darwin detection override (cpu_arm64_darwin.go hardcodes\nFP16/PMULL) rather than the linux/arm64 detection path in cpu_arm64.go that the\nRaspberry Pi regression hosts and most deployment targets actually run, an\n[…]\n host (Raspberry Pi 5): go test ./... with\nSIMD_REQUIRE_OBJDUMP=1 passes for every package via the host objdump, and\ncpu.Info() reports \"ARM64 NEON+FP16\" through the linux detection path.\n\nCloses #100",
          "is_bot": false,
          "headline": "ci: add native Linux arm64 test job (ubuntu-24.04-arm) (#117)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T13:33:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fcae31d2ac138c9357185252036a25dda995f478",
          "body": "Sync the README with the six merged feature PRs (#106, #107, #110, #111,\n#112, #113). The f16 F16C work (#110) did not touch the README, so:\n- the ToFloat32Slice/FromFloat32Slice rows now show the F16C amd64 width\n  alongside the NEON width;\n- the f16 section intro and the architecture-support table\n[…]\nFeatures list gains the F16C-conversion note and a SIMD_DISABLE bullet.\nThe c64/c128 dot products, f32 stats kernels, f64 NEON batch, and f32 N=6/8\ninterleave rows were already added by their own PRs.",
          "is_bot": false,
          "headline": "docs: reflect merged f16 F16C, SIMD_DISABLE, and complex/interleave work",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T12:09:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "13468f70dfcfd6b6416d8591c0d685bb206c8989",
          "body": "…ence (#110)\n\namd64 had no f16 assembly: every op ran the pure-Go reference. Native FP16\narithmetic needs AVX512-FP16 (Sapphire Rapids and newer, no AMD support), but\nF16C (VCVTPH2PS / VCVTPS2PH half<->single conversion) has shipped on every\nAVX2-capable x86 since 2012. This accelerates the two slic\n[…]\neep (run\nlocally) found no further differences.\n\nVerified on amd64 (i7-1260P, F16C) and arm64 (Raspberry Pi 5, NEON). go test\n./..., go vet, golangci-lint, and all cross-arch builds clean.\n\nCloses #98",
          "is_bot": false,
          "headline": "f16: add amd64 F16C conversion kernels; fix denormal bug in the refer…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T12:07:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "43584251e6a674c5d8d71075d9faa0ca1b904654",
          "body": "… f32 #71) (#112)\n\n* f64: add NEON batch-of-4 kernel for DotProductBatch on ARM64\n\nf64 DotProductBatch on ARM64 scored rows one at a time, reloading the query\nvector for every row. This adds the f64 NEON batch-of-4 kernel (parity with\nthe f32 #71 path), ported from the f32 .4S kernel to .2D: two flo\n[…]\ni 5's out-of-order Cortex-A76 (within\n  benchmark noise) but the cleaner form and a win on in-order cores.\n- Add an AllocsPerRun == 0 assertion for dotProduct4NEON to the kernel test\n  (coderabbitai).",
          "is_bot": false,
          "headline": "f64: NEON batch-of-4 kernel for DotProductBatch on ARM64 (parity with…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T11:59:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "79f61187ffc9ffc91b23ca06015b456481c93fd9",
          "body": "* f32: add amd64 SSE/AVX kernels for Variance and EuclideanDistance\n\nvariance32 and euclideanDistance32 fell back unconditionally to the pure-Go\nreferences on amd64, even though f64 ships the full kernel set and f32 on\nARM64 already has varianceNEON32/euclideanDistanceNEON32. This ports the f64\nkern\n[…]\nccumulators with a 2-deep tree (Y0+=Y3; Y4+=Y5; Y0+=Y4) instead of the\n3-deep sequential chain, matching varianceAVX and euclideanDistanceSSE and\nshortening the dependency chain by one VADDPS latency.",
          "is_bot": false,
          "headline": "f32: add amd64 SSE/AVX kernels for Variance and EuclideanDistance (#107)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T11:59:25Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "618baa58162cf03e1c5917041e149758171d9f75",
          "body": "AMD64 covered N=2,3,4,6,8 for f32 InterleaveN/DeinterleaveN while ARM64 NEON\nonly covered N=2,3,4; N>=5 fell back to the generic Go path. This adds N=6\n(5.1 audio) and N=8 (7.1 audio) NEON kernels via the pair trick: ZIP adjacent\nchannel pairs at .4S so each 64-bit lane holds a [cA_i, cB_i] frame pa\n[…]\n round-trip, and asserts the\npublic dispatch stays allocation-free.\n\nVerified on the Raspberry Pi 5; asmcheck clean. README audio interleave note\nupdated from N=2,3,4 to N=2,3,4,6,8 NEON.\n\nCloses #103",
          "is_bot": false,
          "headline": "f32: ARM64 NEON InterleaveN/DeinterleaveN for N=6 and N=8 (#113)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T11:59:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bf7b8ec2333961909b647c89168e0a2f0ca48534",
          "body": "c64 and c128 had only element-wise ops, so a complex dot product needed a\nMul into scratch plus a manual sum: an extra memory pass and scratch storage\nin user code. DotProduct (sum a[i]*b[i]) and DotProductConj (sum\na[i]*conj(b[i])) add the reductions directly. DotProductConj is the standard\nHermiti\n[…]\nj\n4.6x; c128 DotProduct 2.1x over pure Go.\n\nVerified on amd64 (SSE and AVX tested directly) and arm64 (Raspberry Pi 5,\nNEON). go test ./..., go vet, golangci-lint, and asmcheck all clean.\n\nCloses #104",
          "is_bot": false,
          "headline": "c64/c128: add DotProduct and DotProductConj reductions (#111)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T11:59:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3427aadbfdfad20e8d8ad55210be54781a819d60",
          "body": "* cpu: add SIMD_DISABLE env var to disable feature tiers at startup\n\nSIMD_DISABLE is a comma-separated, case-insensitive list of tokens read\nonce during cpu package init. Each token clears its own feature flag plus\nevery flag that depends on it, so the resulting Features value never\ndescribes an imp\n[…]\nkernels at\n  init (function pointers on amd64, capability flags on arm64) rather than\n  attributing the runtime constraint to amd64 only; arm64 freezes its hasNEON\n  flags the same way (coderabbitai).",
          "is_bot": false,
          "headline": "cpu: add SIMD_DISABLE env var to disable feature tiers at startup (#106)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-10T11:58:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "bc1f98489a20af3b37421e5ce869b59c05f63934",
          "body": "New crc package providing the FLAC CRC-16 (polynomial 0x8005, init 0,\nMSB-first, no reflection). Checksum16 folds the bulk of the buffer 16\nbytes at a time with a carry-less-multiply kernel and finishes with the\nexisting scalar slice-by-16 reduction.\n\nThe fold keeps a 128-bit accumulator congruent t\n[…]\n6) 1.2 -> 4.2 GB/s (3.5x). Bit-identical to the scalar\nreference, zero allocations, verified on both architectures.\n\ncpu: add PCLMULQDQ (amd64) and PMULL (arm64) feature detection to gate\nthe kernels.",
          "is_bot": false,
          "headline": "crc: add Checksum16 with PCLMULQDQ/PMULL carry-less-multiply fold (#95)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-05T16:36:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "024f36dff1f978cb1f304568b75ac74a65962b6d",
          "body": "… (#94)\n\nThe build matrix only covered {linux,darwin,windows} x {amd64,arm64}, so it\nnever compiled the `!amd64 && !arm64` pure-Go fallbacks in c64/c128/f32/f64/\ni16/i32. A primitive added to the SIMD dispatch but forgotten in the fallback\n(the c128 break fixed in #93) builds green on amd64/arm64 an\n[…]\nbuild with `undefined: conj128`.\n\nAlso set fail-fast: false on the build job to match the test and vet jobs, so\na fallback break reports every affected arch instead of cancelling siblings.\n\nCloses #94",
          "is_bot": false,
          "headline": "ci: build non-SIMD arch (riscv64, wasm) to guard *_other.go fallbacks…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-05T14:58:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "48376da2f8df3c8005535ef83a664f9a3584fcbd",
          "body": "* f32: add Round, a round-half-away-from-zero kernel for f64 parity\n\nf32 advertised \"Same API as f64\" but was missing Round, which f64 has\nexposed. This adds the float32 Round so the parity claim holds.\n\nThe kernels mirror f64's Round exactly:\n- AMD64 (AVX/AVX-512): VROUNDPS truncate plus a manual h\n[…]\nhe\npure-Go round32Go reference (its loop and the len(dst)==0 / BCE-hint bounds\nlines) uncovered in CI patch coverage. Add direct round32Go tests mirroring\nf64's TestRound64Go / TestRound64Go_EmptyDst.",
          "is_bot": false,
          "headline": "f32: add Round; c128: add FromReal (f64/c64 API parity) (#93)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-05T14:38:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0f3146b71d4a5d0a2c6fa04f9dfe1ddff71051db",
          "body": "The f32 package is documented as having the same API as f64, but three\ngeneral-purpose primitives were missing. Add them, composed from kernels f32\nalready dispatches so there is no new assembly:\n\n- WeightedSum(weights, src) = Σ weights[i]·src[i], a thin wrapper over the\n  existing dotProduct kernel\n[…]\nss SIMD body and scalar tail, a pure-Go\nreference check, and a zero-allocation assertion). Verified on amd64 (full f32\nsuite, go vet, golangci-lint) and cross-built for arm64 and the generic\nfallback.",
          "is_bot": false,
          "headline": "f32: add WeightedSum, SumOfSquares, SubFromScalar for f64 parity (#92)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-05T14:09:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "db428f585a27768846ae08c0060d2e1461a71905",
          "body": "…ions out of f64 table\n\nAdds the two primitives landed in #90 (f64.Autocorrelate) and #91 (i32.MinMax)\nto the README: function-table rows, prose, and benchmark figures (AVX2/NEON\nspeedups from the PR runs). Also relocates the three PCM-conversion functions\n(Int32ToFloat32Scale, Int16ToFloat32Scale, Float32ToInt16Scale) from the f64\ntable into a dedicated f32 section, since they are f32-only and have no f64\nequivalent.",
          "is_bot": false,
          "headline": "docs: document f64.Autocorrelate and i32.MinMax; move f32 PCM convers…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-05T13:43:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "644e3e9c3c5f351b5df8c5a9e4adec724ee3fffa",
          "body": "* i32: add MinMax, a signed int32 per-slice min/max reduction kernel\n\nMinMax(res []int32) (minVal, maxVal int32) returns the smallest and\nlargest int32 in res in a single pass. It is the reduction the go-flac\nRice planner runs per finest partition to find each partition's\nlargest-magnitude residual \n[…]\non now does zero loop\niterations instead of one. Output is unchanged (min/max is exact);\namd64 1000-int32 benchmark 47.1 -> 42.6 ns/op. Re-validated on amd64\n(AVX2) and natively on arm64 (NEON, Pi 5).",
          "is_bot": false,
          "headline": "i32: add MinMax, a signed int32 per-slice min/max reduction kernel (#91)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-05T13:00:29Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d4ae64c046f6ecf8e0f7b7c51eb9721426c15dbf",
          "body": "…rnel (#90)\n\nAdds f64.Autocorrelate(autoc, x, maxLag), the LPC autocorrelation step used\nby FLAC-style encoders:\n\n    autoc[lag] = sum x[i]*x[i-lag] for i in lag..len(x)-1\n\nThe kernels vectorize ACROSS lags (one accumulator lane per lag) rather than\nacross samples, so each lag's sum is accumulated i\n[…]\n(AVX2) and arm64 (NEON, native rpi5). New WORD encodings\npass the asmcheck cross-check (strict objdump mode). Kernel speedup over the\nGo fallback: amd64 2.9x-3.5x, arm64 2.4x-2.7x (n=4096, lag 8..32).",
          "is_bot": false,
          "headline": "f64: add Autocorrelate, a bit-exact lag-vectorized autocorrelation ke…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-05T07:01:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3c4feb46c8f7f5b194f58473adf4b3dfe708fcad",
          "body": "* i32: add ZigzagSum, FixedAbsSums, and widen RiceSums to k=0..30\n\nThree SIMD primitives for the FLAC encoder estimate path, each bit-identical to\nits pure-Go reference across AVX2, NEON, and the scalar fallback (verified with\nGODEBUG=cpu.avx2=off parity tests), zero-allocation.\n\n- ZigzagSum(res): t\n[…]\nm+1], and\nthe result is bit-identical (riceSumsWideI32 == riceSumsGo). Refresh the stale\nriceMaxParam5 comment and extend TestRiceAllocFree to cover the 5-bit width on\nboth RiceSums and RiceBestParam.",
          "is_bot": false,
          "headline": "i32: add ZigzagSum, FixedAbsSums, and widen RiceSums to k=0..30 (#89)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-04T21:05:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aab9af86e04b06131c78ede9500e64bbed83dcbe",
          "body": "* c128: make SSE2 kernels use only SSE2 instructions (fix SIGILL on pre-SSE4.1 CPUs)\n\nThe c128 init switch dispatches the *SSE2 kernels on cpu.X86.SSE2 (the amd64\nbaseline), but five of them used post-SSE2 instructions:\n\n  mulSSE2 / mulConjSSE2 / scaleSSE2 used BLENDPD (SSE4.1)\n  absSSE2 / absSqSSE2\n[…]\n).\n- cross-isa CI job: detect no-test packages with go list and drop the\n  '|| true' / stderr redirect so a genuine test-compile failure fails the job\n  instead of being silently skipped (CodeRabbit).",
          "is_bot": false,
          "headline": "Fix non-AVX fallback paths (c128 SIGILL + f64 sigmoid accuracy) (#88)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-03T10:19:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "654c4b6352e1a7e3266b211f2e490e5c3cf631c1",
          "body": "…n non-AVX CPUs (#87)\n\ninterleave2_32 / deinterleave2_32 dispatched straight to the VEX-encoded\ninterleave2AVX / deinterleave2AVX kernels based on slice length alone, with no\nCPU-feature check. On an amd64 CPU without AVX (e.g. Celeron 887) the first\nfloat32 resample executed an undecodable AVX inst\n[…]\n> scalar kernel, AVX -> SIMD kernel) so the bug is caught on AVX-capable CI\ntoo, plus a scalar round-trip parity check. Update the now-stale i32 comment\nthat referenced f32's old length-only dispatch.",
          "is_bot": false,
          "headline": "f32: select interleave2/deinterleave2 kernels at init to fix SIGILL o…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T21:17:28Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2908edef257263189be13693f666a5658075db17",
          "body": null,
          "is_bot": false,
          "headline": "chore: gitignore agent and tooling caches (.claude, .serena, cache)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T19:01:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1461549d8b2b1ffc7e86ad12390401bfa6292ec",
          "body": null,
          "is_bot": false,
          "headline": "docs: document i16 package (Interleave2/Deinterleave2) in README",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T19:01:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b47fbb50abc5fd11bf41a96db7d00b7faab911d",
          "body": "* i32: AVX2/NEON Rice zigzag cost search (RiceSums / RiceBestParam)\n\nAdd the Rice parameter cost search, the last integer primitive the FLAC\ncodec needs (issue #79, PR8). This closes Phase 3 and the issue.\n\nRiceSums fills sums[k] = Σ_i (zigzag(res[i]) >> k) for k = 0..14, the\ndata-dependent part of \n[…]\nchmarks (1000 elements, vs pure Go, zero-alloc):\nRiceSums / RiceBestParam: 810 ns, 13.0x on amd64 AVX2;\n4090 ns, 4.2x on arm64 NEON (Pi 5).\n\n* i32: cover RiceSums wide (5-bit) parameter range in tests",
          "is_bot": false,
          "headline": "i32: AVX2/NEON Rice zigzag cost search (RiceSums / RiceBestParam) (#86)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T18:48:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d93be6abbd58b4ca1ae9ba09d91de42bf950f43",
          "body": "* i32: AVX2/NEON quantized-LPC residual encode and decode kernels\n\nImplements Phase 3 PR6 + PR7 of the integer-SIMD FLAC roadmap (#79),\nbatched because the encode FIR and decode recurrence share the\n(coeffs, shift) API shape and give an encode->decode round-trip test, the\nsame way Diff/Restore do.\n\n\n[…]\noth LPCResidualEncode and\nLPCRestore so all paths stay bit-exact, matching the package convention\nthat public functions reconcile inputs. Adds TestLPC_ShiftClamp.\n\nAddresses review feedback on PR #85.",
          "is_bot": false,
          "headline": "i32: AVX2/NEON quantized-LPC residual encode and decode kernels (#85)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T17:58:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "388f1c6ed660c49f9f7e665d85b25f055bf71c13",
          "body": "…fix sum (#84)\n\n* i32: AVX2/NEON fixed-predictor decode Restore1..Restore4 via SIMD prefix sum\n\nAdds the decode-side fixed-predictor restoration kernels (PR5 of the\ninteger-SIMD FLAC roadmap, issue #79), the exact inverse of the Diff1..Diff4\nresidual kernels merged in #83.\n\nThe order-K fixed predict\n[…]\nd-predictor encode/decode pair (Diff1..Diff4 from\n#83, Restore1..Restore4 from this branch), plus a Diff/Restore round-trip in\nthe example and the measured Restore benchmarks in the performance table.",
          "is_bot": false,
          "headline": "i32: AVX2/NEON fixed-predictor decode Restore1..Restore4 via SIMD pre…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T16:42:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a21e1ceae9c3f115788f8c83193360b0c75d5c60",
          "body": "Implements issue #79 PR3 (stereo decorrelation: Add, Sub, MidSideEncode,\nMidSideDecode) and PR4 (fixed-predictor encode residuals Diff1..Diff4), with\nAMD64 AVX2 and ARM64 NEON kernels plus a pure-Go fallback. Bit-exact parity,\nzero-alloc, asmcheck and round-trip tests; verified on amd64 (AVX2) and arm64\n(NEON, Raspberry Pi 5).\n\nRefs #79",
          "is_bot": false,
          "headline": "i32: AVX2/NEON decorrelation and fixed-predictor encode kernels (#83)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T15:45:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "68eddd02a3740c76b2ffb53e70371603db95407a",
          "body": "* i16: new package with Interleave2/Deinterleave2 SIMD kernels (#79)\n\nAdd an i16 package providing Interleave2/Deinterleave2 on []int16 for\nsplitting and packing raw 16-bit interleaved stereo PCM before widening\nto int32 (PR2 of #79). It mirrors the i32 package conventions.\n\nAMD64 uses tiered dispat\n[…]\ns figure is accurate (ns/op and the\n  reported speedup are unchanged).\n- the i16_arm64.s header comment said the scalar tails use MOVW; they use\n  MOVH (16-bit). Correct the comment to match the code.",
          "is_bot": false,
          "headline": "i16: new package with Interleave2/Deinterleave2 SIMD kernels (#79) (#82)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T14:14:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3fa8fe2245d616fb089b32ce87b731669f48bdee",
          "body": "Add the i32 package, the integer counterpart to f32/f64, to serve\ninteger-domain DSP hot loops (for example a pure-Go FLAC codec) where the\nper-sample work is integer arithmetic and channel (de)interleaving rather\nthan floating-point math. This is PR1 of the i32/i16 surface tracked in #79.\n\nInterlea\n[…]\nn arm64 (NEON) on a Raspberry Pi 5.\n\nBenchmarks (1000 elements, vs pure Go, zero-alloc):\n  Interleave2:   AMD64 121ns (4.0x), ARM64 322ns (5.2x)\n  Deinterleave2: AMD64 228ns (2.1x), ARM64 322ns (5.2x)",
          "is_bot": false,
          "headline": "i32: new package with Interleave2/Deinterleave2 SIMD kernels (#81)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T13:31:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "908cd8433b586e38376d11cf46457a02d807e7ec",
          "body": "* f32/f64: AMD64 AVX2 interleave/deinterleave kernels for N=6 (#60)\n\nAdds the N=6 InterleaveN/DeinterleaveN cells that previously fell back to the\ngeneric Go path on AMD64, completing the documented stream-count matrix (the\n8k -> 48k upsample). Six streams have no clean register transpose, so the\nke\n[…]\nngci-lint clean, no goroutine-register\nclobber. ARM64 keeps the Go fallback (cross-checked on a Pi 5: parity and\nzero-alloc hold).\n\n* docs: clarify f64 N=3/N=6 require AVX2, N=8 is AVX (PR #80 review)",
          "is_bot": false,
          "headline": "f32/f64: AMD64 AVX2 interleave/deinterleave kernels for N=6 (#60) (#80)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T13:00:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ce6218d7b625ddeee9ecc6904927269362e3602c",
          "body": "Fill the f64 InterleaveN/DeinterleaveN stream counts that still fell back\nto the generic Go path on AMD64, bringing f64 up to the N=3/N=8 coverage\nf32 already has and that the README table already advertised for f64.\n\nN=3 (AVX2): per-stream immediate VPERMPD gathers merged with VBLENDPD, 4\nframes pe\n[…]\nning N=6 cells (f32 and f64) stay on the generic Go path: they\nneed gather/blend with no clean transpose, serve no documented hot path,\nand are left for a profiling-justified follow-up.\n\nAdvances #60.",
          "is_bot": false,
          "headline": "f64: AMD64 AVX interleave/deinterleave kernels for N=3 and N=8 (#78)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T12:20:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0fe1c3d2b5c3ca567a923815903faa5a2295d960",
          "body": "…3 (#77)\n\n* f32: AMD64 AVX2 gather/blend kernels for InterleaveN/DeinterleaveN N=3 (#60)\n\nN=3 was the only documented x86 hot path (the 16k -> 48k upsample) still\nfalling back to the generic Go loop on AMD64, because 3 streams do not map\nonto a clean register transpose the way N=4 (4x4) and N=8 (8x8\n[…]\nVX2); N=2/4/8 use only baseline AVX. The summary\ntable lumped them together, which could mislead AVX1-only users (N=3 falls back\nto the generic Go loop there). Addresses Gemini review feedback on #77.",
          "is_bot": false,
          "headline": "f32: AMD64 AVX2 gather/blend kernels for InterleaveN/DeinterleaveN N=…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T11:37:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f25a044e7362e11c1c3acb251f897b956bb3798b",
          "body": "* test(f32,f64,c64,c128): add vector-path SIMD-vs-Go parity tests (#45)\n\nAdd vector_path_test.go to each of f32, f64, c64 and c128 cross-checking every\nSIMD-dispatched public function against its pure-Go fallback over a length\nmatrix with non-multiples of the vector width, so the assembly main loop \n[…]\nnspects the 2*n-element packed buffer but passed\nn as the size label to the check helper, so a failure message would understate\nthe buffer length. Pass 2*n to match the buffer actually being compared.",
          "is_bot": false,
          "headline": "test: vector-path SIMD-vs-Go parity for f32/f64/c64/c128 (#45) (#76)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T11:09:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "49a1c3857f726b19502c015f4cc410849a007fc6",
          "body": "f64 DotProductBatch gains AVX/AVX-512 batch-of-4 kernels (#70). f32 ARM64 gains a NEON 4-row dot kernel wired into DotProductIndexed/DotProductStrided (#65) and DotProductBatch (#71), with portable row-major scaffolding shared across arches. Profile-justified on both arches; parity, allocation-free, and asmcheck verified.",
          "is_bot": false,
          "headline": "f32/f64: batch-of-4 query-load-reuse dot kernels (#70, #65, #71)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T10:31:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7758f713221a3c32d0a604ac3271314e6ac31d25",
          "body": "The AVX-512 kernels gate dispatch on AVX512F+AVX512VL but used several\ninstructions whose CPUID feature flag is actually AVX512DQ, a latent\ndependency that does not match the dispatch gate.\n\nVEXTRACTF32X8 -> VEXTRACTF64X4 (issue #67):\nFive reduction tails in f32 (dotProductAVX512, the sum/min/max ke\n[…]\n go build/vet/test ./... clean across all packages; objdump\nconfirms zero EVEX FP-logical or VEXTRACTF32X8 ops remain on ZMM, and the\nemitted VEXTRACTF64X4 is the W1 (AVX512F) encoding 62 f3 fd 48 1b.",
          "is_bot": false,
          "headline": "f32/f64/c64: drop latent AVX512DQ deps in AVX-512 kernels (#67) (#73)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T09:39:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ba0b832a6346bb03c22fd15d395446a6a39f319f",
          "body": "* arm64: fix go vet asmdecl warnings in c64/c128/f16 NEON kernels\n\ngo vet's asmdecl analyzer only checks the host arch's assembly, so eight\nwarnings in the arm64 NEON kernels went unnoticed on amd64 CI hosts.\n\nCorrects six over-declared TEXT frame argsizes (c128 absNEON/absSqNEON\n$0-56 to $0-48, con\n[…]\nl jobs only check out code and run build/test/lint/vet, so a top-level\nread-only contents scope is sufficient. Resolves the zizmor\nexcessive-permissions finding on the new vet job (CodeRabbit review).",
          "is_bot": false,
          "headline": "arm64: fix go vet asmdecl warnings in c64/c128/f16 NEON kernels (#72)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T09:16:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6373da797dd2ce3574a0ea21c9f8653d67f498da",
          "body": "* f32: extend dotProductBatch32 4x query-load reuse to AVX2/FMA\n\nPR #63 added a batch-of-4 query-load-reuse fast path to dotProductBatch32\n(the backend for DotProductBatch) but gated it only on AVX-512, so AVX2-only\nCPUs (most CI runners and a lot of production hardware) fell back to the\nper-row dot\n[…]\nhich gate the same\nkernel on AVX+FMA. Widen the gate so AVX1+FMA parts (e.g. AMD Piledriver/\nSteamroller/Excavator) take the fast path too, and update the kernel test gate\nand README wording to match.",
          "is_bot": false,
          "headline": "f32: extend dotProductBatch32 4x query-load reuse to AVX2/FMA (#69)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T08:47:54Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b2f6c470f115db38a2f3514038dbc5eb3a1c0250",
          "body": "Add codecov.yml marking project and patch status informational and ignoring _test.go. This hand-written SIMD library dispatches through CPU-feature-gated branches, so on one CI runner only the matching ISA arm executes and the others stay uncovered, and the .s kernels are not measured at all. Keep coverage visible without ever blocking a PR. Validated by codecov's schema validator.",
          "is_bot": false,
          "headline": "ci: make codecov project/patch coverage informational (#68)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T08:26:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c2f5dec905892df9b399710d4fe1563b405e39d",
          "body": null,
          "is_bot": false,
          "headline": "docs: set MIT license copyright holder to Tomi P. Hakala",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T08:25:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "544c2c698680d0daadf8b769fddbc1099d87d913",
          "body": "…ctStrided) (#63)\n\nAdd two allocation-free public APIs that score rows of a flat row-major float32\nstore against a single query vector without building [][]float32:\n\n- DotProductIndexed(dst, base, query, rowIDs, dims): rows selected by uint32 ID.\n- DotProductStrided(dst, base, query, rowCount, dims,\n[…]\nF64X4 in the reduction, scalar test oracles). Follow-ups: #64 (AVX2 batch\nreuse), #65 (NEON kernels), #66 (threshold re-tuning), #67 (VEXTRACTF32X8 cleanup).\n\nCo-authored-by: Mikers <snissn@gmail.com>",
          "is_bot": false,
          "headline": "f32: add row-major batch dot product APIs (DotProductIndexed/DotProdu…",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T08:21:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c903df571e8b1fb532b4bce79c4a76b304ce5fba",
          "body": "* f32: stop using R14 (goroutine g) as scratch in realFFTUnpackAVX\n\nrealFFTUnpackAVX used R14 as a general-purpose scratch register for\nbyte-offset and pointer math. On Go's amd64 internal ABI R14 holds the\ncurrent goroutine pointer g, so clobbering it is a latent GC-time crash\nthe moment the functi\n[…]\nunused Y15 abs mask. The live 0.5 broadcast (X13/Y13) and sign mask\n(Y14) are kept. RealFFTUnpack parity, known-value, and edge-case tests confirm\nthe output is still bit-identical on amd64 and arm64.",
          "is_bot": false,
          "headline": "f32: stop clobbering R14 (goroutine g) in realFFTUnpackAVX (#61)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-02T07:08:02Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "09e4128fe28d790cff7ea8491be6f196a09ddd24",
          "body": "* f32/f64: add InterleaveN/DeinterleaveN N-stream scatter/gather\n\nGeneralize Interleave2/Deinterleave2 to N planar streams in both packages:\n\n  InterleaveN(dst, srcs):    dst[i*N + c] = srcs[c][i]\n  DeinterleaveN(dsts, src):  dsts[c][i] = src[i*N + c]\n\nN is derived from len(srcs)/len(dsts). N == 1 i\n[…]\nlocations. Verified on amd64 and on a Raspberry Pi 5\n(arm64); golangci-lint clean on both architectures.\n\nCloses #53. Refs #54.\n\n* docs: note InterleaveN/DeinterleaveN generic fallback for arbitrary N",
          "is_bot": false,
          "headline": "f32/f64: add InterleaveN/DeinterleaveN N-stream scatter/gather (#59)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-06-01T19:52:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1d62642c9e4eb614480979760c54c5c18f2e4411",
          "body": "* f32/f64: add ConvolveDecimate fused strided convolution (#51)\n\nAdd ConvolveDecimate(dst, signal, kernel, factor, phase) to f32 and f64: a\ndecimating valid convolution that keeps every factor-th output starting at\nphase. With factor == 1 and phase == 0 it is exactly ConvolveValid. This\nfuses the in\n[…]\nonventions\n(R14=g, R28=g, etc.) so the R14 pitfall is not repeated.\n\nVerified: go vet (asmdecl), full f32/f64 suites with -race on amd64\n(SSE/AVX/AVX-512), and native arm64 (NEON) on a Raspberry Pi 5.",
          "is_bot": false,
          "headline": "f32/f64: add ConvolveDecimate fused strided convolution (#57)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-31T18:41:46Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "245fd2078046ce144fa0262a47baa25342178bc1",
          "body": "The PCM16 conversion primitives from #56 were listed in the operations\ntable but missing from the benchmark results table. Add Int16ToFloat32Scale\nand Float32ToInt16Scale rows; the conversion benchmarks were re-measured\ntogether on one host (i7-1260P) so the block stays internally consistent.",
          "is_bot": false,
          "headline": "docs: add Int16/Float32 PCM16 conversion benchmarks to README",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-31T15:55:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "41bb6d001c1458429fc75de3bbf94d5b61121bf5",
          "body": "Add SIMD int16 <-> float32 PCM16 conversion (Int16ToFloat32Scale, Float32ToInt16Scale, and Unsafe variants) with AVX2, NEON, and Go fallback backends, matched bit-for-bit across architectures. Allocation-free; verified on amd64 and natively on arm64.\n\nCloses #50. Part of #54.",
          "is_bot": false,
          "headline": "f32: add Int16/Float32 PCM16 conversion primitives (#56)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-31T15:36:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09dae4bfa01a69870b68ecfe3e2aeec4006efbc9",
          "body": "* asm: validate FP16 (.8H) WORD encodings via aarch64 objdump (#44)\n\ngolang.org/x/arch/arm64asm cannot decode ARMv8.2 half-precision (.8H)\nSIMD instructions, so the 19 FP16 WORD directives in f16_arm64.s were\nexempted from the encoding checker via a static allow-list. That left\nthem validated by nei\n[…]\ndecodable directive now\n  fails loudly rather than being accepted by the lenient no-objdump\n  fallback, keeping the exemption as narrow as the documented scope.\n- Add a test for the empty-input guard.",
          "is_bot": false,
          "headline": "Validate FP16 (.8H) WORD encodings via aarch64 objdump cross-check (#55)",
          "author_name": "Tomi P. Hakala",
          "author_login": "tphakala",
          "committed_at": "2026-05-31T14:38:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        }
      ],
      "releases_count": 10,
      "commits_last_year": 227,
      "latest_release_at": "2026-07-19T18:35:58Z",
      "latest_release_tag": "v1.6.0",
      "releases_from_tags": false,
      "days_since_last_push": 6,
      "active_weeks_last_year": 11,
      "days_since_latest_release": 6,
      "mean_days_between_releases": 5.7
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": true,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/tphakala/simd",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/tphakala/simd",
          "is_deprecated": false,
          "latest_version": "v1.6.0",
          "repository_url": "https://github.com/tphakala/simd",
          "versions_count": 36,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T18:35:18Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 6
        }
      ]
    },
    "popularity": {
      "forks": 5,
      "stars": 17,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-01-21",
            "count": 1
          },
          {
            "date": "2026-02-25",
            "count": 1
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "date": "2026-07-11",
            "count": 1
          },
          {
            "date": "2026-07-23",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 5,
        "total_forks": 5
      },
      "star_history": null,
      "open_issues_and_prs": 14
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Taskfile.yml"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 99727,
      "source_files_sampled": 238,
      "oversized_source_files": 1,
      "agent_instruction_files": [
        "CLAUDE.md"
      ],
      "agent_instruction_max_bytes": 3887
    },
    "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": 6,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/stretchr/testify",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.11.1"
        },
        {
          "name": "golang.org/x/arch",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.27.0"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.45.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/stretchr/testify",
            "direct": true,
            "version": "v1.11.1",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/arch",
            "direct": true,
            "version": "v0.27.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sys",
            "direct": true,
            "version": "v0.45.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/davecgh/go-spew",
            "direct": false,
            "version": "v1.1.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/pmezard/go-difflib",
            "direct": false,
            "version": "v1.0.0",
            "ecosystem": "go"
          },
          {
            "name": "gopkg.in/yaml.v3",
            "direct": false,
            "version": "v3.0.1",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 6,
        "direct_count": 3,
        "indirect_count": 3
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 121,
        "open_issues": 14,
        "closed_ratio": 0.813,
        "closed_issues": 61,
        "closed_unmerged_prs": 3
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "tphakala",
          "commits": 215,
          "avatar_url": "https://avatars.githubusercontent.com/u/7030001?v=4"
        },
        {
          "type": "User",
          "login": "tomiphakala",
          "commits": 12,
          "avatar_url": "https://avatars.githubusercontent.com/u/272442802?v=4"
        }
      ],
      "contributors_sampled": 2,
      "top_contributor_share": 0.947
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 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": "30 commit(s) and 30 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": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not 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": "c06683652b58e1dd15cd382708f708b874f4b20e",
        "ran_at": "2026-07-26T03:45:41Z",
        "aggregate_score": 5.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-19T18:41:30Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-19T18:26:25Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": [
        {
          "number": 52,
          "created_at": "2026-05-30T16:23:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 54,
          "created_at": "2026-05-30T16:23:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 66,
          "created_at": "2026-06-02T07:56:33Z",
          "last_comment_at": "2026-07-18T23:18:46Z",
          "last_comment_author": "tphakala"
        },
        {
          "number": 75,
          "created_at": "2026-06-02T10:32:20Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 96,
          "created_at": "2026-06-10T10:15:52Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 108,
          "created_at": "2026-06-10T11:04:10Z",
          "last_comment_at": "2026-06-10T11:08:57Z",
          "last_comment_author": "tphakala"
        },
        {
          "number": 132,
          "created_at": "2026-06-13T15:30:47Z",
          "last_comment_at": "2026-07-18T23:20:50Z",
          "last_comment_author": "tphakala"
        },
        {
          "number": 141,
          "created_at": "2026-06-14T13:01:02Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 161,
          "created_at": "2026-07-17T19:14:53Z",
          "last_comment_at": "2026-07-18T22:01:08Z",
          "last_comment_author": "tphakala"
        },
        {
          "number": 192,
          "created_at": "2026-07-19T16:17:35Z",
          "last_comment_at": "2026-07-19T18:36:49Z",
          "last_comment_author": "tphakala"
        },
        {
          "number": 196,
          "created_at": "2026-07-19T18:27:17Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 197,
          "created_at": "2026-07-19T18:54:40Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 198,
          "created_at": "2026-07-19T18:58:58Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 199,
          "created_at": "2026-07-19T19:04:45Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/tphakala/simd",
    "host": "github.com",
    "name": "simd",
    "owner": "tphakala"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 68,
      "inputs": {
        "security": 64,
        "vitality": 83,
        "community": 45,
        "governance": 59,
        "engineering": 84
      },
      "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": 227,
              "human_commit_share": 1,
              "days_since_last_push": 6,
              "active_weeks_last_year": 11
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "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": "227 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 227
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 30 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": 10,
              "latest_release_tag": "v1.6.0",
              "releases_from_tags": false,
              "days_since_latest_release": 6,
              "mean_days_between_releases": 5.7
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "10 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 6 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~5.7 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 5.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": 6,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 6 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "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": 45,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 24,
            "inputs": {
              "forks": 5,
              "stars": 17,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "17 stars",
                "points": 19.5,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 17
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "5 forks",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": true,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 18,
                "status": "met",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 59,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 16,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 2,
              "top_contributor_share": 0.947
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 95% of commits",
                "points": 1.2,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 95
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "2 contributors",
                "points": 2.7,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": 75,
            "inputs": {
              "merged_prs": 121,
              "open_issues": 14,
              "closed_issues": 61,
              "issue_closed_ratio": 0.813,
              "closed_unmerged_prs": 3
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "81% of issues closed",
                "points": 38,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 81
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "121/124 decided PRs merged",
                "points": 37.3,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 121,
                      "decided": 124
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 61,
            "inputs": {
              "followers": 78,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "tphakala",
              "public_repos": 64,
              "account_age_days": 4508
            },
            "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": "78 followers of tphakala",
                "points": 13.6,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 78,
                      "login": "tphakala"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "64 public repos, account ~12 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 64
                    }
                  },
                  {
                    "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/simd"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 6
            },
            "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 6 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 6
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "36 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 36
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 84,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "good",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 84,
            "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": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "topics": [
                "avx",
                "float32",
                "float64",
                "go",
                "golang",
                "math",
                "neon",
                "performance",
                "simd",
                "vectorization"
              ],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "10 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 10
                    }
                  }
                ],
                "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": "moderate",
        "name": "Security",
        "value": 64,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 55,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.5
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "27 out of 27 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "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 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is 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": "30 commit(s) and 30 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 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "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 6 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": 6
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 0,
              "affected_packages": 0,
              "assessed_packages": 6,
              "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": 6,
              "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": 3
            },
            "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": 82,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [
                "CLAUDE.md"
              ],
              "agent_instruction_max_bytes": 3887
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "CLAUDE.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "CLAUDE.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "100 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 100,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Taskfile.yml"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Taskfile.yml",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Taskfile.yml"
                    }
                  }
                ],
                "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": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": 99727,
              "source_files_sampled": 238,
              "oversized_source_files": 1
            },
            "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": "1/238 source files over 60KB",
                "points": 54.8,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 238,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-26T03:45:55.909324Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/tphakala/simd.svg",
  "full_name": "tphakala/simd",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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