Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 0.27.0 · метрики 1.13.0 · 2026-07-24 12:31 UTC

neilberkman / ccrider

Search, browse, and resume your Claude Code sessions. Fast.

GoMIT★ 114 зірок⑂ 4 форкиз лист. 2025 р.Переглянути на GitHub ↗

neilberkman/ccrider має індекс здоров’я 59 зі 100, що відповідає смузі «Помірний». Найвищий показник — Vitality (79/100), найнижчий — Security (35/100). Останнє оновлення було 8 днів тому. Більшість нещодавньої роботи виконує один учасник.

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

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

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

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

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

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

Власність

Neil BerkmanОсобистий обліковий запис
30 підписників84 публічні репозиторіїз груд. 2008 р.

Цей репозиторій належить особистому обліковому запису. Проєкт з єдиним власником несе більший ризик безперервності, ніж підтримуваний організацією.

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
Gogithub.com/neilberkman/ccriderv1.6.1-438 днів тому

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

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

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

79Добрий · 22% загального індексу
Як обчислюється оцінка
28.8/36Свіжість push — останній push 8 дн. тому
14.5/36Ритм комітів — 21/52 тижнів із комітами
18/18Обсяг комітів — 199 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year199
human_commit_share1
days_since_last_push8
active_weeks_last_year21
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 39 релізів
36/36Свіжість релізів — останній реліз 8 дн. тому
27/27Ритм релізів — реліз кожні ~4,4 дн.
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Використані вхідні дані
releases_count39
latest_release_tagv1.6.1
releases_from_tagsні
days_since_latest_release8
mean_days_between_releases4,4

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

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

43У зоні ризику · 18% загального індексу
Як обчислюється оцінка
33.3/60Зірки — 114 зірок
4/25Форки — 4 форків
0/15Спостерігачі — 2 спостерігачів
Використані вхідні дані
forks4
stars114
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (MIT)
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ні

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

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

60Помірний · 24% загального індексу
Як обчислюється оцінка
9/54Бас-фактор — на 1 контриб’ютор(ів) припадає половина всіх комітів
1/22.5Розподіл комітів — головний контриб’ютор — автор 96% комітів
9.5/13.5Широта контриб’юторів — 7 контриб’юторів
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Використані вхідні дані
bus_factor1
contributors_sampled7
top_contributor_share0,955
Як обчислюється оцінка
46.8/46.8Вирішення issue — закрито 100% issue
30.6/38.3Прийняття PR — злито 12/15 вирішених PR
0/15OpenSSF Scorecard: Code-Review — Found 1/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs12
open_issues0
closed_issues7
issue_closed_ratio1
closed_unmerged_prs3
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
10.7/25Охоплення власника — 30 підписників у neilberkman
25/25Послужний список — 84 публічних репозиторіїв, вік облікового запису ~17 р.
Використані вхідні дані
followers30
owner_typeUser
is_verified
owner_loginneilberkman
public_repos84
account_age_days6 443
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

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

100Відмінний
Як обчислюється оцінка
25/25Опубліковано й доступно — 1 пакет(ів) у go
35/35Свіжість публікацій — остання публікація 8 дн. тому
20/20Історія версій — 43 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesgithub.com/neilberkman/ccrider
ecosystemsgo
any_deprecatedні
min_days_since_publish8

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

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

68Помірний · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 2 процес(ів) CI
24/24Наявні тести
16/16Конфігурація лінтера — .golangci.yml
0/9.6Pre-commit-хуки
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
Використані вхідні дані
has_ciтак
has_testsтак
has_editorconfigні
has_linter_configтак
has_precommit_configні
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
10/10Опис репозиторію
0/10Теми
10/10Wiki
Використані вхідні дані
topics
has_wikiтак
homepage
has_readmeтак
has_docs_dirтак
has_descriptionтак

Безпека

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

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

Стан безпеки

35У зоні ризику
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 1/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
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 — 28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
5/5Packaging — packaging workflow detected
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.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
4.5/7.5Vulnerabilities — 4 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated18
scorecard_versionv5.5.0
checks_inconclusive0
scorecard_aggregate3,5

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

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

76Добрий · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — .claude/CLAUDE.md, AGENTS.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 77 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,77
agent_instruction_files.claude/CLAUDE.md, AGENTS.md
agent_instruction_max_bytes6 389
Як обчислюється оцінка
18/18Розгортання однією командою — Makefile
22/22Автоматизовані тести
11/11Конфігурація лінтера / форматера — .golangci.yml
11/11Статична перевірка типів — Go (статично типізована)
10/10Відтворюване середовище — lockfile
10/10Підтверджена практика роботи з агентами — 23 з останніх 100 комітів створено агентом або з його зазначенням
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesgo.sum
has_dockerfileні
typed_languageтак
bootstrap_filesMakefile
has_devcontainerні
has_linter_configтак
typecheck_configs
agent_commit_share0,23
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Go (статично типізована)
55/55Керовані розміри файлів — 0/81 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageGo
largest_source_bytes26 299
source_files_sampled81
oversized_source_files0
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
20/20Сервер MCP
0/40Придатні до запуску приклади
Використані вхідні дані
example_dirs
has_mcp_signalтак
api_schema_files

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

114зірок GitHub
7контриб'юторів
199комітів за останні 12 місяців
8днів від останнього пушу
39релізів
1бас-фактор
0відкритих issue
Goпакетних екосистем

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

  • 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 ★ / 4 ⇿
0Зірки
4Форки
4Релізи

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

333444432026-072026-072026-07
Мажорні 0Мінорні 2Патчі 2
OpenSSF Scorecard 3.5 / 10
3.5сукупно

Незалежна, не прив'язана до інструментів оцінка безпеки від відкритого проєкту OpenSSF Scorecard. Кожна перевірка винагороджує практику безпеки, а не інструмент конкретного постачальника. Перевірки, які Scorecard не зміг визначити, позначено н/д і виключено з оцінки безпеки (вони ніколи не зараховуються як нуль).Scorecard v5.5.0 · 2026-07-24 12:31 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 1 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 1/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10
10Packagingpackaging workflow 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.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
6Vulnerabilities4 existing vulnerabilities detected
Прямі залежності 18
РеєстрПакетОбмеження версіїМаніфест
Gogithub.com/BurntSushi/tomlv1.5.0go.mod
Gogithub.com/atotto/clipboardv0.1.4go.mod
Gogithub.com/aws/aws-sdk-go-v2/configv1.29.4go.mod
Gogithub.com/aws/aws-sdk-go-v2/credentialsv1.17.57go.mod
Gogithub.com/aws/aws-sdk-go-v2/service/bedrockruntimev1.24.3go.mod
Gogithub.com/cbroglie/mustachev1.4.0go.mod
Gogithub.com/charmbracelet/bubblesv0.21.0go.mod
Gogithub.com/charmbracelet/bubbleteav1.3.10go.mod
Gogithub.com/charmbracelet/lipglossv1.1.0go.mod
Gogithub.com/dustin/go-humanizev1.0.1go.mod
Gogithub.com/mark3labs/mcp-gov0.41.1go.mod
Gogithub.com/muesli/reflowv0.3.0go.mod
Gogithub.com/olebedev/whenv1.1.0go.mod
Gogithub.com/sethvargo/go-dicewarev0.5.0go.mod
Gogithub.com/spf13/cobrav1.10.1go.mod
Gogithub.com/tmc/langchaingov0.1.14go.mod
Gogithub.com/zeebo/blake3v0.2.4go.mod
Gomodernc.org/sqlitev1.40.0go.mod
Усі залежності не зібрано

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

