Files
3031023-xyz-public/docs/cutover-runbook.md
T

88 lines
4.2 KiB
Markdown

# 3031023.xyz Worker cutover runbook
## Scope and safety boundary
This runbook moves only the Happy Tails apex site to the separately deployed
static Worker `3031023-xyz`. It does not change the sign-up flow, n8n, the
onboarding Worker, blog hosting, or any other site.
The Pages project `3031023-xyz` remains available as the immediate rollback
target until the new apex deployment has been accepted.
Routine preview and candidate jobs never create, delete, or change DNS records,
custom domains, routes, or redirect rules. The candidate workflow only deploys
static assets to a distinct Worker.
## Pre-cutover record
- Existing rollback project: Cloudflare Pages `3031023-xyz`.
- Existing active custom domain: `3031023.xyz`.
- Existing Pages production deployment: `2fb1b659-5928-4470-bb04-ef4c9105b843`
from the `main` branch.
- Preview Worker: `3031023-xyz-www-preview`, with no custom domains or routes.
- Production Worker: `3031023-xyz-www`, deployed by the dedicated `Deploy
primary production Worker` workflow for relevant pushes to `main`. The
workflow updates static assets only; it cannot change DNS, custom domains,
routes, or redirect rules.
## Cutover sequence (requires separate approval)
1. Confirm the candidate Worker deployment completed and record its version ID.
2. Verify its workers.dev URL for status, titles, static 404, mobile navigation,
sitemap, robots, and security headers.
3. In Cloudflare, remove `3031023.xyz` from the Pages project only after the
candidate is verified. Do not delete the Pages project or its deployment.
4. Attach `3031023.xyz` as the custom domain for the production Worker.
5. Attach `www.3031023.xyz` to the same Worker and create a Cloudflare Redirect
Rule for `www.3031023.xyz/*` to the matching `https://3031023.xyz/*` URL.
This preserves the apex canonical policy without adding hostname-routing
Worker code.
6. Re-run the production verification checklist and leave the Pages project in
place during the acceptance window.
## Rollback
1. Remove the custom domains from the production Worker and disable the `www`
redirect rule.
2. Restore `3031023.xyz` to the unchanged Pages project `3031023-xyz`.
3. Verify the known Pages deployment at its Pages URL and then at the apex.
The cutover operator records the actual Worker version ID, rule ID, time, and
verification results in the migration plan after acceptance.
## Cutover record — 2026-09-02
- Source commit: `d431e6a` (the approved candidate deployment itself is
version `7dafcabd`).
- Pages custom-domain binding removed: `3031023.xyz` was detached from Pages;
the Pages project and its `3031023-xyz.pages.dev` rollback URL were retained.
- Worker custom-domain binding added: `3031023.xyz` is attached only to
`3031023-xyz-www`.
- Canonical redirect: a proxied `www` CNAME points to `3031023.xyz`; active
redirect rule `2a0783532f464384beda9a0344352861` issues a 301 to the matching
apex path and preserves query strings.
- External verification: apex Home and Services return 200; `www` returns the
expected 301; the static 404 returns 404; production robots and sitemap are
reachable; and the Pages rollback URL returns 200.
### Acceptance follow-up
Cloudflare is appending its managed content-signals section to `robots.txt`.
That section currently disallows several AI crawlers (including Google-Extended
and GPTBot). This was an existing zone-level setting and was not changed during
the cutover. Review it with the site's AI-search policy before final acceptance.
## Production content release — 2026-09-02
- Source commit: `2b7f8d8` (`main`), the accepted Git-backed Markdown content
pilot.
- Release path: the manually approved production workflow completed
successfully in 22 seconds. Subsequent relevant `main` pushes use the same
static-asset-only workflow automatically.
- Scope: updated only the static assets of the existing `3031023-xyz-www`
Worker. No custom domain, DNS, redirect rule, Pages project, form workflow,
CMS, or client-editing boundary changed.
- External verification: the apex returns 200, the two published FAQ entries
are present, the intentional static 404 returns 404, and `robots.txt` still
advertises the production sitemap.