Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 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 estrellas⑂ 1900 forksdesde mar 2022Ver en GitHub ↗

hyprwm/Hyprland tiene un índice de salud de 77 sobre 100, lo que lo sitúa en la banda Bueno. Su puntuación más alta es Vitality (96/100) y la más baja, Security (54/100). Se actualizó por última vez hoy. Una sola persona concentra la mayor parte del trabajo reciente.

77
global / 100
Bueno

Índice de salud del software

Las métricas se agrupan en categorías ponderadas sobre una escala de 1 a 100. El resultado global parte de su media; cuando la evidencia pública activa la Política de Jurisdicciones de Alto Riesgo, la calificación se ajusta y recibe el límite 49 (En riesgo). Preparación para IA queda fuera.

77
Excelente85-100Ejemplar; cumple prácticamente todos los criterios evaluados
Bueno70-84Saludable; carencias menores
Moderado50-69Aceptable con carencias notables; se recomienda revisión
En riesgo30-49Debilidades significativas; su adopción exige cautela
Crítico1-29Problemas graves (proyecto abandonado, un solo mantenedor, sin higiene)
VitalidadComunidad yAdopciónSostenibilidady GobernanzaCalidad deIngenieríaSeguridadPreparaciónpara IA

Perfil de puntuación

Cada eje es una categoría. La forma importa más que la media: un proyecto sano llena toda la figura, mientras que un perfil de picos y cráteres indica que la fortaleza en una dimensión enmascara el riesgo en otra.

Titularidad

Hypr DevelopmentOrganización
2893 seguidores41 repositorios públicosdesde jun 2022

Este repositorio está respaldado por una organización: una custodia compartida y responsable que puede sobrevivir a cualquier mantenedor individual.

Métricas por categoría

Vitalidad

¿Está vivo el proyecto: se escribe código y se publican versiones?

96Excelente · 22% del índice global
Cómo se puntúa
36/36Recencia de push — último push hace 0 días
36/36Cadencia de commits — 52/52 semanas con commits
18/18Volumen de commits — 1341 commits en el último año
10/10OpenSSF Scorecard: Maintained — 30 commit(s) and 2 issue activity found in the last 90 days -- score normalized to 10
Datos de entrada utilizados
commits_last_year1341
human_commit_share1
days_since_last_push0
active_weeks_last_year52
Cómo se puntúa
27/27Publica versiones — 100 versiones publicadas
36/36Recencia de las versiones — última versión hace 1 días
27/27Cadencia de publicación — una versión cada ~16,2 días
0/10OpenSSF Scorecard: Signed-Releases — Project has not signed or included provenance with any releases.
Datos de entrada utilizados
releases_count100
latest_release_tagv0.56.1
releases_from_tagsno
days_since_latest_release1
mean_days_between_releases16,2

Comunidad y Adopción

¿Tiene el proyecto usuarios, descargas, atención y unas condiciones acogedoras para quienes contribuyen?

85Excelente · 18% del índice global
Cómo se puntúa
60/60Estrellas — 37.616 estrellas
25/25Forks — 1900 forks
11.9/15Observadores — 138 observadores
Datos de entrada utilizados
forks1900
stars37.616
watchers138
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
22.5/22.5README
22.5/22.5Licencia — licencia reconocida (BSD-3-Clause)
0/18Guía CONTRIBUTING
13.5/13.5Código de conducta
0/7.2Plantilla de issues
6.3/6.3Plantilla de PR
Datos de entrada utilizados
has_readme
has_license
has_contributingno
has_issue_templateno
has_code_of_conduct
has_pull_request_template

Sostenibilidad y Gobernanza

¿Sobrevivirá el proyecto a sus personas: factor bus, capacidad de respuesta, quién lo respalda y mantenimiento del paquete?

65Moderado · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
7/22.5Distribución de commits — el principal contribuyente firma el 69% de los commits
13.5/13.5Amplitud de contribuyentes — 100 contribuyentes
10/10OpenSSF Scorecard: Contributors — project has 39 contributing companies or organizations
Datos de entrada utilizados
bus_factor1
contributors_sampled100
top_contributor_share0,691
Cómo se puntúa
46.5/46.8Resolución de issues — 99% de issues cerradas
32.4/38.3Aceptación de PR — 2854/3371 PR decididos fusionados
6/15OpenSSF Scorecard: Code-Review — Found 13/30 approved changesets -- score normalized to 4
Datos de entrada utilizados
merged_prs2854
open_issues48
closed_issues7637
issue_closed_ratio0,994
closed_unmerged_prs517
Cómo se puntúa
30/30Respaldo de la propiedad — propiedad de una organización
0/20Dominio verificado
24.9/25Alcance del propietario — 2893 seguidores de hyprwm
20/25Trayectoria — 41 repos públicos, cuenta de ~4 años
Datos de entrada utilizados
followers2893
owner_typeOrganization
is_verified
owner_loginhyprwm
public_repos41
account_age_days1499

Calidad de Ingeniería

¿Existen unas prácticas mínimas de ingeniería y documentación?

