Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-23 16:43 UTC

dirtyduck3712 / Ducklog

Go · ShellKeine Lizenz erkannt★ 0 Sterne⑂ 0 Forksseit Juli 2026Auf GitHub ansehen ↗

dirtyduck3712/Ducklog erreicht einen Gesundheitsindex von 31 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei AI Readiness (58/100) ab, am schwächsten bei Community & Adoption (12/100). Zuletzt vor 3 Tagen aktualisiert.

31
gesamt / 100
Gefährdet

Software-Gesundheitsindex

Metriken werden auf einer Skala von 1–100 in gewichtete Kategorien gruppiert. Der Gesamtwert beginnt als ihr Mittel; sobald öffentliche Evidenz die Richtlinie für Hochrisikojurisdiktionen auslöst, wird die Bewertung angepasst und erhält die Obergrenze 49 (Gefährdet). AI Readiness liegt außerhalb.

31
Exzellent85-100Vorbildlich; erfüllt im Wesentlichen alle geprüften Kriterien
Gut70-84Gesund; geringfügige Lücken
Mittel50-69Akzeptabel mit deutlichen Lücken; Überprüfung empfohlen
Gefährdet30-49Erhebliche Schwächen; eine Übernahme erfordert Vorsicht
Kritisch1-29Schwerwiegende Probleme (aufgegeben, nur ein Maintainer, keine Hygiene)
VitalitätCommunity &VerbreitungNachhaltigkeit &GovernanceEngineering-QualitätSicherheitAI Readiness

Bewertungsprofil

Jede Achse ist eine Kategorie. Die Form zählt mehr als der Durchschnitt — ein gesundes Projekt füllt die gesamte Fläche, während ein Profil aus Spitzen und Kratern bedeutet, dass Stärke in einer Dimension Risiken in einer anderen verdeckt.

Eigentümerschaft

duck3712Persönliches Konto
3 Follower8 öffentliche Reposseit März 2015

Dieses Repository gehört einem persönlichen Konto. Ein Projekt mit nur einem Eigentümer trägt ein höheres Kontinuitätsrisiko als ein organisationsgetragenes.

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/dirtyduck3712/ducklog/clientv0.1.0-1vor 5 Tagen
Gogithub.com/dirtyduck3712/ducklog/zapsinkv0.1.0-1vor 5 Tagen

Metriken nach Kategorie

Vitalität

Lebt das Projekt — wird Code geschrieben und werden Releases ausgeliefert?

33Gefährdet · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 3 Tagen
1.4/36Commit-Rhythmus — 2/52 Wochen mit Commits
17.7/18Commit-Volumen — 93 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year93
human_commit_share1
days_since_last_push3
active_weeks_last_year2
Wie die Bewertung erfolgt
0/27Liefert Releases aus — keine Releases veröffentlicht
0/36Release-Aktualität — keine Releases
0/27Release-Rhythmus — keine Releases
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: Signed-Releases. Die verbleibenden Gewichte wurden renormalisiert.

Community & Verbreitung

Hat das Projekt Nutzer, Downloads, Aufmerksamkeit und ein einladendes Umfeld für Beitragende?

12Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 0 Stars
0/25Forks — 0 Forks
0/15Watcher — 0 Watcher
Verwendete Eingangsdaten
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
0/22.5Lizenz — keine Lizenzdatei erkannt
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licensenein
has_contributingnein
has_issue_templatenein
has_code_of_conductnein
has_pull_request_templatenein

Nachhaltigkeit & Governance

Überdauert das Projekt die Menschen, die es tragen — Bus-Faktor, Reaktionsfähigkeit, Trägerschaft und Paketpflege?

39Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote, PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
4.3/25Reichweite des Inhabers — 3 Follower von dirtyduck3712
18.9/25Kontohistorie — 8 öffentliche Repos, Kontoalter ca. 11 Jahre
Verwendete Eingangsdaten
followers3
owner_typeUser
is_verified
owner_logindirtyduck3712
public_repos8
account_age_days4.159
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 2 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 5 Tagen
4/20Versionshistorie — 1 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/dirtyduck3712/ducklog/client, github.com/dirtyduck3712/ducklog/zapsink
ecosystemsgo
any_deprecatednein
min_days_since_publish5

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

44Gefährdet · 20 % des Gesamtindex
Wie die Bewertung erfolgt
0/24CI-Workflows
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cinein
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
30/30README
25/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
0/10Repository-Beschreibung
0/10Topics
10/10Wiki
Verwendete Eingangsdaten
topics
has_wikija
homepage
has_readmeja
has_docs_dirja
has_descriptionnein

Sicherheit

Sind die sichtbaren Sicherheits- und Lieferkettenpraktiken belastbar, ohne ungeklärte Exposition gegenüber Hochrisikojurisdiktionen?

21Kritisch · 16 % des Gesamtindex

Sicherheitslage

21Kritisch
Wie die Bewertung erfolgt
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 — keine Daten
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 — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
0/2.5Lizenz — license file not detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — keine Daten
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 — keine Daten
0/7.5Token-Permissions — keine Daten
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated13
scorecard_versionv5.5.0
checks_inconclusive5
scorecard_aggregate2,1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

Wie gut ist das Repository dafür ausgestattet, mit KI-Coding-Agenten entwickelt und gepflegt zu werden? Ein unabhängiges, experimentelles Badge — Gewicht 0,0, es wird eigenständig ausgewiesen und verändert den Gesamt-Gesundheitswert nicht.

58Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 93 von 93 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share1
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — client/go.mod, go.mod, zapsink/go.mod (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 93
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum
has_dockerfilenein
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsclient/go.mod, go.mod, zapsink/go.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/40 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes7.036
source_files_sampled40
oversized_source_files0

Eckdaten

0GitHub-Sterne
-Mitwirkende
93Commits, letzte 12 Monate
3Tage seit letztem Push
0Releases
-Bus-Faktor
0offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 2.1 / 10
2.1Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).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
k. A.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
k. A.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
k. A.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
k. A.Signed-Releasesno releases found
k. A.Token-PermissionsNo tokens found
10Vulnerabilities0 existing vulnerabilities detected
Direkte Abhängigkeiten 3
RegistryPaketVersionsvorgabeManifest
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
Alle Abhängigkeiten nicht erhoben

Der aufgelöste Abhängigkeitssatz konnte für diesen Bericht nicht erhoben werden: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

JSON-Rohbericht maschinenlesbar
{
  "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
}

Bewertungen sind Signale, keine Garantien. Sie spiegeln öffentlich sichtbare Praxis auf GitHub wider — kein Code-Audit und keine Sicherheitsgarantie.

Fehlende Daten werden ausgeschlossen und die Gewichte neu normiert, nie als null bewertet. Die Methodik ist versioniert und offen: Metriken v1.13.0, Schema v0.27.0 — vollständige Methodik · Metriken-Wiki.

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.