Restore signup, email delivery and local recovery #59

Merged
tech merged 10 commits from identity-facts-57 into main 2026-10-20 18:00:23 +00:00
Owner

Signup rejected successful Sendico HTTP 201 registration receipts, and its activation-email worker stopped when the startup context ended. This change accepts the documented receipt, preserves non-idempotent registration safety and keeps the worker alive until service shutdown. The original pending signup recovery is audited in docs/signup-facts.md.

Local notifications use authenticated SMTP for no-reply@sendico.io at mail.sendico.io:465 with verified TLS. Only the mailbox password is stored in Vault; non-secret settings remain in YAML. The adapter sends UTF-8 MIME alternatives and requires final DATA 250 acceptance. Explicit 4xx replies retry, 5xx replies fail and uncertain transport outcomes remain UNKNOWN without immediate resend. Provider diagnostics include bounded, redacted status/type/message fields without exposing content or credentials. Generator installation retains pinned tools and shares existing BuildKit caches.

Local service lifecycle fixes address two reproduced failures:

  • Compose init reaps orphaned ssl_client children from frontend HTTPS probes (15,888 zombies observed before; zero after 40 repeated probes).
  • A BFF restart could leave its Sendico session in the old network namespace, causing failed Vault DNS, stale session renewal and API HTTP 502. Bounded DNS-loss monitoring now restarts the session into the current namespace. Bootstrap/rotation recreate BFF and session together; Compose dependency restart and child cleanup preserve that lifecycle.

Validation:

  • Earlier full GOFLAGS=-p=2 make test (backend race tests and Flutter suites), make lint-backend and SMTP adapter tests pass for unchanged product source.
  • Current shell/Compose follow-up: make test-dev-tooling, Compose config validation and git diff --check pass.
  • Live BFF-only restart automatically recovered matching namespaces, session readiness and API HTTP 200. Paired recreation also passed.
  • make test-dev-rotation passed: three real Vault pool rotations, unchanged BFF process, 534 transaction-backed requests and zero failures.
  • Final sh infra/local/tools.sh verify passed: seven healthy SXCHNGE services, verified frontend/proxied BFF HTTPS, Vault/database checks and authenticated Sendico currency/ledger reads.
  • Verified SMTP authentication/NOOP returned 250 without submitting email. No customer email, failed-job replay or payment was performed during current validation; no optional security scans were requested.

An initial integration check found Sendico's Ledger announcement connection closed. Its existing services were restored in documented dependency order; no Sendico source or financial data changed. This latest follow-up changes shell/Compose/docs and does not claim a new full Go/Flutter run.

Task #57; branch identity-facts-57. Primary identity-facts; secondary auth, notifications and local infrastructure. Latest recovery commit 13cc9c3. Durable scope, recovery audit and validation: docs/signup-facts.md, docs/local-sendico.md, docs/local-development.md and backend/notifications/README.md. No merge performed.

October 19 browser follow-up: the user still sees the generic unavailable message; this is not resolved. During this follow-up, API health was 200 and signup counters showed only the operator's invalid probes. Added privacy-filtered Caddy signup status/duration access logging (request object, response headers and user ID deleted; other routes skipped). Rebuilt/recreated frontend using freshly resolved stable image pins. Caddy validation, Compose validation, invalid-signup HTTP 400 with sentinel-query/header/cookie exclusion, health HTTP 200 and git diff --check pass. No real signup or email submitted. Commit 4c4b639. Awaiting one observed browser attempt to distinguish HTTP rejection from browser transport/cache failure; health checks alone do not prove signup works.

