Публічний реєстр
Звіт про здоров'я програмного забезпеченнясхема 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 р.Переглянути на GitHub ↗

hyprwm/Hyprland має індекс здоров’я 77 зі 100, що відповідає смузі «Добрий». Найвищий показник — Vitality (96/100), найнижчий — Security (54/100). Останнє оновлення — сьогодні. Більшість нещодавньої роботи виконує один учасник.

77
загалом / 100
Добрий

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

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

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

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

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

Власність

Hypr DevelopmentОрганізація
2 893 підписники41 публічний репозиторійз черв. 2022 р.

За цим репозиторієм стоїть організація — спільна, підзвітна опіка, здатна пережити будь-якого окремого мейнтейнера.

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

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

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

96Відмінний · 22% загального індексу
Як обчислюється оцінка
36/36Свіжість push — останній push 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
Як обчислюється оцінка
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
Як обчислюється оцінка
22.5/22.5README
22.5/22.5Ліцензія — визнана ліцензія (BSD-3-Clause)
0/18Настанови CONTRIBUTING
13.5/13.5Кодекс поведінки
0/7.2Шаблон issue
6.3/6.3Шаблон PR
Використані вхідні дані
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Вирішення issue — закрито 99% issue
32.4/38.3Прийняття PR — злито 2 854/3 371 вирішених PR
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Охоплення власника — 2 893 підписників у hyprwm
20/25Послужний список — 41 публічних репозиторіїв, вік облікового запису ~4 р.
Використані вхідні дані
followers2 893
owner_typeOrganization
is_verified
owner_loginhyprwm
public_repos41
account_age_days1 499

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

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

81Добрий · 20% загального індексу
Як обчислюється оцінка
24/24Процеси CI — 12 процес(ів) CI
24/24Наявні тести
0/16Конфігурація лінтера
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. Залишкові ваги перенормовано.

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

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

71Добрий · 0% загального індексу
Як обчислюється оцінка
45/45Інструкції для агентів — AGENTS.md
0/15Машиночитана документація (llms.txt)
40/40Читабельна історія комітів — намір зазначено у 91 з 100 людських комітів (структурований заголовок або пояснювальний текст)
Використані вхідні дані
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/11Конфігурація лінтера / форматера
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Керовані розміри файлів — 13/887 файлів вихідного коду понад 60 КБ
Використані вхідні дані
primary_languageC++
largest_source_bytes194 708
source_files_sampled887
oversized_source_files13
Як обчислюється оцінка
0/40Схема API (OpenAPI/GraphQL/proto)
0/20Сервер MCP
40/40Придатні до запуску приклади — example
Використані вхідні дані
example_dirsexample
has_mcp_signalні
api_schema_files

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

37 616зірок GitHub
100контриб'юторів
1 341комітів за останні 12 місяців
0днів від останнього пушу
100релізів
1бас-фактор
48відкритих issue
пакетних екосистем

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

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

Докладніше

Історія зірок і форків 0 ★ / 1 900 ⇿
0Зірки
1 900Форки
25Релізи

Коли додано кожну зірку й форк — зібрано з 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 непрямих (транзитивних) пакетів. Транзитивне замикання є повним, коли в репозиторії закомічено lockfile.

РеєстрПакетВерсіяЗв'язок
Сповіщення про залежності не оцінено

Звірка сповіщень не відбулася для цього звіту: 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 — повна методологія · вікі метрик.

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