Repository navigation
feat: el rol sale del argv, ⌘F en la terminal, y tests para lo que toqué - #5
Merged
Merged
Conversation
… línea de comandos El rol compuesto (base + memoria + persona + skills) iba como argumento: claude por --append-system-prompt, codex por -c developer_instructions=. Un worker con dos skills ya son ~13 KB contra el techo de ~32.767 chars de CreateProcess, y el modo de falla es el peor: rompe SOLO en Windows, SOLO con ciertos perfiles, y con un usuario adelante. Ahora los tres motores lo pasan por un archivo — opencode ya lo hacía y era el único a salvo. Verificado contra los CLI de verdad, no leyendo el --help: - claude --append-system-prompt-file <archivo> honra el rol (probado con una palabra clave y su control sin el flag). NO es --system-prompt-file: ese REEMPLAZA el prompt de fábrica. - codex -p <perfil> superpone $CODEX_HOME/<perfil>.config.toml, y developer_instructions llega. La trampa que el test fija: claude NO falla con un flag que no conoce, lo ignora. Un nombre mal escrito acá no da error — arranca un agente sin rol, genérico, y sin nada que explique por qué. Por eso el test fija el nombre exacto del flag y que el archivo tenga el rol adentro. Los perfiles de codex viven en ~/.codex (no en temp): se limpian al arrancar, cuando ninguno puede estar en uso.
El scrollback ya era configurable; buscar en él, no. Una corrida larga de un agente es un pajar y la línea que importa es siempre la que se fue para arriba. La barra va DENTRO del tile y no flotando sobre la app: con nueve terminales a la vista, una barra global no diría en cuál estás buscando. Qué tile busca lo decide `findTileId` en uiStore, porque el atajo es global — quien lo dispara no es el tile, es el teclado sobre el que tenga el foco. El Ctrl+F no llega al PTY: useKeyboard captura en window y frena el evento ahí. Importa, porque en un TUI Ctrl+F ya significa otra cosa.
…o de tocar El frontend tenía UN test y el cambio anterior le movió a BrowserTile el ciclo de vida entero de la webview. Lo que fija esto son las tres reglas que se pagaron con bugs: el id es determinístico (si dependiera de la url, read_page no encontraría la webview), re-navegar reusa el tile en vez de acumular uno por url, y NO toca `gen` — remontar el tile destruye la webview, y recrearla es la carrera que lo dejaba mudo para siempre. Sin jsdom: lo que vale la pena probar del frontend son los stores, y traer un navegador entero para eso sería traer un navegador entero para leer una clave. El setup pone el `localStorage` que uiStore lee AL IMPORTARSE, que es lo único que ataba estos tests a un DOM.
…e macOS ya se pagó El postmortem es el de verdad: borrar una sesión dejaba sus worktrees colgados en macOS, y pasaba en las dos máquinas de desarrollo. Lo vieron los dos runners de CI y nadie más, porque esos commits nunca habían pasado por CI.
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.
What and why
Tres cosas del TODO, en tres commits separados.
1. El rol ya no viaja por la línea de comandos. Iba como argumento (
--append-system-promptenclaude,
-c developer_instructions=en codex) y un worker con dos skills ya son ~13 KB contra eltecho de ~32.767 chars de
CreateProcess. El modo de falla es el peor que hay: rompe solo enWindows, solo con ciertos perfiles, y con un usuario adelante. opencode ya lo pasaba por archivo y
era el único a salvo; ahora los tres.
Los flags se verificaron contra los CLI de verdad, no leyendo el
--help:claude --append-system-prompt-file <archivo>honra el rol — probado con una palabra clave y sucontrol sin el flag. No es
--system-prompt-file: ese REEMPLAZA el prompt de fábrica.codex -p <perfil>superpone$CODEX_HOME/<perfil>.config.tomlydeveloper_instructionsllega.Y la trampa que el test fija: claude no falla con un flag que no conoce, lo ignora. Un nombre mal
escrito ahí no da error — arranca un agente sin rol, genérico, y sin nada que explique por qué.
2. Búsqueda en la terminal (⌘F).
@xterm/addon-searchsobre el tile enfocado. La barra va dentrodel tile y no flotando: con nueve terminales a la vista, una barra global no diría en cuál buscás.
3. Tests del frontend. Había UNO, y el PR anterior le cambió a
BrowserTileel ciclo de vidaentero de la webview. Estos fijan las tres reglas que se pagaron con bugs: el id determinístico, el
tile reusado en vez de uno por url, y que re-navegar no toque
gen(remontar destruye la webviewy recrearla es la carrera que la dejaba muda). Sin jsdom — los stores no necesitan DOM.
How I verified it
pnpm exec tsc --noEmitpassespnpm buildpasses (825 KB; el addon de búsqueda suma ~33 KB)cargo clippy --all-targets -- -D warningspasses — 44 tests Rust, 9 vitestpnpm tauri dev)Lo verificado de verdad, fuera de los tests: los dos flags contra los CLI reales (una palabra clave
que solo aparece si el rol llegó, con su control sin el flag). El test nuevo mide que el argv no
crezca con el rol: con una persona de 50 KB, los tres motores quedan por debajo de 4 KB de argv.
Platform tested: Windows 11. ⌘F no lo manejó un humano todavía — es el único de los tres que
solo se puede comprobar con la app abierta.
Engines tested: claude y codex, contra sus CLI reales (2.1.220 y 0.144.1). opencode no: ya usaba
archivo y no se tocó su camino.
Notes for the reviewer
~/.codex, no en temp: nadie los borra por nosotros, así que selimpian al arrancar, que es cuando ninguno puede estar en uso.
serde_json::to_stringy no{:?}para el valor TOML del perfil: el escapado de JSON es unsubconjunto del de un basic string de TOML, mientras que el Debug de Rust escupe
\u{1f600}paralo no imprimible — una forma que TOML no acepta.
build_codexpasó a 8 argumentos y lleva unallow(too_many_arguments): agruparlos sería unstruct con un solo llamador.