公开记录
软件健康报告模式 0.27.0 · 指标 1.14.0 · 2026-07-29 04:08 UTC

hyprwm / Hyprland

Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.

C++BSD-3-Clause★ 37,616 星标⑂ 1,900 复刻始于 2022年3月在 GitHub 上查看 ↗

hyprwm/Hyprland 的健康指数为 100 分中的 77 分,处于「良好」区间。 其得分最高的类别是Vitality(96/100),最低的是Security(54/100)。 最近一次更新在今天。 近期的大部分工作由 1 位贡献者完成。

77
总分 / 100
良好

软件健康指数

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

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

评分画像

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

所有权

2,893 关注者41 个公开仓库始于 2022年6月

该仓库由组织支持——共同承担、可问责的托管责任,可延续于任何单一维护者之后。

按类别列示的指标

活力

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

96优秀 · 占总体的 22%
评分方式
36/36推送新近度 — 最近一次推送于 0 天前
36/36提交节奏 — 52 周中有 52 周有提交
18/18提交量 — 最近一年 1,341 次提交
10/10OpenSSF Scorecard:Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
所用输入
commits_last_year1,341
human_commit_share1
days_since_last_push0
active_weeks_last_year52

发布纪律

90优秀
评分方式
27/27有发布版本 — 已发布 100 个发布版本
36/36发布时效 — 最近一次发布版本于 1 天前
27/27发布节奏 — 约每 16.2 天发布一次
0/10OpenSSF Scorecard:Signed-Releases — Project has not signed or included provenance with any releases.
所用输入
releases_count100
latest_release_tagv0.56.1
releases_from_tags
days_since_latest_release1
mean_days_between_releases16.2

社区与采用

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

85优秀 · 占总体的 18%
评分方式
60/60星标 — 37,616 个星标
25/25复刻 — 1,900 个复刻
11.9/15关注者 — 138 位关注者
所用输入
forks1,900
stars37,616
watchers138
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history

社区健康

72良好
评分方式
22.5/22.5README
22.5/22.5许可证 — 可识别的许可证(BSD-3-Clause)
0/18CONTRIBUTING 指南
13.5/13.5行为准则
0/7.2议题模板
6.3/6.3PR 模板
所用输入
has_readme
has_license
has_contributing
has_issue_template
has_code_of_conduct
has_pull_request_template

可持续性与治理

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

65中等 · 占总体的 24%
评分方式
9/54巴士系数 — 1 位贡献者贡献了半数提交
7/22.5提交分布 — 头号贡献者编写了 69% 的提交
13.5/13.5贡献者广度 — 100 位贡献者
10/10OpenSSF Scorecard:Contributors — project has 39 contributing companies or organizations
所用输入
bus_factor1
contributors_sampled100
top_contributor_share0.691
评分方式
46.5/46.8议题解决 — 99% 的议题已关闭
32.4/38.3PR 接受 — 已裁定的 PR 中 2,854/3,371 已合并
6/15OpenSSF Scorecard:Code-Review — Found 13/30 approved changesets -- score normalized to 4
所用输入
merged_prs2,854
open_issues48
closed_issues7,637
issue_closed_ratio0.994
closed_unmerged_prs517
评分方式
30/30所有权背书 — 组织持有
0/20已验证域名
24.9/25所有者影响力 — hyprwm 有 2,893 位关注者
20/25既往记录 — 41 个公开仓库,账户约 4 年
所用输入
followers2,893
owner_typeOrganization
is_verified
owner_loginhyprwm
public_repos41
account_age_days1,499

工程质量

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

81良好 · 占总体的 20%

工程实践

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

文档

100优秀
评分方式
30/30README
25/25文档目录
15/15文档 / 主页站点 — https://hypr.land
10/10仓库描述
10/10主题标签 — 4 个主题标签
10/10Wiki
所用输入
topicswayland, wayland-compositor, compositor, cpp26
has_wiki
homepagehttps://hypr.land
has_readme
has_docs_dir
has_description

安全

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

54中等 · 占总体的 16%

安全态势

54中等
评分方式
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — 无数据
2.5/2.5CI-Tests — 20 out of 20 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
3/7.5Code-Review — Found 13/30 approved changesets -- score normalized to 4
2.5/2.5Contributors — project has 39 contributing companies or organizations
10/10Dangerous-Workflow — no dangerous workflow patterns detected
0/7.5Dependency-Update-Tool — no update tool detected
0/5Fuzzing — project is not fuzzed
2.5/2.5许可证 — license file detected
7.5/7.5Maintained — 30 commit(s) and 2 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
1.5/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
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
所用输入
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5.4
已排除计分(无数据或不适用):branch_protection, packaging。 其余权重已重新归一化。

AI 就绪度

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

71良好 · 占总体的 0%
评分方式
45/45代理指令 — AGENTS.md
0/15机器可读文档(llms.txt)
40/40可读的提交历史 — 100 次人类提交中有 91 次说明了意图(结构化标题或解释性正文)
所用输入
has_llms_txt
legible_history_share0.91
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes3,145
评分方式
18/18一条命令的引导启动 — Makefile, hyprtester/plugin/Makefile
22/22自动化测试
0/11Lint / 格式化配置
11/11静态类型检查 — C++(静态类型)
10/10可复现环境 — Nix
0/10已体现的代理实践 — 最近 100 次提交中没有代理编写的提交
0/8自动化维护 — 未观察到自动依赖更新
0/10OpenSSF Scorecard:Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
所用输入
has_nix
has_tests
lockfiles
has_dockerfile
typed_language
bootstrap_filesMakefile, hyprtester/plugin/Makefile
has_devcontainer
has_linter_config
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
评分方式
45/45可类型检查的代码 — C++(静态类型)
54.2/55可控的文件大小 — 采样的 887 个源文件中有 13 个超过 60KB
所用输入
primary_languageC++
largest_source_bytes194,708
source_files_sampled887
oversized_source_files13

机器可读接口

40存在风险
评分方式
0/40API 模式(OpenAPI/GraphQL/proto)
0/20MCP 服务器
40/40可运行示例 — example
所用输入
example_dirsexample
has_mcp_signal
api_schema_files

关键数据

37,616GitHub 星标
100贡献者
1,341最近 12 个月提交数
0距最近推送天数
100发布版本数
1巴士系数(bus factor)
48开放议题
软件包生态系统数

数据采集警告

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

更多细节

Star 与 Fork 历史 0 ★ / 1,900 ⇿
0Star
1,900Fork
25发布

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

仅显示最近的历史——该仓库超出采集窗口,因此未采集最早的历史记录。

5001,0001,5002,0001,900342025-022025-112026-07
主版本 0次版本 9修订 16

每个点涵盖 2 天。

OpenSSF Scorecard 5.4 / 10
5.4综合

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

10Binary-Artifactsno binaries found in the repo
不适用Branch-Protectioninternal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md
10CI-Tests20 out of 20 merged PRs checked by a CI test -- score normalized to 10
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
4Code-ReviewFound 13/30 approved changesets -- score normalized to 4
10Contributorsproject has 39 contributing companies or organizations
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
10Maintained30 commit(s) and 2 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
3Security-Policysecurity policy file detected
0Signed-ReleasesProject has not signed or included provenance with any releases.
0Token-Permissionsdetected GitHub workflow tokens with excessive permissions
10Vulnerabilities0 existing vulnerabilities detected
全部依赖 0

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

注册表软件包版本关系
依赖安全公告 未评估

本报告未能完成公告比对:No resolved dependencies to assess

