Submit sign-up customer facts to Sendico intake #46

Closed
opened 2026-10-14 22:31:13 +00:00 by tech · 0 comments
Owner

Goal

Connect SXCHNGE account sign-up to Sendico's public immutable identity Facts intake, with a durable customer-owned individual binding and confirmed receipt before activation.

Approach

Implemented the public HTTP provider adapter under providers/sendico, a durable signup_facts handoff using shared database repositories with majority writes/primary reads, runtime configuration, and sign-up/resend/activation gates. Send only full name, normalized email and local customer reference. Keep organization scope and provider credentials in the server adapter. Preserve atomic account/token creation while making the initial activation token replayable through a server-secret-derived key. Typed EN/RU support guidance reaches sign-up and verification recovery through DTO/mapper/service/model/provider boundaries. Existing auth journeys plus bounded backend metrics measure the outcome.

Acceptance criteria

  • Sign-up registers an independent individual and submits supported assertions through the public HTTP API.
  • Customer binding and intake receipts are durable; retries reuse the subject, original snapshot and source reference.
  • Concurrent/ambiguous registration cannot silently create duplicate subjects; uncertain outcomes require explicit reconciliation.
  • Failed intake never reports confirmed success or bypasses activation through resend; activation failures roll back token consumption.
  • Input, loading suppression, localized recovery and semantic analytics remain correct.
  • Configuration, privacy-safe diagnostics, rollout and reconciliation limitations are documented.
  • Backend/frontend/UX reviews and required validation pass; changes are committed, pushed and delivered in PR #47.

Notes

Delivered: #47 targeting main; branch identity-facts-46. Implementation a584c81; delivery record 7bf8b80. Owner tech; SXCHNGE project; backend/frontend labels. Primary module identity-facts; secondary modules auth, customers, runtime, shared database source and Flutter auth/verification.

Validation passed: GOFLAGS=-p=2 make test (all backend race tests and canonical frontend suites), make lint-backend, dart format --output=none --set-exit-if-changed for all 11 changed Dart files, and flutter analyze in frontend/app and frontend/packages/sxchnge_auth. Focused Go race and Flutter adapter/provider/widget checks also pass. Initial validation exposed an intake-retry activation cooldown issue, a Testcontainers reaper startup timeout, and a new locale fixture that double-disposed app-owned state. The flow and fixture were corrected; reduced Go package parallelism resolved container contention; the final full run passed.

Contracts: Sendico docs/api/identity-facts-intake.md and docs/api/individual-subjects.md (#2823/#2822). Intake acceptance is not verification/KYC or limit approval. Enable api.sendico only with provisioned endpoint/organization/source account IDs and a Vault-rendered unexpired same-account access token. Registration is non-idempotent upstream, so ambiguous results need the documented reconciliation procedure; no speculative repeat registration. Live provider resources, live email, deployment, merge and optional security scans were not performed. Preserve the unrelated notifications runtime configuration.

Durable documentation: docs/signup-facts.md, docs/auth-notifications.md and docs/implementation.md.

### Goal Connect SXCHNGE account sign-up to Sendico's public immutable identity Facts intake, with a durable customer-owned individual binding and confirmed receipt before activation. ### Approach Implemented the public HTTP provider adapter under providers/sendico, a durable signup_facts handoff using shared database repositories with majority writes/primary reads, runtime configuration, and sign-up/resend/activation gates. Send only full name, normalized email and local customer reference. Keep organization scope and provider credentials in the server adapter. Preserve atomic account/token creation while making the initial activation token replayable through a server-secret-derived key. Typed EN/RU support guidance reaches sign-up and verification recovery through DTO/mapper/service/model/provider boundaries. Existing auth journeys plus bounded backend metrics measure the outcome. ### Acceptance criteria - [x] Sign-up registers an independent individual and submits supported assertions through the public HTTP API. - [x] Customer binding and intake receipts are durable; retries reuse the subject, original snapshot and source reference. - [x] Concurrent/ambiguous registration cannot silently create duplicate subjects; uncertain outcomes require explicit reconciliation. - [x] Failed intake never reports confirmed success or bypasses activation through resend; activation failures roll back token consumption. - [x] Input, loading suppression, localized recovery and semantic analytics remain correct. - [x] Configuration, privacy-safe diagnostics, rollout and reconciliation limitations are documented. - [x] Backend/frontend/UX reviews and required validation pass; changes are committed, pushed and delivered in PR #47. ### Notes Delivered: https://git.sendico.io/tech/sxchnge/pulls/47 targeting main; branch identity-facts-46. Implementation a584c81; delivery record 7bf8b80. Owner tech; SXCHNGE project; backend/frontend labels. Primary module identity-facts; secondary modules auth, customers, runtime, shared database source and Flutter auth/verification. Validation passed: GOFLAGS=-p=2 make test (all backend race tests and canonical frontend suites), make lint-backend, dart format --output=none --set-exit-if-changed for all 11 changed Dart files, and flutter analyze in frontend/app and frontend/packages/sxchnge_auth. Focused Go race and Flutter adapter/provider/widget checks also pass. Initial validation exposed an intake-retry activation cooldown issue, a Testcontainers reaper startup timeout, and a new locale fixture that double-disposed app-owned state. The flow and fixture were corrected; reduced Go package parallelism resolved container contention; the final full run passed. Contracts: Sendico docs/api/identity-facts-intake.md and docs/api/individual-subjects.md (#2823/#2822). Intake acceptance is not verification/KYC or limit approval. Enable api.sendico only with provisioned endpoint/organization/source account IDs and a Vault-rendered unexpired same-account access token. Registration is non-idempotent upstream, so ambiguous results need the documented reconciliation procedure; no speculative repeat registration. Live provider resources, live email, deployment, merge and optional security scans were not performed. Preserve the unrelated notifications runtime configuration. Durable documentation: docs/signup-facts.md, docs/auth-notifications.md and docs/implementation.md.
tech added the backend label 2026-10-14 22:31:13 +00:00
tech self-assigned this 2026-10-14 22:31:13 +00:00
tech added reference identity-facts-46 2026-10-14 22:31:23 +00:00
tech added this to the SXCHNGE project 2026-10-14 22:31:33 +00:00
tech added the frontend label 2026-10-14 22:43:38 +00:00
tech changed reference from identity-facts-46 to identity-facts-46 2026-10-14 22:55:51 +00:00
tech closed this issue 2026-10-17 04:28:54 +00:00
Sign in to join this conversation.
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tech/sxchnge#46