Skip to content

chat: rewind takes the conversation back and never the files, and the UX nowhere names workspace_restore, the one verb that can #1090

Description

@santoshkumarradha

What happened

2026-09-16, base dev@74509f4021259ce431ebeb5692c522390f12a923.

Taking a conversation back is two gestures wearing one name. The rewind surface (esc esc,
/rewind) is taught well: the cut line, the dim preview, the foot that counts what goes.
What it never says is that only the conversation goes. The files a dropped turn wrote stay
written, and the one verb that can put them back (workspace_restore) is named nowhere in
the surface. A person who rewinds to take back a wrong direction meets a conversation that
forgot the work and a workspace that did not.

The manual is honest about it. internal/manual/chat/sessions-and-rewind.md:

A rewind is an edit of the conversation, not of your workspace. Nothing on disk comes
back.

No file is reverted. A file the dropped turn wrote or edited stays exactly as it was
left.

And the door out is real but invisible:

Rewind will not undo work on disk for you. In a folder furrow is watching,
workspace_restore is the separate verb that does

and in a folder nobody attached to furrow the manual's whole truth is: "undo it yourself".

So the file half of restore exists (furrow's restore points cover .env, a dev database,
an untracked file, a dependency that changed: things git never sees), but a person finds it
only by reading the manual. The rewind page already knows exactly which paths are in play:
the per-turn tally counts them (4 tool calls · 2 files, where "files counts the
distinct paths that turn's write and edit calls named"). The information needed to make
the offer is already on the page. The offer is not made.

What a person meets

  • Before the cut: the foot counts turns, never files. "Everything below the pick is let
    go" is about the transcript; nothing says the turns' files stay changed.
  • After the cut: no door. Nothing on the page or in the command row names
    workspace_restore, and nothing distinguishes a folder furrow watches from one nobody
    does.
  • Without furrow: there is no verb at all, and the moment teaches nothing. "Undo it
    yourself" is the whole truth, delivered only as prose on a page the person is not
    reading at that moment.

The ask

Keep the manual's law (a rewind edits the conversation, workspace_restore moves bytes,
never the same gesture) and join the two at the surface:

  1. Name the files before the cut. When the pick drops turns that named paths, the foot
    counts them, e.g. ⟲ drops 2 turns · 3 files stay changed. The tally arithmetic
    already exists on the rows.
  2. Offer the second half after the cut. A rewind that dropped file-writing turns offers
    to restore exactly those files through the workspace's own restore points, as its own
    explicit step, named as the different verb it is: one that moves bytes and leaves the
    conversation alone.
  3. Say when there is nothing to offer. No furrow on the folder: the offer says
    attaching is one command, instead of silence.

Why this shape

The deliberate separation stays verbatim: a rewind edits the conversation,
workspace_restore moves bytes, never the same gesture. What changes is that the join
between them stops living only in the manual. With the offer in place, "take the
conversation back and put the files back" is one visible story, which is what a person
means when they say undo, and what makes restore usable for picking earlier work back up.

Acceptance

  • e2e: through the real binary: a conversation where a turn wrote two files, rewind to
    before it. Before the cut the foot names 2 files stay changed; after the cut the
    surface offers restoring exactly those paths.
  • e2e: with a furrow-watched folder, taking the offer restores those paths from the
    workspace's own restore points and says what came back; the conversation is not touched
    again and no second rewind is implied.
  • e2e: control, no furrow attached: the offer reads as "no restore points here,
    attaching furrow is one command", never a silent nothing.
  • unit: the foot's file tally counts distinct paths across the dropped turns only; a
    dropped turn that only read adds nothing.
  • manual: internal/manual/chat/sessions-and-rewind.md's "What rewind does NOT undo"
    gains the sentence about the offer; the never-the-same-gesture law stays verbatim.

Drafted with CodeAF · reviewed and owned by the author

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

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 notsev:papercutA wording, a hint, a small wrongness that costs a moment

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions