Skip to content

[client/web] wire WhisperStart event end-to-end (whisper-mode.md) #562

@intendednull

Description

@intendednull

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:267is_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

  1. Define EventKind::WhisperStart (or repurpose existing whisper EphemeralKind machinery if the design lands there) — confirm with spec.
  2. State machine: apply / dedup / permission rules.
  3. Client projection: lookup whisper-start events keyed by message id and flip DisplayMessage::whisper.
  4. Web: light up the existing reserved .message--whisper class + whisper-badge surface (Phase 2a Task 8 already reserved them — no new HTML needed).
  5. 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

Metadata

Metadata

Assignees

No one assigned

    Labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions