Skip to content

Keep passkey prompt visible to show success feedback#715

Merged
rzueger merged 1 commit intodevelopfrom
fix/passkey-success-feedback-visible
Apr 19, 2026
Merged

Keep passkey prompt visible to show success feedback#715
rzueger merged 1 commit intodevelopfrom
fix/passkey-success-feedback-visible

Conversation

@rzueger
Copy link
Copy Markdown
Member

@rzueger rzueger commented Apr 19, 2026

Summary

Fixes a bug where the post-login passkey tile disappeared immediately after successful registration — the user never saw the success confirmation that #713 added.

Root cause

The register saga fires two actions in sequence:

  1. registerPasskeySuccessstate.auth.passkeyRegistration.submitting goes false
  2. loadPasskeysstate.auth.passkeys populates with the new credential

The PostLoginPasskeyPromptContainer computes show as:

__CONF__.passkeysEnabled && isRealUser && passkeys.length === 0

As soon as (2) lands, show flips to false. In the component render, the if (!show || dismissed) return null gate ran before the if (showSuccess) branch, so the component returned null the moment registration succeeded. The showSuccess effect did set the state, but the success card was never rendered.

Fix

Re-order the render checks:

  1. if (dismissed) return null — preserves the 3.5s auto-dismiss behaviour
  2. if (showSuccess) → render success card (regardless of show)
  3. if (!show) return null — normal gate for the idle state
  4. Normal supported check
  5. Render the main prompt

Test plan

  • 1933 tests pass, typecheck clean (includes new regression test simulating the real redux sequence: submitting → false AND show → false in the same transition)
  • Manually register a passkey from the tile on lszm-test
  • Confirm the success card appears with the message and auto-dismisses after ~3.5s

The success card was never shown in practice because the register
saga fires registerPasskeySuccess AND loadPasskeys in sequence. As
soon as loadPasskeys populates state.auth.passkeys, the container's
show prop flips to false (passkeys.length === 0 no longer holds),
and the component's top-level if-!show-return-null ran before the
showSuccess branch — so the tile disappeared without ever displaying
the success feedback.

Re-order the render: dismissed first (so the 3.5s auto-dismiss still
works), then the success branch (regardless of show), then the
show/supported gates for the main state.
@rzueger rzueger merged commit aa42819 into develop Apr 19, 2026
2 checks passed
@rzueger rzueger deleted the fix/passkey-success-feedback-visible branch April 19, 2026 11:07
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant