Terms-consent prompt: every close (including "I've accepted — retry") snoozes it for 10 s, so a retry that fails again is silent #311

Closed
opened 2026-10-05 00:17:39 -04:00 by jared · 0 comments
Owner

Checked with a routed 403 M_CONSENT_NOT_GIVEN (c96c47dd, src/app/components/ConsentRequiredPrompt.tsx):

  • the dialog explains the failure;
  • "Review and accept" opens the consent_uri in a new tab;
  • a javascript: consent_uri gets no button;
  • "I've accepted — retry sending" re-sends after real acceptance (server copies: 1).

Gap: the FocusTrap's onDeactivate: later also runs when the dialog closes because of Retry, because unmounting deactivates the trap. Every close therefore sets the 10 s snooze. If the user presses "I've accepted — retry" before finishing in the other tab, which is easy when the terms page needs a login, the retry gets another M_CONSENT_NOT_GIVEN. No dialog appears; the message just goes back to "Failed to send". Measured: dialog shown on the first failure; after Retry while still not accepted, no dialog; a send more than 10 s later shows it again.

Fix: only snooze from "Later", Escape or an outside click. Pass onDeactivate a flag that retry sets, or call later explicitly from those paths. Or always reopen when a retry from the dialog fails again.


Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny 30e2dbcd, cinny-desktop 8f67ec7, element-call 3b0050e8.

Checked with a routed `403 M_CONSENT_NOT_GIVEN` (c96c47dd, `src/app/components/ConsentRequiredPrompt.tsx`): - the dialog explains the failure; - "Review and accept" opens the `consent_uri` in a new tab; - a `javascript:` `consent_uri` gets no button; - "I've accepted — retry sending" re-sends after real acceptance (server copies: 1). **Gap:** the FocusTrap's `onDeactivate: later` also runs when the dialog closes because of **Retry**, because unmounting deactivates the trap. Every close therefore sets the 10 s snooze. If the user presses "I've accepted — retry" before finishing in the other tab, which is easy when the terms page needs a login, the retry gets another `M_CONSENT_NOT_GIVEN`. **No dialog appears**; the message just goes back to "Failed to send". Measured: dialog shown on the first failure; after Retry while still not accepted, no dialog; a send more than 10 s later shows it again. **Fix:** only snooze from "Later", Escape or an outside click. Pass `onDeactivate` a flag that `retry` sets, or call `later` explicitly from those paths. Or always reopen when a retry from the dialog fails again. --- _Found in the October 2026 client audit (Playwright against a local Synapse + LiveKit stack, plus code reading). Code refs are at cinny `30e2dbcd`, cinny-desktop `8f67ec7`, element-call `3b0050e8`._
jared added the priority: lowuxarea: messaging labels 2026-10-05 00:17:39 -04:00
jared closed this issue 2026-10-18 06:51:25 -04:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: LotusGuild/cinny#311