fix: stream usa ultimo frame + playground artifact_probe

- streamAnswer: el result final es el ULTIMO answer parseado (frame post-idle,
  limpio) en vez del mas largo, que podia ser un frame intermedio con spinner.
- playground/artifact_probe.go: herramienta de auditoria que corre oneshot +
  stream contra varios prompts, detecta artefactos del render que se cuelan
  (box chars, status bar, spinner, palabras pegadas, prompt echo) y verifica
  consistencia del streaming (concat de deltas == result). Opcional --ref para
  comparar con claude -p real. No se indexa (playground del padre).

El fix del spinner en si vive en parse_claude_tui_go_tui (repo padre): detecta
la linea de carga por estructura (glyph + palabra + ellipsis) y firma
((Ns tokens) / esc to interrupt), no por la palabra, que cambia cada frame.
This commit is contained in:
agent
2026-06-03 23:37:39 +02:00
parent 4574f08a22
commit 22bec25d8d
4 changed files with 335 additions and 3 deletions
+46
View File
@@ -0,0 +1,46 @@
# claude_pipe — artifact probe (playground)
Herramienta desechable para auditar la calidad del parseo de la TUI que hace
`claude_pipe`. No se indexa, no tiene `app.md`, vive dentro de `apps/claude_pipe/`
y se mueve con su sub-repo.
## Qué comprueba
Por cada prompt, lanza el binario `claude_pipe` en modo one-shot y en modo
`--stream`, y busca:
1. **Artefactos** que se cuelan del render en la respuesta parseada: caracteres de
caja (`╭│╰`), reglas horizontales (`────`), fragmentos de la status bar
(`CTX:`, `IN:`, `$…`, `← for agents`), la línea meta `✻ Crunched`, el prompt
``, el carácter de reemplazo ``, palabras pegadas (>40 chars sin espacio), o
el prompt repetido literalmente.
2. **Consistencia del streaming**: la concatenación de los `text_delta` debe
reconstruir el `result` final. Si no, la heurística de prefijo perdió o duplicó
texto bajo reflow.
3. **(Opcional, `--ref`)** discrepancia contra `claude -p` real para el mismo
prompt (normalizado por espacios). claude no es determinista, así que solo los
prompts triviales se espera que coincidan exactamente.
Sale con código 2 si encuentra artefactos o inconsistencias (para poder usarlo
como gate).
## Cómo lanzarlo
```bash
cd apps/claude_pipe
CGO_ENABLED=1 go build -tags fts5 -o claude_pipe . # asegúrate de tener el binario
cd playground
# Set de prompts por defecto, sin comparar con claude -p
go run artifact_probe.go --root /home/enmanuel/fn_registry
# Comparando además contra `claude -p` real (gasta llamadas reales)
go run artifact_probe.go --root /home/enmanuel/fn_registry --ref
# Un solo prompt custom
go run artifact_probe.go --root /home/enmanuel/fn_registry --prompt "tu prompt aqui"
```
`--root` debe ser un repo cuyos MCP de claude ya estén aprobados, para que la TUI
no muestre el diálogo de arranque.