原始 JSON 报告 机器可读
{
  "data": {
    "repo": {
      "topics": [
        "wayland",
        "wayland-compositor",
        "compositor",
        "cpp26"
      ],
      "is_fork": false,
      "size_kb": 80091,
      "has_wiki": true,
      "homepage": "https://hypr.land",
      "languages": {
        "C": 3214,
        "C++": 5689684,
        "Lua": 31083,
        "Nix": 32602,
        "GLSL": 57439,
        "CMake": 34034,
        "Shell": 54525,
        "Python": 30498,
        "Makefile": 4861
      },
      "pushed_at": "2026-07-28T19:56:46Z",
      "created_at": "2022-03-16T19:49:13Z",
      "owner_type": "Organization",
      "updated_at": "2026-07-29T03:25:30Z",
      "description": "Hyprland is an independent, highly customizable, dynamic tiling Wayland compositor that doesn't sacrifice on its looks.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "BSD-3-Clause",
      "default_branch": "main",
      "license_spdx_raw": "BSD-3-Clause",
      "primary_language": "C++",
      "significant_languages": [
        "C++"
      ]
    },
    "owner": {
      "blog": "https://hyprland.org",
      "name": "Hypr Development",
      "type": "Organization",
      "login": "hyprwm",
      "company": null,
      "location": null,
      "followers": 2893,
      "avatar_url": "https://avatars.githubusercontent.com/u/107882187?v=4",
      "created_at": "2022-06-20T18:00:15Z",
      "is_verified": null,
      "public_repos": 41,
      "account_age_days": 1499
    },
    "license": {
      "state": "standard",
      "spdx_id": "BSD-3-Clause",
      "raw_spdx": "BSD-3-Clause",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": true
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.56.1",
          "kind": "patch",
          "published_at": "2026-07-27T16:37:57Z"
        },
        {
          "tag": "v0.56.0",
          "kind": "minor",
          "published_at": "2026-07-20T08:36:24Z"
        },
        {
          "tag": "v0.55.4",
          "kind": "patch",
          "published_at": "2026-06-11T17:10:22Z"
        },
        {
          "tag": "v0.55.3",
          "kind": "patch",
          "published_at": "2026-06-07T10:36:23Z"
        },
        {
          "tag": "v0.55.2",
          "kind": "patch",
          "published_at": "2026-05-16T13:01:15Z"
        },
        {
          "tag": "v0.55.1",
          "kind": "patch",
          "published_at": "2026-05-13T22:56:04Z"
        },
        {
          "tag": "v0.55.0",
          "kind": "minor",
          "published_at": "2026-05-09T13:41:46Z"
        },
        {
          "tag": "v0.54.3",
          "kind": "patch",
          "published_at": "2026-03-27T18:19:26Z"
        },
        {
          "tag": "v0.54.2",
          "kind": "patch",
          "published_at": "2026-03-10T13:29:03Z"
        },
        {
          "tag": "v0.54.1",
          "kind": "patch",
          "published_at": "2026-03-03T21:07:25Z"
        },
        {
          "tag": "v0.54.0",
          "kind": "minor",
          "published_at": "2026-02-27T18:23:50Z"
        },
        {
          "tag": "v0.53.3",
          "kind": "patch",
          "published_at": "2026-01-24T20:04:27Z"
        },
        {
          "tag": "v0.53.2",
          "kind": "patch",
          "published_at": "2026-01-23T13:18:32Z"
        },
        {
          "tag": "v0.53.1",
          "kind": "patch",
          "published_at": "2026-01-02T21:24:12Z"
        },
        {
          "tag": "v0.53.0",
          "kind": "minor",
          "published_at": "2025-12-29T15:27:56Z"
        },
        {
          "tag": "v0.52.2",
          "kind": "patch",
          "published_at": "2025-12-03T23:01:50Z"
        },
        {
          "tag": "v0.52.1",
          "kind": "patch",
          "published_at": "2025-11-09T23:33:15Z"
        },
        {
          "tag": "v0.52.0",
          "kind": "minor",
          "published_at": "2025-11-07T16:48:29Z"
        },
        {
          "tag": "v0.51.1",
          "kind": "patch",
          "published_at": "2025-09-22T20:55:57Z"
        },
        {
          "tag": "v0.51.0",
          "kind": "minor",
          "published_at": "2025-09-10T12:53:30Z"
        },
        {
          "tag": "v0.50.1",
          "kind": "patch",
          "published_at": "2025-07-19T21:37:10Z"
        },
        {
          "tag": "v0.50.0",
          "kind": "minor",
          "published_at": "2025-07-16T09:34:22Z"
        },
        {
          "tag": "v0.49.0",
          "kind": "minor",
          "published_at": "2025-05-08T20:28:38Z"
        },
        {
          "tag": "v0.48.1",
          "kind": "patch",
          "published_at": "2025-03-28T16:19:37Z"
        },
        {
          "tag": "v0.48.0",
          "kind": "minor",
          "published_at": "2025-03-23T15:40:22Z"
        },
        {
          "tag": "v0.47.2",
          "kind": "patch",
          "published_at": "2025-02-02T00:51:21Z"
        },
        {
          "tag": "v0.47.1",
          "kind": "patch",
          "published_at": "2025-01-29T23:23:29Z"
        },
        {
          "tag": "v0.47.0",
          "kind": "minor",
          "published_at": "2025-01-27T12:11:02Z"
        },
        {
          "tag": "v0.46.2",
          "kind": "patch",
          "published_at": "2024-12-19T19:43:12Z"
        },
        {
          "tag": "v0.46.1",
          "kind": "patch",
          "published_at": "2024-12-17T16:33:05Z"
        },
        {
          "tag": "v0.46.0",
          "kind": "minor",
          "published_at": "2024-12-16T23:59:57Z"
        },
        {
          "tag": "v0.45.2",
          "kind": "patch",
          "published_at": "2024-11-19T22:00:59Z"
        },
        {
          "tag": "v0.45.1",
          "kind": "patch",
          "published_at": "2024-11-18T14:39:51Z"
        },
        {
          "tag": "v0.45.0",
          "kind": "minor",
          "published_at": "2024-11-09T14:55:53Z"
        },
        {
          "tag": "v0.44.1",
          "kind": "patch",
          "published_at": "2024-10-09T13:03:04Z"
        },
        {
          "tag": "v0.44.0",
          "kind": "minor",
          "published_at": "2024-10-06T11:22:36Z"
        },
        {
          "tag": "v0.43.0",
          "kind": "minor",
          "published_at": "2024-09-08T17:00:46Z"
        },
        {
          "tag": "v0.42.0",
          "kind": "minor",
          "published_at": "2024-08-07T19:36:05Z"
        },
        {
          "tag": "v0.41.2",
          "kind": "patch",
          "published_at": "2024-06-25T12:16:09Z"
        },
        {
          "tag": "v0.41.1",
          "kind": "patch",
          "published_at": "2024-06-13T10:03:59Z"
        },
        {
          "tag": "v0.41.0",
          "kind": "minor",
          "published_at": "2024-06-10T14:33:46Z"
        },
        {
          "tag": "v0.40.0",
          "kind": "minor",
          "published_at": "2024-05-04T15:56:31Z"
        },
        {
          "tag": "v0.39.1",
          "kind": "patch",
          "published_at": "2024-04-16T16:07:52Z"
        },
        {
          "tag": "v0.39.0",
          "kind": "minor",
          "published_at": "2024-04-14T18:57:34Z"
        },
        {
          "tag": "v0.38.1",
          "kind": "patch",
          "published_at": "2024-04-06T14:31:47Z"
        },
        {
          "tag": "v0.38.0",
          "kind": "minor",
          "published_at": "2024-04-01T18:41:14Z"
        },
        {
          "tag": "v0.37.1",
          "kind": "patch",
          "published_at": "2024-03-16T14:57:33Z"
        },
        {
          "tag": "v0.37.0",
          "kind": "minor",
          "published_at": "2024-03-16T00:13:23Z"
        },
        {
          "tag": "v0.36.0",
          "kind": "minor",
          "published_at": "2024-02-28T00:45:11Z"
        },
        {
          "tag": "v0.35.0",
          "kind": "minor",
          "published_at": "2024-02-05T02:12:15Z"
        },
        {
          "tag": "v0.34.0",
          "kind": "minor",
          "published_at": "2024-01-01T12:13:27Z"
        },
        {
          "tag": "v0.33.1",
          "kind": "patch",
          "published_at": "2023-12-06T16:53:09Z"
        },
        {
          "tag": "v0.33.0",
          "kind": "minor",
          "published_at": "2023-12-05T00:58:39Z"
        },
        {
          "tag": "v0.32.3",
          "kind": "patch",
          "published_at": "2023-11-11T18:17:25Z"
        },
        {
          "tag": "v0.32.2",
          "kind": "patch",
          "published_at": "2023-11-11T17:27:57Z"
        },
        {
          "tag": "v0.32.1",
          "kind": "patch",
          "published_at": "2023-11-11T15:33:42Z"
        },
        {
          "tag": "v0.32.0",
          "kind": "minor",
          "published_at": "2023-11-07T21:16:10Z"
        },
        {
          "tag": "v0.31.0",
          "kind": "minor",
          "published_at": "2023-10-16T16:31:53Z"
        },
        {
          "tag": "v0.30.0",
          "kind": "minor",
          "published_at": "2023-09-22T23:17:57Z"
        },
        {
          "tag": "v0.29.1",
          "kind": "patch",
          "published_at": "2023-09-03T11:42:17Z"
        },
        {
          "tag": "v0.29.0",
          "kind": "minor",
          "published_at": "2023-08-28T21:42:18Z"
        },
        {
          "tag": "v0.28.0",
          "kind": "minor",
          "published_at": "2023-08-03T16:08:24Z"
        },
        {
          "tag": "v0.27.2",
          "kind": "patch",
          "published_at": "2023-07-19T11:42:22Z"
        },
        {
          "tag": "v0.27.1",
          "kind": "patch",
          "published_at": "2023-07-18T19:52:06Z"
        },
        {
          "tag": "v0.27.0",
          "kind": "minor",
          "published_at": "2023-07-12T11:30:21Z"
        },
        {
          "tag": "v0.26.0",
          "kind": "minor",
          "published_at": "2023-05-29T17:28:20Z"
        },
        {
          "tag": "v0.25.0",
          "kind": "minor",
          "published_at": "2023-05-03T16:28:20Z"
        },
        {
          "tag": "v0.24.1",
          "kind": "patch",
          "published_at": "2023-04-09T17:11:13Z"
        },
        {
          "tag": "v0.24.0",
          "kind": "minor",
          "published_at": "2023-04-08T12:20:54Z"
        },
        {
          "tag": "v0.23.0beta",
          "kind": "other",
          "published_at": "2023-03-14T22:12:58Z"
        },
        {
          "tag": "v0.22.0beta",
          "kind": "other",
          "published_at": "2023-02-20T23:25:20Z"
        },
        {
          "tag": "v0.21.0beta",
          "kind": "other",
          "published_at": "2023-01-28T18:38:53Z"
        },
        {
          "tag": "v0.20.1beta",
          "kind": "other",
          "published_at": "2023-01-07T12:55:41Z"
        },
        {
          "tag": "v0.20.0beta",
          "kind": "other",
          "published_at": "2023-01-05T22:36:01Z"
        },
        {
          "tag": "v0.19.2beta",
          "kind": "other",
          "published_at": "2022-12-12T15:05:06Z"
        },
        {
          "tag": "v0.19.1beta",
          "kind": "other",
          "published_at": "2022-12-07T19:39:29Z"
        },
        {
          "tag": "v0.19.0beta",
          "kind": "other",
          "published_at": "2022-12-06T13:22:20Z"
        },
        {
          "tag": "v0.18.0beta",
          "kind": "other",
          "published_at": "2022-11-16T17:45:32Z"
        },
        {
          "tag": "v0.17.0beta",
          "kind": "other",
          "published_at": "2022-10-30T12:40:46Z"
        },
        {
          "tag": "v0.16.0beta",
          "kind": "other",
          "published_at": "2022-10-17T16:26:13Z"
        },
        {
          "tag": "v0.15.3beta",
          "kind": "other",
          "published_at": "2022-10-11T09:57:07Z"
        },
        {
          "tag": "v0.15.2beta",
          "kind": "other",
          "published_at": "2022-10-09T21:41:08Z"
        },
        {
          "tag": "v0.15.1beta",
          "kind": "other",
          "published_at": "2022-10-06T21:19:33Z"
        },
        {
          "tag": "v0.15.0beta",
          "kind": "other",
          "published_at": "2022-10-03T21:49:56Z"
        },
        {
          "tag": "v0.14.0beta",
          "kind": "other",
          "published_at": "2022-09-21T17:28:12Z"
        },
        {
          "tag": "v0.13.1beta",
          "kind": "other",
          "published_at": "2022-09-09T13:40:46Z"
        },
        {
          "tag": "v0.13.0beta",
          "kind": "other",
          "published_at": "2022-09-07T17:11:20Z"
        },
        {
          "tag": "v0.12.1beta",
          "kind": "other",
          "published_at": "2022-08-30T19:12:58Z"
        },
        {
          "tag": "v0.12.0beta",
          "kind": "other",
          "published_at": "2022-08-29T10:05:40Z"
        },
        {
          "tag": "v0.11.1beta",
          "kind": "other",
          "published_at": "2022-08-23T21:24:59Z"
        },
        {
          "tag": "v0.11.0beta",
          "kind": "other",
          "published_at": "2022-08-22T08:08:09Z"
        },
        {
          "tag": "v0.10.3beta",
          "kind": "other",
          "published_at": "2022-08-20T18:12:49Z"
        },
        {
          "tag": "v0.10.2beta",
          "kind": "other",
          "published_at": "2022-08-17T13:15:09Z"
        },
        {
          "tag": "v0.10.1beta",
          "kind": "other",
          "published_at": "2022-08-11T21:01:16Z"
        },
        {
          "tag": "v0.10.0beta",
          "kind": "other",
          "published_at": "2022-08-08T19:35:39Z"
        },
        {
          "tag": "v0.9.1beta",
          "kind": "other",
          "published_at": "2022-08-02T20:28:22Z"
        },
        {
          "tag": "v0.9.0beta",
          "kind": "other",
          "published_at": "2022-07-31T22:55:41Z"
        },
        {
          "tag": "v0.8.1beta",
          "kind": "other",
          "published_at": "2022-07-26T20:55:33Z"
        },
        {
          "tag": "v0.8.0beta",
          "kind": "other",
          "published_at": "2022-07-26T08:16:21Z"
        },
        {
          "tag": "v0.7.1beta",
          "kind": "other",
          "published_at": "2022-07-12T20:21:28Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "924a35735ebadd67c8a078042060fe7e6ba7e060",
          "body": null,
          "is_bot": false,
          "headline": "ci/vouch: update",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-28T19:56:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff24e1755fd308ee70367d63168a12feb05d1fc2",
          "body": "clean up the code, separate impl, etc",
          "is_bot": false,
          "headline": "ipc: refactor socket1 and socket2 (#15624)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-28T11:12:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b4d0b9dc1d6e6edeaf3fb50ca70f73844f2d861",
          "body": null,
          "is_bot": false,
          "headline": "ci/vouch: check out files first",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-28T10:08:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5f71b249753ffdf54027a0760930b9f3dfe50a0",
          "body": null,
          "is_bot": false,
          "headline": "ci/vouch: fix template file",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-27T23:09:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6d9b634de2e75a166b46e0c30c23062f0d8d7070",
          "body": "we now have vouch",
          "is_bot": false,
          "headline": "ci: remove new pr comment",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-27T23:00:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e7d685d1e7a7ffd4bcae888b785db948d01cfb8a",
          "body": null,
          "is_bot": false,
          "headline": "github: improve templates",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-27T16:04:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fdd49ae16e205fb5e5178ade21f7cd4c9af06ef2",
          "body": null,
          "is_bot": false,
          "headline": "github: update PR template",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-27T14:07:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "65e81c116ad92e14c574656c916cef761e4035e5",
          "body": null,
          "is_bot": false,
          "headline": "config/lua: do not nuke package.path (#15622)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-27T13:34:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9f777b130e556602ca796fd6b810ac6abe0588e8",
          "body": "* re-add groupbar positional dragging\nmodified:   src/render/decorations/CHyprGroupBarDecoration.cpp\n\n* format\nmodified:   src/render/decorations/CHyprGroupBarDecoration.cpp",
          "is_bot": false,
          "headline": "groupbar: re-add groupbar positional dragging (#15615)",
          "author_name": "MightyPlaza",
          "author_login": "MightyPlaza",
          "committed_at": "2026-07-27T13:26:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dd9038373cb6d9dfbebf7da0e9fbf2b8c7fd06b4",
          "body": "* opengl: use two VAO's for custom UV\n\ninstead of overwriting the same VAO only to reset it later and\nglBufferData orphaningm etc. just have two VAO's one static, one for\ncustomUV's.\n\n* renderer: dont only rely max rects to get extents\n\ngetting extents for over 8 rects is fine when its local and small, but\nscattered across the monitor it means full size damage for a few\ndifferent tiled windows. so keep rects unless extents are at most 2\ntimes their area.",
          "is_bot": false,
          "headline": "opengl: get rid of VAO stalls once and for all. (#15603)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-27T11:26:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3de8c49b80d82ce47fda2cd1708ae2d8484adaa7",
          "body": null,
          "is_bot": false,
          "headline": "protocols/pointerwarp: send mouse frame event after motion (#15599)",
          "author_name": "Awused",
          "author_login": "awused",
          "committed_at": "2026-07-27T11:24:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d91db3c707d5a56bdbb01d2eb20aa4228ed87dd4",
          "body": null,
          "is_bot": false,
          "headline": "meta: add generator and update bug templates",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-27T11:22:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6484f437429fb68542095d1dd980f3e9a7c5c6e1",
          "body": "* compositor: merge ready states in the surface queue\n\neach waiter was previously added to wl_event_loop. but the\nwl_event_loop has no order guarantee, so it could mean fence\nA, B, C sits in the queue ready but processes B first then C, then A,\nand now we commit A -> B -> C, change waiters to return\n[…]\nes this. so any client abusing this has only itself to blame.\n\nwhen the content update containing \"set_barrier\" was made active at a latching deadline,\nit will be active for at least one refresh cycle",
          "is_bot": false,
          "headline": "compositor: merge ready states in the surface queue (#15504)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-27T11:16:56Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "94fe1706eb2e253a7dc4ccfc771cb707178326a8",
          "body": "* renderer: ensure only one buffer reference is added\n\nnot only does snapshots, hit endRender and add the buffer to\nm_usedAsyncBuffers but the first real frame does it too, we might have duplicate\nbuffers added pointing to the same IHLBuffer and fences merging with themself.\nso use a std::pair insid\n[…]\nurfaces that has expired. when\nadding fences.\n\n* renderer: move m_usedAsyncBuffers to CMonitor\n\nif showing on two or more monitors, they get a surfacepass per monitor.\nand both needs to add its fence.",
          "is_bot": false,
          "headline": "renderer: ensure only one buffer reference is added (#15584)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-27T11:15:44Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8fd90780e8788b227efc710a146b6eef80763c04",
          "body": null,
          "is_bot": false,
          "headline": "ci/vouch: init vouch ci",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-27T11:09:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d8dc50309c551cfa44fee70744397311b8b7c5fc",
          "body": null,
          "is_bot": false,
          "headline": "github: materialize symlinks",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-26T16:02:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6e4484f924b4be40af1098ed92807954c2b3d2c1",
          "body": null,
          "is_bot": false,
          "headline": "github: add discussion templates",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-26T15:58:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7b8454d21efae4190ec3ae7d547d5088a887cc4d",
          "body": "* lua: support workspace selectors in `hl.get_workspace()`\n\n* tests: lua `hl.get_workspace()` with selectors\n\n* lua: don't change focus in `hl.get_workspace()`\n\nThat results in an expired workspace being returned, when it should just\nbe `nil` for nonexistent spaces.",
          "is_bot": false,
          "headline": "config/lua: support workspace selectors in `hl.get_workspace()` (#15555)",
          "author_name": "Lucas Ritzdorf",
          "author_login": "LRitzdorf",
          "committed_at": "2026-07-26T14:17:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f7a711625ea553fe503f41ea8b65c0c6f468ef50",
          "body": "* compositor: fix wl_surface.attach proto violations\n\nWhen the bound wl_surface version is 5 or higher, passing any\nnon-zero x or y is a protocol violation, and will result in an\n'invalid_offset' error being raised. The x and y arguments are ignored\nand do not change the pending state. To achieve eq\n[…]\neat: fix protocol violations\n\nuse enum instead of bogus -1, axis_discreete states\n\nThis event is deprecated with wl_pointer version 8 - this event is not\nsent to clients supporting version 8 or later.",
          "is_bot": false,
          "headline": "protocols: a few protocol error touchups (#15474)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-26T14:07:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "453d96e92739a2a0b865cf9166d48ba14ec14b7b",
          "body": "m_scale is float, and with fractional scaling and float precision we end\nup with things like 1600 * 1.8f = 2879.99992 , we need to round to not\nloose 1 pixel.",
          "is_bot": false,
          "headline": "renderer: round m_scale calculations (#15594)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-25T11:53:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "225e018cea9d437e4ada8daaf144cca8f239557c",
          "body": null,
          "is_bot": false,
          "headline": "CI: fix codeownersplus status comment spam (#15597)",
          "author_name": "Nikolai Nechaev",
          "author_login": "kolayne",
          "committed_at": "2026-07-25T11:17:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "566ff8fa7208f7027cbc21b0b208d121ee80eb38",
          "body": "* monitor: fix transform logical pixels\n\nseems to have vanished in old refactor, without setting m_size the\nlogical pixels are wrong if you start in non rotation, change config and\napply rotation. m_size still refers to no transformed position.\n\n* monitor: fix added unavailable mirror workspace\n\napplyMonitorRule moved away workspaces and m_activeWorkspace before this with setMirror(),\n but onConnect then reassigned one. if guard it.",
          "is_bot": false,
          "headline": "monitor: fix rotate and mirror regression (#15587)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-24T12:51:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e820db90cf9a87db53690fd92ec328c2bd2f486d",
          "body": "* desktop/rule: add no_xdg_drags window rule\n\n* peenor\n\n* peenor\n\n* pis",
          "is_bot": false,
          "headline": "desktop/rule: add no_xdg_drags window rule (#15573)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-24T09:59:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "62d890eaccc3fcbdc00f85fe27d611d0a8681e7a",
          "body": "ref #15527",
          "is_bot": false,
          "headline": "workspace: add changeworkspaceid to socket2 (#15571)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-23T19:20:13Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e701768d5d3a08907e8087222aeec89d8f83b889",
          "body": "…(#15570)\n\nref #15526",
          "is_bot": false,
          "headline": "protocols/outputMgmt: fix reload not being fired after no-op commits …",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-23T19:20:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d2ea270704c265dd100a7898e6186e49c6741a7",
          "body": "ref #15488",
          "is_bot": false,
          "headline": "desktop/windowRule: fix exec rules leaking (#15543)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-22T16:35:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a9902ea65f461af868497c4e74fed798ade0b1b0",
          "body": null,
          "is_bot": false,
          "headline": "config: remove legacy config support (#15539)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-22T16:35:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4588b2958e0dcd6199aa258b19de9dc944f5947e",
          "body": "otherwise various other things might override what the user wants to do",
          "is_bot": false,
          "headline": "config/lua: use openLate for window.open events (#15540)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-22T13:09:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36cc0e3765361c228d1896832841baa357539b8e",
          "body": "The edgeBottom branch read delta.y instead of the axis-swapped\nmodDelta.y, so horizontal resizeactive deltas were ignored for the\nfirst window of a shared band on vertical scrollers.",
          "is_bot": false,
          "headline": "scrolling: fix in-band resize for the first window of a band (#15532)",
          "author_name": "j_wise",
          "author_login": "jwiseuk",
          "committed_at": "2026-07-22T12:33:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4605ba7f1b58f2ddf4f031f01814b8e39057d8e",
          "body": "yes\n\n---------\n\nCo-authored-by: Vaxry <vaxry@vaxry.net>",
          "is_bot": false,
          "headline": "example: update hyprland.lua default springs (#15499)",
          "author_name": "Mint",
          "author_login": "cebem1nt",
          "committed_at": "2026-07-22T12:06:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "eb21dae6fbd521c118fd293fca1ff04c46d888f3",
          "body": null,
          "is_bot": false,
          "headline": "makefile: smol Makefile QoL patches (#15491)",
          "author_name": "Lucas Ritzdorf",
          "author_login": "LRitzdorf",
          "committed_at": "2026-07-22T11:54:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ca90dfb0e736d187603d55c234ae34fa8834accf",
          "body": null,
          "is_bot": false,
          "headline": "compositor: add a deprecation notice to .conf configs (#15538)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-22T11:29:15Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a3606234c59842340ad9a42baeeffe44a9d6cda",
          "body": "fixes #15521 and adds a tiny test",
          "is_bot": false,
          "headline": "compositor: init eventManager earlier (#15522)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-21T13:52:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7188d5821cdf26144f3729ed7cdfe106f437aa7",
          "body": "nullptr check eis_client_get_name or return \"<unnamed\"",
          "is_bot": false,
          "headline": "input: nullptr check eis_client_get_name (#15520)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-21T09:56:03Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d3bc3b0ce0dbec643e0ad91f82ed804ddc8cc5c",
          "body": "* don't queue unrequested presentation feedbacks\n\n* don't fifo lock unrendered surfaces\n\n* render:not_shown_fifo_lock\n\n* cleaner unneeded feedvacl skip\n\n* keep fifo locks by default\n\n* fix visibility check",
          "is_bot": false,
          "headline": "fifo: minor feedback fixes (#14765)",
          "author_name": "UjinT34",
          "author_login": "UjinT34",
          "committed_at": "2026-07-21T09:55:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7ef766c9c6613a793587fc7f7d2e7a371babafc6",
          "body": "Crashes at startup with hyprutils < 0.14.0.\nRef: https://codeberg.org/hyproverlay/hyproverlay/issues/104",
          "is_bot": false,
          "headline": "build: update hyprutils dependency to 0.14.0 (#15518)",
          "author_name": "Anthony Ruhier",
          "author_login": "aruhier",
          "committed_at": "2026-07-21T09:54:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "14c093991618da0d12c7ea754c7487837142d684",
          "body": "…fiers` enabled (#15477)",
          "is_bot": false,
          "headline": "input-capture: fix `allow_input_capture` bind flag with `capture_modi…",
          "author_name": "littleblack111",
          "author_login": "littleblack111",
          "committed_at": "2026-07-21T08:42:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d39afc0a56fd4015d0e881f7a28130dcb9761b11",
          "body": null,
          "is_bot": false,
          "headline": "hyprctl: fix json output for binds (#15507)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-21T08:37:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2174f26a142d32823ceb8d7039e39eef52dbd050",
          "body": null,
          "is_bot": false,
          "headline": "view: do not render monitor for tearing if it's blocked (#15500)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-20T19:04:25Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5b260faeb9e4563b9e6bd74450a97f39a9d708e9",
          "body": "* Revert \"init: revert \"gain real-time through rtkit (#15411)\"\"\n\nThis reverts commit ad317198d90ec1060ec11402695152e5c71a3546.\n\n* init: gain realtime before we enter the loop",
          "is_bot": false,
          "headline": "init: gain real-time through rtkit (again) (#15465)",
          "author_name": "André Silva",
          "author_login": "andresilva",
          "committed_at": "2026-07-20T10:49:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "36b2e0cfe0c6094dbc47bd42a437431315bb3087",
          "body": null,
          "is_bot": false,
          "headline": "version: bump to 0.56.0",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-20T07:50:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42b15274bcde7d9add76dfc70b0bb70c7a870305",
          "body": "…#15486)",
          "is_bot": false,
          "headline": "ci(codeowners-plus): fetch PR head before trying to diff against it (…",
          "author_name": "Lucas Ritzdorf",
          "author_login": "LRitzdorf",
          "committed_at": "2026-07-19T20:35:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "271b0d1eb4fc4899c8607c5e9d4eacbfb0282a62",
          "body": null,
          "is_bot": false,
          "headline": "desktop/focusstate: restore keyboard focus after layer closed (#15419)",
          "author_name": "myamusashi",
          "author_login": "myamusashi",
          "committed_at": "2026-07-19T12:14:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0a5aa45bc151bff51a61a051ba72ea3743a26b0e",
          "body": "…estruction (#15471)\n\n* windowstate/layerstate: don't dynamic_cast a view's self-ptr during destruction\n\nThe view.destroy listeners erase_if'd their containers by evaluating\ndynamicPointerCast<IView>(x->m_self). Since the event is emitted from\n~IView, the matching view's derived member m_self is alr\n[…]\ndereferences the dying object.\n\n* iview: remove pointless destroy listener\n\nCWindow/Layers calls removeSafe in their own onDestroy,\nthe best way to avoid buggy code is by simply not doing it at all :)",
          "is_bot": false,
          "headline": "windowstate/layerstate: don't dynamic_cast a view's self-ptr during d…",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-19T10:56:43Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "abc2ecf1d4006e8e33216a0234e1ca2c771edc62",
          "body": "earlier codex complaint, if empty fifo commit happend but contained\nfeedbacks it was silently dropped. also at the same time the only time\nwe should discard current feedbacks if there are any is when a new\nbuffer appears.\n\nadd a presentation bit flag, set it in onGetFeedback.",
          "is_bot": false,
          "headline": "presentation: ensure feedbacks arent silently dropped (#15473)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-19T09:59:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef903b892747f17dc2a8768675a15134f4ebd95f",
          "body": null,
          "is_bot": false,
          "headline": "[gha] Nix: update inputs",
          "author_name": "vaxerski",
          "author_login": "vaxerski",
          "committed_at": "2026-07-19T08:22:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c3e2d14db44f22e6ce6ad0b2725727bf38487fc5",
          "body": null,
          "is_bot": false,
          "headline": "input-capture: permission type not in lua config (#15481)",
          "author_name": "littleblack111",
          "author_login": "littleblack111",
          "committed_at": "2026-07-19T08:20:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "55ce25bd67ab6f2ae7d60883f6c626be7d2ee12f",
          "body": "animationManager.hpp does makeUnique<CAnimatedVariable<VarType>>() , so\nthis has never worked.",
          "is_bot": false,
          "headline": "animation: dont .lock() a uniqueptr (#15470)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-18T07:24:42Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "466f6bc53f44c42fd7d8f8c01eeaec112112aefd",
          "body": "…te, attempt 2 (#15459)\n\n* Revert \"presentation: revert \"associate feedback with committed surface state (#15243)\"\"\n\nThis reverts commit 4a753eaa03b1fad1b0fccfa78d3756efe85673ef.\n\n* presentation: fix WP locks and discard failed draws\n\nthe reason it stopped working is last change that PR\ndid was movi\n[…]\no .lock() the\nWP, we cant lock a WP that points to a UP.\n\nalso ensure all draws that isnt visible or simply failed creating\ntexture or invalid sizes discard in elementrenderer. and all others\npresent.",
          "is_bot": false,
          "headline": "protocols/presentation: associate feedback with committed surface sta…",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-17T21:54:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "116e636fc06479f8b344b1fa8d22d5f70e86d1d5",
          "body": "* frame: fix frame scheduling being skipped or one vblank off\n\nin renderer we need to check if we have pending damage, needsFrame can\nbe cleared by commits that was done while pageflip was in flight.\n\nm_renderingActive also needs to be set after actually comitting.\n\nadd a commitTimingTarget that we \n[…]\n \"C++ steady-clock epoch does not exactly match\nCLOCK_MONOTONIC\" doesnt occur. unify the timespec code in both\nmonitor and commit timing protocol. always send the timespec on monitor\npresented signal.",
          "is_bot": false,
          "headline": "frame: fix frame scheduling being skipped or one vblank off (#15404)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-17T21:53:09Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "26c0b380f4292985ed9811fa20fd6262c89c5100",
          "body": "* pointer-warp: fix forgetting enter serial\n\n* fix 4am code",
          "is_bot": false,
          "headline": "pointer-warp: fix forgetting enter serial (#15462)",
          "author_name": "Dregu",
          "author_login": "Dregu",
          "committed_at": "2026-07-17T21:52:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4afc273db287ad4069cc8ab3edff4a09c31d3410",
          "body": "* tokens: expire one shot initial workspace tokens\n\ntokens are only removed once a window maps, so things like\nxdg-desktop-portal got the 1337 month duration token added and always\nfirst launch in the wrong workspace. check PINITIALWSTRACKING and if\nmode 1 just give them a 1 second token. like other\n[…]\nthe default timeout for the initial workspace tracking token.\n\n* tokens: rename timeout to actually timeout\n\nurgl, to much going on at the same time. TIMEOUT certainly makes more\nsense for an timeout.",
          "is_bot": false,
          "headline": "internal: fix tokens for xdg-desktop-portals (#15433)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-17T15:54:36Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ad317198d90ec1060ec11402695152e5c71a3546",
          "body": "This reverts commit 83cd85b3d57c9da1bcec80a46b7eec3514a344a9.",
          "is_bot": false,
          "headline": "init: revert \"gain real-time through rtkit (#15411)\"",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-17T14:41:07Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3f6055bdbf2b84590d687d388e37b779e2901cd3",
          "body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "xwayland: preserve title fallback state (#15449)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-17T12:30:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "de530935a05a1c2a8da6408980a9a8644355396d",
          "body": null,
          "is_bot": false,
          "headline": "hyprpm: continue after repository update failures (#15391)",
          "author_name": "lin",
          "author_login": "gfhdhytghd",
          "committed_at": "2026-07-17T12:28:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "46f64d36b8e93f1c24433529998dbae61c4dcdcf",
          "body": "* Expose tearingHint in hyprctl clients\n\n* Add tearing_hint field to HL.Window",
          "is_bot": false,
          "headline": "ipc/lua: rxpose tearingHint for windows (#15431)",
          "author_name": "Ciren",
          "author_login": "SergeyKasmy",
          "committed_at": "2026-07-17T12:28:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "44d16e9bd1272fc271100a35d9165fd51452a26f",
          "body": null,
          "is_bot": false,
          "headline": "config/lua: allow wildcards or absolute paths in require (#15461)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-17T12:27:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "164aed999dc1d922f33baa9e2407e79a0dc5a22c",
          "body": "* desktoå/view: fix IView virtual inheritance and erase_if ptr\n\nCSubsurface and CSessionLock inherited IView non-virtually while\nCWindow/CLayerSurface/CPopup inherited it virtually.\n\nerase_if compared event.address with the derived complete object\npointer. under virtual inheritance those addresses d\n[…]\np/view: use dynamic casting over static casting\n\nchange to dynamic casting instead of static casting.\n\n* better\n\n* more better\n\nmore better is more.\n\n---------\n\nCo-authored-by: Vaxry <vaxry@vaxry.net>",
          "is_bot": false,
          "headline": "desktop/view: fix IView virtual inheritance and erase_if ptr (#15421)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-17T12:27:15Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "229bca7b1a0238cd44eb827ae9a23d6798d37ef9",
          "body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "build: link Glaze to the compositor core (#15454)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-17T09:42:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5663e6d12923f4c0af3bca17a5e45de449bc0c79",
          "body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "xwayland: validate ICCCM hint replies (#15450)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-17T08:24:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d3e1411d9461ecee39b23f263ae376ed7ae9d94d",
          "body": "* screenshare: don recopy a dmabuf while fence is pending\n\ncopy is called for every pending frame on the output commit. and output\ncommit fires on any output commit not just buffer ones. so the fence can\neasily be not signaled yet.\n\n* screenshare: erase done frames too\n\nerase done frames from m_pendingFrames to avoid growing to huge\nnumbers. a finished frame copied/failed/session gone is skipped by the\ncopy but was only erased once it expired. a slow client could let the\nvector grow.",
          "is_bot": false,
          "headline": "screenshare: minor fence and copy fixes (#15429)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-17T08:22:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4a753eaa03b1fad1b0fccfa78d3756efe85673ef",
          "body": "… (#15243)\"\n\nThis reverts commit 0cf705600f450bd8c890ff4a8c856829e1e44a39.",
          "is_bot": false,
          "headline": "presentation: revert \"associate feedback with committed surface state…",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-17T08:20:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9d1813ad2941f468ccaeabaa4110107f517b2ba0",
          "body": "This reverts commit 031579e722ef23f61541b6c6e3d7b6f479940eea.",
          "is_bot": false,
          "headline": "dmabuf: revert \"ensure both create and create_immed verify v4 (#15424)\"",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-16T21:44:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0cf705600f450bd8c890ff4a8c856829e1e44a39",
          "body": "* presentation: associate feedback with committed surface state\n\n* presentation: avoid shared ownership for feedback state\n\n* presentation: format feedback ownership declarations\n\n* presentation: release destroyed feedback resources\n\n* presentation: own feedbacks uniquely\n\n* presentation: format feedback ownership update\n\n---------\n\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "presentation: associate feedback with committed surface state (#15243)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-16T18:13:52Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "82baeb5e925bf838ac0fa4e1c613125d3854dafa",
          "body": "* render: handle explicit sync fallback safely\n\n* render: avoid blocking explicit sync fallback\n\n* ci: retry flaky Hyprland VM tests\n\n* render: avoid blocking explicit sync fallback\n\n---------\n\nCo-authored-by: Pppp1116 <pcaiadoguerreiro@gmail.com>\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "render: handle explicit sync fallback safely (#14986)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-16T18:12:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "83cd85b3d57c9da1bcec80a46b7eec3514a344a9",
          "body": "* init: gain real-time through rtkit\n\n* init: use sdbus to talk with rtkit\n\n* init: simplify\n\n* ci: add sdbus-cpp dependency\n\n* init: add HAS_RTKIT def",
          "is_bot": false,
          "headline": "init: gain real-time through rtkit (#15411)",
          "author_name": "André Silva",
          "author_login": "andresilva",
          "committed_at": "2026-07-16T18:11:37Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b5003998788d16c4d121a8a323972f192ee85efb",
          "body": "after 254d6bae775258b554e1d3a4a853f3bc244190d9 fadeouts now live in\nfadingOutState() instead of the normal containers, so add SC_FADEOUT and\niterate the new fadingOutState() and block solitary for fadeouts.",
          "is_bot": false,
          "headline": "renderer: block solitary on fadeouts (#15428)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-16T10:02:27Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ee773e85e484febf73a416c20d3f0a08b402b1e3",
          "body": "glDrawBuffers is per FBO state, but it was only set when mirroring was\nfirst enabled on whatever work buffer happened to be mainFB that frame.\nsince work buffers rotate other FBO's kept default single draw buffer.\n\nmove the draw buffer selection into internalAlloc so it always follows\nthe mirror attachment.",
          "is_bot": false,
          "headline": "renderer: fix mirror draw buffers on rotating work buffers (#15427)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-16T10:01:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "031579e722ef23f61541b6c6e3d7b6f479940eea",
          "body": "invalid_format check was only done in the create handler and missed\ncreate_immed, move it into verify() instead so it catches both.",
          "is_bot": false,
          "headline": "dmabuf: ensure both create and create_immed verify v4 (#15424)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-16T10:00:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11c38d62fab54ed00c4f5f8b81d4322bb55cb29e",
          "body": "there are a few random crashes reported with master, safeguard two\npotential nullptr derefs. and remove a unusued PNODE.",
          "is_bot": false,
          "headline": "algo/master: avoid nullptr dereferences (#15422)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-16T09:57:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a97a2850c8b14744dd3d545bbb8bacebf65d1e01",
          "body": "verify path returned early without cleanup(), which made it destruct\nto late and call CWorkspaceAlgoMatcher thats already destroyed.",
          "is_bot": false,
          "headline": "core: fix --verify-config crash (#15418)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-16T09:50:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "26dbbb4f69a7752d702cc9bbc7ce52e0677b239b",
          "body": null,
          "is_bot": false,
          "headline": "renderer: allow blurring of the session lock surface (#15283)",
          "author_name": "Roman Gundarin",
          "author_login": "NamorNiradnug",
          "committed_at": "2026-07-16T09:21:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0b0d7ede2192ae515638890037890bdecca6eba2",
          "body": "Co-authored-by: Gerben Meijer <infernix@gmail.com>\nCo-authored-by: Emerson Matos <emegson@live.com>\nCo-authored-by: Mihai Fufezan <mihai@fufexan.net>\nCo-authored-by: Ashley Stonham <reddrop@reddrop.net>\nCo-authored-by: extra-salad <87635414+extra-salad@users.noreply.github.com>",
          "is_bot": false,
          "headline": "input-capture: impl protocol (#7919)",
          "author_name": "Gwilherm Folliot",
          "author_login": "3l0w",
          "committed_at": "2026-07-15T21:56:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d7fc7240f4efd0abac1c1f23f09b78b30b4e0782",
          "body": "when lease is destroyed the destroy listener nullptr deref m_lease, and\nall it uses it for is logging the fd number. capture the fd by value to\navoid crashing.",
          "is_bot": false,
          "headline": "protocols: avoid crash in lease (#15417)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-15T12:32:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "338bdbb323a29d8c486758329a140e928b03de5c",
          "body": "* dwindle: avoid crashing on expired weakptr\n\npTarget can be expired when toggling a tiled window to floating during a\ndrag move that triggers removeTarget -> recalculate -> calculateWorkspace\nbefore the dead node has been cleaned up.\n\n* hyprtester: wait for enabled monitor\n\nwithout waiting for enabled monitor we can race the tests and call focus\non non enabled monitors.",
          "is_bot": false,
          "headline": "dwindle: avoid crashing on expired weakptr (#15415)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-15T12:31:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0f6f2792e41034e8f0fafeb5b436b288185e96e8",
          "body": "* popup: fix crash on destroyed xdg surface resource\n\nthe xdg_surface can be destroyed before the xdg_popup, so CPopup::onDestroy\nhasnt run yet and the popup is still in its parents m_children with m_wlSurface set.\n\nif guard it in popupTreeExtents.\n\n* popup: safe guard bad resource\n\npopups can be fading out while the resource is dead, ifguard it and\nreturn m_lastPos if thats the case.",
          "is_bot": false,
          "headline": "desktop/popup: fix crash on destroy (#15416)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-15T12:30:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "79bc0ca16e7cca40c247a9200634d150fa8193d1",
          "body": "* groups: add groupbar disable_when_only option\n\n* groups: improve `groups` test\n\n`groups_disable_when_only` test fails because it checks windows sizes after\n`disable_when_only` option changed. Changing option currently don't\ntrigger window size update.\n\nSame problem with `groups` test, but it worke\n[…]\ne sizes.\n\n* groups: fix `disable_when_only` and `groups` tests\n\nREFRESH_LAYOUTS is not required 'cause REFRESH_WINDOW_STATES will\ntrigger update of window position too.\n\n* groups: fix groupbar drawing",
          "is_bot": false,
          "headline": "groups: add groupbar disable_when_only option (#15009)",
          "author_name": "feelamee",
          "author_login": "feelamee",
          "committed_at": "2026-07-14T15:32:22Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f2eafdf1057ffbd513e1238ddcb5262237825aff",
          "body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "hyprctl: handle partial IPC transfers (#15408)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-14T15:32:05Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6984188eb0c004c9c813b0ed8ff3bd2051370726",
          "body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "xwayland: guard unknown selection events (#15409)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-14T13:23:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e0d9283897724403ea8574b3ed419d2678a39231",
          "body": null,
          "is_bot": false,
          "headline": "config: fix cycle_next using nonexist layoutmsg for prev (#15396)",
          "author_name": "Dregu",
          "author_login": "Dregu",
          "committed_at": "2026-07-14T10:45:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30588bec768b2c6e8895b4b36a89e663a6151656",
          "body": "use the current row and the SHM stride when calculating copy offsets,\nthe previous code calculated the copy offset incorrectly by always using\nthe first damaged row and by assuming each row as only as wide as the\ndamaged region.",
          "is_bot": false,
          "headline": "protocols: fix SHM cursor partial damage copy (#15399)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-14T09:46:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d371ad27606d021f2337be4642015e78c458350c",
          "body": "* config: fix initial workspace tracking\n\nprevious refactor over to Executor missed m_isLaunchingExecOnce meaning\nany hl.exec_cmd(hyprlauncher) got the token of 1337 month duration at\nthe first launched workspace, so the initial launch of things gets that\ntoken and opens on the wrong workspace.\n\nadd\n[…]\nedle counting also missed the final partial chunk if the read\nfailed to read 512 bytes but still read a chunk.\n\n* hyprtester: fix monitor rule\n\nID's are unreliable. try to parse it directly from name.",
          "is_bot": false,
          "headline": "config: fix initial workspace tracking (#15395)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-14T09:45:55Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e7996dc9bd790e8d66dac66b4a46f24969224d5e",
          "body": null,
          "is_bot": false,
          "headline": "desktop: remove using directives, move to geometric functions (#15402)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-14T09:35:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ed11458bbcd15a7f223c002a7a418cd3218b0ee7",
          "body": null,
          "is_bot": false,
          "headline": "README: update showcase",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-14T09:35:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b348ff780c24a7ed7e1df61a85317054037469ec",
          "body": "…988)\"\n\nThis reverts commit 5033ab954baa17d3cd41fba43a40f2de2e586a80.\n\nBad cursor on transformed.",
          "is_bot": false,
          "headline": "cursor: revert \"transform hardware cursors within content bounds (#14…",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-14T09:10:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "30983d6ff0ed5fc614daf3178ad311aa45f8d9e1",
          "body": null,
          "is_bot": false,
          "headline": "splashes: add 5th comp winner's splash",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-14T06:46:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "402eceea96ae77869d9ce9eb6c4dc088065936ab",
          "body": "* Fix protocol null dereference paths\n\n* protocol: align image description state assignment\n\n---------\n\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "protocols: fix protocol null dereference paths (#15275)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-13T18:47:22Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5033ab954baa17d3cd41fba43a40f2de2e586a80",
          "body": "* cursor: transform hardware cursors within content bounds\n\n* cursor: transform hotspot as a pixel\n\n---------\n\nCo-authored-by: Pppp1116 <pcaiadoguerreiro@gmail.com>\nCo-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "cursor: transform hardware cursors within content bounds (#14988)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-13T18:44:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2c3ed5f66e1c6cda7d12e6ded8f25eff7acecd5c",
          "body": "Co-authored-by: Pppp1116 <ACCOUNT1_NOREPLY>",
          "is_bot": false,
          "headline": "window: cache process environment lookups (#15264)",
          "author_name": "NotPppp1116",
          "author_login": null,
          "committed_at": "2026-07-13T18:43:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1eebdac3566a662b7a694177b935a79a9d7f70d0",
          "body": "fixes https://github.com/hyprwm/Hyprland/issues/15020",
          "is_bot": false,
          "headline": "config/lua: add lua-driven custom live gestures (#15393)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-13T18:42:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2633ecff398ef311a85e3ac8aee58fdb8c5e6751",
          "body": "this skips proper recalcs for windows on the old space. No other algo does this.\n\nfixes #13456",
          "is_bot": false,
          "headline": "algo/dwindle: do not remove node before assigning (#15373)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-13T16:37:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "50d301d34a82e2edf7458eea8ab741c927690152",
          "body": "…bal replace (#15351)\n\n* core/output: don't destroy bound wl_output resources on same-name global replace\n\nWhen a monitor is unplugged and replugged quickly (e.g. an external screen\nlosing power for a second), the new monitor's wl_output global replaces the\nold defunct one in PROTO::outputs by name.\n[…]\nmment\n\nReword per review: these globals are gone-but-not-yet-unref'd-by-all-clients,\nnot necessarily replaced.\n\n* clang-format\n\n* clang-format\n\n---------\n\nCo-authored-by: Titosy <dev.titosy@gmail.com>",
          "is_bot": false,
          "headline": "core/output: don't destroy bound wl_output resources on same-name glo…",
          "author_name": "Titosy Razafimbelo",
          "author_login": "titosymanankasina",
          "committed_at": "2026-07-13T13:02:21Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "2b6f6cb831b1400e0dc33294888174553b95294a",
          "body": "…yout (#15382)\n\n* update window input-ability and update work area before setting window pos to ensure the correct window size is obtained.\n\n* Test",
          "is_bot": false,
          "headline": "layout/monocle: fix `w[tv1]` workspace rule not working on monocle la…",
          "author_name": "erStarr",
          "author_login": "erstarr",
          "committed_at": "2026-07-13T07:27:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7d90874c9676fa02647c282c580743c7785564c6",
          "body": "Problem: The blurprepare intermediate used an 80-nit range but HDR\npixels can be much brighter. A 200-nit pixel was encoded as:\n\n    (200/80)^(1/2.2) = 1.52\n\nwhich would get clamped to 1 causing clipping.\n\nSolution: Use the workbuffer's configured max luminance (1000, for\nexample) for the range so t\n[…]\nare/blurFinish.\n\nNote: KDE somewhat similarly uses gamma 2.2 encoding where 1.0 == max\nluminance of monitor:\nhttps://zamundaaa.github.io/wayland/2024/11/02/hdr-and-color-management-in-kwin-part-4.html",
          "is_bot": false,
          "headline": "renderer/cm: fix blur clipping with HDR (#15371)",
          "author_name": "Ryan Holt",
          "author_login": "ryanpholt",
          "committed_at": "2026-07-13T07:21:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "8684c154ae86b55fc8bd6451190a3dbd5565cf67",
          "body": "paths like enableMirror internalAllocs a new framebuffer in begin()\nwhich means the previously bound currenfFB is reset to 0. if guard it at\nend of alloc and restore the previously fb instead of setting it to 0.\n\nthere is also codepaths where manually allocated CFLFramebuffers are\ncreated renderbuff\n[…]\nable to read it. bind GL_FRAMEBUFFER in those cases in bind()\n\nand same on release() can be called mid frame on temp buffers deleting\nthe framebuffer and binding 0 while we still want currentFB bound.",
          "is_bot": false,
          "headline": "glframebuffer: fix spurious incomplete framebuffer errors (#15380)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-13T07:20:03Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f4b9c1ab240f5c5d2b5a2e659113361e476772a5",
          "body": "* fix test passing only inconsistently - use acceptsInput to test since `visible` and `hidden` are unreliable\n\n* comment fix\n\n* remove residual sync calls",
          "is_bot": false,
          "headline": "Tests/scroll: fix window hiding test  passing inconsistently (#15384)",
          "author_name": "erStarr",
          "author_login": "erstarr",
          "committed_at": "2026-07-12T18:30:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4cfe0e830dbac770fc58acceab357799cb615ba",
          "body": "if previous display manager set a hwcursor and never clears it, we wont\nclear it until we actually set a new hw cursor ourself, so add\ninitialPlaneCleared and clear it once on start. the !CROSSES if case\nonly clears it if we have actually set it ourself.\n\nif software cursor has been rendered and it now doesnt intersect with\nthe monitor, clear it out once, guarded by swRendered.",
          "is_bot": false,
          "headline": "pointer: fix two stale cursor images clearings (#15376)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-12T15:49:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f25f2ff04863adff016625d3d6a68885b3da1d83",
          "body": "this perm is sensitive, but for this one it should be ok",
          "is_bot": false,
          "headline": "ci: fix codeownersplus (#15383)",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-12T15:40:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e3ece119921261a17959e17ff38e493c9a37ad7a",
          "body": "…nitors (#15374)",
          "is_bot": false,
          "headline": "config/actions: unfocus last window on changeWorkspace when moving mo…",
          "author_name": "Vaxry",
          "author_login": "vaxerski",
          "committed_at": "2026-07-12T15:20:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ef18043b5ce913256c336c063147e120afd2abb1",
          "body": "State::monitorState() is destroyed before the renderer during compositor\nexit and render pass elements can keep the layersurface alive until the\nrenderer dies. causing a nullptr deref in ~CLayerSurface() , if guard it\nand return early.",
          "is_bot": false,
          "headline": "layersurface: dont nullptr deref on compositor cleanup (#15379)",
          "author_name": "Tom Englund",
          "author_login": "gulafaran",
          "committed_at": "2026-07-12T14:24:01Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 100,
      "commits_last_year": 1341,
      "latest_release_at": "2026-07-27T16:37:57Z",
      "latest_release_tag": "v0.56.1",
      "releases_from_tags": false,
      "days_since_last_push": 0,
      "active_weeks_last_year": 52,
      "days_since_latest_release": 1,
      "mean_days_between_releases": 16.2
    },
    "community": {
      "has_readme": true,
      "has_license": true,
      "has_description": true,
      "has_contributing": false,
      "health_percentage": 75,
      "has_issue_template": false,
      "has_code_of_conduct": true,
      "has_pull_request_template": true
    },
    "ecosystem": {
      "packages": []
    },
    "popularity": {
      "forks": 1900,
      "stars": 37616,
      "watchers": 138,
      "fork_history": {
        "days": [
          {
            "date": "2025-02-09",
            "count": 2
          },
          {
            "date": "2025-02-12",
            "count": 3
          },
          {
            "date": "2025-02-14",
            "count": 1
          },
          {
            "date": "2025-02-15",
            "count": 1
          },
          {
            "date": "2025-02-16",
            "count": 3
          },
          {
            "date": "2025-02-17",
            "count": 4
          },
          {
            "date": "2025-02-18",
            "count": 14
          },
          {
            "date": "2025-02-22",
            "count": 1
          },
          {
            "date": "2025-02-23",
            "count": 1
          },
          {
            "date": "2025-02-25",
            "count": 1
          },
          {
            "date": "2025-02-26",
            "count": 2
          },
          {
            "date": "2025-02-27",
            "count": 1
          },
          {
            "date": "2025-03-01",
            "count": 1
          },
          {
            "date": "2025-03-05",
            "count": 3
          },
          {
            "date": "2025-03-06",
            "count": 2
          },
          {
            "date": "2025-03-10",
            "count": 1
          },
          {
            "date": "2025-03-12",
            "count": 1
          },
          {
            "date": "2025-03-13",
            "count": 1
          },
          {
            "date": "2025-03-15",
            "count": 1
          },
          {
            "date": "2025-03-16",
            "count": 2
          },
          {
            "date": "2025-03-18",
            "count": 1
          },
          {
            "date": "2025-03-20",
            "count": 2
          },
          {
            "date": "2025-03-21",
            "count": 1
          },
          {
            "date": "2025-03-23",
            "count": 3
          },
          {
            "date": "2025-03-25",
            "count": 3
          },
          {
            "date": "2025-03-26",
            "count": 1
          },
          {
            "date": "2025-03-27",
            "count": 2
          },
          {
            "date": "2025-03-29",
            "count": 1
          },
          {
            "date": "2025-03-30",
            "count": 1
          },
          {
            "date": "2025-03-31",
            "count": 1
          },
          {
            "date": "2025-04-01",
            "count": 1
          },
          {
            "date": "2025-04-03",
            "count": 2
          },
          {
            "date": "2025-04-06",
            "count": 1
          },
          {
            "date": "2025-04-07",
            "count": 2
          },
          {
            "date": "2025-04-08",
            "count": 1
          },
          {
            "date": "2025-04-09",
            "count": 1
          },
          {
            "date": "2025-04-10",
            "count": 2
          },
          {
            "date": "2025-04-11",
            "count": 1
          },
          {
            "date": "2025-04-12",
            "count": 1
          },
          {
            "date": "2025-04-15",
            "count": 1
          },
          {
            "date": "2025-04-16",
            "count": 2
          },
          {
            "date": "2025-04-18",
            "count": 1
          },
          {
            "date": "2025-04-19",
            "count": 1
          },
          {
            "date": "2025-04-20",
            "count": 1
          },
          {
            "date": "2025-04-23",
            "count": 1
          },
          {
            "date": "2025-04-24",
            "count": 1
          },
          {
            "date": "2025-04-27",
            "count": 3
          },
          {
            "date": "2025-04-28",
            "count": 1
          },
          {
            "date": "2025-04-29",
            "count": 2
          },
          {
            "date": "2025-05-01",
            "count": 2
          },
          {
            "date": "2025-05-02",
            "count": 1
          },
          {
            "date": "2025-05-03",
            "count": 3
          },
          {
            "date": "2025-05-04",
            "count": 1
          },
          {
            "date": "2025-05-05",
            "count": 1
          },
          {
            "date": "2025-05-06",
            "count": 1
          },
          {
            "date": "2025-05-11",
            "count": 1
          },
          {
            "date": "2025-05-12",
            "count": 1
          },
          {
            "date": "2025-05-13",
            "count": 2
          },
          {
            "date": "2025-05-14",
            "count": 1
          },
          {
            "date": "2025-05-18",
            "count": 1
          },
          {
            "date": "2025-05-19",
            "count": 2
          },
          {
            "date": "2025-05-21",
            "count": 1
          },
          {
            "date": "2025-05-22",
            "count": 1
          },
          {
            "date": "2025-05-24",
            "count": 2
          },
          {
            "date": "2025-05-25",
            "count": 1
          },
          {
            "date": "2025-05-27",
            "count": 2
          },
          {
            "date": "2025-05-28",
            "count": 1
          },
          {
            "date": "2025-05-29",
            "count": 1
          },
          {
            "date": "2025-05-30",
            "count": 2
          },
          {
            "date": "2025-05-31",
            "count": 1
          },
          {
            "date": "2025-06-01",
            "count": 1
          },
          {
            "date": "2025-06-02",
            "count": 1
          },
          {
            "date": "2025-06-03",
            "count": 1
          },
          {
            "date": "2025-06-04",
            "count": 1
          },
          {
            "date": "2025-06-05",
            "count": 4
          },
          {
            "date": "2025-06-06",
            "count": 1
          },
          {
            "date": "2025-06-07",
            "count": 2
          },
          {
            "date": "2025-06-09",
            "count": 1
          },
          {
            "date": "2025-06-10",
            "count": 2
          },
          {
            "date": "2025-06-11",
            "count": 2
          },
          {
            "date": "2025-06-12",
            "count": 1
          },
          {
            "date": "2025-06-17",
            "count": 1
          },
          {
            "date": "2025-06-18",
            "count": 3
          },
          {
            "date": "2025-06-20",
            "count": 1
          },
          {
            "date": "2025-06-21",
            "count": 2
          },
          {
            "date": "2025-06-22",
            "count": 1
          },
          {
            "date": "2025-06-23",
            "count": 1
          },
          {
            "date": "2025-06-24",
            "count": 3
          },
          {
            "date": "2025-06-25",
            "count": 1
          },
          {
            "date": "2025-06-26",
            "count": 5
          },
          {
            "date": "2025-06-27",
            "count": 2
          },
          {
            "date": "2025-06-30",
            "count": 2
          },
          {
            "date": "2025-07-02",
            "count": 1
          },
          {
            "date": "2025-07-03",
            "count": 2
          },
          {
            "date": "2025-07-05",
            "count": 1
          },
          {
            "date": "2025-07-06",
            "count": 1
          },
          {
            "date": "2025-07-07",
            "count": 2
          },
          {
            "date": "2025-07-08",
            "count": 2
          },
          {
            "date": "2025-07-10",
            "count": 1
          },
          {
            "date": "2025-07-12",
            "count": 1
          },
          {
            "date": "2025-07-13",
            "count": 2
          },
          {
            "date": "2025-07-15",
            "count": 1
          },
          {
            "date": "2025-07-17",
            "count": 4
          },
          {
            "date": "2025-07-18",
            "count": 6
          },
          {
            "date": "2025-07-19",
            "count": 19
          },
          {
            "date": "2025-07-20",
            "count": 15
          },
          {
            "date": "2025-07-21",
            "count": 14
          },
          {
            "date": "2025-07-22",
            "count": 4
          },
          {
            "date": "2025-07-23",
            "count": 5
          },
          {
            "date": "2025-07-24",
            "count": 6
          },
          {
            "date": "2025-07-25",
            "count": 3
          },
          {
            "date": "2025-07-27",
            "count": 1
          },
          {
            "date": "2025-07-28",
            "count": 3
          },
          {
            "date": "2025-07-29",
            "count": 4
          },
          {
            "date": "2025-07-30",
            "count": 1
          },
          {
            "date": "2025-07-31",
            "count": 4
          },
          {
            "date": "2025-08-01",
            "count": 1
          },
          {
            "date": "2025-08-02",
            "count": 2
          },
          {
            "date": "2025-08-03",
            "count": 2
          },
          {
            "date": "2025-08-04",
            "count": 2
          },
          {
            "date": "2025-08-05",
            "count": 1
          },
          {
            "date": "2025-08-06",
            "count": 4
          },
          {
            "date": "2025-08-07",
            "count": 3
          },
          {
            "date": "2025-08-08",
            "count": 2
          },
          {
            "date": "2025-08-09",
            "count": 2
          },
          {
            "date": "2025-08-10",
            "count": 1
          },
          {
            "date": "2025-08-11",
            "count": 4
          },
          {
            "date": "2025-08-12",
            "count": 1
          },
          {
            "date": "2025-08-13",
            "count": 5
          },
          {
            "date": "2025-08-14",
            "count": 2
          },
          {
            "date": "2025-08-15",
            "count": 1
          },
          {
            "date": "2025-08-17",
            "count": 4
          },
          {
            "date": "2025-08-18",
            "count": 5
          },
          {
            "date": "2025-08-19",
            "count": 4
          },
          {
            "date": "2025-08-20",
            "count": 1
          },
          {
            "date": "2025-08-21",
            "count": 1
          },
          {
            "date": "2025-08-22",
            "count": 5
          },
          {
            "date": "2025-08-23",
            "count": 8
          },
          {
            "date": "2025-08-24",
            "count": 3
          },
          {
            "date": "2025-08-25",
            "count": 4
          },
          {
            "date": "2025-08-26",
            "count": 3
          },
          {
            "date": "2025-08-27",
            "count": 4
          },
          {
            "date": "2025-08-28",
            "count": 2
          },
          {
            "date": "2025-08-29",
            "count": 4
          },
          {
            "date": "2025-08-30",
            "count": 2
          },
          {
            "date": "2025-09-01",
            "count": 2
          },
          {
            "date": "2025-09-02",
            "count": 1
          },
          {
            "date": "2025-09-05",
            "count": 2
          },
          {
            "date": "2025-09-06",
            "count": 2
          },
          {
            "date": "2025-09-08",
            "count": 3
          },
          {
            "date": "2025-09-09",
            "count": 2
          },
          {
            "date": "2025-09-10",
            "count": 1
          },
          {
            "date": "2025-09-11",
            "count": 3
          },
          {
            "date": "2025-09-12",
            "count": 2
          },
          {
            "date": "2025-09-15",
            "count": 2
          },
          {
            "date": "2025-09-16",
            "count": 1
          },
          {
            "date": "2025-09-17",
            "count": 1
          },
          {
            "date": "2025-09-18",
            "count": 3
          },
          {
            "date": "2025-09-19",
            "count": 2
          },
          {
            "date": "2025-09-22",
            "count": 3
          },
          {
            "date": "2025-09-24",
            "count": 3
          },
          {
            "date": "2025-09-25",
            "count": 3
          },
          {
            "date": "2025-09-26",
            "count": 2
          },
          {
            "date": "2025-09-27",
            "count": 3
          },
          {
            "date": "2025-09-28",
            "count": 1
          },
          {
            "date": "2025-09-29",
            "count": 2
          },
          {
            "date": "2025-10-01",
            "count": 1
          },
          {
            "date": "2025-10-02",
            "count": 1
          },
          {
            "date": "2025-10-04",
            "count": 1
          },
          {
            "date": "2025-10-05",
            "count": 1
          },
          {
            "date": "2025-10-06",
            "count": 2
          },
          {
            "date": "2025-10-08",
            "count": 3
          },
          {
            "date": "2025-10-09",
            "count": 3
          },
          {
            "date": "2025-10-11",
            "count": 3
          },
          {
            "date": "2025-10-12",
            "count": 1
          },
          {
            "date": "2025-10-14",
            "count": 2
          },
          {
            "date": "2025-10-16",
            "count": 1
          },
          {
            "date": "2025-10-17",
            "count": 1
          },
          {
            "date": "2025-10-19",
            "count": 1
          },
          {
            "date": "2025-10-21",
            "count": 1
          },
          {
            "date": "2025-10-22",
            "count": 1
          },
          {
            "date": "2025-10-25",
            "count": 1
          },
          {
            "date": "2025-10-30",
            "count": 2
          },
          {
            "date": "2025-11-01",
            "count": 1
          },
          {
            "date": "2025-11-02",
            "count": 1
          },
          {
            "date": "2025-11-03",
            "count": 1
          },
          {
            "date": "2025-11-04",
            "count": 1
          },
          {
            "date": "2025-11-05",
            "count": 1
          },
          {
            "date": "2025-11-06",
            "count": 1
          },
          {
            "date": "2025-11-08",
            "count": 2
          },
          {
            "date": "2025-11-09",
            "count": 2
          },
          {
            "date": "2025-11-10",
            "count": 1
          },
          {
            "date": "2025-11-11",
            "count": 3
          },
          {
            "date": "2025-11-12",
            "count": 2
          },
          {
            "date": "2025-11-13",
            "count": 2
          },
          {
            "date": "2025-11-14",
            "count": 1
          },
          {
            "date": "2025-11-15",
            "count": 4
          },
          {
            "date": "2025-11-16",
            "count": 19
          },
          {
            "date": "2025-11-17",
            "count": 8
          },
          {
            "date": "2025-11-18",
            "count": 4
          },
          {
            "date": "2025-11-19",
            "count": 1
          },
          {
            "date": "2025-11-22",
            "count": 2
          },
          {
            "date": "2025-11-23",
            "count": 2
          },
          {
            "date": "2025-11-24",
            "count": 4
          },
          {
            "date": "2025-11-25",
            "count": 2
          },
          {
            "date": "2025-11-26",
            "count": 3
          },
          {
            "date": "2025-11-28",
            "count": 3
          },
          {
            "date": "2025-11-29",
            "count": 2
          },
          {
            "date": "2025-11-30",
            "count": 1
          },
          {
            "date": "2025-12-01",
            "count": 1
          },
          {
            "date": "2025-12-03",
            "count": 1
          },
          {
            "date": "2025-12-05",
            "count": 6
          },
          {
            "date": "2025-12-06",
            "count": 2
          },
          {
            "date": "2025-12-07",
            "count": 2
          },
          {
            "date": "2025-12-08",
            "count": 2
          },
          {
            "date": "2025-12-09",
            "count": 3
          },
          {
            "date": "2025-12-11",
            "count": 2
          },
          {
            "date": "2025-12-12",
            "count": 2
          },
          {
            "date": "2025-12-13",
            "count": 1
          },
          {
            "date": "2025-12-14",
            "count": 2
          },
          {
            "date": "2025-12-15",
            "count": 3
          },
          {
            "date": "2025-12-16",
            "count": 2
          },
          {
            "date": "2025-12-17",
            "count": 2
          },
          {
            "date": "2025-12-18",
            "count": 1
          },
          {
            "date": "2025-12-19",
            "count": 1
          },
          {
            "date": "2025-12-20",
            "count": 1
          },
          {
            "date": "2025-12-21",
            "count": 3
          },
          {
            "date": "2025-12-22",
            "count": 2
          },
          {
            "date": "2025-12-23",
            "count": 1
          },
          {
            "date": "2025-12-24",
            "count": 2
          },
          {
            "date": "2025-12-25",
            "count": 1
          },
          {
            "date": "2025-12-26",
            "count": 1
          },
          {
            "date": "2025-12-29",
            "count": 2
          },
          {
            "date": "2025-12-31",
            "count": 5
          },
          {
            "date": "2026-01-01",
            "count": 1
          },
          {
            "date": "2026-01-02",
            "count": 2
          },
          {
            "date": "2026-01-03",
            "count": 1
          },
          {
            "date": "2026-01-04",
            "count": 2
          },
          {
            "date": "2026-01-06",
            "count": 2
          },
          {
            "date": "2026-01-08",
            "count": 3
          },
          {
            "date": "2026-01-09",
            "count": 1
          },
          {
            "date": "2026-01-11",
            "count": 3
          },
          {
            "date": "2026-01-12",
            "count": 1
          },
          {
            "date": "2026-01-13",
            "count": 1
          },
          {
            "date": "2026-01-15",
            "count": 3
          },
          {
            "date": "2026-01-16",
            "count": 2
          },
          {
            "date": "2026-01-17",
            "count": 2
          },
          {
            "date": "2026-01-18",
            "count": 1
          },
          {
            "date": "2026-01-19",
            "count": 6
          },
          {
            "date": "2026-01-20",
            "count": 3
          },
          {
            "date": "2026-01-21",
            "count": 2
          },
          {
            "date": "2026-01-23",
            "count": 1
          },
          {
            "date": "2026-01-24",
            "count": 4
          },
          {
            "date": "2026-01-25",
            "count": 4
          },
          {
            "date": "2026-01-27",
            "count": 5
          },
          {
            "date": "2026-01-29",
            "count": 2
          },
          {
            "date": "2026-01-30",
            "count": 4
          },
          {
            "date": "2026-01-31",
            "count": 2
          },
          {
            "date": "2026-02-01",
            "count": 1
          },
          {
            "date": "2026-02-02",
            "count": 1
          },
          {
            "date": "2026-02-03",
            "count": 1
          },
          {
            "date": "2026-02-06",
            "count": 1
          },
          {
            "date": "2026-02-08",
            "count": 2
          },
          {
            "date": "2026-02-09",
            "count": 2
          },
          {
            "date": "2026-02-10",
            "count": 2
          },
          {
            "date": "2026-02-11",
            "count": 5
          },
          {
            "date": "2026-02-12",
            "count": 3
          },
          {
            "date": "2026-02-13",
            "count": 1
          },
          {
            "date": "2026-02-14",
            "count": 1
          },
          {
            "date": "2026-02-15",
            "count": 1
          },
          {
            "date": "2026-02-16",
            "count": 2
          },
          {
            "date": "2026-02-17",
            "count": 1
          },
          {
            "date": "2026-02-19",
            "count": 2
          },
          {
            "date": "2026-02-21",
            "count": 1
          },
          {
            "date": "2026-02-23",
            "count": 3
          },
          {
            "date": "2026-02-24",
            "count": 1
          },
          {
            "date": "2026-02-25",
            "count": 1
          },
          {
            "date": "2026-02-26",
            "count": 2
          },
          {
            "date": "2026-02-27",
            "count": 1
          },
          {
            "date": "2026-02-28",
            "count": 2
          },
          {
            "date": "2026-03-01",
            "count": 3
          },
          {
            "date": "2026-03-02",
            "count": 3
          },
          {
            "date": "2026-03-03",
            "count": 4
          },
          {
            "date": "2026-03-04",
            "count": 5
          },
          {
            "date": "2026-03-05",
            "count": 2
          },
          {
            "date": "2026-03-06",
            "count": 3
          },
          {
            "date": "2026-03-07",
            "count": 1
          },
          {
            "date": "2026-03-08",
            "count": 2
          },
          {
            "date": "2026-03-09",
            "count": 1
          },
          {
            "date": "2026-03-10",
            "count": 2
          },
          {
            "date": "2026-03-11",
            "count": 9
          },
          {
            "date": "2026-03-13",
            "count": 2
          },
          {
            "date": "2026-03-14",
            "count": 2
          },
          {
            "date": "2026-03-15",
            "count": 1
          },
          {
            "date": "2026-03-18",
            "count": 2
          },
          {
            "date": "2026-03-19",
            "count": 4
          },
          {
            "date": "2026-03-21",
            "count": 1
          },
          {
            "date": "2026-03-22",
            "count": 3
          },
          {
            "date": "2026-03-23",
            "count": 2
          },
          {
            "date": "2026-03-24",
            "count": 4
          },
          {
            "date": "2026-03-26",
            "count": 3
          },
          {
            "date": "2026-03-27",
            "count": 5
          },
          {
            "date": "2026-03-28",
            "count": 4
          },
          {
            "date": "2026-03-29",
            "count": 1
          },
          {
            "date": "2026-03-30",
            "count": 2
          },
          {
            "date": "2026-03-31",
            "count": 1
          },
          {
            "date": "2026-04-01",
            "count": 2
          },
          {
            "date": "2026-04-02",
            "count": 3
          },
          {
            "date": "2026-04-03",
            "count": 2
          },
          {
            "date": "2026-04-04",
            "count": 2
          },
          {
            "date": "2026-04-06",
            "count": 3
          },
          {
            "date": "2026-04-07",
            "count": 3
          },
          {
            "date": "2026-04-08",
            "count": 1
          },
          {
            "date": "2026-04-09",
            "count": 2
          },
          {
            "date": "2026-04-11",
            "count": 2
          },
          {
            "date": "2026-04-12",
            "count": 2
          },
          {
            "date": "2026-04-13",
            "count": 2
          },
          {
            "date": "2026-04-14",
            "count": 2
          },
          {
            "date": "2026-04-15",
            "count": 3
          },
          {
            "date": "2026-04-16",
            "count": 1
          },
          {
            "date": "2026-04-17",
            "count": 2
          },
          {
            "date": "2026-04-18",
            "count": 1
          },
          {
            "date": "2026-04-19",
            "count": 2
          },
          {
            "date": "2026-04-20",
            "count": 2
          },
          {
            "date": "2026-04-21",
            "count": 1
          },
          {
            "date": "2026-04-22",
            "count": 3
          },
          {
            "date": "2026-04-24",
            "count": 2
          },
          {
            "date": "2026-04-25",
            "count": 3
          },
          {
            "date": "2026-04-26",
            "count": 1
          },
          {
            "date": "2026-04-27",
            "count": 2
          },
          {
            "date": "2026-04-28",
            "count": 2
          },
          {
            "date": "2026-04-29",
            "count": 1
          },
          {
            "date": "2026-04-30",
            "count": 1
          },
          {
            "date": "2026-05-01",
            "count": 4
          },
          {
            "date": "2026-05-02",
            "count": 4
          },
          {
            "date": "2026-05-04",
            "count": 2
          },
          {
            "date": "2026-05-05",
            "count": 1
          },
          {
            "date": "2026-05-06",
            "count": 2
          },
          {
            "date": "2026-05-07",
            "count": 2
          },
          {
            "date": "2026-05-08",
            "count": 2
          },
          {
            "date": "2026-05-09",
            "count": 2
          },
          {
            "date": "2026-05-10",
            "count": 2
          },
          {
            "date": "2026-05-11",
            "count": 6
          },
          {
            "date": "2026-05-12",
            "count": 4
          },
          {
            "date": "2026-05-13",
            "count": 3
          },
          {
            "date": "2026-05-14",
            "count": 5
          },
          {
            "date": "2026-05-15",
            "count": 3
          },
          {
            "date": "2026-05-16",
            "count": 4
          },
          {
            "date": "2026-05-17",
            "count": 5
          },
          {
            "date": "2026-05-18",
            "count": 8
          },
          {
            "date": "2026-05-19",
            "count": 1
          },
          {
            "date": "2026-05-20",
            "count": 4
          },
          {
            "date": "2026-05-21",
            "count": 1
          },
          {
            "date": "2026-05-22",
            "count": 6
          },
          {
            "date": "2026-05-23",
            "count": 1
          },
          {
            "date": "2026-05-24",
            "count": 5
          },
          {
            "date": "2026-05-25",
            "count": 1
          },
          {
            "date": "2026-05-26",
            "count": 2
          },
          {
            "date": "2026-05-27",
            "count": 2
          },
          {
            "date": "2026-05-28",
            "count": 3
          },
          {
            "date": "2026-05-29",
            "count": 1
          },
          {
            "date": "2026-05-30",
            "count": 3
          },
          {
            "date": "2026-05-31",
            "count": 3
          },
          {
            "date": "2026-06-01",
            "count": 4
          },
          {
            "date": "2026-06-02",
            "count": 1
          },
          {
            "date": "2026-06-03",
            "count": 2
          },
          {
            "date": "2026-06-04",
            "count": 2
          },
          {
            "date": "2026-06-05",
            "count": 3
          },
          {
            "date": "2026-06-06",
            "count": 1
          },
          {
            "date": "2026-06-07",
            "count": 2
          },
          {
            "date": "2026-06-08",
            "count": 3
          },
          {
            "date": "2026-06-09",
            "count": 1
          },
          {
            "date": "2026-06-10",
            "count": 1
          },
          {
            "date": "2026-06-11",
            "count": 2
          },
          {
            "date": "2026-06-12",
            "count": 2
          },
          {
            "date": "2026-06-13",
            "count": 1
          },
          {
            "date": "2026-06-14",
            "count": 1
          },
          {
            "date": "2026-06-15",
            "count": 1
          },
          {
            "date": "2026-06-16",
            "count": 2
          },
          {
            "date": "2026-06-17",
            "count": 4
          },
          {
            "date": "2026-06-18",
            "count": 1
          },
          {
            "date": "2026-06-19",
            "count": 1
          },
          {
            "date": "2026-06-21",
            "count": 3
          },
          {
            "date": "2026-06-22",
            "count": 2
          },
          {
            "date": "2026-06-23",
            "count": 1
          },
          {
            "date": "2026-06-24",
            "count": 2
          },
          {
            "date": "2026-06-25",
            "count": 2
          },
          {
            "date": "2026-06-26",
            "count": 3
          },
          {
            "date": "2026-06-27",
            "count": 2
          },
          {
            "date": "2026-06-28",
            "count": 2
          },
          {
            "date": "2026-06-29",
            "count": 5
          },
          {
            "date": "2026-06-30",
            "count": 3
          },
          {
            "date": "2026-07-02",
            "count": 2
          },
          {
            "date": "2026-07-03",
            "count": 1
          },
          {
            "date": "2026-07-04",
            "count": 3
          },
          {
            "date": "2026-07-05",
            "count": 4
          },
          {
            "date": "2026-07-06",
            "count": 1
          },
          {
            "date": "2026-07-07",
            "count": 2
          },
          {
            "date": "2026-07-08",
            "count": 4
          },
          {
            "date": "2026-07-09",
            "count": 3
          },
          {
            "date": "2026-07-10",
            "count": 2
          },
          {
            "date": "2026-07-11",
            "count": 1
          },
          {
            "date": "2026-07-12",
            "count": 2
          },
          {
            "date": "2026-07-13",
            "count": 2
          },
          {
            "date": "2026-07-15",
            "count": 1
          },
          {
            "date": "2026-07-16",
            "count": 4
          },
          {
            "date": "2026-07-17",
            "count": 1
          },
          {
            "date": "2026-07-19",
            "count": 6
          },
          {
            "date": "2026-07-20",
            "count": 4
          },
          {
            "date": "2026-07-21",
            "count": 6
          },
          {
            "date": "2026-07-22",
            "count": 11
          },
          {
            "date": "2026-07-23",
            "count": 8
          },
          {
            "date": "2026-07-24",
            "count": 5
          },
          {
            "date": "2026-07-25",
            "count": 4
          },
          {
            "date": "2026-07-26",
            "count": 1
          },
          {
            "date": "2026-07-27",
            "count": 6
          },
          {
            "date": "2026-07-28",
            "count": 4
          },
          {
            "date": "2026-07-29",
            "count": 3
          }
        ],
        "complete": false,
        "collected": 1000,
        "total_forks": 1900
      },
      "star_history": null,
      "open_issues_and_prs": 185
    },
    "ai_readiness": {
      "has_nix": true,
      "example_dirs": [
        "example"
      ],
      "has_llms_txt": false,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [
        "Makefile",
        "hyprtester/plugin/Makefile"
      ],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [],
      "largest_source_bytes": 194708,
      "source_files_sampled": 887,
      "oversized_source_files": 13,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 3145
    },
    "dependencies": {
      "manifests": [],
      "advisories": {
        "error": "No resolved dependencies to assess",
        "scope": "repository_graph",
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [],
      "dependencies": [],
      "all_dependencies": {
        "error": null,
        "source": "github-sbom",
        "packages": [],
        "collected": true,
        "truncated": false,
        "total_count": 0,
        "direct_count": 0,
        "indirect_count": 0
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 137,
        "merged_prs": 2854,
        "open_issues": 48,
        "closed_ratio": 0.994,
        "closed_issues": 7637,
        "closed_unmerged_prs": 517
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "vaxerski",
          "commits": 4640,
          "avatar_url": "https://avatars.githubusercontent.com/u/43317083?v=4"
        },
        {
          "type": "User",
          "login": "fufexan",
          "commits": 376,
          "avatar_url": "https://avatars.githubusercontent.com/u/36706276?v=4"
        },
        {
          "type": "User",
          "login": "gulafaran",
          "commits": 183,
          "avatar_url": "https://avatars.githubusercontent.com/u/773455?v=4"
        },
        {
          "type": "User",
          "login": "MightyPlaza",
          "commits": 92,
          "avatar_url": "https://avatars.githubusercontent.com/u/123664421?v=4"
        },
        {
          "type": "User",
          "login": "UjinT34",
          "commits": 87,
          "avatar_url": "https://avatars.githubusercontent.com/u/41110182?v=4"
        },
        {
          "type": "User",
          "login": "thejch",
          "commits": 69,
          "avatar_url": "https://avatars.githubusercontent.com/u/66577496?v=4"
        },
        {
          "type": "User",
          "login": "ikalco",
          "commits": 58,
          "avatar_url": "https://avatars.githubusercontent.com/u/73481042?v=4"
        },
        {
          "type": "User",
          "login": "Dickby",
          "commits": 56,
          "avatar_url": "https://avatars.githubusercontent.com/u/10100765?v=4"
        },
        {
          "type": "User",
          "login": "outfoxxed",
          "commits": 48,
          "avatar_url": "https://avatars.githubusercontent.com/u/83010835?v=4"
        },
        {
          "type": "User",
          "login": "memchr",
          "commits": 47,
          "avatar_url": "https://avatars.githubusercontent.com/u/118117622?v=4"
        }
      ],
      "contributors_sampled": 100,
      "top_contributor_share": 0.691
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yaml",
        "close-issues.yml",
        "codeownersplus.yml",
        "labeler.yml",
        "man-update.yaml",
        "nix-ci.yml",
        "nix-test.yml",
        "nix-update-inputs.yml",
        "release.yaml",
        "security-checks.yml",
        "translation-ai-check.yml",
        "vouch-prs.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [],
      "has_editorconfig": false,
      "has_linter_config": false,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": null,
            "reason": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 10,
            "reason": "20 out of 20 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": 4,
            "reason": "Found 13/30 approved changesets -- score normalized to 4",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 10,
            "reason": "project has 39 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": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 10,
            "reason": "30 commit(s) and 2 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": 3,
            "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": 10,
            "reason": "0 existing vulnerabilities detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#vulnerabilities"
          }
        ],
        "commit": "924a35735ebadd67c8a078042060fe7e6ba7e060",
        "ran_at": "2026-07-29T04:08:31Z",
        "aggregate_score": 5.4,
        "scorecard_version": "v5.5.0"
      },
      "has_codeql_workflow": false,
      "has_security_policy": true,
      "has_dependabot_config": false
    },
    "contribution_flow": {
      "collected": true,
      "ci_last_run_at": "2026-07-28T22:30:31Z",
      "oldest_open_prs": [
        {
          "number": 6446,
          "created_at": "2024-06-12T15:01:50Z",
          "last_comment_at": "2025-11-09T13:12:56Z",
          "last_comment_author": "moetayuko"
        },
        {
          "number": 9054,
          "created_at": "2025-01-13T20:16:35Z",
          "last_comment_at": "2025-07-28T07:57:00Z",
          "last_comment_author": "Natr1x"
        },
        {
          "number": 9198,
          "created_at": "2025-01-27T22:28:25Z",
          "last_comment_at": "2025-01-27T22:45:14Z",
          "last_comment_author": "user111111111111111111111111111111111"
        },
        {
          "number": 9428,
          "created_at": "2025-02-17T17:37:20Z",
          "last_comment_at": "2025-05-10T02:49:23Z",
          "last_comment_author": "opensourcecheemsburgers"
        },
        {
          "number": 9479,
          "created_at": "2025-02-24T10:55:35Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 9939,
          "created_at": "2025-04-06T19:28:47Z",
          "last_comment_at": "2025-04-07T06:20:05Z",
          "last_comment_author": "fufexan"
        },
        {
          "number": 10020,
          "created_at": "2025-04-09T23:59:23Z",
          "last_comment_at": "2025-08-26T11:50:59Z",
          "last_comment_author": "UjinT34"
        },
        {
          "number": 10031,
          "created_at": "2025-04-10T15:55:15Z",
          "last_comment_at": "2025-04-10T16:31:28Z",
          "last_comment_author": "qnxt"
        },
        {
          "number": 10186,
          "created_at": "2025-04-27T02:29:31Z",
          "last_comment_at": "2025-07-07T16:59:55Z",
          "last_comment_author": "faukah"
        },
        {
          "number": 10300,
          "created_at": "2025-05-06T08:18:38Z",
          "last_comment_at": "2025-07-31T10:41:43Z",
          "last_comment_author": "UjinT34"
        },
        {
          "number": 10727,
          "created_at": "2025-06-13T03:52:33Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10733,
          "created_at": "2025-06-13T16:20:22Z",
          "last_comment_at": "2025-06-17T18:24:04Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 10740,
          "created_at": "2025-06-14T06:56:55Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10796,
          "created_at": "2025-06-20T05:08:48Z",
          "last_comment_at": "2025-06-29T18:47:19Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 10799,
          "created_at": "2025-06-20T12:54:02Z",
          "last_comment_at": "2025-06-21T11:02:53Z",
          "last_comment_author": "carabistouflette"
        },
        {
          "number": 10827,
          "created_at": "2025-06-24T04:19:23Z",
          "last_comment_at": "2025-07-01T18:56:16Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 10918,
          "created_at": "2025-07-03T16:26:32Z",
          "last_comment_at": "2025-07-17T13:46:15Z",
          "last_comment_author": "henriquealrs"
        },
        {
          "number": 10973,
          "created_at": "2025-07-08T21:39:49Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10976,
          "created_at": "2025-07-09T05:54:42Z",
          "last_comment_at": "2025-07-09T08:28:25Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 11101,
          "created_at": "2025-07-19T13:12:23Z",
          "last_comment_at": "2025-07-22T07:30:00Z",
          "last_comment_author": "fxzzi"
        }
      ],
      "last_merged_pr_at": "2026-07-28T11:12:08Z",
      "ci_last_conclusion": "SKIPPED",
      "oldest_open_issues": [
        {
          "number": 8424,
          "created_at": "2024-11-11T13:10:12Z",
          "last_comment_at": "2026-04-26T23:05:14Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 9064,
          "created_at": "2025-01-14T20:07:00Z",
          "last_comment_at": "2026-05-29T12:24:34Z",
          "last_comment_author": "UjinT34"
        },
        {
          "number": 9854,
          "created_at": "2025-04-05T17:49:56Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 9894,
          "created_at": "2025-04-06T00:06:00Z",
          "last_comment_at": "2025-12-31T21:21:15Z",
          "last_comment_author": "TheWoomy27"
        },
        {
          "number": 9931,
          "created_at": "2025-04-06T17:31:53Z",
          "last_comment_at": "2025-04-07T10:44:23Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 9969,
          "created_at": "2025-04-07T10:28:26Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 9975,
          "created_at": "2025-04-07T11:00:46Z",
          "last_comment_at": "2025-04-13T02:54:19Z",
          "last_comment_author": null
        },
        {
          "number": 9981,
          "created_at": "2025-04-07T18:09:30Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 9987,
          "created_at": "2025-04-07T19:12:40Z",
          "last_comment_at": "2026-04-15T00:53:18Z",
          "last_comment_author": "crthpl"
        },
        {
          "number": 10147,
          "created_at": "2025-04-22T21:10:44Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10148,
          "created_at": "2025-04-22T21:15:54Z",
          "last_comment_at": "2025-06-03T19:44:58Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 10196,
          "created_at": "2025-04-27T23:27:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10352,
          "created_at": "2025-05-09T12:50:37Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10421,
          "created_at": "2025-05-15T09:34:02Z",
          "last_comment_at": "2025-10-09T20:02:59Z",
          "last_comment_author": "alerque"
        },
        {
          "number": 10453,
          "created_at": "2025-05-17T13:12:52Z",
          "last_comment_at": "2026-04-19T13:23:04Z",
          "last_comment_author": "thkinh"
        },
        {
          "number": 10456,
          "created_at": "2025-05-17T13:30:04Z",
          "last_comment_at": "2026-07-10T16:52:40Z",
          "last_comment_author": "vaxerski"
        },
        {
          "number": 10472,
          "created_at": "2025-05-18T17:40:05Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10488,
          "created_at": "2025-05-20T13:41:56Z",
          "last_comment_at": "2026-01-08T14:43:18Z",
          "last_comment_author": "onion108"
        },
        {
          "number": 10489,
          "created_at": "2025-05-20T13:47:24Z",
          "last_comment_at": null,
          "last_comment_author": null
        },
        {
          "number": 10490,
          "created_at": "2025-05-20T13:49:57Z",
          "last_comment_at": null,
          "last_comment_author": null
        }
      ]
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/hyprwm/Hyprland",
    "host": "github.com",
    "name": "Hyprland",
    "owner": "hyprwm"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "good",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 77,
      "inputs": {
        "security": 54,
        "vitality": 96,
        "community": 85,
        "governance": 65,
        "engineering": 81
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "excellent",
        "name": "Vitality",
        "value": 96,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "excellent",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "commits_last_year": 1341,
              "human_commit_share": 1,
              "days_since_last_push": 0,
              "active_weeks_last_year": 52
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 0 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 0
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "52/52 weeks with commits",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 52
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "1341 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 1341
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "30 commit(s) and 2 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": 100,
              "latest_release_tag": "v0.56.1",
              "releases_from_tags": false,
              "days_since_latest_release": 1,
              "mean_days_between_releases": 16.2
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "100 releases published",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "releases_published",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 1 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 1
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~16.2 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 16.2
                    }
                  }
                ],
                "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": "maintained",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": null,
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": 4,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "last human commit 4 days ago",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_maintained",
                    "params": {
                      "days": 4
                    }
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "excellent",
        "name": "Community & Adoption",
        "value": 85,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "excellent",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 97,
            "inputs": {
              "forks": 1900,
              "stars": 37616,
              "watchers": 138,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "37,616 stars",
                "points": 60,
                "status": "met",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 37616
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "1,900 forks",
                "points": 25,
                "status": "met",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 1900
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "138 watchers",
                "points": 11.9,
                "status": "partial",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 138
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "good",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 72,
            "inputs": {
              "has_readme": true,
              "has_license": true,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": true,
              "has_pull_request_template": true
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 22.5,
                "status": "met",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (BSD-3-Clause)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "BSD-3-Clause"
                    }
                  }
                ],
                "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": 13.5,
                "status": "met",
                "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": 6.3,
                "status": "met",
                "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": 65,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "at_risk",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 100,
              "top_contributor_share": 0.691
            },
            "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 69% of commits",
                "points": 7,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 69
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "100 contributors",
                "points": 13.5,
                "status": "met",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 100
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 39 contributing companies or organizations",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "excellent",
            "name": "Issue & PR responsiveness",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "merged_prs": 2854,
              "open_issues": 48,
              "closed_issues": 7637,
              "issue_closed_ratio": 0.994,
              "closed_unmerged_prs": 517
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "99% of issues closed",
                "points": 46.5,
                "status": "partial",
                "details": [
                  {
                    "code": "issues_closed_share",
                    "params": {
                      "share": 99
                    }
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2854/3371 decided PRs merged",
                "points": 32.4,
                "status": "partial",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2854,
                      "decided": 3371
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 13/30 approved changesets -- score normalized to 4",
                "points": 6,
                "status": "partial",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "good",
            "name": "Ownership & stewardship",
            "note": null,
            "notes": [],
            "value": 75,
            "inputs": {
              "followers": 2893,
              "owner_type": "Organization",
              "is_verified": null,
              "owner_login": "hyprwm",
              "public_repos": 41,
              "account_age_days": 1499
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "organization-owned",
                "points": 30,
                "status": "met",
                "details": [
                  {
                    "code": "owner_organization",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "2,893 followers of hyprwm",
                "points": 24.9,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 2893,
                      "login": "hyprwm"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "41 public repos, account ~4 yr old",
                "points": 20,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 41
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 4
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "good",
        "name": "Engineering Quality",
        "value": 81,
        "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": "12 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 12
                    }
                  }
                ],
                "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": "20 out of 20 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": 100,
            "inputs": {
              "topics": [
                "wayland",
                "wayland-compositor",
                "compositor",
                "cpp26"
              ],
              "has_wiki": true,
              "homepage": "https://hypr.land",
              "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://hypr.land",
                "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": "4 topics",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "topics_count",
                    "params": {
                      "count": 4
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "moderate",
        "name": "Security",
        "value": 54,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "moderate",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Branch-Protection, Packaging. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "branch_protection",
                    "packaging"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 54,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 5.4
            },
            "components": [
              {
                "key": "binary_artifacts",
                "name": "Binary-Artifacts",
                "detail": "no binaries found in the repo",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "branch_protection",
                "name": "Branch-Protection",
                "detail": "internal error: error during branchesHandler.setup: internal error: some github tokens can't read classic branch protection rules: https://github.com/ossf/scorecard-action/blob/main/docs/authentication/fine-grained-auth-token.md",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "20 out of 20 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 13/30 approved changesets -- score normalized to 4",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 39 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": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "30 commit(s) and 2 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": 1.5,
                "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": "0 existing vulnerabilities detected",
                "points": 7.5,
                "status": "met",
                "details": [],
                "max_points": 7.5
              }
            ]
          },
          {
            "key": "high_risk_jurisdiction_exposure",
            "band": "excellent",
            "name": "High-Risk Jurisdiction Exposure",
            "note": "Only high-confidence self-published location evidence affects this multiplier. Ambiguous matches are review-only; country evidence is not proof of nationality, citizenship, legal registration, malicious intent, or sanctions status.",
            "notes": [
              {
                "code": "jurisdiction_evidence_limits",
                "params": {}
              }
            ],
            "value": 100,
            "inputs": {
              "meaning": "self-published location evidence; not nationality or citizenship",
              "red_flag": false,
              "exposures": [],
              "policy_countries": [
                "Russia",
                "Iran",
                "North Korea"
              ],
              "commit_weight_rule": {
                "min_commits": 50,
                "min_commit_share": 0.1
              },
              "review_only_matches": 0,
              "below_threshold_exposures": [],
              "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": 71,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 85,
            "inputs": {
              "has_llms_txt": false,
              "legible_history_share": 0.91,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 3145
            },
            "components": [
              {
                "key": "agent_instructions",
                "name": "Agent instructions",
                "detail": "AGENTS.md",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "AGENTS.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": "91 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 91,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "moderate",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 61,
            "inputs": {
              "has_nix": true,
              "has_tests": true,
              "lockfiles": [],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [
                "Makefile",
                "hyprtester/plugin/Makefile"
              ],
              "has_devcontainer": false,
              "has_linter_config": false,
              "typecheck_configs": [],
              "agent_commit_share": 0,
              "toolchain_manifests": [],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "Makefile, hyprtester/plugin/Makefile",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Makefile, hyprtester/plugin/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": "C++ (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "Nix",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "Nix"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "no agent-authored commits among the last 100",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_agent_authored_commits",
                    "params": {
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "C++",
              "largest_source_bytes": 194708,
              "source_files_sampled": 887,
              "oversized_source_files": 13
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "C++ (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "C++"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "13/887 source files over 60KB",
                "points": 54.2,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 887,
                      "oversized": 13
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "example"
              ],
              "has_mcp_signal": false,
              "api_schema_files": []
            },
            "components": [
              {
                "key": "api_schema_openapi_graphql_proto",
                "name": "API schema (OpenAPI/GraphQL/proto)",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 40
              },
              {
                "key": "mcp_server",
                "name": "MCP server",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              },
              {
                "key": "runnable_examples",
                "name": "Runnable examples",
                "detail": "example",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "example"
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          }
        ],
        "description": "How well is the repo equipped to be developed and maintained with AI coding agents? An independent, experimental badge — weight 0.0, so it is surfaced on its own and does not affect the overall health score."
      }
    ],
    "metrics_version": "1.14.0"
  },
  "warnings": [
    "Star history unavailable: GitHub GraphQL error: Resource not accessible by personal access token"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-29T04:08:57.997770Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/h/hyprwm/Hyprland.svg",
  "full_name": "hyprwm/Hyprland",
  "license_state": "standard",
  "license_spdx": "BSD-3-Clause"
}

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

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

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