Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 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 зірок⑂ 6 форківз квіт. 2026 р.Переглянути на GitHub ↗

codegraph-ai/CodeGraph має індекс здоров’я 59 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (75/100), найнижчий — Security (38/100). Останнє оновлення було 6 днів тому. Більшість нещодавньої роботи виконує один учасник.

59
загалом / 100
Помірний

Індекс здоров'я програмного забезпечення

Метрики згруповано у зважені категорії на шкалі 1–100. Загальна оцінка починається як їхнє середнє; коли публічні дані активують Політику юрисдикцій високого ризику, рейтинг коригується й отримує верхню межу 49 («Під ризиком»). Готовність до ШІ не входить до індексу.

59
Відмінний85-100Зразковий; відповідає практично всім перевіреним критеріям
Добрий70-84Здоровий; незначні прогалини
Помірний50-69Прийнятний, але з помітними прогалинами; рекомендовано перевірку
У зоні ризику30-49Суттєві слабкі місця; впровадження потребує обережності
Критичний1-29Серйозні проблеми (покинутий, єдиний мейнтейнер, без базової гігієни)
ЖиттєздатністьСпільнота тавпровадженняСталість таврядуванняІнженернаякістьБезпекаГотовність доШІ

Профіль оцінок

Кожна вісь — окрема категорія. Форма важить більше, ніж середнє: здоровий об'єкт заповнює всю фігуру, тоді як профіль із піками та провалами означає, що сила в одному вимірі маскує ризик в іншому.

Власність

codegraph-aiОрганізація
2 підписники2 публічні репозиторіїз груд. 2025 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

Пакетні екосистеми

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікаціяТеги
npmcodegraph1.0.03 0431684 дні тому
npm@astudioplus/codegraph-mcp0.19.14 272235 днів томуmcpmodel-context-protocolcode-intelligencecode-graphaiclaudecursorcopilot

Метрики за категоріями

Життєздатність

Чи живий проєкт — чи пишеться код і чи виходять релізи?

75Добрий · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 6 дн. тому
9.7/36Ритм комітів — 14/52 тижнів із комітами
18/18Обсяг комітів — 144 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 5 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year144
human_commit_share1
days_since_last_push6
active_weeks_last_year14
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 1 релізів
36/36Свіжість релізів — останній реліз 25 дн. тому
12.6/27Ритм релізів — ритм невідомий (єдиний реліз)
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count1
latest_release_tagmodel
releases_from_tagsні
days_since_latest_release25
mean_days_between_releases

Спільнота та впровадження

Чи має проєкт користувачів, завантаження, увагу та влаштовані умови для контриб’юторів?

46У зоні ризику · 18% загального індексу
Як обчислюється оцінка
26.7/60Зірки — 45 зірок
5.8/25Форки — 6 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks6
stars45
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (Apache-2.0)
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні
Як обчислюється оцінка
51.5/80Щомісячні завантаження — 7 315 завантажень/місяць у npm
0/20Залежні пакети в реєстрі — ця екосистема цього не повідомляє
Використані вхідні дані
packagescodegraph, @astudioplus/codegraph-mcp
dependents
ecosystemsnpm
total_downloads
monthly_downloads7 315
Виключено з оцінювання (немає даних або не застосовно): Залежні пакети в реєстрі. Залишкові ваги перенормовано.

Сталість та врядування

Чи переживе проєкт своїх людей — бас-фактор, реактивність, хто за ним стоїть і як супроводжуються пакети?

53Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
0/22.5Розподіл комітів — головний контриб’ютор — автор 100% комітів
1.4/13.5Широта контриб’юторів — 1 контриб’юторів
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Використані вхідні дані
bus_factor1
contributors_sampled1
top_contributor_share1
Як обчислюється оцінка
46.8/46.8Вирішення issue — закрито 100% issue
30.6/38.3Прийняття PR — злито 4/5 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 0/5 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs4
open_issues0
closed_issues5
issue_closed_ratio1
closed_unmerged_prs1

Власність та опіка

