rdev/internal/adapter
jordan ddcfe52b5c
Some checks failed
ci/woodpecker/push/woodpecker Pipeline failed
feat: implement shared notify host model for platform email delivery
Replace per-project notify host provisioning (7-9 API calls + DNS + async
Resend verification) with a shared platform host for all *.threesix.ai projects.

Under the new model:
- CreateProjectNotify: 3 calls only (account + send key + host grant)
- No per-project Resend domain, DNS records, or async verification
- All *.threesix.ai projects share `threesix.ai` as the platform host
- Custom domains still get a dedicated host via ReprovisionNotifyHost

Changes:
- domain/notify.go: slim NotifyCredentials (no Host/From/ResendDomainID);
  add NotifyHostCredentials for reprovision return path
- port/notify_provisioner.go: update interface signatures and docs
- adapter/notify/provisioner.go: rewrite CreateProjectNotify (3 steps);
  rewrite DeleteProjectNotify (account-only vs full cleanup)
- adapter/notify/provisioner_reprovision.go: return *NotifyHostCredentials
- adapter/notify/provisioner_test.go: update tests for new model
- service/project_infra_crud.go: store only NOTIFY_API_KEY on provision
- domain/credential.go: add CredKeyNotifySharedHost/CredKeyNotifySharedFrom
- cmd/rdev-api/config.go: add NotifySharedHost/NotifySharedFrom to InfraConfig
- service/component.go: add notifySharedHost/notifySharedFrom + WithNotifyDefaults
- service/component_deploy.go: inject shared host defaults when no custom host stored
- handlers/notify.go: handle shared-host projects in Reprovision guard;
  add WithSharedNotifyHost builder
- cmd/rdev-api/main.go: wire SharedHost to provisioner, component service,
  and notify handler

Bootstrap: NOTIFY_SHARED_HOST=threesix.ai and NOTIFY_SHARED_FROM=noreply@threesix.ai
stored in credential store (host id=1 already provisioned with Resend provider).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-02-25 17:04:11 -07:00
..
cached feat: Implement hexagonal architecture with services, webhooks, queue, and telemetry 2026-01-25 19:57:46 -07:00
citadel feat: add GCS-based persistent media storage, AI generation pipeline, and composable skeleton packages 2026-02-19 21:29:09 -07:00
claudebox feat: add claude_id tracking and session improvements for interactive dev 2026-02-24 00:20:32 -07:00
cloudflare fix: correct Resend DNS record type, name, and MX priority 2026-02-23 19:52:11 -07:00
cockroach chore: accumulated platform hardening and CI fixes 2026-02-10 23:16:56 -07:00
codeagent fix(worker): include stdout in error messages when Claude command fails 2026-02-10 17:55:46 -07:00
deployer fix(rc-5): add Redis ACL persistence + cache reprovision endpoint 2026-02-24 20:22:31 -07:00
gcs fix(templates): upgrade Go to 1.25 and fix Woodpecker syntax 2026-02-08 23:57:38 -07:00
gitea fix: resolve 7 root causes causing cookbook deployment failures 2026-02-24 18:49:09 -07:00
kubernetes feat: add claude_id tracking and session improvements for interactive dev 2026-02-24 00:20:32 -07:00
memory feat: implement project access enforcement and management API 2026-02-21 15:38:37 -07:00
notify feat: implement shared notify host model for platform email delivery 2026-02-25 17:04:11 -07:00
postgres feat: add claude_id tracking and session improvements for interactive dev 2026-02-24 00:20:32 -07:00
redis fix: handle missing Redis credentials and redis.Nil in provisioner 2026-02-23 05:19:00 -07:00
sdlc refactor: add timeout constants for agent execution tiers 2026-02-11 10:48:24 -07:00
templates fix: resolve 7 root causes causing cookbook deployment failures 2026-02-24 18:49:09 -07:00
woodpecker chore: accumulated platform hardening and CI fixes 2026-02-10 23:16:56 -07:00
zot chore: accumulated platform hardening and CI fixes 2026-02-10 23:16:56 -07:00