# Dejar de borrar perfiles: semántica de fusión para eventos reemplazables

**Status:** Researching · **Opened:** 2026-07-10

Los perfiles (kind 0) y las listas de contactos (kind 3) son eventos reemplazables: gana la última escritura, el evento completo. Un cliente que publica su vista parcial de un perfil borra en silencio cada campo que no entiende — para todos, en todas partes. El propio rastreador del protocolo lo documenta desde 2023 (issue #261), y afecta a usuarios reales: el "bug de Balaji" en Damus fue un perfil borrado exactamente por este mecanismo. Los relays no pueden arreglarlo — por cada pubkey y kind solo se guarda el evento más reciente. Solo los clientes pueden.

## La brecha

No existe una regla que diga que un cliente, antes de publicar un evento reemplazable, debería fusionar contra el último estado conocido y preservar los campos que no reconoce. Cada cliente que lo hace bien lo hace por tradición oral; cada cliente nuevo tiene su oportunidad de borrar tu dirección de lightning.

## Lo que estamos esbozando

Un SHOULD pequeño: antes de publicar un kind reemplazable, obtener el último evento conocido, fusionar los cambios sobre él, y preservar los campos desconocidos tal cual. Junto a la prosa, la parte que creemos que importa más: un conjunto de casos de conformidad — pares de eventos donde una fusión correcta tiene una sola respuesta válida — y una implementación de referencia como skill/hook de MKStack, para que las aplicaciones generadas publiquen de forma segura sin leer una especificación. Pregunta abierta que investigamos: si la preservación de campos desconocidos puede especificarse con suficiente precisión para probarse sin congelar el borrado legítimo de campos.

## Por qué nosotros

Publicamos aplicaciones sobre el mismo andamiaje donde vive esta clase de falla, y "tu aplicación destruyó mi perfil en silencio" es el tipo de falla de confianza que una herramienta cívica no sobrevive.

## Evidencia

- [nostr-protocol/nips issue #261](https://github.com/nostr-protocol/nips/issues/261) — la clase de falla de sobreescritura de campos, documentada y abierta
- [Damus issue #1994 — "Profile is wiped (Balaji's bug)"](https://github.com/damus-io/damus/issues/1994)
- [Damus issue #2264 — marcadores borrados](https://github.com/damus-io/damus/issues/2264) — misma lección, otra superficie
