公开记录
软件健康报告模式 0.27.0 · 指标 1.13.0 · 2026-07-27 12:19 UTC

brunoborges / ghx

GitHub CLI Cache Proxy. Caching daemon for the gh CLI to prevent API rate limiting.

GoMIT★ 94 星标⑂ 7 复刻始于 2026年4月在 GitHub 上查看 ↗

brunoborges/ghx 的健康指数为 100 分中的 65 分,处于「中等」区间。 其得分最高的类别是AI Readiness(83/100),最低的是Community & Adoption(44/100)。 最近一次更新在 9 天前。 近期的大部分工作由 1 位贡献者完成。

65
总分 / 100
中等

软件健康指数

指标归入加权类别,统一采用 1–100 量表。总体分先取类别加权平均;当公开证据触发高风险司法辖区政策时,评级会按政策调整,并设置 49(有风险)的上限。AI 就绪度不计入总体分。

65
优秀85-100堪称典范;基本满足所有检验标准
良好70-84健康;仅有轻微不足
中等50-69可接受,但存在明显不足;建议进行审查
存在风险30-49存在重大薄弱环节;采用时应保持审慎
危急1-29问题严重(项目被弃置、仅有单一维护者、缺乏基本工程规范)
活力社区与采用可持续性与治理工程质量安全AI 就绪度

评分画像

每条轴代表一个类别。形状比平均值更重要——健康的对象会填满整个图形,而“一峰一谷”式画像意味着某一维度的优势正掩盖另一维度的风险。

所有权

Bruno Borges个人账户
1,082 关注者314 个公开仓库始于 2009年9月@Microsoft

该仓库由个人账户拥有。相较于组织支持的项目,单一所有者项目的延续性风险更高。

软件包生态系统

注册表软件包版本月下载量版本数最近发布
Gogithub.com/brunoborges/ghxv1.5.4-159 天前

按类别列示的指标

活力

项目是否仍有生命——是否仍在编写代码,是否仍在发布版本?

73良好 · 占总体的 22%
评分方式
28.8/36推送新近度 — 最近一次推送于 9 天前
4.2/36提交节奏 — 52 周中有 6 周有提交
18/18提交量 — 最近一年 107 次提交
10/10OpenSSF Scorecard:Maintained — 9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year107
human_commit_share0.87
days_since_last_push9
active_weeks_last_year6

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 13 个发布版本
36/36发布时效 — 最近一次发布版本于 9 天前
27/27发布节奏 — 约每 10.4 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count13
latest_release_tagv1.5.4
releases_from_tags
days_since_latest_release9
mean_days_between_releases10.4

社区与采用

项目是否拥有用户、下载量与关注度,并具备欢迎贡献者参与的配置?

44存在风险 · 占总体的 18%

流行度与采用

38存在风险
评分方式
31.9/60星标 — 94 个星标
6.5/25复刻 — 7 个复刻
0/15关注者 — 0 位关注者
所用输入
forks7
stars94
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

50中等
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(MIT)
0/18CONTRIBUTING 指南
0/13.5行为准则
0/7.2议题模板
0/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

项目能否在其成员之外延续——巴士系数、响应能力、由谁支持,以及软件包的维护状况?

64中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
0/22.5提交分布 — 头号贡献者编写了 100% 的提交
1.4/13.5贡献者广度 — 1 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 8 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled1
top_contributor_share1
评分方式
46.8/46.8议题解决 — 100% 的议题已关闭
34.8/38.3PR 接受 — 已裁定的 PR 中 10/11 已合并
0/15OpenSSF Scorecard:Code-Review — Found 0/26 approved changesets -- score normalized to 0
所用输入
merged_prs10
open_issues0
closed_issues8
issue_closed_ratio1
closed_unmerged_prs1
评分方式
10/30所有权背书 — 个人(用户)账户
0/20已验证域名 — 不适用于个人账户
21.8/25所有者影响力 — brunoborges 有 1,082 位关注者
25/25既往记录 — 314 个公开仓库,账户约 16 年
所用输入
followers1,082
owner_typeUser
is_verified
owner_loginbrunoborges
public_repos314
account_age_days6,152
已排除计分(无数据或不适用):已验证域名。 其余权重已重新归一化。
评分方式
25/25已发布且可解析 — go 上有 1 个软件包
35/35发布时效 — 最近一次发布于 9 天前
20/20版本历史 — 15 个已发布版本
20/20未被弃用 — 活跃,未被弃用或撤回
所用输入
packagesgithub.com/brunoborges/ghx
ecosystemsgo
any_deprecated
min_days_since_publish9

工程质量

基础的工程与文档实践是否到位?

77良好 · 占总体的 20%

工程实践

68中等
评分方式
24/24CI 工作流 — 3 个工作流
24/24存在测试
0/16Linter 配置
0/9.6Pre-commit 钩子
0/6.4.editorconfig
20/20OpenSSF Scorecard:CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
所用输入
has_ci
has_tests
has_editorconfig
has_linter_config
has_precommit_config

文档

90优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://brunoborges.github.io/ghx/
10/10仓库描述
10/10主题标签 — 2 个主题标签
0/10Wiki
所用输入
topicscli, github
has_wiki
homepagehttps://brunoborges.github.io/ghx/
has_readme
has_docs_dir
has_description

安全

可见的安全与供应链实践是否稳固,且不存在未解决的高风险司法辖区暴露?

62中等 · 占总体的 16%

安全态势

53中等
评分方式
6.8/7.5Binary-Artifacts — binaries present in source code
0/7.5Branch-Protection — branch protection not enabled on development/release branches
2.5/2.5CI-Tests — 6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/26 approved changesets -- score normalized to 0
2.5/2.5Contributors — project has 8 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
7.5/7.5Dependency-Update-Tool — update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
0/5Packaging — 无数据
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
5/5SAST — SAST tool is run on all commits
2/5Security-Policy — security policy file 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
所用输入
sourceopenssf_scorecard
checks_evaluated17
scorecard_versionv5.5.0
checks_inconclusive1
scorecard_aggregate5.3
已排除计分(无数据或不适用):packaging。 其余权重已重新归一化。
评分方式
35/35直接依赖不含已知公告 — 没有直接依赖携带已知公告
0/25间接依赖不含已知公告 — 在此范围内,传递依赖集合无法与开发和测试依赖区分
0/40没有长期未处理的公告 — 没有公告带有发布日期
所用输入
sourceosv
advisories1
affected_packages1
assessed_packages3
unassessed_packages0
affected_by_severityunknown 1
direct_affected_packages0
已排除计分(无数据或不适用):间接依赖不含已知公告, 没有长期未处理的公告。 其余权重已重新归一化。 已将 3 个已解析依赖与 OSV 比对。 该仓库未发布任何索引可解析的软件包,因此改为评估仓库依赖图。该图将开发与测试版本固定同交付的依赖混在一起,因此仅对声明的运行时依赖计分;传递性发现仅作为背景信息列出,不计入评分。 未对可达性进行分析。

AI 就绪度

该仓库在多大程度上具备与 AI 编码代理协同开发与维护的条件?这是一枚独立的实验性徽章——权重为 0.0,因此单独呈现,不影响总体健康评分。

83良好 · 占总体的 0%
评分方式
45/45代理指令 — .github/copilot-instructions.md
0/15机器可读文档(llms.txt)
39.2/40可读的提交历史 — 87 次人类提交中有 64 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.736
agent_instruction_files.github/copilot-instructions.md
agent_instruction_max_bytes5,091
评分方式
18/18一条命令的引导启动 — Makefile
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — Go(静态类型)
10/10可复现环境 — lockfile
10/10已体现的代理实践 — 最近 100 次提交中有 78 次由代理编写或署名代理
5/8自动化维护 — 已配置依赖自动化,但在抽样提交中未观察到
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfilesgo.sum
has_dockerfile
typed_language
bootstrap_filesMakefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0.78
toolchain_manifestsgo.mod
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — Go(静态类型)
55/55可控的文件大小 — 采样的 38 个源文件中有 0 个超过 60KB
所用输入
primary_languageGo
largest_source_bytes12,994
source_files_sampled38
oversized_source_files0

关键数据

94GitHub 星标
1贡献者
107最近 12 个月提交数
9距最近推送天数
13发布版本数
1巴士系数(bus factor)
0开放议题
Go软件包生态系统数

数据采集警告

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

更多细节

Star 与 Fork 历史 0 ★ / 7 ⇿
0Star
7Fork
1发布

每颗 star 和每个 fork 的添加时间,来自 GitHub 并按天汇总。累计增长位于其构成来源——每日新增——的正上方,二者可相互对照:稳定的自然增长与短暂的突增形态截然不同。当这一差别可被衡量时,它会作为增长真实性予以报告。

12345532026-042026-052026-05
主版本 0次版本 0修订 1
OpenSSF Scorecard 5.3 / 10
5.3综合

来自开源项目 OpenSSF Scorecard 的独立、工具无关的安全评估。每项检查奖励的是安全实践本身,而非特定供应商的工具。Scorecard 无法判定的检查项标记为 不适用,并从安全评分中剔除(绝不按零分计)。Scorecard v5.5.0 · 2026-07-27 12:19 UTC

9Binary-Artifactsbinaries present in source code
0Branch-Protectionbranch protection not enabled on development/release branches
10CI-Tests6 out of 6 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/26 approved changesets -- score normalized to 0
10Contributorsproject has 8 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
10Dependency-Update-Toolupdate tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10
不适用Packagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
10SASTSAST tool is run on all commits
4Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
9Vulnerabilities1 existing vulnerabilities detected
直接依赖 2
注册表软件包版本约束清单文件
Gogithub.com/Microsoft/go-winiov0.6.2go.mod
Gogopkg.in/yaml.v3v3.0.1go.mod
全部依赖 3

来自 GitHub 依赖图的完整解析依赖集合:2 个直接依赖与 1 个间接(传递)软件包。仓库提交锁文件时,传递闭包才是完整的。

注册表软件包版本关系
Gogithub.com/microsoft/go-winiov0.6.2直接
Gogopkg.in/yaml.v3v3.0.1直接
Gogolang.org/x/sysv0.10.0间接
依赖安全公告 1

该仓库未发布可被索引解析的包,因此评估的是其自身的依赖图——共 3 个包,其中也包含从不交付的开发与测试版本固定:1 个存在已知公告,0 个为直接依赖。

软件包版本关系严重程度公告数修复版本
golang.org/x/sysv0.10.0间接未知10.44.0

公告表示依赖图中记录的版本落入某条公告的受影响范围。可达性未经分析,且依赖图包含开发与测试的版本固定——某项发现可能只涉及工具链而非交付的软件。

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "cli",
        "github"
      ],
      "is_fork": false,
      "size_kb": 6266,
      "has_wiki": false,
      "homepage": "https://brunoborges.github.io/ghx/",
      "languages": {
        "Go": 134978,
        "Shell": 7620,
        "Makefile": 164,
        "Batchfile": 3027,
        "PowerShell": 3470
      },
      "pushed_at": "2026-07-18T04:11:35Z",
      "created_at": "2026-04-15T14:35:08Z",
      "owner_type": "User",
      "updated_at": "2026-07-23T08:50:38Z",
      "description": "GitHub CLI Cache Proxy. Caching daemon for the gh CLI to prevent API rate limiting.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": "http://brunoborges.io",
      "name": "Bruno Borges",
      "type": "User",
      "login": "brunoborges",
      "company": "@Microsoft",
      "location": "Montreal, Canada",
      "followers": 1082,
      "avatar_url": "https://avatars.githubusercontent.com/u/129743?v=4",
      "created_at": "2009-09-22T01:06:33Z",
      "is_verified": null,
      "public_repos": 314,
      "account_age_days": 6152
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v1.5.4",
          "kind": "patch",
          "published_at": "2026-07-18T04:13:33Z"
        },
        {
          "tag": "v1.5.3",
          "kind": "patch",
          "published_at": "2026-06-22T15:13:24Z"
        },
        {
          "tag": "v1.5.2",
          "kind": "patch",
          "published_at": "2026-05-04T22:27:40Z"
        },
        {
          "tag": "v1.5.1",
          "kind": "patch",
          "published_at": "2026-04-17T01:36:28Z"
        },
        {
          "tag": "v1.5.0",
          "kind": "minor",
          "published_at": "2026-04-16T20:33:57Z"
        },
        {
          "tag": "v1.4.0",
          "kind": "minor",
          "published_at": "2026-04-16T18:09:41Z"
        },
        {
          "tag": "v1.3.0",
          "kind": "minor",
          "published_at": "2026-04-16T17:14:40Z"
        },
        {
          "tag": "v1.2.1",
          "kind": "patch",
          "published_at": "2026-04-16T16:47:39Z"
        },
        {
          "tag": "v1.2.0",
          "kind": "minor",
          "published_at": "2026-04-16T16:19:20Z"
        },
        {
          "tag": "v1.1.1",
          "kind": "patch",
          "published_at": "2026-04-15T20:27:14Z"
        },
        {
          "tag": "v1.1.0",
          "kind": "minor",
          "published_at": "2026-04-15T20:13:56Z"
        },
        {
          "tag": "v0.0.2",
          "kind": "patch",
          "published_at": "2026-04-15T18:53:37Z"
        },
        {
          "tag": "v0.0.1",
          "kind": "patch",
          "published_at": "2026-04-15T17:56:38Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "6584e26b9a98512d9b8f7bfa5c28846edc98c403",
          "body": "* Initial plan\n\n* fix: single-instance guard and loud fallback for ghxd socket conflicts\n\n- Add ensureSingleInstance() to platform_unix.go: reads the PID file,\n  checks if the previous ghxd process is alive (signal 0), sends SIGTERM\n  (with 500ms grace period), then SIGKILL if still alive. This prev\n[…]\nagent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: Bruno Borges <bruno.borges@gmail.com>\nCo-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(ghxd): single-instance guard + loud cache-bypass warnings (#19)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-07-18T04:08:52Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "aeaac4c303be1aafa0b7df5c68295718854ee63f",
          "body": "* Fix per-request GitHub authentication\n\nForward each client's GitHub authentication environment to daemon executions, strip stale daemon credentials, and isolate cache and singleflight entries by full token fingerprint.\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>\n\nCopi\n[…]\n-by: Copilot App <223556219+Copilot@users.noreply.github.com>\nCopilot-Session: 785a2ead-f377-43ea-b336-95b28beaa2d9\n\n---------\n\nCo-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix per-request authentication for multi-account use (#18)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-07-18T03:38:37Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ff4c0321b8c60465f3db4b4bd45782b61b4d5f4a",
          "body": "…g gh commands (#17)\n\n* Initial plan\n\n* Fix socket I/O timeout and silent double execution on long-running commands\n\n- Client: use SetWriteDeadline (30s) for sending the request only; clear all\n  deadlines before reading the response so long-running gh commands (multi-minute\n  GraphQL queries, large\n[…]\ntSent sentinel and its errors.As chain.\n\nFixes #14\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: Bruno Borges <bruno.borges@gmail.com>",
          "is_bot": false,
          "headline": "Fix socket I/O timeout causing silent double execution on long-runnin…",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-06-22T15:03:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "cb05b5af31e03c9c0cc03b7e4ec522b63cf3b45e",
          "body": "…on `gh auth login` (#16)\n\n* Initial plan\n\n* fix: short-circuit passthrough commands to bypass daemon IPC\n\nCommands classified as Passthrough (auth, config, codespace, etc.) are\ninteractive and unsuitable for the daemon, which captures stdout/stderr\nand has a fixed 60-second IPC deadline. Running gh\n[…]\n() immediately (syscall.Exec),\ngiving the process full TTY access and avoiding any IPC timeout entirely.\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: bypass daemon for passthrough commands to eliminate IPC timeout …",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-06-22T15:03:08Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7d70f4896333a6ff06c320d5bf68ef072c0d9e31",
          "body": "* Initial plan\n\n* Move Go source into src/ folder and update references\n\n* Move ADR.md, DOCS.md, SPEC.md into specs/ folder\n\n---------\n\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move Go source into src/ folder and docs into specs/ folder (#12)",
          "author_name": "Copilot",
          "author_login": "Copilot",
          "committed_at": "2026-06-02T21:47:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0bc38991c68be285f2c87431528df9a32269ee30",
          "body": "…g binary (#10)\n\n* fix: daemon periodically re-resolves gh path and falls back on missing binary\n\nThe daemon previously resolved the gh binary path once at startup and never\nupdated it. This caused two problems:\n\n1. After upgrading gh (e.g., brew upgrade), ghx continued using the old version\n   unti\n[…]\n75728472+Copilot@users.noreply.github.com>\nCo-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: daemon periodically re-resolves gh path and falls back on missin…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-05-04T22:25:21Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "0733d5210a360f4a5eae89f906f40ceeab7414a5",
          "body": "Add a 'How caching works' section explaining how cache keys are built\nfrom host, repo, branch, token hash, and full args (including flags),\nand how singleflight coalescing deduplicates concurrent identical calls.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Document cache key construction and singleflight coalescing",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-28T21:36:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aaa1fdb9f0c4075e8b2660fba7ac0c659af0db76",
          "body": "Add a TTL Override Keys section to DOCS.md with the full table of\nbuilt-in command keys and instructions for deriving keys for custom\ncommands added via additional_cacheable.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Document all TTL override keys and custom command TTL config",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-28T21:33:31Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2e25c660e43056ad3b5b2e8de324857fee0d1477",
          "body": "Slim down README to a quick-start overview with highlights, compact\ninstall instructions, and a basic usage example. All detailed sections\n(full install options, gh shim, daemon/cache management, dashboard,\nconfiguration, architecture, security, development) now live in DOCS.md.\n\nAlso add a Docs link to the landing page nav in docs/index.html.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move detailed docs from README to DOCS.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-28T21:25:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "434a676d68eee418c49e5fc26f80f60b28ee7a7f",
          "body": null,
          "is_bot": false,
          "headline": "Update SECURITY.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:34:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "aa4a2786660e27392b0d3e8886f140e0a0261a0c",
          "body": "For passthrough/unknown commands, the metrics key was built from all\nargs joined together. If a user passed sensitive values as CLI flags,\nthey could surface in /api/stats or /api/log. Now only the first two\nargs (subcommand + action) are used, matching classified commands.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "security: sanitize metrics command key to prevent arg leakage",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:34:01Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "90b9116f42dcea929253b7a9d27aaa85d9fba2c6",
          "body": "- Apply gofmt -s formatting to internal/allowlist/allowlist.go\n- Reduce main() cyclomatic complexity (23→12) by extracting\n  parseGHXFlags, ensureDaemon, handleSubcommand, and printHelp\n- Reduce handleDaemon() complexity (16→9) by extracting\n  handleDaemonStart and isDetachMode\n- Reduce isTextHeader\n[…]\nixes with bytes.HasPrefix\n- Reduce downloadToWithVersion() complexity (16→8) by extracting\n  fetchAndInstall and downloadAndVerify\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "refactor: fix all Go Report Card issues",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:27:00Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "16483abf7949c50e9c249f2c5958cf7c65f01f44",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Security section and JSON API details to landing page",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:17:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cf5b232c6aadf9dfa2bb6e0bbae390595dfffae5",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Option A/B guidance for existing gh installs in shim section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:15:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "cce20b8624e1e290459ebff874b889539da8182c",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Windows PowerShell instructions to manual download section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-17T01:13:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ff402e2c2c79469c5097326ca02314c78ef2c106",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Bump agent-plugin version to 1.5.0",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T20:37:20Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f23a6147a7f834e96307e2a69dacc5e5e674201d",
          "body": "- Wire up cfg.LogFile in ghxd (was defined but never used)\n- Dashboard port 0 now disables the HTTP dashboard\n- Simplify xcache flush: always flush all entries (remove resource filtering)\n- Remove dead code: ExecutePassthrough, GHCDir, LogLevel, ToJSON, AvgLatencyMs, HitRate\n- Remove unimplemented '\n[…]\ncommand from SPEC.md\n- Remove daemon internals from agent SKILL.md\n- Add CI, Release, Go Report Card, and License badges to README\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Wire up log file, simplify flush, remove dead code, add badges",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T20:31:20Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ba0df06a569fddf56979b089684fc3625d5fd8eb",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Extract CSS into separate docs/style.css file",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:22:37Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2d22e4030a46030b62e78da5b03bb9344bfc9f7",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move How It Works section to after Why ghx?",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:17:12Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "51e68d7d11e5122c2d3ba3594794a2cf5da755bc",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add How It Works link to navbar",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:15:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5a654aba3fe45455b6cd84153dea8e60f9988151",
          "body": "Side-by-side layout: diagram on the left, numbered steps on the right.\nStacks vertically on mobile. Removed standalone architecture section.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Move architecture diagram to left of How It Works section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:14:30Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f2a5df46c693b8ed6b2e61344d076a900252b21a",
          "body": "CSS-styled visual diagram showing the agent → ghxd → gh flow,\nplaced between the hero and features sections with a nav link.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add architecture diagram section to docs page",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:10:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ab72069eb0db23044e09ec551eee7add1ab5bbc8",
          "body": "Move secret and variable out of never-cache. Their list/get actions\nare read-only (secret list returns names only, never values). Add\n'set' to mutating actions for proper cache invalidation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add secret list, variable list/get to built-in cacheable allowlist",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:05:48Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "1fa9669a38e8585f9bc6c76667a39292e18c6eeb",
          "body": "These read-only project subcommands are commonly used by agents\nquerying GitHub Projects structure and items.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add project field-list and item-list to cacheable allowlist",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T18:00:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d7b2a45dc84b5e3c213606b4ae15eaedb033bfb1",
          "body": null,
          "is_bot": false,
          "headline": "Update README.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:54:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "03043c659db9c8cc21cea84e4ff2bcc8d5693b0d",
          "body": "- Fix class names (step-num → num, step-content → content) to match\n  existing CSS rules, fixing the broken vertical line layout\n- Add copy-to-clipboard buttons on the two plugin commands\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix agent plugin section styling and add copy buttons",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:52:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b06f1e5d1f7282a2364699a2ae4b21829e8d3cb3",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Increase copy button size for better visibility",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:51:04Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "fd8b82f70c11a1ec5b995d2a0b4f56f61528a7ce",
          "body": "Each command line in the install block now has a clipboard icon that\nappears on hover. Clicking copies the command text and shows a brief\ncheckmark confirmation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add per-line copy buttons to install commands",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:48:26Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "de6d48c2b6d34988145bd102c1b569e97a782795",
          "body": "Match the styling of the Custom Cacheable Commands section instead of\nusing a feature card.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Restyle GitHub Releases as plain paragraph in install section",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:45:59Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ce26cbd583539ef3b9d839a158a3104f4a4be6bd",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Rename gh shim section title to emphasize transparent caching",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:34:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5c84534df9200ce5e628fa6e2852248fa0924949",
          "body": "Style the GitHub CLI link to match the dark theme instead of\nbrowser-default blue. Uses accent-colored underline with hover effect.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix hero subtitle link styling in docs page",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:33:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "057cbf744a6b4dbdf825a24ef83cc184482b0510",
          "body": "- SPEC.md: fix 11 inaccuracies (Windows support, IPC transport, WorkDir\n  protocol field, project structure, singleflight location, Homebrew\n  install method, config schema, allowlist completeness, Phase 1 status)\n- docs/index.html: clarify gh shim options when GitHub CLI is already\n  installed (Option A: remove gh + reinstall ghx, Option B: agent plugin)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update SPEC.md and docs for accuracy",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:29:05Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8d663f9d82f7b17c4172e1f07718f0ee369eb7e8",
          "body": "When a real gh exists, the shim is not installed and agents bypass\nthe cache. Add a callout box with two clear options: remove gh and\nreinstall ghx (shim path), or keep gh and install the agent plugin.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: clarify options when GitHub CLI is already installed",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:20:23Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "8812ee6c475f25634ed7ef55d6a1c6d45d05477f",
          "body": "Emphasize that the shim automatically gives AI agents caching for\nfree — agents call gh by default, and the shim routes everything\nthrough ghx's cache layer without any agent configuration.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: clarify gh shim benefit for AI coding agents",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:18:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "841baea9ddb2573181e617685d34b18693a14c4e",
          "body": "- Add PowerShell install section (irm | iex)\n- Add Windows manual download note\n- Add install.ps1 to gh shim table\n- Add platform labels to section headings\n- Fix Homebrew command: brew install ghx (was ghxd)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add Windows installation steps to README",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:16:25Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "243e8c0b209d888a5f2795831e10975c72b29e6e",
          "body": "The daemon executes gh subprocesses without setting cmd.Dir, so gh\ninherits the daemon's working directory instead of the client's.\nCommands like \"gh secret list\" that resolve the repo from git fail\nwith \"not a git repository\" when the daemon's CWD differs.\n\nAdd WorkDir to the IPC protocol so the cl\n[…]\n each\nrequest. The executor sets cmd.Dir to this path (only if absolute) so\ngh and git resolve context from the correct directory.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: forward client working directory to daemon subprocesses",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:12:25Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "47ca2aab9f971fb2679fbf37fe85a87f6e985515",
          "body": "Always install the latest release. Version pinning adds complexity\nfor no practical benefit in an auto-install agent plugin context.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "chore: remove GHCD_VERSION env var from agent plugin",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:02:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ef6029bd12b2db7a81d59146bd0c00f33df8a1c1",
          "body": "Updated README to reflect changes in plugin functionality and compatibility.",
          "is_bot": false,
          "headline": "Revise README for ghx plugin details and compatibility",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T17:01:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "201babe5146be592de0ee3244b10b643579c3bef",
          "body": "Explains how the gh shim works: auto-installed when no real GitHub CLI\nis detected, transparently forwards commands through ghx, and obtains\nthe real gh binary on first use.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: add gh shim section to GitHub Pages",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T16:55:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "6552acd40be5f7a2da8b4dc1a7bef298f600c6bc",
          "body": "- Add Windows PowerShell install option (irm | iex)\n- Add platform labels (macOS, macOS/Linux, Windows) to install methods\n- Update GitHub Releases note to include Windows (x64 & arm64)\n- Fix Homebrew command: brew install ghx (was ghxd)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "docs: update GitHub Pages with Windows support and fix brew command",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T16:50:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d6419949d2c9324f9e4b314e7f9347b4a96312b3",
          "body": "Two bugs in the Homebrew formula prevented the gh shim from being installed:\n\n1. Homebrew's system() in post_install raises on non-zero exit, so\n   \"command -v gh\" failing (no gh found) aborted the entire post_install\n   instead of continuing to create the shim.\n\n2. The shim was generated inline ins\n[…]\nom the release tarball (which already has correct \"$@\"). Use\nPATH scanning with ghx-shim marker detection for robust gh detection.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix(brew): install gh shim during install phase, not post_install",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-16T16:44:23Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "2e30d6465c114f69a82b7636f7985d144551093d",
          "body": "…orkflows\n\nConsolidate CI and daily workflows into a single `ci.yml`",
          "is_bot": false,
          "headline": "Merge pull request #7 from brunoborges/copilot/combine-ci-and-daily-w…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T22:40:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "13c96cb9a7ea0bc423350c00908dc75cf96b9ded",
          "body": "Install gh shim only when no real gh binary is available on the system",
          "is_bot": false,
          "headline": "Merge pull request #6 from brunoborges/copilot/install-shim-optionally",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T22:39:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8d782392ded070408eaad2de26d2ba00bec228ea",
          "body": "…ection\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/c64f9e03-4804-4712-9499-2aa6d02a8afc\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Address code review: simplify PowerShell, fix Homebrew formula gh det…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:19:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2e2fb209cf9a45ceedbebbb998f1dc323bb681bd",
          "body": "Updated all installation scripts (install.sh, install.ps1,\nagent-plugin/scripts/install.sh, agent-plugin/scripts/install.cmd)\nand the Homebrew formula to conditionally install the gh shim.\n\nThe shim is now skipped when a real gh binary (not a ghx-shim) is\nfound anywhere on the system PATH. This allo\n[…]\nb CLI without shadowing it.\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/c64f9e03-4804-4712-9499-2aa6d02a8afc\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Install gh shim only when no real gh binary is available on the system",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:17:45Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "9fc82db047a7568cf377e876e2f9adfc9a943b6a",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/dc5de418-00ab-40d7-bca7-d86331a903e7\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Combine ci and daily workflows into ci.yml",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:10:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f275aab5daa554b923bdfebe2073e385a2dc433a",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:09:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d05262266e8e7c0bed3670743b61351dc8b81ae9",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:08:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a3a0113f20b7c868d57636e31f31343f2c820d06",
          "body": "Add Windows support",
          "is_bot": false,
          "headline": "Merge pull request #2 from brunoborges/copilot/add-windows-support",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T21:06:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4687c0ffbf3cfdaff3bc12987cf9b979cc3d9926",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/beb9fc34-d1eb-47f4-9d0c-4003d5c156e2\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "fix(ci): use PowerShell-safe go coverprofile flag syntax",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T21:02:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "028f6a55803c736552106ac13a2b51e70d8775c3",
          "body": "- Release zip includes gh.cmd alongside ghx.exe and ghxd.exe\n- install.ps1 installs gh.cmd shim (protected against overwriting)\n- Agent plugin adds bin/gh.cmd wrapper for Windows\n- Agent plugin install.cmd places gh.cmd shim with real binaries\n\nThis mirrors the Unix gh shim strategy: all gh commands are routed\nthrough ghx for automatic caching.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: add gh.cmd shim for Windows across all install channels",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:56:57Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d011711a5a52ed45df3ee35ea5b62fdec1ad9926",
          "body": "…upport",
          "is_bot": false,
          "headline": "Merge remote-tracking branch 'origin/main' into copilot/add-windows-s…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:53:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f56aff64ab973ab14454f0cf0be4109351273b9",
          "body": "- FindRealGHInPath and ManagedGHPath use gh.exe on Windows\n- isExecutable treats all regular files as executable on Windows\n  (permission bits are not meaningful on that platform)\n- Tests use ghBinaryName() for platform-correct filenames\n- TestExtractFromZip uses gh.exe entry name on Windows\n- TestIsExecutable skips non-executable permission check on Windows\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: Windows compatibility for ghcli tests and resolution",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:53:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "38bd7bc97c11c7131783f9b9afa242b87aabfbd4",
          "body": "Potential fix for code scanning alert no. 1: Slice memory allocation with excessive size value",
          "is_bot": false,
          "headline": "Merge pull request #3 from brunoborges/alert-autofix-1",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:49:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c52644e4f4ef94cb3face16a49070b8119be5ecf",
          "body": "Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update internal/daemon/server.go",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:48:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "9959cdcac0b968aa0eb9242edeb19dbb7a6a11d7",
          "body": "…with excessive size value\n\nCo-authored-by: Copilot Autofix powered by AI <62310815+github-advanced-security[bot]@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Potential fix for code scanning alert no. 1: Slice memory allocation …",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:48:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "278dbd6499c7a89a24821252f7c959b7d002272e",
          "body": "Seven pre-existing files had struct field alignment or spacing\nissues that caused the CI gofmt check to fail consistently.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "style: apply gofmt to all files failing CI lint",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:45:03Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "f39f41905e9b228e4534e2c7a389c4d287bae974",
          "body": "Merged latest main into copilot/add-windows-support, resolving:\n- release.yml: combined Windows .exe/.zip packaging with gh shim in tarballs\n- SPEC.md: trivial whitespace conflict in shim distribution table\n- cmd/ghx/main.go: removed duplicate function declarations from merge\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "merge: resolve conflicts with main (gh shim + ghcli features)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:42:29Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "964f8fc5fb91c89fec2588a560add2bdcfb02fdc",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/d3bd85bd-4190-4182-8fbd-6450509dea9b\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "merge: resolve latest main conflicts",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T20:37:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6393a489649b1720f28879b210ad9d4c111a10bc",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: gofmt alignment in main.go struct literal",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:33:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0947787c1eaf1d3b11546dc7826c1e1025c020b3",
          "body": "The gh shim is now co-located with ghx in every distribution method:\n\n- Release tarballs include the gh shim script alongside ghx and ghxd\n- install.sh always installs the shim (protected against overwriting\n  a real gh binary by checking for the ghx-shim marker)\n- Homebrew formula installs the shim\n[…]\nplugin adds a bin/gh wrapper that delegates to co-located ghx;\n  plugin install script also places the shim with the real binaries\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "fix: place gh shim alongside ghx in all install channels",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:25:34Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "666935b5ac6f95c02d8f327ccd1bd27a7adec61b",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/3a3825e3-04a2-4dbf-8587-e40cec8dd82f\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "merge: resolve conflicts with origin/main",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T20:19:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "63c170a3be892002cd6dc18632dc828a3847a37e",
          "body": "Add support for using ghx without a pre-installed GitHub CLI:\n\n- New internal/ghcli package for gh binary resolution, shim detection,\n  and auto-download from cli/cli releases with SHA-256 verification\n- Resolution order: user config → PATH (skipping shims) → managed\n  ~/.ghx/bin/gh → auto-download\n\n[…]\n on code paths that need gh\n- Lock file prevents concurrent download races\n- Comprehensive tests (34 tests) with mock HTTP servers\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "feat: gh shim, auto-download, and managed CLI lifecycle",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T20:12:11Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "15d4cad200908f88dbd47caa64f247fc585ccb69",
          "body": "Add guidance to the ghx skill telling AI agents to use ghx instead of\nthe GitHub MCP Server whenever possible. Includes a policy section,\na common mappings table for ~20 MCP Server operations, and explicit\nexceptions where MCP Server is the better choice.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "skill: instruct agents to prefer ghx over GitHub MCP Server",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T19:12:52Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "acb04780b42d6c7b82650e28bb1a86841a9d7771",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Clean up hero terminal snippet: remove Copy button, widen, left-align",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:57:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "997317d656f878bf7e253a6e0b59981412aed35c",
          "body": "- ghx xhelp: shows all x-prefixed commands, flags, and config paths\n- ghxd --help/-h: shows options, socket/dashboard/PID paths, and usage hint\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add xhelp for ghx and --help/-h for ghxd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:50:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "aebef9655aae9d891f49d66186069b86e5c5044e",
          "body": "- ghx xversion: prints ghx version (x-prefixed to avoid conflict with gh version)\n- ghxd --version / -v: prints ghxd version\n- Version injected via ldflags at build time, defaults to 'dev'\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add xversion command to ghx and --version to ghxd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:49:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "5f1300ca7b0a9a099f472383067338e91e66a48b",
          "body": "- Add version var to ghxd (injected via ldflags at build time)\n- Pass version through to daemon server\n- Expose version in /api/stats JSON response\n- Display version in dashboard footer\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Show version in dashboard and ghxd --help",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:44:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e2c0919914349b81d79309ad3b0fbc9c520a09c6",
          "body": "Each tile now takes full width in a single column layout with icon\nand content side-by-side, giving enough room for long commands.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Stack install tiles vertically for better readability",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:39:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "4fb3c4f4b27e35e9d8f99cc03523277df6134c56",
          "body": "- POST /api/flush?resource= endpoint with resource validation\n- POST /api/shutdown endpoint with async graceful shutdown\n- Dashboard: flush button with resource dropdown, shutdown with confirmation\n- Shutdown replaces page content with restart instructions\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add Flush Cache and Shutdown buttons to dashboard",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:37:14Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "32ebaf013aee86ce30237594c6efb2c94abab850",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add footer to dashboard matching GitHub Pages site",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:32:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b5b2b4302a5599510512e2c2ca6a3f945dc2e3c0",
          "body": "Agent-Logs-Url: https://github.com/brunoborges/ghx/sessions/358e802e-3aa1-435b-a4d7-4865be7da194\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "fix: apply gofmt to files failing lint workflow",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:32:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d93a92232db26bc011e0afab93801d14c446cc8",
          "body": "Documents the core architectural rationale — why a two-binary daemon/client\nmodel with allowlist, singleflight, context-aware keys, and auto-start.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add ADR-000: daemon/client architecture with allowlist-based caching",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:27:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "e3d27df3e6fcbb17951723cddcd36d10905a38f6",
          "body": "Documents why we chose CLI wrapping over HTTP proxy/MITM approaches,\ncovering TLS complexity, cross-platform concerns, and cache semantics.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add ADR-001: command-layer caching over HTTP-layer caching",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:25:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "140b4d951a8a4ea7d24b39fedd24050c61d05822",
          "body": "ghx cache → ghx xcache (gh cache is Actions cache)\nghx daemon → ghx xdaemon (avoids potential future gh conflicts)\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Prefix ghx-specific subcommands with x to avoid gh conflicts",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:20:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "67d853a782d18536ef639f0323b0c0ad58164b24",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix 'From Source' tile: full URL, copy-pasteable pre block",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:18:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d31913ebecf2d08b3aaeea6df44367f2a9775285",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Dashboard: oldest-first log order, always scroll to bottom",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:16:46Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "b0f07e620fcb31107fb75b17e72d7b310f52b8d4",
          "body": "… Windows directory validation\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/b5b6bb5d-ae1f-44b8-ae11-12c6016d9ec4\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Fix config test: use suffix check instead of path separator check for…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:14:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6b85ced33beaeb6d4cbc7e7231392b2310e6673f",
          "body": "…nd config tests\n\n- Add windows/amd64 and windows/arm64 to release.yml build matrix with .exe suffix and .zip packaging\n- Add windows-latest to CI and daily workflow test matrices\n- Use 'go build ./...' instead of 'make build' for cross-platform CI compatibility\n- Add install.ps1 PowerShell installe\n[…]\n platform-specific defaults\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/b5b6bb5d-ae1f-44b8-ae11-12c6016d9ec4\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Add Windows CI/release targets, install.ps1, agent-plugin wrappers, a…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:12:47Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "96b3e06af27cb4f36ba5b496be158490dfa7a542",
          "body": "…nt, signals, and config\n\n- Create internal/ipc package with build-tagged files for Unix sockets and Windows named pipes\n- Extract platform-specific daemon code (signal handling, socket cleanup, permissions) into build-tagged files\n- Extract platform-specific process management (Setsid, Exec) into b\n[…]\n Windows named pipe support\n\nAgent-Logs-Url: https://github.com/brunoborges/ghx/sessions/b5b6bb5d-ae1f-44b8-ae11-12c6016d9ec4\n\nCo-authored-by: brunoborges <129743+brunoborges@users.noreply.github.com>",
          "is_bot": true,
          "headline": "Add Windows platform support via build tags for IPC, process manageme…",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:09:23Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "c1a38b0a6ab058afaab75d1cf2b480ef75dd1350",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix plugin install command: ghx@agent-plugins (not ghxd)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:08:39Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "705887c9cd41298b79a4b8bfbc0aedd8c2beb217",
          "body": null,
          "is_bot": false,
          "headline": "Update SKILL.md",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:04:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d98eb34811501e945d26fdc72ec1c5cf6f9cdd5f",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Make SKILL.md more assertive: always use ghx, never gh",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T18:03:32Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "ea82c427f3bf2144a1c43b88f076b475a0a550bd",
          "body": null,
          "is_bot": true,
          "headline": "Initial plan",
          "author_name": "copilot-swe-agent[bot]",
          "author_login": "Copilot",
          "committed_at": "2026-04-15T18:00:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0ea4c967f25da6a801e260d9abe4638c22e24f8",
          "body": "Complete rename of all binaries, module path, config paths, env vars,\ndocumentation, workflows, plugin metadata, and asset files.\n\n- Binaries: ghc → ghx, ghcd → ghxd\n- Module: github.com/brunoborges/ghcd → github.com/brunoborges/ghx\n- Config dir: ~/.ghc/ → ~/.ghx/\n- Env vars: GHC_* → GHX_*\n- Artifacts: ghcd-*.tar.gz → ghx-*.tar.gz\n- Versioning restarted at 0.0.1\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Rebrand ghc/ghcd → ghx/ghxd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T17:54:27Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "0942f4dde61ef09725c881a89e6f3c50ca43141f",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add .github/copilot-instructions.md for Copilot sessions",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:19:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "13b8845b39f618066b6913a3d4bd5dd6fada0bc0",
          "body": "Add 12 new read-only commands to default allowlist:\n- gist list/view, project list/view, cache list\n- ruleset list/view/check, org list\n- search commits/code\n\nFix additional_cacheable to override neverCacheSubcommands,\nallowing users to cache commands like 'gh variable list' that\nare in the never-cache group by default.\n\nDocument custom commands in README, SPEC, and GitHub Pages site.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Expand cacheable allowlist and fix additional_cacheable priority",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:16:41Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "18cd64ff66157f532a770f61db85d0faa4510090",
          "body": "gh repo list was being classified as passthrough. Added it to the\nallowlist alongside repo view. Updated README and docs tables.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add 'repo list' to cacheable commands",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:10:22Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d7ef40260952836085624d8c4ac2ef5fd5704ff1",
          "body": "Display truncated cache key (first 12 chars) in each log entry,\nwith full key visible on hover via title attribute.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Show cache key in dashboard request log",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T16:08:33Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a47eff340974db7c33fe12cf5b0d6fe37443f2f2",
          "body": "…rsion\n\nThe /releases/latest endpoint returns plugin-v1.0.0 which has no\nGo binaries. Both install scripts now filter out plugin-v* tags\nto find the latest binary release.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix install scripts: skip plugin-v* releases when detecting latest ve…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:55:42Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "2252479f4afba3b2e3cab15e42e86c3ed5e91be0",
          "body": "Update all references in README, docs, plugin README, workflow,\nand marketplace repo.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Rename agents-plugin → agent-plugin",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:48:18Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "3bd7222a5139d02f34744c99a59ae98e50f0014c",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update marketplace references to brunoborges/agent-plugins",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:30:53Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "c69bbda768f7f9c4ec83a2301e4a177b2152128a",
          "body": "…ilot CLI\n\nBoth tools support the same /plugin marketplace add + /plugin install\ncommands, so use one unified set of instructions everywhere.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Simplify plugin install: use marketplace for both Claude Code and Cop…",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:25:50Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "d22804312b4b8ab9e9cf7e97a7de1d6b37db906d",
          "body": "- Created brunoborges/ghcd-plugins marketplace repo\n- Updated README, docs/index.html, and agents-plugin/README.md\n  with correct install commands for Claude Code and Copilot CLI\n- Claude Code: /plugin marketplace add + /plugin install ghcd@ghcd-plugins\n- Copilot CLI: copilot plugin install brunoborges/ghcd:agents-plugin\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Fix plugin install commands with marketplace support",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:21:44Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "048012f40e9dce564b6f373c9d855e92440219b3",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Remove preview screenshot artifacts",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:14:24Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "afae27b233ba8d59a181dfbac2c0f1a835ff2b0f",
          "body": "Cover the Claude Code / Copilot CLI plugin in both the README\n(new install subsection) and the docs/ landing page (new Plugin\nnav link and 3-step section with CTA buttons).\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add Agents Plugin section to README and GitHub Pages site",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:14:13Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "a782499c9ee8b44cae6f37ba7522c41e1a15b0cf",
          "body": "Add links to Claude Code and GitHub Copilot CLI plugin documentation.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Update agents-plugin README with plugin docs links",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:10:49Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "06a5240e893a26e0fba0b68d67c34a889423e0ef",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add agents-plugin bin wrappers (force-add past gitignore)",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:08:55Z",
          "body_truncated": false,
          "is_coding_agent": true
        },
        {
          "oid": "23c5cc140f85b9062b74001ee8f0193ee259211a",
          "body": "Introduces a Claude Code Plugin (also compatible with GitHub Copilot CLI)\nthat installs ghc/ghcd and teaches agents to use the caching proxy for\nall GitHub CLI calls.\n\nPlugin structure:\n- bin/ghc, bin/ghcd: PATH wrappers with lazy binary installation\n- skills/ghcd: skill that instructs agents to pre\n[…]\nform binary installer\n\nAlso adds .github/workflows/release-plugin.yml for independent plugin\nreleases triggered by plugin-v* tags.\n\nCo-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Add agents-plugin: Claude Code Plugin for ghcd",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:08:42Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "7211ceef5e788f8601109f8523d0d66aaf64ec6c",
          "body": "Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>",
          "is_bot": false,
          "headline": "Remove preview screenshot artifact",
          "author_name": "Bruno Borges",
          "author_login": "brunoborges",
          "committed_at": "2026-04-15T15:04:45Z",
          "body_truncated": false,
          "is_coding_agent": true
        }
      ],
      "releases_count": 13,
      "commits_last_year": 107,
      "latest_release_at": "2026-07-18T04:13:33Z",
      "latest_release_tag": "v1.5.4",
      "releases_from_tags": false,
      "days_since_last_push": 9,
      "active_weeks_last_year": 6,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 10.4
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 57,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/brunoborges/ghx",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": true,
          "registry_url": "https://pkg.go.dev/github.com/brunoborges/ghx",
          "is_deprecated": false,
          "latest_version": "v1.5.4",
          "repository_url": "https://github.com/brunoborges/ghx",
          "versions_count": 15,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-18T04:08:52Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 9
        }
      ]
    },
    "popularity": {
      "forks": 7,
      "stars": 94,
      "watchers": 0,
      "fork_history": {
        "days": [
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-05-05",
            "count": 3
          },
          {
            "date": "2026-05-27",
            "count": 1
          }
        ],
        "complete": true,
        "collected": 5,
        "total_forks": 7
      },
      "star_history": null,
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 12994,
      "source_files_sampled": 38,
      "oversized_source_files": 0,
      "agent_instruction_files": [
        ".github/copilot-instructions.md"
      ],
      "agent_instruction_max_bytes": 5091
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": "repository_graph",
        "source": "osv",
        "findings": [
          {
            "name": "golang.org/x/sys",
            "direct": false,
            "version": "v0.10.0",
            "severity": "unknown",
            "ecosystem": "go",
            "cvss_score": null,
            "advisory_ids": [
              "GO-2026-5024"
            ],
            "fixed_version": "0.44.0",
            "advisory_count": 1,
            "oldest_advisory_days": 65
          }
        ],
        "collected": true,
        "malicious": [],
        "truncated": false,
        "by_severity": {
          "unknown": 1
        },
        "advisory_count": 1,
        "affected_count": 1,
        "assessed_count": 3,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/Microsoft/go-winio",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.2"
        },
        {
          "name": "gopkg.in/yaml.v3",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v3.0.1"
        }
      ],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [
          {
            "name": "github.com/microsoft/go-winio",
            "direct": true,
            "version": "v0.6.2",
            "ecosystem": "go"
          },
          {
            "name": "gopkg.in/yaml.v3",
            "direct": true,
            "version": "v3.0.1",
            "ecosystem": "go"
          },
          {
            "name": "golang.org/x/sys",
            "direct": false,
            "version": "v0.10.0",
            "ecosystem": "go"
          }
        ],
        "collected": true,
        "truncated": false,
        "total_count": 3,
        "direct_count": 2,
        "indirect_count": 1
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 10,
        "open_issues": 0,
        "closed_ratio": 1,
        "closed_issues": 8,
        "closed_unmerged_prs": 1
      },
      "bus_factor": 1,
      "bot_contributors": 1,
      "top_contributors": [
        {
          "type": "User",
          "login": "brunoborges",
          "commits": 90,
          "avatar_url": "https://avatars.githubusercontent.com/u/129743?v=4"
        }
      ],
      "contributors_sampled": 1,
      "top_contributor_share": 1
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml",
        "release-plugin.yml",
        "release.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 9,
            "reason": "binaries present in source code",
            "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": 10,
            "reason": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
            "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/26 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 8 contributing companies or organizations",
            "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": 10,
            "reason": "update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 10,
            "reason": "SAST tool is run on all commits",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 4,
            "reason": "security policy file 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": "6584e26b9a98512d9b8f7bfa5c28846edc98c403",
        "ran_at": "2026-07-27T12:19:47Z",
        "aggregate_score": 5.3,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": true
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-27T11:29:07Z",
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-18T04:08:52Z",
      "ci_last_conclusion": "FAILURE",
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/brunoborges/ghx",
    "host": "github.com",
    "name": "ghx",
    "owner": "brunoborges"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "moderate",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 65,
      "inputs": {
        "security": 62,
        "vitality": 73,
        "community": 44,
        "governance": 64,
        "engineering": 77
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 73,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "moderate",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "commits_last_year": 107,
              "human_commit_share": 0.87,
              "days_since_last_push": 9,
              "active_weeks_last_year": 6
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 9 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "6/52 weeks with commits",
                "points": 4.2,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 6
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "107 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 107
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "releases_count": 13,
              "latest_release_tag": "v1.5.4",
              "releases_from_tags": false,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 10.4
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "13 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 13
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~10.4 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 10.4
                    }
                  }
                ],
                "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": "at_risk",
        "name": "Community & Adoption",
        "value": 44,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "at_risk",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 38,
            "inputs": {
              "forks": 7,
              "stars": 94,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "94 stars",
                "points": 31.9,
                "status": "partial",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 94
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "7 forks",
                "points": 6.5,
                "status": "partial",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 7
                    }
                  }
                ],
                "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": "moderate",
        "name": "Sustainability & Governance",
        "value": 64,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 20,
            "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 8 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 82,
            "inputs": {
              "merged_prs": 10,
              "open_issues": 0,
              "closed_issues": 8,
              "issue_closed_ratio": 1,
              "closed_unmerged_prs": 1
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "100% of issues closed",
                "points": 46.8,
                "status": "met",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 100
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "10/11 decided PRs merged",
                "points": 34.8,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 10,
                      "decided": 11
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/26 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "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": 71,
            "inputs": {
              "followers": 1082,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "brunoborges",
              "public_repos": 314,
              "account_age_days": 6152
            },
            "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": "1,082 followers of brunoborges",
                "points": 21.8,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 1082,
                      "login": "brunoborges"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "314 public repos, account ~16 yr old",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 314
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 16
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          },
          {
            "key": "package_maintenance",
            "band": "excellent",
            "name": "Package maintenance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "packages": [
                "github.com/brunoborges/ghx"
              ],
              "ecosystems": "go",
              "any_deprecated": false,
              "min_days_since_publish": 9
            },
            "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 9 days ago",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "publish_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 35
              },
              {
                "key": "version_history",
                "name": "Version history",
                "detail": "15 published versions",
                "points": 20,
                "status": "met",
                "details": [
                  {
                    "code": "published_versions",
                    "params": {
                      "count": 15
                    }
                  }
                ],
                "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": "good",
        "name": "Engineering Quality",
        "value": 77,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 68,
            "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": "3 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 3
                    }
                  }
                ],
                "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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 20,
                "status": "met",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "excellent",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 90,
            "inputs": {
              "topics": [
                "cli",
                "github"
              ],
              "has_wiki": false,
              "homepage": "https://brunoborges.github.io/ghx/",
              "has_readme": true,
              "has_docs_dir": true,
              "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": 25,
                "status": "met",
                "details": [],
                "max_points": 25
              },
              {
                "key": "documentation_homepage_site",
                "name": "Documentation / homepage site",
                "detail": "https://brunoborges.github.io/ghx/",
                "points": 15,
                "status": "met",
                "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": "2 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "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": "moderate",
        "name": "Security",
        "value": 62,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 53,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 17,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 1,
              "scorecard_aggregate": 5.3
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "binaries present in source code",
                "points": 6.8,
                "status": "partial",
                "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": "6 out of 6 merged PRs checked by a CI test -- score normalized to 10",
                "points": 2.5,
                "status": "met",
                "details": [],
                "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/26 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 8 contributing companies or organizations",
                "points": 2.5,
                "status": "met",
                "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": "update tool detected",
                "points": 7.5,
                "status": "met",
                "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": "9 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 10",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is run on all commits",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 2,
                "status": "partial",
                "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": "dependency_advisories",
            "band": "excellent",
            "name": "Dependency advisories",
            "note": "Excluded from scoring (no data or not applicable): Indirect dependencies free of known advisories, No advisories left outstanding. Remaining weights renormalized. Matched 3 resolved dependencies against OSV. This repository publishes no package the index resolves, so the repository dependency graph was assessed instead. That graph mixes development and test pins with shipped dependencies, so only the declared runtime dependencies are scored; transitive findings are reported as context and excluded from the score. Reachability is not analyzed.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "indirect_dependencies_free_of_known_advisories",
                    "no_advisories_left_outstanding"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              },
              {
                "code": "advisories_scope_repository",
                "params": {
                  "assessed": 3
                }
              },
              {
                "code": "advisories_repo_graph_caveat",
                "params": {}
              },
              {
                "code": "advisories_reachability",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "source": "osv",
              "advisories": 1,
              "affected_packages": 1,
              "assessed_packages": 3,
              "unassessed_packages": 0,
              "affected_by_severity": "unknown 1",
              "direct_affected_packages": 0
            },
            "components": [
              {
                "key": "direct_dependencies_free_of_known_advisories",
                "name": "Direct dependencies free of known advisories",
                "detail": "no direct dependency carries a known advisory",
                "points": 35,
                "status": "met",
                "details": [
                  {
                    "code": "no_direct_advisories",
                    "params": {}
                  }
                ],
                "max_points": 35
              },
              {
                "key": "indirect_dependencies_free_of_known_advisories",
                "name": "Indirect dependencies free of known advisories",
                "detail": "transitive set not separable from development and test dependencies in this scope",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_scope_not_separable",
                    "params": {}
                  }
                ],
                "max_points": 25
              },
              {
                "key": "no_advisories_left_outstanding",
                "name": "No advisories left outstanding",
                "detail": "no advisory carries a publication date",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "advisories_no_publication_date",
                    "params": {}
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "malicious_dependencies",
            "band": "excellent",
            "name": "Malicious dependencies",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "source": "osv",
              "meaning": "reported as a malicious package by the OpenSSF corpus; the remedy is removal or moving off the compromised name, never an upgrade of the same artifact. Versions the registry has since pulled are listed but not scored",
              "packages": [],
              "red_flag": false,
              "assessed_packages": 3,
              "malicious_packages": 0,
              "direct_malicious_packages": 0,
              "withdrawn_malicious_packages": 0,
              "installable_malicious_packages": 0
            },
            "components": [
              {
                "key": "no_dependency_reported_as_a_malicious_package",
                "name": "No dependency reported as a malicious package",
                "detail": "no dependency is reported as a malicious package",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "no_malicious_dependencies",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 6
            },
            "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": "good",
        "name": "AI Readiness",
        "value": 83,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "good",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 84,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.736,
              "agent_instruction_files": [
                ".github/copilot-instructions.md"
              ],
              "agent_instruction_max_bytes": 5091
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": ".github/copilot-instructions.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".github/copilot-instructions.md"
                    }
                  }
                ],
                "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": "64 of 87 human commits state their intent (structured subject or explanatory body)",
                "points": 39.2,
                "status": "partial",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 64,
                      "sampled": 87
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 76,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0.78,
              "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": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "78 of the last 100 commits agent-authored or agent-credited",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 78,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "dependency automation configured, none observed in the sampled commits",
                "points": 5,
                "status": "partial",
                "details": [
                  {
                    "code": "dependency_bot_config_only",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 12994,
              "source_files_sampled": 38,
              "oversized_source_files": 0
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "0/38 source files over 60KB",
                "points": 55,
                "status": "met",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 38,
                      "oversized": 0
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.13.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-27T12:19:56.187709Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/b/brunoborges/ghx.svg",
  "full_name": "brunoborges/ghx",
  "license_state": "standard",
  "license_spdx": "MIT"
}

评分是信号,而非担保。 评分反映的是 GitHub 上公开可见的实践——不是代码审计,也不是安全保证。

缺失数据将被剔除并重新归一化权重,绝不按零分计。方法论已版本化并公开:指标 v1.13.0、模式 v0.27.0—— 完整方法论 · 指标知识库.

单项结果在整体记录中的位置: 汇总统计Go.