feat: open the proposal a transcript line is about, not the room's latest

Tapping a signing line in the transcript opened whichever session the room was
running, resolved by `liveSessionForChatRoom` -- the newest one not yet finished,
or failing that the newest one at all. That is a guess, and it was a good one
exactly as long as a room had one proposal to guess at. With a chapter and its
translation open together, half the lines in the transcript led to the other
proposal.

The line now says which session it belongs to, so there is nothing left to guess:
it carries `frostSigningSessionId` through to the route. A line written before
that column opens the room's proposal list instead, which is the honest answer to
a line that cannot say what it meant -- every proposal with its own state, and
the reader picks -- rather than a guess dressed as an answer.

That empties `FrostSigningRoute.sessionId` of its reason to be optional, so it is
required, and `liveSessionForChatRoom` goes with it from the interface, the
implementation and the no-op. `FrostSigningViewModel` loses its resolution step
and the "This group is not signing anything right now" error underneath it --
which was never the right thing to say to somebody who had just tapped a line
about a specific session.

The transcript keeps doing the one job it is good at: showing a proposal as it
happens, and saying whether it is still asking something of you. What it stops
doing is standing in for a list of them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kgothatso Ngako
2026-09-06 12:43:00 +02:00
parent 116cc96de4
commit dbdff55ee0
8 changed files with 57 additions and 57 deletions

View File

@@ -426,6 +426,16 @@ what a line older than the column has to be read by, and is right for those
rooms: nothing that predates batch proposals ran two sessions at once. A ceremony
line still uses the clock always, since a room runs one ritual at a time.
The transcript answers one question about a proposal — is this still asking
something of you — and answers it in the middle of everything else the room said.
Two open proposals need a place that shows both, so `ProposalListScreen` lists a
room's sessions newest first with the ones waiting on the reader gathered at the
top, and the room's history under them. `FrostSigningRoute.sessionId` stopped
being optional at the same time: it existed for transcript lines that could not
say which session they meant, resolved to "the room's live session", and that
guess is exactly what two proposals make wrong. A line too old to name its
session opens the list instead.
---
## Phase 6 — the test that actually proves it