Raw JSON report machine-readable
{
"data": {
"repo": {
"topics": [],
"is_fork": false,
"size_kb": 6131,
"has_wiki": true,
"homepage": null,
"languages": {
"Go": 1089858,
"Shell": 4953,
"Python": 163624,
"Assembly": 30881
},
"pushed_at": "2026-07-23T03:32:19Z",
"created_at": "2026-05-31T04:19:55Z",
"owner_type": "User",
"updated_at": "2026-07-23T02:34:41Z",
"description": "Portable Go AI building blocks — pure-Go, no-cgo packages (topk, ann, bm25, embed, encoder, chunk) extracted from townsendmerino/ken's code-search pipeline. Importable by any Go project.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "MIT",
"default_branch": "main",
"license_spdx_raw": "MIT",
"primary_language": "Go",
"significant_languages": [
"Go",
"Python"
]
},
"owner": {
"blog": null,
"name": "Francis Townsend-Merino",
"type": "User",
"login": "townsendmerino",
"company": null,
"location": null,
"followers": 5,
"avatar_url": "https://avatars.githubusercontent.com/u/620372?v=4",
"created_at": "2011-02-16T02:25:11Z",
"is_verified": null,
"public_repos": 8,
"account_age_days": 5638
},
"license": {
"state": "standard",
"spdx_id": "MIT",
"raw_spdx": "MIT",
"file_present": true,
"scorecard_found": null,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "v1.11.0",
"kind": "minor",
"published_at": "2026-07-23T03:32:45Z"
},
{
"tag": "v1.10.1",
"kind": "patch",
"published_at": "2026-07-20T15:14:39Z"
},
{
"tag": "v1.10.0",
"kind": "minor",
"published_at": "2026-07-18T15:56:39Z"
},
{
"tag": "v1.9.0",
"kind": "minor",
"published_at": "2026-06-17T22:51:54Z"
},
{
"tag": "v1.8.1",
"kind": "patch",
"published_at": "2026-06-15T04:02:39Z"
},
{
"tag": "v1.7.3",
"kind": "patch",
"published_at": "2026-06-13T15:07:24Z"
},
{
"tag": "v1.7.2",
"kind": "patch",
"published_at": "2026-06-13T01:33:11Z"
},
{
"tag": "v1.7.1",
"kind": "patch",
"published_at": "2026-06-12T22:51:06Z"
},
{
"tag": "v1.7.0",
"kind": "minor",
"published_at": "2026-06-12T22:12:08Z"
},
{
"tag": "v1.6.0",
"kind": "minor",
"published_at": "2026-06-12T18:18:07Z"
},
{
"tag": "v1.5.0",
"kind": "minor",
"published_at": "2026-06-11T21:10:21Z"
},
{
"tag": "v1.4.0",
"kind": "minor",
"published_at": "2026-06-11T12:41:10Z"
},
{
"tag": "v1.3.0",
"kind": "minor",
"published_at": "2026-06-10T19:32:48Z"
},
{
"tag": "v1.2.1",
"kind": "patch",
"published_at": "2026-06-10T15:51:28Z"
},
{
"tag": "v1.2.0",
"kind": "minor",
"published_at": "2026-06-10T15:37:57Z"
},
{
"tag": "chunk/treesitter/v1.0.0",
"kind": "other",
"published_at": "2026-06-06T22:34:05Z"
},
{
"tag": "v1.0.0",
"kind": "major",
"published_at": "2026-06-06T22:33:50Z"
},
{
"tag": "v0.2.0",
"kind": "minor",
"published_at": "2026-06-03T17:25:04Z"
}
],
"recent_commits": [
{
"oid": "cfda9684b68353a790ff4d6b1dfb9bff3dfce445",
"body": "…Windows CI)\n\nTestEmbedderCoverage_fresh compared the committed docs/embedder-coverage.md\nbyte-for-byte against freshly generated markdown (always LF). With no\n.gitattributes, a Windows checkout stores the doc as CRLF, and bytes.TrimSpace\ndoes not touch interior newlines — so the gate reported the t\n[…]\n fighting the smudge filter.\n\nVerified by converting the doc to CRLF locally and confirming the gate still\npasses, then restoring LF (no diff).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(encoder): make the coverage freshness gate line-ending agnostic (…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-23T02:34:34Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b59e58c92e6dca341f43ff272c012b8df905dedb",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: set v1.11.0 CHANGELOG date to the release day",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-23T02:27:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7fc33df9a5e399a5052ae3547f25a78e7499e37c",
"body": "… kit\n\nCodifies the rule the review2 §4 naming pass applied: a name is sized to its\nscope, consistent with its neighbours, and unambiguous in context — not long by\ndefault. Explains why M/N/K/q/k/v/ggml block fields are correct as-is in the\nkernels (they mirror the reference notation one-to-one), wh\n[…]\nd cases), and the house vocabulary a reviewer should leave\nalone. So the next reviewer flags the right things and stops \"make it longer\"\nchurn.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add why-short-variable-names — the naming philosophy behind the…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-23T02:24:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3769b9973c314e76ac284bb943135876834a3890",
"body": "…nsumer\n\nlinalg.WeightMat was written to consolidate three open-coded wrappers that each\nheld an f32/int8/int4 weight plus scales plus a precision-dispatched MatmulBT.\nTwo had landed (aikit encoder.LayerWeightsQ8; goinfer decoder.weightMat, whose\ntype is now gone). vision.qmat was the last, and beca\n[…]\n what §2.7's note anticipated.\n\nCommits docs/task-native-gpu.md, until now untracked, since Phase 0 (\"finish\nthe seam\") is what this completes.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "vision,linalg: finish the WeightMat unification — migrate the last co…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-22T05:07:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7d5378a150ff0b3c8d24dbc326d69916ef13d49a",
"body": "The embedder-coverage release: pure-Go SentencePiece/Unigram tokenizer, MoE FFN,\ndeclared pooling + explicit BERT loader variants, six newly certified embedders\n(certified set 2 -> 8), the generated coverage table, and encoder.MatryoshkaFloor.\n\nMinor, not patch: new exported API and new capabilities\n[…]\n a caller's perspective — apidiff confirms no incompatible\nchange in any Hard-tier package vs v1.10.1.\n\nPrep only; the tag is not created here.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add CHANGELOG section for v1.11.0",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-22T00:46:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d471b13c4567bbdc332ba3fff39c05a03864517c",
"body": "… bad truncation\n\ndocs/embedder-coverage.md's Truncatable column already says a serve layer \"must\nnot honor a `dimensions` request blindly — check this column\", but the column was\ndocumentation plus a test-only registry (covRow.MRLMin), so nothing downstream\ncould actually check it.\n\nMatryoshkaFloor\n[…]\nrresponds to a certified row (no unmeasured claims), and\nthat bare names stay unambiguous. Break-it-first: changing a floor 64→32 turns it\nred.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(encoder): export the Matryoshka floor so serve layers can refuse…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T16:43:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "44b679f0ba4e93a22cc3b6c2faff9642273631dc",
"body": "…e the caveats\n\nThe task doc's last open risk was advisory: \"Matryoshka dimensions semantics\ndiffer per model — honor each model's documented supported dims rather than\ntruncating blindly, or you'll return degraded vectors that look fine.\" Advice\ndoesn't stop anyone, so make it data.\n\nembedder-cover\n[…]\n.\n\nRemaining risk is noted where it actually lives — goinfer's resolveDimensions\ntruncates any model on request and should consult this column.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs,encoder: turn the Matryoshka caveat into a measured column; clos…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T16:31:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bd5b39bc8f8d2f3358899ff6b46350c39db89df1",
"body": "Closes the task doc's last item (\"coverage claim, generated not hand-maintained\").\ndocs/embedder-coverage.md is rendered from a registry in encoder/coverage_test.go\n— 8 certified embedders with architecture, loader, pooling, tokenizer, dims, and\nthe parity test that gates each one.\n\nA table is only \n[…]\n gitignored).\n\nThe freshness gate was itself break-it-first checked: appending a line to the doc\nturns it red, and regenerating turns it green.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: generated embedder-coverage table, defended against rot three ways",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T16:20:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "70467a34c8dbbd183a26c2855957fb45b97a10c5",
"body": "…cket C)\n\nThe last embedding-coverage bucket. Reading the config first corrected the\nplan twice: v2-moe is a nomic_bert (not a plain BERT), so RoPE/post-norm came\nfree from the certified v1.5 path and its XLM-R SentencePiece tokenizer came\nfree from the Phase-2 Unigram work — but it needed THREE new\n[…]\nd of top-2, and forcing all tokens to one expert, both diverge by\n~2-7 vs a 2e-05 baseline. All previously certified paths unchanged and green.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: mixture-of-experts FFN — certify nomic-embed-text-v2-moe (Bu…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T16:10:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0820fb3e729044fd093e13f6adeeaee19da50131",
"body": "… met\n\nDecoder-as-embedder landed and was certified in goinfer (9168f82):\nQwen3-Embedding-0.6B at cosine 1.0000000 via last-token pooling over a new\ndecoder.HiddenLast seam, behind a decoderEmbedder implementing aikit's\nencoder.Encoder — no aikit change required, as the bucket predicted.\nembeddingge\n[…]\nd B\nland\"), so note C as unblocked-but-not-started, with the standing reminder to\nread nomic-embed-text-v2-moe's config.json before scoping it.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: record Phase 3 (Bucket B) done in goinfer; C's precondition now…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T15:37:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4c349859bfc0c0764aab2eb20c6f2dbf70bf35dc",
"body": "Decoder-as-embedder is goinfer-side work (the seam is aikit's encoder.Encoder\ninterface, which a decoder-backed embedder implements), so the spec and status\nlive in goinfer docs/task-decoder-as-embedder.md. Cross-reference it so the\nbucket isn't orphaned. Nothing in aikit changes for it.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: point Bucket B at the goinfer task doc that now tracks it",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T15:05:02Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "555720136f537c5f198cab2f0eb9a9163ba13c6e",
"body": "…er/pre-tokenizer\n\nbge-m3 (24-layer XLM-R, 1024-dim, CLS-pooled — the flagship multilingual\nretriever) uses two tokenizer.json shapes the initial Unigram port didn't cover,\nso generalize the parser (no change to the XLM-R/e5 path, which stays green):\n\n - Normalizer as a Sequence: walk it, supportin\n[…]\n.\n\nbge-m3 ships only pytorch_model.bin — convert to model.safetensors for LoadBERT.\nWith this, every same-repo Phase-1/2 embedder is certified.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed,encoder: certify bge-m3 full-stack; generalize Unigram normaliz…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T14:17:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2f780f2677024db112c2bd3d798574d6e8048bbd",
"body": "…full stack\n\nThe XLM-R work so far certified the tokenizer (embed) and the forward+offset\n(xlm-roberta-base, a bare LM) separately. multilingual-e5-base closes it into\none gate: a genuine sentence-transformers embedder — XLM-R (posOff=2),\nSentencePiece/Unigram tokenizer, mean-pool head — so a single\n[…]\nnd to end).\nBreak-it-first: CLS-instead-of-mean and offset-zeroing both diverge.\n\nbge-m3 reuses this exact path (larger XLM-R, dense/CLS head).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: certify multilingual-e5-base — first multilingual embedder, …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T04:33:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2b586406a853c570aeef52ad763a494e43a9821c",
"body": "…10.1)\n\nEvery finding (§2.1–2.6 incomplete-fixes, §3 F1–F5, §4 naming) was applied and\nreleased; the review artifact's job is done and its content lives in git history.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: remove CODE_REVIEW.md — 2nd-pass review items all shipped (v1.…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T04:27:56Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "da0463b007bcb3905bce2fcb14f3f527db11d55e",
"body": "aikit was WordPiece-only, which blocked end-to-end multilingual/XLM-R support\n(every XLM-R/bge-m3/multilingual-e5 tokenizer is SentencePiece/Unigram). Add a\npure-Go port of HF tokenizers' Unigram pipeline, dispatched from LoadTokenizer\nby tokenizer.json shape with no public API change:\n\n - Precompi\n[…]\nencodeTokenizer certifies text→ids end-to-end\n(the forward on those ids was already certified). bge-m3 / multilingual-e5\nreuse this exact path.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed: pure-Go SentencePiece/Unigram tokenizer; certify XLM-R end-to-end",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T04:25:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b191dab8bd07bafd5e38f4415125d2ae804c1b8d",
"body": "…okenizer\n\nXLM-R numbers learned positions from padding_idx+1 (posOff=2), where BERT\nstarts at 0 — a silent-wrong if missed. Certify that path against a real\nreference (FacebookAI/xlm-roberta-base): forward on golden HF input_ids,\nhidden-state maxΔ 1.7e-05 over 6 cases (incl. non-Latin), with break-\n[…]\npts/pin_xlmr.py: HF AutoModel golden (input_ids + last_hidden_state)\n- docs/task-embedding-coverage.md: correct tokenizer claim; status section\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: certify XLM-R position-id offset forward-only; best-effort t…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-21T03:38:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2d65885375ed0547a38105365d61bc38e46caa6e",
"body": "… embedder (embedding-coverage §Phase1)\n\nSecond Phase-1 representative certified, and the one that exercises the Nomic\nloader's declared-pooling change (dbec090) on a real model. nomic-embed-text-v1.5\nis the same nomic-bert architecture as CodeRankEmbed (RoPE, SwiGLU) but pools\nMEAN instead of CLS —\n[…]\ntural shapes (BERT-cls, BERT-mean, nomic-rope-mean) are now gated\nagainst real references. go test ./encoder/ + golangci(0) green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: certify nomic-embed-text — the mean-pooled nomic-bert (RoPE)…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T23:41:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "27f3bb8ae0ddd1eb4aa5f12a5dca2f9b51bdf2a0",
"body": "…real reference (embedding-coverage §Phase1)\n\nFirst Phase-1 representative taken from \"loader-ready\" to CERTIFIED. bge-small\n(BAAI/bge-small-en-v1.5) is the same BERT architecture as all-MiniLM (learned-\nabsolute positions, GELU FFN, WordPiece) but pools CLS instead of mean — so it\nexercises the dec\n[…]\nsafe). go test ./encoder/ +\ngolangci(0) green. This is the first model the task's gate discipline certifies\nas actually supported.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: certify bge-small — the CLS-pooled BERT embedder, against a …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T16:58:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4228bafb6cce67cf76a28715f4ea4907ad754c93",
"body": "…nal token_type (embedding-coverage §Phase1)\n\nPhase 1 item 1 (\"make the implicit explicit\"): the BERT loader baked in three\nassumptions. Two are now config-driven declarations, defaulting to BERT so\nall-MiniLM stays bit-identical (parity green):\n\n- **Position-id offset.** RoBERTa/XLM-R number learne\n[…]\n guard) and TestBERT_loaderVariantsFromFixture. The\nactual XLM-R / no-token-type models stay Phase-2, gated on their own fixtures.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: make BERT loader variants explicit — position offset + optio…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T16:10:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dbec090ab216584a8338e0cc43595e8b08a29c52",
"body": "…e §Phase1)\n\nCompletes item 2 across both loader families: the Nomic/CodeRankEmbed path\n(LoadWeightsFromFS) also read no pooling — it left Config.pooling the zero value\n(CLS). nomic-embed-text pools MEAN, so it would have silently mispooled.\n\nAdded an fs.FS reader (poolingFromFS, sharing poolingFrom\n[…]\nonfig.json is present and\ndeclares mean — which CodeRankEmbed's isn't. build/vet/golangci(0) + the full\nlocal encoder suite green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: declared pooling for the Nomic loader too (embedding-coverag…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T15:50:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b402318dd36b09f3e6eaa0a573c80d24893094d5",
"body": "…overage §Phase1)\n\nFirst step of the embedding-model coverage work (docs/task-embedding-coverage.md\nPhase 1, item 2): pooling was implicit — BERT.Embed hardcoded mean, so a CLS-\npooled embedder (BGE, and most rerankers) would silently pool the wrong token\nand return plausible-but-wrong vectors. Now \n[…]\nlangci(0) green.\n\nThis unblocks the CLS-pooled representatives (BGE) with no forward change — only\nthe declared reduction differs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: make BERT pooling a declared per-model property (embedding-c…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T15:47:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a5e9be1f184080c40f853d199bb6b7d6f3168773",
"body": "The second-pass review fixes: the treesitter parse-timeout guard regressed by\n1.10.0's gotreesitter bump, the two matmul entries + three embed-gather sites\nthat missed the 1.10.0 M2/OOB-token fixes, the Qwen H7/H8 parity gaps, the\nsafetensors mmap-lifetime hole on the bare Tensor accessors, HNSW Load mL\nvalidation, and robustness/naming minors. Adds the [1.10.1] section + compare\nlink the release gate requires.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add CHANGELOG section for v1.10.1",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T15:12:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "da0c723b3a43d5e556e563fa1ef7f0a0b600368f",
"body": "The review found naming healthy overall (domain shorthand M/N/K, i/j/k, q/k/v,\nef/mL left alone) with friction in ~a dozen local spots. All renames below are\nunexported/local — purely syntactic, no behavior change (tests + golangci green):\n\n encoder/bert.go hd → headIdx (head INDEX; hd i\n[…]\nlc → cmtMark (lc collided with line-chunker)\n ann/hnsw_persist (*hcur).count → readLen (clashed with (*HNSW).count = #vectors)\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "all: local variable-naming clarity renames (review2 §4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T15:06:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bf9700320de184517afaab25daa81d93c6e78724",
"body": "…esitter bump (review2 F4)\n\nF4 flagged the gotreesitter 0.20→0.40 bump (shipped in v1.10.0) as carrying an\nunverifiable timeout-semantics assumption. Investigated: it silently changed.\n\n - 0.20: pool.Parse returned a non-nil ERROR on timeout.\n - 0.40: pool.Parse \"preserves tree-sitter's native par\n[…]\nte-fidelity + -race green.\n\nNote: v1.10.0 shipped with this latent regression — warrants a v1.10.1 alongside\nthe review2 §2 fixes.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chunk/treesitter: restore the parse-timeout guard broken by the gotre…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T14:59:26Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2455e274b138603375c881a236b2198b7d750d3a",
"body": "…2 §3)\n\n- F3 (encoder): BERT.hiddenStates now truncates ids/segs to maxSeq. The exported\n Embed takes raw ids with no documented limit, so len(ids) > MaxPos gathered\n posEmb out of range (Encode was safe — it truncates upstream; NomicBERT is\n immune, RoPE has no fixed table). Single choke point c\n[…]\n.go's non-existent Config.Heuristic doc\n refs fixed.\n\nTests: TestTensor_ElementsOverflow. go test ./... + golangci-lint(0) green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed,encoder,linalg,ann,mmap,chunk: fresh findings F1–F3, F5 (review…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T14:33:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "35846dbedaebfc74de08e6745113fec5358b00e3",
"body": "§2.5 — H6 (mmap use-after-unmap) covered TensorF32 and RowDequantizer but left\nthe bare per-Tensor byte accessors open: `t, _ := f.Tensor(\"w\"); t.BFloat16sToF32()`\ndrops the file reference before the decode loop runs, so the finalizer could\nmunmap mid-read → SIGSEGV. Fixed structurally rather than p\n[…]\nAdd+Query clean). embed -race + ann suites green. §2.5 is a latent\nGC-timing guard (no deterministic test), verified structurally.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed,ann: close the two structural residuals (review2 §2.5, §2.6)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T14:28:39Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6e1e03bb41fbc6962f012d49e2e2150d2b0d92cc",
"body": "…2.4)\n\nH7/H8 lifted SigLIP + both towers' validate() to the text encoder's standard,\nbut the Qwen tower trailed on four points the mandate covered.\n\n- patch_embed.proj.weight was loaded with no want-dims while SigLIP passes its\n conv shape. Now shape-checked against the 5-D Conv3d shape\n [hidden, \n[…]\n Now rejected.\n\nTests: TestQwenEncoderConfig_validate extended with headDim%4 / temporal / bad-act\ncases. go test ./vision/ green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "vision: bring the Qwen2.5-VL tower to the H7/H8 parity bar (review2 §…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T14:21:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2a6a9757820fe24eef6e9ec841054bd7273a993c",
"body": "…s (review2 §2.1–2.3)\n\nThe first review's fixes were applied to the named site but not to structurally\nidentical siblings, reintroducing the exact classes they closed. Second-pass\nreview §2.1–2.3.\n\n§2.1 — MatmulBTW8A8Batch skipped the shape guard. MatmulBTQ8/W8A8/W8A8Into got\nthe pre-fan-out checkMa\n[…]\ntended to MatmulBTAcc64 + MatmulBTW8A8Batch;\nTestClampTokenID covers the small-vocab OOB case. go test ./encoder/ ./linalg/\ngreen.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg,encoder: finish the M2/OOB-token fixes at their missed sibling…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-20T14:18:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4a4a69eec71a71db0a6fd155dd53b065770a4b53",
"body": "The security-review hardening (H1–H8 untrusted-input boundary + M-series),\nthe additive API (MatmulBTW4A8Into, Close() on the text models), arm64 CI,\nstaticcheck, the BERT/W4A8 perf wins, and the toolchain/dependency refresh.\nAdds the [1.10.0] section + compare link the release gate requires.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add CHANGELOG section for v1.10.0",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T15:52:23Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "3f950e08b0c27b36166a2762ef1880c954c4a2d9",
"body": "…ule)\n\nCatches the quarantined tree-sitter runtime up 20 minor versions. gotreesitter\nis pre-1.0 / single-maintainer (ADR-010), and the treesitter chunker's exact\nbyte boundaries are explicitly BEST-EFFORT, NOT 1.0-committed — so this can\nshift some chunk boundaries on real code. The load-bearing co\n[…]\nst/etc. smoke parses; build + -race green on the submodule.\nIsolated to the quarantined module, so the pure-Go core is unaffected.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(deps): bump gotreesitter 0.20.2→0.40.0 (chunk/treesitter submod…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T15:48:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cd65eec06acd33a2a2b5e59d09625fc746cb7c96",
"body": "Routine dependency refresh ahead of the release. x/text is the only allowed\ncore dependency (release-gate invariant); x/sys is used by the mmap leaf on\ndarwin only (invisible to the Linux core-dep graph). No API changes touched;\nbuild/vet/golangci-lint(0)/-race green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(deps): bump golang.org/x/text 0.37.0→0.40.0, x/sys 0.45.0→0.47.0",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T15:48:40Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6dc3422a39e3ff37ef29cb9919b3029bb3785c9c",
"body": "`go fix ./...` on the root + chunk/treesitter modules under the 1.26.5\ntoolchain. Mechanical, semantics-preserving modernizers:\n - clamp if-blocks → min()/max() builtins (ann/flat_i8_mmap.go, mmap/align.go)\n - `for i := 0; i < N; i++` → `for i := range N` (chunk/treesitter, vision)\n - `for _, x :\n[…]\nhe_test.go — avoids the intermediate slice)\n\nNo behavior change. gofmt/vet/golangci-lint(0)/go test on the touched packages\ngreen.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: go fix — min/max builtins, range-over-int, strings.SplitSeq",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T15:40:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c1b0633bd95ffe07503d1326ee0fd200c670f67b",
"body": "…erred §5)\n\nForward's CPU path open-coded the exact im2col patch extraction that GridPatches\n(gpu_export.go) already implements — the resident path calls GridPatches, the\nCPU path had a verbatim copy. Call GridPatches from both. Byte-identical\nextraction (same (c,kh,kw)/(gh,gw) loop). Documented that Forward is safe to\ncall concurrently but not alongside EnableResident/Close, which write e.resident\nunsynchronized.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "vision: dedup Forward's im2col via GridPatches + concurrency doc (def…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T15:28:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "31eefe7f189758b09e07e7a767fecea6e132fb2f",
"body": "…ew §4)\n\nMatmulBTW4A8 documented itself as the \"fast M=1 (decode) path\" yet allocated\naq := make([]int8, M*K) + aScales := make([]float32, M) every call, so an int4\ndecode loop paid ~K bytes × ~7 projections × layers per token in GC pressure —\nexactly the alloc the W8A8 path was re-engineered away w\n[…]\nloseToF32) green,\naikit_checks green. BenchmarkW4A8_allocVsInto at M=1 K2048×N2048: 2 allocs\n(2052 B) → 0 allocs, ~182µs → ~175µs.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: add MatmulBTW4A8Into zero-alloc decode variant (deferred revi…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T15:23:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a857a1f3556ddbb23cee222a5e65ebea66589a69",
"body": "The BERT forward (also SPLADE/CrossEncoder, which route through\nBERT.hiddenStates) allocated qH/kH/vHT plus an L² scores buffer per\n(layer, head) and Q/K/V/ctx/attnOut/inter/ffn per layer, all through the\nallocating matmulBT — ~432 small mallocs per single-sequence forward, the exact\nGC pressure the\n[…]\nine its own scratch).\n\nBenchmarkBERT_embed: 432→3 allocs/op (the forward now allocates only h, the\npooled vector, and its l2norm).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: BERT attention through the scratch arena (deferred review §4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T15:17:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b2d8268f9fbc757c6034ba026e40542602c3ee4e",
"body": "- linalg/dot.go: dotF32's panic said \"encoder:\" (every other panic says\n \"linalg:\") and a comment named a private repo (\"ken's matmul shapes\").\n Corrected the prefix and scrubbed the name.\n- linalg/doc.go: \"the parallel and blocked paths are bit-identical to the serial\n scalar reference … exact e\n[…]\n/CrossEncoder/\n SPLADE) so the following method's godoc isn't absorbed (ST1020).\n\ngofmt/vet/golangci-lint(0)/go test ./... green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "polish: doc scrubs, contract corrections, small guards (code review §5)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:58:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "629fda1127e7e92e90d080c3cd37c1d56d868a7f",
"body": "…oc (§4)\n\n- Exported Close() on Model, BERT, CrossEncoder, SPLADE. The f32 text models\n retained their mmapped safetensors for life — the only deterministic unmap was\n the unexported st.Close() the tests reached into, so a long-running server\n swapping models kept ~547 MB mappings alive until a G\n[…]\n]) rotates into itself, so\n no scratch is needed; bit-identical (a+(-b)·s == a−b·s in IEEE).\n\ngo test ./encoder/ ./vision/ green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder,vision: lifecycle Close, longest_first truncation, rotary all…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:47:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "20548bb6a9733d9e4572ea5b35f4362265f022b4",
"body": "Defensive fixes so a mismatched/corrupt checkpoint errors or degrades cleanly\ninstead of panicking or silently miscomputing.\n\n- bert maxSeq: b.maxSeq took sentence_bert_config's max_seq_length verbatim with\n no min(…, MaxPos) clamp, so a config exceeding max_position_embeddings indexed\n posEmb OOB\n[…]\nps` entries and winIdx[g] indexed OOB.\n Validate each grid entry (and reject negative dims).\n\ngo test ./encoder/ ./vision/ green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder,vision: checkpoint-robustness minors (code review §4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:44:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "32a057538b7d72b71cb4435edb7aed75ac38b5c9",
"body": "- ann/hnsw NewHNSW: Config{M:1} passed the `<= 0` default guard, then set\n mL = 1/ln(1) = +Inf, so randomLevel's int(-ln(U)·mL) overflowed\n (MinInt64/MaxInt64) and make([][]int32, level+1) panicked on the FIRST Add —\n with a message giving no hint the cause was M=1. Clamp M to >= 2 (a\n 1-neighbo\n[…]\numped-over line starts record\n the current depth.\n\nTests: TestHNSW_M1DoesNotPanic; go test ./ann/ ./chunk/... + regex fuzz green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ann,chunk: fix HNSW M=1 panic + regex line-continuation depth bug (§4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:38:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "db7b99125cbbc2bfb641c6eac65e5561cc0848e2",
"body": "- topk NaN (topk.go): at capacity, `score <= min` is false for NaN, so a NaN\n item always evicted the true minimum and then poisoned every later sift (all\n comparisons against NaN false) — Result could return NaN entries while real\n high-scorers were dropped. BM25/dot scorers produce NaN from deg\n[…]\nmat it maps has an\n ≥8-byte prefix).\n\nTests: topk NaN-rejection, DotI8 length-mismatch panic; go test ./... +\naikit_checks green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg,topk,mmap: correctness + perf minors (code review §4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:32:58Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dda6edbfe467fff56ea350a8392013083aa797ef",
"body": "Small hardening in the GGUF/safetensors parsers, matching the review.\n\n- gguf maxElems: the dim-overflow bound assumed ≥0.5 B/element (2×|data|), but\n Q2_K is ~0.33 B/elem and IQ2_S ~0.32, so a legitimate Q2_K/IQ2_S tensor\n occupying >~65% of the data section was falsely rejected (tensorBytes woul\n[…]\nbyte was corrupt.\n Switched them (and parseShardIndex's two errors) to wrap ErrFormat.\n\ngo test ./embed/ + GGUF fuzz smoke green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed: parser-robustness minors (code review §4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:27:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ce016632d8c3e2517fd65698c03e38ba6506255b",
"body": "treesitter and markdown converted a span/chunk byte offset to a line number by\ncounting newlines from byte 0 every call — O(Σ offsets) ≈ O(N²/chunkSize).\nNegligible at 100 KB, ~0.5s at 1 MB, tens of seconds on a multi-MB generated\n.js/.ts file — dwarfing the 1-second parse timeout the treesitter pac\n[…]\nopment\nconfirmed an off-by-one in the section base line, since fixed). go test ./... +\n11s markdown fuzz + treesitter suite green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf: O(N) chunk line numbering (review M5)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:23:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "9fa211aebe5dff93a3a30a132212e5fd786f27f7",
"body": "The CI matrix was amd64-only (ubuntu + windows), yet arm64 is the primary\ndeployment arch — every tuning note references an M1 Pro. So on every CI run the\nNEON f32/i8/SDOT/W4A8 asm, the Dot2x8 pair path, packedFill, detectDotProd, and\n(critically) the exact-equality M-invariance / width-invariance /\n[…]\n vet, -race test, and the aikit_checks contract build, so\nthe NEON kernels and bit-identity gates run on real hardware at PR time.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: run the root module on arm64 (review M4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:23:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "41d1b2c1b749ca07eff5cd9286dad742eab37c0e",
"body": "M1 — arm64 Dot4x4/Dot8x4 godoc described a sums layout the kernel doesn't\nproduce. The exported doc claimed each row's full sum lands \"in the first lane\nof its 4-lane block (the rest zero)\" — true on generic/AVX2, FALSE on arm64,\nwhere dot_arm64.s leaves four raw partial-sum lanes. An external calle\n[…]\nenation is a superset, and a resolve-by-line consumer must tolerate the\noverlap on fallback files.\n\nDocs only; no behavior change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: correct two exported-contract docs (review M1/M3)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:23:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4892831b8ef8b840c4f38c4a19eab03a1b5552ba",
"body": "The vision loaders skipped the validation the text encoder earned, so a\nmismatched or hostile checkpoint panicked (not errored) at load or Forward.\nBrought both towers (SigLIP LoadEncoder, Qwen2.5-VL LoadQwenVisionEncoder) up to\nthe text encoder's bar.\n\nH7 — pass known dims to TensorF32.\n get()/qm(\n[…]\nnd asserts LoadEncoder returns an error rather than panicking.\ngofmt/vet/golangci-lint(0)/go test ./... and -race on vision green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "vision: shape-check tensor loads + validate config (review H7/H8)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T14:05:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "06b781e0d464575f18c61e810367ffc808caccfa",
"body": "The memory-safety pass from the 2026-07-18 review — the two places the\n\"pure-Go, memory-safe\" promise had a hole. Neither fires on the aligned,\nkept-alive common path (why the tests were green); both are reachable and are\nsegfaults/throws in otherwise-correct code.\n\nH3 — safetensors typed accessors \n[…]\nfensive guard covered by the\nexisting mmap/lifetime suites. gofmt/vet/golangci-lint(0)/go test ./... and\n-race on embed+ann green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed,ann: fix the two mmap/unsafe memory-safety holes (review H3/H6)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T13:50:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1f1dc82ae240a4fc92f51ca6eadba424f049a29c",
"body": "…iew H2/M2)\n\nTwo coupled findings from the 2026-07-18 review. H2 makes a hostile safetensors\nheader fail at parse instead of at inference; M2 makes the shape-violation\npanics that H2-class inputs trigger *recoverable* instead of uncatchable\nworker-goroutine crashes. Per the review, kept the panic mo\n[…]\nr() catches the panic; overflow + constructor\nrejection. gofmt/vet/golangci-lint(0)/go test ./... and -race on linalg+embed\ngreen.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg,embed: shape/dtype validation + recoverable matmul panics (rev…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T13:42:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e289d92ec411560e2237bea8771a15a98903fdc4",
"body": "Three self-contained parser guards from the 2026-07-18 code review — the\ncrash/traversal class. aikit is the untrusted-input boundary for the ecosystem\n(every hostile GGUF/safetensors byte and persisted index routes through here),\nand the clamp discipline the GGUF byte cursor already has was not uni\n[…]\nlangci-lint (0), go test ./... and -race on\nembed/+ann/ all green. Comments/guards only — no behavior change on\nwell-formed input.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed,ann: harden untrusted-input parsers (code review H1/H4/H5)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-18T13:14:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fbecab3988bead5d50f38ca605a8ec50bba6ca55",
"body": "`go fix ./...` on both modules (root + chunk/treesitter). Purely mechanical,\nsemantics-preserving rewrites the 1.26.5 toolchain now applies:\n - `for i := 0; i < N; i++` → `for i := range N` (range-over-int, Go 1.22)\n - `for i := 0; i < N; i++` with an unused index → `for range N`\n - a linear-sear\n[…]\ncturing\nthe kernels). Full suite + golangci-lint green after.\n\nKept separate from the docs/CI commits since it is unrelated churn.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: go fix — range-over-int and slices.Contains modernization",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-16T15:42:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "caf06a52b002e59c03c108564f3a744abc6dd426",
"body": "Wires golangci-lint into the core CI job, pinned to the same action major and\nversion ken uses (golangci-lint-action@v9, v2.11.4) with a .golangci.yml\nmirroring ken's conservative posture — errcheck, govet, ineffassign,\nstaticcheck, unused — so the packages that moved between the two repos\n(ADR-034)\n[…]\nfiles by design.\n\ngo vet, go build, gofmt, go test ./... (root + treesitter submodule) and the\n-tags aikit_checks build all green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: add staticcheck via golangci-lint",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-16T15:42:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4c4fd1a04a8706522a384abf476a2cfb2809360b",
"body": "Doc comments render on pkg.go.dev, but ~27 of them cited repo-relative\nmarkdown that does not exist in aikit: ann/, bm25/ and chunk/ came from ken\n(ADR-034) and kept pointing at ken's docs/DESIGN.md + docs/BENCH.md, vision/\npointed at goinfer's docs/multimodal.md, and encoder/ pointed at a ken memo.\n[…]\non): a ref to a gitignored-but-present file passes it while\nstill being a dead link. Audited with a git-tracked check too — clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: fix dangling doc refs after the ken→aikit package move",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-16T15:40:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d123d7569bd6ff972ec2a7b65a59f12b4fcf4a04",
"body": "Matches ken's toolchain bump (GO-2026-5856, crypto/tls ECH leak). All four\nmodules move together — root, benchmarks, examples/embedded-corpus, and the\nchunk/treesitter submodule — so the workspace resolves a single toolchain.\n\ngo.work carries the same directive but is gitignored (local dev only).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump the go directive 1.26.3 → 1.26.5 across the modules",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-07-16T15:40:31Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "645e380c9995c652b6cb21dd347e87ae01810761",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add CHANGELOG section for v1.9.0",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-17T22:51:15Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "712864461d998ffc983e35a1347576107c2b4a6f",
"body": "Lift the read-only mmap primitive that ann and embed each duplicated\n(and goinfer kept a third copy of) into a new zero-dependency leaf\npackage, github.com/townsendmerino/aikit/mmap, and build the residency\nmachinery on top of it. Three deliverables from\ndocs/prompts/aikit-mmap-residency-leaf.md:\n\nD\n[…]\n==resident\nwith evictions>0, and a -race concurrent-query check. go test ./...\ngreen; cross-compiles linux/darwin/windows/freebsd.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "Add mmap leaf, WeightMat.MappedSpan, and paged FlatI8 index",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-17T22:46:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "db13547c0c55d6b94d23a38336f4a7e737b45d8f",
"body": null,
"is_bot": false,
"headline": "chore: new prompt",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-17T22:09:37Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "66cc30de3562711fce2dc3ec6677ace3e803efe0",
"body": "…1.8.0)\n\nThe GGUF metadata array parser preallocated make([]any, 0, n) at every nesting\nlevel, with n bounded only by the remaining input. For an array-of-arrays the\nnesting depth is itself ~input/12, so total preallocation was O(input^2) — a ~1 MB\nhostile file parsed in ~700 ms, which surfaced as a\n[…]\n cached it immutably — so it is\nretracted in go.mod and superseded by v1.8.1 (same Qwen2.5-VL vision tower + arm64\nW4A8 content plus this fix).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed: bound GGUF nested-array preallocation; release 1.8.1 (retract …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-15T04:01:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e885750ce3a57527adc7982cfc7fec5fd54590cd",
"body": "…ution)\n\nAdds vision.QwenVisionEncoder — a pure-Go fp32 forward of the Qwen2.5-VL\n`.visual` submodule, alongside the unchanged SigLIP Encoder. Unlike SigLIP\n(fixed resolution, learned absolute pos, LayerNorm, gelu-tanh MLP), this is\ndynamic-resolution: LoadQwenVisionEncoder + Forward(pixelValues, gr\n[…]\ndModel golden (scripts/pin_qwen25vl_vision.py,\ntransformers 5.12). Cross-checked against goinfer's independently-pinned golden.\n\nRelease 1.8.0.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "vision: add Qwen2.5-VL vision tower (second ViT family, dynamic resol…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-15T03:36:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b87e675aaa4273f899cf193ac874814e924f65ea",
"body": "Planning doc (DEFERRED — execute on trigger) for extracting goinfer's\nweight-memory substrate (mmap + madvise + span-residency cache) into a\nzero-dependency aikit leaf, dedup'ing the three identical mmap copies\n(ann, embed, goinfer) and paging the FlatI8 index. No code change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add deferred plan for mmap + residency leaf package",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-15T00:53:34Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "52890f5884f9f07ae6aa134914deb569e9f6a81a",
"body": "… Pro\n\nThe arm64 fold kernel (dotW4A8FoldSDOT) landed UNWIRED/UNVALIDATED in 36ce824\n(amd64 done, NEON draft). This wires dotW4A8 to it (mirroring the amd64 dispatch),\nvalidates it on an M1 Pro, and removes the old per-group dotW4A8GroupsSDOT path.\n\nNEON kernel correct on first hardware run — the WO\n[…]\n help while\nthe unpack, not bandwidth, is the limiter — the real lever is unpack throughput.\n\namd64, W8A8, f32 MatmulBT untouched.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: wire + validate W4A8 in-register-scale-fold NEON kernel on M1…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-15T00:26:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "36ce824642aed161a602811fb632beef4e4eb564",
"body": "…raft)\n\nW4A8 (int4 weight × int8 activation) M=1 decode was ~2.25× slower than W8A8 on\nM1 Pro (2.07× reproduced on amd64) despite reading half the bytes. Diagnosis:\nnot the nibble-unpack — the kernel emitted one int32 per 32-wide group, forcing\na per-group horizontal reduce + SIMD→GP move + an int32\n[…]\nales = 5 bits/weight (not 4), so the bandwidth-bound\nceiling vs int8 is ~1.6×, not 2×; f16 scales or larger groups approach ~1.9×.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: fold W4A8 weight scales in-register (amd64 done; arm64 NEON d…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-14T21:28:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d60f7c93ea2f04255b23308fe9f4d740eae4e6d7",
"body": "…oaded findings\n\nRecords the \"feature A\" spike (fused dequant-dot matmul on native GGUF K-quant\nblocks, Q6_K first) as DEFERRED before any asm, with the two near-free numbers\nfront-loaded since they narrow the case:\n\n- Footprint: Q6_K 6.5625 bits/weight — 18% smaller than int8-requant but 31%\n LARG\n[…]\nd? NEON-first?), a resume order, and anchors — pick-up-ready.\n\nD (the transparent .giw cache) is independent and ships regardless.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(internal): defer the native-Q6_K fused-kernel spike with front-l…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-14T19:04:30Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "83febd6fcc7f15d32c225075689c89e77465de07",
"body": "The register-blocked AVX2 kernels (dotFMA4/dotFMA8 in dot_amd64.s) consume two\n4-element groups per 256-bit YMM iteration; the trailing single group (n4 odd,\nn%8==4) was accumulated with an XMM/VEX.128 FMA, which zero-extends and so wiped\nthe upper 128 bits of each YMM accumulator — dropping the loo\n[…]\nonly exercised the single-row dotFMA, never the multi-row\nblocked kernels. Full -race ./... green; TestMatmulBT_MConsistent green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: fix amd64 AVX2 Dot8x4/Dot4x4 odd-n4 bug (v1.7.3)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-13T15:06:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "560ebd333c220bfe49f002b3eaf20edca6db91df",
"body": "…infer's spec bug)\n\nThe 1.7.2 CHANGELOG entry and roadmap §1b.4 framed the MatmulBT M-invariance\nchange as fixing a same-model speculative-decoding parity regression in a\ndownstream consumer (goinfer). That was wrong, and it's the residue of the\noriginal mistake worth correcting in the record:\n\n- Th\n[…]\ne pointing at the\ndependency, and never put a downstream-effect claim in a release note when only the\nlocal property was verified.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: correct the 1.7.2 over-attribution (M-invariance did not fix go…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-13T05:03:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a78cc607c3ab4fd63ed369334404018404310b55",
"body": "…ression\n\nMatmulBT's per-output f32 result must not depend on M: a row computed alone\n(M=1) must be bit-identical to the same row computed inside a batch (M>1).\n1.6.0's blocked-GEMM hoist left a MAC-count threshold in MatmulBT that routed\nsmall matmuls to a naive dot-per-output span — a DIFFERENT f3\n[…]\nroutes through MatmulBTInto, always blocked) — golden parity\n unchanged (TestGoldenFixture_cosine + Q8 cosine 0.997 re-verified).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: make MatmulBT M-invariant — fix speculative-decode parity reg…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-13T01:30:56Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8419cf34305d9513689b6bc4b3344f3fbc31fe24",
"body": "…tMat weights\n\nThe inverse of the Int8()/Int4() accessors: wrap caller-owned, already-quantized\nslices (int8 + per-row scales; or packed int4 nibbles + per-group scales + group)\nWITHOUT copying or re-quantizing, aliasing the backing arrays like WrapF32 does.\n\n1.7.0 shipped WeightMat with only quanti\n[…]\ns hand back the SAME backing slice (aliased, not copied), and shape\nmismatches panic. Additive to the Experimental linalg surface.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: add WrapInt8/WrapInt4 — zero-copy wrap of pre-quantized Weigh…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T22:49:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4b9a9b49ae6351d1d0498c12c867500687ad6091",
"body": "The v1.7.0 release bundles two Experimental-tier additions (the `vision`\nSigLIP/ViT image encoder and `linalg.WeightMat`) plus the encoder Q8\nmigration onto WeightMat. That migration removes ten exported\n`LayerWeightsQ8` int8/scale fields — part of the `encoder.LoadQ8` /\n`ModelQ8` surface the README\n[…]\now green: `release-gate.sh 1.7.0` ✓ (Experimental changes excluded\nand listed; no Hard-tier breakage; dependency invariant holds).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "release: prep v1.7.0 — tier-aware release gate + CHANGELOG compare link",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T22:10:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f8d347e8f8f8e2e27d22138fb4641cc00a95eb3a",
"body": "…rom goinfer\n\naikit gains image embeddings, making it the only cgo-free image-embedding\nretrieval library. The vision tower moves in from goinfer's vision package\n(same author, MIT), verbatim and parity-preserving:\n\n decode (stdlib image/jpeg+png) → preprocess (resize+normalize, pre-decode\n pixel-\n[…]\n to package multimodal, point gpu/vision_*.go at aikit/vision,\nbump the pin — validated green via go.work replace before deletion.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "vision: add pure-Go SigLIP/ViT image encoder (Experimental) — moved f…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T22:00:20Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ba3d26bf3deb145d4af6f2073d44ebeffbc7f545",
"body": "Adds linalg.WeightMat — a precision-hiding quantized-weight matrix\n(f32 / per-row int8 / group int4 behind a uniform MatmulBT + Row dequant\n+ Int8()/Int4()/F32() raw accessors). It consolidates the weight-matrix\nwrapper open-coded three times: aikit encoder.LayerWeightsQ8, goinfer\ndecoder.weightMat \n[…]\ngoinfer's fastest-moving internal type. goinfer's vision.qmat\nand decoder.weightMat migrate next against the released aikit minor.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg+encoder: add Experimental WeightMat, migrate encoder Q8 onto it",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T21:58:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c5998f56b004c08153aa0faf954e41fbc50f3677",
"body": "…oken window)\n\nThe published ~21 texts/sec is single-short-text (~12 tokens) — the small-M,\nbandwidth-bound regime the v1.6.0 blocked GEMM doesn't touch (re-measured at 22,\nwithin noise). The GEMM win lives at large M, which that metric hides. Add a\nlong-context operating point to `go run ./inferenc\n[…]\ns. gitignore benchmarks/testdata/ (the\nper-machine MiniLM/Model2Vec model dirs the benches symlink in) so they can't be\ncommitted.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "benchmarks+docs: add MiniLM long-context throughput (710 tok/s, 256-t…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T19:28:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7cf428269fdd5fc9d7a509004ac2ced458c11fd1",
"body": "v1.6.0: typed safetensors accessors (TensorF32/TensorI32), shared blocked\nMatmulBT + MatmulBTInto (public f32 GEMM 7%→69% of peak via cache blocking +\nB-packing), Dot2x8 register kernel. All additive to the Hard tier (apidiff\nclean); release-gate 1.6.0 green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(changelog): roll [Unreleased] → [1.6.0]",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T18:16:55Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "ee8ea6d6373ce0877e8acbc347d04f8b4d5fabe3",
"body": "Result of `go fix ./...`: if-guarded clamps → max() (crossencoder pairIDs,\nscratch ensureDeqW) and a counted loop → range-over-int (linalg_q8). Semantically\nidentical, already covered by the existing tests. Comment tidied where go fix\nleft it mid-expression.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: apply go fix modernizations (max builtin, range-over-int)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T18:08:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d9ac839974fd477f53f3268c4106f08b068b0dc7",
"body": "The large-M GEMM lever (from the §1b.3 packing work) was only noted in prose\nunder a DONE heading. Per the roadmap's own rule (new engineering enters through\n§2 triggers), promote it to §2.12 with its trigger — goinfer's multimodal\nimage-prefill latency, the one hot f32 MatmulBT consumer at M≥2048 — and record\nthe measured dead-ends (smaller kBlock, wide n-panels) so they aren't re-tried.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(roadmap): promote 3-level Goto GEMM to a §2 gated item",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T18:08:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "341210715513513f84a3ca260bebb5c525d5a585",
"body": "…(arm64)\n\nThe cache-blocked MatmulBT still left large-K shapes (M=512×4096×4096 at 46%)\nbelow the K=768 tiles' ~70%. Root cause isn't tile size — it's L1 associativity\nconflicts: the 8 b-rows a Dot2x8 reads simultaneously sit K·4 bytes apart and\nmap to the same cache sets. packedFill copies each 8-r\n[…]\nigger). Smaller kBlock and wide n-panels both measured worse. Full\nsuite + -race green, amd64/windows cross-build OK, gofmt clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: B-panel packing for large-K GEMM — prefill 46%→69%, fc2 +15% …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T18:04:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "86bc108c594591ec46e284914315347dc80138e8",
"body": "The test asserted Dot2x8 == Dot8x4 within 1e-6. That holds on arm64 (both are\nthe NEON asm — bit-identical, same accumulation order) but fails on amd64/Windows\nCI: there Dot2x8 is the portable scalar fallback while Dot8x4 is the AVX2 asm, so\nthey compute the same math in different orders and agree o\n[…]\n guarantee that underpins encoder parity) and use an f32-appropriate 1e-4\nelsewhere. Seed is fixed, so the bound is deterministic.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: fix TestDot2x8_equalsDot8x4 on amd64 (arch-aware tolerance)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T18:03:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "24aec55e2281434cc2c61e6cc02b546a7deab586",
"body": "…%→46–68%\n\nA cross-repo gate (goinfer) found the PUBLIC linalg.MatmulBT was a naive\ndot-per-output span with no cache blocking — re-streaming b from DRAM once per\na-row, ~7% of this M1 Pro's f32 peak at prefill shapes. That's a defect every\nkit consumer of MatmulBT inherits (goinfer's own f32 vision\n[…]\n + peak-fraction benches moved to linalg with the kernel. Full suite\n+ -race green, cgo-free, Windows cross-build OK, gofmt clean.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: hoist blocked GEMM into shared MatmulBT — fix public matmul 7…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T17:11:04Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e30eeb139d565038c5d2fd723ef34b293c3ac7ef",
"body": "…(arm64)\n\nPhase 1 (gate): BenchmarkGEMMPeakFraction measures the encoder's blocked f32\nGEMM as a fraction of a MEASURED single-core ceiling — fmaPeakARM64, a register-\nsaturating FMA loop, clocks 95.4 GFLOPS (≈15 f32-FMA/cycle, settling the\n8-vs-16-FMA/cycle question empirically rather than from the\n[…]\n. Full suite + -race green, cgo-free, Windows cross-build OK.\narm64 NEON only; AVX2 port deferred to roadmap §2.4 (Zen 4+ access).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg/encoder: 2×8 register GEMM micro-kernel — 1.5–1.6× f32 matmul …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T16:21:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e8c3343dc001c4cf10f5b82fb755490f87117d62",
"body": "…e (§1b.1)\n\nThe 2026-06-12 goinfer cross-repo review found the same shape-checked typed-read +\ndtype-dispatch pattern hand-written ≥6× across goinfer (decoder/weights.go,\nvision/encoder.go, decoder/lora.go, decoder/gptq.go: tensorF32/loadF32/f16Tensor/\ni32Tensor) and once in aikit's own encoder. Lif\n[…]\nits next aikit bump.\n\nPermitted under roadmap v4's standing rule: measured deduplication for a named\nconsumer, not new capability.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed: typed tensor accessors TensorF32 / TensorI32 on SafetensorsFil…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-12T15:23:55Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f1a482cd109430b3c28de8f5b1dfb1f292b8f8d8",
"body": "Cut [Unreleased] → [1.5.0] with compare links. Minor: adds the cross-encoder reranker\n(encoder.LoadCrossEncoder, new Experimental surface), the int8-reranker latency fix\n(q8 now ~f32 parity at ¼ weight storage — internal), and the blob format-stability\npolicy docs. apidiff v1.4.0..HEAD: zero Hard-tier incompatible changes (release-gate\nverified).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(changelog): cut [1.5.0] — 2026-06-11",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T21:03:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "da799ebc963dce1f03668d516534918654a42650",
"body": "…(latency parity)\n\nLoadQ8 was ~5× slower than Load on arm64 (ken's report, evaluating an int8 reranker\ndefault). Two causes, both fixed:\n\n1. Allocation churn. The q8 forward allocated every per-layer matmul output and\n per-head attention temporary fresh (~4.4 GiB / 41k allocs for a 50-doc rerank),\n[…]\n8_cosineMatchesF32 (≥0.97) stays green; full encoder + -race + windows +\ncgo-free all pass. No exported API change (all internal).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: fix q8 reranker — pooled scratch + dequant-then-SIMD matmul …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T20:01:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "62c54aea95c0bcb4ec8225c02f8405b9816a559b",
"body": "The 93a170a comment additions tripped gofmt (comment alignment); no code change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ann: gofmt the format-bump checklist comments (CI gofmt fix)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T14:27:33Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "93a170aec0b525ef444340757adb7d0077020cfb",
"body": "…n hygiene)\n\nFormats burned v1→v2→v3 in 48 hours — fine pre-circulation, but an adopter embedding\nblobs in their releases changes the calculus. Decide + document the contract now.\n\nDecision: rebuild-per-minor pre-1.0. A serialized index blob is not a stable\ncross-version interchange format; re-seria\n[…]\nurbs, and \"bundle into whatever bump\ncomes next\" defers it. No code/behavior change; build + ann round-trip/ErrFormat\ntests green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: blob format-stability policy — rebuild-per-minor (pre-graduatio…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T14:20:53Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "839ffd4f1afec82ed978859ef7ce886a1d5856d0",
"body": "…evidence)\n\nCross-referenced the exported surface against goinfer (pins v1.3.0) + aikit-internal\ncallers. DotI8 (ann) + MatmulBTAcc64 (goinfer MoE) are consumed; the four Workspace\nscoping methods are unconsumed but kept as deliberate forward-looking concurrency-safe\ndesign (conscious keep, re-evaluate at graduation). No code change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(roadmap): linalg surface audit done — deliberate keep (consumer …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T14:17:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "7102f7613f186b6c0d7021ae5034484ca860dfbe",
"body": "benchmarks/inference measures aikit's transformer path — all-MiniLM-L6-v2 — at\n~21 texts/sec (≈47 ms/text, single thread) on CPU, no ONNX Runtime / GPU / native\nlib, CGO_ENABLED=0; concurrent encoding scales ~linearly. (Primary dense retrieval\nis Model2Vec static embeddings — microseconds; the trans\n[…]\ny line; roadmap §1 benchmark-remainder marked done (with §1.1's BEIR slice,\nnDCG@10 0.638 on BeIR/scifact, from the prior commit).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "benchmarks: pure-Go MiniLM inference throughput (§1.1 remainder, a)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T13:45:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e256ea47bcd32eaf79cdfb235e73b3bcfc11e18f",
"body": "A cross-referenceable absolute number: aikit's retrieval (potion-retrieval-32M\nembeddings + exact Flat cosine) on the canonical BeIR/scifact test set scores\nnDCG@10 0.638 (300 queries, 5183 docs) — right where a strong static retriever lands\n(near all-MiniLM-L6-v2's own SciFact nDCG@10), pure-Go, no\n[…]\nis the standard MTEB/BEIR protocol, so the number is directly\ncomparable to the leaderboard — credibility for the adoption assets.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "benchmarks: BEIR/scifact retrieval-quality eval (§1.1 remainder, b)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T13:34:51Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6a05385ceb06e7a0fa765b16b156f6895729218a",
"body": "…map v3 §1)\n\nA cross-encoder (BertForSequenceClassification, e.g. cross-encoder/ms-marco-MiniLM-\nL-6-v2) scores a (query, document) pair jointly, the complement to the bi-encoder\nembedders. As the roadmap predicted, a small additive step on the v1.4.0 BERT trunk:\n\n- hiddenStates gained a token-type \n[…]\n modern reranking — bi-encoder (CodeRankEmbed/MiniLM)\nand cross-encoder — cgo-free, closing the last pipeline gap vs hugot/Antfly.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: BERT cross-encoder reranker — LoadCrossEncoder / Score (road…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T13:18:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0faaebc0f9a71aad2c2e1520330e4b1600c1a3e7",
"body": "Cut [Unreleased] → [1.4.0] with compare links. v1.4.0 is a minor: the Hard tier only\ngains capability (embed.Load reads the standard Model2Vec format; embed.ErrFormat /\nann.ErrFormat sentinels) — apidiff v1.3.0..HEAD shows zero Hard-tier incompatible\nchanges (release-gate verified). Everything else \n[…]\nhead, Workspace parallel-knob scoping; the one\nExperimental removal — Workspace.Close, with the worker pool — is allowed pre-1.0).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(changelog): cut [1.4.0] — 2026-06-11",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T12:35:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "edc6528acf601dad65aa894af252735215e33602",
"body": "`go fix ./...` over the main module and the three nested modules (benchmarks,\nexamples/embedded-corpus, chunk/treesitter). Two mechanical, behavior-preserving\nmodernizations: 23 counted `for i := 0; i < N; i++` → `for i := range N`\n(range-over-int, Go 1.22+) and one `for … range strings.Split(...)` \n[…]\n cosine unchanged at 1.0 / 0.997), -race clean on ann/linalg/sparse,\nall four modules build + test, windows + cgo-free unaffected.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: go fix across all modules (modernize loops + strings.SplitSeq)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T12:26:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "902cbecc1bfd760b956a7cca214b9e7fdad58d56",
"body": "The persistent spin-then-park worker pool (pool.go, 154 lines) was built to reuse\nhot workers across a decode layer's back-to-back matmuls, but measured neutral and\nshipped unused: the serial-decode threshold keeps M=1 decode serial — exactly the\nregime where per-call fork/join would dominate — so t\n[…]\nk repurposed to sweep the width cap. The design + measurement\nremain in git (commit 2df6b52) if a future profile justifies a pool.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: delete the unused worker pool; SetWorkers → width cap (§4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T12:14:44Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0881465942d039addf04369e5c42058f911a6ff7",
"body": "…(§4)\n\nSetParallelThreshold/Width are process-wide mutable globals — a liability to settle\nbefore linalg graduates from Experimental (cheap now, breaking later). Workspace\nalready scoped width (SetWorkers/pool); this scopes the threshold too and makes the\nshape coherent: globals are the default, a W\n[…]\nzero\nincompatible changes. Remaining quant matmuls (Q8/W4A8/Q4) can gain Workspace\nmethods additively later; the shape is settled.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "linalg: scope the parallel knobs into Workspace; globals as defaults …",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T05:00:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "0ac071ec08cded37e6a28223e5c4eda2068adddc",
"body": "Three versioned-blob Load paths (HNSW, FlatI8, FlatI8Mmap) plus the safetensors/GGUF\nloaders reported corrupt-blob and version-mismatch failures only as strings, so\ncallers had to string-match. Add a sentinel per package, wrapped at the parse sites.\n\n- ann.ErrFormat: wrapped by Load, LoadFlatI8, and\n[…]\n truncated → ErrFormat); full ann+embed suites, -race, and the\ncorrupt-blob fuzzers (FuzzLoadFlatI8, FuzzOpenGGUF) all stay green.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ann, embed: typed sentinel errors for the blob loaders (§4)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T04:42:10Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2d5814d6506e5f4b095512cec877b13b910d0afa",
"body": "A single self-contained binary that //go:embeds the Model2Vec model, a prebuilt int8\nindex, and the corpus, and answers Go/aikit questions over hybrid dense (int8 ANN) +\nlexical (BM25) → RRF search with zero external files and ~50 ms startup — the\n//go:embed-a-corpus, zero-deploy lane no Python or O\n[…]\nt\n(TestShowcase_query); results are spot-on across stdlib + aikit queries. Linked from\nthe README; root build verified unaffected.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "examples: embedded-corpus — zero-deploy hybrid-search showcase (§1.1)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T02:05:11Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "a4f5a4eac38a44a02130876a553f8379dd1fcae4",
"body": "Three tags in two days each leaked a small process gap (a missing 1.1.1 CHANGELOG\nentry; stale docs nearly tagged in 1.2.0; the v1.2.0/1.2.1 GitHub Release objects\nforgotten until prompted). This gate closes them.\n\nscripts/release-gate.sh <version> (testable locally, not trapped in YAML) checks:\n 1\n[…]\nor 1.3.0 (apidiff v1.2.1→tree clean, confirming the §2\nwork is additive), fails correctly for a version with no CHANGELOG section.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "ci: tag-triggered release gate (§1.2)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T01:08:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "407c219d81b58040aa59abcf1b0c70da0dcfd965",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(roadmap): mark §2.3 SPLADE head done (missed in a67711b)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T00:41:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a67711b7e5344963e2cd548202d6e20997be0690",
"body": "A SPLADE model is a BERT encoder plus a masked-LM head, so §2.2's BERT forward makes\nthe full in-process head tractable (the roadmap only scoped an interim out-of-band\npin script). LoadSPLADE reuses LoadBERT — made prefix-aware so it also reads a raw\nBertForMaskedLM (the \"bert.\" tensor prefix senten\n[…]\n -race green; windows + cgo-free; apidiff additive (new\n encoder → sparse edge, acyclic). CodeRankEmbed + MiniLM paths untouched.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: in-process SPLADE expansion head (§2.3)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T00:40:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b7fc5cc9a7d48a0c393e56e9900e0b1ffa4d99d7",
"body": "…-32M)\n\nThe roadmap assumed potion-retrieval-32M \"loads already, same format\"; it doesn't.\nembed required the vocabulary-quantized layout (embeddings + mapping + weights\ntensors, e.g. potion-code-16M), but potion-retrieval-32M — upstream's strongest\nstatic *retrieval* model — ships the standard layo\n[…]\node-16M, and document that Load reads both formats.\n\nAdditive: embed.Load (Hard tier) only gains capability — no signature change.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "embed: support the standard Model2Vec format (§2.4 — potion-retrieval…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-11T00:25:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "962da0e386a180b68fb79245a4374445fed6abc8",
"body": "encoder.LoadBERT / BERT / Encode in the README Experimental tier and a CHANGELOG\n[Unreleased] Added entry; roadmap §2.2 marked done.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: MiniLM-class BERT encoder (§2.2) — README + CHANGELOG + roadmap",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-10T23:52:49Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "92f0bb52b8391c15b4ac34a4f35d91965c98a2eb",
"body": "…§2.2)\n\nWires the WordPiece tokenizer (the existing embed.Tokenizer + EncodeWithSpecials)\ninto the MiniLM forward, so LoadBERT(dir) + BERT.Encode(text) is the cgo-free\nequivalent of sentence-transformers' .encode() — text → [CLS]…[SEP] →\nlearned-pos/GELU/no-RoPE transformer → mean pool → L2. Max seq\n[…]\nERT family (MiniLM-class embedders/rerankers)\ncgo-free, parity-pinned — \"two specific models\" → \"the BERT family you already use.\"\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: BERT.Encode(text) — end-to-end MiniLM, tokenization parity (…",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-10T23:48:35Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e71b53f46df5799fe1a31a6a7b1640c93e084fb2",
"body": "A second encoder architecture alongside CodeRankEmbed (NomicBert), implementing the\nthree axes a sentence-transformers BERT model differs on: learned ABSOLUTE position\nembeddings (not RoPE), a GELU FFN (intermediate→output dense, not SwiGLU), and mean\npooling (not CLS). Standard post-norm scaled-dot\n[…]\nor end-to-end use: WordPiece text→ids tokenization (a public Encode(text))\nand graduating the pooling knob to public — follow-ups.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "encoder: MiniLM-class BERT encoder — loader + forward, parity 1.0 (§2.2)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-10T23:39:36Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4cbe4720e83211702a97b8c71101b2f2a5f9ccd5",
"body": "pin_minilm.py dumps testdata/minilm_golden.json from sentence-transformers/\nall-MiniLM-L6-v2 (fetched to testdata/minilm-model, gitignored): for 8 short cases,\nthe input_ids the model ate, the full last_hidden_state [L, 384] (the axis-by-axis\nforward oracle), and the mean-pooled L2-normalized senten\n[…]\nr the upcoming BERT loader + forward (phases 2–3);\nthe Go side feeds the golden's input_ids and pins its hidden states against it.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "scripts: MiniLM parity golden — the §2.2 oracle (phase 1)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-10T23:19:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e32bcd0f516ea75882177806e16c1a2c07e28b80",
"body": "The pin_*.py generators are aikit's parity oracle (design rule 3) but needed an\nenvironment that has torch + sentence-transformers + transformers; this pins that.\n\n- scripts/requirements.txt: the toolchain pinned to the versions that produced the\n committed goldens (torch 2.12.0, sentence-transform\n[…]\n is the enabler for the model-blocked track — §2.2 (MiniLM\nencoder support) can now generate its golden and parity-pin against it.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "scripts: stand up the Python parity toolchain (§2.1)",
"author_name": "Francis Townsend-Merino",
"author_login": "francistm-bu",
"committed_at": "2026-06-10T22:53:28Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 18,
"commits_last_year": 227,
"latest_release_at": "2026-07-23T03:32:45Z",
"latest_release_tag": "v1.11.0",
"releases_from_tags": false,
"days_since_last_push": 2,
"active_weeks_last_year": 5,
"days_since_latest_release": 2,
"mean_days_between_releases": 4.5
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 42,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "github.com/townsendmerino/aikit",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "go",
"matches_repo": true,
"registry_url": "https://pkg.go.dev/github.com/townsendmerino/aikit",
"is_deprecated": false,
"latest_version": "v1.11.0",
"repository_url": "https://github.com/townsendmerino/aikit",
"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-23T02:34:34Z",
"latest_version_yanked": null,
"days_since_latest_publish": 2
}
]
},
"popularity": {
"forks": 0,
"stars": 2,
"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": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [],
"toolchain_manifests": [
"benchmarks/go.mod",
"chunk/treesitter/go.mod",
"examples/embedded-corpus/go.mod",
"go.mod"
],
"largest_source_bytes": 36183,
"source_files_sampled": 296,
"oversized_source_files": 0,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"benchmarks/go.mod",
"go.mod",
"scripts/requirements.txt"
],
"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",
"pypi"
],
"dependencies": [
{
"name": "golang.org/x/sys",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.47.0"
},
{
"name": "golang.org/x/text",
"manifest": "go.mod",
"ecosystem": "go",
"version_constraint": "v0.40.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": 0,
"open_issues": 0,
"closed_ratio": null,
"closed_issues": 0,
"closed_unmerged_prs": 0
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "francistm-bu",
"commits": 226,
"avatar_url": "https://avatars.githubusercontent.com/u/242265122?v=4"
},
{
"type": "User",
"login": "townsendmerino",
"commits": 1,
"avatar_url": "https://avatars.githubusercontent.com/u/620372?v=4"
}
],
"contributors_sampled": 2,
"top_contributor_share": 0.996
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"ci.yml",
"fuzz-nightly.yml",
"release.yml"
],
"has_docs_dir": true,
"linter_configs": [
".golangci.yml"
],
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"go.sum"
],
"scorecard": null,
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": "2026-07-25T09:01:15Z",
"oldest_open_prs": [],
"last_merged_pr_at": null,
"ci_last_conclusion": "SUCCESS",
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/townsendmerino/aikit",
"host": "github.com",
"name": "aikit",
"owner": "townsendmerino"
},
"metrics": {
"overall": {
"key": "overall",
"band": "at_risk",
"name": "Overall health",
"note": null,
"notes": [],
"value": 48,
"inputs": {
"security": 1,
"vitality": 78,
"community": 24,
"governance": 46,
"engineering": 78
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 78,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "moderate",
"name": "Development activity",
"note": null,
"notes": [],
"value": 64,
"inputs": {
"commits_last_year": 227,
"human_commit_share": 1,
"days_since_last_push": 2,
"active_weeks_last_year": 5
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "5/52 weeks with commits",
"points": 3.5,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 5
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "227 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 227
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "excellent",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"releases_count": 18,
"latest_release_tag": "v1.11.0",
"releases_from_tags": false,
"days_since_latest_release": 2,
"mean_days_between_releases": 4.5
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "18 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 18
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 2 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 2
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "a release every ~4.5 days",
"points": 27,
"status": "met",
"details": [
{
"code": "release_cadence",
"params": {
"gap": 4.5
}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "OpenSSF Scorecard unavailable",
"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": "unverified",
"guards": [],
"signals": [],
"red_flag": false,
"multiplier_pct": 100,
"declared_reason": null,
"unverified_reason": "repository_too_young",
"unanswered_open_prs": null,
"unanswered_open_issues": null,
"days_since_last_merged_pr": null,
"days_since_last_human_commit": null,
"days_since_last_human_commit_is_floor": false
},
"components": [
{
"key": "project_is_still_maintained",
"name": "Project is still maintained",
"detail": "maintenance record not established from the collected data",
"points": 100,
"status": "met",
"details": [
{
"code": "abandonment_unverified",
"params": {}
}
],
"max_points": 100
}
]
}
],
"description": "Is the project alive — is code being written and are releases shipping?"
},
{
"key": "community",
"band": "critical",
"name": "Community & Adoption",
"value": 24,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "critical",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 1,
"inputs": {
"forks": 0,
"stars": 2,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "2 stars",
"points": 0,
"status": "missed",
"details": [
{
"code": "stars",
"params": {
"count": 2
}
}
],
"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": "moderate",
"name": "Community health",
"note": null,
"notes": [],
"value": 50,
"inputs": {
"has_readme": true,
"has_license": true,
"has_contributing": false,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 22.5,
"status": "met",
"details": [],
"max_points": 22.5
},
{
"key": "license",
"name": "License",
"detail": "recognized license (MIT)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "MIT"
}
}
],
"max_points": 22.5
},
{
"key": "contributing_guide",
"name": "CONTRIBUTING guide",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 18
},
{
"key": "code_of_conduct",
"name": "Code of conduct",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 13.5
},
{
"key": "issue_template",
"name": "Issue template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.2
},
{
"key": "pr_template",
"name": "PR template",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.3
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "at_risk",
"name": "Sustainability & Governance",
"value": 46,
"weight": 0.24,
"metrics": [
{
"key": "maintainer_resilience",
"band": "critical",
"name": "Maintainer resilience (bus factor)",
"note": null,
"notes": [],
"value": 13,
"inputs": {
"bus_factor": 1,
"contributors_sampled": 2,
"top_contributor_share": 0.996
},
"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 100% of commits",
"points": 0.1,
"status": "partial",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "2 contributors",
"points": 2.7,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 2
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"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": 43,
"inputs": {
"followers": 5,
"owner_type": "User",
"is_verified": null,
"owner_login": "townsendmerino",
"public_repos": 8,
"account_age_days": 5638
},
"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": "5 followers of townsendmerino",
"points": 5.6,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 5,
"login": "townsendmerino"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "8 public repos, account ~15 yr old",
"points": 18.9,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 8
}
},
{
"code": "account_age_years",
"params": {
"years": 15
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"github.com/townsendmerino/aikit"
],
"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": 78,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "good",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 80,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": true,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "3 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 3
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": ".golangci.yml",
"points": 16,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"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": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "good",
"name": "Documentation",
"note": null,
"notes": [],
"value": 75,
"inputs": {
"topics": [],
"has_wiki": true,
"homepage": null,
"has_readme": true,
"has_docs_dir": true,
"has_description": true
},
"components": [
{
"key": "readme",
"name": "README",
"detail": null,
"points": 30,
"status": "met",
"details": [],
"max_points": 30
},
{
"key": "documentation_directory",
"name": "Documentation directory",
"detail": null,
"points": 25,
"status": "met",
"details": [],
"max_points": 25
},
{
"key": "documentation_homepage_site",
"name": "Documentation / homepage site",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "repository_description",
"name": "Repository description",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "topics",
"name": "Topics",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
},
{
"key": "wiki",
"name": "Wiki",
"detail": null,
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
}
],
"description": "Are baseline engineering and documentation practices in place?"
},
{
"key": "security",
"band": "critical",
"name": "Security",
"value": 1,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "critical",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Dependency lockfiles. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"dependency_lockfiles"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 1,
"inputs": {
"source": "file_signals",
"lockfiles": [
"go.sum"
],
"manifests": [
"benchmarks/go.mod",
"go.mod",
"scripts/requirements.txt"
],
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"components": [
{
"key": "security_policy_security_md",
"name": "Security policy (SECURITY.md)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 30
},
{
"key": "dependabot_config",
"name": "Dependabot config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 25
},
{
"key": "dependency_lockfiles",
"name": "Dependency lockfiles",
"detail": "published library — lockfiles are an application concern, not expected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "lockfiles_not_expected",
"params": {}
}
],
"max_points": 25
},
{
"key": "codeql_workflow",
"name": "CodeQL workflow",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
}
]
}
],
"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": 67,
"weight": 0,
"metrics": [
{
"key": "ai_agent_context",
"band": "at_risk",
"name": "Agent context & guidance",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"has_llms_txt": false,
"legible_history_share": 0.99,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"components": [
{
"key": "agent_instructions",
"name": "Agent instructions",
"detail": "no CLAUDE.md / AGENTS.md / editor rules",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_agent_instructions",
"params": {}
}
],
"max_points": 45
},
{
"key": "machine_readable_docs_llms_txt",
"name": "Machine-readable docs (llms.txt)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
},
{
"key": "legible_commit_history",
"name": "Legible commit history",
"detail": "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": "excellent",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"go.sum"
],
"has_dockerfile": false,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": true,
"typecheck_configs": [],
"agent_commit_share": 0.99,
"toolchain_manifests": [
"benchmarks/go.mod",
"chunk/treesitter/go.mod",
"examples/embedded-corpus/go.mod",
"go.mod"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "benchmarks/go.mod, chunk/treesitter/go.mod, examples/embedded-corpus/go.mod (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "benchmarks/go.mod, chunk/treesitter/go.mod, examples/embedded-corpus/go.mod"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": ".golangci.yml",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": ".golangci.yml"
}
}
],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "Go (statically typed)",
"points": 11,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "99 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 99,
"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": "OpenSSF Scorecard unavailable",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"primary_language": "Go",
"largest_source_bytes": 36183,
"source_files_sampled": 296,
"oversized_source_files": 0
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "Go (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "Go"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "0/296 source files over 60KB",
"points": 55,
"status": "met",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 296,
"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",
"OpenSSF Scorecard did not return a usable result (2026/07/25 20:49:36 Warning: PATs stored in env variables GITHUB_AUTH_TOKEN and GITHUB_TOKEN differ. Scorecard will use the former.); skipping Scorecard checks"
],
"report_type": "repository",
"generated_at": "2026-07-25T20:49:57.504496Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/t/townsendmerino/aikit.svg",
"full_name": "townsendmerino/aikit",
"license_state": "standard",
"license_spdx": "MIT"
}