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
changed title from Fix signup creation receipts and activation email worker lifetime to Fix signup and log actionable email provider failures2026-10-17 09:39:34 +00:00
tech
changed title from Fix signup and log actionable email provider failures to Restore signup and local SMTP email delivery2026-10-17 18:51:46 +00:00
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
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:
Validation:
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.Fix signup creation receipts and activation email worker lifetimeto Fix signup and log actionable email provider failuresFix signup and log actionable email provider failuresto Restore signup and local SMTP email deliveryRestore signup and local SMTP email deliveryto Restore signup, email delivery and local recovery