---
name: text_prefix_delta
kind: function
lang: go
domain: core
version: "1.0.0"
purity: pure
signature: "func PrefixDelta(prev, curr string) string"
description: "Calcula el delta de streaming entre dos versiones de un texto: devuelve la porción de curr que sigue al prefijo común más largo con prev, comparando runa a runa para no partir caracteres multibyte."
tags: [string, diff, streaming, delta, terminal-capture]
uses_functions: []
uses_types: []
returns: []
returns_optional: false
error_type: ""
imports: []
params:
  - name: prev
    desc: "Versión anterior del texto acumulativo (snapshot anterior del stream)."
  - name: curr
    desc: "Versión actual del texto acumulativo (snapshot actual, normalmente extiende a prev)."
output: "La porción de curr que sigue al prefijo común con prev (el 'delta' de streaming). Devuelve cadena vacía si curr no añade nada nuevo tras el prefijo común."
tested: true
tests:
  - "monotono append normal"
  - "prev vacio devuelve curr completo"
  - "sin cambios devuelve vacio"
  - "divergencia en medio devuelve desde divergencia"
  - "curr mas corto que prev devuelve vacio"
  - "multibyte cafe streaming"
  - "multibyte prefijo parcial antes de acento"
  - "ambos vacios devuelve vacio"
  - "prev no vacio curr vacio devuelve vacio"
  - "determinismo misma entrada misma salida"
test_file_path: "functions/core/text_prefix_delta_test.go"
file_path: "functions/core/text_prefix_delta.go"
---

## Ejemplo

```go
// Bucle de streaming por snapshots acumulativos:
prev := ""
snapshots := []string{"Hola", "Hola, mun", "Hola, mundo!"}

for _, curr := range snapshots {
    delta := PrefixDelta(prev, curr)
    if delta != "" {
        fmt.Print(delta) // emite solo la parte nueva
    }
    prev = curr
}
// Output: Hola, mundo!
```

## Cuando usarla

Cuando hagas streaming por snapshots acumulativos y necesites emitir solo la parte nueva de cada snapshot. Caso típico: consumir `pty_capture_stream_go_infra` donde cada captura de la TUI es un snapshot que extiende al anterior, y quieres emitir eventos `text_delta` estilo SSE/streaming sin reenviar texto ya enviado.

## Gotchas

- Compara por prefijo común, no por diff completo. Si el texto cambia en medio (reflow, borrado, sobreescritura de terminal), el delta incluye todo desde el punto de divergencia hasta el final de curr — puede re-emitir texto ya visto. Adecuado para append monótono; en streaming de TUI con reflow es heurístico, no exacto.
- Trabaja sobre runas (no bytes) para no partir caracteres UTF-8 multibyte como 'é', '中', '→'. El offset de corte siempre cae en un límite de runa válido.
