Phase 5 of docs/frost-batch-signing.md. The screen renders every event of a
batch, and the transcript says how many there are.
## The approval gate
The argument for one approval rather than one per event -- in
FrostSigningManager's own header -- only holds if the member can see everything
they are agreeing to. Two gates enforce that, and neither touches "Don't sign".
- Every event has to be readable. `readable` compares the events that rendered
against the items the session holds, so a batch with one unreadable element
offers no Sign button at all rather than a Sign button for the ones that
worked. A batch is all-or-nothing: agreeing to the two that rendered would be
agreeing to the third as well.
- A batch's Sign button waits until the list has been read to the end. A batch
can hide an event below the fold in a way one event cannot -- what is
off-screen is not further detail about the thing on screen, it is a different
thing the member would also be signing. Only for k>1: a single event's screen
behaves exactly as it did.
Declining stays enabled through both. A member who cannot check what they are
being asked to sign should still be able to say no, and saying nothing is
indistinguishable from a phone in a pocket, which leaves the group waiting.
## Rendering
WhatIsBeingSigned takes the list and the count it expects. Each event is still
described as the thing it is -- a dialect, an artifact, a chapter -- by the
extracted OneThingBeingSigned; the header counts them and the closing sentence
about the group's key is said once for the batch rather than once per event.
## Transcript
No new ChatMessage types, and no edits to FROST_TYPES, FROST_SETTLEMENTS or
FROST_REQUEST_FULFILMENTS -- one line per member per step still describes what
happened, whatever k is. Only the wording gains the number, because each of
those lines describes work that covered the whole batch: "signed their part of
all 3 events", "combined the parts into the group's 3 signatures", "asked the
group to sign 3 events". At k=1 every line is byte-identical to before.
356 jvmTest and 224 testDebugUnitTest pass.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>