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

451008604 / nets

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

GoApache-2.0★ 2 зірки⑂ 0 форківз бер. 2023 р.Переглянути на GitHub ↗

451008604/nets має індекс здоров’я 44 зі 100, що відповідає смузі «У зоні ризику». Найвищий показник — Vitality (83/100), найнижчий — Community & Adoption (24/100). Останнє оновлення було 8 днів тому. Більшість нещодавньої роботи виконує один учасник.

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

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

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

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

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

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

Власність

Mr.EricОсобистий обліковий запис
2 підписники19 публічних репозиторіївз квіт. 2020 р.hz751.com

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

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

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

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

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

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

83Добрий · 22% загального індексу
Як обчислюється оцінка
28.8/36Свіжість push — останній push 8 дн. тому
15.2/36Ритм комітів — 22/52 тижнів із комітами
18/18Обсяг комітів — 180 комітів за останній рік
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
Використані вхідні дані
commits_last_year180
human_commit_share1
days_since_last_push8
active_weeks_last_year22
Як обчислюється оцінка
27/27Випускає релізи — опубліковано 9 релізів
36/36Свіжість релізів — останній реліз 8 дн. тому
27/27Ритм релізів — реліз кожні ~28,3 дн.
0/10OpenSSF Scorecard: Signed-Releases — немає даних
Використані вхідні дані
releases_count9
latest_release_tagv1.2.5
releases_from_tagsні
days_since_latest_release8
mean_days_between_releases28,3
Виключено з оцінювання (немає даних або не застосовно): OpenSSF Scorecard: Signed-Releases. Залишкові ваги перенормовано.

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

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

24Критичний · 18% загального індексу
Як обчислюється оцінка
0/60Зірки — 2 зірок
0/25Форки — 0 форків
0/15Спостерігачі — 2 спостерігачів
Використані вхідні дані
forks0
stars2
watchers2
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (Apache-2.0)
0/18Настанови CONTRIBUTING
0/13.5Кодекс поведінки
0/7.2Шаблон issue
0/6.3Шаблон PR
Використані вхідні дані
has_readmeтак
has_licenseтак
has_contributingні
has_issue_templateні
has_code_of_conductні
has_pull_request_templateні

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

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

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

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

44У зоні ризику
Як обчислюється оцінка
10/30Підтримка власника — особистий (користувацький) обліковий запис
0/20Верифікований домен — не застосовно до користувацьких облікових записів
3.4/25Охоплення власника — 2 підписників у 451008604
21.5/25Послужний список — 19 публічних репозиторіїв, вік облікового запису ~6 р.
Використані вхідні дані
followers2
owner_typeUser
is_verified
owner_login451008604
public_repos19
account_age_days2 300
Виключено з оцінювання (немає даних або не застосовно): Верифікований домен. Залишкові ваги перенормовано.

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

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

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

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

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

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

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

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

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

Безпека

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

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

Стан безпеки

28Критичний
Як обчислюється оцінка
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — немає даних
0/2.5CI-Tests — немає даних
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
0/10Dangerous-Workflow — немає даних
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Ліцензія — license file detected
7.5/7.5Maintained — 30 commit(s) and 0 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — немає даних
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — немає даних
0/7.5Token-Permissions — немає даних
0/7.5Vulnerabilities — 24 existing vulnerabilities detected
Використані вхідні дані
sourceopenssf_scorecard
checks_evaluated12
scorecard_versionv5.5.0
checks_inconclusive6
scorecard_aggregate2,8
Виключено з оцінювання (немає даних або не застосовно): branch_protection, ci_tests, dangerous_workflow, packaging, signed_releases, token_permissions. Залишкові ваги перенормовано.
Як обчислюється оцінка
14/35Прямі залежності без відомих сповіщень — уражено 1: google.golang.org/protobuf v1.31.0 (high 7.5)
0/25Непрямі залежності без відомих сповіщень — транзитивний набір не відокремлюється від залежностей розробки й тестування в цьому обсязі
33.7/40Немає задавнених сповіщень — 1 пакет(ів) зі сповіщеннями без реакції понад 90 дн.; найдавніше опубліковано 874 дн. тому
Використані вхідні дані
sourceosv
advisories39
affected_packages4
assessed_packages14
unassessed_packages0
affected_by_severitycritical 1, high 1, moderate 1, unknown 1
direct_affected_packages1
Виключено з оцінювання (немає даних або не застосовно): Непрямі залежності без відомих сповіщень. Залишкові ваги перенормовано. Звірено 14 резолвлених залежностей із OSV. Цей репозиторій не публікує пакета, який резолвить індекс, тож натомість оцінено граф залежностей репозиторію. Цей граф змішує закріплені версії для розробки й тестування зі справді постачаними залежностями, тож оцінюються лише задекларовані runtime-залежності; транзитивні знахідки подаються як контекст і в оцінку не входять. Досяжність не аналізується.

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

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

55Помірний · 0% загального індексу
Як обчислюється оцінка
0/45Інструкції для агентів — немає CLAUDE.md / AGENTS.md / правил редактора
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 91 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
has_llms_txtні
legible_history_share0,91
agent_instruction_files
agent_instruction_max_bytes
Як обчислюється оцінка
12.6/18Розгортання однією командою — go.mod, test/client/go.mod, test/server/go.mod (домовленість інструментарію, без раннера задач)
22/22Автоматизовані тести
0/11Конфігурація лінтера / форматера
11/11Статична перевірка типів — Go (статично типізована)
10/10Відтворюване середовище — Dockerfile, lockfile
0/10Підтверджена практика роботи з агентами — серед останніх 100 комітів немає створених агентом
0/8Автоматизоване супроводження — автоматичних оновлень залежностей не виявлено
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Використані вхідні дані
has_nixні
has_testsтак
lockfilesgo.sum
has_dockerfileтак
typed_languageтак
bootstrap_files
has_devcontainerні
has_linter_configні
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod, test/client/go.mod, test/server/go.mod
dependency_bot_commit_share0
Як обчислюється оцінка
45/45Типізований код — Go (статично типізована)
55/55Керовані розміри файлів — 0/27 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageGo
largest_source_bytes12 243
source_files_sampled27
oversized_source_files0
Як обчислюється оцінка
40/40Схема API (OpenAPI/GraphQL/proto) — internal/message.proto
0/20Сервер MCP
0/40Придатні до запуску приклади
Використані вхідні дані
example_dirs
has_mcp_signalні
api_schema_filesinternal/message.proto

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

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

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

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

Докладніше

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

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

10Binary-Artifactsno binaries found in the repo
н/д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
н/д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
н/д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
н/дPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
н/дSigned-Releasesno releases found
н/дToken-PermissionsNo tokens found
0Vulnerabilities24 existing vulnerabilities detected
Прямі залежності 4
РеєстрПакетОбмеження версіїМаніфест
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
Усі залежності 14

Повний розв'язаний набір залежностей із графа залежностей GitHub: 4 прямих і 10 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

РеєстрПакетВерсіяЗв'язок
Gogithub.com/451008604/shard-mapv1.2.0пряма
Gogithub.com/gorilla/websocketv1.5.3пряма
Gogithub.com/xtaci/kcp-gov5.4.20+incompatibleпряма
Gogoogle.golang.org/protobufv1.31.0пряма
Gogithub.com/klauspost/cpuid/v2v2.2.8непряма
Gogithub.com/klauspost/reedsolomonv1.12.3непряма
Gogithub.com/pkg/errorsv0.9.1непряма
Gogithub.com/templexxx/cpufeatv0.0.0-20180724012125-cef66df7f161непряма
Gogithub.com/templexxx/xorv0.0.0-20191217153810-f85b25db303bнепряма
Gogithub.com/tjfoc/gmsmv1.4.1непряма
Gogithub.com/xtaci/lossyconnv0.0.0-20200209145036-adba10fffc37непряма
Gogolang.org/x/cryptov0.45.0непряма
Gogolang.org/x/netv0.47.0непряма
Gogolang.org/x/sysv0.38.0непряма
Сповіщення про залежності 4

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

ПакетВерсіяЗв'язокКритичністьСповіщеньВиправлено в
golang.org/x/cryptov0.45.0непрямакритична270.52.0
google.golang.org/protobufv1.31.0прямависока21.33.0
golang.org/x/netv0.47.0непрямапомірна91.26.3
golang.org/x/sysv0.38.0непряманевідома10.44.0

Сповіщення означає, що версія, записана в графі залежностей, потрапляє в уражений діапазон. Досяжність не аналізується, а граф містить піниї розробки й тестування — знахідка може стосуватися інструментів, а не поставленого коду.

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

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

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

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