81Bueno · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 12 flujo(s) de trabajo
24/24Pruebas presentes
0/16Configuración de linter
0/9.6Hooks de pre-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
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_configno
has_precommit_configno

Documentación

100Excelente
Cómo se puntúa
30/30README
25/25Directorio de documentación
15/15Sitio de documentación / página del proyecto — https://hypr.land
10/10Descripción del repositorio
10/10Topics — 4 topics
10/10Wiki
Datos de entrada utilizados
topicswayland, wayland-compositor, compositor, cpp26
has_wiki
homepagehttps://hypr.land
has_readme
has_docs_dir
has_description

Seguridad

¿Son sólidas las prácticas visibles de seguridad y de cadena de suministro, sin exposición jurisdiccional de alto riesgo sin resolver?

54Moderado · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — sin datos
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.5Licencia — 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 — sin datos
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
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate5,4
Excluidos de la puntuación (sin datos o no aplicable): branch_protection, packaging. Los pesos restantes se han renormalizado.

Preparación para IA

¿Hasta qué punto está el repositorio preparado para desarrollarse y mantenerse con agentes de codificación de IA? Es una insignia independiente y experimental — peso 0,0, de modo que se presenta por separado y no afecta a la puntuación de salud global.

71Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md
0/15Documentación legible por máquinas (llms.txt)
40/40Historial de commits legible — 91 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txtno
legible_history_share0,91
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes3145
Cómo se puntúa
18/18Arranque con un solo comando — Makefile, hyprtester/plugin/Makefile
22/22Pruebas automatizadas
0/11Configuración de lint / formato
11/11Verificación estática de tipos — C++ (tipado estático)
10/10Entorno reproducible — Nix
0/10Práctica demostrada con agentes — ningún commit con autoría de agente entre los últimos 100
0/8Mantenimiento automatizado — no se observan actualizaciones automáticas de dependencias
0/10OpenSSF Scorecard: Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
Datos de entrada utilizados
has_nix
has_tests
lockfiles
has_dockerfileno
typed_language
bootstrap_filesMakefile, hyprtester/plugin/Makefile
has_devcontainerno
has_linter_configno
typecheck_configs
agent_commit_share0
toolchain_manifests
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — C++ (tipado estático)
54.2/55Tamaños de archivo manejables — 13/887 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageC++
largest_source_bytes194.708
source_files_sampled887
oversized_source_files13
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — example
Datos de entrada utilizados
example_dirsexample
has_mcp_signalno
api_schema_files

Datos clave

37.616estrellas de GitHub
100contribuidores
1341commits en los últimos 12 meses
0días desde el último push
100versiones publicadas
1factor bus
48issues abiertas
ecosistemas de paquetes

Advertencias de recopilación de datos

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

Más detalle

Historial de estrellas y forks 0 ★ / 1900 ⇿
0Estrellas
1900Forks
25Versiones

Cuándo se añadió cada estrella y fork, recopilado de GitHub y agrupado por día. El crecimiento acumulado se sitúa justo encima de las adiciones diarias que lo componen, de modo que ambos se leen en conjunto: la acumulación orgánica sostenida no se parece en nada a un pico abrupto y efímero. Cuando esa diferencia es medible, se informa como autenticidad del crecimiento.

Solo se muestra el historial más reciente: este repositorio supera la ventana de recopilación, por lo que no se captura el historial más antiguo.

5001000150020001900342025-022025-112026-07
Mayor 0Menor 9Parche 16

Cada punto abarca 2 días.

OpenSSF Scorecard 5.4 / 10
5.4agregado

Evaluación de seguridad independiente y agnóstica en cuanto a herramientas, procedente del proyecto de código abierto OpenSSF Scorecard. Cada comprobación premia una práctica de seguridad, no la herramienta de un proveedor concreto. Las comprobaciones que Scorecard no pudo determinar se marcan como n/d y se excluyen de la puntuación de seguridad (nunca se cuentan como cero).Scorecard v5.5.0 · 2026-07-29 04:08 UTC

10Binary-Artifactsno binaries found in the repo
n/dBranch-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
n/dPackagingpackaging 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
Todas las dependencias 0

Conjunto completo de dependencias resueltas según el grafo de dependencias de GitHub: 0 paquetes directos y 0 indirectos (transitivos). El cierre transitivo es completo cuando el repositorio incluye un lockfile.

RegistroPaqueteVersiónRelación
Avisos de dependencias sin evaluar

El cotejo de avisos no pudo ejecutarse para este informe: No resolved dependencies to assess

Informe JSON sin procesar legible por máquina
{
  "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"
}

Las puntuaciones son señales, no garantías. Reflejan prácticas públicamente visibles en GitHub; no son una auditoría de código ni una garantía de seguridad.

Los datos ausentes se excluyen y los pesos se renormalizan; nunca se puntúan como cero. La metodología es versionada y abierta: métricas v1.14.0, esquema v0.27.0 — metodología completa · wiki de métricas.

Cómo se sitúa un resultado dentro del registro general: estadísticas agregadas.