Adds an independent notifications gRPC service. Send validates and renders an immutable template revision, persists a caller-scoped idempotent job through the shared database wrapper, and delivers email asynchronously through shared Sendico-derived NATS messaging. SendGrid is adapted to the provider-neutral rendered-email contract; Resend implements the same interface. DriverConfig selects the driver.
The protobuf contract lives in backend/notifications/interface/proto/v1/interface.proto in an independent interface module. Generated bindings are ignored and generated before build/test; source and standalone Go-client archives can be packaged without committing generated code.
Validation: make test and make lint-backend passed; real disposable MongoDB/NATS tests cover concurrency, idempotency, claims and recovery. Local HTTP tests verify both provider payloads. Interface archive generation and standalone client go test ./... passed. No live emails sent or optional security scans run.
Limits: email only; no delivery receipts. Ambiguous provider sends become UNKNOWN without automatic replay. NATS replication, retention and provisioning are configurable; production drift is rejected. Trusted callers enforce recipient ownership/preferences.
Closes#36. Stacked on #35 (bff-34): merge #35 first, retarget this PR to main, then merge when authorized. Source provenance and operational details are in backend/notifications/PROVENANCE.md and README.md.
Completion validation: full make test and make lint-backend passed in a clean isolated checkout, as did interface packaging. The integration test exercises authenticated TLS gRPC submission through shared MongoDB and NATS to the email driver, including escaped parameter propagation. Pending expiry works during bus outages and shared provisioning honors cancellation. Shared-workspace validation was initially blocked by concurrent auth/product dependency and formatting edits; those changes are outside this contribution.
Adds an independent notifications gRPC service. Send validates and renders an immutable template revision, persists a caller-scoped idempotent job through the shared database wrapper, and delivers email asynchronously through shared Sendico-derived NATS messaging. SendGrid is adapted to the provider-neutral rendered-email contract; Resend implements the same interface. DriverConfig selects the driver.
The protobuf contract lives in backend/notifications/interface/proto/v1/interface.proto in an independent interface module. Generated bindings are ignored and generated before build/test; source and standalone Go-client archives can be packaged without committing generated code.
Validation: make test and make lint-backend passed; real disposable MongoDB/NATS tests cover concurrency, idempotency, claims and recovery. Local HTTP tests verify both provider payloads. Interface archive generation and standalone client go test ./... passed. No live emails sent or optional security scans run.
Limits: email only; no delivery receipts. Ambiguous provider sends become UNKNOWN without automatic replay. NATS replication, retention and provisioning are configurable; production drift is rejected. Trusted callers enforce recipient ownership/preferences.
Closes #36. Stacked on #35 (bff-34): merge #35 first, retarget this PR to main, then merge when authorized. Source provenance and operational details are in backend/notifications/PROVENANCE.md and README.md.
Completion validation: full make test and make lint-backend passed in a clean isolated checkout, as did interface packaging. The integration test exercises authenticated TLS gRPC submission through shared MongoDB and NATS to the email driver, including escaped parameter propagation. Pending expiry works during bus outages and shared provisioning honors cancellation. Shared-workspace validation was initially blocked by concurrent auth/product dependency and formatting edits; those changes are outside this contribution.
tech
added the backend label 2026-09-12 12:42:11 +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.
Adds an independent notifications gRPC service. Send validates and renders an immutable template revision, persists a caller-scoped idempotent job through the shared database wrapper, and delivers email asynchronously through shared Sendico-derived NATS messaging. SendGrid is adapted to the provider-neutral rendered-email contract; Resend implements the same interface. DriverConfig selects the driver.
The protobuf contract lives in backend/notifications/interface/proto/v1/interface.proto in an independent interface module. Generated bindings are ignored and generated before build/test; source and standalone Go-client archives can be packaged without committing generated code.
Validation: make test and make lint-backend passed; real disposable MongoDB/NATS tests cover concurrency, idempotency, claims and recovery. Local HTTP tests verify both provider payloads. Interface archive generation and standalone client go test ./... passed. No live emails sent or optional security scans run.
Limits: email only; no delivery receipts. Ambiguous provider sends become UNKNOWN without automatic replay. NATS replication, retention and provisioning are configurable; production drift is rejected. Trusted callers enforce recipient ownership/preferences.
Closes #36. Stacked on #35 (bff-34): merge #35 first, retarget this PR to main, then merge when authorized. Source provenance and operational details are in backend/notifications/PROVENANCE.md and README.md.
Completion validation: full make test and make lint-backend passed in a clean isolated checkout, as did interface packaging. The integration test exercises authenticated TLS gRPC submission through shared MongoDB and NATS to the email driver, including escaped parameter propagation. Pending expiry works during bus outages and shared provisioning honors cancellation. Shared-workspace validation was initially blocked by concurrent auth/product dependency and formatting edits; those changes are outside this contribution.