Skip to content

chat: preserve interrupted human updates consistently across stop and resume #1620

Closed

Description

@santoshkumarradha

An explicitly human-directed [update] can be visible while streaming, disappear when stopped, then return as a completed answer after reopening the same journal.

The live path marks the entry cut and folds it (TestExplicitUpdateStreamsAsAddressedButNotCompletedAcrossLenses currently encodes that behavior). keepPartial records an ordinary tool-free assistant message, and replay classifies that message as Answer=true. Audience and completion need independent durable representation.

Expected behavior:

  • Preserve explicitly addressed partial updates as readable, interrupted human messages, both live and after resume.
  • Keep unfinished operational narration collapsed; retain full details behind disclosure.
  • Keep completed earlier updates and human steering exactly once through stop, retry, later work, and replay.
  • Use the shared presentation path for ordinary chat, managers, task pages and nested transcripts, including narrow widths.

Found during the transition audit for #1607. Related to #1617, but distinct from generated interruption notes leaking into prose. Duplicate search found no existing issue or PR for this audience/completion mismatch.

Validation must include actual engine stop → journal → replay and shared-renderer transition tests, rather than independent snapshots that disagree about completion.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:chatThe v3 surface a person sits in front of (internal/tui3)area:sessionThe engine — turns, tasks, the toolbelt, checkpointsbugSomething the code does that it should not

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions