[META] Email / notifications strategy — demo-deployer + hero_onboarding arcs #236
Labels
No labels
meeting-notes
meeting-transcript
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
lhumina_code/home#236
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
[META] Email / notifications strategy — Hero OS demo-deployer + hero_onboarding arcs
Scope: mechanism for transactional emails originated by either the free-demo arc (home#235) or the paid commercial arc (hero_onboarding#1).
Decision (locked at D-20): use SendGrid for all transactional emails originated by either arc. No second email vendor. No self-hosted SMTP for v0. Provider abstraction (
EmailSendertrait) wraps the SendGrid implementation so future provider swaps are mechanical, but no swap is planned.Sender domain: TBD — picked at the first session that ships an email-sending code path. Candidates:
heroos.com,noreply.heroos.com, or a subdomain of the platform host. Locked + recorded as a follow-up note on D-20 at first-use.What this covers
forge.ourworld.tfRejected alternatives
What needs to happen at the first email-sending session (acceptance criteria)
The session that first writes email-sending code must, before merging:
EmailSendertrait (or equivalent) + a SendGrid concrete impl + at least one transactional email type end-to-end.decisions/D-20-email-provider-sendgrid.md(not as a new decision — same decision, populated detail).Out of scope (this issue)
Sequencing
prompt.md §3so any session that touches email knows the SendGrid + acceptance-criteria constraint.Cross-links
decisions/D-20-email-provider-sendgrid.md— the formal decision lock with full rationale + consequences + alternatives. This issue is the live who-sends-what tracker; D-20 is the durable rationale anchor.Update: the email provider choice has changed since this issue was written. We will use Resend instead of SendGrid, behind a small provider abstraction (one send method), by porting the implementation already running in the freezone project (about 100 lines, including a dev-mode fallback that just logs when no API key is set). The first email to ship is the demo deployer's "your machine is ready, here is the URL" message, sent from noreply@hero.ourworld.tf. This is planned as the next step after the current agent and books work.
Signed-by: mik-tf mik-tf@noreply.invalid
Update for the next email step. The demo-arc "your VM is ready, here is the URL" email is moving from deferred to active so testers can be onboarded automatically. The provider decision has changed since this issue was written: use Resend instead of SendGrid, keeping the same provider-abstraction trait so the swap stays mechanical. The freezone app already runs a Resend implementation that can be ported (about 100 lines, with a dev-mode fallback that logs instead of sending). Plan: port it into hero_os_tfgrid_deployer, send from a Hero sender address, store the key in the deployer secret store, and test the send end to end on a provision.