Öffentliches Register
Software-GesundheitsberichtSchema 0.27.0 · Metriken 1.13.0 · 2026-07-27 18:39 UTC

cnstark / cc-proxy

Claude Code Proxy

GoMIT★ 0 Sterne⑂ 0 Forksseit Juni 2026Auf GitHub ansehen ↗

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

43
gesamt / 100
Gefährdet

Software-Gesundheitsindex

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

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

Bewertungsprofil

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

Eigentümerschaft

CNStarkPersönliches Konto
20 Follower16 öffentliche Reposseit Dez. 2018

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

Paket-Ökosysteme

RegistryPaketVersionDownloads / MonatVersionenZuletzt veröffentlicht
Gogithub.com/cnstark/cc-proxyv0.3.0-4vor 19 Tagen

Metriken nach Kategorie

Vitalität

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

70Gut · 22 % des Gesamtindex
Wie die Bewertung erfolgt
36/36Push-Aktualität — letzter Push vor 2 Tagen
2.1/36Commit-Rhythmus — 3/52 Wochen mit Commits
18/18Commit-Volumen — 113 Commits im letzten Jahr
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Verwendete Eingangsdaten
commits_last_year113
human_commit_share1
days_since_last_push2
active_weeks_last_year3
Wie die Bewertung erfolgt
27/27Liefert Releases aus — 4 Releases veröffentlicht
36/36Release-Aktualität — letztes Release vor 19 Tagen
27/27Release-Rhythmus — ein Release etwa alle 4,6 Tage
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Verwendete Eingangsdaten
releases_count4
latest_release_tagv0.3.0
releases_from_tagsnein
days_since_latest_release19
mean_days_between_releases4,6

Community & Verbreitung

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

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

Nachhaltigkeit & Governance

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

34Gefährdet · 24 % des Gesamtindex
Wie die Bewertung erfolgt
9/54Bus-Faktor — 1 Beitragende decken die Hälfte aller Commits ab
0/22.5Commit-Verteilung — wichtigste beitragende Person verfasste 100 % der Commits
1.4/13.5Breite der Beitragenden — 1 Beitragende
0/10OpenSSF Scorecard: Contributors — project has 0 contributing companies or organizations -- score normalized to 0
Verwendete Eingangsdaten
bus_factor1
contributors_sampled1
top_contributor_share1
Wie die Bewertung erfolgt
0/46.8Issue-Lösungsquote — keine Issues oder keine Daten
0/38.3PR-Annahme — keine entschiedenen Pull Requests oder keine Daten
0/15OpenSSF Scorecard: Code-Review — Found 0/30 approved changesets -- score normalized to 0
Verwendete Eingangsdaten
merged_prs0
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Issue-Lösungsquote, PR-Annahme. Die verbleibenden Gewichte wurden renormalisiert.
Wie die Bewertung erfolgt
10/30Organisatorische Trägerschaft — persönliches (Nutzer-)Konto
0/20Verifizierte Domain — für Nutzerkonten nicht anwendbar
9.5/25Reichweite des Inhabers — 20 Follower von cnstark
21/25Kontohistorie — 16 öffentliche Repos, Kontoalter ca. 7 Jahre
Verwendete Eingangsdaten
followers20
owner_typeUser
is_verified
owner_logincnstark
public_repos16
account_age_days2.792
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): Verifizierte Domain. Die verbleibenden Gewichte wurden renormalisiert.

Paketpflege

92Exzellent
Wie die Bewertung erfolgt
25/25Veröffentlicht & auflösbar — 1 Paket(e) auf go
35/35Veröffentlichungsaktualität — letzte Veröffentlichung vor 19 Tagen
12/20Versionshistorie — 4 veröffentlichte Versionen
20/20Nicht veraltet — aktiv, nicht veraltet oder zurückgezogen
Verwendete Eingangsdaten
packagesgithub.com/cnstark/cc-proxy
ecosystemsgo
any_deprecatednein
min_days_since_publish19

Engineering-Qualität

Sind grundlegende Engineering- und Dokumentationspraktiken vorhanden?

52Mittel · 20 % des Gesamtindex
Wie die Bewertung erfolgt
24/24CI-Workflows — 1 Workflow(s)
24/24Tests vorhanden
0/16Linter-Konfiguration
0/9.6Pre-Commit-Hooks
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — keine Daten
Verwendete Eingangsdaten
has_cija
has_testsja
has_editorconfignein
has_linter_confignein
has_precommit_confignein
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): OpenSSF Scorecard: CI-Tests. Die verbleibenden Gewichte wurden renormalisiert.

Dokumentation

40Gefährdet
Wie die Bewertung erfolgt
30/30README
0/25Dokumentationsverzeichnis
0/15Dokumentations-/Homepage-Site
10/10Repository-Beschreibung
0/10Topics
0/10Wiki
Verwendete Eingangsdaten
topics
has_wikinein
homepage
has_readmeja
has_docs_dirnein
has_descriptionja

Sicherheit

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

27Kritisch · 16 % des Gesamtindex

Sicherheitslage

27Kritisch
Wie die Bewertung erfolgt
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — keine Daten
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/30 approved changesets -- score normalized to 0
0/2.5Contributors — project has 0 contributing companies or organizations -- score normalized to 0
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5Lizenz — license file detected
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — keine Daten
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — no SAST tool detected
0/5Security-Policy — security policy file not detected
0/7.5Signed-Releases — Project has not signed or included provenance with any releases.
0/7.5Token-Permissions — detected GitHub workflow tokens with excessive permissions
6.8/7.5Vulnerabilities — 1 existing vulnerabilities detected
Verwendete Eingangsdaten
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate2,7
Von der Bewertung ausgeschlossen (keine Daten oder nicht anwendbar): ci_tests, packaging. Die verbleibenden Gewichte wurden renormalisiert.

AI Readiness

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

60Mittel · 0 % des Gesamtindex
Wie die Bewertung erfolgt
0/45Agentenanweisungen — keine CLAUDE.md / AGENTS.md / Editor-Regeln
0/15Maschinenlesbare Doku (llms.txt)
40/40Lesbare Commit-Historie — 98 von 100 menschlichen Commits benennen ihre Absicht (strukturierter Betreff oder erläuternder Text)
Verwendete Eingangsdaten
has_llms_txtnein
legible_history_share0,98
agent_instruction_files
agent_instruction_max_bytes
Wie die Bewertung erfolgt
18/18Bootstrap mit einem Befehl — Makefile
22/22Automatisierte Tests
0/11Lint-/Format-Konfiguration
11/11Statische Typprüfung — Go (statisch typisiert)
10/10Reproduzierbare Umgebung — Dockerfile, lockfile
0/10Belegte Agentenpraxis — keine von Agenten verfassten Commits unter den letzten 100
0/8Automatisierte Wartung — keine automatisierten Abhängigkeits-Updates beobachtet
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Verwendete Eingangsdaten
has_nixnein
has_testsja
lockfilesgo.sum
has_dockerfileja
typed_languageja
bootstrap_filesMakefile
has_devcontainernein
has_linter_confignein
typecheck_configs
agent_commit_share0
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Wie die Bewertung erfolgt
45/45Typprüfbarer Code — Go (statisch typisiert)
53.9/55Handhabbare Dateigrößen — 1/50 Quelldateien über 60 KB
Verwendete Eingangsdaten
primary_languageGo
largest_source_bytes205.637
source_files_sampled50
oversized_source_files1

Eckdaten

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

Warnungen zur Datenerhebung

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

Weitere Details

OpenSSF Scorecard 2.7 / 10
2.7Gesamtwert

Unabhängige, werkzeugneutrale Sicherheitsbewertung durch das quelloffene OpenSSF Scorecard. Jede Prüfung honoriert eine Sicherheits-Praxis, nicht das Werkzeug eines bestimmten Anbieters. Prüfungen, die Scorecard nicht ermitteln konnte, sind mit k. A. markiert und vom Sicherheitswert ausgeschlossen (nie als null gezählt).Scorecard v5.5.0 · 2026-07-27 18:38 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
k. A.CI-Testsno pull request found
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/30 approved changesets -- score normalized to 0
0Contributorsproject has 0 contributing companies or organizations -- score normalized to 0
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
k. A.Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTno SAST tool detected
0Security-Policysecurity policy file not detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
Direkte Abhängigkeiten 5
RegistryPaketVersionsvorgabeManifest
Gogithub.com/spf13/cobrav1.10.2go.mod
Gogolang.org/x/cryptov0.54.0go.mod
Gogolang.org/x/termv0.45.0go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
Gomodernc.org/sqlitev1.53.0go.mod
Alle Abhängigkeiten nicht erhoben

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

JSON-Rohbericht maschinenlesbar
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": false,
      "size_kb": 380,
      "has_wiki": false,
      "homepage": null,
      "languages": {
        "Go": 311763,
        "CSS": 2102,
        "HTML": 329,
        "Shell": 3013,
        "Makefile": 1439,
        "Dockerfile": 466,
        "JavaScript": 25343,
        "PowerShell": 2296
      },
      "pushed_at": "2026-07-25T04:57:32Z",
      "created_at": "2026-06-23T02:39:18Z",
      "owner_type": "User",
      "updated_at": "2026-07-25T04:57:35Z",
      "description": "Claude Code Proxy",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "master",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": "CNStark",
      "type": "User",
      "login": "cnstark",
      "company": null,
      "location": "Beijing",
      "followers": 20,
      "avatar_url": "https://avatars.githubusercontent.com/u/45590791?v=4",
      "created_at": "2018-12-04T09:17:13Z",
      "is_verified": null,
      "public_repos": 16,
      "account_age_days": 2792
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.3.0",
          "kind": "minor",
          "published_at": "2026-07-08T12:27:04Z"
        },
        {
          "tag": "v0.2.0",
          "kind": "minor",
          "published_at": "2026-06-26T18:56:23Z"
        },
        {
          "tag": "v0.1.1",
          "kind": "patch",
          "published_at": "2026-06-24T19:25:17Z"
        },
        {
          "tag": "v0.1.0",
          "kind": "minor",
          "published_at": "2026-06-24T17:40:33Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "c3e6bfd67c2b6e8899243fb75461417224397e03",
          "body": null,
          "is_bot": false,
          "headline": "refactor: 分类器检测日志从 DEBUG 升级为 INFO",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-25T04:57:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5d656d2d4a304f2106157d52b85fb7ce8101a18a",
          "body": "- Project 结构体新增 ClassifierModel 字段,可指定分类器请求强制走某个 model_map key\n- Validate 校验 classifiter_model 非空时必须在 model_map 中存在\n- ReloadingHandler 每请求从快照收集 classifierModels 传入 Handler\n- Handler 在路由前检测分类器请求(非流式 + system 含安全审查标识),\n  若项目配置了 classifier_model 则覆盖请求 model\n- 支持热重载,修改 classifier_model 无需重启",
          "is_bot": false,
          "headline": "feat: 新增分类器请求检测与路由功能",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-25T04:23:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4ce8e13d246e3f47daf6c993a9c9aec312fb43db",
          "body": "流式转发途中客户端写失败(broken pipe)或读上游失败时,ResponseStartedError\n的错误信息附带距上次从上游读到数据的时间(idle)和流总时长(stream)。\n便于在后台日志中区分两种成因:\n- idle 很大 → 上游长时间不吐数据,客户端放弃\n- idle 很小 → 客户端主动取消(如用户中断)\n不改变故障转移不变量,仅增强诊断信息。",
          "is_bot": false,
          "headline": "feat(proxy): 流式 broken pipe 错误附 idle/stream 时长便于诊断断开成因",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-22T03:13:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0fb0d966cf831c86279617756a9acf75e7b29153",
          "body": null,
          "is_bot": false,
          "headline": "test(proxy): 补全 spec 测试场景(全 5xx 每个打详情/连接失败不触发详情) 并修 gofmt 空行",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T12:51:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1ff08c531b36df0434c8c56df124295602a6b0c6",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): 4xx 透传分支 INFO 级就地打印上游错误详情",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T12:15:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87e54d8e61bb9bf44f0a50d955c76cc001f2e9eb",
          "body": null,
          "is_bot": false,
          "headline": "test(proxy): 重写兜底探测日志测试使其真正验证兜底分支",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T12:06:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcc218550db620e95192818fe88f54a678082121",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): 兜底探测失败分支复用 helper 补打上游错误详情",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T11:57:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e53bb65764cde0b8e817e1af268a3701f249bc7",
          "body": null,
          "is_bot": false,
          "headline": "fix(proxy): 恢复 TestHandler_Forwarded_LogsRealModel 被截断的 doc 注释",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T11:51:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4c1cf62303b4b4719255fae66bd9c4ab9daa58e9",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): 故障转移失败分支 INFO 级补打上游错误详情",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T11:45:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0c66791b3b5a24cb07c9d0a647b0d9d7e7fa9faf",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): 上游可重试错误上抛 UpstreamError 携带响应体",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T11:38:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "20b5fa326c8a63fbe2e2957f3340fe59cd6a406d",
          "body": null,
          "is_bot": false,
          "headline": "feat: 转发成功日志增加真实模型名 real_model 字段",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T08:39:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "326cfed15384e600ea87844f2db4062bc1b768c5",
          "body": null,
          "is_bot": false,
          "headline": "test: 增加转发成功日志 real_model 字段断言(红灯)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-21T08:28:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b23430b53684d9c5b5bb8e68d4d2ea19d1bcb3c4",
          "body": "将 upstream/project/mapping 的 prompt/confirm 编辑全部替换为声明式弹窗表单:\n- openModal 工厂 + renderField(text/password+actions/checkbox/select+hint/list/secret/ordered-list)\n- apikey 脱敏重置(secret 字段,未重置保留占位→后端保留原值)\n- mapping 主备双下拉 + 上下移排序\n- log_level 选 debug 旁注提示 + key 生成按钮\n- 删除用确认弹窗\n- 提交防重复点击 + 异常兜底 + add 失败回滚避免重复累积\n\n后端零改动,延续整 config PUT + 脱敏占位逻辑。\n9 commits via subagent-driven-development (task reviews + final opus review clean).",
          "is_bot": false,
          "headline": "merge: 后台配置页弹窗编辑(admin config modal)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T06:26:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "030751afe8cca067b6089cc890d8dfa6701b7314",
          "body": null,
          "is_bot": false,
          "headline": "fix(web): apikey 重置为空拦截 + add 失败回滚避免重复累积",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T05:10:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1e82a6d45e7247b4c1927204ad6f1b0c9479f20b",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): mapping 增删改改用弹窗 ordered-list 双下拉排序",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:45:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3b591d5a593b1701e7b5865e138432ea53129224",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): project 增删改改用弹窗(含 key 生成与 log_level debug 提示)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:37:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0221336dd49212443ae3b201e38dbeb8d571d427",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): upstream 增删改改用弹窗表单(含 apikey 脱敏重置)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:30:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee66f35d25f799e5d8df5b6b840079448ee16a86",
          "body": null,
          "is_bot": false,
          "headline": "fix(web): ordered-list 切换 upstream 时保留同名 model 选择",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:26:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f100bcf2138955530f1c7ccb1cd8a56f8f1e913",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): 新增 secret 与 ordered-list 字段类型",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:18:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2571e76c1830b1d96dbea96bc94843a6fe16632e",
          "body": null,
          "is_bot": false,
          "headline": "fix(web): openModal 提交防重复点击与异常兜底",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:14:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0e34f1624804cf2feea7db4f0eee94c15649e354",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): 新增 openModal 弹窗工厂与声明式字段渲染器",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:06:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "392ed2089b8056bbf4e54dc2d7a4a8c5ce18e10d",
          "body": null,
          "is_bot": false,
          "headline": "style: 追加后台配置弹窗 modal 样式",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T04:01:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed6a6ade278360afe4d1f2af4aa6c9f8a76e0aa7",
          "body": null,
          "is_bot": false,
          "headline": "merge: 网页管理后台(admin web)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-10T02:19:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "47e89c71dfedfe4685986269b0ce9c19624940b5",
          "body": null,
          "is_bot": false,
          "headline": "style: gofmt 对齐结构体字段(handler/hotreload/types_test)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T13:52:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "adbdb5a28773574d87c13aa2d45f04f1aa90c63e",
          "body": "…捕获 Encode 错误",
          "is_bot": false,
          "headline": "fix(admin): 配置 API JSON 字段名对齐 snake_case + timeout 用纳秒数值 + writeJSON …",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T13:42:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eeefd1e01106cb9d6d62e79b980ab01f773f383f",
          "body": null,
          "is_bot": false,
          "headline": "docs: README 目录补充网页后台条目",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T13:06:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "acde752aae0994f12b5313a8846cee914706620a",
          "body": null,
          "is_bot": false,
          "headline": "docs: README 补充网页后台说明",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T13:00:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7940d8696c964682a74719560c6ebab998543d22",
          "body": "接入 Tasks 1-10:创建 requestlog.Store(按 requestlog_enabled 门控)、\nnil 守卫传 rec 给 NewReloadingHandler(避免接口 nil 陷阱)、\ngoroutine 启动 admin 子服务器(127.0.0.1:8788 / CC_PROXY_ADMIN_LISTEN)。\n\ne2e 发现并修复两个 server.go 缺陷:\n- Mux 的 /api/ 方法无关前缀与 GET / 方法特定模式冲突致启动 panic,\n  改为注册全方法 /api/ 前缀。\n- NewServer 用 os.IsNotExist 判断 admin.json 缺失,但 LoadAdmin 用\n  fmt.Errorf(%w) 再包装后 os.IsNotExist 返回 false(Go 陷阱),导致\n  admin.json 不存在时后台报错退出而非 disabled 启动。改用 errors.Is。",
          "is_bot": false,
          "headline": "feat(ccp-proxy): 启动 admin 后台与 requestlog Store",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T12:46:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "df192a0aca661a07f406559b8fe8b6f4995745c7",
          "body": null,
          "is_bot": false,
          "headline": "feat(cli): ccp admin set-password / unset-password",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T09:59:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2cfb01e60efd6791b8b38c41fb96b9136c6adc5c",
          "body": null,
          "is_bot": false,
          "headline": "fix(web): 离开日志页时关闭 EventSource,修复 SSE 泄漏",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T09:31:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "53bc62a81d961f961ab50d1bf13e79a881ddd061",
          "body": null,
          "is_bot": false,
          "headline": "feat(web): 后台前端(配置/用量/请求日志页 + 重启横幅)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T09:18:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b60c7b532bb231dd5cb7ed470f3919ef2f41bce",
          "body": null,
          "is_bot": false,
          "headline": "fix(admin): CRUD handler 检查 Save 错误并补 404 未找到判定",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T09:06:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4550290f8d016f30d3912480c0a10988e22daae",
          "body": null,
          "is_bot": false,
          "headline": "feat(admin): CRUD/logs/stats API、mux、web embed 包",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T08:51:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a6b84a2077e2ec295957ddc12de55f70e70ea1b7",
          "body": null,
          "is_bot": false,
          "headline": "test(admin): 补 private-key 还原与 422 不写盘断言",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T08:32:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "45ad86fefb81e54cc012c30b88e917a6f54a2802",
          "body": null,
          "is_bot": false,
          "headline": "feat(admin): 配置 API 脱敏读取与占位还原",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T08:20:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b07a50ff9f079f87e7c1f7334610dc4171079238",
          "body": "将 handlers.go 和 middleware.go 中所有使用 http.Error 输出 JSON 错误\n体的路径改为 writeJSON,确保 Content-Type 为 application/json 而非\ntext/plain。新增两个回归测试断言 401/403 响应包含 json Content-Type。",
          "is_bot": false,
          "headline": "fix(admin): 错误响应用 writeJSON 保证 application/json Content-Type",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T08:12:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "135beffecafb48f5892954ec0e3a1a353d3d838f",
          "body": null,
          "is_bot": false,
          "headline": "feat(admin): Server 结构、session 中间件与 login/logout/status",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T08:03:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0da2a0212c6d4ce63d1d85f01688fcf6ece1ef46",
          "body": null,
          "is_bot": false,
          "headline": "fix(admin): decodeArgon2id 拒绝畸形/零参数哈希,避免 argon2 panic",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T07:55:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8771ebd0a49d445eb8fd42e2af5fb906ed0318b6",
          "body": null,
          "is_bot": false,
          "headline": "feat(admin): 密码 argon2id 哈希与 session 管理",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T07:46:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca1b3b167bcd8c6eec43d0812b085feaa50d4f0d",
          "body": "补全 4 处失败返回路径的 reqErrStr 赋值:\n- 主循环 rewriteRequestBody 失败\n- 主循环 ResponseStartedError 提前返回\n- forced-probe rewriteRequestBody 失败\n- forced-probe ResponseStartedError 提前返回\n\n新增 2 个回归测试覆盖 502 和 ResponseStartedError 路径。",
          "is_bot": false,
          "headline": "fix(proxy): 失败路径补全 reqErrStr,避免日志 Error 误空",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T07:35:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d8a7935144f6d6ee932f5709a3454db6c5c245b",
          "body": "添加 statusRecorder(捕获状态码/tee 响应体/委托 Flush),\n在 ServeHTTP 开头包装 w=sr 并预声明捕获变量,\n末尾 defer 按项目 log_level 记录 Entry(debug 级含 body)。\n\n新增 NewReloadingHandler 第 7 参数 reqLog,注入到 Handler。\nTask 11 将传入真实 *requestlog.Store;当前传 nil 跳过记录。",
          "is_bot": false,
          "headline": "feat(proxy): 接入 requestlog,请求结束异步记录",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T07:19:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f1212864f6f54c23bb87f296e176d5a27fe3b94",
          "body": null,
          "is_bot": false,
          "headline": "test(requestlog): 订阅推送与惰性清理覆盖",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T07:05:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a5aa69d4f9b01220767d8d589ec9f8be2bbda42f",
          "body": null,
          "is_bot": false,
          "headline": "fix(requestlog): Close 等待 writeLoop drain、Flush 防 Close 后死锁、db 0600 权限",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T06:59:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef9c6f1d396ef31a7eccac4c5b24ff454ba69e91",
          "body": null,
          "is_bot": false,
          "headline": "feat(requestlog): SQLite 请求日志存储与异步写入",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T06:47:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "77200b0f726b9ec2ac27925e8a71725727d6a17c",
          "body": null,
          "is_bot": false,
          "headline": "feat(config): 加 admin_listen/requestlog 字段与默认值",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-09T06:34:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3a2d1658918417de9db553e313838efea5e559b1",
          "body": "全量品牌替换:\n- Go 模块路径 github.com/cnstark/claude-switch → github.com/cnstark/cc-proxy\n- 二进制 cs/cs-proxy → ccp/ccp-proxy,cmd 目录同步重命名\n- 配置目录 ~/.claude_switch/ → ~/.cc_proxy/\n- 私有 key 前缀 sk-cs- → sk-cp-\n- 环境变量 CS_CONFIG/CS_LISTEN → CC_PROXY_CONFIG/CC_PROXY_LISTEN\n- Docker 镜像、release artifact、install 脚本、README/badge 同步更新",
          "is_bot": false,
          "headline": "chore: 项目重命名 claude-switch → cc-proxy",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-08T13:33:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd66e0f537419abca85433ed07b1dadba4ec245f",
          "body": "…失败保留旧配置测试;upstream list 列宽",
          "is_bot": false,
          "headline": "test+chore: 补 ResponseStartedError 不变量测试;mapping list Join;watcher 校验…",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-08T02:17:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "cedb7092a3c6f6b05c7dff94219e4e7c6004d6bb",
          "body": null,
          "is_bot": false,
          "headline": "fix(proxy): forced-probe 补 return 保持流式不变量;补 validate 与 ModelUpstreams 测试",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-07T09:51:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8e4435be106088608bf3c13f640207d9cabadf2c",
          "body": "…名,校验新格式",
          "is_bot": false,
          "headline": "feat: model_map 改用 upstream/model,Resolve 返回 ResolvedTarget,直接访问按真实模型…",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-07T09:29:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c275c25922ea090633949c4ea5aee5fb0bb050fd",
          "body": null,
          "is_bot": false,
          "headline": "refactor: Upstream.Model 单值改为 Models 列表,新增 ModelUpstreams 反查索引",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-07-07T06:57:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5c312b31d65a4eb9ceef3e0ec4628f84e3d31a97",
          "body": null,
          "is_bot": false,
          "headline": "docs: 补充 allow_direct_access 配置说明",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T17:36:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2b1410b37ce06a236cd5c4ad46fbfe8141f5f47a",
          "body": null,
          "is_bot": false,
          "headline": "feat(cli): 新增 project direct-access 子命令并在 list 展示状态",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T17:16:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4e5320efe3218f362eedd0bbbbd3843bbbbe93e",
          "body": null,
          "is_bot": false,
          "headline": "test(proxy): 新增直连完整链路与热重载关闭集成测试",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T17:08:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4de4e1caf50577e914303b60ddaf41a7aeb1bab0",
          "body": null,
          "is_bot": false,
          "headline": "test(proxy): 适配 resolver 新签名并新增直连端到端用例",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T16:58:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2101bd033afe914c053a0e03c2780d0980cf6b6e",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): hotreload 构造 resolver 传入直连开关与 upstream 名集合",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T16:42:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db1d29eec2f0ba69166a149ea256c5c506c95af2",
          "body": null,
          "is_bot": false,
          "headline": "feat(project): ModelResolver 改 struct 并支持 upstream.name 直连",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T16:28:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f67ff482de70ed45543ebd25e07a169ef9fb3ac4",
          "body": null,
          "is_bot": false,
          "headline": "feat(config): 新增 allow_direct_access 字段与别名冲突校验",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T16:15:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b8baca26ad50f1b71a20b45ec835d6485bcba6e5",
          "body": "鉴权后 h.log 已通过 slog.With(\"project\",...) 挂载 project,\n但 model not found / request forwarded / forced probe succeeded /\nall upstreams failed 四条日志仍显式传 project attr,slog 不去重\n导致每条日志输出两个 project 字段。删除冗余 attr,project 统一\n由 .With 提供。\n\n补充 TestHandler_Forwarded_NoDuplicateProjectField 回归测试。",
          "is_bot": false,
          "headline": "fix(proxy): 修复请求日志重复输出 project 字段",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T15:31:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "87184bc31aeda20c310c89673d34de9e6e355048",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): info 请求日志显示 token 数(始终解析,与 usage_stats 解耦)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T15:14:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5a42c497cd63711ae2f19ff76622f113743b2ade",
          "body": null,
          "is_bot": false,
          "headline": "refactor(usage): Attach onDone 加 nil-rec 守卫,消除 recover-as-control-flow",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T15:09:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6a33dcc11c99b60d800cc5bc1c7481e867c97a86",
          "body": null,
          "is_bot": false,
          "headline": "feat(usage): 添加 Collector.Stats() 暴露 per-request token 用量",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T13:57:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c7fdf658ad9b30145e267591e6ca123cdb3ef2ed",
          "body": null,
          "is_bot": false,
          "headline": "refactor(cs): 统一 maskKey 到 logging.MaskKey,删除本地副本",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T11:15:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3cb14446e6811f7f12a819a8aad39cfb691cbccf",
          "body": "TestNewSnapshot_ProjectLogLevelDefaults 中三个相互独立的断言(p1 meta→info、\np2 空→off、snapshot.Projects 与 Raw 一致性循环)由 t.Fatalf 改为 t.Errorf,\n首条失败不再中断,全部失败一次性报告,便于定位。",
          "is_bot": false,
          "headline": "test(config): 独立断言改用 t.Errorf 报告全部失败",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T11:08:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ae9056d90d35cf65b47ba661d430fbaadbcb2222",
          "body": "TestNewLogger_LevelEnforcementAndJSONSink:以 slog.LevelInfo 创建 logger,\n写 Info(\"hello-from-test\") 与 Debug(\"should-be-suppressed\"),断言文件含 Info 的 JSON 行\n(解析 map 校验 msg 字段,slog JSONHandler 默认消息键为 \"msg\")且不含 Debug 行,\n验证工厂装配的 HandlerOptions 级别过滤与文件 JSON sink 端到端生效。\nTestNewLogger_EmptyLogFileFallback:logFile 传空串时回退到 DefaultLogDir(),\n用 t.Setenv 同时设置 USERPROFILE/HOME 指向临时目录(兼容 Windows/POSIX),\n断言不报错且日志落在 temp 主目录下的默认路径,不污染真实 ~/.claude_switch。\n不替换 os.Stderr(与并行测试包冲突),stderr 侧由 TestNewStdErrLogger 覆盖。",
          "is_bot": false,
          "headline": "test(logging): 补充 NewLogger 集成测试覆盖工厂装配与级别过滤",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T11:08:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b0748d5beabdf8ae8dd742838cb5134ae5162576",
          "body": "watcher.log 改为 atomic.Pointer[slog.Logger],poll goroutine 用 Load() 读、\n主 goroutine 用 SetLogger().Store() 写,线程安全且不与 snap 的 RWMutex 争用。\n新增 SetLogger:启动阶段传入 stderr-only bootLogger,双写 logger 构建后由 main.go 调用切换,\n使后续 checkAndReload 的\"配置重载失败\"告警同时写入文件(原先只进 stderr)。\n保留热重载原子性:失败仍保留旧配置 + 旧日志器,不崩溃。",
          "is_bot": false,
          "headline": "feat(config): Watcher.SetLogger 热替换日志器,重载失败日志落盘文件",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T11:07:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "80aaa1a68744c97889b5e525b84b3493fb922096",
          "body": "…字段不可热重载\n\nlogging.NewLogger 改为返回 (*slog.Logger, io.Closer, error),调用方(main.go)defer closer.Close()\n在退出时关闭底层轮转文件,避免 fd 泄漏。\nmaskKey 统一:删除 proxy/handler.go 的 maskKeyLog 与 config/validate.go 的 maskKey,\n统一调用 logging.MaskKey。统一行为取各旧实现中\"更严格\"的版本——短 key(<=4)整段脱敏为 \"...\",\n保证合并后不会比任一旧实现暴露更多 key 字符(真实 key 为 sk-c\n[…]\nncludeMeta bool) 统一 project/server 日志级别错误信息构造,\nserver 仍排除 meta;types.go 与 main.go 标注 LogLevel/LogFile/LogMaxDays 仅启动时读取、不支持热重载。\nproxy/handler.go: h.log = h.log.With(\"project\",...) 补充每请求新建、不跨请求共享的前提注释。",
          "is_bot": false,
          "headline": "refactor: NewLogger 返回 io.Closer;统一 maskKey 到 logging.MaskKey;标注 log …",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T11:07:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c3a12a190971cf7e1b690f4f3600e91144f65aca",
          "body": "generateShortID: crypto/rand.Read 失败时退化为时间戳 ID(fmt.Sprintf(\"%x\", time.Now().UnixNano())),\n避免在(几乎不可能的)rand 故障下产生常量全零 ID;request-id 非安全令牌,退化可接受。\nDualHandler.Enabled: 补充注释说明 OR 语义与\"子 handler 共用同一级别\"假设——\nHandle 无条件调用两个子 handler,级别不对称时\"已禁用\"方仍会被写入。",
          "is_bot": false,
          "headline": "fix(proxy): generateShortID 处理 rand.Read 错误;补充 DualHandler 注释",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T11:06:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62d753dbcccfbe3bb44d67fa71a434f0c853f65e",
          "body": "rotate() 在 Close/Rename 失败时输出 stderr 通知并继续轮转;\nopenFile 使用 O_CREATE|O_APPEND(无 O_TRUNC),重命名失败也会以追加模式重开基础文件,不丢数据。\ncleanup() 在 ReadDir/Remove 失败时输出 stderr 通知并继续;\nfileDate 改用 time.ParseInLocation(time.Local) 解析,与 cutoff(本地)时区一致,修复非 UTC 时区跨天越界。\n\nslog 会丢弃 Writer 返回的 error(死路),stderr 通知是让运维感知失败的真正手段。",
          "is_bot": false,
          "headline": "fix(logging): rotate/cleanup 失败输出 stderr 并统一时区比较",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T11:05:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7a3fd0f3b6946d98d97904123ca9a092d2c9fc6b",
          "body": null,
          "is_bot": false,
          "headline": "fix(logging): cleanup() 在 maxDays<=0 时短路,确保永久保留语义",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T09:00:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50278ae3b6238c27085b40d2d8ee24b282805ce8",
          "body": null,
          "is_bot": false,
          "headline": "test: 更新所有测试适配 slog 迁移",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T08:50:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c584a1f0cc8fddfeb59d5dd9494f022c623610c6",
          "body": null,
          "is_bot": false,
          "headline": "feat(cs-proxy): main.go 迁移到 slog,创建双写 logger",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T08:22:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13f3d0e4335a47d971c5a16a7e65a2fab64807e2",
          "body": null,
          "is_bot": false,
          "headline": "feat: server.go + watcher.go 迁移 fmt.Fprintf 到 slog",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T08:11:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5562eb825eb9dba5e81300d0aa004a10493b8ae7",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): hotreload.go 迁移到 slog,新增 request_id 生成与追踪",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T08:00:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9fb200a3e99d677973f3c48c6cb67b7d6d82b596",
          "body": null,
          "is_bot": false,
          "headline": "feat(proxy): forward.go/upstream.go 迁移日志到 slog,匹配 Forwarder 接口",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T07:47:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "78a13a6a88bf74a363c642f8d909988a96676925",
          "body": "- Forwarder 接口 log 参数类型从 *logging.Logger 改为 *slog.Logger\n- Handler.log 字段类型改为 *slog.Logger,移除 projectLogLevels 字段\n- 移除 logLevelForProject 函数和 h.log.SetLevel() 调用\n- 所有 h.log.Info/Debug(msg, map) 改为 InfoContext/DebugContext(ctx, msg, key, val)\n- 鉴权后通过 h.log.With(\"project\", projectName) 附加 project 日志字段\n- 移除 internal/logging import,新增 log/slog import",
          "is_bot": false,
          "headline": "feat(proxy): handler.go 迁移日志调用到 slog,移除 per-project 级别",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T07:32:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d1540e482a1f26b938a8f08229d532c412c76bca",
          "body": "添加 LogInfo 常量,在 Server 结构体中新增守护进程日志相关字段,\n更新 NewSnapshot 默认值填充、Validate 校验规则和默认配置 YAML。",
          "is_bot": false,
          "headline": "feat(config): Server 新增 log_level/log_file/log_max_days 字段",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T07:11:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5bad4a7c28cf7c2b22e3b0a3902b5c1e85d115bb",
          "body": null,
          "is_bot": false,
          "headline": "feat(logging): 新增 slog 基础组件 — DailyRotateWriter、DualHandler、双写 logger 工厂",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-26T06:33:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e4b6f06991aa775d0f50356de887d31988d6914",
          "body": null,
          "is_bot": false,
          "headline": "docs: 重新整理 README,覆盖所有功能(熔断器、用量统计、部署等)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-25T04:55:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1dab9534e43f50729b531f5198fa485f1a3871cf",
          "body": null,
          "is_bot": false,
          "headline": "test(proxy): 添加熔断器集成测试",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-25T03:16:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e1ae14b65678bde6491d5214f17c479fe9004139",
          "body": "- ReloadingHandler 新增 breaker 字段,透传至 Handler\n- 故障转移循环中集成熔断检查:每次转发前调用 IsAvailable,\n  跳过处于退避期的 upstream;成功/失败后调用 RecordSuccess/Failure\n- 全部 upstream 被熔断跳过时,强制探测第一个 upstream 作为兜底\n- cs-proxy main.go 创建 breaker 实例并传入 NewReloadingHandler\n- breaker 为 nil 时所有熔断逻辑跳过,向后兼容",
          "is_bot": false,
          "headline": "feat(proxy): 集成熔断器到故障转移链路",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-25T02:58:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a82cb0a31657df0a1b0bb0adaf2f8645628ecc4b",
          "body": null,
          "is_bot": false,
          "headline": "test(circuitbreaker): 添加熔断器状态机测试",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-25T02:45:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ea37e1e468e089b46ac37ad894b89952574d58ce",
          "body": null,
          "is_bot": false,
          "headline": "feat(circuitbreaker): 实现上游熔断器状态机",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-25T02:37:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9abf6537d1679384cbb97d192f6069860d33bf95",
          "body": null,
          "is_bot": false,
          "headline": "feat(config): 新增 Upstream.RetryBackoff 字段及校验",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-25T02:31:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "85a62d3909d7004deb33f3494daf6409f3ed3e22",
          "body": "- 修改 forward.go:对 5xx 和 429 返回错误以触发故障转移\n- 新增三个测试用例验证故障转移行为\n- 更新现有测试以适应新的故障转移逻辑",
          "is_bot": false,
          "headline": "修复故障转移功能:5xx和429应触发故障转移",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T19:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a37e75fc7a14cda3d91c9f27ce408b7812d8f2e2",
          "body": "根因:hotreload.go 中 snap.Projects 是 map 迭代顺序随机,且只创建\n一个 logger 供所有请求共用,导致不同 project 的 log_level 无法生效。\n\n修复:\n- logging.Logger 新增 SetLevel 方法支持运行时动态调整\n- hotreload.go 构建 project→log_level 映射传入 Handler,初始固定 Meta\n- handler.go 鉴权成功后根据请求所属 project 动态设置日志级别",
          "is_bot": false,
          "headline": "fix: 修复按项目独立配置日志级别不生效的问题",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T19:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd09f7b0bb20f8861689bab9087675a8f81c4d96",
          "body": "Docker 端口映射通过 veth 网桥连接容器,容器内 127.0.0.1 不\n接收 docker-proxy 发来的连接,必须监听 0.0.0.0。\n\n- cmd/cs-proxy/main.go: 启动时读取 CS_LISTEN 环境变量覆盖\n  snap.Server.Listen\n- docker-compose.yml: 默认注入 CS_LISTEN=0.0.0.0:8787",
          "is_bot": false,
          "headline": "feat: 新增 CS_LISTEN 环境变量支持,Docker 部署时覆盖 listen 地址",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T19:20:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c6c14084c542f52ade9a0f90be8447e120c99cfe",
          "body": null,
          "is_bot": false,
          "headline": "docs: README.md 添加 Badges、快速安装、Docker 部署章节",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T17:10:16Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "91a02e922f83ba9dc70a4e9e057385abff79f406",
          "body": null,
          "is_bot": false,
          "headline": "feat: Makefile 添加跨平台构建和 test/clean 目标",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T17:09:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "06a19600f1d8dbbd9ded2966ca22f975325ff2ff",
          "body": null,
          "is_bot": false,
          "headline": "feat: 添加 LICENSE, GitHub Workflow, 安装脚本, Docker Compose, README-en",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T17:06:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e4eeeb4a70a82703fbf34e6651835101d999ea3d",
          "body": null,
          "is_bot": false,
          "headline": "fix: version 命令改用 RunE + Args:NoArgs(代码审查意见)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T17:03:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ad5aa867600ccf053372b5148fd4f51088250f96",
          "body": null,
          "is_bot": false,
          "headline": "feat: 添加 version 命令,支持 ldflags 注入版本号",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T16:57:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "577e88e78e8d6e0ed3109d66dc4e68250bd22fa3",
          "body": "- 首次启动 cs-proxy 时自动创建带默认值的配置文件,生成随机 sk-cs- key\n- Forward 新增 debug 日志:上游响应状态码、响应头、错误响应体\n- 非 2xx 上游响应改为缓冲读取后非流式写出,确保错误信息完整\n- handler 新增请求头 debug 日志,辅助排查上游兼容性问题\n- rewriteHeaders 同时删除 x-api-key 和 Authorization 头,避免双重认证\n- upstream.Client.Forward 签名同步更新(新增 log 参数)\n- cs 命令配置文件不存在时自动创建,更新帮助信息",
          "is_bot": false,
          "headline": "feat: 自动生成默认配置 + 增强调试日志 + 非2xx错误响应处理",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T16:28:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fcb23799becb956cf469b414a757c5165cf86ed0",
          "body": null,
          "is_bot": false,
          "headline": "fix: 添加文件末尾换行符,固定 alpine 版本为 3.21",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T05:58:08Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a3ec7e08d616c704108b5b0b46b1fa15c0e7c10",
          "body": "docker buildx build --load 仅支持单平台,多平台时静默仅加载当前架构。",
          "is_bot": false,
          "headline": "fix: Makefile docker-build 目标改用 --push(--load 不支持多平台)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T05:51:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4782731f1f2982db6b15a94c03d6edc20945171d",
          "body": null,
          "is_bot": false,
          "headline": "feat: 添加 Makefile(docker-build/docker-build-single/docker-push 目标)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T05:36:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4f91d50b742dcd7e1183e0672150237803045ebe",
          "body": null,
          "is_bot": false,
          "headline": "feat: 添加 Dockerfile(Alpine 多阶段构建,cs-proxy + cs 双二进制)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T05:32:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1f49dff3e767ae7f46fe5f1158d3a3623fd72af3",
          "body": null,
          "is_bot": false,
          "headline": "feat: 添加 .dockerignore(排除 .git/bin/log/pid/usage/config)",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T05:26:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a10c42f44d19c8dc5481e7bc9cced3cdead8e955",
          "body": "Collector 新增 SetModel 方法,handler 在故障转移循环中\n每次尝试前将统计 key 设为 cfg.Model(上游真实模型名),\n而非 model_map 的请求别名。",
          "is_bot": false,
          "headline": "feat: token 用量统计 key 改用上游真实模型名",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T04:55:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "db58d38579cd5e14be8efecae9c97742340fd849",
          "body": null,
          "is_bot": false,
          "headline": "docs: README 新增 token 用量统计使用说明",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T03:24:46Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1d9ee6237fbc81296605676b4c4961ebe481d21c",
          "body": null,
          "is_bot": false,
          "headline": "fix: 最终评审修复——gofmt 换行符与注释澄清",
          "author_name": "Yuhao Wang",
          "author_login": "cnstark",
          "committed_at": "2026-06-24T02:44:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 4,
      "commits_last_year": 113,
      "latest_release_at": "2026-07-08T12:27:04Z",
      "latest_release_tag": "v0.3.0",
      "releases_from_tags": false,
      "days_since_last_push": 2,
      "active_weeks_last_year": 3,
      "days_since_latest_release": 19,
      "mean_days_between_releases": 4.6
    },
    "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/cnstark/cc-proxy",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/cnstark/cc-proxy",
          "is_deprecated": false,
          "latest_version": "v0.3.0",
          "repository_url": "https://github.com/cnstark/cc-proxy",
          "versions_count": 4,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-08T02:17:06Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 19
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": true,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 205637,
      "source_files_sampled": 50,
      "oversized_source_files": 1,
      "agent_instruction_files": [],
      "agent_instruction_max_bytes": null
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/spf13/cobra",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.10.2"
        },
        {
          "name": "golang.org/x/crypto",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.54.0"
        },
        {
          "name": "golang.org/x/term",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.45.0"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        },
        {
          "name": "modernc.org/sqlite",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v1.53.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 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": "cnstark",
          "commits": 113,
          "avatar_url": "https://avatars.githubusercontent.com/u/45590791?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "release.yml"
      ],
      "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": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": null,
            "reason": "no pull request found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/30 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 0,
            "reason": "project has 0 contributing companies or organizations -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "no SAST tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 0,
            "reason": "security policy file not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": 0,
            "reason": "Project has not signed or included provenance with any releases.",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 0,
            "reason": "detected GitHub workflow tokens with excessive permissions",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#token-permissions"
          },
          {
            "name": "Vulnerabilities",
            "score": 9,
            "reason": "1 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "c3e6bfd67c2b6e8899243fb75461417224397e03",
        "ran_at": "2026-07-27T18:38:59Z",
        "aggregate_score": 2.7,
        "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": null,
      "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/cnstark/cc-proxy",
    "host": "github.com",
    "name": "cc-proxy",
    "owner": "cnstark"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 43,
      "inputs": {
        "security": 27,
        "vitality": 70,
        "community": 24,
        "governance": 34,
        "engineering": 52
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 70,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 56,
            "inputs": {
              "commits_last_year": 113,
              "human_commit_share": 1,
              "days_since_last_push": 2,
              "active_weeks_last_year": 3
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 2 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 2
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "3/52 weeks with commits",
                "points": 2.1,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 3
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "113 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 113
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 4,
              "latest_release_tag": "v0.3.0",
              "releases_from_tags": false,
              "days_since_latest_release": 19,
              "mean_days_between_releases": 4.6
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "4 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 19 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 19
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~4.6 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 4.6
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 24,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "moderate",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 50,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 34,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 10,
            "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 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "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": "moderate",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 51,
            "inputs": {
              "followers": 20,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "cnstark",
              "public_repos": 16,
              "account_age_days": 2792
            },
            "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": "20 followers of cnstark",
                "points": 9.5,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 20,
                      "login": "cnstark"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "16 public repos, account ~7 yr old",
                "points": 21,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 16
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 7
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 92,
            "inputs": {
              "packages": [
                "github.com/cnstark/cc-proxy"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 19
            },
            "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 19 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 19
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "4 published versions",
                "points": 12,
                "status": "partial",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 20
              },
              {
                "key": "not_deprecated",
                "name": "Not deprecated",
                "detail": "active, not deprecated or yanked",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "package_not_deprecated",
                    "params": {}
                  }
                ],
                "max_points": 20
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 52,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "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": 60,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": false,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "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": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "topics": [],
              "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "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": "critical",
        "name": "Security",
        "value": 27,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "critical",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): CI-Tests, Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "ci_tests",
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 27,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 2.7
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "no pull request found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/30 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 0 contributing companies or organizations -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "no SAST tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file not detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "Project has not signed or included provenance with any releases.",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "detected GitHub workflow tokens with excessive permissions",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "vulnerabilities",
                "name": "Vulnerabilities",
                "detail": "1 existing vulnerabilities detected",
                "points": 6.8,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 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": 60,
        "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.98,
              "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": "98 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 98,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": true,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile"
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "automated_tests",
                "name": "Automated tests",
                "detail": null,
                "points": 22,
                "status": "met",
                "details": [],
                "max_points": 22
              },
              {
                "key": "lint_format_config",
                "name": "Lint / format config",
                "detail": 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": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 205637,
              "source_files_sampled": 50,
              "oversized_source_files": 1
            },
            "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": "1/50 source files over 60KB",
                "points": 53.9,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 50,
                      "oversized": 1
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T18:39:03.415045Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/c/cnstark/cc-proxy.svg",
  "full_name": "cnstark/cc-proxy",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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

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

Wie ein einzelnes Ergebnis im Gesamtregister steht: aggregierte StatistikenGo.