Звіт у форматі JSON машиночитний
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 10322,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 473711,
        "Shell": 1925,
        "Makefile": 241
      },
      "pushed_at": "2026-07-16T07:50:10Z",
      "created_at": "2025-11-11T21:43:43Z",
      "owner_type": "User",
      "updated_at": "2026-07-17T22:59:04Z",
      "description": "Search, browse, and resume your Claude Code sessions. Fast.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "Neil Berkman",
      "type": "User",
      "login": "neilberkman",
      "company": null,
      "location": null,
      "followers": 30,
      "avatar_url": "https://avatars.githubusercontent.com/u/37657?v=4",
      "created_at": "2008-12-01T23:47:24Z",
      "is_verified": null,
      "public_repos": 84,
      "account_age_days": 6443
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.6.1",
          "kind": "patch",
          "published_at": "2026-07-16T07:53:08Z"
        },
        {
          "tag": "v1.6.0",
          "kind": "minor",
          "published_at": "2026-07-10T21:11:27Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-07-04T15:49:23Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-07-02T14:34:57Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-06-28T21:44:46Z"
        },
        {
          "tag": "v1.3.2",
          "kind": "patch",
          "published_at": "2026-06-19T21:52:12Z"
        },
        {
          "tag": "v1.3.1",
          "kind": "patch",
          "published_at": "2026-06-18T12:43:26Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-06-07T17:35:42Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2026-06-07T14:38:04Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-06-06T23:25:03Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-06-06T21:31:41Z"
        },
        {
          "tag": "v1.1.9",
          "kind": "patch",
          "published_at": "2026-04-22T23:31:51Z"
        },
        {
          "tag": "v1.1.8",
          "kind": "patch",
          "published_at": "2026-04-07T21:43:51Z"
        },
        {
          "tag": "v1.1.7",
          "kind": "patch",
          "published_at": "2026-04-06T05:00:37Z"
        },
        {
          "tag": "v1.1.5",
          "kind": "patch",
          "published_at": "2026-03-26T14:30:20Z"
        },
        {
          "tag": "v1.1.4",
          "kind": "patch",
          "published_at": "2026-03-16T16:15:51Z"
        },
        {
          "tag": "v1.1.3",
          "kind": "patch",
          "published_at": "2026-03-10T05:29:17Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-03-01T05:47:07Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-02-28T19:52:28Z"
        },
        {
          "tag": "v1.0.0",
          "kind": "major",
          "published_at": "2026-02-28T16:32:32Z"
        },
        {
          "tag": "v0.9.7",
          "kind": "patch",
          "published_at": "2026-01-11T21:35:06Z"
        },
        {
          "tag": "v0.9.6",
          "kind": "patch",
          "published_at": "2026-01-06T20:47:50Z"
        },
        {
          "tag": "v0.9.5",
          "kind": "patch",
          "published_at": "2026-01-05T07:14:21Z"
        },
        {
          "tag": "v0.9.4",
          "kind": "patch",
          "published_at": "2026-01-05T06:12:48Z"
        },
        {
          "tag": "v0.9.3",
          "kind": "patch",
          "published_at": "2026-01-05T04:58:33Z"
        },
        {
          "tag": "v0.9.2",
          "kind": "patch",
          "published_at": "2026-01-02T05:15:35Z"
        },
        {
          "tag": "v0.9.1",
          "kind": "patch",
          "published_at": "2025-12-31T04:54:44Z"
        },
        {
          "tag": "v0.9.0",
          "kind": "minor",
          "published_at": "2025-12-30T22:42:30Z"
        },
        {
          "tag": "v0.2.6",
          "kind": "patch",
          "published_at": "2025-12-30T20:12:23Z"
        },
        {
          "tag": "v0.2.5",
          "kind": "patch",
          "published_at": "2025-12-30T20:02:26Z"
        },
        {
          "tag": "v0.2.4",
          "kind": "patch",
          "published_at": "2025-12-30T19:31:32Z"
        },
        {
          "tag": "v0.2.3",
          "kind": "patch",
          "published_at": "2025-12-30T05:32:57Z"
        },
        {
          "tag": "v0.2.2",
          "kind": "patch",
          "published_at": "2025-12-27T22:05:40Z"
        },
        {
          "tag": "v0.2.1",
          "kind": "patch",
          "published_at": "2025-12-27T21:48:57Z"
        },
        {
          "tag": "v0.1.4",
          "kind": "patch",
          "published_at": "2025-11-30T23:03:27Z"
        },
        {
          "tag": "v0.1.3",
          "kind": "patch",
          "published_at": "2025-11-30T22:57:11Z"
        },
        {
          "tag": "v0.1.2",
          "kind": "patch",
          "published_at": "2025-11-12T08:09:38Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2025-11-12T07:23:34Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2025-11-12T05:21:50Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "dae884161ef0f58237346cb93eb8c68e4229458d",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.6.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-16T07:49:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c1d09be57d63cf3961680aa631c56ae3bb913ab",
          "body": "- Errors print once (SilenceErrors/SilenceUsage) and runtime failures\n  no longer dump the full usage block after the message\n- Unknown session IDs surface db.ErrSessionNotFound with the ID\n  instead of leaking \"sql: no rows in result set\"\n- Sync messaging and progress write to stderr, keeping stdou\n[…]\n; non-TTY output gets plain per-10% lines instead of\n  progress-bar redraw frames\n- Bare invocation with piped stdout prints help instead of failing\n  with a TTY error; root help links the issues page",
          "is_bot": false,
          "headline": "fix: clean up CLI error handling and sync output streams",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-16T07:49:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3ef5fbc059e2a30c03dee483dcfb4d9cfe792448",
          "body": null,
          "is_bot": false,
          "headline": "feat: add Antigravity CLI support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-10T21:08:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b95273edd6bc5001817d0e8c88b1b35a076e5087",
          "body": null,
          "is_bot": false,
          "headline": "docs: remove retired Go Report Card badge",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-08T23:19:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b604f65b1ea77f81522b058c65c9e92efe301ddc",
          "body": null,
          "is_bot": false,
          "headline": "fix: make provider display neutral",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-04T15:45:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "07daeb254f9628966b9bf7e89cba7edfb2f60321",
          "body": null,
          "is_bot": false,
          "headline": "feat: add Pi provider support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:30:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e767f2385f529e639123a38798615190a690552c",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.5.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:30:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c0936e913699f74b5072e4863776331e116572c",
          "body": "Add Pi to the provider registry with native resume/fork command construction, pi_flags config plumbing, default source discovery, and docs.\n\nAdd a Pi JSONL parser built on the shared ccsessions toolkit. Message UUIDs include the filename stem to avoid collisions between files with the same metadata \n[…]\ned on PR #21 by @Nabsku.\n\nKnown debt: Codex message UUIDs still use the shipped key format and can collide across copied rollout files; this change deliberately leaves existing Codex hashes untouched.",
          "is_bot": false,
          "headline": "feat: add Pi provider support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:17:12Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "657ccba1885d4974004d8212e726a054ae0e67d3",
          "body": "Move provider identity, resume contracts, config flag lookup, display names, and source hints into one core registry so interface help and MCP descriptions derive from the same provider table.\n\nAdd shared JSONL parser utilities for long-line reads, deterministic message UUIDs, fallback summaries, and content-item text extraction. Existing provider hash keys are preserved so re-imports keep upserting the same messages.",
          "is_bot": false,
          "headline": "refactor: centralize provider registry",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T14:05:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c7b40786dd3ffbb44f9af0a6f0ba5dd5cb2b994",
          "body": null,
          "is_bot": false,
          "headline": "docs: add toolbar offset changelog entry",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-07-02T13:36:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9ae900d816c23d247379e2bfb6f8b097b6e5382",
          "body": "Use lipgloss vertical joining for the session list/help area and align list/detail viewport heights so the shortcut toolbar sits on the final terminal line.",
          "is_bot": false,
          "headline": "Fix toolbar offsets",
          "author_name": "Evan Widloski",
          "author_login": "Evidlo",
          "committed_at": "2026-07-02T13:31:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "52211c87dfc24cba59151ba86bfbc6551d668ed0",
          "body": null,
          "is_bot": false,
          "headline": "feat: add OpenCode support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-28T21:39:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a35795f72a29d2b74b5620344224ecb2bda3b6c5",
          "body": "- Compute created_at/updated_at only from user/assistant turns, so\n  non-message events (pr-link, file-history-snapshot, queue-operation,\n  summary) no longer inflate a session's last-active time and scramble\n  the default sort. Existing rows need `ccrider sync --force` to recompute.\n- Render the he\n[…]\ncreen body at the terminal's default foreground instead\n  of a dim gray that washed out on dark themes; accent the title/headings.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: accurate last-active sort + readable help screen (v1.3.2)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-19T21:49:14Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "b3f35f1b7a790184cdfb2f528a7aa1620ff70746",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.3.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-18T12:39:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d0bfd65bb1144f04e09aa7d0f0c97a81e98d3e09",
          "body": "In the detail view's in-session search, the \"typing\" key handler bound\n`j`/`k` (and arrow up/down) to viewport scrolling *before* the keys\nreached the search text input. As a result, any query containing the\nletters `j` or `k` silently lost those characters — typing \"kotopia\"\nproduced \"otopia\", \"jes\n[…]\ny keeps `j`/`k`\nscrolling, which is correct there: you're cycling matches, not typing.\n\nAdds a regression test that types \"kj\" into the in-session search and\nasserts both characters land in the input.",
          "is_bot": false,
          "headline": "fix: type j/k into in-session search instead of scrolling viewport (#18)",
          "author_name": "koto",
          "author_login": "koto9x",
          "committed_at": "2026-06-18T12:36:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5c34aeaa536bfd5ef9b84bf6d5d820fe1ad0223c",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update changelog for v1.3.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T17:32:11Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "045ae126b57900113429b45392567a0d28b7cb54",
          "body": "claude_flags has long been injected into every Claude resume command,\nbut Codex and Copilot sessions got bare commands — no way to bake in\nflags like --dangerously-bypass-approvals-and-sandbox that users\nalready apply via shell aliases.\n\nAdd codex_flags and copilot_flags to config.toml, and widen th\n[…]\n CONFIGURATION.md\ndocumented a dangerously_skip_permissions boolean that never existed\nin code — replaced with the real flag keys.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: per-provider resume flags (codex_flags, copilot_flags)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T15:27:12Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "952dc3294edddddf4415102f706693c1cbe82585",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update changelog for v1.2.2",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:34:19Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ec76e7cfd96b8aad7fb6dc4166514fe658fb051d",
          "body": "Core/interface cleanup pass — interfaces (CLI, TUI, MCP) were each\nre-deciding things that must hold regardless of interface:\n\n- ClaudeFlags application was per-callsite opt-in, so the TUI copy/\n  write/fallback commands silently omitted configured flags while the\n  exec and MCP paths applied them. \n[…]\ne.\n\nTests pin each behavior; TUI/core tests isolate HOME so they don't\nabsorb the developer's real ~/.config/ccrider claude flags.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "refactor: move resume command/prompt assembly fully into core",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:28:53Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ac77271b683966684d35aacc5ee24b342ea81424",
          "body": "Resume commands emitted by the MCP tools now include the user's\nconfigured claude flags (e.g. --dangerously-skip-permissions), matching\nhow the TUI exec path invokes claude. Flags are loaded per request so\nconfig edits apply without restarting the server, config errors fall\nback to no flags, and non-Claude providers ignore them (existing\ncore behavior).\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: apply configured ClaudeFlags to MCP resume_command",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:19:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0bce68ec3ba6ca161d031c3cedbbf1b29ef5726d",
          "body": "Agents consuming the MCP tools were stitching resume commands from the\nseparate project + session_id fields and frequently omitting the cd\nprefix, producing bare commands that fail with 'No conversation found'\nfrom any other cwd. Ship the full command instead so consumers never\nbuild it themselves.\n\n[…]\nrollout\nprefix stripped to the bare UUID, and the bare-command-plus-comment\nfallback when the project path is missing from the DB.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add pre-built resume_command to all MCP session payloads",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:13:28Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "6691da6f692087618ac124b201c7f12a11485cc6",
          "body": "Resume commands only work from the directory the session was created in\n(Claude and Codex both scope session storage by cwd), so any command\nshown or copied without a cd prefix fails with 'No conversation found'.\n\nAdd session.ResumeCommandIn to core and route all interface emission\nsites through it:\n[…]\nng from the DB, emit the bare command with\na trailing '# project path missing in DB for session <id>' comment\ninstead of erroring.\n\nCo-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: cd-prefix every emitted resume command via core ResumeCommandIn",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-07T14:05:27Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "c0df52decdf3d8c9bb30ec6a26fcf85bedec17dd",
          "body": null,
          "is_bot": false,
          "headline": "chore: update changelog for v1.2.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-06T23:21:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd796598afd4bfe8f38c6f4d38ab2c878b644c7d",
          "body": "Derive enumerated session skip hashes from message UUIDs and text content instead of file mtime.",
          "is_bot": false,
          "headline": "perf: hash enumerated session message content for skip checks",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T23:19:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "33cfa0cb806036afa312fbc1336b1925f9e6fb39",
          "body": "Quote session IDs and shell cd working directories in resume command construction.",
          "is_bot": false,
          "headline": "fix: shell-quote resume session IDs and working dirs",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T23:19:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "32c6f9a0d7996ed2b4482a42f92cae9e1ed68b5e",
          "body": "Skip malformed events.jsonl lines in the Copilot parser so one corrupt line does not drop the rest of the transcript.",
          "is_bot": false,
          "headline": "fix: skip malformed lines in Copilot events parser",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T23:09:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15b25343dc53de800fb096ee7ebdaf008d233c23",
          "body": "Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "chore: update changelog for v1.2.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-06-06T21:28:51Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a54694f0347fd53d3a075335b599d35a1b8a8671",
          "body": "* fix: make session resume provider aware\n\nccrider hardcoded `claude --resume` for every provider, so resuming a\nCodex session generated a claude command (and hit claude session-recovery\nmode because the claude session file never exists).\n\nAdd internal/core/session/resume.go with provider-aware resu\n[…]\npilot sessions are tagged [copilot], filterable via --provider/MCP\nprovider, searchable via FTS, and resumable via `copilot --resume=<id>`.\n\nClaude + Codex + Copilot now share one searchable database.",
          "is_bot": false,
          "headline": "Add GitHub Copilot CLI support + provider-aware resume (#14)",
          "author_name": "Daniel M. Drucker, Ph.D.",
          "author_login": "dmd",
          "committed_at": "2026-06-06T21:27:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d501c3653cb219c1690bac0be39a842a247d4827",
          "body": "Adds `ccrider view <session-id>` as a stdout-only alias for export,\nuseful for piping and agent use without flags.\n\nCo-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "feat: add view command and bump to v1.1.9",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-22T23:27:21Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "dbb2742da5155cc6349a710f363d24ba15e4246f",
          "body": null,
          "is_bot": false,
          "headline": "chore: fix linter version in release.yml to match pr-test.yml",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-07T21:40:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "294fa660d1eb07762af86f0d235df50568736971",
          "body": "- Modify the session parser to ignore unparseable or corrupted lines\n  instead of failing.\n- Update the linter configuration and refactor string formatting to\n  resolve static analysis warnings.\n- Increment the project version to 1.1.8 and document changes in the\n  changelog.",
          "is_bot": false,
          "headline": "Skip corrupted session lines and fix CI (#12)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-07T21:31:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa8dd1806b0e001f865a59bbe42b80a7612f4928",
          "body": null,
          "is_bot": false,
          "headline": "chore: fix golangci-yml schema and bump version to 1.1.7",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-06T04:57:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0eab94eabc50c50ee4e5616fee8fa1cf9303708c",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump version to 1.1.6",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-06T04:49:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab27adaea472784fb0814f199836bbde090767c4",
          "body": "- Run go mod tidy to fix untidy dependencies\n- Remove accidentally tracked ccrider-linux binary\n- Update .gitignore to exclude build artifacts\n- Fix release workflow to use official golangci-lint-action",
          "is_bot": false,
          "headline": "chore: tidy modules, remove binary, and fix release workflow",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-04-06T04:49:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1385dc8098da051489798974f724ff645431492d",
          "body": null,
          "is_bot": false,
          "headline": "fix: lint errors in export code",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:27:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e33665ca165eade9dd90d06eaf1da8d3eb2c4285",
          "body": null,
          "is_bot": false,
          "headline": "release: v1.1.5 changelog",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e7b5a8ce91ef94589ad6a17fc92d4f7a0bd2ab0",
          "body": "Redesign session export to be deliberate, repo-aware, and non-surprising.\n\nTUI: pressing 'e' now opens an export dialog with a prefilled path\ninstead of immediately writing to cwd. Default path for repo-backed\nsessions is <repo>/.ccrider/exports/session-<id>.md. 'E' opens the\ndialog with a blank pat\n[…]\nted to...\" display. Extracts shared\nmarkdown generation into internal/core/export/ (removes raw SQL from\ninterface layers). Remembers last export directory per-repo and globally\nin config.\n\nCloses #10",
          "is_bot": false,
          "headline": "feat: repo-aware export with confirmation dialog",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:19:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "fab4a565684b705db753f52e39baab0abe299577",
          "body": null,
          "is_bot": false,
          "headline": "chore: bump pinned Node.js from 23.7.0 to 25.8.2",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-26T14:19:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1723247d64fab7071f4229e8439be717ec0889e8",
          "body": null,
          "is_bot": false,
          "headline": "feat: add light theme",
          "author_name": "Marco Seguri",
          "author_login": "seguri",
          "committed_at": "2026-03-26T14:16:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "021a0226d0eb971d110a917da247ae4cea405241",
          "body": "Timezone was stripped during time.Time→string→time.Time roundtrip\n(Format without TZ, Parse assumes UTC), causing sessions to show\n\"7 hours ago\" instead of \"2 minutes ago\" for PDT users.\n\nAlso fix \"No sessions found\" flash on startup by distinguishing\ninitial async load from genuinely empty state.",
          "is_bot": false,
          "headline": "fix: session timestamps off by timezone offset and startup flash",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-16T16:12:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "384935d6755c559573a23f347c62247f0bdb4984",
          "body": null,
          "is_bot": false,
          "headline": "docs: note about Claude Code cleanupPeriodDays in configuration section",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-16T05:30:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "92c221095c31e484001d8f7b4007819532544aed",
          "body": "Codex CLI emits AGENTS.md instructions, environment_context, and\nsystem-reminder content as role=user response_item messages. These\nwere being imported as user messages, polluting summaries and search.\n\nSkip these known boilerplate patterns during parsing. Validated\nagainst 603 real Codex sessions (1,300 boilerplate items filtered).\n\nAlso updates CHANGELOG for v1.1.3.",
          "is_bot": false,
          "headline": "fix: filter system boilerplate from Codex response_item messages",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-10T05:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d627001463877a3ad9d44ccee312ee9362d09a6c",
          "body": "- Add migration005 to invalidate existing Codex sessions so they\n  re-import with the new response_item parser on next sync\n- Replace manual string concat with strings.Join in extractTextFromContent\n- Rename misleading test to TestParseFile_DualBufferSelectsLargerSource\n- Add comment explaining why developer role is skipped",
          "is_bot": false,
          "headline": "fix: add migration for existing Codex sessions and cleanup parser",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-10T05:28:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fa5634c186fb4697e6ba4135fab63d90040260ae",
          "body": "fix: parse response_item events in Codex session parser",
          "is_bot": false,
          "headline": "Merge pull request #8 from APE-147/fix/codex-response-item-parsing",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-10T05:28:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ea89b3279dce8de33baf417611ca102081e85ab",
          "body": "Codex CLI emits conversation content via response_item events (type=message),\nbut the parser only handled event_msg events. This caused 16.4% message loss\n(335→390 messages across 48 sessions) and 11 zero-message sessions.\n\nStrategy: dual-buffer collects messages from both sources independently,\nthen selects whichever captured more messages. This handles sessions that\nuse only response_item, only event_msg, or both.\n\nFixes #7\n\nCo-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix: parse response_item events in Codex session parser",
          "author_name": "APE-147",
          "author_login": "APE-147",
          "committed_at": "2026-03-07T08:31:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d53b5ef2fb7261ee1887d5aa45b399fb6ab99a05",
          "body": "LLMs sometimes send numbers as strings (e.g. around_sequence: \"3913\"\ninstead of 3913), causing json.Unmarshal to reject the input. Pre-process\nthe arguments map to coerce parseable strings to numbers before\nunmarshaling into typed structs.",
          "is_bot": false,
          "headline": "fix: handle string-encoded numbers in MCP tool arguments",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-03-01T05:44:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "decb7f3161b2f6c2eae578fd4e2ffac347517a50",
          "body": "feat: add Codex CLI session support",
          "is_bot": false,
          "headline": "Merge pull request #6 from neilberkman/feature/codex-support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T19:49:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "584bcf7e7674412585de62b381f05080424ab916",
          "body": "Index OpenAI Codex CLI sessions (~/.codex/sessions/) alongside Claude\nCode into a single searchable database. New parser (pkg/codexsessions)\nmaps Codex rollout JSONL to the same schema, generating deterministic\nUUIDs via BLAKE3 for idempotent re-import.\n\nProvider filtering on CLI (--provider codex/c\n[…]\ns). Non-Claude\nsessions tagged with [codex] in TUI and CLI list output.\n\nAlso fixes: panic on short session IDs, UTF-8 corruption in summary\ntruncation, silent zero timestamps from unparseable fields.",
          "is_bot": false,
          "headline": "feat: add Codex CLI session support",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T19:34:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "775d4c0ebe6b674dd139451e2a61dbf1108d547c",
          "body": "syscall.Stat_t doesn't exist on Windows. Runtime check wasn't enough\nsince the compiler still sees the type. Split into _unix.go and\n_windows.go with proper build constraints.",
          "is_bot": false,
          "headline": "Fix Windows build: split getFileIdentity into build-constrained files",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T16:30:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d5c8ef082a9c98a2bf503635070492252ae80ba",
          "body": "Switch from SHA256 to BLAKE3 for file change detection. Key sessions\nby JSONL filename instead of parsed sessionId to fix hash thrashing\non resumed session chains. Relink orphaned messages via ON CONFLICT\nDO UPDATE. Deterministic token-based MCP response trimming on all\nhandlers. Crash-safe idempotent migrations. Importer warnings to\nstderr to prevent MCP JSON-RPC protocol corruption.\n\nInspired by @rcny's PR #5.",
          "is_bot": false,
          "headline": "BLAKE3 sync, message relinking, MCP response trimming",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-28T16:12:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "795f4fc42a9d1d36fe4221218f434526ceb2d563",
          "body": null,
          "is_bot": false,
          "headline": "Merge feature/fast-import: 3.9x faster imports with multi-level caching",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T06:18:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d38e4d4bc261ad1886b46e9d6c255b34d736761",
          "body": null,
          "is_bot": false,
          "headline": "Update CHANGELOG for v0.10.0",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T05:48:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "808823b030b403811473f8c9d73053674f60d88c",
          "body": "Subagent session files use the parent session ID, so importing them\nwould overwrite/conflict with the actual parent session. They're not\nuseful to track separately, so hardcode skipping them instead of\nhaving a confusing flag.",
          "is_bot": false,
          "headline": "Always skip subagent sessions (they conflict with parent sessions)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T05:27:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7aba1d4f410a61ca548903bc09397887fc280df0",
          "body": "Performance improvements:\n- 3.9x faster imports (19s → 2s for ~3150 sessions, 74% faster)\n- Multi-level change detection: mtime+size → hash → parse\n- Pre-load all session metadata in single query (avoids N queries)\n- Skip 805/888 files instantly via mtime+size check\n- Only hash/parse changed files (\n[…]\nime, file_size, file_inode, file_device columns\n- Added file_hash column for content-based change detection\n- Migration preserves existing data\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Optimize import with multi-level caching and handle huge JSONL lines",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-02-02T01:51:31Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ed18e61a4b4cac1dd43260c3632fa51bed0f33ee",
          "body": null,
          "is_bot": false,
          "headline": "Fix symlinks (#4)",
          "author_name": "Vladimir Istyufeev",
          "author_login": "rcny",
          "committed_at": "2026-01-16T07:50:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a61cb657646da3c37a3d7b971e4ba7a7b3cecab",
          "body": "The spinner's Stop() could panic with \"send on closed channel\" when\ncalled twice - which happens on error paths where Stop() is called\nexplicitly and then again via defer.\n\nFix: Use sync.Once to make Stop() idempotent and change to chan struct{}\nfor signal-only semantics.\n\nFixes #2",
          "is_bot": false,
          "headline": "Fix spinner panic on double Stop() call (#3)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-12T15:16:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04f3fb8d6f5f4e2a85e0e915db13f9f9e02c81e3",
          "body": null,
          "is_bot": false,
          "headline": "Fix errcheck lint errors in recovery mode prompts",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-12T07:00:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edec4aaf049acf481c979f4e530c4cad44765558",
          "body": "When a session file has been deleted by Claude Code but CCRider still\nhas it indexed, CCRider can now start a new session with context from\nthe old conversation. Includes first/last 5 messages and instructions\nfor using CCRider MCP to search for more.\n\n- Prompts user to confirm before starting recovery\n- Warns if CCRider MCP server not configured\n- Falls back to asking for directory if original paths don't exist",
          "is_bot": false,
          "headline": "Add session recovery mode for deleted session files",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-12T05:55:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e5b33d6a2d85464e731628d6cda020b0a31ecca",
          "body": "- Move filter parsing to internal/core/search/filters.go\n- CLI now supports same filters as TUI: after:, before:, date:, project:\n- Fix timestamp format mismatch in date comparisons\n- Supported formats: Go duration (3h), natural language (yesterday),\n  relative (3-days-ago), ISO 8601 (2024-01-15)\n- Delete duplicate TUI search_filters.go",
          "is_bot": false,
          "headline": "Centralize date filter parsing, fix timestamp comparison",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T21:38:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6412431121ed2f63f58b04bc5e3bf63f3725c43",
          "body": "- project_path now always updates on re-import (was missing from ON CONFLICT)\n- Add --force flag to sync command to re-import all sessions\n- Fixes sessions with stale worktree paths that couldn't be resumed",
          "is_bot": false,
          "headline": "Fix project_path stuck on wrong value, add sync --force",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T21:31:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa653ffa0f56b04fc59c56fbed52d6a6bca6e677",
          "body": null,
          "is_bot": false,
          "headline": "Make Show HN badge black for better Y logo contrast",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:24:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0cad468f5fb21a8bdddce9a88d2571201479870",
          "body": null,
          "is_bot": false,
          "headline": "Add MCP server mention to tagline",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:23:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4d6435012e422def2af2b8337f00ea70534044b",
          "body": "- Support Go duration format (3h, 30m, 2h30m) in TUI date filters\n- Increase anchor phrase retry from 3 to 5 attempts with 1s delay\n- Update TUI help text to show duration syntax",
          "is_bot": false,
          "headline": "Add Go duration syntax for date filters, increase anchor retry",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:00:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ab5935a8bc7828a90663d6ce166c073c3239d8f9",
          "body": "- Remove get_session_detail (was removed in 81d3f4b)\n- Add generate_session_anchor tool\n- Add subtle lyric reference linking to song origin",
          "is_bot": false,
          "headline": "Update README: fix MCP tools list, add CC Rider lyric reference",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-11T16:00:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2be42c0c2c67b51fc94e48a0ac9d8b0ebaff49cd",
          "body": null,
          "is_bot": false,
          "headline": "Link Show HN badge to actual post",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-06T20:58:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb14243ca637691c5bc06282cb0e2591bfcfd872",
          "body": null,
          "is_bot": false,
          "headline": "Add project badges to README",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-06T20:50:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "215cffebc7220942a7112fccd83902fbd0ab4e7f",
          "body": null,
          "is_bot": false,
          "headline": "Fix Homebrew tap path to match published install instructions",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-06T20:42:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "81d3f4b452329f84fb72fc29ab860ded2395b4cf",
          "body": "- generate_session_anchor: Creates unique diceware phrase for Claude to say,\n  enabling search for earlier context that disappeared from context window\n- Anchor phrase search now retries 3x with 500ms delays for write buffering\n- Removed get_session_detail (redundant with search + get_messages)\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)",
          "is_bot": false,
          "headline": "Add generate_session_anchor tool, remove get_session_detail",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-05T07:10:40Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "706fc1ccb20b5cf732186f2e1356a319bb351793",
          "body": "Allows Claude to find earlier context in current session:\n- anchor_phrase: unique phrase to identify session (auto-quoted, defaults to last hour)\n- exact_match: auto-quotes query for phrase matching",
          "is_bot": false,
          "headline": "Add anchor_phrase and exact_match to MCP search",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-05T06:08:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce1e3980f37a2ffb3c7688b4dbca6ea2a37f0e50",
          "body": "Fast typing could show stale results if an earlier search completed\nafter a later one. Now uses sequence numbers to discard outdated results.",
          "is_bot": false,
          "headline": "Fix search race condition with sequence numbers",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-05T04:55:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "129617bcc94b6dffe001cacaf292729baa86c521",
          "body": "Queries with commas, hyphens, @, #, and other punctuation no longer\ncause FTS5 syntax errors. Implemented proper query escaping (same\napproach as sqlite-utils/datasette) - each token is quoted and internal\nquotes are escaped. Removed LIKE fallback. Wildcards still work.",
          "is_bot": false,
          "headline": "Fix FTS5 search: proper escaping for all special characters",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2026-01-02T05:12:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82fbac6b636c29659bc74faec704aab11ffd9a11",
          "body": null,
          "is_bot": false,
          "headline": "Add MCP server installation to quick start",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T05:00:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "874484378f768e7c756cc3649e8536cdebe077b5",
          "body": null,
          "is_bot": false,
          "headline": "Release v0.9.1",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T04:51:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f858f02cee1ded9f9ae48173536ce9e884c3224",
          "body": null,
          "is_bot": false,
          "headline": "Fix phrase search: preserve quotes in TUI, auto-balance for live typing",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T04:48:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b0c850dd483b695b289d56b47a06954dfc54b5e",
          "body": null,
          "is_bot": false,
          "headline": "Mention TUI, CLI and MCP in intro",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T02:08:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "993834a1c574177d9bb041a5803810095f90e323",
          "body": null,
          "is_bot": false,
          "headline": "Mention MCP server in intro",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T02:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44feacae3b6800624cc7b53bbcac22eea02c0a24",
          "body": null,
          "is_bot": false,
          "headline": "Remove incorrect macOS-only claim",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-31T02:05:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cd04c02df71f448b417db86cebc7c4bb47ca6ae7",
          "body": null,
          "is_bot": false,
          "headline": "Move Elvis video back to hero position",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:50:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a235727bb2b5ae0bbb6f9589f9219cbbe7156dd2",
          "body": null,
          "is_bot": false,
          "headline": "Restore embedded video (was replaced with dead YouTube link)",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:47:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cdb0bc450b9272db9a7a1bbd8ae58c55ae6634e2",
          "body": null,
          "is_bot": false,
          "headline": "Add session exports to gitignore",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:41:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c64c3cf60e274b7828583bc6645556e7a34ffae",
          "body": "- Add Anthropic API as alternative to AWS Bedrock for summarization\n- Add filter-only search (date/project filters without text query)\n- Add SQLite busy timeout to prevent lock errors\n- Fix date filter parsing (2024-11-01, 3-days-ago)\n- Fix TUI search view overflow and text truncation\n- Improve summarization prompts for problem-solution focus\n- CLI search output now matches TUI format",
          "is_bot": false,
          "headline": "Release v0.9.0: Anthropic API support, search improvements, bug fixes",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T22:39:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7bf0e4b499addd5e4e1a411c041154beafb7150",
          "body": null,
          "is_bot": false,
          "headline": "Skip sessions with <5 messages for summarization",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T21:30:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ed2c7ed7ee0d798218ba60938c9ee61ec8225d2",
          "body": "- Ask LLM to identify the main problem, root cause, and solution\n- Add explicit \"ask yourself\" questions to guide summarization\n- Better BAD/GOOD examples showing problem→solution format\n- Remove project name prefix from summaries (redundant)\n- Increase one-line char limit to 50-90 for more detail\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Improve summarization prompts for problem→solution focus",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T21:08:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "37cd1d26150b177a5809371bf8b0ca211c8008df",
          "body": "- New anthropic.go provider using direct Anthropic API\n- Auto-detects provider from credentials (ANTHROPIC_API_KEY or AWS)\n- Shows warning when auto-detected, with instructions to override\n- Add --provider flag and llm_provider config option\n- Update default models to Claude Haiku 4.5\n  - Anthropic:\n[…]\nhaiku-4-5-20251001\n  - Bedrock: global.anthropic.claude-haiku-4-5-20251001-v1:0\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add Anthropic API support for session summarization",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T20:38:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "e262e0465e3b68e06052927c1bfdb255311c78e5",
          "body": "README:\n- Add Homebrew as recommended installation method\n- Fix GitHub URL\n- Add missing get_session_messages MCP tool\n- Update config section to show actual format (claude_flags, txt files)\n- Update project structure to match reality\n\nCLI:\n- Fix serve-mcp help to show correct Claude Desktop config path\n- Add Claude Code MCP setup command to help\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Update README and CLI help for accuracy",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T20:08:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "40427b57dcb6db785b325281f6ddbcf2b817f480",
          "body": "Silently skip files that fail to stat, parse, or import instead of\nprinting warnings to stderr. These warnings were being printed during\nthe import process and corrupting the bubbletea TUI rendering.\n\nAlso removed debug prints from terminal spawn code.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Remove stderr warnings that corrupt TUI display",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T19:58:00Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d4f7bec252bc4e9a76e437f2930f4b22ef3a9b64",
          "body": "Validates that 'claude' command is runnable from the target directory\nbefore attempting to resume. Catches common issues like version manager\n(asdf/mise/nvm) failures and provides helpful diagnostic messages with\nsuggested fixes instead of cryptic exit codes.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add pre-flight validation before resuming sessions",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T19:27:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "07b52057551d72d9aea256c977d36d5ed1c8de07",
          "body": "Truncates messages evenly from beginning/end when over limit.\nReports truncation status in response.\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)",
          "is_bot": false,
          "headline": "Limit MCP response size to ~50KB to prevent context overflow",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-30T05:29:16Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b01d70c261c24ba6db752e1ea1d44b17bf91729c",
          "body": null,
          "is_bot": false,
          "headline": "Remove unnecessary Go build dependency from Homebrew formula",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-27T22:02:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0361a98f767e4b4ac90edd9c661cef18d4f9db84",
          "body": "- Add get_session_messages tool with three modes:\n  - last_n: tail mode for \"where were we\" / refresh memory\n  - around_sequence: context around a search match\n  - neither: full transcript\n- Add Sequence field to SearchResult and return real sequence numbers\n- Add GetSessionMessages to core/db with filtering options\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Add get_session_messages MCP tool and sequence numbers to search",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-12-27T21:45:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d580379c4d9dec562e1de1bbf7a2ac44a5c2b234",
          "body": null,
          "is_bot": false,
          "headline": "Fix version injection from GoReleaser ldflags",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T23:00:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "365c13c8e8941b8ae5252c7e108c8b6c38c7ac43",
          "body": null,
          "is_bot": false,
          "headline": "Fix all linter errors: errcheck, staticcheck, and unused code",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:53:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14e7c8051fe444dbc5389131fcdbacf7b5cb66f4",
          "body": null,
          "is_bot": false,
          "headline": "Fix agent session handling to use parent sessionId",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:29:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "689b07f14110609917df98faaab7eff07ea9b5e3",
          "body": null,
          "is_bot": false,
          "headline": "Add GitHub workflows, LICENSE, and GoReleaser config",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:24:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79f4b18dcb3216e0565d02d4b1d7388baf413b7d",
          "body": "- Implement progressive chunk-based summarization for long sessions\n- Two-tier summaries: one-line (60-80 chars) and full (2-3 paragraphs)\n- Extract issue IDs (ENA-1234, PROJ-123) and file paths from messages\n- Support AWS Bedrock with flexible credential options (profile, env vars, IAM)\n- Create ne\n[…]\nDB tables: session_summaries, summary_chunks, session_issues, session_files\n- Add --extract-only mode for metadata extraction without LLM calls\n- Increase max tokens to 1024 for better summary quality",
          "is_bot": false,
          "headline": "Add hierarchical LLM summarization with metadata extraction",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-30T22:06:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "aa4631c24ea72abb16f8d2278f6e934f5d4e4e05",
          "body": "- Add LastCwd field to Session struct\n- Update ListSessions query to fetch last cwd from messages\n- Falls back to session.cwd then project_path if no message cwd\n- Update TUI to display LastCwd instead of project_path\n- Match current directory highlighting uses LastCwd\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Show last working directory in TUI session list",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-26T22:47:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a0364791811ba3b92d7bb273d3e4b9a38f74205c",
          "body": "- Replace both escaped (\\n) and actual newlines with spaces\n- Reduce snippet length to 100 chars (from 150) to ensure match visibility\n- Increase TUI display to 100 chars (from 80) to match core extraction\n- Ensures highlighted matches are always visible in viewport\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Fix search snippet newline handling and length",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-26T20:05:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4a4ff9fae77cec46b848f36d59b9cb21fe6aae10",
          "body": "- Add relevance scoring that blends match count, summary matches, and recency\n- Rank sessions by score instead of pure timestamp ordering\n- Extract JSON field values instead of showing raw JSON blobs\n- Center snippets on matches with better boundary detection\n- Remove useless [message] label in TUI \n[…]\n save horizontal space\n- Shorten TUI snippet display to 80 chars to keep matches visible\n\n🤖 Generated with [Claude Code](https://claude.com/claude-code)\n\nCo-Authored-By: Claude <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "Improve search relevance ranking and snippet quality",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-26T17:28:55Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "89c41b001142c7f8f26a7d4baa9b7b2b388b7f9d",
          "body": "- Add LangChainGo dependency for LLM abstraction\n- Create llm package with Provider interface and Bedrock implementation\n- Add llm_summary and llm_summary_at columns to sessions table\n- Add `ccrider summarize` command with --limit, --force, --model flags\n- Supports Claude 3 Haiku (default) or other Bedrock models",
          "is_bot": false,
          "headline": "Add LLM-powered session summarization via AWS Bedrock",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-25T06:37:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4704908b4506e06915ac923dd6dfc4f97b15a781",
          "body": "- Remove \"substantive user message\" filtering that dropped entire sessions\n- Preserve agent session IDs from filename instead of parent session UUID\n- Agent sessions now import as separate entries (1252 agent sessions found)\n- Total sessions imported: 1968 (up from 358)",
          "is_bot": false,
          "headline": "Fix session import: remove aggressive filtering, preserve agent sessions",
          "author_name": "Neil Berkman",
          "author_login": "neilberkman",
          "committed_at": "2025-11-25T06:16:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 39,
      "commits_last_year": 199,
      "latest_release_at": "2026-07-16T07:53:08Z",
      "latest_release_tag": "v1.6.1",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 21,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 4.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/neilberkman/ccrider",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/neilberkman/ccrider",
          "is_deprecated": false,
          "latest_version": "v1.6.1",
          "repository_url": "https://github.com/neilberkman/ccrider",
          "versions_count": 43,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-16T07:49:51Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 4,
      "stars": 114,
      "watchers": 2,
      "fork_history": {
        "days": [
          {
            "date": "2026-07-01",
            "count": 3
          },
          {
            "date": "2026-07-22",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 4,
        "total_forks": 4
      },
      "star_history": null,
      "open_issues_and_prs": 1
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": true,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 26299,
      "source_files_sampled": 81,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".claude/CLAUDE.md",
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 6389
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/BurntSushi/toml",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.0"
        },
        {
          "name": "github.com/atotto/clipboard",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.4"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/config",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.29.4"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/credentials",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.17.57"
        },
        {
          "name": "github.com/aws/aws-sdk-go-v2/service/bedrockruntime",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.24.3"
        },
        {
          "name": "github.com/cbroglie/mustache",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.4.0"
        },
        {
          "name": "github.com/charmbracelet/bubbles",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.21.0"
        },
        {
          "name": "github.com/charmbracelet/bubbletea",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.3.10"
        },
        {
          "name": "github.com/charmbracelet/lipgloss",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/dustin/go-humanize",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.0.1"
        },
        {
          "name": "github.com/mark3labs/mcp-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.41.1"
        },
        {
          "name": "github.com/muesli/reflow",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.3.0"
        },
        {
          "name": "github.com/olebedev/when",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.1.0"
        },
        {
          "name": "github.com/sethvargo/go-diceware",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.5.0"
        },
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.1"
        },
        {
          "name": "github.com/tmc/langchaingo",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.14"
        },
        {
          "name": "github.com/zeebo/blake3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.2.4"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.40.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 1,
        "merged_prs": 12,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 7,
        "closed_unmerged_prs": 3
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "neilberkman",
          "commits": 190,
          "avatar_url": "https://avatars.githubusercontent.com/u/37657?v=4"
        },
        {
          "type": "User",
          "login": "dmd",
          "commits": 4,
          "avatar_url": "https://avatars.githubusercontent.com/u/41439?v=4"
        },
        {
          "type": "User",
          "login": "APE-147",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/70080800?v=4"
        },
        {
          "type": "User",
          "login": "Evidlo",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/5455841?v=4"
        },
        {
          "type": "User",
          "login": "seguri",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/2405157?v=4"
        },
        {
          "type": "User",
          "login": "rcny",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/1887341?v=4"
        },
        {
          "type": "User",
          "login": "koto9x",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/64445724?v=4"
        }
      ],
      "contributors_sampled": 7,
      "top_contributor_share": 0.955
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "pr-test.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "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": 0,
            "reason": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
            "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 1/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "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": "28 commit(s) and 3 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": 10,
            "reason": "packaging workflow 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": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 6,
            "reason": "4 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "dae884161ef0f58237346cb93eb8c68e4229458d",
        "ran_at": "2026-07-24T12:31:34Z",
        "aggregate_score": 3.5,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-16T07:53:15Z",
      "oldest_open_prs": [
        {
          "number": 23,
          "created_at": "2026-07-22T15:49:04Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ],
      "last_merged_pr_at": "2026-07-02T13:31:46Z",
      "ci_last_conclusion": "SUCCESS",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/neilberkman/ccrider",
    "host": "github.com",
    "name": "ccrider",
    "owner": "neilberkman"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 59,
      "inputs": {
        "security": 35,
        "vitality": 79,
        "community": 43,
        "governance": 60,
        "engineering": 68
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 79,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "commits_last_year": 199,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 21
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "21/52 weeks with commits",
                "points": 14.5,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 21
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "199 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 199
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "28 commit(s) and 3 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 39,
              "latest_release_tag": "v1.6.1",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 4.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "39 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 39
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4.4
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "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": 43,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 37,
            "inputs": {
              "forks": 4,
              "stars": 114,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "114 stars",
                "points": 33.3,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 114
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "4 forks",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "moderate",
        "name": "Sustainability & Governance",
        "value": 60,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 7,
              "top_contributor_share": 0.955
            },
            "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 96% of commits",
                "points": 1,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 96
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "7 contributors",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 77,
            "inputs": {
              "merged_prs": 12,
              "open_issues": 0,
              "closed_issues": 7,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 3
            },
            "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": "12/15 decided PRs merged",
                "points": 30.6,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 12,
                      "decided": 15
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 57,
            "inputs": {
              "followers": 30,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "neilberkman",
              "public_repos": 84,
              "account_age_days": 6443
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "30 followers of neilberkman",
                "points": 10.7,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 30,
                      "login": "neilberkman"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "84 public repos, account ~17 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 84
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 17
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/neilberkman/ccrider"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "43 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 43
                    }
                  }
                ],
                "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": "moderate",
        "name": "Engineering Quality",
        "value": 68,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "2 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "good",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 18,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 0,
              "scorecard_aggregate": 3.5
            },
            "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": "0 out of 1 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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 1/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "28 commit(s) and 3 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 detected",
                "points": 5,
                "status": "met",
                "details": [],
                "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": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "4 existing vulnerabilities detected",
                "points": 4.5,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 3
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 76,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.77,
              "agent_instruction_files": [
                ".claude/CLAUDE.md",
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 6389
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".claude/CLAUDE.md, AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".claude/CLAUDE.md, AGENTS.md"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "77 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 77,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.23,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "23 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 23,
                      "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": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 26299,
              "source_files_sampled": 81,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/81 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 81,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "critical",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 20,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": true,
              "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": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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-24T12:31:43.934337Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/n/neilberkman/ccrider.svg",
  "full_name": "neilberkman/ccrider",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

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