38У зоні ризику
Як обчислюється оцінка
30/30Підтримка власника — у власності організації
0/20Верифікований домен
3.4/25Охоплення власника — 2 підписників у codegraph-ai
4.7/25Послужний список — 2 публічних репозиторіїв, вік облікового запису ~0 р.
Використані вхідні дані
followers2
owner_typeOrganization
is_verified
owner_logincodegraph-ai
public_repos2
account_age_days226

Супровід пакетів

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 2 пакет(ів) у npm
35/35Свіжість публікацій — остання публікація 5 дн. тому
20/20Історія версій — 23 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagescodegraph, @astudioplus/codegraph-mcp
ecosystemsnpm
any_deprecatedні
min_days_since_publish5

Інженерна якість

Чи наявні базові інженерні практики та документація?

75Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 1 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-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
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні

Документація

85Відмінний
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
10/10Теми — 8 тем
10/10Wiki
Використані вхідні дані
topicsai-coding, claude, code-analysis, code-indexing, coding-assistant, copilot, graph-database, semantic-search
has_wikiтак
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

Чи міцні видимі практики безпеки й ланцюга постачання, без непослабленої пов’язаності з юрисдикціями високого ризику?

38У зоні ризику · 16% загального індексу

Стан безпеки

38У зоні ризику
Як обчислюється оцінка
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.5Ліцензія — 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 — немає даних
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
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate3,8
Виключено з оцінювання (немає даних або не застосовно): packaging. Залишкові ваги перенормовано.

Готовність до ШІ

Наскільки репозиторій оснащений для розробки та супроводу за участі ШІ-агентів? Незалежний, експериментальний бейдж — вага 0.0, тож він подається окремо і не впливає на загальний індекс здоров'я.

59Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 99 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,99
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
12.6/18Розгортання однією командою — Cargo.toml, crates/codegraph-bash/Cargo.toml, crates/codegraph-c/Cargo.toml (домовленість інструментарію, без раннера задач)
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — vscode/tsconfig.json
10/10Відтворюване середовище — Dockerfile, lockfile
10/10Підтверджена практика роботи з агентами — 93 з останніх 100 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesCargo.lock, package-lock.json
has_dockerfileтак
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
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
Як обчислюється оцінка
45/45Типізований код — C (статично типізована)
53.3/55Керовані розміри файлів — 17/552 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageC
largest_source_bytes30 660 349
source_files_sampled552
oversized_source_files17
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — examples
Використані вхідні дані
example_dirsexamples
has_mcp_signalні
api_schema_files

Ключові факти

45зірок GitHub
1контриб'юторів
144комітів за останні 12 місяців
6днів від останнього пушу
1релізів
1бас-фактор
0відкритих issue
crates.io, npmпакетних екосистем

Попередження щодо збору даних

  • 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

Докладніше

Історія зірок і форків 0 ★ / 6 ⇿
0Зірки
6Форки
1Релізи

Коли додано кожну зірку й форк — зібрано з GitHub і згруповано за днями. Кумулятивне зростання розміщено просто над денними додаваннями, з яких воно складається, тож їх видно одне проти одного: рівномірне органічне накопичення виглядає зовсім інакше, ніж різкий короткочасний сплеск. Там, де цю різницю можна виміряти, її подано як автентичність росту.

123456622026-052026-062026-07
Мажорні 0Мінорні 0Патчі 0
OpenSSF Scorecard 3.8 / 10
3.8сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).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
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
0Vulnerabilities51 existing vulnerabilities detected
Прямі залежності 3
РеєстрПакетОбмеження версіїМаніфест
npmposthog-node^4.18.0mcp-package/package.json
npmposthog-node^4.18.0vscode/package.json
npmvscode-languageclient^9.0.1vscode/package.json
Усі залежності не зібрано

Не вдалося зібрати розв'язаний набір залежностей для цього звіту: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Звіт у форматі JSON машиночитний
{
  "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"
}

Оцінки — це сигнали, а не гарантії. Вони відображають публічно видимі практики на GitHub — це не аудит коду й не гарантія безпеки.

Відсутні дані виключаються, а ваги перенормовуються — нуль за відсутність ніколи не ставиться. Методологія версіонована й відкрита: метрики v1.13.0, схема v0.27.0 — повна методологія · вікі метрик.

Як окремий результат виглядає на тлі всього реєстру: сукупна статистикаnpm.