Repository navigation
Conversation
…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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
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 6pxa todo<button>y nunca se reseteó. Conbox-sizing: border-boxy 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__closede 16px con 4px. Le pasaba a los nueve botones-ícono de la app. Unbutton { padding: 0 }los arregla a todos.Las terminales ocultas se comían la GPU (el trap que estaba anotado en el TODO). Cada
TerminalTilepedí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 unIntersectionObserverengancha el addon al mostrarse y lo suelta al ocultarse.Beta
.dmgy el.exese cuelgan del Release — público y permanente. Sale como draft: un tag equivocado no debería publicarse solo.gc_orphans()al arrancar).Verificado
tsclimpio ·pnpm build·cargo clippy -D warningscero 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