Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-28 18:19 UTC

451008604 / nets

一个Go语言实现的轻量、性能、实用、对新手友好的网络框架。可同时支持TCP、WS、KCP、HTTP服务

GoApache-2.0★ 2 Sterne⑂ 0 Forksseit März 2023Auf GitHub ansehen ↗

451008604/nets erreicht einen Gesundheitsindex von 44 von 100 und liegt damit im Bereich Gefährdet. Am stärksten schneidet es bei Vitality (83/100) ab, am schwächsten bei Community & Adoption (24/100). Zuletzt vor 8 Tagen aktualisiert. Ein einzelner Mitwirkender trägt den Großteil der jüngsten Arbeit.

44
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.

44
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

Mr.EricPersönliches Konto
2 Follower19 öffentliche Reposseit Apr. 2020hz751.com

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/451008604/netsv1.2.5-13vor 8 Tagen

Metriken nach Kategorie

Vitalität

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

83Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
28.8/36Push-Aktualität — letzter Push vor 8 Tagen
15.2/36Commit-Rhythmus — 22/52 Wochen mit Commits
18/18Commit-Volumen — 180 Commits im letzten Jahr
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Verwendete Eingangsdaten
commits_last_year180
human_commit_share1
days_since_last_push8
active_weeks_last_year22

Release-Disziplin

100Exzellent
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 9 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 8 Tagen
27/27Release-Rhythmus — ein Release etwa alle 28,3 Tage
0/10OpenSSF Scorecard: Signed-Releases — keine Daten
Verwendete Eingangsdaten
releases_count9
latest_release_tagv1.2.5
releases_from_tagsnein
days_since_latest_release8
mean_days_between_releases28,3
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?

24Kritisch · 18 % des Gesamtindex
Wie die Bewertung erfolgt
0/60Stars — 2 Stars
0/25Forks — 0 Forks
0/15Watcher — 2 Watcher
Verwendete Eingangsdaten
forks0
stars2
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Wie die Bewertung erfolgt
22.5/22.5README
22.5/22.5Lizenz — anerkannte Lizenz (Apache-2.0)
0/18CONTRIBUTING-Leitfaden
0/13.5Verhaltenskodex
0/7.2Issue-Vorlage
0/6.3PR-Vorlage
Verwendete Eingangsdaten
has_readmeja
has_licenseja
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?

35Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
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
3.4/25Reichweite des Inhabers — 2 Follower von 451008604
21.5/25Kontohistorie — 19 öffentliche Repos, Kontoalter ca. 6 Jahre
Verwendete Eingangsdaten
followers2
owner_typeUser
is_verified
owner_login451008604
public_repos19
account_age_days2.300
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

100Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 8 Tagen
20/20Versionshistorie — 13 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/451008604/nets
ecosystemsgo
any_deprecatednein
min_days_since_publish8

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

38Gefä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
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
10/10Topics — 5 Topics
0/10Wiki
Verwendete Eingangsdaten
topicstcp, wss, http, kcp, golang
has_wikinein
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

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

35Gefährdet · 16 % des Gesamtindex

Sicherheitslage

28Kritisch
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — keine Daten
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.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — keine Daten
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
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
0/7.5Vulnerabilities — 24 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,8
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): branch_protection, ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
14/35Direkte Abhängigkeiten ohne bekannte Advisories — 1 betroffen: google.golang.org/protobuf v1.31.0 (high 7.5)
0/25Indirekte Abhängigkeiten ohne bekannte Advisories — transitive Menge in diesem Bereich nicht von Entwicklungs- und Test-Abhängigkeiten trennbar
33.7/40Keine offenen Advisories — 1 Paket(e) mit Advisory seit über 90 Tagen unbehandelt; ältestes vor 874 Tagen veröffentlicht
Verwendete Eingangsdaten
sourceosv
advisories39
affected_packages4
assessed_packages14
unassessed_packages0
affected_by_severitycritical 1, high 1, moderate 1, unknown 1
direct_affected_packages1
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Indirekte Abhängigkeiten ohne bekannte Advisories. Die verbleibenden Gewichte wurden renormalisiert. 14 aufgelöste Abhängigkeiten wurden mit OSV abgeglichen. Dieses Repository veröffentlicht kein Paket, das der Index auflöst; bewertet wurde daher der Abhängigkeitsgraph des Repositorys. Dieser Graph vermischt Entwicklungs- und Test-Pins mit ausgelieferten Abhängigkeiten, daher werden nur die deklarierten Laufzeit-Abhängigkeiten bewertet; transitive Befunde werden als Kontext ausgewiesen und fließen nicht in die Bewertung ein. Erreichbarkeit wird nicht analysiert.

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.

55Mittel · 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 — 91 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,91
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
12.6/18Bootstrap mit einem Befehl — go.mod, test/client/go.mod, test/server/go.mod (Toolchain-Konvention, kein Task-Runner)
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
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_dockerfileja
typed_languageja
bootstrap_files
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod, test/client/go.mod, test/server/go.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
55/55Handhabbare Dateigrößen — 0/27 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes12.243
source_files_sampled27
oversized_source_files0
Wie die Bewertung erfolgt
40/40API-Schema (OpenAPI/GraphQL/proto) — internal/message.proto
0/20MCP-Server
0/40Lauffähige Beispiele
Verwendete Eingangsdaten
example_dirs
has_mcp_signalnein
api_schema_filesinternal/message.proto

Eckdaten

2GitHub-Sterne
1Mitwirkende
180Commits, letzte 12 Monate
8Tage seit letztem Push
9Releases
1Bus-Faktor
0offene Issues
GoPaket-Ökosysteme

Warnungen zur Datenerhebung

  • Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token

Weitere Details

OpenSSF Scorecard 2.8 / 10
2.8Gesamtwert

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-28 18:19 UTC

10Binary-Artifactsno binaries found in the repo
k. A.Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
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
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
k. A.Dangerous-Workflowno workflows found
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
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
0Vulnerabilities24 existing vulnerabilities detected
Direkte Abhängigkeiten 4
RegistryPaketVersionsvorgabeManifest
Gogithub.com/451008604/shard-mapv1.2.0go.mod
Gogithub.com/gorilla/websocketv1.5.3go.mod
Gogithub.com/xtaci/kcp-gov5.4.20+incompatiblego.mod
Gogoogle.golang.org/protobufv1.31.0go.mod
Alle Abhängigkeiten 14

Vollständig aufgelöster Abhängigkeitssatz aus dem GitHub-Abhängigkeitsgraphen: 4 direkte und 10 indirekte (transitive) Pakete. Die transitive Hülle ist vollständig, wenn das Repository eine Lockfile eincheckt.

RegistryPaketVersionBeziehung
Gogithub.com/451008604/shard-mapv1.2.0direkt
Gogithub.com/gorilla/websocketv1.5.3direkt
Gogithub.com/xtaci/kcp-gov5.4.20+incompatibledirekt
Gogoogle.golang.org/protobufv1.31.0direkt
Gogithub.com/klauspost/cpuid/v2v2.2.8indirekt
Gogithub.com/klauspost/reedsolomonv1.12.3indirekt
Gogithub.com/pkg/errorsv0.9.1indirekt
Gogithub.com/templexxx/cpufeatv0.0.0-20180724012125-cef66df7f161indirekt
Gogithub.com/templexxx/xorv0.0.0-20191217153810-f85b25db303bindirekt
Gogithub.com/tjfoc/gmsmv1.4.1indirekt
Gogithub.com/xtaci/lossyconnv0.0.0-20200209145036-adba10fffc37indirekt
Gogolang.org/x/cryptov0.45.0indirekt
Gogolang.org/x/netv0.47.0indirekt
Gogolang.org/x/sysv0.38.0indirekt
Abhängigkeits-Advisories 4