Signup rejected successful Sendico HTTP 201 registration receipts, and its activation-email worker stopped when the startup context ended. This change accepts the documented receipt, preserves non-idempotent registration safety and keeps the worker alive until service shutdown. The original pending signup recovery is audited in docs/signup-facts.md. Local notifications use authenticated SMTP for no-reply@sendico.io at mail.sendico.io:465 with verified TLS. Only the mailbox password is stored in Vault; non-secret settings remain in YAML. The adapter sends UTF-8 MIME alternatives and requires final DATA 250 acceptance. Explicit 4xx replies retry, 5xx replies fail and uncertain transport outcomes remain UNKNOWN without immediate resend. Provider diagnostics include bounded, redacted status/type/message fields without exposing content or credentials. Generator installation retains pinned tools and shares existing BuildKit caches. Local service lifecycle fixes address two reproduced failures: - Compose init reaps orphaned ssl_client children from frontend HTTPS probes (15,888 zombies observed before; zero after 40 repeated probes). - A BFF restart could leave its Sendico session in the old network namespace, causing failed Vault DNS, stale session renewal and API HTTP 502. Bounded DNS-loss monitoring now restarts the session into the current namespace. Bootstrap/rotation recreate BFF and session together; Compose dependency restart and child cleanup preserve that lifecycle. Validation: - Earlier full GOFLAGS=-p=2 make test (backend race tests and Flutter suites), make lint-backend and SMTP adapter tests pass for unchanged product source. - Current shell/Compose follow-up: make test-dev-tooling, Compose config validation and git diff --check pass. - Live BFF-only restart automatically recovered matching namespaces, session readiness and API HTTP 200. Paired recreation also passed. - make test-dev-rotation passed: three real Vault pool rotations, unchanged BFF process, 534 transaction-backed requests and zero failures. - Final sh infra/local/tools.sh verify passed: seven healthy SXCHNGE services, verified frontend/proxied BFF HTTPS, Vault/database checks and authenticated Sendico currency/ledger reads. - Verified SMTP authentication/NOOP returned 250 without submitting email. No customer email, failed-job replay or payment was performed during current validation; no optional security scans were requested. An initial integration check found Sendico's Ledger announcement connection closed. Its existing services were restored in documented dependency order; no Sendico source or financial data changed. This latest follow-up changes shell/Compose/docs and does not claim a new full Go/Flutter run. Task #57; branch identity-facts-57. Primary identity-facts; secondary auth, notifications and local infrastructure. Latest recovery commit 13cc9c3. Durable scope, recovery audit and validation: docs/signup-facts.md, docs/local-sendico.md, docs/local-development.md and backend/notifications/README.md. No merge performed. October 19 browser follow-up: the user still sees the generic unavailable message; this is not resolved. During this follow-up, API health was 200 and signup counters showed only the operator's invalid probes. Added privacy-filtered Caddy signup status/duration access logging (request object, response headers and user ID deleted; other routes skipped). Rebuilt/recreated frontend using freshly resolved stable image pins. Caddy validation, Compose validation, invalid-signup HTTP 400 with sentinel-query/header/cookie exclusion, health HTTP 200 and git diff --check pass. No real signup or email submitted. Commit 4c4b639. Awaiting one observed browser attempt to distinguish HTTP rejection from browser transport/cache failure; health checks alone do not prove signup works.
tech added the backend label 2026-10-17 05:30:43 +00:00
tech added 1 commit 2026-10-17 05:30:43 +00:00
tech added 1 commit 2026-10-17 05:30:51 +00:00
tech added 1 commit 2026-10-17 09:39:06 +00:00
tech changed title from Fix signup creation receipts and activation email worker lifetime to Fix signup and log actionable email provider failures 2026-10-17 09:39:34 +00:00
tech added 1 commit 2026-10-17 18:51:29 +00:00
tech changed title from Fix signup and log actionable email provider failures to Restore signup and local SMTP email delivery 2026-10-17 18:51:46 +00:00
tech added 1 commit 2026-10-17 19:17:41 +00:00
tech added 1 commit 2026-10-17 21:38:12 +00:00
tech added 1 commit 2026-10-17 21:41:42 +00:00
tech added 1 commit 2026-10-18 11:54:33 +00:00
tech added 1 commit 2026-10-19 10:34:38 +00:00
tech changed title from Restore signup and local SMTP email delivery to Restore signup, email delivery and local recovery 2026-10-19 10:36:00 +00:00
tech added 1 commit 2026-10-19 10:41:27 +00:00
tech merged commit e84d2d1ad3 into main 2026-10-20 18:00:23 +00:00
tech deleted branch identity-facts-57 2026-10-20 18:00:24 +00:00
Sign in to join this conversation.
No Reviewers
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: tech/sxchnge#59