Automatically create RUB, USDT and USDC customer accounts #72

Closed
opened 2026-10-23 10:43:03 +00:00 by tech · 1 comment
Owner

Goal

Create RUB, USDT and USDC accounts automatically for new customers and existing customers missing them. Remove the support dead end from currency-account setup.

Approach

Ensure accounts after identity intake during signup and activation resend, and on authenticated wallet access for existing customers. Use only Sendico public HTTP with provider-enforced organization/subject/currency uniqueness. Preserve funds, ownership, saved bindings and existing extra currencies. Provide preparation and working retry states in English and Russian, with backend setup outcome and latency measurement.

Acceptance criteria

  • Signup creates all three default accounts before activation delivery succeeds.
  • Existing customers get missing defaults automatically on wallet load.
  • Partial failure, lost responses and concurrency reuse accounts and resume provider wallet/route setup.
  • Frozen/foreign/duplicate bindings cannot reset funds or create a replacement.
  • Currency-account copy no longer directs users to support; loading/failure/retry work at 320px and 1.6× text in English and Russian.
  • Backend/frontend reviews, full tests, lint and focused regressions pass; implementation is committed, pushed and delivered by PR.

Notes

Primary module wallet; secondary modules auth signup, Sendico adapter and frontend workspace. Branch wallet-72. Delivery: PR #73. This replaces the rejected copy-only approach from #66 / merged PR #68. Dependencies/merge and deployment order: Sendico PR #2970 Ledger and its unique index, then Product Edge, then this SXCHNGE backend/frontend. The provider capability must be advertised before the consumer creates accounts. No new runtime settings; no funds credited or payment execution.

Existing customers are repaired when they next open the wallet; there is no eager scan of dormant customers. Existing manually provisioned ledgers and additional currencies are retained. Native device/screen-reader QA and a deployed end-to-end signup remain release checks. Saved funding/payout method setup remains separate from currency-account creation. Setup attempt metrics do not claim unique-customer conversion or client-abandonment coverage.

Validation passed: flutter gen-l10n; frontend/app flutter analyze; changed-Dart format check; make lint-backend; git diff --check; independent make test-frontend (242 tests); and TESTCONTAINERS_RYUK_DISABLED=true GOFLAGS='-p=2' make test (full backend integration/race checks plus 242 frontend tests). Earlier plain runs hit dependency DNS and Mongo/Ryuk startup timeouts; disabling the failing cleanup helper retained all assertions and timeouts, and each test's existing container cleanup still ran. An initial transport field naming failure was fixed by using LedgerRole in the provider DTO, preserving the architecture guard. The live local provider catalog confirms RUB scale 2 and USDT/USDC scale 6. Provider Mongo concurrency/frozen-binding tests, full Sendico backend tests and lint also passed. No security scan was requested.

Scope, UX/measurement review, validation and rollout are recorded in docs/payments.md, docs/local-sendico.md and docs/ux/exchange-workspace.md. Both PRs are reviewable; merge/deployment are not authorized in this chat.

### Goal Create RUB, USDT and USDC accounts automatically for new customers and existing customers missing them. Remove the support dead end from currency-account setup. ### Approach Ensure accounts after identity intake during signup and activation resend, and on authenticated wallet access for existing customers. Use only Sendico public HTTP with provider-enforced organization/subject/currency uniqueness. Preserve funds, ownership, saved bindings and existing extra currencies. Provide preparation and working retry states in English and Russian, with backend setup outcome and latency measurement. ### Acceptance criteria - [x] Signup creates all three default accounts before activation delivery succeeds. - [x] Existing customers get missing defaults automatically on wallet load. - [x] Partial failure, lost responses and concurrency reuse accounts and resume provider wallet/route setup. - [x] Frozen/foreign/duplicate bindings cannot reset funds or create a replacement. - [x] Currency-account copy no longer directs users to support; loading/failure/retry work at 320px and 1.6× text in English and Russian. - [x] Backend/frontend reviews, full tests, lint and focused regressions pass; implementation is committed, pushed and delivered by PR. ### Notes Primary module wallet; secondary modules auth signup, Sendico adapter and frontend workspace. Branch wallet-72. Delivery: [PR #73](https://git.sendico.io/tech/sxchnge/pulls/73). This replaces the rejected copy-only approach from #66 / merged PR #68. Dependencies/merge and deployment order: [Sendico PR #2970](https://git.sendico.io/tech/sendico/pulls/2970) Ledger and its unique index, then Product Edge, then this SXCHNGE backend/frontend. The provider capability must be advertised before the consumer creates accounts. No new runtime settings; no funds credited or payment execution. Existing customers are repaired when they next open the wallet; there is no eager scan of dormant customers. Existing manually provisioned ledgers and additional currencies are retained. Native device/screen-reader QA and a deployed end-to-end signup remain release checks. Saved funding/payout method setup remains separate from currency-account creation. Setup attempt metrics do not claim unique-customer conversion or client-abandonment coverage. Validation passed: flutter gen-l10n; frontend/app flutter analyze; changed-Dart format check; make lint-backend; git diff --check; independent make test-frontend (242 tests); and TESTCONTAINERS_RYUK_DISABLED=true GOFLAGS='-p=2' make test (full backend integration/race checks plus 242 frontend tests). Earlier plain runs hit dependency DNS and Mongo/Ryuk startup timeouts; disabling the failing cleanup helper retained all assertions and timeouts, and each test's existing container cleanup still ran. An initial transport field naming failure was fixed by using LedgerRole in the provider DTO, preserving the architecture guard. The live local provider catalog confirms RUB scale 2 and USDT/USDC scale 6. Provider Mongo concurrency/frozen-binding tests, full Sendico backend tests and lint also passed. No security scan was requested. Scope, UX/measurement review, validation and rollout are recorded in docs/payments.md, docs/local-sendico.md and docs/ux/exchange-workspace.md. Both PRs are reviewable; merge/deployment are not authorized in this chat.
tech added the frontendbackend labels 2026-10-23 10:43:03 +00:00
tech self-assigned this 2026-10-23 10:43:03 +00:00
tech added this to the SXCHNGE project 2026-10-23 10:43:03 +00:00
tech added reference wallet-72 2026-10-23 10:43:26 +00:00
tech closed this issue 2026-10-23 11:10:48 +00:00
Author
Owner

