Registro público
Informe de salud del softwareesquema 0.27.0 · métricas 1.13.0 · 2026-07-30 12:00 UTC

wpdmitry / gogpu

Pure Go GPU Application Framework — windowing, input, lifecycle, platform abstraction. Part of the GoGPU ecosystem.

GoMIT★ 0 estrellas⑂ 0 forksdesde jul 2026forkVer en GitHub ↗

wpdmitry/gogpu tiene un índice de salud de 47 sobre 100, lo que lo sitúa en la banda En riesgo. Su puntuación más alta es AI Readiness (79/100) y la más baja, Community & Adoption (12/100). Se actualizó por última vez hace 9 días. Una sola persona concentra la mayor parte del trabajo reciente.

47
global / 100
En riesgo

Í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.

47
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

wpdmitryCuenta personal
0 seguidores30 repositorios públicosdesde jul 2017

Este repositorio pertenece a una cuenta personal. Un proyecto con un único propietario conlleva más riesgo de continuidad que uno respaldado por una organización.

Ecosistemas de paquetes

RegistroPaqueteVersiónDescargas / mesVersionesÚltima publicación
Gogithub.com/gogpu/gogpuapunta a otro repositorio; no se puntúav0.47.0-202hace 0 días

Métricas por categoría

Vitalidad

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

77Bueno · 22% del índice global
Cómo se puntúa
28.8/36Recencia de push — último push hace 9 días
22.8/36Cadencia de commits — 33/52 semanas con commits
18/18Volumen de commits — 329 commits en el último año
0/10OpenSSF Scorecard: Maintained — project was created within the last 90 days. Please review its contents carefully
Datos de entrada utilizados
commits_last_year329
human_commit_share1
days_since_last_push9
active_weeks_last_year33
Cómo se puntúa
16.2/27Publica versiones — 2 etiquetas de versión (sin releases de GitHub)
36/36Recencia de las versiones — última versión hace 9 días
27/27Cadencia de publicación — una versión cada ~0 días
0/10OpenSSF Scorecard: Signed-Releases — sin datos
Datos de entrada utilizados
releases_count2
latest_release_tagv0.44.12
releases_from_tags
days_since_latest_release9
mean_days_between_releases0
Excluidos de la puntuación (sin datos o no aplicable): OpenSSF Scorecard: Signed-Releases. Los pesos restantes se han renormalizado.

Comunidad y Adopción

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

12Crítico · 18% del índice global
Cómo se puntúa
0/60Estrellas — 0 estrellas
0/25Forks — 0 forks
0/15Observadores — 0 observadores
Datos de entrada utilizados
forks0
stars0
watchers0
growth_stateunverified
growth_factor_pct100
growth_unverified_reasonno_history
Cómo se puntúa
0/22.5README
22.5/22.5Licencia — licencia reconocida (MIT)
0/18Guía CONTRIBUTING
0/13.5Código de conducta
0/7.2Plantilla de issues
0/6.3Plantilla de PR
Datos de entrada utilizados
has_readmeno
has_licenseno
has_contributingno
has_issue_templateno
has_code_of_conductno
has_pull_request_templateno

Sostenibilidad y Gobernanza

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

45En riesgo · 24% del índice global
Cómo se puntúa
9/54Factor bus — la mitad de los commits recae en 1 contribuyente(s)
2.3/22.5Distribución de commits — el principal contribuyente firma el 90% de los commits
10.8/13.5Amplitud de contribuyentes — 8 contribuyentes
3/10OpenSSF Scorecard: Contributors — project has 1 contributing companies or organizations -- score normalized to 3
Datos de entrada utilizados
bus_factor1
contributors_sampled8
top_contributor_share0,899
Cómo se puntúa
0/46.8Resolución de issues — sin issues o sin datos
38.2/38.3Aceptación de PR — 2/2 PR decididos fusionados
0/15OpenSSF Scorecard: Code-Review — Found 0/28 approved changesets -- score normalized to 0
Datos de entrada utilizados
merged_prs2
open_issues0
closed_issues0
issue_closed_ratio
closed_unmerged_prs0
Excluidos de la puntuación (sin datos o no aplicable): Resolución de issues. Los pesos restantes se han renormalizado.
Cómo se puntúa
10/30Respaldo de la propiedad — cuenta personal (usuario)
0/20Dominio verificado — no aplicable a cuentas de usuario
0/25Alcance del propietario — 0 seguidores de wpdmitry
22.9/25Trayectoria — 30 repos públicos, cuenta de ~9 años
Datos de entrada utilizados
followers0
owner_typeUser
is_verified
owner_loginwpdmitry
public_repos30
account_age_days3293
Excluidos de la puntuación (sin datos o no aplicable): Dominio verificado. Los pesos restantes se han renormalizado.

Calidad de Ingeniería

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

52Moderado · 20% del índice global
Cómo se puntúa
24/24Flujos de trabajo de CI — 1 flujo(s) de trabajo
24/24Pruebas presentes
16/16Configuración de linter — .golangci.yml
0/9.6Hooks de pre-commit
0/6.4.editorconfig
0/20OpenSSF Scorecard: CI-Tests — 0 out of 2 merged PRs checked by a CI test -- score normalized to 0
Datos de entrada utilizados
has_ci
has_tests
has_editorconfigno
has_linter_config
has_precommit_configno

Documentación

35En riesgo
Cómo se puntúa
0/30README
25/25Directorio de documentación
0/15Sitio de documentación / página del proyecto
0/10Descripción del repositorio
0/10Topics
10/10Wiki
Datos de entrada utilizados
topics
has_wiki
homepage
has_readmeno
has_docs_dir
has_descriptionno

Seguridad

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

44En riesgo · 16% del índice global
Cómo se puntúa
7.5/7.5Binary-Artifacts — no binaries found in the repo
0/7.5Branch-Protection — branch protection not enabled on development/release branches
0/2.5CI-Tests — 0 out of 2 merged PRs checked by a CI test -- score normalized to 0
0/2.5CII-Best-Practices — no effort to earn an OpenSSF best practices badge detected
0/7.5Code-Review — Found 0/28 approved changesets -- score normalized to 0
0.8/2.5Contributors — project has 1 contributing companies or organizations -- score normalized to 3
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
0/7.5Maintained — project was created within the last 90 days. Please review its contents carefully
0/5Packaging — sin datos
0/5Pinned-Dependencies — dependency not pinned by hash detected -- score normalized to 0
0/5SAST — SAST tool is not run on all commits -- score normalized to 0
5/5Security-Policy — security policy file detected
0/7.5Signed-Releases — sin datos
7.5/7.5Token-Permissions — GitHub workflow tokens follow principle of least privilege
7.5/7.5Vulnerabilities — 0 existing vulnerabilities detected
Datos de entrada utilizados
sourceopenssf_scorecard
checks_evaluated16
scorecard_versionv5.5.0
checks_inconclusive2
scorecard_aggregate4,4
Excluidos de la puntuación (sin datos o no aplicable): packaging, signed_releases. 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.

79Bueno · 0% del índice global
Cómo se puntúa
45/45Instrucciones para agentes — AGENTS.md
15/15Documentación legible por máquinas (llms.txt) — llms.txt presente
40/40Historial de commits legible — 99 de 100 commits humanos declaran su intención (asunto estructurado o cuerpo explicativo)
Datos de entrada utilizados
has_llms_txt
legible_history_share0,99
agent_instruction_filesAGENTS.md
agent_instruction_max_bytes10.111
Cómo se puntúa
12.6/18Arranque con un solo comando — go.mod (convención del toolchain, sin ejecutor de tareas)
22/22Pruebas automatizadas
11/11Configuración de lint / formato — .golangci.yml
11/11Verificación estática de tipos — Go (tipado estático)
10/10Entorno reproducible — lockfile
4/10Práctica demostrada con agentes — 2 de los últimos 100 commits con autoría o crédito de agente
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_nixno
has_tests
lockfilesgo.sum
has_dockerfileno
typed_language
bootstrap_files
has_devcontainerno
has_linter_config
typecheck_configs
agent_commit_share0,02
toolchain_manifestsgo.mod
dependency_bot_commit_share0
Cómo se puntúa
45/45Código verificable por tipos — Go (tipado estático)
54.3/55Tamaños de archivo manejables — 3/221 archivos fuente de más de 60 KB
Datos de entrada utilizados
primary_languageGo
largest_source_bytes100.219
source_files_sampled221
oversized_source_files3
Cómo se puntúa
0/40Esquema de API (OpenAPI/GraphQL/proto)
0/20Servidor MCP
40/40Ejemplos ejecutables — examples
Datos de entrada utilizados
example_dirsexamples
has_mcp_signalno
api_schema_files

Datos clave

0estrellas de GitHub
8contribuidores
329commits en los últimos 12 meses
9días desde el último push
2versiones publicadas
1factor bus
0issues abiertas
Goecosistemas de paquetes

Advertencias de recopilación de datos

  • Community profile unavailable
  • go package 'github.com/gogpu/gogpu' points at a different repository (https://github.com/gogpu/gogpu); excluded from ecosystem scoring
  • GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Más detalle

OpenSSF Scorecard 4.4 / 10
4.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-30 12:00 UTC

10Binary-Artifactsno binaries found in the repo
0Branch-Protectionbranch protection not enabled on development/release branches
0CI-Tests0 out of 2 merged PRs checked by a CI test -- score normalized to 0
0CII-Best-Practicesno effort to earn an OpenSSF best practices badge detected
0Code-ReviewFound 0/28 approved changesets -- score normalized to 0
3Contributorsproject has 1 contributing companies or organizations -- score normalized to 3
10Dangerous-Workflowno dangerous workflow patterns detected
0Dependency-Update-Toolno update tool detected
0Fuzzingproject is not fuzzed
10Licenselicense file detected
0Maintainedproject was created within the last 90 days. Please review its contents carefully
n/dPackagingpackaging workflow not detected
0Pinned-Dependenciesdependency not pinned by hash detected -- score normalized to 0
0SASTSAST tool is not run on all commits -- score normalized to 0
10Security-Policysecurity policy file detected
n/dSigned-Releasesno releases found
10Token-PermissionsGitHub workflow tokens follow principle of least privilege
10Vulnerabilities0 existing vulnerabilities detected
Dependencias directas 5
RegistroPaqueteRestricción de versiónManifiesto
Gogithub.com/go-webgpu/goffiv0.6.0go.mod
Gogithub.com/gogpu/gpucontextv0.21.1go.mod
Gogithub.com/gogpu/gputypesv0.5.1go.mod
Gogithub.com/gogpu/wgpuv0.30.22go.mod
Gogolang.org/x/sysv0.47.0go.mod
Todas las dependencias no recopilado

No fue posible recopilar el conjunto de dependencias resuelto para este informe: GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository

Informe JSON sin procesar legible por máquina
{
  "data": {
    "repo": {
      "topics": [],
      "is_fork": true,
      "size_kb": 16529,
      "has_wiki": true,
      "homepage": null,
      "languages": {
        "Go": 2201993,
        "Shell": 11051
      },
      "pushed_at": "2026-07-21T08:40:48Z",
      "created_at": "2026-07-20T19:25:08Z",
      "owner_type": "User",
      "updated_at": "2026-07-21T08:41:24Z",
      "description": "Pure Go GPU Application Framework — windowing, input, lifecycle, platform abstraction. Part of the GoGPU ecosystem.",
      "is_archived": false,
      "is_disabled": false,
      "license_spdx": "MIT",
      "default_branch": "main",
      "license_spdx_raw": "MIT",
      "primary_language": "Go",
      "significant_languages": [
        "Go"
      ]
    },
    "owner": {
      "blog": null,
      "name": null,
      "type": "User",
      "login": "wpdmitry",
      "company": null,
      "location": null,
      "followers": 0,
      "avatar_url": "https://avatars.githubusercontent.com/u/30390500?v=4",
      "created_at": "2017-07-23T16:10:13Z",
      "is_verified": null,
      "public_repos": 30,
      "account_age_days": 3293
    },
    "license": {
      "state": "standard",
      "spdx_id": "MIT",
      "raw_spdx": "MIT",
      "file_present": true,
      "scorecard_found": true,
      "profile_has_license": false
    },
    "activity": {
      "releases": [
        {
          "tag": "v0.44.12",
          "kind": "patch",
          "published_at": "2026-07-20T21:03:21Z"
        },
        {
          "tag": "v0.44.11",
          "kind": "patch",
          "published_at": "2026-07-20T20:12:21Z"
        }
      ],
      "recent_commits": [
        {
          "oid": "f852d27f214443fc32d86d77c3eddf114737d9ff",
          "body": null,
          "is_bot": false,
          "headline": "Merge branch 'gogpu:main' into main",
          "author_name": "wpdmitry",
          "author_login": "wpdmitry",
          "committed_at": "2026-07-21T08:40:48Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "488a7b02e00829f2832db96b945a5118edff53b5",
          "body": "fix(darwin): refresh cached window size on every live-resize tick",
          "is_bot": false,
          "headline": "Merge pull request #2 from wpdmitry/update-size-on-resize",
          "author_name": "wpdmitry",
          "author_login": "wpdmitry",
          "committed_at": "2026-07-20T21:03:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1295ec22dd17fceb81c632588974d70aacd2564a",
          "body": "checkResize() (which calls Window.UpdateSize()) only runs from the outer\nevent loop, which AppKit's live-resize modal loop blocks for the whole\ndrag. The actual per-tick path during a drag is windowDidResize:, which\npreviously only drove the GPU render hook and left the cached logical\nsize frozen un\n[…]\nize/Zoom/\nToggleFullScreen/...) that holds w.mu across a synchronous AppKit call;\non contention the cache is simply refreshed on the next tick.\n\nCo-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>",
          "is_bot": false,
          "headline": "fix(darwin): refresh cached window size on every live-resize tick",
          "author_name": "Dmitriy Syroezhkov",
          "author_login": null,
          "committed_at": "2026-07-20T20:54:54Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "74690212bc852f3adfc8e7780980a3fd52e350eb",
          "body": "Fix live-resize size cache staleness on macOS",
          "is_bot": false,
          "headline": "Merge pull request #1 from wpdmitry/update-size-on-resize",
          "author_name": "wpdmitry",
          "author_login": "wpdmitry",
          "committed_at": "2026-07-20T20:12:21Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "af5c58c7b139495d040f3d2865ffb15eda2e5c58",
          "body": "- checkResize() previously deferred UpdateSize() until live-resize\n  ended, so Window.Size()/LogicalSize() returned stale dimensions\n  while the user was dragging to resize\n- Now UpdateSize() runs unconditionally (cheap NSView bounds read);\n  only GPU surface reconfiguration and resize-event dispatch remain\n  deferred until the drag ends\n- Add darwin test exercising UpdateSize() during InLiveResize()",
          "is_bot": false,
          "headline": "Fix live-resize size cache staleness on macOS",
          "author_name": "Dmitriy Syroezhkov",
          "author_login": null,
          "committed_at": "2026-07-20T20:00:40Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f1577ff27976041823dd9d3d184f4ce5999794d4",
          "body": null,
          "is_bot": false,
          "headline": "fix(linux): WindowID stamping + X11 multi-window + docs v0.44.10 (#382)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-20T19:43:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "985c68a255e45e5438de71ba83705c2dddbb9c21",
          "body": "…ow (#381)\n\n* fix/linux-window-id-stamping : Add windows ID\n\n* fix/linux-window-id-stamping : Fix on after rewiew",
          "is_bot": false,
          "headline": "fix(linux): stamp WindowID on all X11/Wayland events + X11 multi-wind…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-07-20T19:06:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "67bc76d5aacc7f6462ebfddbe421a43f7c6c877b",
          "body": null,
          "is_bot": false,
          "headline": "deps: wgpu v0.30.21 → v0.30.22 (Metal MSAA Intel Mac fix) (#378)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-17T15:45:56Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a7c951290a4fe64fcaaffae6207c180cce18d1d5",
          "body": null,
          "is_bot": false,
          "headline": "deps: wgpu v0.30.20 → v0.30.21 (software backend fixes) (#376)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-15T19:48:36Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "04b819cb16ddda009639ce592aea710e18c4fef4",
          "body": "* fix: pixelPresented flag — frame lifecycle coordination for PresentPixels (ADR-052)\n\nWriteSurfacePixels via PresentPixels bypasses Acquire→Present cycle but\nendFrameForSurface had no knowledge of this, causing PRESENT ERROR on\nsoftware backend every frame and stale texture renders via flushClear.\n\n[…]\nReset flag in prepareLazyAcquire and resetLazyState to prevent cross-frame leak\n\n* deps: wgpu v0.30.19 → v0.30.20 (PresentPixels check-before-mutate, DX12 UMA)\n\n* docs: CHANGELOG + ROADMAP for v0.44.7",
          "is_bot": false,
          "headline": "fix: pixelPresented frame lifecycle + deps wgpu v0.30.20 (#375)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-14T12:13:42Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "d9a0822e2758eb0aa2ab60645b27736fd973ad53",
          "body": "…19 (#372)\n\n* fix(wayland): flush EAGAIN retry with errno capture (#368)\n\nFlushError type + flushWithRetry() — GLFW pattern with poll(POLLOUT, 4ms).\n8 event-loop callers routed. ADR-051.\nDeps: wgpu v0.30.18→v0.30.19.\n\n* fix: platform bugs #364-367 — wheel HiDPI, browser scroll, NSTextAlignment, phan\n[…]\nllEvent X/Y DPI divide on Windows HiDPI\n- #366: browser wheel X/Y from offsetX/offsetY\n- #365: NSTextAlignment runtime.GOARCH for x86_64 vs arm64\n- #364: discard pointer events with nil NSEvent.window",
          "is_bot": false,
          "headline": "fix: Wayland flush EAGAIN + platform bugs #364-368 + deps wgpu v0.30.…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-12T11:09:35Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "696658d544b985a19ac2b86ad781dfe8d5c604f2",
          "body": "- Wayland fractional scale support (@kivutar #369)\n- WriteSurfacePixels bridge (#370)\n- goffi v0.6.0 errno always-capture migration (77 call sites)\n- Vulkan CmdSetBlendConstants fix (wgpu v0.30.18)",
          "is_bot": false,
          "headline": "feat: Wayland fractional scale + deps wgpu v0.30.18, goffi v0.6.0 (#371)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-12T08:52:51Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f48789950112eb98d83288c2cac17143f3416eb0",
          "body": "… wp_viewporter (#369)\n\n* fix: support Wayland fractional scale\n\n* fix: refine Wayland fractional scale handling",
          "is_bot": false,
          "headline": "feat(wayland): fractional scale support with wp_fractional_scale_v1 +…",
          "author_name": "Jean-André Santoni",
          "author_login": "kivutar",
          "committed_at": "2026-07-12T07:49:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "11d222f21252071e5e634a12fde46e298fbe1f9d",
          "body": "ContextRenderTarget implements ggcanvas.SurfacePixelWriter for\nzero-copy CPU→window present on software backend (ADR-050).\nDeps: wgpu v0.30.13→v0.30.15, x/sys v0.46.0→v0.47.0.",
          "is_bot": false,
          "headline": "feat: WriteSurfacePixels bridge + deps wgpu v0.30.15 (#370)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-12T01:44:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b9347b583da46d48ca1e28354c631a8a2350fd4b",
          "body": "…#363)",
          "is_bot": false,
          "headline": "deps: wgpu v0.30.13 — software backend fullscreen quad optimization (…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-10T09:15:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1bc2bdec7516090fbaaf02f0d24989258b290b78",
          "body": null,
          "is_bot": false,
          "headline": "deps: wgpu v0.30.12 — SurfaceTexture.CreateView fix (#362)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-10T06:54:26Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "05784724abb89bbad483f0fa65440deb0e578c4a",
          "body": "… #358)",
          "is_bot": false,
          "headline": "docs: CHANGELOG + ROADMAP for v0.44.1 (macOS live resize fix, @lkmavi…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-07T21:56:49Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e6c6440b53bf4796ff860ac425307b7d2b98ba4b",
          "body": "… refactor (#358)\n\n* fix(app): eliminate live-resize IOSurface churn via transaction-present toggle\n\nReplace the resize hook's ws.resize() call (setDrawableSize: at 60 Hz during\ndrag) with a render-only path:\n- RequestResize queues the new size for the render thread; swapchain is\n  reconfigured once\n[…]\n added;\n  non-macOS platforms unaffected via type-assertion guard\n\n* fix-metal : Add new tests and fix golint error\n\n* fix-metal : Add new tests and fix golint error\n\n* fix-metal : Fix on after rewiew",
          "is_bot": false,
          "headline": "fix(macOS): live-resize IOSurface churn + transaction present + Run()…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-07-07T21:54:05Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "a61b972656ec586ca90f40dcec9e77c0acd2e3fd",
          "body": "* feat: multi-backend auto-selection — enumerate DX12+Vulkan+GLES, pick best GPU\n\nAuto mode now creates wgpu Instance with multi-backend mask instead of\nsingle-backend. Old GPUs without Vulkan get DX12 or GLES hardware\nacceleration. Surface created before RequestAdapter for GLES participation.\nBackend name determined from selected adapter.\n\nFixes #357\n\n* deps: wgpu v0.30.9 → v0.30.10",
          "is_bot": false,
          "headline": "feat: multi-backend auto-selection + deps wgpu v0.30.10 (#359)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-07T21:15:10Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c73c0e537b2183d32884635664eb81aeef933dfd",
          "body": null,
          "is_bot": false,
          "headline": "deps: wgpu v0.30.9 + goffi v0.5.6 — callback stack-move fix (#356)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-05T09:30:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "591cbb8005f0b1b401c40a4cb7e90f75b3889e85",
          "body": "…nd fixes (#355)\n\n* fix(windows): queue EventExpose on WM_PAINT for event-driven rendering\n\nWithout this, the window stays black after alt-tab or uncovering\nuntil a mouse/keyboard event arrives. Matches the X11 Expose pattern.\n\nFixes #354\n\n* deps: wgpu v0.30.7 → v0.30.8 (software backend: MSAA rejection, BGRA blending, dynamic offsets)\n\n* docs: CHANGELOG + ROADMAP for v0.43.3 (software backend fixes, ui#158)",
          "is_bot": false,
          "headline": "fix(windows): WM_PAINT EventExpose + deps wgpu v0.30.8 software backe…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-01T09:51:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c4ba225365f29fbaf59dd6ac7a4b908e58d2be2e",
          "body": "…, @samyfodil #353)",
          "is_bot": false,
          "headline": "docs: CHANGELOG + ROADMAP + ARCHITECTURE for v0.43.2 (X11 window icon…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-07-01T00:56:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6299085e7529311ab3e955a8d9ad347f86edfb43",
          "body": "* feat(x11): wire _NET_WM_ICON for taskbar/decoration icon support\n\nAdd Config.WithIcon(image.Image) to set the window icon on X11 via the\nEWMH _NET_WM_ICON property. The image is converted to the CARDINAL/32\nARGB wire format (non-premultiplied 0xAARRGGBB) expected by EWMH.\n\n- Intern _NET_WM_ICON in\n[…]\ne to inject a mock, then use it in initPlatform to make\nthe CreateWindow call reachable without a real display. Add\nTestInitPlatform_PropagatesIcon which verifies Icon is forwarded to\nplatform.Config.",
          "is_bot": false,
          "headline": "feat(x11): wire _NET_WM_ICON for taskbar/decoration icon support (#353)",
          "author_name": "Samy Fodil",
          "author_login": "samyfodil",
          "committed_at": "2026-07-01T00:53:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "e3652792c62ad35f4bd21d0ee23c037d2a5c6184",
          "body": "…lkmavi #352)",
          "is_bot": false,
          "headline": "docs: CHANGELOG for v0.43.1 (header alignment + multi-window fixes, @…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-30T18:33:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a876b99908db0a02b02e3795a61b4e35d448a053",
          "body": "* feat/header-positioning-and-resize-fix :   Add header alignment support for window titles\n: Implement HeaderAligner interface across platforms to control title bar\n  positioning (center/left/right). On macOS, supports transparent title bar\n  with full-size content view for left/right alignment and\n[…]\n-fix : Fix on after rewiew\n\n* feat/header-positioning-and-resize-fix : Fix on after rewiew\n\n* feat/header-positioning-and-resize-fix : nil live resize hook on window close + route NSEvents by NSWindow",
          "is_bot": false,
          "headline": "feat: header alignment API + macOS live resize rendering (#352)",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-30T17:35:34Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "519c3a0eeb9957529f9feab7a1d394a410c3e750",
          "body": "Safe-by-default: 0% CPU when idle instead of 100%.\nFollows winit 0.29 precedent (ControlFlow::Poll → Wait).\nGames use WithContinuousRender(true) explicitly.\n\nChanges:\n- DefaultConfig().ContinuousRender: true → false\n- Updated doc comments, tests, README, ARCHITECTURE.md\n- Removed redundant WithContinuousRender(false) from hidpi example",
          "is_bot": false,
          "headline": "feat: event-driven rendering by default (winit pattern, v0.43.0)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-28T23:41:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b573fb7106d4cc6ab6d98568dd5eeed887df1c04",
          "body": null,
          "is_bot": false,
          "headline": "docs: CHANGELOG + ROADMAP for v0.42.11 (golden tests + RenderToImage)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-28T12:31:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "02e2108d24986a63a321dd7690118b04b6e07df3",
          "body": "* feat/add-golden-tests : Add golden tests + change renderer\n\n* feat/add-golden-tests : Fix golint ci\n\n* feat/add-golden-tests : Fix tests\n\n* feat/add-golden-tests : Fix on after rewiew",
          "is_bot": false,
          "headline": "feat: golden tests + RenderToImage for headless GPU rendering (@lkmavi)",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-28T12:26:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f67d871f4e25a0b0b498f33be822284377b28255",
          "body": "…(v0.42.10)\n\nDelete local bytesPerPixelForFormat switch table — replaced by\ngputypes.TextureFormat.BlockCopySize() (canonical, 87 formats,\nRust wgpu-types parity). Fixes RG16 bug (returned 8, correct is 4).\n\ndeps: gputypes v0.5.0 → v0.5.1, wgpu v0.30.5 → v0.30.6.\nFEAT-GPUTYPES-001 Phase 3.",
          "is_bot": false,
          "headline": "fix: migrate to gputypes.BlockCopySize — RG16 bug fix + deps v0.30.7 …",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-28T11:29:35Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "a8b72ce132c1956c933b1bb366d04aadc7df848f",
          "body": "…42.9)\n\n* fix(wayland): add wl_surface.frame callback gating for animation (ui#152, v0.42.9)\n\nImplements winit 3-state machine (None/Requested/Received) to gate\nrender loop from outrunning Wayland compositor's presentation rate.\nWithout this, CSD subsurface desync during animation was visible on\ncam\n[…]\nmoves SyncFrame from app.go main loop (now inside endFrameForSurface).\n\n* docs: CHANGELOG + ROADMAP for v0.42.9 (frame callback gating)\n\n* fix: nil-check platWindow in endFrameForSurface (test safety)",
          "is_bot": false,
          "headline": "fix(wayland): add wl_surface.frame callback gating for animation (v0.…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-28T08:44:38Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "55bc4527714e2ad6bec5cd66b092b48d7f82e003",
          "body": null,
          "is_bot": false,
          "headline": "fix: deps wgpu v0.30.5 — Software backend text rendering fix (v0.42.8)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-27T06:42:58Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9cb38d697e1f2c4f89cc6e4adabeb37b86d15aa4",
          "body": null,
          "is_bot": false,
          "headline": "fix: deps wgpu v0.30.4 — Metal stencil fix (v0.42.7)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-25T19:37:45Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7e749e1d5f7bff1f33337b82af0e1a25d71e66c0",
          "body": "…n (#338)\n\n- fc-match resolves full fontconfig chain including distro defaults\n  in /etc/fonts/conf.d/ (2-second timeout, no-op if not installed)\n- ErrSurfaceLost handling in present() for symmetric error recovery\n- deps: wgpu v0.30.2 → v0.30.3 (SPIR-V tanh + integer clamp, @amery)\n\nDetection chain (ADR-047):\nenv var → wl_output.geometry → HiDPI → fontconfig → fc-match → None",
          "is_bot": false,
          "headline": "fix(platform): add fc-match subprocess fallback for subpixel detectio…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-25T06:17:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ce2eed64457b3298b0d1479fa3b6b95df186eccf",
          "body": "…ze flicker (#342)\n\n* fix(renderer): recover surface on ErrSurfaceOutdated in present()\n\nThe acquire and present paths handled the identical wgpu.ErrSurfaceOutdated\ndifferently. recoverFromAcquireError reconfigures the surface and logs at\nDebug; present() just logged a scary ERROR and did nothing, r\n[…]\nPlumb an Expose event through to RequestRedraw so revealed regions\n  repaint instead of showing stale/undefined pixels in render-on-demand mode.\n- Trim verbose comments; correct the CHANGELOG wording.",
          "is_bot": false,
          "headline": "fix: recover surface on ErrSurfaceOutdated in present + stop X11 resi…",
          "author_name": "Samy Fodil",
          "author_login": "samyfodil",
          "committed_at": "2026-06-25T06:04:59Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "6df6085631445229381582c95e0ec594a397f13c",
          "body": "Complete ADR-047: bind wl_output via Pure Go registry during init,\nroundtrip for geometry event, store subpixel on waylandPlatform.\nSubpixelLayout() now reads compositor-reported value (EDID-based).\n\nDetection order: env var → wl_output.geometry → fontconfig → None.\nMatches Qt6 pattern (hardware source primary, config fallback).\n\nTests: parseSubpixelEnvVar (8 cases), env override beats HiDPI,\nwlOutputSubpixelToLayout (7 cases mapping 0-5 + out of range).",
          "is_bot": false,
          "headline": "fix(wayland): wire wl_output.subpixel to detection chain (v0.42.5)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-24T14:30:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5f0f47203922eb4b7da9e77ac616a05d3917e817",
          "body": "…displays (v0.42.4)\n\nChange default from SubpixelRGB to SubpixelNone on Wayland and X11\nwhen no fontconfig/Xft.rgba override is found. Prevents color fringing\non BGR/unknown monitors (reported on Void Linux + niri + HDMI).\n\n- Add GOGPU_SUBPIXEL_LAYOUT env var override (rgb/bgr/vrgb/vbgr/none)\n- Pars\n[…]\nfaults to SubpixelNone\n- Extract shared subpixel string constants (goconst lint compliance)\n- Update tests to expect SubpixelNone defaults\n\nADR-047. Windows/macOS/Browser unaffected (already correct).",
          "is_bot": false,
          "headline": "fix(platform): subpixel layout detection defaults to None on unknown …",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-24T13:53:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b3a0b77bcf5ee6f1b179e232521c73d70c9e965a",
          "body": "…#336)",
          "is_bot": false,
          "headline": "docs: CHANGELOG v0.42.3 — macOS resize fix, API polish (@lkmavi #335 …",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-24T12:09:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "978ec071e8075be6690293a8523273597551113d",
          "body": "…334)\n\n* feat/window-background-2 : SetMinSize / SetMaxSize — runtime + Config API\n\n* feat/window-background-2 : Del cover.out\n\n* feat/window-background-2 : Fix golint",
          "is_bot": false,
          "headline": "feat(app): SetMinSize/SetMaxSize — runtime + Config, all platforms (#…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-24T11:56:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c26792414e0c15ded31c671eb9a223af929a1395",
          "body": "…s, sentinels)\n\n* feat/window-background : fix macOS live resize + API polish (SetTitle, OnFocus, sentinels)\n\n* feat/window-background : Add new tests\n\n* feat/window-background : Dell out file\n\n* feat/window-background : Fix on after rewiew",
          "is_bot": false,
          "headline": "feat(app): fix macOS live resize blank + API polish (SetTitle, OnFocu…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-24T11:34:14Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbcb6a8ddc8230644a200fdae7d72ccf793eba7d",
          "body": "Follow-up to #332: ensure platWindow.Destroy() is called when\ninitRenderer fails. On Windows, win32Window.Destroy calls\nDestroyWindow(hwnd) — skipping it leaks the window handle.\nOn X11/macOS Destroy is a no-op (handled by manager.Destroy).",
          "is_bot": false,
          "headline": "fix(app): add platWindow.Destroy in initRenderer error path (v0.42.2)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-23T19:58:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "3366670113554ddd4736e010b1782e0032264f38",
          "body": "…shutdown SIGSEGV)\n\nOn X11/NVIDIA, App.Run's teardown released the Vulkan instance (unloading\nthe driver ICD) before the X11 Display was closed. The display is closed by\nmanager.Destroy() -> x11Platform.Destroy() -> Platform.Destroy() ->\nxlibHandle.close() -> XCloseDisplay (x11PlatformWindow.Destroy\n[…]\nICD is still loaded, then release the instance, then stop\nthe render thread.\n\nVerified on X11 + NVIDIA RTX 3050 Ti (driver 550, pure-Go Vulkan backend,\nCGO_ENABLED=0): clean exit 0 instead of SIGSEGV.",
          "is_bot": false,
          "headline": "fix(app): close X11 Display before releasing Vulkan instance (NVIDIA …",
          "author_name": "Samy Fodil",
          "author_login": "samyfodil",
          "committed_at": "2026-06-23T19:49:24Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "ea5e49d700331736180923e563abe907fe21bcdd",
          "body": null,
          "is_bot": false,
          "headline": "fix: deps wgpu v0.30.2, goffi v0.5.5 (v0.42.1)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-21T09:18:28Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "00f45cf02a3ff2916b91c4e356a6c4a9334185fd",
          "body": null,
          "is_bot": false,
          "headline": "docs: AGENTS.md — check star before suggesting",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-17T11:56:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f2a411fe56b9bd0f2dda99e31cd51cf2adf5e2fa",
          "body": null,
          "is_bot": false,
          "headline": "docs: add compose + editor to AGENTS.md ecosystem map",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-17T11:50:11Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c9719ab805b6bf19d93d02eadfa255cfb0bec51f",
          "body": null,
          "is_bot": false,
          "headline": "docs: llms.txt + SPONSORS.md link in AGENTS.md",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-17T11:46:20Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "2016692095a3181eea6995d0b5b134ee3a3cc3d5",
          "body": null,
          "is_bot": false,
          "headline": "docs: AGENTS.md — AI agent instructions for ecosystem users",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-17T11:42:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84facb75469f471eb26710c0bb4b6c4157ca4fc7",
          "body": null,
          "is_bot": false,
          "headline": "docs: first sponsor Inkflow = @omer316 attribution",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-16T20:23:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "42687bd4577bb7b6169a39f605e675e0d22ed3fa",
          "body": null,
          "is_bot": false,
          "headline": "fix: deduplicate Sponsors section in README",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-16T20:00:55Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7fe8ba1f3abc8a8a23fe53964d378473ae9dc9d4",
          "body": null,
          "is_bot": false,
          "headline": "docs: SPONSORS.md + first sponsor Inkflow recognition",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-16T19:56:53Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "4e9923dda13a572016e808105fe2dc73c05bdcb0",
          "body": "…ING)\n\ngpucontext v0.21.0: Device/Queue/Adapter changed from interfaces to opaque\nstruct tokens (unsafe.Pointer, reflect.Value pattern). Fixes v0.20.0 broken\nsentinel methods (Go spec: unexported methods can't be satisfied cross-package).\n\nwgpu v0.30.1: type-safe helpers (DeviceToHandle/DeviceFromHa\n[…]\nlate\nunsafe.Pointer — consumers never import unsafe.\n\ngogpu adapter uses wgpu helpers: zero unsafe imports, zero nolint directives.\n8 bytes per handle, zero alloc, GC-safe, compile-time type distinct.",
          "is_bot": false,
          "headline": "feat!: GPU struct tokens + wgpu helpers — zero unsafe (v0.42.0, BREAK…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-15T18:34:32Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "7d4cb86c32e2cc13cfabd08cee2a509aee6c1a6f",
          "body": null,
          "is_bot": false,
          "headline": "fix: deps wgpu v0.29.16 + lint cleanup (v0.41.15)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-15T15:10:34Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "66ab555264ccd574e67fc97afe4b643225a82108",
          "body": null,
          "is_bot": false,
          "headline": "docs: CHANGELOG + ROADMAP for v0.41.14 — HiDPI enterprise fix (#306)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-15T11:18:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6cd7a6d4eca1ba28c5d19f1059e0447ef855f7a5",
          "body": "…ate (@lkmavi, #306)\n\n* fix/306-macos : Fix ScaleFactor() macos\n\n# Conflicts:\n#\texamples/hidpi/main.go\n#\tinternal/platform/scale.go\n\n* fix/306-macos : Fix golint\n\n* fix/306-macos : Add fix multimonitor cases\n\n* fix/306-macos : Resolve conflict\n\n* fix/306-macos : Fix formating",
          "is_bot": false,
          "headline": "fix: macOS HiDPI physical-size tracking + windowDidChangeScreen deleg…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-15T11:14:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "84f76d42365ccbada4347fe897212b75e7b06b4e",
          "body": "…lkmavi, #306)",
          "is_bot": false,
          "headline": "fix: Windows HiDPI pre-scale + verify — ADR-044 enterprise pattern (@…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-15T10:59:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5519b2d8406484e52645e96991abc57052231393",
          "body": null,
          "is_bot": false,
          "headline": "fix: deps wgpu v0.29.15 + naga v0.17.15 + ROADMAP update (v0.41.13)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-15T10:09:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "655b9801081fdd492e1f6adbd9597d84fbcfb7a3",
          "body": "…stemScaleFactor (@lkmavi, #306)\n\n* fix/306-macos : Fix ScaleFactor() macos\n\n* fix/306-macos : Fix golint\n\n* fix/306-macos : Fix golint config examples path\n\n* fix/306-macos : Fix add new tests",
          "is_bot": false,
          "headline": "fix: macOS ScaleFactor three-tier resolution — PlatScaleProvider + Sy…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-15T08:59:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "b4ed5fa39b3c023abd6cd60261f0e4825e940a44",
          "body": "* fix: CSD GNOME artifact + macOS layer-hosting + x/sys v0.46.0 (v0.41.12)\n\n* fix: gofmt trailing empty doc comment line",
          "is_bot": false,
          "headline": "fix: CSD GNOME artifact + macOS layer-hosting + x/sys v0.46.0 (v0.41.12)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-14T23:08:19Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "49115272af67abf7ddd21c4d222283c4e34968a5",
          "body": "…kmavi, #300)\n\n* fix/300 : Fix artefact tfrom GNOME : Fix hiden bar macos\n\n* fix/300 : Fix formating",
          "is_bot": false,
          "headline": "fix: CSD GNOME artifact + macOS layer-hosting + KDE SSD detection (@l…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-14T22:56:44Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "48dfe75b3f9e3f51f8618d110c26bc600979d2e3",
          "body": "…41.11)\n\n* fix: CSD maximize/fullscreen geometry — enterprise pattern (#300)\n\n5 bugs fixed in Wayland CSD (winit/SCTK + GTK4 enterprise pattern):\n\n1. Title bar at (0,-tbH) on maximize instead of (0,0) — no longer\n   covers Vulkan content (winit AdwaitaFrame pattern)\n2. Fullscreen state parsed from x\n[…]\nhange even without size change\n\nVerified: GTK4, winit/SCTK, SDL3/libdecor, GLFW all agree on\nfullscreen=hide-all, maximize=keep-titlebar enterprise consensus.\n\n* docs: CHANGELOG + ROADMAP for v0.41.11",
          "is_bot": false,
          "headline": "fix: CSD maximize/fullscreen geometry — enterprise pattern (#300, v0.…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-14T10:34:58Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "abb4caf28637e9da85f179e4368fb879c0a4dd75",
          "body": null,
          "is_bot": false,
          "headline": "docs: CHANGELOG + ROADMAP for v0.41.10",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-14T08:47:32Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "29e4c182b5e6cc07858b97a65bdd6982a409ab70",
          "body": "…, Show() (@lkmavi, #292)\n\n* fix/292 : Fix multiwindow\n\n* fix/292 : Fix golint\n\nfix/292 : Fix golint\n\nfix(gles): re-add wgpu-local replace for GLES MakeCurrent fix\n\nRestore the local wgpu replace directive to pick up the fix for\nglFenceSync OOM + eglSwapBuffers EGL_BAD_SURFACE on Wayland GLES 3.0.\n\n\n[…]\no-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>\n\nfix/292 : Return objc format Add deep copy slice\n\nfix/292 : Add temporary replay\n\n# Conflicts:\n#\tgo.sum\n\n* fix/292-gless : Fix on after rewiew",
          "is_bot": false,
          "headline": "fix: Wayland multiwindow — per-proxy callbacks, secondary connections…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-14T08:38:29Z",
          "body_truncated": true,
          "is_coding_agent": true
        },
        {
          "oid": "ef9acd3aad923ac48a20e6b78389dc021ad73478",
          "body": null,
          "is_bot": false,
          "headline": "docs: fix GoGPU (ecosystem) vs gogpu (library) naming",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-13T08:57:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fca3ac320c8cbb6dbd935f1f8200fc4b142ad27d",
          "body": "- README: Overview as app framework, ecosystem table (15 repos + Used By),\n  architecture diagram (all 5 platforms), @lkmavi star contributor,\n  @z46-dev + @omer316 community champions, Software screen+headless\n- CONTRIBUTING: project structure (no rust/, + sound/), platform table\n  (5 platforms × all backends), current help-wanted areas\n- ROADMAP: Triple Backend (ADR-038), v0.41.9\n- SECURITY: v0.41.x supported, Pure Go FFI considerations",
          "is_bot": false,
          "headline": "docs: enterprise README/CONTRIBUTING/ROADMAP/SECURITY update",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-13T08:48:41Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d84fb1c6225ae3b090c52e9a8ffb491968badc76",
          "body": null,
          "is_bot": false,
          "headline": "docs: add Open Collective sponsorship badges + Sponsors section",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-13T08:10:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7f6fc4b740867b05dff3f4072201c74f7220fc24",
          "body": null,
          "is_bot": false,
          "headline": "fix: deps wgpu v0.29.14 — GLES vertexBuffers fix (v0.41.9)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-11T17:00:43Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "fd42b00b60dc333d935328112551e7302ed2b5b7",
          "body": "…41.8)",
          "is_bot": false,
          "headline": "fix: deps wgpu v0.29.13 + naga v0.17.14 — GLES enterprise parity (v0.…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-11T06:14:54Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "9ef5c6a090dae675d0ead32b4745a49b0786f935",
          "body": null,
          "is_bot": false,
          "headline": "docs: CHANGELOG + ROADMAP for v0.41.7",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-08T10:34:30Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f72baef08f1f685d8f9fac99eebd92ef29fac4cc",
          "body": "…kmavi, #292)\n\n* fix/gless-panic : Fix panic depends on wgpu\n\n* fix/292-gles : Add new wgpu version => 0.29.12\n\n* fix/292 : Fix on after rewiew : Fix the issue where the window would repeatedly close or fail to close when clicking the 'X' button.\n\n* fix/292 : Fix golint error\n\n* fix/292 : Fix menu kde wayland error\n\n* fix/292 : Fix golint error",
          "is_bot": false,
          "headline": "fix: Wayland GLES init + KDE AppMenu + CSD cursor + wgpu v0.29.12 (@l…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-08T10:14:23Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "0ff52399ebc95b636de3a02cb0c543d0ebaf236b",
          "body": "… v0.41.6)\n\n* fix: deps wgpu v0.29.8 — Wayland display wrapper pattern (queue mismatch fix, #292)\n\n* fix: Wayland SIGSEGV — dataOfferTypes NULL interface + wgpu v0.29.9 (#292)\n\nwl_data_device.data_offer event had NULL wl_message.types array.\nlibwayland create_proxies() read types[0]=NULL, created wl\n[…]\nit (wayland-client.c\nqueue_event line 1643), and WSL2 reproduction.\n\nDeps: wgpu v0.29.8 → v0.29.9 (SHM triple-buffer freeze fix).\n\n* ci: remove fail_ci_if_error from Codecov (GPG infrastructure issue)",
          "is_bot": false,
          "headline": "fix: Wayland SIGSEGV — dataOfferTypes NULL interface + CI OIDC (#292,…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-07T16:55:10Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5964f455db033aa2fd08075e0b1fe665450c0795",
          "body": "* fix: hidden-then-show window creation + wgpu v0.29.6 (v0.41.5)\n\nWindow creation now follows GLFW/Ebiten/SDL3/Flutter pattern:\n- CreateWindowExW without WS_VISIBLE (all platforms)\n- Show() after GPU initialization (eliminates black flash)\n- Win32: SW_SHOWNA + BringWindowToTop + SetForegroundWindow \n[…]\nuring CreateWindowExW (Raymond Chen bug class).\nDeps: wgpu v0.29.4 → v0.29.6 (fence ordering, Fence.Signal error return).\n\n* fix: deps wgpu v0.29.7 — Wayland SIGSEGV fix (obtainWlShm eager init, #292)",
          "is_bot": false,
          "headline": "fix: hidden-then-show window creation + wgpu v0.29.7 (v0.41.5)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-06T18:47:14Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5185ac9112a22106ad5f32e853557769cbb81aa1",
          "body": "Move all app Wayland objects to custom wl_event_queue via\nwl_proxy_create_wrapper pattern. Default queue left for Mesa\nVulkan WSI. DispatchDefaultQueue now uses prepare_read_queue +\ndispatch_queue_pending on app queue only. Prevents our dispatch\nfrom firing Mesa's internal wl_buffer.release callbacks.\n\nCSD DispatchCSDEvents now holds displayMu for thread safety.\ndeps: wgpu v0.29.1→v0.29.2, goffi v0.5.2→v0.5.3.",
          "is_bot": false,
          "headline": "fix: Wayland app event queue + CSD mutex + deps (ADR-041, #292, v0.41.4)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-06T04:55:39Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a98e2fee31630efce4d1bb794c2b2b344c00313",
          "body": "…1, #292)\n\nAdd WaitForConfigure() blocking dispatch loop matching SDL3/winit pattern.\nxdg-shell spec requires xdg_surface.configure before first buffer attach,\nbut single wl_display_roundtrip is not guaranteed to deliver it.\n\n- Add initialConfigureReceived flag to LibwaylandHandle\n- Set flag in xdgS\n[…]\nded 50 iters)\n- Gate p.primary.configured on actual configure receipt\n- Defense-in-depth: log zero-dimension PhysicalSize at init\n\nFixes crash on all Wayland compositors (GNOME/KDE/Sway) with any GPU.",
          "is_bot": false,
          "headline": "fix: Wayland SIGSEGV — configure gate + display thread safety (ADR-04…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-05T14:48:37Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "b27671e499ad49fc099d633e2b30001997ede624",
          "body": null,
          "is_bot": false,
          "headline": "docs: CHANGELOG for v0.41.2",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-03T09:00:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "217a23d393cb050a1a3f12c0b02606df363d0329",
          "body": "…opCh shutdown logging\n\n* adr-40 : Resolve conflict\n\n* adr-40 : Fix test and golint\n\n* adr-40 : Fix Minor Notes 1,2,3\n\n* adr-40 : Fix ci pipline\n\n* adr-40 : Fix 0x02 is NO_AUTO_START, not NO_REPLY_EXPECTED.",
          "is_bot": false,
          "headline": "fix: D-Bus NO_REPLY_EXPECTED flag + dbusAssembleMsg DRY refactor + st…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-03T08:54:12Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "5259f10cbbfcaf7efdbc37c4cab7fc5829c3fe0d",
          "body": "- Remove dead stopCh field from linuxMenuState\n- Track RegisterWindow reply serial, log registrar rejection\n- Replace 3x silent _ = write discards with logger().Debug\n- Parse ErrorName header field (code 4) in dbusMsg\n- Update ARCHITECTURE.md: Linux menus now D-Bus AppMenu (KDE/Unity)\n- Linux D-Bus AppMenu from @lkmavi PR #288",
          "is_bot": false,
          "headline": "fix: D-Bus menu enterprise cleanup + Linux AppMenu docs (v0.41.1)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-03T06:00:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f6174b3c638189a90d83cfb54f7bc7dba30e33cd",
          "body": "…ase 2, #282)\n\n* adr-40 : Fix on after rewiew\n\n* adr-40 : Add Linux D-Bus AppMenu\n\n* adr-40 : Fix test and golint",
          "is_bot": false,
          "headline": "feat: Linux D-Bus AppMenu — native menu bar for KDE/Unity (ADR-040 Ph…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-03T05:33:04Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "7296ae4b0a6bcdfcfed6326ad166d283c7b0e6ce",
          "body": "Win32 native menu bar (ADR-040 Phase 1, @lkmavi PR #286).\nMenu lint cleanup: sync.Map.Clear(), gocritic truncateCmp, uint16 comment.\nCHANGELOG: v0.41.0 + restored v0.40.2 entry.\nREADME: file dialogs + native menus in features.\nARCHITECTURE.md: platform features matrix.",
          "is_bot": false,
          "headline": "feat: Win32 menus + docs update (v0.41.0)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-06-01T07:31:18Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "6fad73bea92c32654a8614571da4cdcef18263b3",
          "body": "…ase 1, #282)\n\n* feat/adr-40 : Add windows-hmenu\n\n* feat/adr-40 : Del bin file",
          "is_bot": false,
          "headline": "feat: Win32 native menu bar — HMENU + WM_COMMAND dispatch (ADR-040 Ph…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-06-01T06:41:29Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1a55118bc7d4c58fe8abaef76929418d694b758e",
          "body": "Add missing browserPlatform stubs (SetAppName, ShowOpenFileDialog,\nShowSaveFileDialog) — WASM build was broken since menu/dialog\ninterface expansion.\n\nLinux file dialogs: xdg-desktop-portal D-Bus + zenity/kdialog\nfallback (ADR-036 Phase 2, @lkmavi PR #283).",
          "is_bot": false,
          "headline": "fix: WASM build + Linux file dialogs (v0.40.2)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-31T18:26:50Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d88f28d6126852365aa961af97fc663b7bf892f9",
          "body": "…(ADR-036 Phase 2, #241)\n\n* feat/adr-36 : Add dialog linux\n\n* feat/adr-36 : Fix startPath\n\n* feat/adr-36 : Fix on after rewiew\n\n* feat/adr-36 : Fix waitResponse in dbus_linux.go now buffers the Response signal if it arrives before METHOD_RETURN",
          "is_bot": false,
          "headline": "feat: Linux file dialogs — xdg-desktop-portal D-Bus + zenity/kdialog …",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-05-31T17:35:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c10af4d89e77248dd377a834d4b0d59419f136ad",
          "body": "WebGPU spec and Rust wgpu Color::default() = {0,0,0,0} (transparent).\nOpaque black (A:1) destroyed alpha for compositing (ggcanvas, DrawTexture).\nPremultiplied alpha blending already correct — only clear value was wrong.",
          "is_bot": false,
          "headline": "fix: default clear color transparent black (BUG-RENDERER-001, #276)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-31T10:26:09Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "08ce5b249b2a2a266b9a47b2b81078e080bf9f55",
          "body": "… (#281)",
          "is_bot": false,
          "headline": "fix: file dialog review fixes — UTType migration, lint, HRESULT check…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-05-30T10:50:33Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "071a1ec4bb379f562162bdcb2f87aff1e37d5e25",
          "body": null,
          "is_bot": false,
          "headline": "feat: native file dialogs for macOS and Windows (ADR-036 Phase 1, #241)",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-05-29T10:12:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "ff29534babb07412d3ba584bba773910b172bfe6",
          "body": null,
          "is_bot": false,
          "headline": "docs: update README + ARCHITECTURE for ADR-038 (triple-backend)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-27T10:44:38Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "f514987945086c169b55af58e2acae75ccf569e8",
          "body": "Delete gpu/backend/rust/ (1827 LOC), renderer_rust.go, renderer_norust.go.\nRust/Native selection now inside wgpu via build tags (browser pattern).\ngogpu always calls wgpu.CreateInstance() — with -tags rust, wgpu routes\nto go-webgpu/webgpu → wgpu-native transparently.\n\nRemoved direct dependency on go-webgpu/webgpu from go.mod.",
          "is_bot": false,
          "headline": "refactor: ADR-038 remove Rust backend from gogpu (v0.40.0)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-27T10:28:02Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "d5520e56aac357f7784f4a695c8f9171db92d83c",
          "body": "* feat: Linux clipboard — X11 ICCCM selection + Wayland data_device (PLAT-009, ADR-037)\n\nX11: SetSelectionOwner + ConvertSelection + SelectionNotify/Request\nhandling. TARGETS negotiation. 1s timeout with event pump (SDL3 pattern).\nWrites to CLIPBOARD + PRIMARY.\n\nWayland: wl_data_device_manager/sourc\n[…]\ntern for uintptr→unsafe.Pointer conversion\nin dataOfferOfferCb. go vet forbids direct unsafe.Pointer(uintptr) but allows\nthe &local→*unsafe.Pointer indirection. See ebitengine/purego, golang/go#58625.",
          "is_bot": false,
          "headline": "feat: Linux clipboard + docs update (v0.39.3, #275)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-26T13:42:04Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "da8b8fddc3bf78a902e89601f4110ef04ea03ed6",
          "body": "…v0.39.2)\n\n* fix(wayland): damage_buffer before commit + Activated→EventFocus (#272, #273)\n\n#272: wl_surface.damage_buffer (opcode 9) called before configure-time\ncommit so compositor receives changed regions. Previously only CSD\nsurfaces were damaged, main surface was not.\n\n#273: xdg_toplevel Activ\n[…]\n\nbehavior. ShowCursor uses set_shape(default) when available.\n\n* docs: update CHANGELOG + ROADMAP for v0.39.2\n\nSeparate Added/Fixed sections. Add cursor shapes feature.\nFix release date to 2026-05-25.",
          "is_bot": false,
          "headline": "fix: platform fixes + Wayland cursor shapes (#270, #271, #272, #273, …",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-25T22:08:06Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "0ae6fd2912729efddc30e543e37b32f3408fbcb2",
          "body": "* feat: AppLifecycle enum + surface/app lifecycle callbacks (ADR-026 Phase 3)\n\nAppLifecycle: AppIdle → AppRunning → AppSuspending → AppSuspended → AppResuming.\nIsActive() bool, String(), App.Lifecycle() getter.\n\nSurface callbacks: OnSurfaceAvailable (once at init on desktop),\nOnSurfaceDestroyed (nev\n[…]\nor all states,\ndefault Idle, chainable callbacks, nil safety.\nCHANGELOG updated with full Phase 3 API description.\n\n* docs: CHANGELOG + ROADMAP + README for v0.39.1 (AppLifecycle, lifecycle callbacks)",
          "is_bot": false,
          "headline": "feat: AppLifecycle enum + lifecycle callbacks (ADR-026 Phase 3, v0.39.1)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-22T20:59:33Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "1db263c164bbf7ee4110c59c44d193240364e544",
          "body": "…wClosed (#223, v0.39.0)\n\n* refactor: split initNative into initDevice + initSurface (ADR-026)\n\nDevice creation no longer requires a window: RequestAdapter(nil) without\nCompatibleSurface. Vulkan/DX12 enumerate all adapters, GLES uses hidden\nwindow (wgpu v0.28.6). initSurface(ws) handles per-window s\n[…]\nGELOG updated with v0.39.0: QuitOnLastWindowClosed, renderer\ndecoupling, RenderTarget, SurfaceState, wgpu v0.28.7.\n\n* docs: ROADMAP entry for v0.39.0\n\n* docs: README Window Lifecycle section (ADR-026)",
          "is_bot": false,
          "headline": "feat: ADR-026 Universal App Lifecycle — RenderTarget, QuitOnLastWindo…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-22T07:23:11Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "af9497c60001691d374b9560639c10592a3ff4be",
          "body": null,
          "is_bot": false,
          "headline": "docs: CHANGELOG + ROADMAP for v0.38.0",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-21T20:20:59Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "1371eda3b9899c599153a45a06f1220ab034971a",
          "body": "… (#264, #265)\n\n* fix/264-add-custom-menu : Add custom menu\n\n* fix/264 : Add NewMenuWithTitle : Merge AddCustomMenu vs UpdateCustomMenu : Add convertMenuToPlatformItems",
          "is_bot": false,
          "headline": "feat: custom dynamic menus — SetCustomMenu, NewMenuWithTitle, Submenu…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-05-21T20:07:47Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "e642b3c5a09a09af929c09ef8719c70f1f410f62",
          "body": "… (v0.37.12)\n\n* docs: CHANGELOG + README for macOS system menu API (#259)\n\n* refactor: SurfaceState enum replaces configured bool (LIFECYCLE Phase 2, Step 2.1)\n\nSurfaceState tracks lifecycle: None → Ready → Configured → Lost.\nCanRender() method, explicit Outdated/Lost recovery in recoverFromAcquireE\n[…]\nut. Compile-time check added.\n9 tests (type assertion, SubpixelLayout delegation, nil app fallbacks).\nCHANGELOG updated.\n\n* docs: CHANGELOG + ROADMAP for v0.37.12 (PlatformProvider fix + wgpu v0.28.6)",
          "is_bot": false,
          "headline": "fix: PlatformProvider delegation + renderer decoupling + wgpu v0.28.6…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-21T19:48:13Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "151ff3011f313bcb01149e930838411e67c293f3",
          "body": "…#242, #259)\n\n* fix/242-add-menu : Add api menu\n\n* fix/242 : Fix initRenderer Fix itemAtIndex: called without argument : Fix Associated object with dangling pointer : Rename Enabled to Disabled bool : Del Send3Ptr/Send4Ptr Del duble cifSend5Ptr : Add log.Fatal(err)\n\n* fix/242 : Connect roles\n\n* fix/\n[…]\n\n* fix/242-add-menu : Fix  Role dropped in SetMenu() conversion : Del GetMenuSelectors() and double renderLoop.Stop()\n\n* fix/242-add-menu : Del renderLoop.Stop : Add  Role: platform.MenuRole(it.Role),",
          "is_bot": false,
          "headline": "feat: macOS system menu — SetMenu, GetSystemMenu, MenuRole, AppName (…",
          "author_name": "lkmavi",
          "author_login": "lkmavi",
          "committed_at": "2026-05-21T12:47:51Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "5171e5d00e06a9a5319e385ab1993af052ae82bf",
          "body": "Indirect validation nil guard (wgpu#189), Metal present fixes.",
          "is_bot": false,
          "headline": "chore(deps): wgpu v0.28.3 -> v0.28.5 (v0.37.11)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-21T11:51:31Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "867f609e4b16c8c2b2dbe47d6e421f442f7e6d3e",
          "body": "* fix: Wayland key repeat — timerfd replaces goroutine (#240, v0.38.0)\n\nLinux timerfd integrated into unix.Poll set (GLFW/winit pattern).\nFixes GUI freeze (goroutine never called WakeUp) and xkb data race.\nZero goroutines, kernel-level timer, main thread event generation.\n\n* fix: Wayland key repeat \n[…]\nLinux timerfd integrated into unix.Poll set (GLFW/winit pattern).\nFixes GUI freeze (goroutine never called WakeUp) and xkb data race.\nZero goroutines, kernel-level timer, main thread event generation.",
          "is_bot": false,
          "headline": "fix: Wayland key repeat — timerfd replaces goroutine (#240, v0.37.10)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-19T15:00:08Z",
          "body_truncated": true,
          "is_coding_agent": false
        },
        {
          "oid": "f78e8d818b177e8165ec774caa86320e42a6c0b2",
          "body": null,
          "is_bot": false,
          "headline": "chore(deps): wgpu v0.28.2 -> v0.28.3 (v0.37.9)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-17T18:15:00Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "8a30438e0ebc5700cdd5ec5eccca1d1613033937",
          "body": "Vulkan swapchain extent diagnostic logging + ActualExtent API.",
          "is_bot": false,
          "headline": "chore(deps): wgpu v0.28.1 -> v0.28.2 (v0.37.8)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-17T13:21:57Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "dcff8cfbd94c061a419b8ad6eb5172a3d4ef9103",
          "body": "Removed hardcoded ESC=close from platform layer. App receives\nKeyEscape as normal key event and decides. winit/GLFW/SDL3 pattern.",
          "is_bot": false,
          "headline": "fix: Windows ESC no longer force-closes window (#254, v0.37.7)",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-17T11:45:06Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "c24bf08649ebfa00c9d36792a53db7ad2de99756",
          "body": "…s (ADR-034, v0.37.6)\n\nReplace 70-entry Cyrillic-only map with GLFW/xkbcommon public domain table.\nCovers Latin, Cyrillic, Arabic, Greek, Hebrew, Thai, Korean, Japanese, math,\nbox-drawing, dead keys. Binary search, 3.3 KB. isLetter uses unicode.IsLetter.",
          "is_bot": false,
          "headline": "feat: universal keysym-to-Unicode table — 828 entries, all X11 script…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-17T11:02:17Z",
          "body_truncated": false,
          "is_coding_agent": false
        },
        {
          "oid": "bbfcf331c823daec0f9db73be48e48962dbe79bb",
          "body": "… v0.37.5)\n\nXkbSelectEvents subscribed to XkbGroupStateMask only (group changes).\nModifier changes (AltGr/Level3 press/release) never delivered to xkbcommon.\nAdded XkbModifierStateMask to subscription (SDL3/GTK4 pattern).\nGuillemets and all Level3 characters now work.",
          "is_bot": false,
          "headline": "fix: AltGr/Level3 on X11 — subscribe to modifier state changes (#233,…",
          "author_name": "Andrey Kolkov",
          "author_login": "kolkov",
          "committed_at": "2026-05-17T09:26:24Z",
          "body_truncated": false,
          "is_coding_agent": false
        }
      ],
      "releases_count": 2,
      "commits_last_year": 329,
      "latest_release_at": "2026-07-20T21:03:21Z",
      "latest_release_tag": "v0.44.12",
      "releases_from_tags": true,
      "days_since_last_push": 9,
      "active_weeks_last_year": 33,
      "days_since_latest_release": 9,
      "mean_days_between_releases": 0
    },
    "community": {
      "has_readme": false,
      "has_license": false,
      "has_description": false,
      "has_contributing": false,
      "health_percentage": null,
      "has_issue_template": false,
      "has_code_of_conduct": false,
      "has_pull_request_template": false
    },
    "ecosystem": {
      "packages": [
        {
          "name": "github.com/gogpu/gogpu",
          "exists": true,
          "license": null,
          "keywords": [],
          "ecosystem": "go",
          "matches_repo": false,
          "registry_url": "https://pkg.go.dev/github.com/gogpu/gogpu",
          "is_deprecated": false,
          "latest_version": "v0.47.0",
          "repository_url": "https://github.com/gogpu/gogpu",
          "versions_count": 202,
          "total_downloads": null,
          "dependents_count": null,
          "deprecation_note": null,
          "maintainers_count": null,
          "monthly_downloads": null,
          "first_published_at": null,
          "latest_published_at": "2026-07-30T08:54:50Z",
          "latest_version_yanked": null,
          "days_since_latest_publish": 0
        }
      ]
    },
    "popularity": {
      "forks": 0,
      "stars": 0,
      "watchers": 0,
      "fork_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_forks": 0
      },
      "star_history": {
        "days": [],
        "complete": true,
        "collected": 0,
        "total_stars": 0,
        "collected_at": null
      },
      "open_issues_and_prs": 0
    },
    "ai_readiness": {
      "has_nix": false,
      "example_dirs": [
        "examples"
      ],
      "has_llms_txt": true,
      "has_dockerfile": false,
      "has_mcp_signal": false,
      "bootstrap_files": [],
      "api_schema_files": [],
      "has_devcontainer": false,
      "typecheck_configs": [],
      "toolchain_manifests": [
        "go.mod"
      ],
      "largest_source_bytes": 100219,
      "source_files_sampled": 221,
      "oversized_source_files": 3,
      "agent_instruction_files": [
        "AGENTS.md"
      ],
      "agent_instruction_max_bytes": 10111
    },
    "dependencies": {
      "manifests": [
        "go.mod"
      ],
      "advisories": {
        "error": null,
        "scope": null,
        "source": null,
        "findings": [],
        "collected": false,
        "malicious": [],
        "truncated": false,
        "by_severity": {},
        "advisory_count": 0,
        "affected_count": 0,
        "assessed_count": 0,
        "malicious_count": 0,
        "assessed_package": null,
        "unassessed_count": 0,
        "direct_affected_count": 0
      },
      "ecosystems": [
        "go"
      ],
      "dependencies": [
        {
          "name": "github.com/go-webgpu/goffi",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.6.0"
        },
        {
          "name": "github.com/gogpu/gpucontext",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.21.1"
        },
        {
          "name": "github.com/gogpu/gputypes",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.5.1"
        },
        {
          "name": "github.com/gogpu/wgpu",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.30.22"
        },
        {
          "name": "golang.org/x/sys",
          "manifest": "go.mod",
          "ecosystem": "go",
          "version_constraint": "v0.47.0"
        }
      ],
      "all_dependencies": {
        "error": "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository",
        "source": null,
        "packages": [],
        "collected": false,
        "truncated": false,
        "total_count": null,
        "direct_count": null,
        "indirect_count": null
      }
    },
    "maintainership": {
      "issues": {
        "open_prs": 0,
        "merged_prs": 2,
        "open_issues": 0,
        "closed_ratio": null,
        "closed_issues": 0,
        "closed_unmerged_prs": 0
      },
      "bus_factor": 1,
      "bot_contributors": 0,
      "top_contributors": [
        {
          "type": "User",
          "login": "kolkov",
          "commits": 294,
          "avatar_url": "https://avatars.githubusercontent.com/u/3740898?v=4"
        },
        {
          "type": "User",
          "login": "lkmavi",
          "commits": 23,
          "avatar_url": "https://avatars.githubusercontent.com/u/273776245?v=4"
        },
        {
          "type": "User",
          "login": "samyfodil",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/76626119?v=4"
        },
        {
          "type": "User",
          "login": "wpdmitry",
          "commits": 3,
          "avatar_url": "https://avatars.githubusercontent.com/u/30390500?v=4"
        },
        {
          "type": "User",
          "login": "snakeru",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/72657?v=4"
        },
        {
          "type": "User",
          "login": "kivutar",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/442722?v=4"
        },
        {
          "type": "User",
          "login": "k-chimi",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/260343942?v=4"
        },
        {
          "type": "User",
          "login": "ppoage",
          "commits": 1,
          "avatar_url": "https://avatars.githubusercontent.com/u/45302620?v=4"
        }
      ],
      "contributors_sampled": 8,
      "top_contributor_share": 0.899
    },
    "quality_signals": {
      "has_ci": true,
      "has_tests": true,
      "ci_workflows": [
        "ci.yml"
      ],
      "has_docs_dir": true,
      "linter_configs": [
        ".golangci.yml"
      ],
      "has_editorconfig": false,
      "has_linter_config": true,
      "has_precommit_config": false
    },
    "security_signals": {
      "lockfiles": [
        "go.sum"
      ],
      "scorecard": {
        "checks": [
          {
            "name": "Binary-Artifacts",
            "score": 10,
            "reason": "no binaries found in the repo",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#binary-artifacts"
          },
          {
            "name": "Branch-Protection",
            "score": 0,
            "reason": "branch protection not enabled on development/release branches",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#branch-protection"
          },
          {
            "name": "CI-Tests",
            "score": 0,
            "reason": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#ci-tests"
          },
          {
            "name": "CII-Best-Practices",
            "score": 0,
            "reason": "no effort to earn an OpenSSF best practices badge detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#cii-best-practices"
          },
          {
            "name": "Code-Review",
            "score": 0,
            "reason": "Found 0/28 approved changesets -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#code-review"
          },
          {
            "name": "Contributors",
            "score": 3,
            "reason": "project has 1 contributing companies or organizations -- score normalized to 3",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#contributors"
          },
          {
            "name": "Dangerous-Workflow",
            "score": 10,
            "reason": "no dangerous workflow patterns detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dangerous-workflow"
          },
          {
            "name": "Dependency-Update-Tool",
            "score": 0,
            "reason": "no update tool detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#dependency-update-tool"
          },
          {
            "name": "Fuzzing",
            "score": 0,
            "reason": "project is not fuzzed",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#fuzzing"
          },
          {
            "name": "License",
            "score": 10,
            "reason": "license file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#license"
          },
          {
            "name": "Maintained",
            "score": 0,
            "reason": "project was created within the last 90 days. Please review its contents carefully",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#maintained"
          },
          {
            "name": "Packaging",
            "score": null,
            "reason": "packaging workflow not detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#packaging"
          },
          {
            "name": "Pinned-Dependencies",
            "score": 0,
            "reason": "dependency not pinned by hash detected -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#pinned-dependencies"
          },
          {
            "name": "SAST",
            "score": 0,
            "reason": "SAST tool is not run on all commits -- score normalized to 0",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#sast"
          },
          {
            "name": "Security-Policy",
            "score": 10,
            "reason": "security policy file detected",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#security-policy"
          },
          {
            "name": "Signed-Releases",
            "score": null,
            "reason": "no releases found",
            "documentation_url": "https://github.com/ossf/scorecard/blob/c395761df6afe1a69e476bc60a013a94bcbc153f/docs/checks.md#signed-releases"
          },
          {
            "name": "Token-Permissions",
            "score": 10,
            "reason": "GitHub workflow tokens follow principle of least privilege",
            "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": "f852d27f214443fc32d86d77c3eddf114737d9ff",
        "ran_at": "2026-07-30T12:00:26Z",
        "aggregate_score": 4.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": null,
      "oldest_open_prs": [],
      "last_merged_pr_at": "2026-07-20T21:03:21Z",
      "ci_last_conclusion": null,
      "oldest_open_issues": []
    }
  },
  "config": {
    "disabled_metrics": [],
    "disabled_categories": [],
    "disabled_components": {}
  },
  "source": {
    "url": "https://github.com/wpdmitry/gogpu",
    "host": "github.com",
    "name": "gogpu",
    "owner": "wpdmitry"
  },
  "metrics": {
    "overall": {
      "key": "overall",
      "band": "at_risk",
      "name": "Overall health",
      "note": null,
      "notes": [],
      "value": 47,
      "inputs": {
        "security": 44,
        "vitality": 77,
        "community": 12,
        "governance": 45,
        "engineering": 52
      },
      "components": []
    },
    "categories": [
      {
        "key": "vitality",
        "band": "good",
        "name": "Vitality",
        "value": 77,
        "weight": 0.22,
        "metrics": [
          {
            "key": "development_activity",
            "band": "good",
            "name": "Development activity",
            "note": null,
            "notes": [],
            "value": 70,
            "inputs": {
              "commits_last_year": 329,
              "human_commit_share": 1,
              "days_since_last_push": 9,
              "active_weeks_last_year": 33
            },
            "components": [
              {
                "key": "push_recency",
                "name": "Push recency",
                "detail": "last push 9 days ago",
                "points": 28.8,
                "status": "partial",
                "details": [
                  {
                    "code": "push_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_cadence",
                "name": "Commit cadence",
                "detail": "33/52 weeks with commits",
                "points": 22.8,
                "status": "partial",
                "details": [
                  {
                    "code": "commit_cadence_weeks",
                    "params": {
                      "weeks": 33
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "commit_volume",
                "name": "Commit volume",
                "detail": "329 commits in the last year",
                "points": 18,
                "status": "met",
                "details": [
                  {
                    "code": "commits_last_year",
                    "params": {
                      "count": 329
                    }
                  }
                ],
                "max_points": 18
              },
              {
                "key": "openssf_scorecard_maintained",
                "name": "OpenSSF Scorecard: Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "release_discipline",
            "band": "excellent",
            "name": "Release discipline",
            "note": "Excluded from scoring (no data or not applicable): OpenSSF Scorecard: Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "openssf_scorecard_signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 88,
            "inputs": {
              "releases_count": 2,
              "latest_release_tag": "v0.44.12",
              "releases_from_tags": true,
              "days_since_latest_release": 9,
              "mean_days_between_releases": 0
            },
            "components": [
              {
                "key": "ships_releases",
                "name": "Ships releases",
                "detail": "2 version tags (no GitHub releases)",
                "points": 16.2,
                "status": "partial",
                "details": [
                  {
                    "code": "version_tags_no_releases",
                    "params": {
                      "count": 2
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "release_recency",
                "name": "Release recency",
                "detail": "latest release 9 days ago",
                "points": 36,
                "status": "met",
                "details": [
                  {
                    "code": "release_recency",
                    "params": {
                      "days": 9
                    }
                  }
                ],
                "max_points": 36
              },
              {
                "key": "release_cadence",
                "name": "Release cadence",
                "detail": "a release every ~0 days",
                "points": 27,
                "status": "met",
                "details": [
                  {
                    "code": "release_cadence",
                    "params": {
                      "gap": 0
                    }
                  }
                ],
                "max_points": 27
              },
              {
                "key": "openssf_scorecard_signed_releases",
                "name": "OpenSSF Scorecard: Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 10
              }
            ]
          },
          {
            "key": "abandonment",
            "band": "excellent",
            "name": "Abandonment",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "cap": null,
              "state": "unverified",
              "guards": [],
              "signals": [],
              "red_flag": false,
              "multiplier_pct": 100,
              "declared_reason": null,
              "unverified_reason": "repository_too_young",
              "unanswered_open_prs": null,
              "unanswered_open_issues": null,
              "days_since_last_merged_pr": null,
              "days_since_last_human_commit": null,
              "days_since_last_human_commit_is_floor": false
            },
            "components": [
              {
                "key": "project_is_still_maintained",
                "name": "Project is still maintained",
                "detail": "maintenance record not established from the collected data",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "abandonment_unverified",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Is the project alive — is code being written and are releases shipping?"
      },
      {
        "key": "community",
        "band": "critical",
        "name": "Community & Adoption",
        "value": 12,
        "weight": 0.18,
        "metrics": [
          {
            "key": "popularity",
            "band": "critical",
            "name": "Popularity & adoption",
            "note": null,
            "notes": [],
            "value": 1,
            "inputs": {
              "forks": 0,
              "stars": 0,
              "watchers": 0,
              "growth_state": "unverified",
              "growth_factor_pct": 100,
              "growth_unverified_reason": "no_history"
            },
            "components": [
              {
                "key": "stars",
                "name": "Stars",
                "detail": "0 stars",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "stars",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 60
              },
              {
                "key": "forks",
                "name": "Forks",
                "detail": "0 forks",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "forks",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "watchers",
                "name": "Watchers",
                "detail": "0 watchers",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "watchers",
                    "params": {
                      "count": 0
                    }
                  }
                ],
                "max_points": 15
              }
            ]
          },
          {
            "key": "community_health",
            "band": "critical",
            "name": "Community health",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "has_readme": false,
              "has_license": false,
              "has_contributing": false,
              "has_issue_template": false,
              "has_code_of_conduct": false,
              "has_pull_request_template": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 22.5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "recognized license (MIT)",
                "points": 22.5,
                "status": "met",
                "details": [
                  {
                    "code": "license_standard",
                    "params": {}
                  },
                  {
                    "code": "license_spdx",
                    "params": {
                      "spdx": "MIT"
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributing_guide",
                "name": "CONTRIBUTING guide",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 18
              },
              {
                "key": "code_of_conduct",
                "name": "Code of conduct",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 13.5
              },
              {
                "key": "issue_template",
                "name": "Issue template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.2
              },
              {
                "key": "pr_template",
                "name": "PR template",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 6.3
              }
            ]
          }
        ],
        "description": "Does the project have users, downloads, attention, and a welcoming setup for contributors?"
      },
      {
        "key": "governance",
        "band": "at_risk",
        "name": "Sustainability & Governance",
        "value": 45,
        "weight": 0.24,
        "metrics": [
          {
            "key": "maintainer_resilience",
            "band": "critical",
            "name": "Maintainer resilience (bus factor)",
            "note": null,
            "notes": [],
            "value": 25,
            "inputs": {
              "bus_factor": 1,
              "contributors_sampled": 8,
              "top_contributor_share": 0.899
            },
            "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 90% of commits",
                "points": 2.3,
                "status": "partial",
                "details": [
                  {
                    "code": "top_contributor_share",
                    "params": {
                      "share": 90
                    }
                  }
                ],
                "max_points": 22.5
              },
              {
                "key": "contributor_breadth",
                "name": "Contributor breadth",
                "detail": "8 contributors",
                "points": 10.8,
                "status": "partial",
                "details": [
                  {
                    "code": "contributors_sampled",
                    "params": {
                      "count": 8
                    }
                  }
                ],
                "max_points": 13.5
              },
              {
                "key": "openssf_scorecard_contributors",
                "name": "OpenSSF Scorecard: Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 3,
                "status": "partial",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "responsiveness",
            "band": "good",
            "name": "Issue & PR responsiveness",
            "note": "Excluded from scoring (no data or not applicable): Issue resolution. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "issue_resolution"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 72,
            "inputs": {
              "merged_prs": 2,
              "open_issues": 0,
              "closed_issues": 0,
              "issue_closed_ratio": null,
              "closed_unmerged_prs": 0
            },
            "components": [
              {
                "key": "issue_resolution",
                "name": "Issue resolution",
                "detail": "no issues or no data",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_issues_or_data",
                    "params": {}
                  }
                ],
                "max_points": 46.75
              },
              {
                "key": "pr_acceptance",
                "name": "PR acceptance",
                "detail": "2/2 decided PRs merged",
                "points": 38.2,
                "status": "met",
                "details": [
                  {
                    "code": "decided_prs_merged",
                    "params": {
                      "merged": 2,
                      "decided": 2
                    }
                  }
                ],
                "max_points": 38.25
              },
              {
                "key": "openssf_scorecard_code_review",
                "name": "OpenSSF Scorecard: Code-Review",
                "detail": "Found 0/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              }
            ]
          },
          {
            "key": "stewardship",
            "band": "at_risk",
            "name": "Ownership & stewardship",
            "note": "Excluded from scoring (no data or not applicable): Verified domain. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "verified_domain"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 41,
            "inputs": {
              "followers": 0,
              "owner_type": "User",
              "is_verified": null,
              "owner_login": "wpdmitry",
              "public_repos": 30,
              "account_age_days": 3293
            },
            "components": [
              {
                "key": "ownership_backing",
                "name": "Ownership backing",
                "detail": "personal (user) account",
                "points": 10,
                "status": "partial",
                "details": [
                  {
                    "code": "owner_personal",
                    "params": {}
                  }
                ],
                "max_points": 30
              },
              {
                "key": "verified_domain",
                "name": "Verified domain",
                "detail": "not applicable to user accounts",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "not_applicable_to_user_accounts",
                    "params": {}
                  }
                ],
                "max_points": 20
              },
              {
                "key": "owner_reach",
                "name": "Owner reach",
                "detail": "0 followers of wpdmitry",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "owner_followers",
                    "params": {
                      "count": 0,
                      "login": "wpdmitry"
                    }
                  }
                ],
                "max_points": 25
              },
              {
                "key": "track_record",
                "name": "Track record",
                "detail": "30 public repos, account ~9 yr old",
                "points": 22.9,
                "status": "partial",
                "details": [
                  {
                    "code": "public_repos",
                    "params": {
                      "count": 30
                    }
                  },
                  {
                    "code": "account_age_years",
                    "params": {
                      "years": 9
                    }
                  }
                ],
                "max_points": 25
              }
            ]
          }
        ],
        "description": "Will the project survive its people — bus factor, responsiveness, who backs it, and package upkeep?"
      },
      {
        "key": "engineering",
        "band": "moderate",
        "name": "Engineering Quality",
        "value": 52,
        "weight": 0.2,
        "metrics": [
          {
            "key": "engineering_practices",
            "band": "moderate",
            "name": "Engineering practices",
            "note": null,
            "notes": [],
            "value": 64,
            "inputs": {
              "has_ci": true,
              "has_tests": true,
              "has_editorconfig": false,
              "has_linter_config": true,
              "has_precommit_config": false
            },
            "components": [
              {
                "key": "ci_workflows",
                "name": "CI workflows",
                "detail": "1 workflow(s)",
                "points": 24,
                "status": "met",
                "details": [
                  {
                    "code": "ci_workflows",
                    "params": {
                      "count": 1
                    }
                  }
                ],
                "max_points": 24
              },
              {
                "key": "tests_present",
                "name": "Tests present",
                "detail": null,
                "points": 24,
                "status": "met",
                "details": [],
                "max_points": 24
              },
              {
                "key": "linter_config",
                "name": "Linter config",
                "detail": ".golangci.yml",
                "points": 16,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "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": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 20
              }
            ]
          },
          {
            "key": "documentation",
            "band": "at_risk",
            "name": "Documentation",
            "note": null,
            "notes": [],
            "value": 35,
            "inputs": {
              "topics": [],
              "has_wiki": true,
              "homepage": null,
              "has_readme": false,
              "has_docs_dir": true,
              "has_description": false
            },
            "components": [
              {
                "key": "readme",
                "name": "README",
                "detail": null,
                "points": 0,
                "status": "missed",
                "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": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 15
              },
              {
                "key": "repository_description",
                "name": "Repository description",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "topics",
                "name": "Topics",
                "detail": null,
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              },
              {
                "key": "wiki",
                "name": "Wiki",
                "detail": null,
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              }
            ]
          }
        ],
        "description": "Are baseline engineering and documentation practices in place?"
      },
      {
        "key": "security",
        "band": "at_risk",
        "name": "Security",
        "value": 44,
        "weight": 0.16,
        "metrics": [
          {
            "key": "security_posture",
            "band": "at_risk",
            "name": "Security posture",
            "note": "Excluded from scoring (no data or not applicable): Packaging, Signed-Releases. Remaining weights renormalized.",
            "notes": [
              {
                "code": "excluded_no_data",
                "params": {
                  "components": [
                    "packaging",
                    "signed_releases"
                  ]
                }
              },
              {
                "code": "weights_renormalized",
                "params": {}
              }
            ],
            "value": 44,
            "inputs": {
              "source": "openssf_scorecard",
              "checks_evaluated": 16,
              "scorecard_version": "v5.5.0",
              "checks_inconclusive": 2,
              "scorecard_aggregate": 4.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": "branch protection not enabled on development/release branches",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "ci_tests",
                "name": "CI-Tests",
                "detail": "0 out of 2 merged PRs checked by a CI test -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "cii_best_practices",
                "name": "CII-Best-Practices",
                "detail": "no effort to earn an OpenSSF best practices badge detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "code_review",
                "name": "Code-Review",
                "detail": "Found 0/28 approved changesets -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "contributors",
                "name": "Contributors",
                "detail": "project has 1 contributing companies or organizations -- score normalized to 3",
                "points": 0.8,
                "status": "partial",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "dangerous_workflow",
                "name": "Dangerous-Workflow",
                "detail": "no dangerous workflow patterns detected",
                "points": 10,
                "status": "met",
                "details": [],
                "max_points": 10
              },
              {
                "key": "dependency_update_tool",
                "name": "Dependency-Update-Tool",
                "detail": "no update tool detected",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "fuzzing",
                "name": "Fuzzing",
                "detail": "project is not fuzzed",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "license",
                "name": "License",
                "detail": "license file detected",
                "points": 2.5,
                "status": "met",
                "details": [],
                "max_points": 2.5
              },
              {
                "key": "maintained",
                "name": "Maintained",
                "detail": "project was created within the last 90 days. Please review its contents carefully",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 7.5
              },
              {
                "key": "packaging",
                "name": "Packaging",
                "detail": "packaging workflow not detected",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 5
              },
              {
                "key": "pinned_dependencies",
                "name": "Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "sast",
                "name": "SAST",
                "detail": "SAST tool is not run on all commits -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 5
              },
              {
                "key": "security_policy",
                "name": "Security-Policy",
                "detail": "security policy file detected",
                "points": 5,
                "status": "met",
                "details": [],
                "max_points": 5
              },
              {
                "key": "signed_releases",
                "name": "Signed-Releases",
                "detail": "no releases found",
                "points": 0,
                "status": "excluded",
                "details": [
                  {
                    "code": "no_data",
                    "params": {}
                  }
                ],
                "max_points": 7.5
              },
              {
                "key": "token_permissions",
                "name": "Token-Permissions",
                "detail": "GitHub workflow tokens follow principle of least privilege",
                "points": 7.5,
                "status": "met",
                "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"
              ],
              "review_only_matches": 0,
              "assessed_self_published_locations": 2
            },
            "components": [
              {
                "key": "policy_exposure_multiplier",
                "name": "Policy exposure multiplier",
                "detail": "no confirmed policy-scope location match",
                "points": 100,
                "status": "met",
                "details": [
                  {
                    "code": "jurisdiction_no_match",
                    "params": {}
                  }
                ],
                "max_points": 100
              }
            ]
          }
        ],
        "description": "Are visible security and supply-chain practices strong, with no malicious dependency and no unresolved high-risk jurisdiction exposure?"
      },
      {
        "key": "ai_readiness",
        "band": "good",
        "name": "AI Readiness",
        "value": 79,
        "weight": 0,
        "metrics": [
          {
            "key": "ai_agent_context",
            "band": "excellent",
            "name": "Agent context & guidance",
            "note": null,
            "notes": [],
            "value": 100,
            "inputs": {
              "has_llms_txt": true,
              "legible_history_share": 0.99,
              "agent_instruction_files": [
                "AGENTS.md"
              ],
              "agent_instruction_max_bytes": 10111
            },
            "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": "llms.txt present",
                "points": 15,
                "status": "met",
                "details": [
                  {
                    "code": "llms_txt_present",
                    "params": {}
                  }
                ],
                "max_points": 15
              },
              {
                "key": "legible_commit_history",
                "name": "Legible commit history",
                "detail": "99 of 100 human commits state their intent (structured subject or explanatory body)",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "legible_history",
                    "params": {
                      "legible": 99,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 40
              }
            ]
          },
          {
            "key": "ai_verify_loop",
            "band": "good",
            "name": "Verify loop (build / test / typecheck)",
            "note": null,
            "notes": [],
            "value": 71,
            "inputs": {
              "has_nix": false,
              "has_tests": true,
              "lockfiles": [
                "go.sum"
              ],
              "has_dockerfile": false,
              "typed_language": true,
              "bootstrap_files": [],
              "has_devcontainer": false,
              "has_linter_config": true,
              "typecheck_configs": [],
              "agent_commit_share": 0.02,
              "toolchain_manifests": [
                "go.mod"
              ],
              "dependency_bot_commit_share": 0
            },
            "components": [
              {
                "key": "one_command_bootstrap",
                "name": "One-command bootstrap",
                "detail": "go.mod (toolchain convention, no task runner)",
                "points": 12.6,
                "status": "partial",
                "details": [
                  {
                    "code": "toolchain_convention",
                    "params": {
                      "files": "go.mod"
                    }
                  }
                ],
                "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": ".golangci.yml",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": ".golangci.yml"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "static_type_checking",
                "name": "Static type checking",
                "detail": "Go (statically typed)",
                "points": 11,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 11
              },
              {
                "key": "reproducible_environment",
                "name": "Reproducible environment",
                "detail": "lockfile",
                "points": 10,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "lockfile"
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "demonstrated_agent_practice",
                "name": "Demonstrated agent practice",
                "detail": "2 of the last 100 commits agent-authored or agent-credited",
                "points": 4,
                "status": "partial",
                "details": [
                  {
                    "code": "agent_authored_commits",
                    "params": {
                      "count": 2,
                      "sampled": 100
                    }
                  }
                ],
                "max_points": 10
              },
              {
                "key": "automated_maintenance",
                "name": "Automated maintenance",
                "detail": "no automated dependency updates observed",
                "points": 0,
                "status": "missed",
                "details": [
                  {
                    "code": "no_dependency_automation",
                    "params": {}
                  }
                ],
                "max_points": 8
              },
              {
                "key": "openssf_scorecard_pinned_dependencies",
                "name": "OpenSSF Scorecard: Pinned-Dependencies",
                "detail": "dependency not pinned by hash detected -- score normalized to 0",
                "points": 0,
                "status": "missed",
                "details": [],
                "max_points": 10
              }
            ]
          },
          {
            "key": "ai_code_legibility",
            "band": "excellent",
            "name": "Code legibility for models",
            "note": null,
            "notes": [],
            "value": 99,
            "inputs": {
              "primary_language": "Go",
              "largest_source_bytes": 100219,
              "source_files_sampled": 221,
              "oversized_source_files": 3
            },
            "components": [
              {
                "key": "type_checkable_code",
                "name": "Type-checkable code",
                "detail": "Go (statically typed)",
                "points": 45,
                "status": "met",
                "details": [
                  {
                    "code": "statically_typed_language",
                    "params": {
                      "language": "Go"
                    }
                  }
                ],
                "max_points": 45
              },
              {
                "key": "manageable_file_sizes",
                "name": "Manageable file sizes",
                "detail": "3/221 source files over 60KB",
                "points": 54.3,
                "status": "partial",
                "details": [
                  {
                    "code": "oversized_source_files",
                    "params": {
                      "kb": 60,
                      "sampled": 221,
                      "oversized": 3
                    }
                  }
                ],
                "max_points": 55
              }
            ]
          },
          {
            "key": "ai_interfaces",
            "band": "at_risk",
            "name": "Machine-readable interfaces",
            "note": null,
            "notes": [],
            "value": 40,
            "inputs": {
              "example_dirs": [
                "examples"
              ],
              "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": "examples",
                "points": 40,
                "status": "met",
                "details": [
                  {
                    "code": "file_list",
                    "params": {
                      "files": "examples"
                    }
                  }
                ],
                "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.13.0"
  },
  "warnings": [
    "Community profile unavailable",
    "go package 'github.com/gogpu/gogpu' points at a different repository (https://github.com/gogpu/gogpu); excluded from ecosystem scoring",
    "GitHub dependency-graph SBOM unavailable (404); the dependency graph may be disabled for this repository"
  ],
  "report_type": "repository",
  "generated_at": "2026-07-30T12:00:38.324334Z",
  "schema_version": "0.27.0",
  "badge_url": "https://raw.githubusercontent.com/inspect-software/badges/main/v1/w/wpdmitry/gogpu.svg",
  "full_name": "wpdmitry/gogpu",
  "license_state": "standard",
  "license_spdx": "MIT"
}

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.13.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 agregadasGo.