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

dirtyduck3712 / Ducklog

Go · ShellЛіцензію не виявлено★ 0 зірок⑂ 0 форківз лип. 2026 р.Переглянути на GitHub ↗

dirtyduck3712/Ducklog має індекс здоров’я 31 зі 100, що відповідає смузі «У зоні ризику». Найвищий показник — AI Readiness (58/100), найнижчий — Community & Adoption (12/100). Останнє оновлення було 3 дні тому.

31
загалом / 100
У зоні ризику

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

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

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

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

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

Власність

duck3712Особистий обліковий запис
3 підписники8 публічних репозиторіївз бер. 2015 р.

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

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

РеєстрПакетВерсіяЗавантажень / місВерсіїОстання публікація
Gogithub.com/dirtyduck3712/ducklog/clientv0.1.0-15 днів тому
Gogithub.com/dirtyduck3712/ducklog/zapsinkv0.1.0-15 днів тому

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

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

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

33У зоні ризику · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 3 дн. тому
1.4/36Ритм комітів — 2/52 тижнів із комітами
17.7/18Обсяг комітів — 93 комітів за останній рік
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Використані вхідні дані
commits_last_year93
human_commit_share1
days_since_last_push3
active_weeks_last_year2
Як обчислюється оцінка
0/27Випускає релізи — релізів не опубліковано
0/36Свіжість релізів — релізів немає
0/27Ритм релізів — релізів немає
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count0
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

12Критичний · 18% загального індексу
Як обчислюється оцінка
0/60Зірки — 0 зірок
0/25Форки — 0 форків
0/15Спостерігачі — 0 спостерігачів
Використані вхідні дані
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
0/22.5Ліцензія — файлу ліцензії не виявлено
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ні

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

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

39У зоні ризику · 24% загального індексу
Як обчислюється оцінка
0/46.8Вирішення issue — немає issue або даних
0/38.3Прийняття PR — немає вирішених pull request-ів або даних
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Використані вхідні дані
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Виключено з оцінювання (немає даних або не застосовно): Вирішення issue, Прийняття PR. Залишкові ваги перенормовано.

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

41У зоні ризику
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
4.3/25Охоплення власника — 3 підписників у dirtyduck3712
18.9/25Послужний список — 8 публічних репозиторіїв, вік облікового запису ~11 р.
Використані вхідні дані
followers3
owner_typeUser
is_verified
owner_logindirtyduck3712
public_repos8
account_age_days4 159
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.
Як обчислюється оцінка
25/25Опубліковано й доступно — 2 пакет(ів) у go
35/35Свіжість публікацій — остання публікація 5 дн. тому
4/20Історія версій — 1 опублікованих версій
20/20Не застарілий — активний, не deprecated і не yanked
Використані вхідні дані
packagesgithub.com/dirtyduck3712/ducklog/client, github.com/dirtyduck3712/ducklog/zapsink
ecosystemsgo
any_deprecatedні
min_days_since_publish5

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

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

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

Інженерні практики

30У зоні ризику
Як обчислюється оцінка
0/24Процеси CI
24/24Наявні тести
0/16Конфігурація лінтера
0/9.6Pre-commit-хуки
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — немає даних
Використані вхідні дані
has_ciні
has_testsтак
has_editorconfigні
has_linter_configні
has_precommit_configні
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: CI-Tests. Залишкові ваги перенормовано.

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

65Помірний
Як обчислюється оцінка
30/30README
25/25Каталог документації
0/15Сайт документації / домашня сторінка
0/10Опис репозиторію
0/10Теми
10/10Wiki
Використані вхідні дані
topics
has_wikiтак
homepage
has_readmeтак
has_docs_dirтак
has_descriptionні

Безпека

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

21Критичний · 16% загального індексу

Стан безпеки

21Критичний
Як обчислюється оцінка
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/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
0/10Dangerous-Workflow — немає даних
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Ліцензія — license file not detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — немає даних
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate2,1
Виключено з оцінювання (немає даних або не застосовно): ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Залишкові ваги перенормовано.

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

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

58Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 93 з 93 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
12.6/18Розгортання однією командою — client/go.mod, go.mod, zapsink/go.mod (домовленість інструментарію, без раннера задач)
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Go (статично типізована)
10/10Відтворюване середовище — lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 93 комітів немає створених агентом
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_files
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0
toolchain_manifestsclient/go.mod, go.mod, zapsink/go.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Go (статично типізована)
55/55Керовані розміри файлів — 0/40 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageGo
largest_source_bytes7 036
source_files_sampled40
oversized_source_files0

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

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

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

  • Contributor list unavailable
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Докладніше

