Skip to content

feat: el rol sale del argv, ⌘F en la terminal, y tests para lo que toqué - #5

Merged
Mats2208 merged 4 commits into
mainfrom
feat/argv-busqueda-tests
Jul 25, 2026
Merged

Mats2208 merged 4 commits into
mainfrom
feat/argv-busqueda-tests

Conversation

@Mats2208

Copy link
Copy Markdown
Member

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-prompt en
claude, -c developer_instructions= en codex) y un worker con dos skills ya son ~13 KB contra el
techo de ~32.767 chars de CreateProcess. El modo de falla es el peor que hay: rompe solo en
Windows, 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 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.

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-search sobre el tile enfocado. La barra va dentro
del 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 BrowserTile el ciclo de vida
entero 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 webview
y recrearla es la carrera que la dejaba muda). Sin jsdom — los stores no necesitan DOM.

How I verified it

  • pnpm exec tsc --noEmit passes
  • pnpm build passes (825 KB; el addon de búsqueda suma ~33 KB)
  • cargo clippy --all-targets -- -D warnings passes — 44 tests Rust, 9 vitest
  • Ran the app (pnpm 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

  • Los perfiles de codex viven en ~/.codex, no en temp: nadie los borra por nosotros, así que se
    limpian al arrancar, que es cuando ninguno puede estar en uso.
  • serde_json::to_string y no {:?} para el valor TOML del perfil: el escapado de JSON es un
    subconjunto del de un basic string de TOML, mientras que el Debug de Rust escupe \u{1f600} para
    lo no imprimible — una forma que TOML no acepta.
  • build_codex pasó a 8 argumentos y lleva un allow(too_many_arguments): agruparlos sería un
    struct con un solo llamador.

Mats2208 added 4 commits July 24, 2026 23:25
… 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.
@Mats2208
Mats2208 merged commit b80e092 into main Jul 25, 2026
3 checks passed
@Mats2208
Mats2208 deleted the feat/argv-busqueda-tests branch July 25, 2026 03:30
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