Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-25 18:04 UTC

codegraph-ai / CodeGraph

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.

CApache-2.0★ 45 estrellas⑂ 6 forksdesde abr 2026Ver en GitHub ↗

codegraph-ai/CodeGraph tiene un índice de salud de 59 sobre 100, lo que lo sitúa en la banda Moderado. Su puntuación más alta es Vitality (75/100) y la más baja, Security (38/100). Se actualizó por última vez hace 6 días. Una sola persona concentra la mayor parte del trabajo reciente.

59
global / 100
Moderado

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

59
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

codegraph-aiOrganización
2 seguidores2 repositorios públicosdesde dic 2025

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicaciónEtiquetas
npmcodegraph1.0.030431hace 684 días
npm@astudioplus/codegraph-mcp0.19.1427223hace 5 díasmcpmodel-context-protocolcode-intelligencecode-graphaiclaudecursorcopilot

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

75Bueno · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 6 días
9.7/36Cadencia de commits — 14/52 semanas con commits
18/18Volumen de commits — 144 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year144
human_commit_share1
days_since_last_push6
active_weeks_last_year14
Cómo se puntúa
27/27Publica versiones — 1 versiones publicadas
36/36Recencia de las versiones — última versión hace 25 días
12.6/27Cadencia de publicación — cadencia desconocida (una sola versión)
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count1
latest_release_tagmodel
releases_from_tagsno
days_since_latest_release25
mean_days_between_releases

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

46En riesgo · 18% del índice global
Cómo se puntúa
26.7/60Estrellas — 45 estrellas
5.8/25Forks — 6 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks6
stars45
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (Apache-2.0)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno
Cómo se puntúa
51.5/80Descargas mensuales — 7315 descargas/mes en npm
0/20Dependientes en el registro — no lo informa este ecosistema
Datos de entrada utilizados
packagescodegraph, @astudioplus/codegraph-mcp
dependents
ecosystemsnpm
total_downloads
monthly_downloads7315
Excluidos de la puntuación (sin datos o no aplicable): Dependientes en el registro. Los pesos restantes se han renormalizado.

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

53Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
0/22.5Distribución de commits — el principal contribuyente firma el 100% de los commits
1.4/13.5Amplitud de contribuyentes — 1 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled1
top_contributor_share1
Cómo se puntúa
46.8/46.8Resolución de issues — 100% de issues cerradas
30.6/38.3Aceptación de PR — 4/5 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/5 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs4
open_issues0
closed_issues5
issue_closed_ratio1
closed_unmerged_prs1
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
3.4/25Alcance del propietario — 2 seguidores de codegraph-ai
4.7/25Trayectoria — 2 repos públicos, cuenta de ~0 años
Datos de entrada utilizados
followers2
owner_typeOrganization
is_verified
owner_logincodegraph-ai
public_repos2
account_age_days226
Cómo se puntúa
25/25Publicado y resoluble — 2 paquete(s) en npm
35/35Recencia de publicación — última publicación hace 5 días
20/20Historial de versiones — 23 versiones en el registro
20/20No obsoleto — activo, ni obsoleto ni retirado
Datos de entrada utilizados
packagescodegraph, @astudioplus/codegraph-mcp
ecosystemsnpm
any_deprecatedno
min_days_since_publish5

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

75Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-commit
0/6.4.editorconfig
20/20OpenSSF Scorecard: CI-Tests — 3 out of 3 merged PRs checked by a CI test -- score normalized to 10
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

85Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
10/10Descripción del repositorio
10/10Topics — 8 topics
10/10Wiki
Datos de entrada utilizados
topicsai-coding, claude, code-analysis, code-indexing, coding-assistant, copilot, graph-database, semantic-search
has_wiki
homepage
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

38En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 3 out of 3 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/5 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Licencia — license file detected
7.5/7.5Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
0/7.5Vulnerabilities — 51 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,8
Excluidos de la puntuación (sin datos o no aplicable): packaging. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

59Moderado · 0% del índice global
Cómo se puntúa
0/45Instrucciones para agentes — sin CLAUDE.md / AGENTS.md / reglas de editor
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 99 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,99
agent_instruction_files
agent_instruction_max_bytes
Cómo se puntúa
12.6/18Arranque con un solo comando — Cargo.toml, crates/codegraph-bash/Cargo.toml, crates/codegraph-c/Cargo.toml (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — vscode/tsconfig.json
10/10Entorno reproducible — Dockerfile, lockfile
10/10Práctica demostrada con agentes — 93 de los últimos 100 commits con autoría o crédito de agente
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nixno
has_tests
lockfilesCargo.lock, package-lock.json
has_dockerfile
typed_language
bootstrap_files
has_devcontainerno
has_linter_configno
typecheck_configsvscode/tsconfig.json
agent_commit_share0,93
toolchain_manifestsCargo.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_share0
Cómo se puntúa
45/45Código verificable por tipos — C (tipado estático)
53.3/55Tamaños de archivo manejables — 17/552 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageC
largest_source_bytes30.660.349
source_files_sampled552
oversized_source_files17
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

45estrellas de GitHub
1contribuidores
144commits en los últimos 12 meses
6días desde el último push
1versiones publicadas
1factor bus
0issues abiertas
crates.io, npmecosistemas de paquetes

Advertencias de recopilación de datos

  • 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

Más detalle

Historial de estrellas y forks 0 ★ / 6 ⇿
0Estrellas
6Forks
1Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

123456622026-052026-062026-07
Mayor 0Menor 0Parche 0
OpenSSF Scorecard 3.8 / 10
3.8agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-25 18:04 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests3 out of 3 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/5 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
0Vulnerabilities51 existing vulnerabilities detected
Dependencias directas 3
RegistroPaqueteRestricción de versiónManifiesto
npmposthog-node^4.18.0mcp-package/package.json
npmposthog-node^4.18.0vscode/package.json
npmvscode-languageclient^9.0.1vscode/package.json
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.13.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadasnpm.