原始 JSON 报告 机器可读
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 12366,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 2623635,
"Just": 4417,
"Shell": 16401,
"Assembly": 13441808
},
"pushed_at": "2026-07-28T10:05:38Z",
"created_at": "2025-12-24T11:41:44Z",
"owner_type": "User",
"updated_at": "2026-07-28T10:06:43Z",
"description": "WORK IN PROGRESS",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Assembly",
"significant_languages": [
"Assembly",
"Go"
]
},
"owner": {
"blog": "http://www.pcjv.de",
"name": "Christian Budde",
"type": "User",
"login": "CWBudde",
"company": null,
"location": "Hannover",
"followers": 141,
"avatar_url": "https://avatars.githubusercontent.com/u/4097562?v=4",
"created_at": "2013-04-08T21:46:29Z",
"is_verified": null,
"public_repos": 179,
"account_age_days": 4858
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v0.6.1",
"kind": "patch",
"published_at": "2026-01-15T06:42:22Z"
},
{
"tag": "v0.6.0",
"kind": "minor",
"published_at": "2026-01-11T17:16:07Z"
},
{
"tag": "v0.5.0",
"kind": "minor",
"published_at": "2026-01-04T18:54:42Z"
},
{
"tag": "v0.4.1",
"kind": "patch",
"published_at": "2025-12-31T14:50:30Z"
},
{
"tag": "v0.4.0",
"kind": "minor",
"published_at": "2025-12-31T04:31:52Z"
},
{
"tag": "v0.3.0",
"kind": "minor",
"published_at": "2025-12-29T22:41:20Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2025-12-29T08:20:50Z"
},
{
"tag": "v0.1.1",
"kind": "patch",
"published_at": "2025-12-27T16:26:10Z"
},
{
"tag": "v0.1.0",
"kind": "minor",
"published_at": "2025-12-27T16:09:54Z"
}
],
"recent_commits": [
{
"oid": "03552181517804e1eee786585a3adcc670ceb3f7",
"body": "… strategy preferences",
"is_bot": false,
"headline": "feat: update wisdom format to v3 with entry overrides for codelet and…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-28T10:05:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d00659ca8f721d56dadc79b037793e0d1e10c1eb",
"body": "- Updated the embedded wisdom version in README.md and doc.go from v2 to v3.\n- Enhanced the wisdom format to allow a wisdom entry naming a strategy to outrank the codelet registry.\n- Modified MeasureAndSelect function to benchmark codelets alongside kernel strategies, ensuring better decision-making\n[…]\n\n- Updated wisdom import/export functions to reject v2 files and ensure compatibility with the new v3 format.\n- Improved documentation to reflect changes in wisdom handling and measurement strategies.",
"is_bot": false,
"headline": "feat: update wisdom format to v3 and enhance measurement strategy",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-28T09:55:26Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "27d77ce7bfa38ab8cf4ba6b30ef855730dea13d5",
"body": "…ures over registry order",
"is_bot": false,
"headline": "feat: Enhance wisdom handling in planner to prioritize codelet signat…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-28T09:35:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "405e47b74d57c49a346ccbca9f06c8003f77f936",
"body": "…for AVX2 codelets",
"is_bot": false,
"headline": "feat: Introduce RankLevel for codelet ordering and adjust priorities …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-28T09:14:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a3b21dac784dd15784ac986b4676548b28ef0dd4",
"body": "…and AVX512\n\n- Updated `avx2_f64_size8_radix8.s` to replace MOVUPD with VMOVUPD for improved performance.\n- Modified `avx2_real_repack.s` to utilize VMOVSS and VXORPS for better efficiency in scalar operations.\n- Enhanced `avx2_scale.s` by changing MOVSS and MOVSD to VMOVSS and VMOVSD for vectorized\n[…]\ny replacing MOVSD and MOVUPS with VMOVSD and VMOVUPS for better vector handling.\n- Updated `avx512_f64_generic.s` to use VMOVUPD and VMOVSD for optimized data movement in scalar and vector operations.",
"is_bot": false,
"headline": "feat: Refactor assembly code to use vectorized instructions for AVX2 …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T22:39:22Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "5ee3357532654b35bd8acc19b0c375972beaa8eb",
"body": "…X2 Assembly Optimizations\n\n- Updated AVX2 assembly code for radix-4 FFT operations to utilize VMOVUPD for improved performance.\n- Adjusted priorities for AVX2 DIT codelets to optimize scheduling:\n - Increased priority for `dit64_radix2_avx2` from 19 to 26.\n - Decreased priority for `dit64_radix2_avx2` from 20 to 14.\n - Decreased priority for `dit64_radix4_avx2` from 25 to 15.\n- Modified SSE2 DIT codelet priority from 18 to 19 for better alignment with AVX2 priorities.",
"is_bot": false,
"headline": "feat: Enhance AVX2 and SSE2 Codelets with Priority Adjustments and AV…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T21:53:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c0db445223da024c76d4a455decd57d5cae5abb4",
"body": "…mplex128\n\n- Added `avx2_f32_mixedradix_stage11.s` for complex64 processing using AVX2 instructions, optimizing the radix-11 butterfly computation.\n- Introduced `avx2_f64_mixedradix_stage11.s` for complex128 processing, following a similar structure and optimizations as the complex64 implementation.\n- Both implementations utilize memory-stored constants for efficient FMA operations and maintain dst == input aliasing safety.",
"is_bot": false,
"headline": "Implement AVX2 fused radix-11 mixed-radix stages for complex64 and co…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T21:06:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "581c488b0790db4743232a406d35175bae87bbcc",
"body": "…orization logic",
"is_bot": false,
"headline": "feat: Re-derive mixedRadixStageMinMuls for fused path and update vect…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T14:44:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a81651643eea67d4e89a118bec5028da1b3bd0bd",
"body": "…d Complex128\n\n- Added mixedRadixStageFused function to disable vectorization for radix 7 in non-AVX2 builds.\n- Updated mixedRadixStageVectorizable to conditionally admit radix 7 based on the availability of the fused kernel.\n- Implemented AVX2 assembly routines for radix-7 mixed-radix stages for bo\n[…]\ns to cover radix 7 scenarios, ensuring correct behavior in both scalar and vectorized paths.\n- Updated comments and documentation to clarify the performance implications of radix 7 in mixed-radix FFT.",
"is_bot": false,
"headline": "feat: Implement AVX2 Fused Radix-7 Mixed-Radix Stage for Complex64 an…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T09:59:33Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "7dbe628d93e0489238184b8c888e09d451c71594",
"body": "…roving performance",
"is_bot": false,
"headline": "feat: add fused AVX2 mixed-radix stage kernels for radix 3 and 5, imp…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T09:37:42Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3d5f475bf32b5630a5f819c311184988ea51bbb0",
"body": "zz_hit_test.go was a throwaway correctness check against the naive DFT\nused while bringing up the fused mixed-radix stage kernels; the coverage\nit provided lives in internal/fft/mixedradix_stage_asm_test.go, which\ncompares the kernels against the stage definition directly.\n\nThe ALGOFFT_FUSED_STAGE e\n[…]\ninterleaving the fused and two-pass arms of a\nbenchmark A/B, and was never meant to ship.\n\nBoth were swept into 4203fda by accident.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: drop scratch test and temporary A/B knob",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T09:20:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4203fda6722df9a86fa33adec26d0f9056389bd6",
"body": "- Added assembly implementations for radix-3 and radix-5 mixed-radix stages for complex64 in `avx2_f32_mixedradix_stage3.s` and `avx2_f32_mixedradix_stage5.s`.\n- Introduced assembly implementations for radix-3 and radix-5 mixed-radix stages for complex128 in `avx2_f64_mixedradix_stage3.s` and `avx2_\n[…]\n and manage the tail processing for both complex64 and complex128.\n- Added a stub file `mixedradix_stage_asm_stub.go` to provide fallback implementations for non-amd64 architectures or pure Go builds.",
"is_bot": false,
"headline": "feat: Implement AVX2 mixed-radix FFT stages for complex64 and complex128",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T09:18:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "e15b369444280a00f836cf6a80523845ebe0bd36",
"body": null,
"is_bot": false,
"headline": "doc: subtasks",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T09:03:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "99bb41434117a20988d1b9629a8eef57baa796f5",
"body": "… performance visibility",
"is_bot": false,
"headline": "feat: add benchmarks for practical DSP lengths to improve mixed-radix…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T08:43:43Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "88cf70bf72a342ebfe6366362bf429d37cb539f4",
"body": "…d reducing registry lookups",
"is_bot": false,
"headline": "feat: optimize mixed-radix FFT by hoisting leaf codelet resolution an…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-27T06:40:03Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8298983f48a66df731e9f945b713f87c7626b8ca",
"body": "…ization and performance\n\n- Vectorized the odd-radix butterfly stages, allowing for contiguous twiddle tables that eliminate stride-gathering overhead.\n- Introduced `mixedRadixStageComplex64` and `mixedRadixStageComplex128` functions to handle the new vectorized approach.\n- Added `stageTwiddle64` an\n[…]\non from `mixedradix_leaf_twiddle.go` and integrated its functionality into the new structure.\n- Enhanced performance measurements and profiling to reflect the changes in the mixed-radix FFT algorithm.",
"is_bot": false,
"headline": "refactor: Refactor mixed-radix FFT implementation for improved vector…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T23:37:29Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f49e465a4506fb1be682512d84ecc346be4013cd",
"body": "…and caching twiddle tables",
"is_bot": false,
"headline": "feat: optimize mixed-radix performance by reducing dispatch overhead …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T22:54:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "44f706ad5c4c9fcc2cf061da5bcc07d511513076",
"body": "- Fixed AVX2 mixed-radix drivers to avoid unnecessary codelet dispatch for small transforms, improving performance by 18–58% across various lengths.\n- Updated routing criteria for mixed-radix eligibility, allowing more lengths to benefit from the mixed-radix engine instead of Bluestein.\n- Added tests to validate new routing for large audio-rate lengths, ensuring correctness against previous implementations.",
"is_bot": false,
"headline": "feat: enhance mixed-radix performance and routing for audio rates",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T22:23:58Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "db2ecaa6b7cc06ff01103ed31bada220d032e67f",
"body": "- Added scripts for canary-gated benchmarking to ensure reliable performance measurements under thermal constraints.\n- Updated benchmark input generation to use a seeded RNG for consistent results.\n- Revised AVX-2 codelet priorities to reflect accurate performance metrics.\n- Enhanced documentation in BENCHMARKS.md and CHANGELOG.md to detail new benchmarking methods and results.",
"is_bot": false,
"headline": "feat: implement canary-gated benchmarking for codelet candidates",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T21:18:25Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "5a8552f8f782854be3762bc1b1af08c04164afc0",
"body": "feat: avx512 codelets",
"is_bot": false,
"headline": "Merge pull request #33 from CWBudde/feat/avx512-codelets",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T17:47:18Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "55dad850df7101afdfd7cc203dc95d16c153374e",
"body": "test-format installed prettier and markdownlint-cli unpinned, so the job\nsilently tracked whatever npm published. prettier 3.9.0 introduced a\nregression that makes markdown formatting non-idempotent on this repo: it\nre-indents deeply nested list content and grows PLAN.md by ~2.9 KB on\nevery pass, re\n[…]\nat made even 3.8.x non-idempotent on PLAN.md.\nBoth are needed: with pinned formatters and that fix, a full format run\nover every tracked markdown file produces zero changes and\njust fmt-check exits 0.",
"is_bot": false,
"headline": "ci: pin prettier to 3.8.5 in the format check",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T17:32:34Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cc2282fd74f56f924df8d3ac9aff06e7b149c1fc",
"body": "just fmt-check has been failing on main (test-format is the only red job\nthere; all 11 others pass). The cause is in PLAN.md, not in any recent\nchange: an inline code span listing the promoted-multiply instruction\nsequence wrapped across two lines inside an indented list item, and its\nsecond line sa\n[…]\now idempotent\n(identical size and hash across four consecutive passes) and\njust fmt-check exits 0. Rendering is unchanged - it was already a single\ninline code span, only the source wrapping differed.",
"is_bot": false,
"headline": "style: unwrap inline code span that broke prettier idempotency",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T17:27:44Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9f12d7ff5379916f053e2bf4ffcec8563118e1a5",
"body": "gomodguard is deprecated since golangci-lint v2.12.0 in favour of\ngomodguard_v2, which default = 'all' already enables. Disabling the old\none silences the deprecation warning without losing the check.",
"is_bot": false,
"headline": "build: disable deprecated gomodguard linter",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T16:58:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "69509c99b12e703f66c727f0cbea7f4fcc5ee542",
"body": "Documents the measurements behind the SIMDAVX512 priorities, referenced\nfrom cmd/gencodelets/specs.go: setup and methodology, per-size forward\nand inverse figures for both precisions, the rationale for the disabled\ncomplex128 size-4 entry, and the AVX512F-only instruction constraint.",
"is_bot": false,
"headline": "docs: add AVX-512 codelet benchmark record",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T16:58:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cf21f9bf93312a6166fa1f1016d3c0e59efb8674",
"body": "Registry.Lookup() skips entries with negative priority, but\nLookupBySignature() did not. The wisdom binder in internal/planner\nresolves a persisted algorithm name through LookupBySignature and only\nre-checks CPUSupports, so a wisdom entry naming a disabled codelet could\nbind and execute it - defeati\n[…]\nr be\nimported from another machine, so this is reachable in practice. It\naffects dit4_radix4_avx512 and the pre-existing dit1024_radix32x32_avx2.\n\nAdds a regression test that fails without the filter.",
"is_bot": false,
"headline": "fix: skip disabled codelets in LookupBySignature",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T16:58:51Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "80f69112857f85950d1540a9a276d48367ee0de9",
"body": "Size 8 is the fastest size-8 complex128 candidate in both directions on a\nXeon Gold 5218 (forward 13.40 ns vs 15.94 for dit8_radix8_sse2; inverse\n13.44 ns vs 19.89 for dit8_radix8_avx2). Two ZMM hold the whole transform.\n\nSize 4 is registered but DISABLED (Priority: -1). It loses to the pure-Go\ncode\n[…]\nlost. Negative-priority rows are\nskipped by the behavioural sweeps, so it was verified at a positive\npriority before being disabled.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add AVX-512 complex128 codelets for sizes 4 and 8",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T16:31:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bd646ed11cf6b848b2b6494f13c78a3bd7474402",
"body": "Adds hand-written AVX-512 codelets covering the register-resident sizes,\nverified on a Xeon Gold 5218 (Cascade Lake-SP).\n\ncomplex64: sizes 8, 16, 32, 64 (two variants), 128, 256\ncomplex128: sizes 16, 32, 64, 128 - this precision previously had no\n AVX-512 codelets at all\n\nA ZMM holds 8 c\n[…]\n12F only (no DQ/BW), matching the contract stated in\ndecl_avx512.go and the cpu.Features.HasAVX512 gate, which is CPUID\nebx7 bit 16.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: add size-specific AVX-512 codelets for complex64 and complex128",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T16:23:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "48e52434f3133ea4e6e016d58bef16b3be6fc5aa",
"body": "…for codelet direction symmetry",
"is_bot": false,
"headline": "changelog: update benchmarks for complex64 and complex128; add tests …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T14:21:49Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "74e3356be6191e43612b739f385d270810722cc2",
"body": "…and consistency; add benchmarks for previously unmeasured paths",
"is_bot": false,
"headline": "refactor: optimize complex64 and complex128 codelets for performance …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T13:24:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1f7febcfc6d11ce57f5f8311070606018c081f05",
"body": "go generate emits the codelet inventory with raw markdown table\nseparators; treefmt/prettier normalizes them. The two round-trip\nagainst each other, so regenerating and committing without running\njust fmt left HEAD failing the CI formatting gate.\n\nWhitespace and table-separator only; go generate produced no\nsemantic change to the inventory.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "style: restore prettier formatting of generated inventory",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T11:59:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "596987b8eb796e9e5ae5ab76eb3e29b1f657e808",
"body": "…ise multiplication\n\n- Updated the scaling approach in various FFT functions (e.g., forwardDIT16Radix16Complex64, inverseDIT16Radix16Complex128) to apply scaling as a component-wise operation instead of using a complex multiplication helper. This change improves performance by reducing the number of\n[…]\narks for split-radix FFT implementations to evaluate performance across different input sizes.\n- Introduced new benchmark functions for the 384-point FFT to measure performance through the public API.",
"is_bot": false,
"headline": "refactore: Refactor scaling in FFT implementations to use component-w…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T11:48:54Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d6c79ba1b3e11f597aa45a57abba08b2f0db4c54",
"body": "…nd complex128",
"is_bot": false,
"headline": "refactor: streamline scaling in inverse FFT functions for complex64 a…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T11:25:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "8189ef4dbadcb2f706a51c74de86ff8c891ca65a",
"body": null,
"is_bot": false,
"headline": "Implement code changes to enhance functionality and improve performance",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T10:40:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1b7d7da31fbb17b185d99eba13789eafc6934343",
"body": "…ementations",
"is_bot": false,
"headline": "refactor: optimize complex multiplication and scaling across FFT impl…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T10:40:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ce65785bbfd45b7dc3b0f056b7c4b90c0d9433df",
"body": "- Updated `measure_correctness` to report FFT accuracy against a float64 naive DFT, including relative L2 error metrics.\n- Introduced new flags for customizable sizes, trials, and seed values.\n- Added support for purego and SIMD build tags to differentiate between build configurations.\n- Refactored \n[…]\nus per-bin max relative error.\n- Created comprehensive tests for new metrics and reference DFT implementations.\n- Updated documentation to reflect changes in measurement methodology and output format.",
"is_bot": false,
"headline": "feat: enhance FFT accuracy measurement tool",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T09:05:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "3ca78bf62568e1876fb254a7f20a80bee039e4b8",
"body": "…ved DFT references\n\n- Updated `measure_correctness` command to report FFT accuracy against a float64 naive DFT.\n- Introduced new metrics: relative L2 error and peak-normalized max-per-bin error.\n- Refactored DFT implementations to separate wide and narrow versions for precision comparison.\n- Added \n[…]\ntions to ensure correctness.\n- Improved command-line flags for better usability and reproducibility of results.\n- Updated documentation to reflect changes in measurement methodology and output format.",
"is_bot": false,
"headline": "fix: Enhance FFT accuracy measurement tool with new metrics and impro…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T09:05:10Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8a623ea126e651c149c8a655753429217d1e43b6",
"body": "…kg functions\n\n- Replaced direct multiplication of complex numbers with calls to mathpkg.MulComplex64 and mathpkg.MulComplex128 in various FFT implementations, including DIT, radix-2, radix-4, and split-radix algorithms.\n- Introduced monomorphized functions for complex128 operations to avoid float64\n[…]\nand maintain consistency across different data types.\n- Added a new radix4TransformComplex64 function to handle radix-4 transformations specifically for complex64 data, ensuring optimized performance.",
"is_bot": false,
"headline": "refactor: Refactor complex multiplication in FFT kernels to use mathp…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-26T07:45:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "8a7cebc7112b771b90725166c77fccdb08b43a66",
"body": "…and allocation-free strategies\n\n- Added DITForwardBitrev and DITInverseBitrev functions to support caller-supplied bit-reversal tables.\n- Refactored combineRadix8 and combineGeneral functions to accept flat blocks for sub-results and twiddles, improving performance and reducing allocations.\n- Updat\n[…]\n FFT transformations, validating performance improvements.\n- Enhanced the PlanDecomposition strategy to prioritize efficient radix selections and precompute bit-reversal tables for power-of-two sizes.",
"is_bot": false,
"headline": "feat: enhance recursive FFT implementation with bit-reversal support …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T19:31:17Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "0f8fe5aef658db82459db66d5b410e6da9d6b7ab",
"body": "…tation\n\n- Introduced `ComplexMulArray` function to handle element-wise complex multiplication for both complex64 and complex128 types, improving performance by avoiding unnecessary type widening.\n- Replaced scalar multiplication in various FFT kernels with `m.MulComplex64` and `m.MulComplex128` to \n[…]\n_MatchesReference` to account for precision differences between complex64 and complex128.\n- Added `complex_scalar.go` to provide optimized scalar multiplication functions for complex64 and complex128.",
"is_bot": false,
"headline": "refactor: Refactor complex multiplication and scaling in FFT implemen…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T16:00:47Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "cd8d5d45edecd1339be5794bf37ef079314bb572",
"body": "Measuring against other libraries instead of against our own history\nsurfaced things the internal suite structurally cannot see, because\n'faster than last week' and 'faster than FFTW3' are different questions.\n\nThree of the eleven items are defects rather than missing optimizations:\ncomplex64 is slo\n[…]\nIMD build regresses against purego at two\nBluestein primes.\n\nSource data, charts and reproduction steps are in go-fft-bench@a1fa607.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add Priority 5, findings from the external benchmark sweep",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T15:12:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "39aab1e4c6d76335750ed1cba591896da84e2551",
"body": "Documentation-only release. The v0.7.0 tag points at a changelog entry\nthat describes an API the tree no longer has and omits most of what the\nrelease contained; v0.7.1 exists so that a tag carries the corrected\ntext. No code changes.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: cut CHANGELOG entry for v0.7.1",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T15:03:19Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "cd753d52c737ce9c12d972782581c9481aa94dae",
"body": "The entry cut alongside the tag described a Meta()/PlanRealT API that\nb1ec895 had removed, claimed the 5-smooth Bluestein pads were computed\nbut inert after 716f376 enabled them, and claimed a split-radix rule for\npower-of-two squares that 20d3ccc reverted. It also omitted most of the\nrelease: four-\n[…]\n the SSE and NEON ladders, the AVX2 complex128 Stockham asm,\nthe codelet retune, odd-length real FFT, and the asm build-tag removal.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: correct and complete the v0.7.0 changelog entry",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T13:31:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a7f2d1cb2ee855a452f24136225944007df31461",
"body": "Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: cut CHANGELOG entry for v0.7.0",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T13:14:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "20d3cccbd16d7817f87d05c4b6200b0edb719ed6",
"body": "…dd benchmarking for auto rule",
"is_bot": false,
"headline": "feat: Update kernel strategy selection for power-of-two squares and a…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T13:11:16Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "716f3762d9e01c5f1b4c485c76817d82fa443741",
"body": "… benchmarks",
"is_bot": false,
"headline": "feat: Implement shape-aware Bluestein padding model and corresponding…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T11:45:08Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "de2f64e21c84ab8650fdcb273cecf5548fb141c8",
"body": "…or mixed-radix paths",
"is_bot": false,
"headline": "feat: Enhance Bluestein padding model and add zero-allocation tests f…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T11:14:06Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "edb7529a2bfefec5582d4bfa0c687ed1f88efd44",
"body": null,
"is_bot": false,
"headline": "feat: Implement EachMixedRadixSmooth function and corresponding tests",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T10:38:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fdbf59a3734d7eee1ea901e049dd9f77a00dd4f",
"body": "The mixed-radix engine gained radix-7/11 butterflies, but RaderEligible\nstill required p-1 to be 5-smooth, so primes like 113, 353, 2113 and 4481\nkept Bluestein's pad to >= 2p-1 even though their p-1 is executable\nexactly. Gate on IsMixedRadixSmooth(p-1) instead.\n\nRadix-7/11 stages are full-matrix D\n[…]\nnce.NaiveDFT plus round-trip at 42 primes spanning\nevery p-1 shape; TestRader_ZeroAlloc extended to the radix-7/11 sub-FFT\nvariants.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Extend Rader's algorithm to primes with 7/11-smooth p-1",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T03:58:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a160f80176904bf791ee664770d5b24621c38266",
"body": "Updates the P4.2 FMA-audit bullet with the second pass: which codelets\nwere fused, which multiplies were deliberately skipped and why, the\ndeterministic accuracy deltas, and an explicit note that the performance\nclaim is unproven on this thermally-throttled laptop (rule 5 of the\nmethodology gate is \n[…]\nhat the\n c64 path uses;\n 3. the complex64 path rebuilds per-call scratch instead of pooling it\n the way the c128 path does.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: Record FMA audit second pass and size-384 findings",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T03:08:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7894ac22c190e5747ae0da76577b8a08eb3dff34",
"body": "Completes the FMA audit for every AVX2 codelet the registry actually\nselects for its size. Cross-referencing the FMA-less .s files against the\nwinning Priority per (Size, SIMDAVX2, Prec) left 7 files; all are now\nconverted to the in-tree VMOVDDUP/VPERMILPD/VFMADDSUB231PD (f64) and\nVMOVSLDUP/VMOVSHDU\n[…]\nvet-arch clean on\namd64/arm64/386/purego, zero-alloc preserved on every touched codelet.\nNo spec-table, priority, or symbol changes.\n\nCo-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf: Fuse complex-multiply cores of selected AVX2 codelets",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T03:08:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "05ec05d1e9dcdcf28f8a664e013154ae53d00a8c",
"body": "…mpletion details",
"is_bot": false,
"headline": "docs: Update implementation inventory and roadmap with NEON ladder co…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T01:40:38Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "01cd309845f57734db403703e5c2d7fc1f08f89f",
"body": "…32768)\n\n- Extended the test suite in `neon_f64_size_specific_test.go` to include new sizes: 8192, 16384, and 32768 for complex128 FFT kernels.\n- Introduced size-specific tolerances for the new sizes to ensure accuracy.\n- Registered new NEON FFT codelets for complex64 and complex128 in `codelet_init_neon.gen.go` for sizes 8192, 16384, and 32768, including forward and inverse transformations.",
"is_bot": false,
"headline": "feat: Add NEON FFT codelets and tests for larger sizes (8192, 16384, …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T01:40:29Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "57e9ad62da5ffa84240d8c34bf8329c02e3de2a6",
"body": "- Updated `TestNEONComplex128SizeSpecificKernels` to include tests for 2048 and 4096 sizes with appropriate tolerances.\n- Registered new NEON DIT codelets for complex64 and complex128 for sizes 2048 and 4096 in `codelet_init_neon.gen.go`.\n- Enhanced error checking in tests to accommodate new kernel sizes.",
"is_bot": false,
"headline": "feat: Add NEON FFT kernels for sizes 2048 and 4096",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-25T00:56:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "07f5d927f2c3217537cfd76798f10e974c0eca40",
"body": "- Introduced a new AVX2 DIT codelet for size 512 with radix-8 support.\n- Added NEON DIT codelets for size 1024 with radix-4 support and for size 512 with radix-4-then-2 support.\n- Updated the plan API test to reflect the availability of the new NEON radix-4-then-2 codelet for size 512.",
"is_bot": false,
"headline": "feat: Add new DIT codelets for AVX2 and NEON with size 512 and 1024",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T23:53:12Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c45d91535d624ab14234288eebb873635d7ec5c5",
"body": "…T kernels",
"is_bot": false,
"headline": "feat: Add AVX2 and NEON implementations for size-512 and size-1024 FF…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T23:52:28Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6aeb15786796524797d95597e43b0c596554dec0",
"body": "… complex128\n\n- Introduced Forward and Inverse Radix-2 FFT assembly functions for complex64\n in SSE3, specifically for size 256.\n- Added Forward and Inverse Radix-4 FFT assembly functions for complex128\n in AVX2 for sizes 1024 and 128.\n- Registered new codelets for the added FFT implementations in the AVX2 and\n SSE2 kernels, ensuring they are available for use with the DIT algorithm.",
"is_bot": false,
"headline": "feat: Add SSE3 and AVX2 Radix-2 FFT implementations for complex64 and…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T23:08:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "7cd8ed62f1b588bdd2b14b267747a58087695ebd",
"body": "…tests\n\n- Implemented forward and inverse DIT FFT kernels for size-32768 using SSE3 and SSE2 optimizations in `dit_32768_radix4_then2_amd64_sse.go`.\n- Created comprehensive tests for both forward and inverse transformations for size-16384 and size-32768, validating against generic implementations.\n- Included in-place and out-of-place test cases to ensure correctness of the FFT implementations.",
"is_bot": false,
"headline": "feat: Add SSE3 and SSE2 kernels for size-32768 FFT and corresponding …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T22:32:56Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "56d543a863eb3625f1218529132e3b5ca2ef4e44",
"body": null,
"is_bot": false,
"headline": "feat: Implement AVX2 Stockham FFT kernels for complex128 with benchmarks",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T21:34:48Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1bd11225690cef36de13706f7aab0de8df49a03c",
"body": "- Introduced new AVX2 kernels for forward and inverse FFT operations on complex64 and complex128 data types in `dit_32768_radix4_then2_amd64_avx2.go`.\n- Implemented corresponding unit tests to validate the AVX2 kernels against the generic Go implementation in `dit_32768_radix4_then2_amd64_avx2_test.\n[…]\nize-32768 radix-4-then-2 FFT in `dit_32768_radix4_then2_test.go`.\n- Created helper files to manage race detector behavior during tests in `test_helpers_norace_test.go` and `test_helpers_race_test.go`.",
"is_bot": false,
"headline": "feat: Add AVX2 implementation for size-32768 radix-4-then-2 FFT kernels",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T20:47:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b2bb0b1800d8872c958da21b8ef124271e824366",
"body": null,
"is_bot": false,
"headline": "feat: Optimize packed twiddle handling and remove conjugation function",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T16:48:59Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "43fa3ce06cb0aa14d1a49b51259f9ea824f83775",
"body": "- Added Linux-specific cache detection in `cache_linux.go` and fallback for other platforms in `cache_other.go`.\n- Implemented cache reading from sysfs in `cache_sysfs.go` to retrieve L1 and L2 cache sizes.\n- Created tests for cache detection and parsing of sysfs cache sizes in `cache_test.go`.\n- De\n[…]\nd benchmarks.\n- Added a comprehensive plan test for the four-step strategy in `plan_fourstep_test.go`, validating the algorithm against auto plans and ensuring fallback behavior for unsupported sizes.",
"is_bot": false,
"headline": "feat: Implement four-step FFT algorithm with cache-aware optimizations",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T16:10:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "9f68728254a0326c50bf5535971433e9f79434a5",
"body": "- Implemented forward and inverse FFT functions for 8192-point size using SSE3 in asm_amd64.go.\n- Updated size-specific FFT handling in kernels_amd64_size_specific.go to include 8192-point cases.\n- Registered new codelets for 8192-point FFT in codelet_init_sse2.gen.go for both complex64 and complex128 types.\n- Enhanced benchmark tests in sse2_bench_test.go to include 8192-point FFT cases.\n- Added test cases for 8192-point FFT in sse2_kernels_test.go for both complex64 and complex128.",
"is_bot": false,
"headline": "feat: Add support for 8192-point FFT with SSE3 and SSE2",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T15:02:23Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "daf95d8daa4799ee351028f1bc357a5cc328004b",
"body": null,
"is_bot": false,
"headline": "feat: Add 256-point SSE2 kernels and update benchmarks for complex64",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T14:42:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c9864bea0592e94070cabbb6f1591fef6f5dc039",
"body": "- Implemented forward and inverse FFT kernels for 4096-point complex64 and complex128 using SSE3 and SSE2.\n- Updated the kernel registration to include the new 4096-point kernels.\n- Added benchmarks for the new 4096-point kernels in the SSE2 benchmark tests.\n- Refactored existing size-specific FFT handling to streamline the process and improve maintainability.",
"is_bot": false,
"headline": "feat: Add 4096-point FFT kernels and benchmarks for SSE3 and SSE2",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T10:31:27Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "4fecd45751c34ea6a86eea38b8e297def4dbce7b",
"body": "…ility",
"is_bot": false,
"headline": "feat: Refactor code structure for improved readability and maintainab…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-24T09:21:24Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "663451e1e2b5af76911491404b9381b86e7e60ee",
"body": "…tolerances",
"is_bot": false,
"headline": "feat: Update documentation paths and enhance real FFT error handling …",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T22:08:22Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "cac4d9b1d38fb310034d024b13906b7fd4af6cd0",
"body": "- Implement forward and inverse FFT for 8-point using radix-8 butterflies in `dit_8_radix8_c128.gen.go`.\n- Introduce a general DIT FFT function for various sizes in `dit_c128.gen.go`, leveraging optimized implementations for specific sizes.\n- Add radix-4 then 2 FFT implementations in `dit_radix4_the\n[…]\ns.\n- Introduce split-radix FFT functions in `splitradix_c128.gen.go` for efficient FFT processing.\n- Implement Stockham FFT functions in `stockham_c128.gen.go` for both forward and inverse transforms.",
"is_bot": false,
"headline": "feat: Add optimized FFT kernels for complex128 data",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T22:06:23Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "f9841846dd06e1885d2cc217fed82c3178a68028",
"body": "- Replaced custom itoa function with strconv.Itoa for converting integers to strings in multiple files.\n- Enhanced the String methods across various plan types to provide clearer debugging information.\n- Introduced new tests to ensure that forcing the recursive strategy on non-power-of-two lengths f\n[…]\nrm entry points for forward and inverse FFT operations, including batch processing capabilities.\n- Updated benchmarks to reflect changes in the plan implementations and ensure performance consistency.",
"is_bot": false,
"headline": "refactor: Refactor FFT Plan Codebase",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T21:33:28Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b77a9fb83e9745ae6400169843559354714d11be",
"body": "- Introduced a new package `registry` to manage FFT codelets with size-indexed lookup.\n- Added `CodeletEntry` struct to define properties of each codelet, including size, algorithm, SIMD level, and priority.\n- Implemented `CodeletRegistry` for registering and looking up codelets based on CPU feature\n[…]\nkup, and feature compatibility.\n- Ensured thread safety in the registry operations using mutexes.\n- Removed previous planner references and integrated the registry directly into the transform package.",
"is_bot": false,
"headline": "feat: Implement FFT Codelet Registry",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T20:30:02Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "d7043e0887e55db59665594c3f727b4a4c1dfe18",
"body": "- Replaced individual dimension plans (width, height, depth) in Plan3D with a single N-dimensional plan (PlanND).\n- Simplified the creation of Plan3D by utilizing NewPlanNDWithOptions for initialization.\n- Updated transform methods (Forward, Inverse, ForwardInPlace, InverseInPlace) to delegate to th\n[…]\ned helper function.\n- Added unit tests for common functionalities and edge cases across various plan types.\n- Improved memory allocation strategies by integrating a dedicated memory management module.",
"is_bot": false,
"headline": "feat: Refactor 3D FFT Plan to Use N-Dimensional Engine",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T19:18:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "b1ec8954ab440904fd29c53261194ce29eb2ebf8",
"body": "- Updated precision tests to utilize NewPlan[complex64] for FFT plans.\n- Modified stress tests to create plans with complex64 type.\n- Introduced a new PlanInfo interface for better introspection and lifecycle management of FFT plans.\n- Added support for wisdom caching with a new Wisdom struct, allow\n[…]\n to control FFT kernel selection, enhancing the planning process.\n- Added comprehensive tests for new PlanReal2D and PlanReal3D implementations, ensuring correctness against reference implementations.",
"is_bot": false,
"headline": "feat: Refactor FFT plans to use generics for complex number types",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T18:40:53Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "4055b14a551ad9cefbd849f0de47552f50e28deb",
"body": "- Removed wrapping functions for codelet registration in `codelet_registry.go`, simplifying the registration process.\n- Updated `registerSSE2DITCodelets64` and `registerSSE2DITCodelets128` to directly register codelet functions without wrapping.\n- Modified the codelet execution paths in `recursive.g\n[…]\neneric DIT if a codelet fails.\n- Added regression tests in `recursive_fallback_test.go` to ensure that codelets that bail without doing work correctly trigger a fallback to the generic implementation.",
"is_bot": false,
"headline": "fix: Refactor codelet registration and execution to handle bailouts",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T17:55:42Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "341b8dd076b967c1fb92fbbdd5ed6319049e7b7f",
"body": "…rerequisites",
"is_bot": false,
"headline": "docs: update architecture consolidation section and clarify tagging p…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T17:24:53Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d156becf1a6ab2314e58abe5960b91e6d5c5d0b7",
"body": "perf: FMA-fuse complex128 radix-4 codelet twiddle multiplies",
"is_bot": false,
"headline": "Merge pull request #32 from CWBudde/claude/plan9-asm-algorithms-gqn5zg",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T17:24:21Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "6ee7c21ad2d2aa2856787235bf27ce5f2decde97",
"body": "Wisdom entries bind codelets via LookupBySignature, which does not\nfilter by CPU features. An entry created or imported for an AVX2\ncodelet could therefore bypass the FMA-aware cpuSupports fallback and\nexecute FMA opcodes on a CPU with FMA masked off. Re-check cpuSupports\nbefore binding; incompatible entries fall back to heuristic selection.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: reject CPU-incompatible codelets in wisdom resolution",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-23T16:54:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f3beb2798a8ad51e0f8c8d0dcec432a0f1ebe761",
"body": "Convert the per-twiddle complex-multiply cores of the complex128\nradix-4 codelets (avx2_f64_size256_radix4.s,\navx2_f64_size32_radix4_then2.s) from the unfused\nVMULPD/VXORPD-negate/VADDPD chain to the in-tree\nVMOVDDUP/VPERMILPD/VFMADDSUB231PD idiom already used by\navx2_f64_size64_radix4.s. 24 multipl\n[…]\npresent on every real AVX2 CPU, so\nproduction/CI behavior is unchanged.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01KLZfeVjfsUboHG13ppL7Xt",
"is_bot": false,
"headline": "perf: FMA-fuse complex128 radix-4 codelet twiddle multiplies",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-23T10:03:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a2ac42bf2f09a7fd8dfd1ea8f1726f911aa80335",
"body": null,
"is_bot": false,
"headline": "Merge pull request #31 from CWBudde/claude/plan-next-steps-0armw6",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-21T18:17:44Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "306e239b9f5c040c912781cf9cbefb1268cc9639",
"body": "Convolution output lengths (len(a)+len(b)-1) are frequently prime or\notherwise awkward, and convolveT/Convolver planned at exactly that\nlength, silently paying full Rader/Bluestein cost per transform. Linear\nconvolution only needs a cyclic length >= convLen, so pad to the next\nfast size and truncate\n[…]\nder-eligible lengths plus an\ninvariant sweep over fastConvolutionLength.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_012xzi63hbucURUNbkwQgj6k",
"is_bot": false,
"headline": "perf: fast-size FFT padding for convolution and correlation",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-18T20:34:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8128540751b51681f20f1915ea1ad77429b141bf",
"body": null,
"is_bot": false,
"headline": "Merge pull request #30 from CWBudde/claude/next-from-plan-oczc0d",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-18T20:19:04Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "744428dcc4868a4de2e35b448b87453b8307b795",
"body": "Replace the O(n^2) swap-pair index table in internal/math/transpose.go\n(computed and cached forever per matrix size) with math.TransposeSquare,\na tiled in-place transpose with no index table at all. Tile edge 8 was\npicked by benchmark sweep: small tiles keep the strided column stream\nwithin the TLB/\n[…]\nnels and\nthe transpose (including the block-size sweep used for tuning).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01AXsmihfmGy8ow7NrpvHEYT",
"is_bot": false,
"headline": "perf: cache-blocked in-place transpose for six-step/eight-step and 2D",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-18T20:08:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0c43eb8693c565465a6c69fd06b670e297d71f66",
"body": null,
"is_bot": false,
"headline": "Merge pull request #29 from CWBudde/claude/next-from-plan-rmfhvt",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-18T19:47:47Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2dea60060d7747f7679871afaa26249544aadf24",
"body": "The gate compared 2*NextPowerOfTwo(2n-1) >= 5*n, whose intermediates\nexceed max int32 for odd n near maxExactLength on 32-bit platforms and\ncould flip the routing decision. For odd n the condition is exactly\npad-2n >= (n+1)/2, which keeps every intermediate within\n2^(UintSize-2); verified equivalent\n[…]\noth n up to 2e7 in 64-bit arithmetic.\n\nAddresses PR #29 review feedback.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Gh4m6wLRzaYkqSVyFrWaLp",
"is_bot": false,
"headline": "fix: avoid 32-bit overflow in the odd-length mixed-radix win gate",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-18T19:47:01Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0e43f7a40c131544ca5d4a40543e8f709cfedeef",
"body": "Extend exact (non-Bluestein) coverage from 2^a*3^b*5^c to lengths with\nfactors 7 and 11 (e.g. 448, 704, 1344), gated on measured wins:\n\n- Full-matrix DFT butterflies with precomputed forward/conjugate\n coefficient tables in internal/kernels/radix{7,11}.go, both precisions.\n- The mixed-radix schedul\n[…]\nh p-1,\nrevisit gated-out shapes if the odd butterflies get SIMD kernels.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01Gh4m6wLRzaYkqSVyFrWaLp",
"is_bot": false,
"headline": "feat: radix-7/11 butterflies for the mixed-radix engine",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-18T17:53:13Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a71f34d02978ed3440f2c1b2020e8a94f3d17420",
"body": null,
"is_bot": false,
"headline": "Merge pull request #28 from CWBudde/claude/plan-next-steps-hgf6wr",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-18T17:25:51Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "984a213b4c4f14c7c3fadbe7b873e8e6facece1e",
"body": "NewPlanRealT and the NewPlanReal* constructors now accept any n >= 2.\nEven lengths keep the packed half-size method unchanged; odd lengths\nrun an internal full-size complex FFT: the forward transform widens the\nreal input and keeps the n/2+1 non-redundant bins, the inverse rebuilds\nthe full Hermitia\n[…]\ntem;\nthe real-input Bluestein evaluation remains as follow-up (PLAN.md).\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_017xjSxeaKsCFWdjZUP8MSBE",
"is_bot": false,
"headline": "feat: support odd lengths in real FFT plans via complex fallback",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T21:12:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "30a9dc1deb93430d01d9303e254205f3f123943e",
"body": null,
"is_bot": false,
"headline": "Merge pull request #27 from CWBudde/claude/plan-next-steps-pok2k0",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-17T21:02:20Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "3630d13ca0d7031196f2875ee0afe0e1e5c209f9",
"body": "Correct the codeletSchedulable comment (an unexecutable radix panics,\nit does not silently return) and guard the relative-error checks in the\nradix-8 tests against an all-zero reference spectrum.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YYemQC4eBhmrvCF4gjchhS",
"is_bot": false,
"headline": "docs: address PR #27 review comments",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T20:47:54Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "245019ea2ff520db37375f401b17eb95371a9241",
"body": "Generalize the size-512 codelet's radix-8 butterfly into the mixed-radix\nengine's executable set. New internal/kernels/radix8.go implements the\n8-point DFT combine with hardcoded rotation constants for both\nprecisions; the scheduler emits a radix-8 stage when the remaining\npower-of-two part 2^e has \n[…]\ntests and\nforward/round-trip/in-place checks against reference.NaiveDFT.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01YYemQC4eBhmrvCF4gjchhS",
"is_bot": false,
"headline": "perf: radix-8 stage for the mixed-radix scheduler",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T20:20:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b9537019a3a7dc167366f45bc2aaee388ad5b75c",
"body": "…-vp2lsi",
"is_bot": false,
"headline": "Merge pull request #26 from CWBudde/claude/cpu-performance-algorithms…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-17T19:40:30Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "60db9f94624eb92b4455d8439981ee05b7f34159",
"body": "Fixes the two CI failures on PR #26:\n\n1. linux/386: TestSplitRadix_ZeroAllocAndString allocated per call. The\n 386 SSE/SSE2/SSE3 tiers (and amd64's bottom SSE2 tier) ran before the\n forced strategy was consulted, so a forced KernelSplitRadix (or\n Stockham/SixStep) silently executed the generic\n[…]\n512/SSE3/NEON tiers.\n\n2. test-format: PLAN.md reformatted with prettier.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01RtqK8H5pezgb6KdHHXappq",
"is_bot": false,
"headline": "fix: honor forced strategies in SSE dispatch tiers; format PLAN.md",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T19:30:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "598e0518c3470c55310e0bdde782263b53f1085a",
"body": "Addresses PR #26 review: 67280421310721 and 2147483649 overflow int on\n32-bit targets (386, arm), breaking test compilation. The 64-bit-only\ncases are now typed uint64, converted through variables behind a\nbits.UintSize guard. Also reword the millerRabinBases comment to match\nthe int-typed IsPrime API.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01RtqK8H5pezgb6KdHHXappq",
"is_bot": false,
"headline": "test: keep prime test constants portable to 32-bit int",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T19:16:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3a4a317f2a4f90d838d83ddde97839f280936f8d",
"body": "Adds the classical lowest-operation-count power-of-two decomposition:\none n/2 transform over the even samples plus two n/4 transforms over\nx[4m+1] and x[4m+3], combined in place with natural-order output (no\nbit-reversal pass). Implemented as per-precision recursions with\nunrolled 1/2/4 leaves in in\n[…]\n1-4096, plus round-trip, in-place, rejection, and\nzero-allocation tests.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01RtqK8H5pezgb6KdHHXappq",
"is_bot": false,
"headline": "feat: split-radix (2/4) FFT kernel with KernelSplitRadix strategy",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T17:17:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f9e8e893eeb8fad9cc8cfe85e4548fb462e2d051",
"body": "Two mixed-radix engine fixes, then a widened Rader eligibility gate\nthat the faster engine justifies:\n\n1. The scheduler stripped factors in 5/4/3/2 order, so any size with a\n factor of 3 fragmented its power-of-two part into generic radix-4\n stages (768 -> [4,4,4,4,3]) and never reached the tune\n[…]\nhs remain zero-allocation and validated\nagainst the naive reference DFT.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01RtqK8H5pezgb6KdHHXappq",
"is_bot": false,
"headline": "perf: codelet-leaf mixed-radix schedule; fix missing VZEROUPPER",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T08:25:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7d7501909886fffac6487facb84136c24cea3b24",
"body": "Primes previously always paid Bluestein's cost: a cyclic convolution\npadded to a power of two >= 2p-1. Rader's algorithm maps a prime-p DFT\nthrough a primitive root mod p onto an exact, unpadded cyclic\nconvolution of length p-1, which the existing power-of-two DIT and\nmixed-radix engines can run dir\n[…]\nmality, modular arithmetic, and\nprimitive-root helpers to internal/math.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01RtqK8H5pezgb6KdHHXappq",
"is_bot": false,
"headline": "perf: add Rader's algorithm for prime-size FFTs",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-17T06:42:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d777e13f1018a2fdd70d8ebf57068e76ed097b0a",
"body": "…3xyfse",
"is_bot": false,
"headline": "Merge pull request #25 from CWBudde/claude/plan9-optimized-algorithm-…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-16T22:19:34Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "ddf879234dee248492461d5990ab317b7d1726e7",
"body": "Address PR #25 review comments:\n\n- FMA is a separate CPUID feature bit from AVX2, so the new AVX2\n recombination/repack kernels (which use VFMADDSUB) could SIGILL on\n hardware or emulators exposing AVX2 without FMA. Add\n cpu.Features.HasFMA (via x/sys/cpu, amd64 + 386 detection) and\n require Has\n[…]\needs len >= half, and DC/Nyquist bins are the\n caller's responsibility.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016vrg9QAxd41AYJeHrCSPiN",
"is_bot": false,
"headline": "fix(cpu): gate FMA-using AVX2 kernels on a new HasFMA feature flag",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-16T22:16:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a139ead6f6cc4e6873bba9fc3cff1c7793dbf656",
"body": "Follow-ups to the forward-recombination SIMD work:\n\n- Add an SSE3 tier below AVX2 for the forward recombination: complex64\n processes 2 bins per XMM iteration (~4.2x the scalar loop), complex128\n 1 bin per iteration (~1.3x). SSE2-only hardware keeps the generic loop\n since the idiom needs MOVSLDU\n[…]\n The NEON variant remains blocked on the\nnative-ARM64 benchmarking item.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016vrg9QAxd41AYJeHrCSPiN",
"is_bot": false,
"headline": "perf(real): SSE3 recombination tier; AVX2 complex128 inverse repack",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-16T08:41:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6c1fa58d0b2607d309642962e164a6a67195a628",
"body": "…5ta1",
"is_bot": false,
"headline": "Merge pull request #24 from CWBudde/claude/pr-23-comment-relations-9p…",
"author_name": "Christian Budde",
"author_login": "MeKo-Christian",
"committed_at": "2026-07-16T08:31:09Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "d1acaf447c2aa417be6664699d4b411d6243efe3",
"body": "The per-bin recombination X[k] = A[k] - U[k]*(A[k] - conj(A[half-k]))\nran as a scalar Go loop on every real transform of every size. Move it\ninto internal/fft as RecombineForwardComplex64/128 and add AVX2 kernels\nprocessing 4 complex64 / 2 complex128 bins per iteration: the mirrored\nconjugate term i\n[…]\n NEON, SSE2 tier, and the complex128 inverse\npre-pass remain follow-ups.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_016vrg9QAxd41AYJeHrCSPiN",
"is_bot": false,
"headline": "perf(real): SIMD the forward real-FFT recombination loop",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-16T08:31:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "621485c071de336d2ae9f8a83cd05e03ddefdcb4",
"body": "The ForceGeneric benchmarks claimed to measure the pure-Go fallback\nkernel dispatch path, but generic (SIMDNone) codelets are registered\nfor every power-of-two size from 4 through 16384, so even with\nForceGeneric the auto-strategy plans at 512/1024 bound a zero-dispatch\ngeneric codelet (e.g. dit1024\n[…]\n onto the codelet path.\n\nAddresses the post-merge review comment on #23.\n\nCo-Authored-By: Claude Fable 5 <noreply@anthropic.com>\nClaude-Session: https://claude.ai/code/session_01VcqQL63mpiKD9aAb8Shhp7",
"is_bot": false,
"headline": "fix(bench): bypass codelet binding in ForceGeneric benchmarks",
"author_name": "Claude",
"author_login": "claude",
"committed_at": "2026-07-16T08:20:56Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 9,
"commits_last_year": 614,
"latest_release_at": "2026-01-15T06:42:22Z",
"latest_release_tag": "v0.6.1",
"releases_from_tags": false,
"days_since_last_push": 0,
"active_weeks_last_year": 11,
"days_since_latest_release": 194,
"mean_days_between_releases": 2.3
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": true,
"health_percentage": 71,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"ecosystem": {
"packages": [
{
"name": "github.com/cwbudde/algo-fft",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/cwbudde/algo-fft",
"is_deprecated": false,
"latest_version": "v0.7.1",
"repository_url": "https://github.com/cwbudde/algo-fft",
"versions_count": 30,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": null,
"monthly_downloads": null,
"first_published_at": null,
"latest_published_at": "2026-07-25T15:03:19Z",
"latest_version_yanked": null,
"days_since_latest_publish": 2
}
]
},
"popularity": {
"forks": 0,
"stars": 1,
"watchers": 0,
"fork_history": {
"days": [],
"complete": true,
"collected": 0,
"total_forks": 0
},
"star_history": null,
"open_issues_and_prs": 0
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": false,
"has_mcp_signal": false,
"bootstrap_files": [
"justfile"
],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"cmd/bench_compare/go.mod",
"go.mod"
],
"largest_source_bytes": 58818,
"source_files_sampled": 539,
"oversized_source_files": 0,
"agent_instruction_files": [
".github/copilot-instructions.md",
"AGENTS.md",
"CLAUDE.md",
"GEMINI.md"
],
"agent_instruction_max_bytes": 19156
},
"dependencies": {
"manifests": [
"go.mod"
],
"advisories": {
"error": null,
"scope": null,
"source": null,
"findings": [],
"collected": false,
"malicious": [],
"truncated": false,
"by_severity": {},
"advisory_count": 0,
"affected_count": 0,
"assessed_count": 0,
"malicious_count": 0,
"assessed_package": null,
"unassessed_count": 0,
"direct_affected_count": 0
},
"ecosystems": [
"go"
],
"dependencies": [
{
"name": "golang.org/x/sys",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.39.0"
}
],
"all_dependencies": {
"error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
"source": null,
"packages": [],
"collected": false,
"truncated": false,
"total_count": null,
"direct_count": null,
"indirect_count": null
}
},
"maintainership": {
"issues": {
"open_prs": 0,
"merged_prs": 30,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 3
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "CWBudde",
"commits": 420,
"avatar_url": "https://avatars.githubusercontent.com/u/4097562?v=4"
},
{
"type": "User",
"login": "MeKo-Christian",
"commits": 138,
"avatar_url": "https://avatars.githubusercontent.com/u/144226859?v=4"
},
{
"type": "User",
"login": "claude",
"commits": 60,
"avatar_url": "https://avatars.githubusercontent.com/u/81847?v=4"
}
],
"contributors_sampled": 3,
"top_contributor_share": 0.68
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"test-arch.yaml",
"test-bench.yaml",
"test-format.yaml",
"test-fuzz.yaml",
"test-lint.yaml",
"test-unit.yaml",
"test.yaml",
"wasm-demo-pages.yaml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"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": 3,
"reason": "branch protection is not maximal on development and all release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "1 out of 1 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/23 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 6,
"reason": "project has 2 contributing companies or organizations -- score normalized to 6",
"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 0 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": 9,
"reason": "1 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "03552181517804e1eee786585a3adcc670ceb3f7",
"ran_at": "2026-07-28T11:13:46Z",
"aggregate_score": 5.7,
"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-28T10:16:46Z",
"oldest_open_prs": [],
"last_merged_pr_at": "2026-07-26T17:47:19Z",
"ci_last_conclusion": "FAILURE",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/CWBudde/algo-fft",
"host": "github.com",
"name": "algo-fft",
"owner": "CWBudde"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"security": 57,
"vitality": 74,
"community": 36,
"governance": 60,
"engineering": 71
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 74,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 72,
"inputs": {
"commits_last_year": 614,
"human_commit_share": 1,
"days_since_last_push": 0,
"active_weeks_last_year": 11
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 0 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 0
}
}
],
"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": "614 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 614
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "good",
"name": "Release discipline",
"note": "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": 78,
"inputs": {
"releases_count": 9,
"latest_release_tag": "v0.6.1",
"releases_from_tags": false,
"days_since_latest_release": 194,
"mean_days_between_releases": 2.3
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "9 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 9
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 194 days ago",
"points": 16.2,
"status": "partial",
"details": [
{
"code": "release_recency",
"params": {
"days": 194
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~2.3 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 2.3
}
}
],
"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": 0,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "last human commit 0 days ago",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_maintained",
"params": {
"days": 0
}
}
],
"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": 36,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 1,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "1 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 1
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "0 forks",
"points": 0,
"status": "missed",
"details": [
{
"code": "forks",
"params": {
"count": 0
}
}
],
"max_points": 25
},
{
"key": "watchers",
"name": "Watchers",
"detail": "0 watchers",
"points": 0,
"status": "missed",
"details": [
{
"code": "watchers",
"params": {
"count": 0
}
}
],
"max_points": 15
}
]
},
{
"key": "community_health",
"band": "good",
"name": "Community health",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": true,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 18,
"status": "met",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 6.3,
"status": "met",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 60,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 26,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 3,
"top_contributor_share": 0.68
},
"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 68% of commits",
"points": 7.2,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 68
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "3 contributors",
"points": 4.1,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 3
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 6,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "moderate",
"name": "Issue & PR responsiveness",
"note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"issue_resolution"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 65,
"inputs": {
"merged_prs": 30,
"open_issues": 0,
"closed_issues": 0,
"issue_closed_ratio": null,
"closed_unmerged_prs": 3
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "no issues or no data",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_issues_or_data",
"params": {}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "30/33 decided PRs merged",
"points": 34.8,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 30,
"decided": 33
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/23 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": 63,
"inputs": {
"followers": 141,
"owner_type": "User",
"is_verified": null,
"owner_login": "CWBudde",
"public_repos": 179,
"account_age_days": 4858
},
"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": "141 followers of CWBudde",
"points": 15.5,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 141,
"login": "CWBudde"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "179 public repos, account ~13 yr old",
"points": 25,
"status": "met",
"details": [
{
"code": "public_repos",
"params": {
"count": 179
}
},
{
"code": "account_age_years",
"params": {
"years": 13
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/cwbudde/algo-fft"
],
"ecosystems": "go",
"any_deprecated": false,
"min_days_since_publish": 2
},
"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 2 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 2
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "30 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 30
}
}
],
"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": 71,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "8 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 8
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "1 out of 1 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "moderate",
"name": "Security",
"value": 57,
"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": 57,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 16,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 2,
"scorecard_aggregate": 5.7
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection is not maximal on development and all release branches",
"points": 2.2,
"status": "partial",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "1 out of 1 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/23 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 2 contributing companies or organizations -- score normalized to 6",
"points": 1.5,
"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 0 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": "1 existing vulnerabilities detected",
"points": 6.8,
"status": "partial",
"details": [],
"max_points": 7.5
}
]
},
{
"key": "high_risk_jurisdiction_exposure",
"band": "excellent",
"name": "High-Risk Jurisdiction Exposure",
"note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
"notes": [
{
"code": "jurisdiction_evidence_limits",
"params": {}
}
],
"value": 100,
"inputs": {
"meaning": "self-published location evidence; not nationality or citizenship",
"red_flag": false,
"exposures": [],
"policy_countries": [
"Russia",
"Iran",
"North Korea"
],
"review_only_matches": 0,
"assessed_self_published_locations": 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": "moderate",
"name": "AI Readiness",
"value": 64,
"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": 0.99,
"agent_instruction_files": [
".github/copilot-instructions.md",
"AGENTS.md",
"CLAUDE.md",
"GEMINI.md"
],
"agent_instruction_max_bytes": 19156
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": ".github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.md",
"points": 45,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".github/copilot-instructions.md, AGENTS.md, CLAUDE.md, GEMINI.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": "99 of 100 human commits state their intent (structured subject or explanatory body)",
"points": 40,
"status": "met",
"details": [
{
"code": "legible_history",
"params": {
"legible": 99,
"sampled": 100
}
}
],
"max_points": 40
}
]
},
{
"key": "ai_verify_loop",
"band": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 60,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": false,
"bootstrap_files": [
"justfile"
],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [],
"agent_commit_share": 0.29,
"toolchain_manifests": [
"cmd/bench_compare/go.mod",
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "justfile",
"points": 18,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "justfile"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"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": "29 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 29,
"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": "moderate",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 55,
"inputs": {
"primary_language": "Assembly",
"largest_source_bytes": 58818,
"source_files_sampled": 539,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Assembly without a type-check config",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_typecheck_config_language",
"params": {
"language": "Assembly"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/539 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 539,
"oversized": 0
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-28T11:13:56.958452Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/CWBudde/algo-fft.svg",
"full_name": "CWBudde/algo-fft",
"license_state": "standard",
"license_spdx": "MIT"
}