Saltar al contenido

Estado

Qué se ha demostrado en una pantalla real, un dispositivo real o un terminal real; qué solo se compila; y qué no cubre todavía la CI.

Estas páginas se contrastaron con los módulos en las etiquetas indicadas en Módulos. Cuando el README de un módulo y su código no coinciden, las páginas siguen al código.

Demostrado en vivo

Un códec probado dentro del proceso demuestra el códec. Estos son los casos en los que se interrogó a la propia plataforma:

QuéDónde se demostró
Ventana X11CI, bajo Xvfb: un patrón conocido presentado, capturado y muestreado; un clic y una tecla sintetizados con xdotool y el toolkit.Event despachado comprobado; Show/Hide/Raise releídos desde el servidor
Ventana Cocoauna línea de CI en macOS: una ventana abierta y renderizada, píxeles muestreados, un clic y una tecla sintetizados; Show/Hide/Raise solicitados a un NSWindow real desde otra goroutine y releídos desde AppKit
Ventana Win32una VM Windows 11 arm64: una ventana real que renderiza un VBox, un Label y un Button, con tres clics inyectados que llevan su contador de 0 a 3 a través del procedimiento de ventana
Ventana Waylandfrente a un compositor simulado que aplica las reglas de mapeo y desmapeo de xdg-shell
Ventana wasmboxChromium headless controlando el compositor wasmdesk real: los píxeles compuestos releídos, un clic real encaminado al widget
Androidun dispositivo Android 15 arm64: copias limitadas a las zonas dañadas medidas, memoria sucia del memfd medida, el árbol de accesibilidad evaluado en el dispositivo
Bandeja de macOSuna sesión macOS real: el icono sale de la barra de menús cuando el programa se detiene, vuelve cuando arranca y abre su menú
Bandeja de LinuxCI frente a un bus de sesión real: el nombre se reclama, el menú responde a GetLayout, Quit lo retira
Bandeja de Windowsel icono y su menú en una VM Windows 11
Demos de terminalun pty real en la CI: bytes de teclas enviados, el fotograma renderizado comprobado

Compilado, no ejecutado

  • Show/Hide/Raise de Win32: la tabla de decisión tiene pruebas unitarias; las llamadas en el hilo de la ventana solo se compilan.
  • El Attach de la bandeja de Windows.
  • El bucle DOM de webcanvas (run_js.go): tras una etiqueta de compilación js && wasm, por lo que queda fuera de la cobertura medida; lo ejercitan las aplicaciones que lo usan.
  • El Run nativo de application: abrir una ventana real está excluido de su barrera de cobertura; el contrato, la traducción de eventos y el contador de disponibilidad están cubiertos.

No hecho

  • Las bandejas de Windows y Linux ignoran MenuItem.Icon: una fila con icono se dibuja sin él.
  • El backend Wayland de window no puede hacer Raise: xdg-shell no tiene esa petición, y xdg-activation necesita un token procedente de la propia entrada del usuario.
  • Android: solo android/arm64, porque es el único destino Android que Go enlaza sin cgo.
  • window.Screens devuelve ErrScreensUnsupported en js/wasm.

Lo que cubre la CI

El 2026-10-10 se cerraron las cinco carencias que esta página enumeraba:

MóduloAntesAhora
mvvmtksin barrera de cobertura; solo amd64 y arm64exactamente la barrera del 100 % que usa el toolkit (ya estaba en el 100,0 %); Linux en las seis
applicationLinux, macOS y Windows solo en amd64Linux en las seis; macOS y Windows en amd64 y arm64
traycinco pares sistema operativo/arquitecturaLinux en las seis, macOS en dos, Windows en una
mvvmlintsin compilación cruzadaLinux en las seis, macOS y Windows
bricolintun paso «6 arches» que compilaba cincoloong64 añadida

Así, las diecisiete bibliotecas y herramientas se compilan ya de forma cruzada para las seis arquitecturas Linux de 64 bits, y los diecinueve módulos tienen una barrera del 100 % de cobertura de sentencias. app-template y gallery son aplicaciones de navegador y se compilan para js/wasm, que es su único destino.

Seguridad

Medido con govulncheck (a nivel de símbolo: solo el código que el módulo puede alcanzar) el 2026-10-10:

  • 15 de los 19 módulos alcanzaban código vulnerable: en la biblioteca estándar de go1.27.1 (html/template, net/http, crypto/tls, mime/multipart; corregido en go1.27.2) y en golang.org/x/net v0.58.0 (http2, a través de gRPC en data; corregido en v0.60.0).
  • Corregido esa misma noche. La CI de todos los módulos compila con go1.27.2, y todos los módulos requieren x/net v0.60.0. En la mayoría es una dependencia indirecta, que Renovate no actualiza, así que se subió a mano. Una segunda pasada de govulncheck sobre los 19 módulos no encuentra ninguna vulnerabilidad alcanzable.
  • Publicados: android v0.16.0, app-template v0.5.0, application v0.8.0, bricolint v0.4.1, data v0.4.0, mvvm v0.15.0, mvvmlint v0.4.1, mvvmtk v0.15.0, painter v0.16.0, skin v0.3.0, svg v0.7.0, tray v0.15.0, webcanvas v0.4.1, window v0.89.0, cada versión deducida de su API por gorelease. El 2026-10-11: toolkit v0.329.0, y tui v0.62.0, desktop v0.20.0, gallery v0.7.0 e isoicons v0.4.0. Para esos cuatro, gorelease no puede cargar el grafo de módulos, que alcanza github.com/ajroetker/go-highway/hwy/goat v0.0.0, una versión que nunca se publicó (ajroetker/go-highway#73), así que sus versiones se dedujeron con apidiff en linux, darwin y windows, con la misma regla.
  • Los workflows de los 23 repositorios (31 archivos) se auditaron con actionlint y wfaudit: ningún disparador privilegiado, ningún permiso de escritura a nivel de workflow, ningún token olvidado en un checkout subido, ninguna expresión no confiable en un paso de shell. Todos los workflows declaran sus permisos, de modo que ninguno depende del token por defecto de un repositorio.

Creada el por tannevaled

Modificada el por tannevaled