OpenSSF Scorecard 2.1 / 10
2.1сукупно

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

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
н/дCI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
н/дDangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
0Licenselicense file not detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
н/дToken-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Прямі залежності 3
РеєстрПакетОбмеження версіїМаніфест
Gogithub.com/mark3labs/mcp-gov0.48.0go.mod
Gogithub.com/dirtyduck3712/ducklog/clientv0.1.0zapsink/go.mod
Gogo.uber.org/zapv1.27.1zapsink/go.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": 287,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 88252,
        "Shell": 12582,
        "Python": 548,
        "Go Template": 1530
      },
      "pushed_at": "2026-07-20T03:13:57Z",
      "created_at": "2026-07-13T14:32:52Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T03:14:01Z",
      "description": null,
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": null,
      "default_branch": "main",
      "license_spdx_raw": null,
      "primary_language": "Go",
      "significant_languages": [
        "Go",
        "Shell"
      ]
    },
    "owner": {
      "blog": null,
      "name": "duck3712",
      "type": "User",
      "login": "dirtyduck3712",
      "company": null,
      "location": null,
      "followers": 3,
      "avatar_url": "https://avatars.githubusercontent.com/u/11313766?v=4",
      "created_at": "2015-03-04T12:55:58Z",
      "is_verified": null,
      "public_repos": 8,
      "account_age_days": 4159
    },
    "license": {
      "state": "absent",
      "spdx_id": null,
      "raw_spdx": null,
      "file_present": false,
      "scorecard_found": false,
      "profile_has_license": false
    },
    "activity": {
      "releases": [],
      "recent_commits": [
        {
          "oid": "f9eb80fb1bb6a71b6264a760b14ff0434442432f",
          "body": "Telegram 出口三項手動驗收實測通過(firing / send_resolved / VL Basic Auth)。\n通知訊息改走 alertmanager templates 機制,正體中文。\n關鍵陷阱:parse_mode HTML 下 html/template 已自動跳脫,模板內不可再手動跳脫。",
          "is_bot": false,
          "headline": "merge: 告警通知中文化(Telegram 模板 + rule summary)+ 驗收清單完成",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-20T03:08:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d18414281bdf33371b237c93cfe9a52d5d163cd3",
          "body": "三項手動驗收實測通過。原標準「/api/v1/rules 有 group」不足以證明\ndatasource 認證可用——rule 從磁碟載入,查 VL 全 401 時 group 照樣出現;\n改記正確驗法(401/200 對照閘門 + lastError 空 + 端到端 firing),\n並補充通知訊息格式與跳脫陷阱。",
          "is_bot": false,
          "headline": "docs(alert): Telegram 驗收清單完成 + 修正 Basic Auth 驗收標準",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-20T03:07:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0eac6c799bb486aa3be42af5c567951b142a6598",
          "body": "以 alertmanager templates 機制取代內建的 telegram.default.message:\n- 新增 alertmanager/templates/ducklog.tmpl(正體中文,firing/resolved 兩種版面)\n- alertmanager.yml.tmpl 加 templates: 與 telegram_configs.message:\n- docker-compose 掛載 templates 目錄\n\nparse_mode: HTML 下 telegram notifier 走 TmplHTML → Go html/template,\n{{ }} 帶出的值已自動 contextual escaping,模板內不可再手動跳脫 & < >,\n否則雙重跳脫、訊息顯示成字面 &lt; &amp;(已踩過,原因記於模板註解)。",
          "is_bot": false,
          "headline": "feat(alert): Telegram 通知改中文模板",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-20T03:07:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98aa12a2aa5d6a49074595fe980f1ca2541d02a1",
          "body": "HighErrorRate / FatalPattern 的 annotations.summary 由英文改為正體中文,\nsummary 會原樣帶進 Telegram 通知,故與訊息模板一併中文化。",
          "is_bot": false,
          "headline": "feat(alert): rule summary 改中文",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-20T03:07:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f45af65e7daaa68ea321b89e1c8370e45a17925",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "merge: service 靜默偵測(absence,不分組 stats filter n:0)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T23:52:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0383e250a504ab84ba13c5a49bd32e910e541ac2",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "fix(alert): e2e alive 對照改 fail-closed + README glob footgun 提醒",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T20:13:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e85d59b5c23a2c81e8b47dc812c30900eec5b9f6",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: spec 補冷啟瞬時誤報 caveat(e2e 浮現)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T20:04:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7159de372cceafbf9cb3bb5110928991b206105b",
          "body": null,
          "is_bot": false,
          "headline": "docs(alert): service 靜默偵測使用說明 + 恆 firing 警示",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T20:01:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c887804f5266e8d80a9e88abe9d50898e90ad1a",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "test(alert): service 靜默偵測 e2e(dead firing + alive 對照)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T19:52:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a56808d43c997417b84acbe59fd903676c7fcd38",
          "body": null,
          "is_bot": false,
          "headline": "feat(alert): service 靜默偵測 rule 範本 + vmalert glob 掛載",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T18:42:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce97a8f50da159b51aad0b39d2810a283165679a",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: service 靜默偵測實作計畫(3 task,含 firing 必驗點)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T18:39:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7ce27179a635a9e8751b816844a1a33ac1c9c2a",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: service 靜默偵測(absence)設計",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T18:33:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b4b35532e0dc2cb32006bce12e32b06ade5e6a1",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "merge: vmalert 告警(vmalert+VM+alertmanager,docker-compose,off-by-default)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T18:05:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a037aa026dddd74ba2bf2f1b6855287c27b631ab",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs(alert): 補 VL 側 Basic Auth 啟用說明 + 修正 .env.example 過時註解",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T18:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2d4da583710bbfc2c7ec0eb8130f7d09fc592a29",
          "body": null,
          "is_bot": false,
          "headline": "docs(alert): 告警 stack 啟動說明 + Telegram 手動驗收清單",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T17:52:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ce49859d2c1467508315cd98c58149168525bbb",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "test(alert): 端到端 smoke(ingest panic → FatalPattern → webhook sink)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T17:47:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "70e10097bd34d636c1b5c3068aa054a0dd134d4d",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "feat(alert): docker-compose alert stack(VL+VM+vmalert+alertmanager)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T17:31:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78c29a1d5f95e5d336ef2dda60d42f9ebf3020ff",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "feat(alert): alertmanager config template + envsubst 渲染腳本",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T17:25:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c1d0bdf1133a64a8280c5ba417fe1d333548945",
          "body": null,
          "is_bot": false,
          "headline": "feat(alert): vmalert vlogs rule 集(error-rate 門檻 + fatal-pattern)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T17:21:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ac59b5d0f82d261a6bc9f1d8d06746a8613b411a",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: vmalert 告警實作計畫(5 task,dryRun+e2e 驗證)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T17:14:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a1dabcf2b4034a2ce9f889aba4431a58ad1ce7df",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: vmalert 告警設計(標準全家桶 + docker-compose)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T09:16:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "89361a4727630feab5ffa0c8a059735b408ddb85",
          "body": "偵測舊接法(本機 replace / 裸 ducklog/client import / APIKey 欄位),\n① 刪已移除的 APIKey 欄位(必要,否則 rebuild 炸)② 本機 replace → go get\n完整路徑。含安全閘與「改名不破壞 replace、只有 APIKey 移除會炸」的說明。\nmigrate 步驟已用真實多行 config 端到端實測(炸→綠)。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "feat(skill): ducklog-integration 加 migrate 舊接法模式",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:59:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c8520443e27ff25d5f873d080d0a4c55a1fee84c",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: skill 旁補 symlink 安裝說明(全域啟用/新機器重建)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:48:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13c0f2c9ca128a0fa152a72608afff1442978034",
          "body": "canonical 移入 repo .claude/skills/;~/.claude/skills 那份改 symlink\n指向此處(單一來源、有版控、仍全域可用)。內容為 go get 版接入指南。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "chore: ducklog-integration skill 納入版控",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:47:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15e47b409da78f555d706f91215823b3513958d6",
          "body": "client/zapsink 正名為 github.com/dirtyduck3712/ducklog/*,外部專案改用\ngo get,不再整包複製。root module 不動;zapsink 保留 replace 供 repo 內開發\n(對外部 consumer 被忽略,走 require v0.1.0)。接入文件改 go get 為主。\n\n發佈需另打 tag client/v0.1.0 + zapsink/v0.1.0。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "merge: 發佈 client/zapsink 模組(可 go get)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:32:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef20259ba9a05129dc678e9411dc307c016c0e58",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: 註明 client 需 Go≥1.22、zapsink 需 Go≥1.24",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:32:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4f9eb2d7ca946d1d08f9bcadd4120efcc38c8d3",
          "body": "INTEGRATION §0 以 go get 為主要接法,import 範例改完整路徑。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: 接入改用 go get github.com/dirtyduck3712/ducklog/*",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:21:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "56c0192e95cf7db367a67073c57dc71c36527f8c",
          "body": "裸 module path 無法 go get;改為 VCS 路徑供外部安裝。\nzapsink 保留 replace => ../client 供 repo 內開發。root 不動。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "refactor(modules): client/zapsink 正名為 github.com/dirtyduck3712/ducklog/*",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:17:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3c99d6370b6bd8ea924f1b02e110aef23cfa321",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: 發佈 client/zapsink 模組實作計畫",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:15:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30c91417afb5101184074bd59ab8b35e03618f65",
          "body": "正名 client/zapsink 為 github.com/dirtyduck3712/ducklog/* 路徑,\n取代整包複製/本機 replace。root 不動。monorepo + 前綴 tag。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: 發佈 client/zapsink 模組設計(可 go get)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T06:09:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "596161c1ec145ea4ddd95aa85ffb8fedd0bc689a",
          "body": "VL 以 -httpAuth.* 開一組 Basic Auth;寫入端 RemoteConfig.Username/Password、\n讀取端 VL_USERNAME/VL_PASSWORD env,三端留空維持無 auth。移除對 VL 無效的\nAPIKey/Bearer。/health 不受 auth 保護,故 MCP 啟動以受保護查詢驗憑證 fail-fast。\nTLS 記 caveat。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "merge: VL Basic Auth(單一共享密鑰,off-by-default)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T05:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e20afb4b6bb1f91257fed050e0df7bf2a53f1dda",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: VL Basic Auth 執行示範與 env 說明(含 TLS caveat)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:57:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4bf1484c9e7939999cfef488240dcdc1c8a76ef",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "fix(mcp): 啟動時以受保護查詢驗證 VL 憑證(/health 不受 auth 保護)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:51:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9a9cd245a034ab4dfdc6cf22fb1001f424add2c9",
          "body": "vl.Client 新增 NewWithAuth,Ping/Query 帶 Basic Auth;MCP 讀 env。\nvltest 加 StartVLWithAuth 供端到端驗證。New 簽章不變。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "feat(vl): 讀取端 Basic Auth(NewWithAuth + VL_USERNAME/PASSWORD)",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:46:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16e517df6aa065dc6273b6b37f4f974b9dcc5663",
          "body": "RemoteConfig 移除 APIKey、改 Username/Password 走 SetBasicAuth;\n憑證空則不帶 auth header(off-by-default)。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "feat(client): VL Basic Auth,移除對 VL 無效的 Bearer",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:39:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "280cd5a0420aecc208350df71792450eb8153b3f",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: VL Basic Auth 實作計畫",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:36:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ecbab6cd46aa982a789e95dc599a8a734ef2b1f7",
          "body": "單一共享密鑰、off-by-default;移除 client 對 VL 無效的 Bearer,\n改帶 Basic Auth;讀取端獨立 VL_USERNAME/VL_PASSWORD env。TLS 記 caveat。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: VL Basic Auth 設計",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:27:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db26e2410f705b31549caea33ee85c4f2f387b5f",
          "body": "第 5 個 MCP tool — 4 個罐頭 tool 不合用時的受控 raw LogsQL 通道。\n時間過濾 quote-aware 注入(括號包裹解 OR 優先序)、命中 limit 誠實截斷。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "merge: run_logsql 逃生 tool",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:13:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de1fd25e075f0c2b8fc0f39c89ec6e54fa0cd99d",
          "body": "① injectTimeFilter 改用 firstUnquotedPipe 找引號外第一個 pipe 切分,\nfilter 段用括號包住再 AND 時間;修正正則/phrase 內 | 被誤切導致 _time\n被吞、時間護欄靜默失效,並解掉 top-level OR 的優先序漏過濾。\n② 命中 limit 截斷時清零 TotalMatched,消除 total/returned/truncated 矛盾。\n補 TestInjectTimeFilter(含正則/OR 回歸)、time-actually-filters、\nQUERY_FAILED 三組測試。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "fix(tools): run_logsql 時間注入 quote-aware + 截斷不吐誤導 total_matched",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T04:06:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7a26d1a9f58fd5ff29f32a74d30c473796118af",
          "body": "第 5 個 tool,description 引導 AI 優先用專用 tool。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "feat(mcpserver): 註冊 run_logsql tool",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T03:49:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43e9e5979862cc38360fd37837e96022404f67e3",
          "body": "時間過濾注入第一個 pipe 之前;命中 limit 即標 Truncated,不硬湊 Count。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "feat(tools): run_logsql 逃生口 — 任意 LogsQL pipeline",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T03:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c2bc9e889b82caadda4d6b4808721285ad33cafa",
          "body": "Claude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: run_logsql 逃生 tool 實作計畫",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T03:42:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30a64fd94c2a02e1235e12ac27ea6fcc1366170b",
          "body": "4 個罐頭 tool 不合用時的受控 raw LogsQL 通道。沿用 requireRange +\nBoundRaw 護欄;關鍵是時間過濾須注入第一個 pipe 之前。\n\nClaude-Session: https://claude.ai/code/session_018usf3iQoLwJuvsjzPQmXDN",
          "is_bot": false,
          "headline": "docs: run_logsql 逃生 tool 設計",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T03:38:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "895632da41fe227c6967114894cd8c012e6da31b",
          "body": "json.Marshal(error) 會「成功」但產出 {}(無 exported fields),\nVictoriaLogs 攤平空物件後欄位整個不見——slog 慣用的 \"err\", err\n在查詢端看不到錯誤原因。jsonSafe 在 marshal 檢查前先轉字串。\n\nClaude-Session: https://claude.ai/code/session_0146m1jQxFDhxaBHsxrx1LRn",
          "is_bot": false,
          "headline": "fix(client): error attr 序列化為 Error() 字串,修欄位靜默消失",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-18T01:56:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "24f56f3c27411f7d26980c4ca84ab84ef566e5a5",
          "body": "…ebug\n\nzapcore.NewTee evaluates each sub-core's Enabled independently, so the\nducklog sink hardcoded at LevelDebug kept receiving debug entries even when\nthe base console core was gated at info — LOG_LEVEL=info didn't stop debug\nfrom reaching VictoriaLogs. Tee now derives the sink level from cfg.Level\n(default Info), matching client.RemoteHandler.\n\nClaude-Session: https://claude.ai/code/session_01F6M2eYKpycNVAbGmH7vcSy",
          "is_bot": false,
          "headline": "fix(zapsink): respect configured level in Tee instead of hardcoding D…",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-13T22:54:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ada6c01439eed366d58e6c67da93d9437d03db96",
          "body": "phase0/ was throwaway probe code that validated (and ultimately\ndisproved) the self-hosted DuckLake storage approach. The pivot to\nVictoriaLogs + MCP is merged and the rationale/evidence lives in the\ndesign doc under docs/superpowers/specs/. The spikes carried no\nunique knowledge, and the committed FINDINGS.md (\"DuckLake PASS\")\ncontradicted the shipped architecture.\n\nClaude-Session: https://claude.ai/code/session_01WGuG4rjv2dL8XuFUyLhumf",
          "is_bot": false,
          "headline": "chore: remove phase0 DuckLake validation spikes",
          "author_name": "DrDex",
          "author_login": null,
          "committed_at": "2026-07-13T15:04:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c277822ed97597683722ea7195ef71f287f47afa",
          "body": null,
          "is_bot": false,
          "headline": "merge: rename docklog -> ducklog",
          "author_name": "ducklog",
          "author_login": null,
          "committed_at": "2026-07-13T14:29:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1df59bbe43c0e1deff895a403c085e3beee90c0c",
          "body": "Module paths (ducklog, ducklog/client, ducklog/zapsink), all imports,\ncmd/ducklog-mcp, the MCP server name, DUCKLOG_VL_URL env var, README,\nINTEGRATION.md, and run-dev.sh. Behavior unchanged.\n\nClaude-Session: https://claude.ai/code/session_01HKX13PQ3HszozbEJUSYoKd",
          "is_bot": false,
          "headline": "rename: docklog -> ducklog across modules, binary, docs, MCP name",
          "author_name": "ducklog",
          "author_login": null,
          "committed_at": "2026-07-13T14:29:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4b99b26bc2105a11dbbc491e356316b11262cd0c",
          "body": null,
          "is_bot": false,
          "headline": "merge: zapsink reusable zap adapter + integration guide",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T14:13:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ddd0606893d270133ac8920ff9444ea0ce89831",
          "body": "- zapsink: new importable module (docklog/zapsink) bridging go.uber.org/zap\n  to the slog-based transport, so any zap service can feed VictoriaLogs.\n  NewCore (generic zap->slog.Handler) + Tee (one-call wrap of a base core\n  with a docklog sink). Ported from the per-project copy that lived in a\n  co\n[…]\nace,\n  MCP registration, and the gotchas (vmui time range, curl content-type,\n  non-serializable attrs, zap Fatal skips drain).\n\nClaude-Session: https://claude.ai/code/session_01HKX13PQ3HszozbEJUSYoKd",
          "is_bot": false,
          "headline": "feat(zapsink): reusable zap->docklog adapter + integration guide",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T14:13:49Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cb4f45d0fdc4ba406d09ea6205e4e4c2373958cf",
          "body": null,
          "is_bot": false,
          "headline": "merge: never drop logs on non-serializable attrs (transport hardening)",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T04:35:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "09a155945eca765c9f4233653487eaeb82f9b557",
          "body": "Routing slog.Default() to the transport captures library error logs\n(e.g. pgx) whose attr values contain non-JSON-serializable fields such\nas pgconn.DialFunc. Two independent defects dropped whole batches of\ngood logs silently (only the stdout fallback kept them):\n\n1. flattenAttr stored raw attr val\n[…]\neither the batch nor the line is lost.\n\nBoth paths now honor the never-silently-drop contract. Regression tests\nadded for each.\n\nClaude-Session: https://claude.ai/code/session_01HKX13PQ3HszozbEJUSYoKd",
          "is_bot": false,
          "headline": "fix(client): never drop logs on non-serializable attrs",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T04:30:01Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a57617c5987d3fcf0b8e068ae31387f48955878c",
          "body": null,
          "is_bot": false,
          "headline": "merge: VictoriaLogs backend + MCP tooling layer pivot",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T03:04:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "28cc4ace081bd1899583b3022da5fb9c73f4026a",
          "body": "…ashes, honest get_trace total, reject piped search) + tests",
          "is_bot": false,
          "headline": "fix: harden anti-confabulation contract (bound compare, escape backsl…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:57:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "be9708b05d99dc5f858ef72ab4860803e0aa361b",
          "body": null,
          "is_bot": false,
          "headline": "chore: gitignore docklog-mcp build output",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:49:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b97a9577c72c096d8a80acbfff5dcda89f89af36",
          "body": null,
          "is_bot": false,
          "headline": "docs: run scripts + README for VictoriaLogs + MCP setup",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:45:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "371a03f7c02e604dc75e77ea5f5a40a159429238",
          "body": "…toriaLogs)",
          "is_bot": false,
          "headline": "refactor: remove superseded DuckLake storage layer (superseded by Vic…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:40:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7affb4c055ef4f9e8b9ca21629e6b1a6f80bfa03",
          "body": null,
          "is_bot": false,
          "headline": "feat(mcp): stdio MCP server exposing 4 LogsQL-backed tools",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:34:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5dc4bfaad11ecc534f6bc8506cff65c12e5361e5",
          "body": "…s over LogsQL",
          "is_bot": false,
          "headline": "feat(tools): summarize_errors, get_trace, search_logs, compare_period…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:23:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9407d32c2bafeafb19d89bf4ff89b38acf2fc629",
          "body": "…rade)",
          "is_bot": false,
          "headline": "feat(bound): anti-confabulation contract (token-bound, explicit downg…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:20:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "edba0c1d0de2b1e5a529e8c2f3e0b02953ade0da",
          "body": null,
          "is_bot": false,
          "headline": "feat(vl): LogsQL HTTP client + query builders",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:10:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78c8463411795a34364d15ce595fe2134c233efd",
          "body": null,
          "is_bot": false,
          "headline": "feat(client): repoint transport e2e to VictoriaLogs ingest",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T02:04:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "670c4a89076a8e7dee421108a7c371015b0e5ede",
          "body": null,
          "is_bot": false,
          "headline": "docs: pivot design — VictoriaLogs backend + thin MCP tooling layer",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-13T01:49:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f02f3393de916ef3b047128f9585bcca2340c923",
          "body": null,
          "is_bot": false,
          "headline": "fix(config): default rate_limits.default to 1000 (avoid silent drop-all)",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:55:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bcd945e7abc40019ebcdd005d1cb9baecb5ef28a",
          "body": "…ain to 5s",
          "is_bot": false,
          "headline": "fix(client): resolve LogValuer, flatten inline groups, bound Close dr…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:46:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e5896a6c8d62a3a1557b27a0ced93acc71141fc5",
          "body": null,
          "is_bot": false,
          "headline": "test(client): end-to-end wire-contract test against real docklog server",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:30:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8f7bcaadc434c343781659a20ce2da3607145b62",
          "body": null,
          "is_bot": false,
          "headline": "feat(client): trace id HTTP middleware + outbound propagation",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:25:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de2045aa53832654652f380b2935784e538235e1",
          "body": null,
          "is_bot": false,
          "headline": "fix(client): idempotent Close + serialize shutdown-summary write",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:24:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e49c1af2894053263ebb5d35f166f18568ec81b5",
          "body": null,
          "is_bot": false,
          "headline": "feat(client): slog.Handler with dual-write, trace, non-blocking, Close",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:19:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "17117871fbd455e06d3a44fabf829d61167895a0",
          "body": "…ng drop",
          "is_bot": false,
          "headline": "feat(client): background batch sender with retry, breaker, non-blocki…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:14:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3d86ce4d1dfd69c0ad7702e29b40bf812411dba",
          "body": null,
          "is_bot": false,
          "headline": "feat(client): RemoteConfig with defaults",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:10:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7d6bf3453ab8df414aeedd9671ea393d07969eb",
          "body": null,
          "is_bot": false,
          "headline": "feat(client): consecutive-failure circuit breaker",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:08:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cf4c66b1828265a549e8c44d4354e45f9cc79f94",
          "body": null,
          "is_bot": false,
          "headline": "feat(client): trace id generation + context propagation",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:06:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "780f4b6f53936b4f88eeefdc0f7ec8329246c8a4",
          "body": null,
          "is_bot": false,
          "headline": "feat(client): module scaffold + wire types",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T22:03:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "43cce6cb2bbb8d11a483116fded287641a4accaf",
          "body": null,
          "is_bot": false,
          "headline": "docs: Phase 1b client transport implementation plan",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T21:43:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "37ee6d0fe39195d32ceeabf59746458958919e45",
          "body": null,
          "is_bot": false,
          "headline": "docs: Phase 1b Go client transport design spec",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T21:38:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "86c706571b0f020e4045879b2994672da046b9f6",
          "body": null,
          "is_bot": false,
          "headline": "fix(ingest): canonicalize valid trace_id so no format can poison a batch",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:51:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fe30e9b190468496cfca7d73e2c3b8b90aa0220",
          "body": "…json drops\n\nThree whole-branch review fixes defending never-lose / never-silent rules:\n\n- I-2: ParseLevel is now case-insensitive (slog's INFO/ERROR no longer\n  silently downgrade to Info); genuinely unknown non-empty levels are\n  marked _level_unknown instead of a silent downgrade.\n- I-1: non-UUID\n[…]\nr() is now checked so an over-cap line returns 400\n  instead of a silent truncated 200.\n\nmergeSkewFlag generalized into a shared mergeAttr helper.\nTests added for all three; model+ingest suites green.",
          "is_bot": false,
          "headline": "fix(ingest): case-insensitive level, trace_id validation, explicit nd…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:49:27Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f475e0dba0d49c1293df885173482f85a46442e5",
          "body": null,
          "is_bot": false,
          "headline": "test: assert crash test committed progress (no vacuous 0/0 pass)",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:36:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "646a30928aee700c694b3f6306aa25f8f5a1a177",
          "body": null,
          "is_bot": false,
          "headline": "test: crash recovery integration test (kill -9 during ingest)",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:33:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "739b17b2d3e91d07b361a6723c495c1c7777a0c3",
          "body": null,
          "is_bot": false,
          "headline": "feat: config loader + main wiring with graceful shutdown",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:28:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38876c5414e90ba3a4034454f77e87ca800aaa9e",
          "body": "…opped",
          "is_bot": false,
          "headline": "test: assert health exposes catalog_size_mb, last_checkpoint null, dr…",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:25:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d57acc673c2b3de9bb75b45c1aa564aee902471c",
          "body": null,
          "is_bot": false,
          "headline": "feat: health endpoint with catalog size + last checkpoint",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:23:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "287bc5037603101e9b4563aaddb974963f1a7d68",
          "body": null,
          "is_bot": false,
          "headline": "test: cover checkpoint panic recovery via Checkpointer interface",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0291044e9e8d27348378698f4412dc7f1dd3fe0d",
          "body": null,
          "is_bot": false,
          "headline": "feat: checkpoint loop with panic recovery + last-checkpoint tracking",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:18:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45b51a3a17f062ed5d4777973e08c0787ba57e64",
          "body": null,
          "is_bot": false,
          "headline": "feat: ingest handler wiring auth, skew, rate-limit, disk-guard, store",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:13:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd535b82504c91217e49a4e062f06cfefd8ea4cb",
          "body": null,
          "is_bot": false,
          "headline": "feat: disk usage guard with warn/reject/purge thresholds",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:07:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7f145b5985fe3f9db627891dc9fc05247887e75",
          "body": null,
          "is_bot": false,
          "headline": "feat: per-service token bucket rate limiter",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:05:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7da78419bb502870f08c05ac9ec11f91f300e1d0",
          "body": null,
          "is_bot": false,
          "headline": "feat: bearer key auth with scopes",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:03:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d961222cc837e41a3a8d25872de1710d35536666",
          "body": null,
          "is_bot": false,
          "headline": "feat: separate metrics store with upsert + dropped counter",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T18:00:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65f326cee997e020c0b4cb793cd37389ee9f9ec7",
          "body": null,
          "is_bot": false,
          "headline": "feat: DuckLake store with batch insert, checkpoint, retention",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T17:57:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f446509f17777b9bafeb68bdd22af7b9db335f24",
          "body": null,
          "is_bot": false,
          "headline": "feat: project scaffold + model types",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T17:54:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d54bd03a034a6d96491a4eb4fc7d91a95069527",
          "body": null,
          "is_bot": false,
          "headline": "chore: initial repo — spec, phase0 findings, phase1 plan",
          "author_name": "docklog",
          "author_login": null,
          "committed_at": "2026-07-12T17:52:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 0,
      "commits_last_year": 93,
      "latest_release_at": null,
      "latest_release_tag": null,
      "releases_from_tags": false,
      "days_since_last_push": 3,
      "active_weeks_last_year": 2,
      "days_since_latest_release": null,
      "mean_days_between_releases": null
    },
    "community": {
      "has_readme": true,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": 14,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/dirtyduck3712/ducklog/client",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/dirtyduck3712/ducklog/client",
          "is_deprecated": false,
          "latest_version": "v0.1.0",
          "repository_url": "https://github.com/dirtyduck3712/ducklog",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T06:32:26Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        },
        {
          "name": "github.com/dirtyduck3712/ducklog/zapsink",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/dirtyduck3712/ducklog/zapsink",
          "is_deprecated": false,
          "latest_version": "v0.1.0",
          "repository_url": "https://github.com/dirtyduck3712/ducklog",
          "versions_count": 1,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T06:32:26Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 5
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "client/go.mod",
        "go.mod",
        "zapsink/go.mod"
      ],
      "largest_source_bytes": 7036,
      "source_files_sampled": 40,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "client/go.mod",
        "go.mod",
        "zapsink/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/mark3labs/mcp-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.48.0"
        },
        {
          "name": "github.com/dirtyduck3712/ducklog/client",
          "manifest": "zapsink/go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.1.0"
        },
        {
          "name": "go.uber.org/zap",
          "manifest": "zapsink/go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.27.1"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": null,
      "bot_contributors": 0,
      "top_contributors": [],
      "contributors_sampled": null,
      "top_contributor_share": null
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "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": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/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": null,
            "reason": "no workflows found",
            "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": 0,
            "reason": "license file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "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": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": null,
            "reason": "No tokens found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "f9eb80fb1bb6a71b6264a760b14ff0434442432f",
        "ran_at": "2026-07-23T16:43:52Z",
        "aggregate_score": 2.1,
        "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-20T03:13:58Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": null,
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/dirtyduck3712/Ducklog",
    "host": "github.com",
    "name": "Ducklog",
    "owner": "dirtyduck3712"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 31,
      "inputs": {
        "security": 21,
        "vitality": 33,
        "community": 12,
        "governance": 39,
        "engineering": 44
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "at_risk",
        "name": "Vitality",
        "value": 33,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 55,
            "inputs": {
              "commits_last_year": 93,
              "human_commit_share": 1,
              "days_since_last_push": 3,
              "active_weeks_last_year": 2
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 3 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "2/52 weeks with commits",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "93 commits in the last year",
                "points": 17.7,
                "status": "partial",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 93
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "critical",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "releases_count": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "no releases published",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases_published",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "no releases",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_releases",
                    "params": {}
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": true,
              "has_license": false,
              "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": "no license file detected",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "license_absent",
                    "params": {}
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 39,
        "weight": 0.24,
        "metrics": [
          {
            "key": "responsiveness",
            "band": "critical",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution, PR acceptance. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution",
                    "pr_acceptance"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 1,
            "inputs": {
              "merged_prs": 0,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "no decided pull requests or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_decided_prs_or_data",
                    "params": {}
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "followers": 3,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "dirtyduck3712",
              "public_repos": 8,
              "account_age_days": 4159
            },
            "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": "3 followers of dirtyduck3712",
                "points": 4.3,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 3,
                      "login": "dirtyduck3712"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "8 public repos, account ~11 yr old",
                "points": 18.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 8
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 11
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "good",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "packages": [
                "github.com/dirtyduck3712/ducklog/client",
                "github.com/dirtyduck3712/ducklog/zapsink"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 5
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "2 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 2,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 5 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 5
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "1 published versions",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Engineering Quality",
        "value": 44,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "at_risk",
            "name": "Engineering practices",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: CI-Tests. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_ci_tests"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 30,
            "inputs": {
              "has_ci": false,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 16
              },
              {
                "key": "pre_commit_hooks",
                "name": "Pre-commit hooks",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 9.6
              },
              {
                "key": "editorconfig",
                "name": ".editorconfig",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.4
              },
              {
                "key": "openssf_scorecard_ci_tests",
                "name": "OpenSSF Scorecard: CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "moderate",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 65,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": true,
              "has_description": false
            },
            "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": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "critical",
        "name": "Security",
        "value": 21,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 21,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 13,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 5,
              "scorecard_aggregate": 2.1
            },
            "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": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/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 workflows found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "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": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "No tokens found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 58,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 1,
              "agent_instruction_files": [],
              "agent_instruction_max_bytes": null
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "no CLAUDE.md / AGENTS.md / editor rules",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_instructions",
                    "params": {}
                  }
                ],
                "max_points": 45
              },
              {
                "key": "machine_readable_docs_llms_txt",
                "name": "Machine-readable docs (llms.txt)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "93 of 93 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 93,
                      "sampled": 93
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "client/go.mod",
                "go.mod",
                "zapsink/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "client/go.mod, go.mod, zapsink/go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "client/go.mod, go.mod, zapsink/go.mod"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "no agent-authored commits among the last 93",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 93
                    }
                  }
                ],
                "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": 7036,
              "source_files_sampled": 40,
              "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/40 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 40,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "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": [
    "Contributor list unavailable",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-23T16:43:56.778178Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/d/dirtyduck3712/Ducklog.svg",
  "full_name": "dirtyduck3712/Ducklog",
  "license_state": "absent",
  "license_spdx": null
}

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

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

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