Verification — the first customer domain issues a certificate on the live motir-marketing Fly app, read from the platform, and its primary canonical is served
Opened by Zhu Yue ·
Verify, on the LIVE deployment, that the capability MOTIR-3878 shipped actually works end to end — a real customer domain, a real certificate issued by Fly on the motir-marketing app, and the canonical served from it. Every acceptance criterion here is a read of the platform or of a live host, never of a file in a repository.
Why this is a sibling of the story under the epic, not a child of it
A card whose criteria read the deployment cannot live inside the story it verifies: completing a container cascades done onto every child, and the story's own last merge is what completes it — so a child that reads production would be closed by the event it is meant to check (plan-rules/core.md gate 14(c)). It therefore hangs beside the story under the epic, blocked_by the story. That edge crosses kinds (task ← story); it is the shape the gate prescribes and is recorded here rather than left implicit.
Recipe
- Precondition read.
fly secrets list -a motir-coreshowsFLY_CERTS_TOKEN,FLY_CERTS_APPandMOTIR_PUBLIC_TENANT_DOMAIN;fly certs list -a motir-marketingshows the base domain and its wildcard issued (both were the provisioning cards' job — this step confirms nothing regressed). - Tenant subdomain. In a workspace you control, claim a subdomain in Settings → Public address; open
https://<sub>.<base>/<identifier>from a browser with no Motir session — it renders the project;curl -sI https://motir.co/p/<identifier>answers301withlocationon the new address. - Customer domain. Point a domain you control (a subdomain by
CNAME, following the pane's instructions), add it, create theTXT, press Verify; watch the state moveunverified → pending → issuedin the pane. Read the SAME state from the platform:fly certs check <host> -a motir-marketingreports the certificate issued, andcurl -sI https://<host>/answers200with a valid chain (openssl s_client -connect <host>:443 -servername <host>shows the issuer). - Primary. Press Make primary;
curl -s https://<host>/ | grep -o '<link rel="canonical"[^>]*>'nameshttps://<host>/; the subdomain address andmotir.co/p/<identifier>both301to it;https://<host>/sitemap.xmland/robots.txtname only that host. - Rename. Rename the subdomain; the old one
301s to the new one and is refused when re-claimed by another workspace. - Failure state. Remove the
TXT(or point the CNAME away) and let the status job run; the pane shows the failure state the design draws, with an action a customer can take. - Record every command and its output on this card, and publish the browser recording of steps 2–5 to the card.
Acceptance criteria
- Each numbered step above has its command and the literal output pasted on this card, dated, with the host names used.
fly certs check <host> -a motir-marketingfor the customer domain reports the certificate as issued, and the browser shows a valid certificate for the same host.- The canonical,
og:url,sitemap.xmlandrobots.txtread from the primary host name only that host; the two non-primary addresses answer301to it. - The renamed subdomain's previous name still redirects after the rename.
- A recording of the settings flow and the resulting public page is attached to this card.
Context refs
- MOTIR-3878 — the story this verifies; its verification recipe is the source of steps 2–5
motir-core/docs/decisions/public-tenant-addresses.md— the ADR (Q5 names the certificate path being read; Q6 the canonical rule)- Fly —
https://fly.io/docs/flyctl/certs/(fly certs check,fly certs list)
Discussion
No comments yet.
Adding to this discussion signs you in on app.motir.co and brings you back to this request.