Mark the answer on the question, and close the notes that are not turns

Four things the transcript and the composer said badly.

**An answered question threw away the question.** It collapsed into
"Answered: Deny", which does not say that Allow was the alternative -- and
whether a tool was allowed or refused is what a reader comes back to that
row for. The options stay now and the one that was taken is marked, in the
same purple border that says "picked" while the question is still open, so
it is one appearance learned once rather than two renderings of one thing.
The buttons are disabled rather than removed, and state their own border
and label colour, because Material dims a disabled button's and that would
have taken the mark with it. Both places got it: the question card, and the
permission ask on a tool row, which had the same line.

An answer typed into **Other** matches no option, so nothing could mark it.
That one is still written out -- it is the state the marking cannot say.

**Memory notes were open.** A `<cc-memory>` note is not part of what was
said to the reader, it is a note about where a claim came from, and left
open it breaks a reply in half around a card. Closed like a tool call and a
peer message, with the file it came from still visible, since that is what
somebody scanning for "why does it think that" is looking for. Open-ness is
the screen's rather than the card's, so a note opened and scrolled past is
still open on the way back.

**Picking a slash command left its own suggestion up.** `/compact` is a
whole command and a prefix of itself, so the list stayed with the one row
already chosen -- something to dismiss, in front of the box it was about to
be sent from.

**A model switch warned when there was nothing to warn about.** The warning
is that a cache is dropped, so it needs there to be one: a session whose
process has exited has nothing holding a cache, and one reporting zero
context is holding nothing. Where the figure is *unknown* the fallback is
what it was -- whether anything has been said -- because unknown is not
nothing, and an import nobody has measured yet is exactly where the
conversation may be enormous.
This commit is contained in:
iris committed 2026-08-31 22:33:31 -04:00
1 parent b7277a5a04
commit ed88bdb31f
5 files changed
+188 -38

No files matched your search

+14
View File
@@ -245,6 +245,20 @@ first if a remote spawn ever mangles an argument.
on the same transcript. What that costs is that the rows below slide up
under the reader's finger, so a row that has just moved ignores taps for
half a second (`SETTLE_MS`).
- **An answered question keeps its options and marks the one that was
taken**, in the same purple that says "picked" while it is still open --
it does not collapse into a line repeating the answer. The options are
what the question *was*, and "Deny" alone does not say that Allow was the
alternative. One rule in two places (`AskedQuestion` and `PermissionAsk`),
since a permission is a question with two bare options rather than a
different kind of thing. An answer typed into **Other** matches no option,
so that one is still written out -- the state the marking cannot say.
- **Anything that is a note *about* the conversation rather than a turn in
it is closed by default**: a tool call, a peer message, and now a memory
note (`<cc-memory>`). Open-ness is the screen's, never the card's -- a
card that remembered for itself forgets the moment the lazy list stops
composing it, so a note opened and scrolled past would shut behind the
reader.
- **All transcript text is selectable, from one `SelectionContainer` around
the whole list** (`TranscriptList.kt`). Not per row: a transcript is one
body of text to a reader, so a selection has to be able to run from a