Informe JSON sin procesar legible por máquina
{
"data": {
"repo": {
"topics": [
"ai-coding",
"claude",
"code-analysis",
"code-indexing",
"coding-assistant",
"copilot",
"graph-database",
"semantic-search"
],
"is_fork": false,
"size_kb": 6862,
"has_wiki": true,
"homepage": null,
"languages": {
"C": 65772215,
"C#": 5710,
"Go": 934,
"C++": 65921,
"Java": 1308,
"Ruby": 637,
"Rust": 4922725,
"Shell": 11102,
"Python": 12933,
"JavaScript": 25924,
"PowerShell": 4615,
"TypeScript": 394712
},
"pushed_at": "2026-07-19T05:05:32Z",
"created_at": "2026-04-04T22:24:23Z",
"owner_type": "Organization",
"updated_at": "2026-07-23T07:57:45Z",
"description": "CodeGraph builds a semantic graph of your codebase — functions, classes, imports, call chains — and exposes it through 42 MCP tools, 38 languages, a VS Code extension, and a persistent memory layer. AI agents get structured code understanding instead of grepping through files.",
"is_archived": false,
"is_disabled": false,
"license_spdx": "Apache-2.0",
"default_branch": "main",
"license_spdx_raw": "Apache-2.0",
"primary_language": "C",
"significant_languages": [
"C"
]
},
"owner": {
"blog": null,
"name": null,
"type": "Organization",
"login": "codegraph-ai",
"company": null,
"location": null,
"followers": 2,
"avatar_url": "https://avatars.githubusercontent.com/u/249074060?v=4",
"created_at": "2025-12-11T09:04:24Z",
"is_verified": null,
"public_repos": 2,
"account_age_days": 226
},
"license": {
"state": "standard",
"spdx_id": "Apache-2.0",
"raw_spdx": "Apache-2.0",
"file_present": true,
"scorecard_found": true,
"profile_has_license": true
},
"activity": {
"releases": [
{
"tag": "model",
"kind": "other",
"published_at": "2026-06-30T05:24:44Z"
}
],
"recent_commits": [
{
"oid": "06bcc88cd0a68274e87e7b6117da1651f83d212f",
"body": "… MB available (#13)\n\nThe pre-model-load RAM gate read sysinfo's available_memory(), which returns 0\non some macOS versions (reclaimable memory parked in inactive/speculative/\npurgeable pages isn't counted as free), so embedding-dependent tools were\nsilently disabled on healthy Macs.\n\n- evaluate_mem\n[…]\nonger\n triggers false pressure).\n- CODEGRAPH_SKIP_MEMORY_CHECK=1 escape hatch (MCP + --run-tool); documented in\n both READMEs.\n- Unit tests cover load/skip/zero-proceed/bypass/boundary.\n\nCloses #13.",
"is_bot": false,
"headline": "fix(server): don't disable/degrade embeddings when macOS misreports 0…",
"author_name": "anvanster",
"author_login": "anvanster",
"committed_at": "2026-07-19T05:05:31Z",
"body_truncated": true,
"is_coding_agent": false
},
{
"oid": "17540f9bd0249dd16ac1b922b6868a5dad03ca13",
"body": "fix(pr-review): test-detection + risk calibration — v0.19.1",
"is_bot": false,
"headline": "Merge PR #8: PR-review test-detection + risk calibration (0.19.1)",
"author_name": "anvanster",
"author_login": "anvanster",
"committed_at": "2026-07-01T00:36:15Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "bec92b144d0316cabccef207a09aef857375b258",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump version to 0.19.1 (PR-review calibration fixes)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-07-01T00:35:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "791d5b1ae1deb6f51b228014eec062e2c6235215",
"body": "…overage\n\nTwo calibration fixes to codegraph_pr_context:\n\n- Risk was `total_direct > 20 || untested > 5 → high`, so any sizeable PR\n tripped \"high\" purely on caller count — even when every change was\n body-only and broke nothing. Base risk instead on `breaking_callers`\n (callers of signature-chan\n[…]\ns breakable production callers, inflating blast radius\n and leaving example-driven code flagged as untested. Count them as\n coverage instead.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(pr-review): proportionate risk + count example/bench callers as c…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-07-01T00:34:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6e707f1c01b45ccaad36423cc7fb4a7708dc6970",
"body": "ir_to_graph wrote is_async/is_static/is_abstract but not is_test, so the\ngraph never carried the marker the visitor already computes. Add it, plus a\nregression test that a #[test] fn with a descriptive name inside\n`#[cfg(test)] mod tests` sets is_test.\n\nNOTE: insufficient on its own — end-to-end pr_\n[…]\nll misreports\ncoverage; is_test is not reaching the queried nodes in the real indexing\npipeline (cause not yet isolated; not a cache artifact).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(parser): persist is_test on Rust function nodes (partial)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-07-01T00:34:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ba5942fa502f6f30afd0197f4330c7f8c558af4a",
"body": "codegraph_pr_context classified a caller as a test only when its name\nmatched test_*/*_test* or its path contained /tests/. Idiomatic Rust unit\ntests live in `#[cfg(test)] mod tests` with descriptive names (e.g.\n`weighted_mean_l2_math`, `loads_potion_f32_no_weights`), so they were\ninvisible and ever\n[…]\ne_props::is_test accessor and prefer it over the name/path heuristics,\nwhich remain as a fallback for languages that don't populate the marker.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(pr-review): use structural is_test marker, not just name heuristics",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-07-01T00:34:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "29ee815c2780103b0a02dfa0b727a60b5f9b3dba",
"body": "…0.19.0)\n\nfeat(embed): static (model2vec) embeddings + extra-languages gating — v0.19.0",
"is_bot": false,
"headline": "Merge PR #7: static (model2vec) embeddings + extra-languages gating (…",
"author_name": "anvanster",
"author_login": "anvanster",
"committed_at": "2026-07-01T00:34:07Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "1391ebcf91433cd5e81ac90966de59230a63ed65",
"body": "The VSIX bundles jina-code-static-256 and the extension auto-selects it\n(extension.ts), so `static` needs zero setup in VS Code. CLI/MCP keep the\nCODEGRAPH_STATIC_MODEL path instructions.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(embed): note static model ships bundled in VS Code extension",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-30T22:49:56Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f0a6dbb8019c2e8ceb4c68e05fe1e7806e8e3d9e",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump version to 0.19.0 (static embeddings feature)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-30T18:06:45Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "865c9942011a4912863339a7ea7befb55ed9cb63",
"body": "- Telemetry: mcp.start now emits `embeddingModel` (static / bge-small /\n jina-code-v2 / granite-97m) via EmbeddingBackend::telemetry_id — static\n adoption is queryable in PostHog (and the extension config snapshot already\n reports the setting now that 'static' is valid).\n- scripts/fetch-static-mo\n[…]\n default CODEGRAPH_STATIC_MODEL to the bundled bin/jina-code-static-256\n when embeddingModel=static and staticModelPath is unset.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(embed): static-model telemetry + release-independent model fetch",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-29T06:50:52Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "1ce7c7e95f1d3fb833873018a45d8b6a0d791570",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: note COBOL/Fortran/Perl/Dart/Zig/R are extra-languages-gated",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-29T02:56:25Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a7a6c33f1126c32741e3206ea8f747ef46d870b0",
"body": "…5 MB)\n\nTelemetry (PostHog, 90d, 1,486 machines / 8,268 index events): cobol, perl, dart,\nzig, r, fortran appear in ZERO indexed workspaces. Gate them behind an\n`extra-languages` cargo feature (off by default): the community binary drops\n141.2 -> 116.1 MB; `--features extra-languages` restores the f\n[…]\nextensions / all_metrics /\nlanguage_for_path + tests. Default build + 15 parser_registry tests pass; both\nfeature configs compile.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "perf(parser): gate 6 zero-usage grammars behind `extra-languages` (-2…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-29T02:55:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "49289d0c84bbb687e6988cd405318b6520799471",
"body": "…l_search\n\n300 doc->symbol queries via the actual hybrid: BGE R@1 0.457/MRR 0.568 vs static\n0.430/0.536 (R@10 99%). Confirms viability at ~100x indexing speed.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(embed): server-side eval — static ~94% of BGE through real symbo…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-28T21:39:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "c14174c6c804042ca8990cf14a1fed49759e3551",
"body": "scripts/server_eval.py drives the real codegraph-server MCP (per model: handshake,\nforce-reindex, wait for embeddings, run symbol_search over doc->symbol queries,\nscore recall@k) — static vs BGE through the actual hybrid. scripts/\nextract_fullbody_corpus.py dumps full-body symbol texts for throughput tests.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(embed): server-side eval driver + full-body corpus extractor",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-28T21:37:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "2db0f08ce24d149f3a7873490f76dedd7094d201",
"body": "- vscode/package.json: add 'static' to codegraph.embeddingModel enum + a\n codegraph.staticModelPath setting.\n- extension.ts: when embeddingModel=static, pass CODEGRAPH_STATIC_MODEL env to\n the spawned server; forward staticModelPath as an init option.\n- README.md / vscode/README.md / mcp-package/R\n[…]\nt --embedding-model\n static (model2vec, ~100x faster indexing, ~90% of BGE in hybrid search) + how\n to distill/point at a model.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(embed): expose static mode in VS Code + MCP + READMEs",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-28T21:32:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7e5d8669fd29b4127ac290e3a3792516c02f40b6",
"body": "…tatic\n\nAdds EmbeddingBackend { Fastembed(model) | Static(path) } + VectorEngine::\nfrom_backend. `--embedding-model static` (also via the LSP/MCP init path)\nresolves the model2vec dir from CODEGRAPH_STATIC_MODEL or\n~/.codegraph/static_models/jina-code-static-256. Threaded through main.rs (3\nduplicat\n[…]\nend::parse), McpServer,\nEngineConfig, MemoryManager, and the LSP initialize path. ONNX models unchanged\n(default stays bge-small).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(embed): EmbeddingBackend — select static via --embedding-model s…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-28T21:28:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "55fd388e1308bf62d0c35cc61f4a63e65c7efa0e",
"body": "…GHPUT_CORPUS)\n\nOn this project's 965 real symbols: static 46067 vs BGE 298 texts/sec (154x).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(embed): embed_throughput can load a real corpus (CODEGRAPH_THROU…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-27T06:10:36Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a651f79c8a904fa37a8dd85d365c66071f9cdb83",
"body": "…to-end\n\nembed_eval now scores pure-semantic AND the real 40% BM25 + 60% semantic blend.\nBM25 recovers most of static's gap: jina-code-static-256 R@1 0.401->0.547,\nMRR 0.511->0.656 vs BGE 0.609/0.720 — static ~90% of BGE in hybrid (vs ~65%\npure-semantic) at ~70-100x indexing speed. BGE barely uses BM25; static leans on\nit. Verdict: static is a viable default/opt-in.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(embed): hybrid (BM25+semantic) eval — static is ~90% of BGE end-…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:42:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "56ff954efd3f1d4077a0838d0d3d1e9354c85a88",
"body": "…on ceiling\n\n512d: no change (0.378). code teacher vs generic: no change. identifier-splitting\n(CODEGRAPH_SPLIT_IDS): +6% relative (static R@1 0.379->0.401, MRR 0.480->0.511;\nBGE 0.591->0.608). Static's ~65% of BGE on pure semantics is the no-attention\nceiling, not dim/teacher. Real mitigant = the hybrid BM25+semantic system.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(embed): complete static lever sweep — gap is the contextualizati…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:39:16Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "40831133824d9055423be9d8e9810dd3f46b072a",
"body": "…emantic)\n\nscripts/extract_eval_corpus.py extracts 965 doc-commented symbols;\nexamples/embed_eval.rs runs doc->symbol retrieval (recall@k). On this hard,\nunsaturated task: BGE R@1 0.591 / MRR 0.691; potion 0.378/0.488;\njina-code-static-256 0.379/0.480. Static ~65% of BGE R@1, and the code teacher\nti\n[…]\neric potion at 256d — both against the saturated micro-eval. Pure\nsemantic (no BM25); the real hybrid would close much of the gap.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(embed): real 965-way retrieval eval — static ~65% of BGE (pure s…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:36:14Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "28e7e884d32bab02cf4f99df03d99c078feae5f5",
"body": "…urated\n\njina-code-static-256 ties the potion floor (R@1 0.92 / MRR 0.958) on the 12-query\nmicro-eval — the set is too easy to show a code-teacher delta. Speed 70x BGE.\nMotivates the real Phase-0 eval (150+ queries on an indexed repo).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(embed): record jina-code-static A/B — 70x faster, micro-eval sat…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:16:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "68b1c8ed67cfe52c98fe63fd59cde972963762b3",
"body": "…ript\n\nStaticEmbedding now decodes F16/F32/F64 tensors and applies the optional\nper-token weights (model2vec >= 0.4 SIF), matching model2vec's encode exactly\n(emb*weights -> mean -> L2-norm). scripts/distill_static_model.py distills a\nteacher (default jinaai/jina-embeddings-v2-base-code, Apache-2.0)\n[…]\nd: loads potion-base-8M (F32/no-weights) and the distilled\njina-code-static-256 (F16/weighted), both semantically sane. Phase 2.2.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(embed): F16 + SIF-weighted static loading + Jina-Code distill sc…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:14:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "86fa334db1c8707f15fb37b79c56f966e535dc63",
"body": "examples/embed_quality.rs: 12 query->symbol pairs scored by recall@1/@3 + MRR.\nGeneric static floor (potion-base-8M) R@1 0.92 / R@3 1.00 / MRR 0.958 vs BGE\n1.00/1.00/1.000 — ~95% of BGE at the floor, 103x faster. Directional (small\nclean set), not the Phase-0 eval.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(embed): retrieval quality micro-eval — static floor vs BGE",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:05:54Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f88328370c0114b06c4b70f8f9f1b32aa7a50687",
"body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs(embed): record progress + 103x release throughput in the plan",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:03:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1da530968b68d5295ec93c85d615d4f7cebc3f0b",
"body": "examples/embed_throughput.rs compares static (potion-base-8M, 256d) vs ONNX\nBGE-small (384d) embedding throughput over 512 unique symbol texts. Debug floor:\nstatic 2882 vs BGE 335 texts/sec (8.6x); release widens it since the static path\nis pure Rust. Proves the indexing-speed premise.",
"is_bot": false,
"headline": "test(embed): throughput example — static vs ONNX",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T07:02:33Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "a30df5e66339b1a9b3fbc8c09256b42acb31360b",
"body": "Hand-rolled static embedder: loads config.json + tokenizer.json +\nmodel.safetensors (embeddings [vocab,dim] F32) and embeds as tokenize -> gather\nrows -> mean-pool -> L2-norm. Implements Embedder; VectorEngine::with_static_model\nloads a model dir. Deps: tokenizers (HF WordPiece) + safetensors — no O\n[…]\n ranks\nrelated code phrases above unrelated. Plus a pure mean_pool_l2 unit test\n(mean / OOV-skip / normalize / no-NaN). Phase 1.1.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(embed): StaticEmbedding backend — model2vec-format lookup, no ONNX",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T06:59:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "eb60736d3ce79ae697c605b85c0e97a67c3508a2",
"body": "Introduce a pub(crate) Embedder trait (embed / embed_batch / dimension /\nmodel_name); FastembedEmbedding implements it and VectorEngine now holds\nArc<dyn Embedder>. Behavior-preserving — 53 codegraph-memory tests pass. This\nis the seam a static (lookup-table) backend plugs into next (Phase 1.1).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor(embed): Embedder trait — swappable backend behind VectorEngine",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T06:46:06Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "de3e45db0745e5294dc2f5ac579075c8058c14f6",
"body": "…n plan\n\nbuild_embed_text can prepend the camelCase/snake_case-split form of a symbol's\nname (reusing the BM25 tokenizer) so static lookup-table embedders get the\nsub-words they can't subword-recover. Gated by set_split_identifiers, default\nOFF — the transformer (BGE/Jina) path is unchanged until A/\n[…]\nmbeddings-plan.md (distill Jina-Code -> static, validated\nat every step). Phase 1.2. Tests cover the splitter + the gated prepend.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(embed): gated split-identifier words in embed text + distillatio…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-26T06:42:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5021c7c599728ea44c5c9a497f71f7289fcd8d30",
"body": "- engagement.machineProfile (8bc90ec): bucketed/enum machine fingerprint to\n triage the graph_load crash cohort (data_dir_kind, antivirus_kind,\n machine_kind, ram), no PII.\n- compact MCP tool-result serialization (6bb77e6): ~24% lossless on every\n tool; CODEGRAPH_MCP_PRETTY=1 restores indentation.\n- find_entry_points honors limit (default 50) + compact (236e32c): kills the\n >50k-char tail (was 24/42 calls).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump 0.18.6 — machineProfile telemetry + MCP output compaction",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-18T05:09:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "236e32c346552a6c35a41645b077d4295b2a6f14",
"body": "find_entry_points was the worst output offender — telemetry showed 24 of ~42\ncalls returning >50k chars. Root cause: the tool schema advertises `limit`\n(default 50) and `compact`, and the description says \"Default limit 50. Use\ncompact=true\", but FindEntryPointsParams dropped BOTH fields, so every c\n[…]\n compact drops per-entry\nsignature/docstring/description. No schema change for the caller — these\nparams were already documented, just ignored.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(mcp): find_entry_points honors limit + compact — phase 2 compaction",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-18T04:50:46Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "6bb77e6b460222d7a00a23c65895b575a5a31cd9",
"body": "The MCP tool-call choke point pretty-printed every result; the consumer is\nan LLM agent that parses JSON identically with or without indentation, so the\nindentation was pure cost. Default the tool-call text channel to compact JSON.\n\nMeasured on a representative symbol_search payload (25 hits): 8742 \n[…]\n at a\nfurther ~48% on top (60% total vs pretty) but carries agent-comprehension cost\n— deferred until phase 1's resultSizeBucket delta is read.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(mcp): compact tool-result serialization — phase 1 output compaction",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-18T04:41:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "8bc90ec590e6a6b49012ee0815b7eeea7212e28f",
"body": "…ash cohort\n\nOne-time activation event with bucketed/enum machine stats (no PII) so we can\nfingerprint which machines corrupt their graph.db. server.recovery showed the\n0.18.5 redirect fires but the crash rate stayed flat (~13%) — corruption keeps\nbeing created. This narrows WHY:\n- data_dir_kind: lo\n[…]\nixed enum or\ncoarse bucket re-normalized in the reporter; raw path/MAC/AV-name never leave\nthe detector. Same opt-out gate as all other events.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(telemetry): engagement.machineProfile — triage the graph_load cr…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-18T04:35:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2fe1902a1ae3a36eb584cc4e4e73a91b50bd1968",
"body": "prefix only feeds path_matches (which re-normalises internally), but the\n'Normalise' comment promised more than trim_end_matches('/') delivered —\na trap for future direct consumers of the prefix. Behaviour-identical.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "refactor: trim both path separators at get_module_summary entry (#5)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-06T04:56:56Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "8f61bb59b229a30e6dfe49c1e76972bf84cacba0",
"body": "0.18.4 telemetry: the generation-redirect heal fired on only 2/20\nlooping machines and index.requested stayed zero — the bump never\nexecutes there, and crash-side telemetry cannot say why. This release\ninstruments the recovery path itself.\n\nExtension side (this commit): read ~/.codegraph/last-recove\n[…]\nr cohort answers: are sentinels\neven present, do they read as alive (PID reuse / WER zombies), does the\nbump fail, or does the sweep never win.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: server.recovery telemetry + sentinel hardening (0.18.5)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-06T03:09:19Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "fe608acc735d769ab7a35aed74a6c3f296d7df91",
"body": "Telemetry + a field report (fresh install, ~6 large driver repos,\nOOM-killed ~25 min into the first embed run; second run survived only\nbecause the graph had persisted) exposed four gaps in marathon embeds:\n\n- vectors were saved only at the END of build_symbol_vectors — a kill\n threw away the whole\n[…]\nAlso stops keeping a second cloned copy of every embed text alive for\nthe whole run (~50% of text RAM on exactly the runs that flirt with\nOOM).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: OOM-proof embedding — checkpoints, RAM backpressure, chunked resume",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-06T03:08:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7057161edc6086c58eda3fd779d3f730d585d015",
"body": "path_matches() required `/` after the prefix; Windows graphs store paths\nvia Path::display() with `\\`, so every node was filtered out — files=0/\nfunctions=0/lines=0 — and external_deps fell through to the whole\nworkspace. Normalise both sides to `/` (and tolerate a trailing\nseparator on the prefix) \n[…]\nartial-dir guard\n(\"src/foo\" must not match \"src/foobar\") survives normalisation.\n\nRoot-caused and verified by @MuBeiGe in issue #5 — thank you.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: get_module_summary all-zero on Windows — path separators (#5)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-06T03:08:54Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5837e84a4a58f8684efa38cb40e47f60cecd9ae2",
"body": "0.18.3's rename-based quarantine lost on Windows: telemetry showed 26/28\npoisoned machines still crash-looping at graph_load because renaming or\nremoving the RocksDB directory loses to lingering handles (the\njust-crashed process, AV scanners, sibling sessions reopening the shared\nDB). Its single sen\n[…]\nted),\ndead-sentinel detect/clear, own-pid + malformed sentinels ignored, sweep\nkeeps the current generation, plus the existing quarantine trio.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: redirect-based graph DB recovery — generation pointer (0.18.4)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-04T16:33:12Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5dd88259ce04b39324afe1c924ec35a20019ff65",
"body": "Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "style: cargo fmt — import order in codegraph.rs persist_tests",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-04T16:32:50Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e781f785d7105e04f689bc9e70ebc7fccffa0540",
"body": "0.18.2 phase markers ruled out parse/persist/embed: the remaining win32\n0xC0000005 is in the unguarded pre-index startup — loading the persisted\ngraph. ~20 machines crash-loop on it, emitting near-zero index.completed.\nRoot cause: collateral from the earlier (now-fixed) win32 stack-overflow\nloop — a\n[…]\nst, and the\n quarantine makes corruption non-fatal regardless.\n\n3 unit tests cover quarantine (move-aside, fixed-name reuse, missing-db noop).\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: poison-pill recovery for corrupt graph.db on startup (0.18.3)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-03T16:46:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "202c1b492be4ffcbb95f0e10d76502161d6632ae",
"body": "The remaining win32 startup crash is a 0xC0000005 access violation in the\n`serving` phase (telemetry: ~6.6% of starts, dies <10s, before index\ncompletes). `serving` was too coarse to localize it. Split the initial\nindex into three sub-phases via a new RAII `crash_phase::PhaseGuard` that\nstamps a pha\n[…]\nPostHog.\n\nNext 0.18.2 telemetry will report `hard_crash @ index_parse` vs\n`@ index_persist` vs `@ index_embed`, pinning the bug to a subsystem.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: fine-grained crash-phase markers — parse/persist/embed (0.18.2)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-03T00:13:27Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "f9cbddcf9e9121e90d25d9a523683ad786a96124",
"body": "Normalize import ordering and reflow long literals across codegraph-server\nto satisfy `cargo fmt --check`. Pure formatting — no functional change.\nThe 0.18.1 release binaries were built from this tree.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "style: cargo fmt codegraph-server",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-02T07:26:53Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "d583d6b939d45b66485ed4914e6a526214e66324",
"body": "…0.18.1)\n\nTwo-day telemetry showed ~480 server.crash events, 94% on Windows, in\nVS Code auto-restart loops. Two root causes, both Windows-amplified:\n\n- Stack overflow (0xC00000FD; many 0xC0000005; <10s uptime, serving\n phase). Bare #[tokio::main] left the main thread on Windows' 1 MiB\n stack and t\n[…]\nded.\n\nNot a 0.18.0 regression: Windows never takes the Model B engine path\n(unix-gated, off by default) and the per-version crash rate is flat.\n\nCo-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: Windows crash loop — tokio stack size + UTF-8 embed truncation (…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-02T06:24:24Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "272f9c52f2c685c8059f4ccfad98d5283eb5c6dd",
"body": "…PH_ENGINE)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump 0.18.0 — Model B shared socket engine (opt-in via CODEGRA…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-01T18:12:39Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "03cafe09b25f96a664388637dec83b27d49b94b2",
"body": "With CODEGRAPH_ENGINE=1 (unix only), codegraph-mcp.js spawns the thin --connect\nrelay — which auto-spawns the shared engine — instead of a full per-session\n--mcp server, dropping per-session RAM from ~360 MB+ to ~20 MB. Off by default\n(and a no-op on Windows) so existing behavior is unchanged until the engine is\nproven in the wild.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Model B — opt-in engine routing in the npm wrapper (B4)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-01T17:34:21Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "6e0ba838586bad7d3219d16e6789804e73d8c246",
"body": "A --connect shim with no live engine now spawns one (detached --serve), waits\nfor it, and connects — so a session brings the engine up on demand. The engine\nself-exits after CODEGRAPH_ENGINE_IDLE_SECS (default 30 min) with no\nconnections, removing its socket, and probes-before-bind so a double-spawn\n[…]\n\nnever steals a live socket. Per-root file watching is already wired via\nMcpFileWatcher (re-index via the shared model on change).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Model B engine lifecycle — auto-spawn + idle-exit (B3)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-01T17:31:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "5420355c40ed1344481f9413ed773d642b102a14",
"body": "…nts (B1+B2)\n\nA resident engine (--serve) holds N project graphs plus a SINGLE shared ONNX\nmodel and serves the MCP tool surface over a Unix socket. Each agent session\nbecomes a thin --connect relay (~20 MB, no graph, no model), so per-session\nRAM stops scaling with session count: measured one 387 M\n[…]\n CLI modes.\n\nNot yet self-managing: lifecycle (auto-spawn, idle-timeout, per-root watch) and\nthe npm-wrapper shim follow in B3/B4.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: Model B socket engine — multi-root, one shared model, thin clie…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-01T17:23:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7c9e9bfc5e4190eed537f5bbaf0ccd1769dadf30",
"body": "….11)\n\npersist_to was add-only: a re-parsed file's old nodes (deleted in memory,\nre-added with fresh ids) left stale node:/edge: keys on disk that reloaded\nas duplicate symbols. Make persist a true snapshot — delete keys absent\nfrom memory in the same atomic batch. Fixes duplicates that accumulated\n\n[…]\ntbeat/stop + RSS)\nand a codegraph-daemon Node forwarder. Per-OS installers + npm auto-spawn\nto follow.\n\nBump community to 0.17.11.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: persist graph as a snapshot; add watcher daemon foundation (0.17…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-06-01T07:26:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "750f6a614c279bc58e3535c48223b682fe86ce3f",
"body": "…nc (0.17.10)\n\nOpen/change/save and the file watcher now funnel through one path so the\ngraph, in-memory symbol index, and embeddings stay consistent. Any supported\nfile is indexed when opened, so hover/goto work without a prior workspace\nindex. Rebuild the symbol index from the persisted graph on s\n[…]\norphaned vectors are pruned after re-parsing. Quiet the\nper-directory scan log. Telemetry refinements.\n\nBump community to 0.17.10.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: index files on demand; keep graph, symbol index & vectors in sy…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-31T23:04:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "dc2d5286246b22ae9e2f66fd266b854ba364fd46",
"body": null,
"is_bot": false,
"headline": "feat: surface low-memory graph-only fallback to the user",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-30T22:07:32Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "f431b5991f05776f8ac93157b70cd1feb1429cbd",
"body": null,
"is_bot": false,
"headline": "chore: bump 0.17.8; telemetry refinements",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-30T21:56:00Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "c94fd9ccd03e229ccf4688a7c2f1d4cade5cc0be",
"body": null,
"is_bot": false,
"headline": "refining telemetry patterns",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-30T03:07:57Z",
"body_truncated": false,
"is_coding_agent": false
},
{
"oid": "2969833e93c2e1ae70bea48f9f5bee8af0de2b14",
"body": "pr_context now resolves the base ref for CI: tries the bare ref first\n(works locally), falls back to origin/<ref> (works in detached-HEAD PR\ncheckouts). The codegraph-pr workflow passes origin/<base> explicitly\nand surfaces stderr instead of hiding it behind a silent failure.\n\nValidated by dogfooding the action on this PR — posted an accurate\nreview comment (2 files, blast radius, test gaps, reviewer).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(pr_context): CI base-ref resolution + workflow stderr visibility",
"author_name": "anvanster",
"author_login": "anvanster",
"committed_at": "2026-05-28T17:48:58Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a56a0e054fdbf57fe001c8862068eb3635b51f05",
"body": "42 tools (was 41), added pr_context tool entry, --graph-only and\n--run-tool flags, and a GitHub Action / CI PR-review section.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: sync mcp-package README to 0.17.5 — pr_context, CI action, flags",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-28T17:37:14Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e4d085f611fe5410e15b56512d3dfabae29903a8",
"body": "CI PR review: --graph-only + --run-tool flags, pr_context markdown\noutput, GitHub Action workflow template.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.17.5",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-28T17:21:05Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "aa10a2fe46ab6567854ea0e95971b19546281ecb",
"body": "…H Action\n\nEnables codegraph as a GitHub Action that posts a code-graph PR review\ncomment on every PR, with no embeddings and no API keys.\n\nNew server flags (main.rs):\n --graph-only skip embedding generation entirely (no ONNX model\n load, 10-50× faster index). Structural too\n[…]\nded)\n - Updates existing comment instead of spamming new ones\n\nREADME: GitHub Action section + --graph-only/--run-tool flag docs.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: CI PR review — --graph-only, --run-tool, pr_context markdown, G…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-28T06:15:38Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "580b65233c02cdacaf202830f439db32bdb74935",
"body": "… to 42\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: README — add pr_context tool + usage example, update tool count…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-27T18:11:20Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "1d5bb7841e10e81dbde3799800b340b7ba01745b",
"body": "Rolls up: enhanced pr_context (diff-aware, test gaps, doc cross-ref,\ncomplexity, commit hints, reviewer blame), graph_stats on get_ai_context,\ndegradation warning, compact verify_design, Tempera mention in README.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.17.4",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-27T18:03:59Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a4723fc3b9d30368b106350308082d3e5238c2ab",
"body": "Rewrote codegraph_pr_context from basic file-listing to a rich PR\nreview tool. All 6 enhancements implemented in one pass:\n\n1. Diff-aware change classification (#85): parses git diff -U0 hunks\n to determine which functions had signature changes (breaking for\n callers) vs body-only changes (calle\n[…]\nrom git diff --numstat,\nbreaking flag on caller entries when signature changed, risk_level\nnow factors in untested function count.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(pr_context): 6 enhancements — diff-aware, test gaps, docs, blame",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-27T17:58:23Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "86d280fe68792d8771bfa8ab5637a3377693e49a",
"body": "New tool that combines git diff + code graph analysis for PR review:\n\n codegraph_pr_context(baseBranch?: \"main\", compact?: false)\n\n1. Runs git diff <base>...HEAD to find changed files\n2. For each changed file, finds function-level nodes in the graph\n3. Collects all direct callers (blast radius)\n4. \n[…]\nearch —\nconnects codegraph to the PR review workflow that every team does.\n\nAdded to Graph tool profile. 42 community tools total.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: codegraph_pr_context — analyze branch changes in one call",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-27T17:50:22Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e462f27e8088a9536f8d369e472ecfe9fda41e5c",
"body": "Rolls up:\n - graph_stats on get_ai_context (context compression visible)\n - Degradation warning on all tools when workspace not indexed\n - compact mode on verify_design\n - Tempera mention in README Memory section\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.17.3",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-27T06:29:52Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "212aa3fdccd2972b6588cf26ebd425884890ca54",
"body": "Two \"marketing-as-logging\" features that make codegraph's value visible\nin every tool response:\n\n1. graph_stats on get_ai_context — every response now includes:\n {\"graphStats\": {\"entitiesInGraph\": 13555, \"entitiesTraversed\": 47,\n \"entitiesKept\": 8, \"outputTokens\": 4000}}\n This surfaces the com\n[…]\necks graph state + injects warning) and execute_tool_inner (the\nexisting tool dispatch). Zero changes to tool handlers themselves.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat: graph_stats on get_ai_context + degradation warning on all tools",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-27T06:15:45Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "acba9336a4964812271bc3a739665e00bb4828ba",
"body": "…ed item lists\n\nverify_design on a 132-identifier README produced 70KB of output; the\nreverse direction on 4,504 symbols produced 598KB. Both overflowed\nClaude's inline display limit.\n\nNew `compact: true` param (default false, auto-true for design_gaps):\n - Forward: returns counts + gap_items only \n[…]\ns ~70KB full for forward,\n ~200 bytes vs ~598KB for reverse\n\nAgents that need the full list can pass compact: false explicitly.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(docs): compact mode for verify_design — skip verified/undocument…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T22:51:43Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ded8d9782fdcb8301d802fd7c9f01d121107dcc1",
"body": "package-npm.sh --publish now runs mcp-publisher after npm publish\nto keep the official MCP Registry in sync. Falls back to a manual\nreminder if mcp-publisher isn't installed.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: auto-publish to MCP Registry after npm publish",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T16:34:29Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "f8f10492f80484740a1304e4bfb07948d0e9d11b",
"body": "Rolls up post-0.17.1 fixes:\n - URI format examples in all tool descriptions\n - MCP server telemetry via stderr TEL: protocol\n - GitHub Sponsors FUNDING.yml\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.17.2",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T06:27:50Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e0534cee96ef497531ca7f5fe6841da69afb7476",
"body": "FUNDING.yml enables the Sponsor button on the repo page.\nREADME gets a brief \"Support the project\" section above License —\nno nags in the extension or CLI, just a single line with the\nsponsor link for users who find value and want to give back.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: enable GitHub Sponsors + add support section to README",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T03:16:12Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "64a6d9b7a63e187228a2d54aa2a00f04f512e290",
"body": "…ions\n\nAgents frequently pass bare paths (src/main.rs) instead of file URIs\n(file:///Users/me/project/src/main.rs) and get cryptic errors. Every\ntool that accepts a uri parameter now includes an example in its\ndescription so the agent sees the expected format in the tool schema.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(tools): add file:/// URI format example to all uri param descript…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T03:04:01Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "e2569a4d98cffe75ba1fb0490dc347becdf8997e",
"body": "Was showing 28 tools / 17 languages — now 41 tools / 38 languages.\nAdded: --profile flag, agent rules link, Documentation tools section\n(7 tools), telemetry disclosure + opt-out, full language list.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: sync mcp-package README to 0.17.1",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T02:10:02Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "bd82b0edf7df20b5e0a3b44f15e1462d7180292e",
"body": "370 weekly npm downloads with zero visibility into what MCP users\ndo. Adds telemetry to the MCP server path using a two-layer design:\n\nRust binary (server.rs):\n emit_tel() writes structured JSON lines to stderr prefixed with\n \"TEL: \" — no network calls, no new deps, binary stays pure stdio.\n Even\n[…]\ncp to distinguish from VS Code.\n\nposthog-node added as a regular dependency (npm resolves on install,\nnot bundled in the tarball).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(telemetry): MCP server telemetry via stderr TEL: protocol",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T02:08:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c1bf2e5961a4b5f8bff998c50901e21615a67c90",
"body": "…ace (0.17.1)\n\nFive fixes rolled into one commit:\n\n1. Crash-loop cap (extension.ts): after 3 server crashes within 60s,\n stop auto-restarting and show a persistent error with \"Retry\" /\n \"Open Output\" buttons.\n\n2. Spawn-fail errorHint (reporter.ts): spawn_fail telemetry now\n includes a privacy-\n[…]\npackage.json,\nmcp-package/package.json, mcp-package/server.json.\n\nIndexer file count on codegraph repo: 776 → 467 (40% reduction).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix: crash-loop cap, spawn_fail diagnostics, exclude list, indexing r…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-26T01:48:05Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "240d4c192516f0da4cf75610f11a11ccb8ae8f82",
"body": "The package-vsix.sh script now copies CHANGELOG.md from the repo root\ninto vscode/ before running vsce package. VS Code marketplace renders\nit as a \"Changelog\" tab alongside the README — advertises new features\n(especially the 0.17.0 Documentation Intelligence suite) to users\nbrowsing the extension \n[…]\nge.\n\nThe copied file is a build artifact (gitignored at vscode/CHANGELOG.md)\nso the single source of truth stays at the repo root.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(packaging): copy CHANGELOG.md into VSIX",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T23:29:31Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "2eb64002dec6d0c9aedeae1bb8538a6d6c3efc82",
"body": "Structured changelog with highlights per release. Shows in VS Code's\nextension detail view and gives users a quick summary of what's new —\nespecially the Documentation Intelligence suite in 0.17.0.\n\nCovers: 0.17.0, 0.16.6, 0.16.4, 0.16.3, 0.16.0. Each entry focuses\non user-facing changes, not internal refactoring.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: add CHANGELOG.md covering 0.16.0 through 0.17.0",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T23:25:48Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a28bd6c1d45683cadf0d232c6aabd633153b1c2c",
"body": "- Added Documentation (7) tool table covering the full docs suite\n- Added Usage Examples section with 7 concrete tool invocations:\n index + search, verify_design, design_gaps, generate_architecture_doc,\n memory_store with agentSource, get_ai_context auto-augment, --profile\n- Updated tool count hea\n[…]\nErlang/OCaml/Perl additions)\n- Updated architecture diagram: added \"Docs store (RocksDB+HNSW)\" layer,\n fixed parser count 37 → 38\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: README — docs tools section, usage examples, updated counts",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T17:22:41Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "bbead47a190d4cede546fe5378b61902a799547b",
"body": "Minor version bump — 7 new docs tools represent a significant\ncapability addition (doc indexing, search, verification, generation):\n\n codegraph_index_markdown Index local .md into persistent store\n codegraph_search_docs Semantic search over indexed docs\n codegraph_list_doc_source\n[…]\ntools.\nVersion touch points: Cargo workspace, vscode/package.json,\nmcp-package/package.json, mcp-package/server.json — all 0.17.0.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.17.0",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T17:14:17Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4712c497323f7201dfe2c29379105d169eee0c28",
"body": "Two additions to the docs tool suite:\n\n codegraph_generate_architecture_doc(topN?, scope?)\n Generates a structured ARCHITECTURE.md from the live code graph\n in one call. Covers: project overview (files/functions/languages),\n per-module summaries (top complex functions, external deps,\n l\n[…]\nalse positives in multi-language projects;\ngeneration + forward verify is the practical workflow.\n\nTool count: 41 community tools.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(docs): codegraph_generate_architecture_doc + bidirectional verify",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T16:47:57Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "b3238eab800b2214fe3f0df97d1d8ab18bfbcc11",
"body": "verify_design was one-directional (doc→code only). Now supports:\n\n forward (default): doc claims → code existence. \"Does everything\n the doc says exist in code?\" Same as before.\n\n reverse: code → doc. \"Are public symbols documented?\" Iterates\n all public/exported symbols in the code graph (f\n[…]\ng. module-level only, or configurable\nvisibility threshold) can layer on later for different project\ntypes without schema changes.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(docs): bidirectional verify_design — direction=forward|reverse|both",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T06:59:06Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d2011e535f89d92ccfcd63650922ba02d8f51063",
"body": "… (Phases 2-3)\n\nBuilds on the Phase 1 index_markdown + search_docs foundation:\n\nPhase 1.5 — Utility tools:\n codegraph_list_doc_sources List all indexed source files\n codegraph_remove_doc_source Remove all chunks from a source\n\nPhase 2 — Design context auto-augmentation:\n get_ai_context now a\n[…]\nls).\nMemory profile now exposes 13 tools (7 memory + 6 docs).\n1 new unit test for identifier extraction (10 total in docs module).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(docs): utility tools + design_context auto-augment + verify/gaps…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T06:34:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e6226c2208411b3a284cdc8de0891ec5bb653cd2",
"body": "Two new MCP tools for persisting project documentation across sessions:\n\n codegraph_index_markdown(path, maxChunkWords?)\n Parses a local markdown file into a heading-tree structure, embeds\n only LEAF nodes (the deepest heading in each branch, typically\n 50-500 words — right in BGE-small's \n[…]\nse-drop pattern)\n - 9 unit tests (leaf extraction, heading paths, preamble, paragraph\n split, injection detection, edge cases)\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(docs): codegraph_index_markdown + codegraph_search_docs (Phase 1)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T06:15:49Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "17d1417beb3b9938506a80104b1efc10bddf90ed",
"body": "Rolls up three onboarding improvements from competitor research vs\nNia (trynia.ai). These directly benefit newly arriving users — the\nextension just crossed 742 marketplace installs with a 42/day\nspike, so optimizing first-impression behavior matters:\n\n 4bca541 feat(indexer): hardened exclude list\n[…]\n-package/package.json: 0.16.5 → 0.16.6\n - mcp-package/server.json: 0.16.5 → 0.16.6\n\nCross-platform rebuild + repackage to follow.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.16.6",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T04:07:18Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3fcb8f31218cd60bcce8edb70233135f7ca220d2",
"body": "Adds an optional agentSource tag to memory entries identifying\nwhich AI agent stored each memory (\"claude\", \"cursor\", \"windsurf\",\n\"codex\", \"cline\", or a free-form value). Surfaces in\ncodegraph_memory_list / search / get output so users running\nmultiple agents on the same project can see which agent\n\n[…]\nis.\n\n2 new tests:\n - test_memory_search_result_serializes_agent_source_when_set\n - test_memory_store_params_accepts_agent_source\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(memory): agent_source tag for cross-agent attribution",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T04:06:29Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "45e096d78a76e15fb3019a98d69e088f5db4ecd9",
"body": "…y|all\n\nThe full 32-tool MCP surface is large enough that agents pay\nnon-trivial prompt-context cost listing them on every session.\nLets the user narrow the surface to a named slice:\n\n --profile=core 8 tools — search + symbol info + AI context\n --profile=graph 16 tools — callers/callees/de\n[…]\nincludes_expected_tools_only\n - test_profile_graph_excludes_admin_and_memory\n - test_profile_security_filters_community_to_empty\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(mcp): scoped tool profiles — --profile=core|graph|memory|securit…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T04:06:15Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "4bca54198d0a281249dea4b406c231db97c4bc0e",
"body": "Expands the workspace walker's defaults to cut two problem classes:\n\n 1. **Indexer runaway on large workspaces** — pre-0.16.5 the\n default_exclude_dirs list was 14 entries focused on classic\n build outputs (node_modules, target, .git etc.). Newer\n workspaces with Python venvs, Next.js b\n[…]\nunit tests:\n - default_exclude_dirs_includes_python_node_and_credential_dirs\n - build_exclude_set_filters_secret_file_extensions\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(indexer): hardened exclude list with secret-file extensions",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T04:06:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "3bb7555a649d2fc6ae6fd8a123f7fbd8f7af5506",
"body": "Three sync-ups to the README that drifted from reality:\n\n 1. `--profile` flag (added in 0.16.5 follow-up). New sub-table lists\n all 5 profiles (all / core / graph / memory / security) with tool\n counts and recommended use cases. Notes the CODEGRAPH_TOOL_PROFILE\n env var as an alternativ\n[…]\n a note about secret-file glob patterns (.pem/.key/.p12/.kdbx/\n id_rsa etc.) as defense-in-depth against accidental embedding.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: document --profile, granite-97m, and refreshed exclude list",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T04:05:42Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "48051a336beb797c58d529f62a3653fff02fb947",
"body": "Rule files for AI coding agents (Claude / Cursor / Windsurf / Codex /\nCline) live in a separate repo so end users grabbing them don't have\nto clone the ~250 MB Rust codebase for a few KB of markdown. Follows\nthe Nia rules-for-agents pattern.\n\nRepo: https://github.com/codegraph-ai/codegraph-rules-for-agents\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "docs: link to codegraph-rules-for-agents repo",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-25T03:59:42Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "a94e3ba3d4647bbbf7b60ef896dacb8be05f4da8",
"body": "Two small packaging improvements rolled into one commit:\n\n1. vscode/.vscodeignore — exclude .env and .env.* from the shipped\n extension package. The PostHog ingestion key in vscode/.env is\n public-safe by design (every client SDK ships it; PostHog\n documents that ingestion keys are not secret)\n[…]\ns rebuilt with this commit applied: 59 files\neach (was 60), .env confirmed absent via `unzip -l`, file size\nunchanged at 92.18 MB.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(packaging): exclude .env from VSIX; add combined-VSIX step",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-24T19:19:32Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "aa1914b166dcda4e7477557b0912caaa636b87bf",
"body": "Rolls up two source changes that aren't yet in any shipped binary:\n - db53c99 fix(server): ungraceful-shutdown LOCK cascade\n - 57c1795 test(server): cfg(test) glibc 2.31 shim for SLES lib tests\n\nVersion touch points aligned in one commit so npm + marketplace +\nRust workspace all read 0.16.5:\n -\n[…]\n and loud error\nsurfacing when graph.db can't be opened. macOS arm64, Windows\nx86_64, and SLES 15-SP4 x86_64 all verified passing.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.16.5",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-24T08:12:16Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "693d7b495f214a7ebf9bdc747cff37bb450908ba",
"body": "The npm + marketplace product version moved through 0.16.0 → 0.16.4\nwithout the underlying Rust [workspace.package].version following. As\na result, every shipped codegraph-server binary up through 0.16.4 has\nbeen reporting \"v0.15.0 (<hash>-dirty)\" in --info, which makes\nsupport reports unnecessarily\n[…]\nrelease builds will report\n\"codegraph-server v0.16.4 (<hash>)\" matching package.json,\nserver.json, and the vscode/v0.16.4 git tag.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: align Rust workspace version to 0.16.4",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-24T07:36:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "57c1795b47a1659339aa7b4e795828539f84ac8f",
"body": "Background: codegraph-server/src/main.rs already has a\n__libc_single_threaded shim that lets ONNX Runtime C++ deps link\non SLES 15-SP4 (glibc 2.31; the symbol arrived in glibc 2.32). The\nshim is in main.rs because the binary target is the only path that\nships to users.\n\n`cargo test --lib -p codegrap\n[…]\n via the rlib.\n\nVerified: cargo test -p codegraph-server --lib on SLES now passes\n322/322 (matches the macOS arm64 count exactly).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(server): cfg(test) glibc 2.31 shim for SLES lib tests",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-24T07:32:09Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "db53c992028ec9fde35cbb9a6a27923ff477a01e",
"body": "When codegraph-server panics or is SIGKILL'd mid-persist, RocksDB's\nLOCK file at ~/.codegraph/graph.db/LOCK can be left in place. The\nnext launch's DB::open then fails with a lock error, and the old\nfallback collapsed that into \"no persisted graph found\" — silently\ndowngrading the session to memory-\n[…]\nd)\n\nNo version bump — the fix ships in the next 0.16.x rebuild rather\nthan re-cutting binaries against the still-published 0.16.4.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(server): defend against ungraceful-shutdown LOCK cascade",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-24T07:32:02Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "ac0b32876670ccdcdedcd64e7476338340b11ae6",
"body": "Rolls up fix from c01ae17 — UTF-8-safe truncation across all\nproduction byte-slice sites. Without rebuilt binaries, the\nTypeScript-only version bump wouldn't ship the actual fix (the\npanicking code is in the Rust server).\n\nVersion touch points aligned:\n - vscode/package.json: 0.16.3 → 0.16.4\n - mc\n[…]\nross-platform binaries rebuilt on all 4 targets and re-staged in\nvscode/bin/ + mcp-package/bin/ so the UTF-8 fix ships everywhere.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.16.4 (issue #3 UTF-8 panic fix)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-23T18:42:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c01ae17d55a07008ef969d6cc25f8241e846df1d",
"body": "Reported by MermaidFAR: codegraph-server panics indexing C/C++/ObjC\nsource trees with CJK comments. Root cause: `crates/codegraph-c/src/\nextractor.rs` had `&source[..4096]` raw byte slice that panics\nwhenever a 3-byte (CJK) or 4-byte (emoji) UTF-8 char straddles the\n4096-byte boundary. Symptom: code\n[…]\ngraph-lua:215 use byte indices that are guaranteed\nchar-boundary by surrounding logic (ASCII quote/find positions);\nverified safe.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(parsers): UTF-8-safe byte-slice truncation everywhere (issue #3)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-23T18:22:25Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "c5279475ac55b51d7620c71d0364650540c6d54b",
"body": "Rolls up two PATCH fixes into a single release:\n - 932ad0b fix(vscode): Windows path quoting (issue #2)\n - e2f2329 fix(typescript): tolerate parse errors (issue #1)\n\nVersion touch points aligned:\n - vscode/package.json: 0.16.2 → 0.16.3 (extension)\n - mcp-package/package.json: 0.16.1 → 0.16.3 (\n[…]\nhe TS extractor fix from\ne2f2329 actually ships (it lives in the Rust codegraph-server\nbinary, not the TypeScript extension code).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore: bump community to 0.16.3 (issues #1 + #2)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-22T07:27:00Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e2f232940641a7c11456f878db894af9b9a42cba",
"body": "…e (issue #1)\n\nPre-fix: `extractor.rs` rejected the entire file with a hardcoded\n`SyntaxError(path, 0, 0, \"Syntax error in source code\")` whenever\n`root_node.has_error()` was true. Symptoms in issue #1: 12\nTypeScript files were dropped with \"Syntax error at 0:0\" even\nthough they parse cleanly with `\n[…]\nrest of the file plus a precise warning showing where the\nparser tripped — enabling a clean upstream-grammar bug report if\nneeded.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(typescript): tolerate parse errors instead of rejecting whole fil…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-22T07:06:40Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "932ad0b4bc0a1be5af8efd8c1654eba47448d16f",
"body": "LanguageClient with `shell: true` on Windows routes the command\nthrough cmd.exe, which splits an unquoted path at any space. Users\nwhose Windows username contains a space (e.g. \"Muhammad Daniyal\",\n\"John Doe\") got:\n\n 'c:\\Users\\Muhammad' is not recognized as an internal or\n external command, operabl\n[…]\nn 0.16.1 → 0.16.2 (PATCH — fix only,\nno API or behavior change for other platforms).\n\nGitHub issue #2 (DaniMughal371, 2026-04-30).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(vscode): quote server binary path on Windows (issue #2)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-22T07:06:21Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "d3a6672c0460222c9e1dd9d9401060001748ff75",
"body": "…' not 'unknown'\n\nThe community `activate()` fired `activation.start` BEFORE the binary\ndiscovery resolved an edition, so every community session shipped\nthat first event with `serverEdition: \"unknown\"`. PostHog dashboards\ncounting community activations from `activation.start` therefore\nundercount.\n\n[…]\n` followed by `activation.serverStartResult → \"community\"`.\n\nVersion 0.16.0 → 0.16.1 (PATCH — label fix only, no behavior change).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "fix(vscode/telemetry): label community activation.start as 'community…",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-20T06:13:07Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cf9bfc6db3ae842ab22bc1cdfadbcb2070030467",
"body": "Adds an opt-out anonymous-telemetry subsystem to the community VS Code\nextension. 507 marketplace installs and zero visibility today; this\ngives decision-grade signal for the next ~6 months of product work.\n\nSurface:\n - Activation lifecycle (start / server start result / tool reg) 100%\n - Indexing\n[…]\ngeBreakdown\nin one cycle.\n\nVersion bumped 0.15.0 → 0.16.0 (MINOR — additive feature, 3 new\nopt-out settings, no breaking changes).\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(vscode): anonymous telemetry (v0.16.0)",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-20T04:49:03Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "cb120d049804fcc07c22c7f14eedb316d667c59c",
"body": "Enriches IndexResult with two HashMaps populated during the parser\ndispatch: by_language (counts of files claimed by each parser) and\nparser_errors_by_language (counts of tree-sitter parse failures\nattributed by language). index_directory's return tuple grew from\n(total, parsed, skipped) → (total, p\n[…]\n\n3 call-site fixups for the new tuple shape (backend.rs ×2,\nmcp/server.rs ×1) — non-functional, just destructure the extra\nfields.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "feat(server): per-language file counts + duration in reindex response",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-20T04:48:37Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "216f969b5327082eee90ba2d349f968185c22363",
"body": "- Bump server.json + package.json to 0.15.0 to match the binary build.\n- README counts updates.\n- New install-hooks.js + hooks/codegraph-pre-edit.{sh,ps1}: optional\n Claude Code pre-edit hook scaffolded by postinstall.js so users\n can opt into incremental codegraph context on every Edit/Write\n if they want.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "chore(mcp-package): version bumps + pre-edit hook installer",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-20T04:48:27Z",
"body_truncated": false,
"is_coding_agent": true
},
{
"oid": "5ece5880d30ee986e0e67f0a8879e81374b24a77",
"body": "Companion to pro commit 140f90a. Adds a Rust fixture exercising the\nnew user-space clear-site tokens (.shutdown() / .close() / .destroy()\n/ .take() / = None) so cleanup_pattern mode catches Rust user-space\nteardowns, not just kernel-style clearing.\n\nFixture has close_session as anchor (3 mixed clear\n[…]\n, plus close_one_fd (1 clear-site,\nexcluded) and compute_hash (non-teardown name, excluded). Bless\ncaptured both expected matches.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(harness/find_similar): Rust cleanup_pattern regression case",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-17T07:15:50Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "7311fb018206803a54c96ef216772a560e1d67e4",
"body": "Companion to pro commit 930f929. Adds two negatives to the c_fail_open_\nprecondition fixture exercising each FP class from the bounty memo:\n\n - is_predicate_safe — predicate-named function with body\n containing `return false`; `if (!task) return 0;` is DENY (not\n fail-open) under the new er\n[…]\n__ptrace_may_access errno-style,\ncheck_admin_access multi-line errno, is_authorized predicate-named\nreturning 1) continue to fire.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(harness/fail_open_verify): Shape A FP regression coverage",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-17T07:14:28Z",
"body_truncated": true,
"is_coding_agent": true
},
{
"oid": "e0c99f7c17be2d6c8e6375c1b749cc36fa12c421",
"body": "Companion to pro commit b6a06e6. Fixture has do_exit_like as the\nanchor target plus four candidate functions designed to exercise\nboth filter axes:\n - cleanup_resources: teardown name + 2 clear-sites → MATCH\n - destroy_session: teardown name + 2 clear-sites → MATCH\n - close_one_fd: teardow\n[…]\nLUDED\n\nThe two excluded teardown-vs-not pairs validate the regex; the\nsingle-clear-site exclusion validates the ≥2 body heuristic.\n\nCo-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>",
"is_bot": false,
"headline": "test(harness/find_similar): cleanup_pattern mode regression case",
"author_name": "Andrey Vasilevsky",
"author_login": "anvanster",
"committed_at": "2026-05-17T04:22:29Z",
"body_truncated": true,
"is_coding_agent": true
}
],
"releases_count": 1,
"commits_last_year": 144,
"latest_release_at": "2026-06-30T05:24:44Z",
"latest_release_tag": "model",
"releases_from_tags": false,
"days_since_last_push": 6,
"active_weeks_last_year": 14,
"days_since_latest_release": 25,
"mean_days_between_releases": null
},
"community": {
"has_readme": true,
"has_license": true,
"has_description": true,
"has_contributing": false,
"health_percentage": 50,
"has_issue_template": false,
"has_code_of_conduct": false,
"has_pull_request_template": false
},
"ecosystem": {
"packages": [
{
"name": "codegraph",
"exists": true,
"license": null,
"keywords": [],
"ecosystem": "npm",
"matches_repo": null,
"registry_url": "https://www.npmjs.com/package/codegraph",
"is_deprecated": false,
"latest_version": "1.0.0",
"repository_url": null,
"versions_count": 1,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 3043,
"first_published_at": "2024-09-09T07:28:47.613000Z",
"latest_published_at": "2024-09-09T07:28:47.787000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 684
},
{
"name": "@astudioplus/codegraph-mcp",
"exists": true,
"license": "Apache-2.0",
"keywords": [
"mcp",
"model-context-protocol",
"code-intelligence",
"code-graph",
"ai",
"claude",
"cursor",
"copilot"
],
"ecosystem": "npm",
"matches_repo": true,
"registry_url": "https://www.npmjs.com/package/@astudioplus/codegraph-mcp",
"is_deprecated": false,
"latest_version": "0.19.1",
"repository_url": "https://github.com/codegraph-ai/CodeGraph",
"versions_count": 23,
"total_downloads": null,
"dependents_count": null,
"deprecation_note": null,
"maintainers_count": 1,
"monthly_downloads": 4272,
"first_published_at": "2026-04-05T06:45:20.090000Z",
"latest_published_at": "2026-07-19T19:03:33.114000Z",
"latest_version_yanked": null,
"days_since_latest_publish": 5
}
]
},
"popularity": {
"forks": 6,
"stars": 45,
"watchers": 0,
"fork_history": {
"days": [
{
"date": "2026-05-16",
"count": 1
},
{
"date": "2026-06-13",
"count": 1
},
{
"date": "2026-06-24",
"count": 2
},
{
"date": "2026-06-30",
"count": 1
},
{
"date": "2026-07-09",
"count": 1
}
],
"complete": true,
"collected": 6,
"total_forks": 6
},
"star_history": null,
"open_issues_and_prs": 2
},
"ai_readiness": {
"has_nix": false,
"example_dirs": [
"examples"
],
"has_llms_txt": false,
"has_dockerfile": true,
"has_mcp_signal": false,
"bootstrap_files": [],
"api_schema_files": [],
"has_devcontainer": false,
"typecheck_configs": [
"vscode/tsconfig.json"
],
"toolchain_manifests": [
"Cargo.toml",
"crates/codegraph-bash/Cargo.toml",
"crates/codegraph-c/Cargo.toml",
"crates/codegraph-clojure/Cargo.toml",
"crates/codegraph-cobol/Cargo.toml",
"crates/codegraph-cpp/Cargo.toml",
"crates/codegraph-csharp/Cargo.toml",
"crates/codegraph-css/Cargo.toml",
"crates/codegraph-dart/Cargo.toml",
"crates/codegraph-dockerfile/Cargo.toml",
"crates/codegraph-elixir/Cargo.toml",
"crates/codegraph-elm/Cargo.toml",
"crates/codegraph-erlang/Cargo.toml",
"crates/codegraph-fortran/Cargo.toml",
"crates/codegraph-go/Cargo.toml",
"crates/codegraph-groovy/Cargo.toml",
"crates/codegraph-harness/Cargo.toml",
"crates/codegraph-haskell/Cargo.toml",
"crates/codegraph-hcl/Cargo.toml",
"crates/codegraph-java/Cargo.toml",
"crates/codegraph-julia/Cargo.toml",
"crates/codegraph-kotlin/Cargo.toml",
"crates/codegraph-lua/Cargo.toml",
"crates/codegraph-memory/Cargo.toml",
"crates/codegraph-objc/Cargo.toml",
"crates/codegraph-ocaml/Cargo.toml",
"crates/codegraph-parser-api/Cargo.toml",
"crates/codegraph-perl/Cargo.toml",
"crates/codegraph-php/Cargo.toml",
"crates/codegraph-python/Cargo.toml",
"crates/codegraph-r/Cargo.toml",
"crates/codegraph-ruby/Cargo.toml",
"crates/codegraph-rust/Cargo.toml",
"crates/codegraph-scala/Cargo.toml",
"crates/codegraph-server/Cargo.toml",
"crates/codegraph-solidity/Cargo.toml",
"crates/codegraph-swift/Cargo.toml",
"crates/codegraph-tcl/Cargo.toml",
"crates/codegraph-toml/Cargo.toml",
"crates/codegraph-typescript/Cargo.toml",
"crates/codegraph-verilog/Cargo.toml",
"crates/codegraph-yaml/Cargo.toml",
"crates/codegraph-zig/Cargo.toml",
"crates/codegraph/Cargo.toml",
"vs-extension/src/CodegraphExtension/CodegraphExtension.csproj"
],
"largest_source_bytes": 30660349,
"source_files_sampled": 552,
"oversized_source_files": 17,
"agent_instruction_files": [],
"agent_instruction_max_bytes": null
},
"dependencies": {
"manifests": [
"Cargo.toml",
"mcp-package/package.json",
"vscode/package.json"
],
"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": [
"crates",
"npm"
],
"dependencies": [
{
"name": "posthog-node",
"manifest": "mcp-package/package.json",
"ecosystem": "npm",
"version_constraint": "^4.18.0"
},
{
"name": "posthog-node",
"manifest": "vscode/package.json",
"ecosystem": "npm",
"version_constraint": "^4.18.0"
},
{
"name": "vscode-languageclient",
"manifest": "vscode/package.json",
"ecosystem": "npm",
"version_constraint": "^9.0.1"
}
],
"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": 2,
"merged_prs": 4,
"open_issues": 0,
"closed_ratio": 1,
"closed_issues": 5,
"closed_unmerged_prs": 1
},
"bus_factor": 1,
"bot_contributors": 0,
"top_contributors": [
{
"type": "User",
"login": "anvanster",
"commits": 144,
"avatar_url": "https://avatars.githubusercontent.com/u/72588463?v=4"
}
],
"contributors_sampled": 1,
"top_contributor_share": 1
},
"quality_signals": {
"has_ci": true,
"has_tests": true,
"ci_workflows": [
"codegraph-pr.yml"
],
"has_docs_dir": true,
"linter_configs": [],
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"security_signals": {
"lockfiles": [
"Cargo.lock",
"package-lock.json"
],
"scorecard": {
"checks": [
{
"name": "Binary-Artifacts",
"score": 10,
"reason": "no binaries found in the repo",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
},
{
"name": "Branch-Protection",
"score": 0,
"reason": "branch protection not enabled on development/release branches",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
},
{
"name": "CI-Tests",
"score": 10,
"reason": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
},
{
"name": "CII-Best-Practices",
"score": 0,
"reason": "no effort to earn an OpenSSF best practices badge detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
},
{
"name": "Code-Review",
"score": 0,
"reason": "Found 0/5 approved changesets -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
},
{
"name": "Contributors",
"score": 3,
"reason": "project has 1 contributing companies or organizations -- score normalized to 3",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
},
{
"name": "Dangerous-Workflow",
"score": 10,
"reason": "no dangerous workflow patterns detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
},
{
"name": "Dependency-Update-Tool",
"score": 0,
"reason": "no update tool detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
},
{
"name": "Fuzzing",
"score": 0,
"reason": "project is not fuzzed",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
},
{
"name": "License",
"score": 10,
"reason": "license file detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
},
{
"name": "Maintained",
"score": 10,
"reason": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
},
{
"name": "Packaging",
"score": null,
"reason": "packaging workflow not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
},
{
"name": "Pinned-Dependencies",
"score": 0,
"reason": "dependency not pinned by hash detected -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
},
{
"name": "SAST",
"score": 0,
"reason": "SAST tool is not run on all commits -- score normalized to 0",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
},
{
"name": "Security-Policy",
"score": 0,
"reason": "security policy file not detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
},
{
"name": "Signed-Releases",
"score": 0,
"reason": "Project has not signed or included provenance with any releases.",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
},
{
"name": "Token-Permissions",
"score": 10,
"reason": "GitHub workflow tokens follow principle of least privilege",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
},
{
"name": "Vulnerabilities",
"score": 0,
"reason": "51 existing vulnerabilities detected",
"documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
}
],
"commit": "06bcc88cd0a68274e87e7b6117da1651f83d212f",
"ran_at": "2026-07-25T18:04:42Z",
"aggregate_score": 3.8,
"scorecard_version": "v5.5.0"
},
"has_codeql_workflow": false,
"has_security_policy": false,
"has_dependabot_config": false
},
"contribution_flow": {
"collected": true,
"ci_last_run_at": null,
"oldest_open_prs": [
{
"number": 9,
"created_at": "2026-07-02T08:22:57Z",
"last_comment_at": "2026-07-02T08:23:27Z",
"last_comment_author": "github-actions"
},
{
"number": 12,
"created_at": "2026-07-09T18:17:38Z",
"last_comment_at": null,
"last_comment_author": null
}
],
"last_merged_pr_at": "2026-07-19T05:05:31Z",
"ci_last_conclusion": null,
"oldest_open_issues": []
}
},
"config": {
"disabled_metrics": [],
"disabled_categories": [],
"disabled_components": {}
},
"source": {
"url": "https://github.com/codegraph-ai/CodeGraph",
"host": "github.com",
"name": "CodeGraph",
"owner": "codegraph-ai"
},
"metrics": {
"overall": {
"key": "overall",
"band": "moderate",
"name": "Overall health",
"note": null,
"notes": [],
"value": 59,
"inputs": {
"security": 38,
"vitality": 75,
"community": 46,
"governance": 53,
"engineering": 75
},
"components": []
},
"categories": [
{
"key": "vitality",
"band": "good",
"name": "Vitality",
"value": 75,
"weight": 0.22,
"metrics": [
{
"key": "development_activity",
"band": "good",
"name": "Development activity",
"note": null,
"notes": [],
"value": 74,
"inputs": {
"commits_last_year": 144,
"human_commit_share": 1,
"days_since_last_push": 6,
"active_weeks_last_year": 14
},
"components": [
{
"key": "push_recency",
"name": "Push recency",
"detail": "last push 6 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "push_recency",
"params": {
"days": 6
}
}
],
"max_points": 36
},
{
"key": "commit_cadence",
"name": "Commit cadence",
"detail": "14/52 weeks with commits",
"points": 9.7,
"status": "partial",
"details": [
{
"code": "commit_cadence_weeks",
"params": {
"weeks": 14
}
}
],
"max_points": 36
},
{
"key": "commit_volume",
"name": "Commit volume",
"detail": "144 commits in the last year",
"points": 18,
"status": "met",
"details": [
{
"code": "commits_last_year",
"params": {
"count": 144
}
}
],
"max_points": 18
},
{
"key": "openssf_scorecard_maintained",
"name": "OpenSSF Scorecard: Maintained",
"detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
}
]
},
{
"key": "release_discipline",
"band": "good",
"name": "Release discipline",
"note": null,
"notes": [],
"value": 76,
"inputs": {
"releases_count": 1,
"latest_release_tag": "model",
"releases_from_tags": false,
"days_since_latest_release": 25,
"mean_days_between_releases": null
},
"components": [
{
"key": "ships_releases",
"name": "Ships releases",
"detail": "1 releases published",
"points": 27,
"status": "met",
"details": [
{
"code": "releases_published",
"params": {
"count": 1
}
}
],
"max_points": 27
},
{
"key": "release_recency",
"name": "Release recency",
"detail": "latest release 25 days ago",
"points": 36,
"status": "met",
"details": [
{
"code": "release_recency",
"params": {
"days": 25
}
}
],
"max_points": 36
},
{
"key": "release_cadence",
"name": "Release cadence",
"detail": "cadence unknown (single release)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "release_cadence_unknown",
"params": {}
}
],
"max_points": 27
},
{
"key": "openssf_scorecard_signed_releases",
"name": "OpenSSF Scorecard: Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"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": "at_risk",
"name": "Community & Adoption",
"value": 46,
"weight": 0.18,
"metrics": [
{
"key": "popularity",
"band": "at_risk",
"name": "Popularity & adoption",
"note": null,
"notes": [],
"value": 32,
"inputs": {
"forks": 6,
"stars": 45,
"watchers": 0,
"growth_state": "unverified",
"growth_factor_pct": 100,
"growth_unverified_reason": "no_history"
},
"components": [
{
"key": "stars",
"name": "Stars",
"detail": "45 stars",
"points": 26.7,
"status": "partial",
"details": [
{
"code": "stars",
"params": {
"count": 45
}
}
],
"max_points": 60
},
{
"key": "forks",
"name": "Forks",
"detail": "6 forks",
"points": 5.8,
"status": "partial",
"details": [
{
"code": "forks",
"params": {
"count": 6
}
}
],
"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 (Apache-2.0)",
"points": 22.5,
"status": "met",
"details": [
{
"code": "license_standard",
"params": {}
},
{
"code": "license_spdx",
"params": {
"spdx": "Apache-2.0"
}
}
],
"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
}
]
},
{
"key": "ecosystem_adoption",
"band": "moderate",
"name": "Ecosystem adoption (downloads)",
"note": "Excluded from scoring (no data or not applicable): Registry dependents. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"registry_dependents"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 64,
"inputs": {
"packages": [
"codegraph",
"@astudioplus/codegraph-mcp"
],
"dependents": null,
"ecosystems": "npm",
"total_downloads": null,
"monthly_downloads": 7315
},
"components": [
{
"key": "monthly_downloads",
"name": "Monthly downloads",
"detail": "7,315 downloads/month across npm",
"points": 51.5,
"status": "partial",
"details": [
{
"code": "downloads_monthly",
"params": {
"count": 7315,
"ecosystems": "npm"
}
}
],
"max_points": 80
},
{
"key": "registry_dependents",
"name": "Registry dependents",
"detail": "not reported by this ecosystem",
"points": 0,
"status": "excluded",
"details": [
{
"code": "not_reported_by_this_ecosystem",
"params": {}
}
],
"max_points": 20
}
]
}
],
"description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
},
{
"key": "governance",
"band": "moderate",
"name": "Sustainability & Governance",
"value": 53,
"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": 1,
"top_contributor_share": 1
},
"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,
"status": "missed",
"details": [
{
"code": "top_contributor_share",
"params": {
"share": 100
}
}
],
"max_points": 22.5
},
{
"key": "contributor_breadth",
"name": "Contributor breadth",
"detail": "1 contributors",
"points": 1.4,
"status": "partial",
"details": [
{
"code": "contributors_sampled",
"params": {
"count": 1
}
}
],
"max_points": 13.5
},
{
"key": "openssf_scorecard_contributors",
"name": "OpenSSF Scorecard: Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 3,
"status": "partial",
"details": [],
"max_points": 10
}
]
},
{
"key": "responsiveness",
"band": "good",
"name": "Issue & PR responsiveness",
"note": null,
"notes": [],
"value": 77,
"inputs": {
"merged_prs": 4,
"open_issues": 0,
"closed_issues": 5,
"issue_closed_ratio": 1,
"closed_unmerged_prs": 1
},
"components": [
{
"key": "issue_resolution",
"name": "Issue resolution",
"detail": "100% of issues closed",
"points": 46.8,
"status": "met",
"details": [
{
"code": "issues_closed_share",
"params": {
"share": 100
}
}
],
"max_points": 46.75
},
{
"key": "pr_acceptance",
"name": "PR acceptance",
"detail": "4/5 decided PRs merged",
"points": 30.6,
"status": "partial",
"details": [
{
"code": "decided_prs_merged",
"params": {
"merged": 4,
"decided": 5
}
}
],
"max_points": 38.25
},
{
"key": "openssf_scorecard_code_review",
"name": "OpenSSF Scorecard: Code-Review",
"detail": "Found 0/5 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 15
}
]
},
{
"key": "stewardship",
"band": "at_risk",
"name": "Ownership & stewardship",
"note": null,
"notes": [],
"value": 38,
"inputs": {
"followers": 2,
"owner_type": "Organization",
"is_verified": null,
"owner_login": "codegraph-ai",
"public_repos": 2,
"account_age_days": 226
},
"components": [
{
"key": "ownership_backing",
"name": "Ownership backing",
"detail": "organization-owned",
"points": 30,
"status": "met",
"details": [
{
"code": "owner_organization",
"params": {}
}
],
"max_points": 30
},
{
"key": "verified_domain",
"name": "Verified domain",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "owner_reach",
"name": "Owner reach",
"detail": "2 followers of codegraph-ai",
"points": 3.4,
"status": "partial",
"details": [
{
"code": "owner_followers",
"params": {
"count": 2,
"login": "codegraph-ai"
}
}
],
"max_points": 25
},
{
"key": "track_record",
"name": "Track record",
"detail": "2 public repos, account ~0 yr old",
"points": 4.7,
"status": "partial",
"details": [
{
"code": "public_repos",
"params": {
"count": 2
}
},
{
"code": "account_age_years",
"params": {
"years": 0
}
}
],
"max_points": 25
}
]
},
{
"key": "package_maintenance",
"band": "excellent",
"name": "Package maintenance",
"note": null,
"notes": [],
"value": 100,
"inputs": {
"packages": [
"codegraph",
"@astudioplus/codegraph-mcp"
],
"ecosystems": "npm",
"any_deprecated": false,
"min_days_since_publish": 5
},
"components": [
{
"key": "published_resolvable",
"name": "Published & resolvable",
"detail": "2 package(s) on npm",
"points": 25,
"status": "met",
"details": [
{
"code": "packages_published",
"params": {
"count": 2,
"ecosystems": "npm"
}
}
],
"max_points": 25
},
{
"key": "publish_recency",
"name": "Publish recency",
"detail": "latest publish 5 days ago",
"points": 35,
"status": "met",
"details": [
{
"code": "publish_recency",
"params": {
"days": 5
}
}
],
"max_points": 35
},
{
"key": "version_history",
"name": "Version history",
"detail": "23 published versions",
"points": 20,
"status": "met",
"details": [
{
"code": "published_versions",
"params": {
"count": 23
}
}
],
"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": 75,
"weight": 0.2,
"metrics": [
{
"key": "engineering_practices",
"band": "moderate",
"name": "Engineering practices",
"note": null,
"notes": [],
"value": 68,
"inputs": {
"has_ci": true,
"has_tests": true,
"has_editorconfig": false,
"has_linter_config": false,
"has_precommit_config": false
},
"components": [
{
"key": "ci_workflows",
"name": "CI workflows",
"detail": "1 workflow(s)",
"points": 24,
"status": "met",
"details": [
{
"code": "ci_workflows",
"params": {
"count": 1
}
}
],
"max_points": 24
},
{
"key": "tests_present",
"name": "Tests present",
"detail": null,
"points": 24,
"status": "met",
"details": [],
"max_points": 24
},
{
"key": "linter_config",
"name": "Linter config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 16
},
{
"key": "pre_commit_hooks",
"name": "Pre-commit hooks",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 9.6
},
{
"key": "editorconfig",
"name": ".editorconfig",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 6.4
},
{
"key": "openssf_scorecard_ci_tests",
"name": "OpenSSF Scorecard: CI-Tests",
"detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
"points": 20,
"status": "met",
"details": [],
"max_points": 20
}
]
},
{
"key": "documentation",
"band": "excellent",
"name": "Documentation",
"note": null,
"notes": [],
"value": 85,
"inputs": {
"topics": [
"ai-coding",
"claude",
"code-analysis",
"code-indexing",
"coding-assistant",
"copilot",
"graph-database",
"semantic-search"
],
"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": "8 topics",
"points": 10,
"status": "met",
"details": [
{
"code": "topics_count",
"params": {
"count": 8
}
}
],
"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": "at_risk",
"name": "Security",
"value": 38,
"weight": 0.16,
"metrics": [
{
"key": "security_posture",
"band": "at_risk",
"name": "Security posture",
"note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
"notes": [
{
"code": "excluded_no_data",
"params": {
"components": [
"packaging"
]
}
},
{
"code": "weights_renormalized",
"params": {}
}
],
"value": 38,
"inputs": {
"source": "openssf_scorecard",
"checks_evaluated": 17,
"scorecard_version": "v5.5.0",
"checks_inconclusive": 1,
"scorecard_aggregate": 3.8
},
"components": [
{
"key": "binary_artifacts",
"name": "Binary-Artifacts",
"detail": "no binaries found in the repo",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "branch_protection",
"name": "Branch-Protection",
"detail": "branch protection not enabled on development/release branches",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "ci_tests",
"name": "CI-Tests",
"detail": "3 out of 3 merged PRs checked by a CI test -- score normalized to 10",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "cii_best_practices",
"name": "CII-Best-Practices",
"detail": "no effort to earn an OpenSSF best practices badge detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 2.5
},
{
"key": "code_review",
"name": "Code-Review",
"detail": "Found 0/5 approved changesets -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "contributors",
"name": "Contributors",
"detail": "project has 1 contributing companies or organizations -- score normalized to 3",
"points": 0.8,
"status": "partial",
"details": [],
"max_points": 2.5
},
{
"key": "dangerous_workflow",
"name": "Dangerous-Workflow",
"detail": "no dangerous workflow patterns detected",
"points": 10,
"status": "met",
"details": [],
"max_points": 10
},
{
"key": "dependency_update_tool",
"name": "Dependency-Update-Tool",
"detail": "no update tool detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "fuzzing",
"name": "Fuzzing",
"detail": "project is not fuzzed",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "license",
"name": "License",
"detail": "license file detected",
"points": 2.5,
"status": "met",
"details": [],
"max_points": 2.5
},
{
"key": "maintained",
"name": "Maintained",
"detail": "30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "packaging",
"name": "Packaging",
"detail": "packaging workflow not detected",
"points": 0,
"status": "excluded",
"details": [
{
"code": "no_data",
"params": {}
}
],
"max_points": 5
},
{
"key": "pinned_dependencies",
"name": "Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "sast",
"name": "SAST",
"detail": "SAST tool is not run on all commits -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "security_policy",
"name": "Security-Policy",
"detail": "security policy file not detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 5
},
{
"key": "signed_releases",
"name": "Signed-Releases",
"detail": "Project has not signed or included provenance with any releases.",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
},
{
"key": "token_permissions",
"name": "Token-Permissions",
"detail": "GitHub workflow tokens follow principle of least privilege",
"points": 7.5,
"status": "met",
"details": [],
"max_points": 7.5
},
{
"key": "vulnerabilities",
"name": "Vulnerabilities",
"detail": "51 existing vulnerabilities detected",
"points": 0,
"status": "missed",
"details": [],
"max_points": 7.5
}
]
}
],
"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": 59,
"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": "moderate",
"name": "Verify loop (build / test / typecheck)",
"note": null,
"notes": [],
"value": 66,
"inputs": {
"has_nix": false,
"has_tests": true,
"lockfiles": [
"Cargo.lock",
"package-lock.json"
],
"has_dockerfile": true,
"typed_language": true,
"bootstrap_files": [],
"has_devcontainer": false,
"has_linter_config": false,
"typecheck_configs": [
"vscode/tsconfig.json"
],
"agent_commit_share": 0.93,
"toolchain_manifests": [
"Cargo.toml",
"crates/codegraph-bash/Cargo.toml",
"crates/codegraph-c/Cargo.toml",
"crates/codegraph-clojure/Cargo.toml",
"crates/codegraph-cobol/Cargo.toml",
"crates/codegraph-cpp/Cargo.toml",
"crates/codegraph-csharp/Cargo.toml",
"crates/codegraph-css/Cargo.toml",
"crates/codegraph-dart/Cargo.toml",
"crates/codegraph-dockerfile/Cargo.toml",
"crates/codegraph-elixir/Cargo.toml",
"crates/codegraph-elm/Cargo.toml",
"crates/codegraph-erlang/Cargo.toml",
"crates/codegraph-fortran/Cargo.toml",
"crates/codegraph-go/Cargo.toml",
"crates/codegraph-groovy/Cargo.toml",
"crates/codegraph-harness/Cargo.toml",
"crates/codegraph-haskell/Cargo.toml",
"crates/codegraph-hcl/Cargo.toml",
"crates/codegraph-java/Cargo.toml",
"crates/codegraph-julia/Cargo.toml",
"crates/codegraph-kotlin/Cargo.toml",
"crates/codegraph-lua/Cargo.toml",
"crates/codegraph-memory/Cargo.toml",
"crates/codegraph-objc/Cargo.toml",
"crates/codegraph-ocaml/Cargo.toml",
"crates/codegraph-parser-api/Cargo.toml",
"crates/codegraph-perl/Cargo.toml",
"crates/codegraph-php/Cargo.toml",
"crates/codegraph-python/Cargo.toml",
"crates/codegraph-r/Cargo.toml",
"crates/codegraph-ruby/Cargo.toml",
"crates/codegraph-rust/Cargo.toml",
"crates/codegraph-scala/Cargo.toml",
"crates/codegraph-server/Cargo.toml",
"crates/codegraph-solidity/Cargo.toml",
"crates/codegraph-swift/Cargo.toml",
"crates/codegraph-tcl/Cargo.toml",
"crates/codegraph-toml/Cargo.toml",
"crates/codegraph-typescript/Cargo.toml",
"crates/codegraph-verilog/Cargo.toml",
"crates/codegraph-yaml/Cargo.toml",
"crates/codegraph-zig/Cargo.toml",
"crates/codegraph/Cargo.toml",
"vs-extension/src/CodegraphExtension/CodegraphExtension.csproj"
],
"dependency_bot_commit_share": 0
},
"components": [
{
"key": "one_command_bootstrap",
"name": "One-command bootstrap",
"detail": "Cargo.toml, crates/codegraph-bash/Cargo.toml, crates/codegraph-c/Cargo.toml (toolchain convention, no task runner)",
"points": 12.6,
"status": "partial",
"details": [
{
"code": "toolchain_convention",
"params": {
"files": "Cargo.toml, crates/codegraph-bash/Cargo.toml, crates/codegraph-c/Cargo.toml"
}
}
],
"max_points": 18
},
{
"key": "automated_tests",
"name": "Automated tests",
"detail": null,
"points": 22,
"status": "met",
"details": [],
"max_points": 22
},
{
"key": "lint_format_config",
"name": "Lint / format config",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 11
},
{
"key": "static_type_checking",
"name": "Static type checking",
"detail": "vscode/tsconfig.json",
"points": 11,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "vscode/tsconfig.json"
}
}
],
"max_points": 11
},
{
"key": "reproducible_environment",
"name": "Reproducible environment",
"detail": "Dockerfile, lockfile",
"points": 10,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "Dockerfile, lockfile"
}
}
],
"max_points": 10
},
{
"key": "demonstrated_agent_practice",
"name": "Demonstrated agent practice",
"detail": "93 of the last 100 commits agent-authored or agent-credited",
"points": 10,
"status": "met",
"details": [
{
"code": "agent_authored_commits",
"params": {
"count": 93,
"sampled": 100
}
}
],
"max_points": 10
},
{
"key": "automated_maintenance",
"name": "Automated maintenance",
"detail": "no automated dependency updates observed",
"points": 0,
"status": "missed",
"details": [
{
"code": "no_dependency_automation",
"params": {}
}
],
"max_points": 8
},
{
"key": "openssf_scorecard_pinned_dependencies",
"name": "OpenSSF Scorecard: Pinned-Dependencies",
"detail": "dependency not pinned by hash detected -- score normalized to 0",
"points": 0,
"status": "missed",
"details": [],
"max_points": 10
}
]
},
{
"key": "ai_code_legibility",
"band": "excellent",
"name": "Code legibility for models",
"note": null,
"notes": [],
"value": 98,
"inputs": {
"primary_language": "C",
"largest_source_bytes": 30660349,
"source_files_sampled": 552,
"oversized_source_files": 17
},
"components": [
{
"key": "type_checkable_code",
"name": "Type-checkable code",
"detail": "C (statically typed)",
"points": 45,
"status": "met",
"details": [
{
"code": "statically_typed_language",
"params": {
"language": "C"
}
}
],
"max_points": 45
},
{
"key": "manageable_file_sizes",
"name": "Manageable file sizes",
"detail": "17/552 source files over 60KB",
"points": 53.3,
"status": "partial",
"details": [
{
"code": "oversized_source_files",
"params": {
"kb": 60,
"sampled": 552,
"oversized": 17
}
}
],
"max_points": 55
}
]
},
{
"key": "ai_interfaces",
"band": "at_risk",
"name": "Machine-readable interfaces",
"note": null,
"notes": [],
"value": 40,
"inputs": {
"example_dirs": [
"examples"
],
"has_mcp_signal": false,
"api_schema_files": []
},
"components": [
{
"key": "api_schema_openapi_graphql_proto",
"name": "API schema (OpenAPI/GraphQL/proto)",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 40
},
{
"key": "mcp_server",
"name": "MCP server",
"detail": null,
"points": 0,
"status": "missed",
"details": [],
"max_points": 20
},
{
"key": "runnable_examples",
"name": "Runnable examples",
"detail": "examples",
"points": 40,
"status": "met",
"details": [
{
"code": "file_list",
"params": {
"files": "examples"
}
}
],
"max_points": 40
}
]
}
],
"description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
}
],
"metrics_version": "1.13.0"
},
"warnings": [
"Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token",
"GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
],
"report_type": "repository",
"generated_at": "2026-07-25T18:04:56.866782Z",
"schema_version": "0.27.0",
"badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/codegraph-ai/CodeGraph.svg",
"full_name": "codegraph-ai/CodeGraph",
"license_state": "standard",
"license_spdx": "Apache-2.0"
}