Backend Go (web/server.go) que sirve un chat single-page y, por cada mensaje,
lanza claude_pipe --stream como subprocess y reenvia sus eventos NDJSON
(text_delta + result) al navegador via Server-Sent Events. Frontend vanilla
(web/index.html), sin frameworks ni node_modules.
Prueba el stack completo end to end a traves de una surface real: captura PTY ->
vt_render -> parse_claude_tui (con fix del spinner) -> delta de streaming ->
chat en vivo. Cada mensaje es una sesion claude one-shot (sin memoria entre
turnos). Playground del padre, no indexado.
- 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.
Fase 2. Anade modo --stream que emite la respuesta de claude como NDJSON
(eventos text_delta + result final), re-parseando snapshots del render.
Compone dos funciones nuevas del registry:
- pty_capture_stream_go_infra: captura snapshots acumulativos del PTY por canal.
- text_prefix_delta_go_core: delta por prefijo comun entre snapshots sucesivos.
Por cada snapshot: vt_render -> parse_claude_tui -> delta del Answer. Solo emite
text_delta cuando el answer extiende limpiamente al anterior (HasPrefix); los
frames no monotonos se reconcilian en el result final. Heuristico y documentado.
e2e_check smoke_fake_stream verifica el flujo con el fake TUI (sin gastar claude).
App que obtiene la respuesta de claude como dato parseando su TUI interactiva,
en lugar de usar claude -p. Compone tres funciones del registry:
- pty_capture_idle_go_infra: captura el render de la TUI via PTY headless.
- vt_render_go_tui: reconstruye el layout 2D como texto plano.
- parse_claude_tui_go_tui: extrae los turnos + la respuesta final.
Salida por defecto con el mismo shape que claude -p --output-format json.
Formatos: json, text, turns, screen. Validada end-to-end: el campo result
coincide exacto con claude -p nativo (PONG == PONG). e2e_checks deterministas
con un fake TUI (tests/fake_claude.sh) que no gasta llamadas reales.
Fase 1 (one-shot). El streaming incremental queda como fase 2.