Hacktoberfest 2026: los issues que los mantenedores marcaron para octubre, abiertos y aptos para principiantes. Explorar issues de Hacktoberfest

chat/rollback with null contentId truncates history at the first idless message

Abierto
#669 0 comentarios 0 reacciones 0 asignados Ver en GitHub

Los mantenedores suelen responder en 2 días

Nadie ha tomado este issue todavía.

Evaluación

Dificultad
4/5
Tiempo estimado
3-5 días
Aptitud para principiantes
52/100
Tipo de issue
Error
Claridad
Bien especificado
Estado de actividad
Activo
Stack tecnológico
clojure, json
Área
api, backend

Línea de trabajo

Start with rollback-chat in src/eca/features/chat.clj and trace how it handles the supplied contentId; the report identifies null matching the first idless message. Check the compaction marker and summary creation in src/eca/shared.clj, then reproduce with the synthetic history fixture and JSON-RPC request described here. Done means a missing, null, or unknown target is rejected before history or files change, with regression coverage for the reported rollback cases.

Escrito por el modelo de indexación a partir del texto del issue.

Descripción

Describe the bug

Measured with ECA 0.167.0 over JSON-RPC: chat/rollback accepts contentId: null and discards history starting at the first message without a content ID. A seven-message fixture with ordinary idless assistant text retained only the first user message, including after server restart.

With include: ["messages", "tools"] and rollback records present, the same request also reverted file changes after that point. This was measured with synthetic records, not live edit-tool calls. Normal persistence strips those records, so this does not establish file reversal after a server restart; that risk concerns records still held in a live session.

To Reproduce

Use a disposable workspace and cache; this request destroys history.

  1. Prepare a chat containing an ID-bearing user message, an idless assistant answer, an idless compaction marker/summary, and subsequent turns. A synthetic stored-history fixture suffices; no model request is needed.
  2. Send:
    {"jsonrpc":"2.0","id":1,"method":"chat/rollback","params":{"chatId":"<fixture-chat>","contentId":null,"include":["messages"]}}
    
  3. Read chat/history, restart the isolated server, and reopen the chat.
  4. Only the first user message remains. The request returned {} rather than an error.

Measured UI trigger on eca-emacs master b353d444dca3e1f54c6c724a20eda372ee5443d7: render the isolated server's history containing a seeded compaction summary, expand the summary, and activate its rollback action with RET. The client still offers rollback without a message ID. Its actual request params were:

{"chatId":"<fixture-chat>","contentId":null,"include":["messages"]}

Choosing messages and tool changes instead emitted "include":["messages","tools"], also with a null target. Forwarding each captured request unchanged to ECA 0.167.0 retained only the first user message, including after restart. This used batch Emacs and a source-shaped seeded summary, not live /compact or a GUI mouse click.

Expected behavior

Reject a missing, null, or unknown rollback target before changing history or files. Clients should not offer rollback on blocks without a valid target ID.

Doctor

eca --version: eca 0.167.0; macOS, headless stdio client. No provider or model was involved. /doctor was not collected.

Additional context

Source-inferred cause, still present at ECA master 065e77319960b96ee96f7d86d86d4d0cd95257a1:

  • rollback-chat uses take-while / drop-while comparing each message's :content-id to the supplied ID, without validating the target first. Null therefore matches the first idless message, not the selected summary.
  • Compaction appends a marker and user-role summary without IDs.
  • eca-emacs user-text rendering offers rollback without a nil-ID guard.

Related: eca-emacs #136, “Rollback chat to before this message stays after compact.” That report concerns the available action; these results establish the destructive server behavior of a null target.

Lenguaje dominante
Clojure
Estrellas
1k
Forks
82
Merge medio
2 d
PR fusionados (30 d)
19

Preparar el entorno

Este proyecto no incluye contenedor de desarrollo, Dockerfile ni guía de contribución, así que la configuración corre por tu cuenta: empieza por su README y consulta nuestra guía para la primera contribución para los pasos generales.

Primeros pasos

  1. Lee el issue completo y luego la guía de contribución del proyecto.
  2. Comenta en el issue que vas a ocuparte — evita que dos personas hagan lo mismo.
  3. Haz un fork del repositorio y trabaja en una rama.
  4. Abre un pull request que haga referencia al número del issue.

Más de editor-code-assistant/eca

Todos los issues de editor-code-assistant/eca

Issues similares

Más issues de Clojure

Recibe los nuevos issues en tu correo

Un resumen breve de issues de GitHub para principiantes.