Tracking issue for the whisper-mode.md TODOs. Spec at docs/specs/2026-04-19-ui-design/whisper-mode.md. The ephemeral-channels plan (docs/plans/2026-04-25-ui-phase-2d-ephemeral-channels.md) covers the Whisper EphemeralKind + auto-archive thresholds, but the per-message WhisperStart event flow that toggles row styling and the hover-toolbar "whisper reply" action is not yet wired.
TODO sites
crates/client/src/views.rs:600 — projection sets whisper = false always; needs to flip via WhisperStart lookup.
crates/web/src/components/message.rs:267 — is_whisper reads message.whisper (always false today) to gate .message--whisper class + badge.
crates/web/src/components/message.rs:1125 — hover-toolbar "whisper reply" button is a no-op on:click until the event + permission gate land.
Scope
- Define
EventKind::WhisperStart (or repurpose existing whisper EphemeralKind machinery if the design lands there) — confirm with spec.
- State machine: apply / dedup / permission rules.
- Client projection: lookup whisper-start events keyed by message id and flip
DisplayMessage::whisper.
- Web: light up the existing reserved
.message--whisper class + whisper-badge surface (Phase 2a Task 8 already reserved them — no new HTML needed).
- Wire the hover-toolbar "whisper reply" button to dispatch the event, gated by the local peer's send-whisper permission.
Out of scope
- Auto-archive threshold UI (already covered by ephemeral-channels plan).
- Whisper reply pane / split-view (separate spec, if any).
Refs
Tracking issue for the
whisper-mode.mdTODOs. Spec atdocs/specs/2026-04-19-ui-design/whisper-mode.md. The ephemeral-channels plan (docs/plans/2026-04-25-ui-phase-2d-ephemeral-channels.md) covers theWhisperEphemeralKind+ auto-archive thresholds, but the per-messageWhisperStartevent flow that toggles row styling and the hover-toolbar "whisper reply" action is not yet wired.TODO sites
crates/client/src/views.rs:600— projection setswhisper = falsealways; needs to flip viaWhisperStartlookup.crates/web/src/components/message.rs:267—is_whisperreadsmessage.whisper(always false today) to gate.message--whisperclass + badge.crates/web/src/components/message.rs:1125— hover-toolbar "whisper reply" button is a no-opon:clickuntil the event + permission gate land.Scope
EventKind::WhisperStart(or repurpose existing whisper EphemeralKind machinery if the design lands there) — confirm with spec.DisplayMessage::whisper..message--whisperclass + whisper-badge surface (Phase 2a Task 8 already reserved them — no new HTML needed).Out of scope
Refs
docs/specs/2026-04-19-ui-design/whisper-mode.mddocs/plans/2026-04-25-ui-phase-2d-ephemeral-channels.md