Skip to content

Delegate post-merge registration routing to the KYC flow#716

Merged
TaprootFreak merged 1 commit into
stagingfrom
fix/realunit-email-delegate-registration
Jun 9, 2026
Merged

Delegate post-merge registration routing to the KYC flow#716
TaprootFreak merged 1 commit into
stagingfrom
fix/realunit-email-delegate-registration

Conversation

@TaprootFreak

Copy link
Copy Markdown
Contributor

Summary

Fixes the post-account-merge "Wallet registration not complete" error (red banner) in the RealUnit app, the CONTRIBUTING-aligned way.

When a new wallet signs up with an email that already belongs to an existing DFX account (account merge) and that account has no prior RealUnit registration, GET /v1/realunit/registration returns state=NewRegistration. The email-verification step, however, called registerWallet (POST /register/wallet) unconditionally — that endpoint only adds a wallet to an existing registration, so the API returns 400 "No RealUnit registration found".

Root cause — runtime-confirmed (PROD App Insights)

  • GET /v1/realunit/registration200 (state=NewRegistration, userData present from existing KYC)
  • POST /v1/realunit/register/wallet400 {"message":"No RealUnit registration found"} (×4 retries)
  • recovery: the user reached the KYC registration form → POST /v1/realunit/register/complete201
  • DB: the merged account had no RealUnitRegistration step until register/complete created it. 7-day breadth: 7× this 400 (affects every merge into a DFX account without a prior RealUnit registration).

Fix (app-only) — single source of registration routing

The email-verification flow is reduced to its actual job: confirm the merge (detect the JWT account change) and hand back to the KYC flow. KycCubit is now the only place that interprets the registration state and routes it (addWallet → link wallet, NewRegistration → full registration form, AlreadyRegistered → forward) — per CONTRIBUTING.md "API as Decision Authority". This removes the duplicated, unconditional register/wallet call.

Dead code removed accordingly: _completeRegistration, _mergeDetected, the RealUnitRegistrationService dependency, the KycEmailVerificationRegistrationFailure state, and the now-unused i18n key registerEmailVerificationRegistrationFailed (de + en).

Tests

  • email cubit (simplified): same account → Failure (link not visited); changed account → Success (merge confirmed; no registration here); retry (Failure → Success).
  • kyc_step_states_test updated for the removed state.

Test plan

  • flutter analyze clean
  • flutter test --exclude-tags golden — full suite passes (2312)
  • Coverage Floor Gate replicated locally — scoped lines 100.0% (floor 100)
  • DEV end-to-end: merge into a DFX account without RealUnit registration → no red error → lands on the registration form → register/complete

Supersedes #711 (minimal variant) and the earlier incorrect MergeProcessing PRs DFXswiss/api#3848 + #709.

@TaprootFreak TaprootFreak marked this pull request as ready for review June 9, 2026 13:37
@TaprootFreak TaprootFreak merged commit 43c3b45 into staging Jun 9, 2026
12 checks passed
@TaprootFreak TaprootFreak deleted the fix/realunit-email-delegate-registration branch June 9, 2026 14: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