Merged and deployed locally under the user's authorization on 2026-10-23: Sendico #2970 first, Ledger/index before Product Edge, then SXCHNGE #73 backend/session worker and frontend. Real rollout checks additionally exposed two provider defects, corrected and delivered in merged Sendico #2972 (connector binding metadata) and #2974 (read-only completed provisioning replay).

Verified using real public HTTP requests at https://localhost:5126: an existing pre-update customer went from zero currency accounts to RUB, USDT and USDC on wallet load; a new signup created all three before activation or wallet access. Activation and email-factor login succeeded. All eight final concurrent wallet loads (four per customer) returned identical account IDs and balances without errors, and provider account IDs/counts remained unchanged. Existing customers are repaired on their next wallet load; dormant users are not bulk-scanned. No funds credited or payment executed.

Final backend tests/lint and focused race checks passed for both provider corrections. Final local verification passed seven healthy SXCHNGE services, verified HTTPS and authenticated Sendico reads; Ledger and Product Edge are healthy and the unique external-binding index is confirmed. An intermediate health check during Edge rebuild failed transiently; the final post-build check passed. The integration's existing organization-scoped ledger-create permission was granted. Unrelated mounted Fee OWN_HOLD work was preserved with selective ignored deployment overlays.

Consumer source: 3b551f1565. Provider changes: merged Sendico main 5de84e29c7473830b2a06402912dbacef0fc4705, selectively applied over the local Fee source. Durable evidence: /Users/stephan/Documents/Projects/sxchnge/.local/dev/deployments/wallet-72/verification.json, wallet-checks.log, health.log, deployed-source.sha256 and sendico.override.yml. Keep referenced overlay source/worktree files while containers run. Provider contract mapping and deployment findings are tracked in Sendico docs/external-customer-accounts.md and issue #2968. This completes the local deployment; remote production and native screen-reader/device QA were not performed.

Merged and deployed locally under the user's authorization on 2026-10-23: Sendico #2970 first, Ledger/index before Product Edge, then SXCHNGE #73 backend/session worker and frontend. Real rollout checks additionally exposed two provider defects, corrected and delivered in merged Sendico #2972 (connector binding metadata) and #2974 (read-only completed provisioning replay). Verified using real public HTTP requests at https://localhost:5126: an existing pre-update customer went from zero currency accounts to RUB, USDT and USDC on wallet load; a new signup created all three before activation or wallet access. Activation and email-factor login succeeded. All eight final concurrent wallet loads (four per customer) returned identical account IDs and balances without errors, and provider account IDs/counts remained unchanged. Existing customers are repaired on their next wallet load; dormant users are not bulk-scanned. No funds credited or payment executed. Final backend tests/lint and focused race checks passed for both provider corrections. Final local verification passed seven healthy SXCHNGE services, verified HTTPS and authenticated Sendico reads; Ledger and Product Edge are healthy and the unique external-binding index is confirmed. An intermediate health check during Edge rebuild failed transiently; the final post-build check passed. The integration's existing organization-scoped ledger-create permission was granted. Unrelated mounted Fee OWN_HOLD work was preserved with selective ignored deployment overlays. Consumer source: 3b551f1565ccc937c2f92c4f77c7e2e0c244dad3. Provider changes: merged Sendico main 5de84e29c7473830b2a06402912dbacef0fc4705, selectively applied over the local Fee source. Durable evidence: /Users/stephan/Documents/Projects/sxchnge/.local/dev/deployments/wallet-72/verification.json, wallet-checks.log, health.log, deployed-source.sha256 and sendico.override.yml. Keep referenced overlay source/worktree files while containers run. Provider contract mapping and deployment findings are tracked in Sendico docs/external-customer-accounts.md and issue #2968. This completes the local deployment; remote production and native screen-reader/device QA were not performed.
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Depends on
You do not have permission to read 1 dependency
Reference: tech/sxchnge#72