Skip to content

Beta: dos fixes de UI, instaladores en el Release, y un TODO que dejó de mentir - #1

Merged
Mats2208 merged 3 commits into
mainfrom
beta-prep
Jul 13, 2026
Merged

Mats2208 merged 3 commits into
mainfrom
beta-prep

Conversation

@Mats2208

Copy link
Copy Markdown
Member

Los dos bugs

Los botones-ícono nunca estuvieron centrados. El ☰ se veía corrido y no era una impresión: medido en el navegador, el glifo caía 4px a la derecha. La causa no era del ☰ — el UA le da padding: 1px 6px a todo <button> y nunca se reseteó. Con box-sizing: border-box y una caja cuadrada fija, ese padding se come la caja de contenido: el ☰ de 26px quedaba con 12px útiles para un ícono de 16px, y el .wstab__close de 16px con 4px. Le pasaba a los nueve botones-ícono de la app. Un button { padding: 0 } los arregla a todos.

antes → titlebar__icon: gaps L 7.00  R 3.00     (4px a la derecha)
ahora → titlebar__icon: gaps L 5.00  R 5.00     (y lo mismo en los otros 8)

Las terminales ocultas se comían la GPU (el trap que estaba anotado en el TODO). Cada TerminalTile pedía su contexto WebGL al montarse, incluidos los tiles de workspaces inactivos, que siguen montados. 3 workspaces × 9 tiles = 27 contextos; Chromium corta en ~16 y fuerza la pérdida del más viejo → las terminales perdían la GPU en silencio, justo lo que WebGL venía a dar. Ahora un IntersectionObserver engancha el addon al mostrarse y lo suelta al ocultarse.

Beta

  • El workflow ya buildeaba mac + Windows pero solo subía artifacts: caducan a los 90 días y exigen login. Ahora, al taguear, el .dmg y el .exe se cuelgan del Release — público y permanente. Sale como draft: un tag equivocado no debería publicarse solo.
  • El README mandaba a compilar desde fuente para usar la app. Ahora arranca por la descarga, y avisa de Gatekeeper y SmartScreen, que van a saltar porque los binarios no están firmados.
  • El TODO mentía: decía que no había tests (hay 12, y el CI ya los corre en Windows y macOS) y que faltaba el GC de worktrees (lo hace gc_orphans() al arrancar).

Verificado

tsc limpio · pnpm build · cargo clippy -D warnings cero warnings · 12/12 tests · pnpm tauri build → .app + .dmg, instalado y abierto en un Mac real. Drag, resize y .dmg: verificados a mano.

Sigue abierto: la Energía nunca se midió (solo la memoria: ~275 MB de footprint propio, normal para una app WebView), y Windows compila en CI pero no lo manejó un humano — el titlebar frameless es un camino de código que solo se ejecuta ahí.

🤖 Generated with Claude Code

https://claude.ai/code/session_01K8czvCdHMHyyjnUeBHJKQP

Mats2208 and others added 3 commits July 13, 2026 16:16
…es ocultas se comían la GPU

El ☰ no estaba centrado y no era una impresión: medido en el navegador, el glifo caía 4px a la
derecha. La causa no era del ☰ sino del UA — le da `padding: 1px 6px` a TODO <button> y nunca se
reseteó. Con box-sizing:border-box y una caja cuadrada fija, ese padding se come la caja de
contenido: el ☰ de 26px quedaba con 12px útiles para un ícono de 16px, y el .wstab__close de 16px
con 4px. Le pasaba a los NUEVE botones-ícono de la app, no a uno. Un `button { padding: 0 }` los
arregla a todos (los que sí quieren padding lo declaran y ganan por especificidad); .wel__skip era
el único de texto que se apoyaba en el default, así que ahora lo declara.

Y el trap de WebGL que estaba anotado en el TODO: cada TerminalTile pedía su contexto al montarse,
incluidos los tiles de workspaces inactivos, que siguen montados (la vista se oculta con
display:none). 3 workspaces × 9 tiles = 27 contextos; Chromium corta en ~16 y fuerza la pérdida del
más viejo, así que las terminales perdían la GPU en silencio — exactamente lo que WebGL venía a dar.
Un IntersectionObserver ve el display:none: se engancha el addon al mostrarse, se suelta al
ocultarse. Un tile oculto no necesita ningún contexto.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K8czvCdHMHyyjnUeBHJKQP
…e en qué estado está esto

El workflow ya buildeaba las dos plataformas, pero solo subía artifacts: caducan a los 90 días y
exigen estar logueado en GitHub para bajarlos. Sirven para probar un build, no para que alguien
instale la app. Ahora, al taguear, los binarios se cuelgan del Release — público, permanente. Sale
como draft a propósito: un tag equivocado no debería quedar publicado solo.

El README mandaba a compilar desde fuente (Node + Rust + Build Tools) para *usar* la app: ahora
arranca por la descarga, y avisa de Gatekeeper y de SmartScreen, que van a saltar porque los
binarios NO están firmados. Se dice, no se esconde. De paso queda escrito que el workspace de Node
vive en desktop/ y no en la raíz — correr pnpm install arriba falla con ERR_PNPM_NO_PKG_MANIFEST.

Y el TODO mentía en tres puntos: decía que no había tests (hay 12, y el CI los corre en Windows y
macOS), que faltaba el GC de worktrees (lo hace gc_orphans() al arrancar) y dejaba abiertos el drag,
el resize y el .dmg, ya verificados a mano en un Mac. Lo que sigue realmente abierto: la Energía
—nadie la midió todavía, solo la memoria— y Windows, que compila en CI pero no lo manejó un humano.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K8czvCdHMHyyjnUeBHJKQP
…ilds creaban dos releases

Publicar desde adentro de la matriz tenía una carrera: GET /releases/tags/{tag} NO devuelve releases
en borrador, así que cada job (macOS y Windows) preguntaba "¿ya existe el release?", recibía 404, y
creaba EL SUYO. El resultado no era un release con los dos instaladores: eran dos drafts con uno cada
uno, y el que bajara la app se llevaba la mitad.

Ahora los builds solo suben artifacts y un job aparte espera a los dos, los baja y publica una sola
vez. Con fail_on_unmatched_files: si falta el .dmg o el .exe, el release no sale a medias.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01K8czvCdHMHyyjnUeBHJKQP
@Mats2208
Mats2208 merged commit 7e28b9c into main Jul 13, 2026
3 checks passed
@Mats2208
Mats2208 deleted the beta-prep branch July 13, 2026 20:56
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant