/goal /ultracode-workflows [DOM-1b] self-serve custom domains (BYOD, Vercel-style, TXT-verify + per-app issuer selection) #34

Closed
opened 2026-07-01 02:03:47 +00:00 by plat · 0 comments
Owner

Track/Wave: DOM-1b · Wave G2 · Size L
Repos: mcp, gitops
Depends on: DOM-1a

Why

The rest of the self-serve-custom-domains proposal beyond the ACME issuer: lets tenants bring their own domains with ownership verification. The resolution half (resolveAppHost) is already built.

Scope

Pure domains.ts helpers (addDomainLine, challengeRecordName, isPlatformHost); stateless-HMAC add_domain/verify_domain tools doing a live resolveTxt and writing clusters/local/domains.yaml via gitopsPush; issuer selection threaded into the existing overlay Certificate block (overlayManifests ~2320, no new render path); set_app_domain/set_org_domain wrappers reusing the re-host path (server.ts:2811); both tools added to authorize()'s owner-gated allowlist.

Acceptance

On a germinated daughter, add_domain → publish TXT → verify_domain writes the org→domain line; create_app(domain:) yields an Ingress host + cert issuerRef=letsencrypt-dns01 matching the single-resolved-host invariant.

Notes

Seam B (overlay renderer) — HEAD of the overlay chain. Open decisions: ACME provider; apex vs subdomain; daughters inherit vs scrub parent domains.


Part of the First Client Deploy → Governance roadmap. The owning agent may recurse into its own subagent team (ultracode workflow) if the task warrants. Honor the seam-serialization: land on a shared seam by rebase, and don't start a seam position until the prior one has merged.

**Track/Wave:** `DOM-1b` · Wave **G2** · Size **L** **Repos:** `mcp`, `gitops` **Depends on:** DOM-1a ## Why The rest of the self-serve-custom-domains proposal beyond the ACME issuer: lets tenants bring their own domains with ownership verification. The resolution half (resolveAppHost) is already built. ## Scope Pure domains.ts helpers (addDomainLine, challengeRecordName, isPlatformHost); stateless-HMAC add_domain/verify_domain tools doing a live resolveTxt and writing clusters/local/domains.yaml via gitopsPush; issuer selection threaded into the existing overlay Certificate block (overlayManifests ~2320, no new render path); set_app_domain/set_org_domain wrappers reusing the re-host path (server.ts:2811); both tools added to authorize()'s owner-gated allowlist. ## Acceptance On a germinated daughter, add_domain → publish TXT → verify_domain writes the org→domain line; create_app(domain:) yields an Ingress host + cert issuerRef=letsencrypt-dns01 matching the single-resolved-host invariant. ## Notes **Seam B (overlay renderer) — HEAD of the overlay chain. Open decisions: ACME provider; apex vs subdomain; daughters inherit vs scrub parent domains.** --- *Part of the **First Client Deploy → Governance** roadmap. The owning agent may recurse into its own subagent team (ultracode workflow) if the task warrants. Honor the seam-serialization: land on a shared seam by rebase, and don't start a seam position until the prior one has merged.*
plat closed this issue 2026-07-01 17:07:20 +00:00
Sign in to join this conversation.
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Reference
open-platform/mitosis#34
No description provided.