Dieses Repository veröffentlicht kein vom Index auflösbares Paket, daher wurde sein eigener Abhängigkeitsgraph bewertet – 14 Pakete, darunter auch Entwicklungs- und Test-Pins, die nie ausgeliefert werden: 4 tragen bekannte Advisories, davon 1 direkte.

PaketVersionBeziehungSchweregradAdvisoriesBehoben in
golang.org/x/cryptov0.45.0indirektkritisch270.52.0
google.golang.org/protobufv1.31.0direkthoch21.33.0
golang.org/x/netv0.47.0indirektmittel91.26.3
golang.org/x/sysv0.38.0indirektunbekannt10.44.0

Ein Advisory bedeutet, dass die im Abhängigkeitsgraphen erfasste Version in den betroffenen Bereich eines Advisories fällt. Erreichbarkeit wird nicht analysiert, und der Graph enthält Entwicklungs- und Test-Pins — ein Fund kann das Werkzeug betreffen und nicht die ausgelieferte Software.

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [
        "tcp",
        "wss",
        "http",
        "kcp",
        "golang"
      ],
      "is_fork": false,
      "size_kb": 64368,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 71595,
        "Shell": 1809,
        "Dockerfile": 196
      },
      "pushed_at": "2026-07-20T11:10:23Z",
      "created_at": "2023-03-24T19:38:45Z",
      "owner_type": "User",
      "updated_at": "2026-07-20T11:11:19Z",
      "description": "一个Go语言实现的轻量、性能、实用、对新手友好的网络框架。可同时支持TCP、WS、KCP、HTTP服务",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "Apache-2.0",
      "default_branch": "main",
      "license_spdx_raw": "Apache-2.0",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "ggghq.cn",
      "name": "Mr.Eric",
      "type": "User",
      "login": "451008604",
      "company": "hz751.com",
      "location": "HangZhou",
      "followers": 2,
      "avatar_url": "https://avatars.githubusercontent.com/u/63437600?v=4",
      "created_at": "2020-04-10T03:28:36Z",
      "is_verified": null,
      "public_repos": 19,
      "account_age_days": 2300
    },
    "license": {
      "state": "standard",
      "spdx_id": "Apache-2.0",
      "raw_spdx": "Apache-2.0",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.2.5",
          "kind": "patch",
          "published_at": "2026-07-19T19:12:22Z"
        },
        {
          "tag": "v1.2.4",
          "kind": "patch",
          "published_at": "2026-06-29T15:10:41Z"
        },
        {
          "tag": "v1.2.3",
          "kind": "patch",
          "published_at": "2026-05-20T10:19:33Z"
        },
        {
          "tag": "v1.2.2",
          "kind": "patch",
          "published_at": "2026-05-14T14:09:50Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2025-12-30T17:09:44Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2025-12-30T15:57:39Z"
        },
        {
          "tag": "v1.1.2",
          "kind": "patch",
          "published_at": "2025-12-09T12:19:01Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2025-12-09T03:48:38Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2025-12-05T10:08:37Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "450c4eb3ff9d51c3aea4644d5dc92ac91f3f7688",
          "body": null,
          "is_bot": false,
          "headline": "feat: harden HTTP server",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-07-20T11:10:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fef1b3396138ff3f5771e8e28d2a312b06e79493",
          "body": null,
          "is_bot": false,
          "headline": "docs: refine architecture diagram layout",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-07-20T10:37:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "912ae2afe93277eb8e375b887ffafec8d75bae55",
          "body": null,
          "is_bot": false,
          "headline": "feat: support configurable slog logger",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-07-19T19:08:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7bdab54f6118b72fe778ddbc5533fb2b9d9a046b",
          "body": null,
          "is_bot": false,
          "headline": "refactor(log): 引入全局 slog 替换 fmt.Printf,支持通过 AppConf.LogLevel 动态配置日志级别",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-29T15:04:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "25b9ecb7379f389d0ce9928f3875351f615c99f0",
          "body": "- 在判断任务执行错误时排除 context.Canceled 错误\n- 避免错误上下文被误认为任务失败\n- 添加了 errors 包的导入以支持错误类型",
          "is_bot": false,
          "headline": "fix(pool): 修复任务执行错误判断逻辑",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-29T14:30:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a5843b3a702c6d1e23d6ee13af8a88560194866",
          "body": "- 删除TCP、WS、KCP、HTTP客户端中错误打印语句\n- 注释读取和写入时的错误日志打印,避免日志冗余\n- 在测试服务器中新增/debug接口,返回内存和运行时统计信息\n- 使用json格式化输出内存使用情况、GC次数、协程数量等数据\n- 方便调试和监控测试服务器运行状态",
          "is_bot": false,
          "headline": "refactor(test): 移除多余打印并添加内存调试接口",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-29T14:30:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e9751e96706bad02b6a94f339913de86914ef77",
          "body": "- 删除 /debug 端点及相关内存和连接统计监控代码\n- 移除对 runtime 和 os 包的依赖\n- 统一服务器启动错误日志打印方式,避免重复错误判断\n- 优化代码结构,减少冗余判断和代码复杂度",
          "is_bot": false,
          "headline": "refactor(server): 简化服务器启动和日志打印逻辑",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-29T13:50:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bca99fd419888fc65470a97c73e0c89d495f1da8",
          "body": "- Docker 基础镜像从 centos:7.9 改为 ubuntu:24.04\n- 注释掉 healthcheck 配置,简化测试流程\n- 客户端超时从 10 秒增加到 30 秒\n- 客户端连接数从 10000 调整为 5000\n- 服务端副本数从 5 增加到 10\n- 更新测试服务器错误捕获函数签名\n- 简化测试脚本,移除不必要的步骤",
          "is_bot": false,
          "headline": "test: 更新测试基础设施",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-27T11:25:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e86b080ee9105d5bc69b998cbf0731ea15b32863",
          "body": "- IErrCapture 签名从 string 改为 any,直接传递 recover 值\n- GetErrCapture 添加双重 panic 保护,防止回调函数再次 panic\n- GetErrCapture 内部打印堆栈信息,方便调试\n- GetFilter 改为直接调用并返回 bool,简化调用逻辑\n- 移除 MsgHandler 中的互操作锁,回调函数在启动前设置无需保护\n- HTTP 服务器 debug 端点仅在显式请求 gc=1 时触发 GC",
          "is_bot": false,
          "headline": "refactor: 改进错误处理机制",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-27T11:25:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "121a1d32672f1b4d3004acaaf28f31a4764e8971",
          "body": "- 移除 worker 中的 panic 恢复,改用统一的 GetErrCapture 处理\n- 移除 TotalCompleted 统计字段,减少原子操作开销\n- 简化 HashWorkerId,移除 hex 解析逻辑,统一使用 FNV-32a 哈希\n- 调整关闭顺序:先停止 WorkerPool 再等待 WaitGroup,避免死锁\n- NewWorkerPool 参数改为 uint 类型,0 值使用默认配置",
          "is_bot": false,
          "headline": "refactor: 简化 WorkerPool 实现",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-27T11:25:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "34e8385b0f1b6628af2eca29428b101c963ec2dd",
          "body": "- 移除 ConnectionManager 中的 callbackMutex,回调函数在启动前设置无需保护\n- 移除 Register() 方法,HTTP 连接直接使用 Add() 简化流程\n- 移除 readerTask 池化结构,改用 DoTask 直接提交任务\n- DoTask 返回 bool 值指示任务是否成功提交\n- 移除 submitReaderTask 方法,统一使用 DoTask\n- 简化 FlowControl 限流逻辑,移除内联的连接关闭逻辑",
          "is_bot": false,
          "headline": "refactor: 简化连接管理,移除不必要的并发保护",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-27T11:25:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d71a98e85d27eac389bfb47ac82290e09311221",
          "body": "- AppConf 字段 MaxPackSize/MaxConn/WorkerTaskMaxLen/WorkerPoolSize/MaxMsgChanLen/ConnRWTimeOut 从 int 改为 uint\n- GetServerConf() 改为返回值而非指针,避免调用方误修改默认配置\n- CustomServer.AppConf 从 *AppConf 改为 AppConf\n- 所有比较处添加 int()/uint() 类型转换确保兼容性",
          "is_bot": false,
          "headline": "refactor: 配置字段类型从 int 改为 uint 提升类型安全",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-27T11:25:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b84b252abc284ee9197204f30a9a7b74b0e07ff",
          "body": null,
          "is_bot": false,
          "headline": "升级SDK版本至1.24.13",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-23T15:56:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6c62bfbec397b28ef262947277957089e3e64d33",
          "body": "Three connection-management fixes:\n\n1. TCP/KCP/WS StartReader used a single conn.Read into a head-sized\n   buffer and bailed out on partial reads. net.Conn.Read is not\n   guaranteed to return the requested length, so any header split\n   across multiple kernel reads would terminate the connection\n   \n[…]\n   behavior under concurrent delete. Now collects all ids first, then\n   removes them after the Range completes — deterministic regardless\n   of the underlying map's iteration-during-delete semantics.",
          "is_bot": false,
          "headline": "fix(connection): short-read defense, callback mutex, two-phase ClearConn",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-13T09:31:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6898450c58f7ec1aed2719cb1e0360768cc17e40",
          "body": "GetServerTCP/WS/HTTP/KCP all used a non-atomic check-then-init pattern\non a package-level IServer variable. Concurrent first-callers from\nmultiple goroutines could each observe nil, allocate a fresh instance,\nand race on the package variable assignment.\n\nAligns all four getters with the sync.Once pattern already used\nelsewhere in the package (msgHandler, workerPool, connManager), so the\nfactory runs exactly once and subsequent callers see the same instance.",
          "is_bot": false,
          "headline": "fix(server): use sync.Once for all four server singletons",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-13T09:31:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "816633f272a683c9f392043ac23852a73f1dffae",
          "body": "Three WorkerPool fixes:\n\n1. Stop() used a select-default-close pattern that was not atomic; two\n   concurrent Stop calls could both pass the default branch and the\n   second close(p.done) would panic. Replaced with stopOnce.\n\n2. Stop() previously closed every per-worker channel after closing done.\n \n[…]\nesult is always non-negative before modulo.\n\nAlso adds NewWorkerPool input validation (poolSize > 0, maxTaskLen >= 0)\nto fail fast on misconfiguration instead of panicking deep inside the\nconstructor.",
          "is_bot": false,
          "headline": "fix(workerpool): stopOnce guard, no channel close, masked hash",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-13T09:31:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "3101c37f0dffa43ccbd67ba0cf8a8412ab3d34b4",
          "body": "MsgHandler.apis was read by worker goroutines and written by\nAddRouter with no synchronization — any runtime router registration\nwould trigger a Go race detector hit. Adds apisMutex (RWMutex) covering\nAddRouter, GetRouter, and GetApis (which now returns a shallow copy to\nprevent callers from mutatin\n[…]\ning on the first message that hits the broken route.\n\nIntroduces a typed GetRouter(msgId) entry point that readers prefer\nover the full GetApis map copy, reducing lock contention on the hot\nread path.",
          "is_bot": false,
          "headline": "fix(msghandler): add RWMutex for apis map and filter/errCapture fields",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-13T09:30:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "cbff2d9975d1699d70d6147e942ed858b780f625",
          "body": "Three concurrency/lifecycle fixes touching connectionbase.go and\nservermanager.go:\n\n1. ConnectionBase.Close used atomic.AddInt32 which increments on every\n   call, risking int32 overflow that would flip IsClose back to false.\n   Replaced with CompareAndSwap(0, 1) so Close is genuinely idempotent\n   \n[…]\nutdown race where Wait could return before the Add lands (negative\ncounter panic). Same change to SetWriteDeadline now propagates errors\nand triggers connection exit instead of silently ignoring them.",
          "is_bot": false,
          "headline": "fix(connection): CAS-based Close, pool return on all exit paths",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-13T09:30:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "238eb1f60bbf69827b9bf83b7ef832554a6dfacf",
          "body": "Two HTTP short-connection bugs:\n\n1. connectionHTTP.StartWriter unconditionally called WriteHeader(StatusOK)\n   on every invocation. Handlers that SendMsg more than once would trigger\n   'http: superfluous response.WriteHeader call' warnings and have the\n   second header silently ignored. Now guarded\n[…]\nt the\n   cap. Now performs a post-Set re-check and rolls back via Delete if a\n   burst pushed the count over MaxConn. serverhttp.go handles the new\n   false return by emitting 503 Service Unavailable.",
          "is_bot": false,
          "headline": "fix(http): guard against double WriteHeader and MaxConn over-admission",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-13T09:30:19Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "4851c40f50a6d02024caebad1e13f9238bf2930c",
          "body": "dataPack.Pack previously wrote a truncated DataLen (65535) for messages\nwhose body exceeded 65535 bytes, then copied the full body. The receiver\nwould read only 65535 bytes and misinterpret the trailing bytes as the\nnext message header, corrupting the entire subsequent stream.\n\nNow Pack returns nil for oversize payloads, matching SendMsg's existing\nnil-short-circuit and preserving stream integrity.",
          "is_bot": false,
          "headline": "fix(datapack): reject oversize payloads to prevent stream desync",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-13T09:30:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5ed2e529bab5d96cf2a89b62bc1397bbe38050e0",
          "body": "Remove mergeStructValues reflection-based merge. Callers should now\nobtain defaults via GetServerConf(), mutate needed fields, then pass\nthe result to SetCustomServer. This eliminates zero-value ambiguity.",
          "is_bot": false,
          "headline": "refactor: simplify SetCustomServer by removing reflection merge",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-01T08:12:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "afcde9703ec1cef98d8bcdb661ef53e6a4f6de12",
          "body": "- HTTP/WS: use http.Server.Shutdown for graceful shutdown\n- HTTP/WS: filter http.ErrServerClosed from error logs\n- HTTP: defer Remove to cleanup on StartReader panic\n- TCP/KCP: close listener on shutdown to unblock Accept",
          "is_bot": false,
          "headline": "fix: server graceful shutdown and connection cleanup",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-01T08:11:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce6ba08bb9648fa59dd375bef0ad6d2cfb8c8627",
          "body": "- Add write deadline lazy-refresh (refresh when <50% remaining)\n- Add readHandler panic recovery to prevent goroutine leak\n- Remove msgBuffChan=nil assignment (data race)\n- Add readerTask pool to reduce closure allocations\n- Add submitReaderTask for pooled task submission\n- Cache readTimeout/writeTimeout to struct fields\n- Add WS frame bounds check to prevent slice panic\n- Fix message leak on worker pool submission failure",
          "is_bot": false,
          "headline": "fix: connection layer bug fixes and performance optimization",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-06-01T08:10:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db96248332c3729403ddf8f7ddc8e4b7aa4d37ff",
          "body": "- Add nil check in RemoteAddrStr() to prevent panic\n- Remove SIGKILL from signal handler (cannot be caught)\n- Remove proto.Message nil assignment in PutMessage()\n- Add MaxPackSize default limit when configured as 0",
          "is_bot": false,
          "headline": "fix: multiple code issues",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-30T17:55:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "95395dd893ad669196d22b4092a614120ab9df3e",
          "body": "- Add length validation before reading binary data\n- Prevent index out of range panic for small payloads",
          "is_bot": false,
          "headline": "fix: datapack UnPack boundary check",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-30T17:53:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "da1734f48fc9bcde7356182b91d7b32c4a777783",
          "body": "- Ensure Close() only executes once using atomic counter\n- Remove close(msgBuffChan) from Open() defer to avoid race condition\n- Set msgBuffChan to nil instead of closing to prevent panic",
          "is_bot": false,
          "headline": "fix: send on closed channel panic",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-30T17:53:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d44be0768b051144a18a2a3f2b5372a9ca1ba42",
          "body": "- Add Register() method for short-lived connections (HTTP)\n- Register/Remove HTTP connections in serverhttp.go\n- Close HTTP request body after reading",
          "is_bot": false,
          "headline": "fix: HTTP connection resource leak",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-30T17:53:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8aff79ae2d2be043773aca1077b5e1c71bfe3b87",
          "body": null,
          "is_bot": false,
          "headline": "test: update Docker base images, compose config, scripts and docs",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-28T15:20:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "113c072798eb97d54ff764bdd837b69b2532a0a7",
          "body": null,
          "is_bot": false,
          "headline": "refactor(serverhttp): format JSON output with indentation",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-28T15:20:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7e639fa56702468ae5d2889db33a09e54afe626",
          "body": null,
          "is_bot": false,
          "headline": "fix(workerpool): add panic logging to recover blocks",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-28T15:20:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "862e958eeb511559b6d975ac5790347596603dc4",
          "body": "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "refactor(serverhttp): use JSON marshal for stats endpoint",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T17:08:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a14ff555a9d994b366e22202c364c6c27aba440",
          "body": "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "fix: reorder select cases and update worker pool",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T17:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53d53af5703cefa04230f2543f3702ae2d375a12",
          "body": "- Submit/SubmitWithWorker: check p.done before sending\n- SubmitCtx/SubmitWithWorkerCtx: check ctx.Done() and p.done before sending\n- TrySubmit/TrySubmitWithWorker: check p.done before sending\n- SendMsg: check ConnCtx().Done() before sending to msgBuffChan\n\nAll select statements now use non-blocking check first pattern to\nensure cancellation signals are respected immediately.",
          "is_bot": false,
          "headline": "fix: select priority for graceful shutdown",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T10:22:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f50b70e15d3c8ab9ebdd68f979297c62f1a9036d",
          "body": "- Update test server/client to use new worker pool configuration",
          "is_bot": false,
          "headline": "test: update test examples",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T09:45:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca824167a3caa58dbabc28c7d5b91b536be31de6",
          "body": "- Remove unused imports across TCP/HTTP/WebSocket/KCP connections",
          "is_bot": false,
          "headline": "refactor(protocol): update protocol implementations",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T09:45:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8213327bcdbaa5e3b88b14f24b5ed68ecd959a3",
          "body": "- Remove unnecessary imports\n- Standardize error handling patterns",
          "is_bot": false,
          "headline": "refactor(message): clean up message handling",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T09:45:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1be2df54412901ae51685264c1141e899ba06ea8",
          "body": "- Update server managers to use new worker pool API\n- Remove unnecessary imports",
          "is_bot": false,
          "headline": "refactor(server): update server implementations",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T09:44:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "424217656481c6f8f6925b021ae1846086cb7093",
          "body": "- Update DoTask to use SubmitWithWorker with HashWorkerId\n- Ensure connection handlers execute on same worker for data consistency",
          "is_bot": false,
          "headline": "refactor(connection): use SubmitWithWorker for ordered execution",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T09:44:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b47fd1ee5886f6cc96729ed9942076fb674b1f2",
          "body": "- Add WorkerPoolSize and WorkerTaskMaxLen to AppConf\n- Update default values for pool configuration",
          "is_bot": false,
          "headline": "refactor(config): update worker pool configuration",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T09:44:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d01d7b2cba894b6e99da334b67a6061da887a843",
          "body": "…D binding\n\n- Replace RWMutex with done channel pattern for graceful shutdown\n- Add SubmitWithWorker/SubmitWithWorkerCtx for ordered execution\n- Add HashWorkerId utility for string-to-int conversion\n- Add panic recovery in worker goroutines\n- Add WorkerPoolStats for monitoring\n- Remove ErrInvalidWorker (modulo handled internally)",
          "is_bot": false,
          "headline": "feat(workerpool): refactor worker pool with done channel and worker I…",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-26T09:44:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9bb7eef145ecd2a7be4bf97a52919598b6dc1b86",
          "body": "- 客户端默认连接数改为 1,便于单次调试\n- 服务端 MaxConn 提升至 1000000\n- start.sh 改为后台运行 client 并用 wait 等待,支持信号中断\n- 优化清理逻辑,仅停止 client 容器",
          "is_bot": false,
          "headline": "chore: 优化测试配置和启动脚本",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-20T10:03:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8ef0ee045ef425beafac08072359ecae4fe03201",
          "body": "- 移除 HTTP/KCP/TCP/WS 连接构造中冗余的 propertyMutex 初始化\n- 移除未使用的 sync 包导入\n- TCP 连接移除已废弃的 bufio.Writer 缓冲层",
          "is_bot": false,
          "headline": "refactor: 清理连接实现中冗余的 propertyMutex 字段和 sync 导入",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-20T10:03:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c23b44f1ecc15eabeea4528a33bca9ca3832b002",
          "body": null,
          "is_bot": false,
          "headline": "fix: 将 isClosed 原子操作从 Open() defer 移到 Close(),修复连接关闭时序",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-20T10:03:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8b31ac34ae2defc9a134fd62239065cd4fd224d1",
          "body": null,
          "is_bot": false,
          "headline": "docs: 完善功能描述,新增高性能特性说明",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-20T10:03:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0d94d5ad0d6e81397ff497c031a9c28b40d6d0c0",
          "body": "- Refactor client: remove semaphore, add 10s response timeout, fix race conditions\n- Add cleanup trap in start.sh for graceful shutdown\n- Docker: increase client replicas to 10, use TCP-only for stress test\n- Reduce healthcheck retries from 10 to 3 for faster startup",
          "is_bot": false,
          "headline": "refactor(test): improve client logic and docker config",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-14T11:28:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cae9d1b225fad3a6cdb20253ae795f140cc9f4d3",
          "body": "- Remove flagSend and flagReceive stats (not used)\n- Reduce ConnRWTimeOut from 60s to 5s for faster testing\n- Downgrade dependencies to match root module",
          "is_bot": false,
          "headline": "chore(test/server): simplify stats and adjust timeout",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-14T11:28:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fc35ca6a0a09a8c282fd81f24e25b36cd660c4b0",
          "body": "- Change Go version from 1.25 to 1.21 with toolchain go1.21.1\n- Downgrade protobuf, crypto, net, sys and other dependencies\n- Fix README Go version requirement from 1.25 to 1.21.1",
          "is_bot": false,
          "headline": "chore: downgrade Go to 1.21 and update dependencies",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-14T11:28:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02e0f3b1dc561ebfb46cb68ccfc4cc08b5048010",
          "body": "Expose connection context done channel for external goroutine coordination,\nreplacing direct connCtx.Done() calls with the new public method.",
          "is_bot": false,
          "headline": "feat: add ConnCtxDone() method to IConnection interface",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-14T11:28:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "822e32f4a287bd8a1991ee4e7fd03bc08dedf6b4",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-12T11:06:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c45f333cc8d5c7d18d2464fb4eb683a34c83579a",
          "body": "Enhance test/server/server.go:\n\n- Add step-by-step numbered comments\n\n- Reformat handler code for readability\n\n- Use defer pattern for response sending\n\n- Improve atomic operations formatting\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "docs(test): improve server example code comments and structure",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-12T11:04:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2a1a64abc948290308d60b4ce48a193c2fbc2985",
          "body": "Streamline README.md:\n\n- Reduce detailed configuration docs\n\n- Remove directory structure section\n\n- Update quick start example\n\n- Add performance testing reference\n\n- Clean up commented-out sections\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "docs: simplify README structure and content",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-12T11:04:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cb24c5a8b47524e686f6f60bf34f0d227fcd59e4",
          "body": "Remove unused guide files:\n\n- PPROF_GUIDE.md\n\n- PROJECT_ARCHITECTURE.md\n\n- assets/logo2.webp\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "chore: remove obsolete documentation files and assets",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-12T11:04:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87ea016d5fbf45f9b46206d892289cc961c2374b",
          "body": "- Refactor client.go: simplify concurrent connection handling,\n  remove intermediate client slice, inline read/write operations\n- Update docker-compose.yml: adjust healthcheck interval (2s→5s),\n  add TCP tuning sysctls (tw_reuse, fin_timeout),\n  remove http from protocol list for test clients",
          "is_bot": false,
          "headline": "refactor(test): optimize client connection logic and docker config",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-12T02:58:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbd4675157000011cf5aa8971c68da87d69c99ba",
          "body": "Add per-protocol connection counts (http/tcp/ws/kcp) to the /debug\nendpoint response for better observability.",
          "is_bot": false,
          "headline": "feat: add connection type statistics to debug endpoint",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-12T02:58:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4848ab26411adb9df7daed0bacfaf907e25fcbd2",
          "body": "- Update test server dependencies to match main module\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "chore: update test server dependencies",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:29:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1df7e5255667e1bb91a4be4142a1b24fef3ba2dd",
          "body": "- Upgrade Go from 1.24.0 to 1.25.0\n- Update shard-map to v1.2.0\n- Update protobuf to v1.36.11\n- Update reedsolomon to v1.14.0\n- Update golang.org/x packages to latest versions\n- Remove unused google/go-cmp dependency\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "chore: update Go and dependencies",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:28:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c32ad80fa3aedc41fdbd04c865d229e2d64be400",
          "body": "- Change Message.Data from string to []byte for efficiency\n- Reduce default connection count from 20000 to 1000\n- Enable container restart policy in docker-compose\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "test: optimize test client and Docker config",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:27:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "310f23c398131a07502bcb0204491a536aa5c50c",
          "body": "- Remove Message field from CustomServer (using message pool instead)\n- Add HTTP method validation to reject non-POST requests\n- Use http.StatusText for consistent error responses\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "refactor: simplify server configuration and HTTP handling",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:27:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "75b356d25cc491db47dc0a56a1fb86f4af3f524c",
          "body": "- Use GenerateConnID for consistent connection ID format across HTTP/KCP/TCP/WS\n- Apply message pool optimization to HTTP connection\n- Remove redundant RemoteAddrStr from individual implementations (now in base)\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "refactor: unify connection implementations",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:27:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fe7fe9e3c8081ad0b47270027082c5eb51c7a232",
          "body": "- Add GenerateConnID for unique hex connection identifiers\n- Remove waitGroup, simplify connection lifecycle with defer cleanup\n- Streamline Close() to only signal context cancellation\n- Optimize SendMsg with message pool for reduced allocations\n- Add RemoteAddrStr convenience method\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "refactor: optimize connection base lifecycle",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:26:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "38d11667196422450b13e219bbbd38b86ae9ba91",
          "body": "- Remove redundant NewMsgPackage constructor\n- Enhance GetDataLen to fallback to Data slice length when DataLen is 0\n- Add early return on duplicate msgId in AddRouter to prevent overwrite\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "refactor: improve message handling",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:26:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0730c0355ebe060b9501991a81e083a6cf4016da",
          "body": "- Simplify IConnection.Close() to return void instead of bool\n- Reduce default WorkerTaskMaxLen and MaxMsgChanLen from 1000 to 100\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "refactor: update interface and config defaults",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:26:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "88e068fe5a012805859dce4af6479ef105fad68d",
          "body": "Remove benchmark test files from the repository as they are being refactored to external package.\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "test: remove benchmark test files",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-11T10:26:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e25c9ca412c4c3c49284566e0f6b27af842d4b09",
          "body": "Move benchmark package from internal (nets) to external (benchmark) with\nqualified imports. Simplify Docker cleanup in start.sh by using --rmi all\nflag instead of separate docker rmi commands.",
          "is_bot": false,
          "headline": "test: refactor benchmark to external package and simplify Docker cleanup",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-08T18:22:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7d25b4c20b09e3b831538d304ff50c1515b4c0f",
          "body": "Increase WorkerTaskMaxLen and MaxMsgChanLen defaults from 100 to 1000 for\nhigher throughput. Tune KCP NoDelay and window size. Increase WebSocket\nWriteBufferSize to 64KB for better write batching.",
          "is_bot": false,
          "headline": "perf: tune default config and optimize KCP/WS buffer sizes",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-08T18:22:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44fd1bad7de3bdb080140ef5e17229635d994d65",
          "body": "Wrap TCP connection writes with a 64KB bufio.Writer to batch small writes\nand reduce syscall overhead on the hot path.",
          "is_bot": false,
          "headline": "perf: add buffered writer for TCP connections",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-08T18:21:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce8ab16b5ba8c52141575a751c9aaeca187ab6e2",
          "body": "Initialize json/proto Marshal/Unmarshal function pointers once at startup\nusing sync.Once instead of checking ProtocolIsJson config on every\nProtocolToByte/ByteToProtocol call, reducing per-message overhead.",
          "is_bot": false,
          "headline": "perf: cache protocol serialization functions with sync.Once",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-08T18:21:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "15ab3f061fa7adfe9d988723fc97600a16c82a17",
          "body": "Replace sync.Pool + binary.Write/Read with direct slice allocation and\nbinary.LittleEndian.PutUint16/Uint16 operations in Pack/UnPack, eliminating\nbuffer pool overhead. Change Message.Data from string to []byte to remove\nstring<->[]byte conversion overhead in hot path.",
          "is_bot": false,
          "headline": "perf: optimize datapack with zero-alloc direct byte operations",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-05-08T18:21:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14a01e4481f8c0827db786a73bdaff7e81d82b0a",
          "body": "- Refactor test client for cleaner connection and message handling\n- Add periodic stats printing in test server\n- Remove unused Test_MsgId_Test_None handler\n- Improve send/receive counter tracking",
          "is_bot": false,
          "headline": "test: optimize test client and server",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-08T13:00:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c04c1a34e7f3156da2df255172fa64b9b9f1d15d",
          "body": "- Switch base images from debian to alpine for smaller image size\n- Add sysctl/ulimit configs for 1M+ concurrent connections\n- Enable CGO_ENABLED=0 for static cross-compilation\n- Add image cleanup step in start.sh",
          "is_bot": false,
          "headline": "test: improve Docker infrastructure for high-connection testing",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-08T13:00:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "16e878979837b608a1569f2c36bb23ea1b5d00bc",
          "body": "Remove the deadTime field and connRWTimeOut() goroutine that polled\nconnection timestamps every 5s. Instead, use net.Conn.SetReadDeadline()\nin the read loop to leverage OS-level timeout, which is more efficient\nand eliminates unnecessary goroutine overhead.\n\n- Add GetNetConn() to IConnection interfa\n[…]\netDeadTime() and deadTime field from all connection types\n- Centralize conn.Close() in ConnectionBase.Close() instead of each type\n- Unify time handling to time.Now() replacing the custom getUTCTime()",
          "is_bot": false,
          "headline": "refactor: replace deadTime polling with net.Conn.SetReadDeadline",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-08T13:00:39Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a74a1d79ac76f750920c3e5a0d64f45459194f78",
          "body": "Add sync.Pool for bytes.Buffer in DataPack.Pack() (copied before\nreturn to guard against async msgBuffChan reuse) and for *Message in\nDataPack.UnPack(). All error paths in UnPack return messages to the\npool. Connection layers (TCP/KCP/WS/HTTP) call PutMessage after\nreaderTaskHandler completes, ensuring the message is not reused\nwhile handlers still reference it.",
          "is_bot": false,
          "headline": "perf: pool Message and bytes.Buffer to reduce per-message allocations",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-07T14:28:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7efacd525c78c2c06ff82a0b09def436976fa86",
          "body": null,
          "is_bot": false,
          "headline": "test: reduce docker-compose client replicas from 20 to 10",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-07T11:06:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b787234d4d5939fce5dd3373d7c6ff7d271644e",
          "body": "Add select on serverCtx.Done() before Accept() in TCP and KCP\nservers so that accept loops exit promptly during graceful shutdown\ninstead of blocking indefinitely on Accept().",
          "is_bot": false,
          "headline": "fix: add graceful shutdown check in server accept loops",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-07T11:06:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3e2ca01ca16da88198743c3ed31a147e81ea55d7",
          "body": "When a connection exceeds ConnRWTimeOut, using Remove() ensures\nproper cleanup through the standard connection removal flow rather\nthan calling Close() directly, which skips rate-limiting callbacks\nand connection manager bookkeeping.",
          "is_bot": false,
          "headline": "fix: use Remove instead of Close for connection timeout cleanup",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-07T11:06:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "692047a9aca3ae3931a6d74b5582d7167d824f2e",
          "body": "- Extract getUTCTime() helper to replace scattered time.Now() calls\n- Add sync.WaitGroup to ConnectionBase to ensure read/write handlers\n  exit before task goroutine closes\n- Initialize deadTime in all connection constructors (HTTP/WS/KCP/TCP)\n- Set deadline before closing TCP/KCP/WS connections to unblock pending I/O\n- Remove redundant waitGroup zero-value initialization in ServerManager",
          "is_bot": false,
          "headline": "refactor: unify time handling and improve connection lifecycle safety",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-07T11:05:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4378689fb9ea87a2bddeaa36e775544514768fb6",
          "body": "- Increase client replicas from 4 to 20 for higher load testing\n\n- Simplify step numbering from 4 steps to 3 steps in start.sh\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "test: update Docker test configuration and simplify startup script steps",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-06T12:21:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8eda10fb8f08278958245bf5c8c35973851e1c7",
          "body": "… for KCP close\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "fix: close request body on rejected HTTP connections and set deadline…",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-05-06T12:20:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13bc4148306aacc6f745a7085ded7bde96db4928",
          "body": "将 serverhttp.go 和 test/client/client.go 的换行符规范化为 Unix 格式 (LF)",
          "is_bot": false,
          "headline": "style: normalize line endings to LF",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-30T08:48:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b3882c4729b62acc345529571143f8a0e7069d8",
          "body": "- 重构 docker-compose.yml:\n  - 将服务重命名为 server_big/server_small 和 client_big/client_small\n  - 使用 replicas 批量启动客户端\n  - 添加对照组配置\n  - 调整端口映射(6060→16060, 26060)\n- 延长 ConnRWTimeOut 从 30 到 60 秒\n  - 分布式压力测试时避免连接被过早关闭",
          "is_bot": false,
          "headline": "test: update docker-compose config and server timeout",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-30T08:47:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "98df4d3d2a64e9522b538ab1f21aff31053da3b1",
          "body": "删除 Close() 方法中重复的 GetInstanceConnManager().Remove(c.conn) 调用\n避免连接管理器的重复清理操作",
          "is_bot": false,
          "headline": "fix: remove redundant connection removal in Close()",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-30T08:47:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9e7f44c8d642eb524a36afa2584a6ce52a671bdb",
          "body": "- Enable multi-protocol testing (tcp, ws, http, kcp)\n\n- Increase test connection count to 10000\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "chore(test): update Docker compose test configuration",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-04-29T17:14:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd82a47e8186075e879cc3c726a6161c9d007538",
          "body": "- Close connection immediately after receiving response\n\n- Reduce log output frequency threshold\n\n- Remove redundant connection cleanup code\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "refactor(test): optimize client connection handling",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-04-29T17:14:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a266b6a766ea4a69fbf5142c75cd255adbe361a",
          "body": "- Increase ConnRWTimeOut from 10 to 30 seconds\n\n- Remove CGO_ENABLED=1 from build script\n\nUltraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "chore(test): update server timeout and build configuration",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-04-29T17:14:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4940b591160221c126478f0bee1145ca3b903a2",
          "body": "Ultraworked with [Sisyphus](https://github.com/code-yeongyu/oh-my-openagent)\n\nCo-authored-by: Sisyphus <clio-agent@sisyphuslabs.ai>",
          "is_bot": false,
          "headline": "feat: improve /debug endpoint with GC trigger and formatted JSON output",
          "author_name": "Mr.Eric",
          "author_login": "451008604",
          "committed_at": "2026-04-29T17:13:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a666f29665d4759b4c9061642167a84e5ef7bb1f",
          "body": "- Add comprehensive guide for Go performance profiling\n- Include usage examples for pprof tool integration",
          "is_bot": false,
          "headline": "docs: add pprof performance profiling guide",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-29T14:02:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "431bfcd88ef59b486eb6b63e6a81f778dcff4b71",
          "body": "- Expand docker-compose with multi-service configuration\n- Simplify start.sh script by removing complex options\n- Update default test parameters",
          "is_bot": false,
          "headline": "chore(test): update docker compose and startup script",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-29T14:02:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7289a57a7b5c0d79bb109f8c44588572140e92ef",
          "body": "- Simplify test client by removing memtest and complex modes\n- Change default protocol from tcp to kcp\n- Update default connection count to 20000\n- Fix message structure to use JSON tags\n- Add error logging for connection failures\n- Remove unused imports and complex test scenarios",
          "is_bot": false,
          "headline": "refactor(test): major client test tool overhaul",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-29T14:02:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5036c2b9b9fe93fb922792ee3291dff612a9f17c",
          "body": "- Update msgId handling and message structure\n- Clean up test server code",
          "is_bot": false,
          "headline": "refactor(test): simplify test server configuration",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-29T14:01:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5558b913655899a6c2c4349a7093cc286f2fec49",
          "body": "- Fix message packing in connectionhttp.go to properly handle msgId\n- Clean up formatting in serverhttp.go",
          "is_bot": false,
          "headline": "fix: improve HTTP connection message handling",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-29T14:01:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e2992525e617163ed2a16d225441f962fa2ff3b9",
          "body": null,
          "is_bot": false,
          "headline": "chore: remove compiled binary files from test directory",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-29T14:01:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14d35553a04247040b4a859a0920e492dfb35d14",
          "body": null,
          "is_bot": false,
          "headline": "Add /debug endpoint to HTTP server for memstats",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-28T18:01:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b12661ede39cec4d3f4c7e32cc7477e4f4660f80",
          "body": null,
          "is_bot": false,
          "headline": "Add /debug endpoint to HTTP server for memstats",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-28T16:13:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9b9a484f2cb140b5c9cba3e37c44042ef17758fd",
          "body": "…sting",
          "is_bot": false,
          "headline": "Merge memtest.go into client.go: add -memtest flag for memory leak te…",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-28T16:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "54ff373b0c3ecaef9fb4f8250abfe3028b9e5c8a",
          "body": null,
          "is_bot": false,
          "headline": "test: wait for client completion in start.sh",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-25T17:06:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "35a6cffa6bf3d8269d4579ec0b3fb9374fa4d654",
          "body": null,
          "is_bot": false,
          "headline": "test: fix client.go for proper test result output",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-25T16:54:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f3984f5edb3889798069e55dc4743be40b70998",
          "body": null,
          "is_bot": false,
          "headline": "修正步骤编号为[1/4]->[4/4]",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-25T15:34:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "012e666e2a712991bffe8f81d05c45f03ef1db8d",
          "body": null,
          "is_bot": false,
          "headline": "修正步骤编号[1/5]->[4/5]",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-25T15:33:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50741991c23351c225880267dee3bfe033a5c8bf",
          "body": "- 移除无用的二进制检查步骤\n- 移除docker logs的-f参数\n- 清理多余空行",
          "is_bot": false,
          "headline": "简化start.sh脚本",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-25T15:30:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cc2053542accd40b7aa1db42036f8a84d0ed18b8",
          "body": "- HTTP客户端Write时保存响应数据到respBuf\n- HTTP客户端Read时从respBuf返回数据\n- 添加sync.Mutex保护并发访问",
          "is_bot": false,
          "headline": "修复HTTP客户端响应读取,确保短连接也能正确计数",
          "author_name": "451008604",
          "author_login": "451008604",
          "committed_at": "2026-04-25T15:23:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 9,
      "commits_last_year": 180,
      "latest_release_at": "2026-07-19T19:12:22Z",
      "latest_release_tag": "v1.2.5",
      "releases_from_tags": false,
      "days_since_last_push": 8,
      "active_weeks_last_year": 22,
      "days_since_latest_release": 8,
      "mean_days_between_releases": 28.3
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 42,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/451008604/nets",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/451008604/nets",
          "is_deprecated": false,
          "latest_version": "v1.2.5",
          "repository_url": "https://github.com/451008604/nets",
          "versions_count": 13,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-19T19:08:10Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 8
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 2,
      "watchers": 2,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [
        "internal/message.proto"
      ],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod",
        "test/client/go.mod",
        "test/server/go.mod"
      ],
      "largest_source_bytes": 12243,
      "source_files_sampled": 27,
      "oversized_source_files": 0,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "golang.org/x/crypto",
            "direct": false,
            "version": "v0.45.0",
            "severity": "critical",
            "ecosystem": "go",
            "cvss_score": 10,
            "advisory_ids": [
              "GHSA-45gg-vh54-h5m9",
              "GHSA-5cgq-3rg8-m6cv",
              "GHSA-78mq-xcr3-xm33",
              "GHSA-89gr-r52h-f8rx",
              "GHSA-9m57-25v3-79x9",
              "GHSA-f5wc-c3c7-36mc",
              "GHSA-jppx-rxg9-jmrx",
              "GHSA-q4h4-gmj2-qvw2",
              "GHSA-qpw4-5x99-6vjp",
              "GHSA-rm3j-f69w-wqmq"
            ],
            "fixed_version": "0.52.0",
            "advisory_count": 27,
            "oldest_advisory_days": 67
          },
          {
            "name": "google.golang.org/protobuf",
            "direct": true,
            "version": "v1.31.0",
            "severity": "high",
            "ecosystem": "go",
            "cvss_score": 7.5,
            "advisory_ids": [
              "GHSA-8r3f-844c-mc37",
              "GO-2024-2611"
            ],
            "fixed_version": "1.33.0",
            "advisory_count": 2,
            "oldest_advisory_days": 874
          },
          {
            "name": "golang.org/x/net",
            "direct": false,
            "version": "v0.47.0",
            "severity": "moderate",
            "ecosystem": "go",
            "cvss_score": 6.5,
            "advisory_ids": [
              "GHSA-5cv4-jp36-h3mw",
              "GO-2026-4918",
              "GO-2026-5025",
              "GO-2026-5026",
              "GO-2026-5027",
              "GO-2026-5028",
              "GO-2026-5029",
              "GO-2026-5030",
              "GO-2026-5942"
            ],
            "fixed_version": "1.26.3",
            "advisory_count": 9,
            "oldest_advisory_days": 81
          },
          {
            "name": "golang.org/x/sys",
            "direct": false,
            "version": "v0.38.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5024"
            ],
            "fixed_version": "0.44.0",
            "advisory_count": 1,
            "oldest_advisory_days": 66
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "high": 1,
          "unknown": 1,
          "critical": 1,
          "moderate": 1
        },
        "advisory_count": 39,
        "affected_count": 4,
        "assessed_count": 14,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 1
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/451008604/shard-map",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.2.0"
        },
        {
          "name": "github.com/gorilla/websocket",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.5.3"
        },
        {
          "name": "github.com/xtaci/kcp-go",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v5.4.20+incompatible"
        },
        {
          "name": "google.golang.org/protobuf",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.31.0"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/451008604/shard-map",
            "direct": true,
            "version": "v1.2.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/gorilla/websocket",
            "direct": true,
            "version": "v1.5.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/xtaci/kcp-go",
            "direct": true,
            "version": "v5.4.20+incompatible",
            "ecosystem": "go"
          },
          {
            "name": "google.golang.org/protobuf",
            "direct": true,
            "version": "v1.31.0",
            "ecosystem": "go"
          },
          {
            "name": "github.com/klauspost/cpuid/v2",
            "direct": false,
            "version": "v2.2.8",
            "ecosystem": "go"
          },
          {
            "name": "github.com/klauspost/reedsolomon",
            "direct": false,
            "version": "v1.12.3",
            "ecosystem": "go"
          },
          {
            "name": "github.com/pkg/errors",
            "direct": false,
            "version": "v0.9.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/templexxx/cpufeat",
            "direct": false,
            "version": "v0.0.0-20180724012125-cef66df7f161",
            "ecosystem": "go"
          },
          {
            "name": "github.com/templexxx/xor",
            "direct": false,
            "version": "v0.0.0-20191217153810-f85b25db303b",
            "ecosystem": "go"
          },
          {
            "name": "github.com/tjfoc/gmsm",
            "direct": false,
            "version": "v1.4.1",
            "ecosystem": "go"
          },
          {
            "name": "github.com/xtaci/lossyconn",
            "direct": false,
            "version": "v0.0.0-20200209145036-adba10fffc37",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/crypto",
            "direct": false,
            "version": "v0.45.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/net",
            "direct": false,
            "version": "v0.47.0",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sys",
            "direct": false,
            "version": "v0.38.0",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 14,
        "direct_count": 4,
        "indirect_count": 10
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 0,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "451008604",
          "commits": 317,
          "avatar_url": "https://avatars.githubusercontent.com/u/63437600?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": false,
      "has_tests": true,
      "ci_workflows": [],
      "has_docs_dir": false,
      "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": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "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": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 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": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "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": 0,
            "reason": "24 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "450c4eb3ff9d51c3aea4644d5dc92ac91f3f7688",
        "ran_at": "2026-07-28T18:19:24Z",
        "aggregate_score": 2.8,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": false,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-20T11:10:24Z",
      "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/451008604/nets",
    "host": "github.com",
    "name": "nets",
    "owner": "451008604"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 44,
      "inputs": {
        "security": 35,
        "vitality": 83,
        "community": 24,
        "governance": 35,
        "engineering": 38
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 83,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "commits_last_year": 180,
              "human_commit_share": 1,
              "days_since_last_push": 8,
              "active_weeks_last_year": 22
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 8 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "22/52 weeks with commits",
                "points": 15.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 22
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "180 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 180
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "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": 100,
            "inputs": {
              "releases_count": 9,
              "latest_release_tag": "v1.2.5",
              "releases_from_tags": false,
              "days_since_latest_release": 8,
              "mean_days_between_releases": 28.3
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "9 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 9
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 8 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~28.3 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 28.3
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 8,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 8 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 2,
              "watchers": 2,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "2 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "2 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (Apache-2.0)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "Apache-2.0"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 35,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 13,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 1,
              "top_contributor_share": 1
            },
            "components": [
              {
                "key": "bus_factor",
                "name": "Bus factor",
                "detail": "1 contributor(s) cover half of all commits",
                "points": 9,
                "status": "partial",
                "details": [
                  {
                    "code": "bus_factor",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 54
              },
              {
                "key": "commit_distribution",
                "name": "Commit distribution",
                "detail": "top contributor authored 100% of commits",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "1 contributors",
                "points": 1.4,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "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": 44,
            "inputs": {
              "followers": 2,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "451008604",
              "public_repos": 19,
              "account_age_days": 2300
            },
            "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": "2 followers of 451008604",
                "points": 3.4,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2,
                      "login": "451008604"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "19 public repos, account ~6 yr old",
                "points": 21.5,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 19
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 6
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/451008604/nets"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 8
            },
            "components": [
              {
                "key": "published_resolvable",
                "name": "Published & resolvable",
                "detail": "1 package(s) on go",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "packages_published",
                    "params": {
                      "count": 1,
                      "ecosystems": "go"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "publish_recency",
                "name": "Publish recency",
                "detail": "latest publish 8 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 8
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "13 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "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": 38,
        "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": 50,
            "inputs": {
              "topics": [
                "tcp",
                "wss",
                "http",
                "kcp",
                "golang"
              ],
              "has_wiki": false,
              "homepage": null,
              "has_readme": true,
              "has_docs_dir": false,
              "has_description": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 30,
                "status": "met",
                "details": [],
                "max_points": 30
              },
              {
                "key": "documentation_directory",
                "name": "Documentation directory",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": "5 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 5
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 35,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, CI-Tests, Dangerous-Workflow, Packaging, Signed-Releases, Token-Permissions. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "ci_tests",
                    "dangerous_workflow",
                    "packaging",
                    "signed_releases",
                    "token_permissions"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 28,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 12,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 6,
              "scorecard_aggregate": 2.8
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "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 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no 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 detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "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": "24 existing vulnerabilities detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "dependency_advisories",
            "band": "moderate",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories. Remaining weights renormalized. Matched 14 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 14
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 64,
            "inputs": {
              "source": "osv",
              "advisories": 39,
              "affected_packages": 4,
              "assessed_packages": 14,
              "unassessed_packages": 0,
              "affected_by_severity": "critical 1, high 1, moderate 1, unknown 1",
              "direct_affected_packages": 1
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "1 affected: google.golang.org/protobuf v1.31.0 (high 7.5)",
                "points": 14,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_affected",
                    "params": {
                      "count": 1,
                      "packages": "google.golang.org/protobuf v1.31.0 (high 7.5)"
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "1 advisory-carrying package(s) unaddressed past 90 days; oldest published 874 days ago",
                "points": 33.7,
                "status": "partial",
                "details": [
                  {
                    "code": "advisories_stale",
                    "params": {
                      "days": 90,
                      "count": 1,
                      "oldest": 874
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 14,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "moderate",
        "name": "AI Readiness",
        "value": 55,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "at_risk",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.91,
              "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": "91 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 91,
                      "sampled": 100
                    }
                  }
                ],
                "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": true,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod",
                "test/client/go.mod",
                "test/server/go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod, test/client/go.mod, test/server/go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod, test/client/go.mod, test/server/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": "Dockerfile, lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Dockerfile, lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 12243,
              "source_files_sampled": 27,
              "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/27 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 27,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [],
              "has_mcp_signal": false,
              "api_schema_files": [
                "internal/message.proto"
              ]
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": "internal/message.proto",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "internal/message.proto"
                    }
                  }
                ],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-28T18:19:28.450315Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/4/451008604/nets.svg",
  "full_name": "451008604/nets",
  "license_state": "standard",
  "license_spdx": "Apache-2.0"
}

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.