Skip to content

Commit 385bc0b

Browse files
committed
Record the verified production documentation cutover and soak window
1 parent f4051a2 commit 385bc0b

2 files changed

Lines changed: 59 additions & 21 deletions

File tree

docs/deployment-runbook.md

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -8,23 +8,24 @@ irreversible step.
88

99
The Astro site is ready to build with `npm run build:pages`. That artifact
1010
contains the active website and `users-archive`, but not `doc` or `doc-latest`.
11-
The tested R2 Worker will serve generated documentation after phase 5. The
11+
The tested R2 Worker now serves generated documentation in production. The
1212
Astro artifact pairs a redirect Worker for classic active `.html` URLs with
1313
small Pages fallback files.
1414

1515
As checked on 5 September 2026, Cloudflare is authoritative for `gecode.dev`.
1616
Cloudflare proxies the apex GitHub Pages A records and the `www` CNAME to
1717
`gecode.github.io` with Full (strict) TLS and Always Use HTTPS. GitHub Pages
18-
still serves the active website. The 6.4.0 documentation canary now uses R2;
19-
other versions and aliases await production rollout. Astro has not been deployed.
18+
still serves the active website. All nine historical documentation versions
19+
and both latest aliases now use R2. Astro has not been deployed.
2020

2121
Cloudflare Email Routing is ready. Its managed MX, SPF, and DKIM records are
2222
authoritative, both forwarding destinations are verified, and the catch-all
2323
rule sends mail through the checked-in `gecode-email-routing` Worker. The
2424
private R2 documentation archive and `docs-staging.gecode.dev` Worker custom
2525
domain are live and pass the phase 4 smoke tests. Full R2 verification passed
2626
for all nine versions (52,385 files / 1,138,898,740 bytes). The 6.4.0 canary
27-
passes live checks and its two routes are fail-closed.
27+
has been removed after the production rollout. The two production route
28+
patterns are fail-closed, and final live checks pass.
2829

2930
The `cloudflare-staging`, `cloudflare-canary`, and `cloudflare-production`
3031
GitHub environments contain the stable Cloudflare account ID and the dedicated
@@ -38,7 +39,10 @@ records the local fixes, rollback build, verification limits and remaining
3839
work. Phases 2–4 below describe the original migration sequence; DNS delegation
3940
and infrastructure setup are largely complete. Staging deployment through
4041
GitHub and clean-checkout website CI pass. The website migration is merged
41-
in PR #7; Pages remains manual. Continue with phase 5 production rollout.
42+
in PR #7, with follow-up fixes in PRs #8 and #9; Pages remains manual.
43+
Production deployment and canary cleanup passed. The final checks completed
44+
on 5 September at about 14:15 UTC. Continue with the one-day documentation
45+
soak; do not deploy Astro before 6 September, 16:30 Europe/Stockholm.
4246

4347
## Cutover overview
4448

@@ -234,6 +238,8 @@ Worker route remains sufficient rollback.
234238
4. Verify Doxygen `.html` routes remain content pages and are handled by the
235239
documentation Worker.
236240
5. Deploy the production documentation routes and rerun the smoke tests.
241+
Read back the live route set and remove superseded routes only after their
242+
replacements are verified; Wrangler may retain old patterns.
237243
Confirm `/doc/sitemap.xml` serves the selected version's index and that its
238244
shards contain only canonical `/doc/latest/...` URLs. Confirm versioned
239245
content and `/doc-latest/...` return `X-Robots-Tag: noindex`, including PDFs.

docs/migration-readiness-review-2026-09-05.md

Lines changed: 48 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -7,10 +7,11 @@ as `30ccd9636fb7eabed4b14ed5fea09602652ac0be` after clean-checkout CI passed.
77
The MPG and release-support producer changes remain local. Existing working
88
trees were preserved.
99

10-
DNS migration, staging verification, full historical R2 verification and the
11-
6.4.0 documentation canary are complete. Jekyll still serves the active website.
12-
The remaining traffic changes are the full documentation routes, a one-day
13-
soak, and the separate Astro cutover. Future coordinated releases have a
10+
DNS migration, full historical R2 verification, staging/canary checks and the
11+
production documentation cutover are complete. The final production checks
12+
passed on 5 September at about 14:15 UTC. Jekyll still serves the active website.
13+
Allow at least one day of documentation soak before the separate Astro cutover
14+
(no earlier than 6 September, 16:30 Europe/Stockholm). Future coordinated releases have a
1415
working local preparation slice; their publication coordinator is unfinished.
1516

1617
The hosting arrangement is Cloudflare DNS/proxy, Workers and private R2, with
@@ -24,7 +25,7 @@ or Workers is a separate project and is unnecessary for this cutover.
2425
| DNS | Cloudflare nameservers `milan` and `tegan` are authoritative; the zone is active. MX and SPF use Cloudflare Email Routing. |
2526
| TLS | Cloudflare uses Full (strict) and Always Use HTTPS. Public HTTP redirects to HTTPS and the apex redirects to `www`. GitHub reports `https_enforced: false`; reconcile the origin setting separately. |
2627
| Production website | `/download.html` returns 200; `/download/` returns 404. Jekyll remains live. |
27-
| Production documentation | The 6.4.0 canary passes live HTTP and browser checks. Both narrow routes are fail-closed. Other versions and aliases still use the old origin pending production rollout. |
28+
| Production documentation | All nine historical versions and both aliases use R2. Only `/doc/latest/...` is indexable. The two production route patterns are fail-closed; the canary and superseded routes have been removed. |
2829
| Staging documentation | The reviewed Worker was deployed through GitHub. Its tests and live HTTP smoke checks pass for immutable 6.4.0, both aliases, canonical links, redirects, static assets and PDF range behavior. |
2930
| R2 | Public `r2.dev` access is disabled. The 14-day lifecycle applies only to staging. All nine archives were fully verified: 52,385 objects / 1,138,898,740 bytes, with no missing objects or hash failures. The 326 historical image-map MIME declarations are documented below. |
3031
| Email | Email Routing destinations and catch-all Worker configuration are present. Real delivery and delivery alerts were not exercised. |
@@ -93,15 +94,16 @@ Do not delete immutable R2 objects during rollback.
9394
The workflow additionally limits release branches to documentation deployment
9495
and validates the version pattern. Staging deployment through GitHub and its
9596
live smoke checks have passed.
96-
3. **Check operational records.** Confirm historical upload verification,
97-
fail-closed documentation routes, fail-open redirect routes, real mail
98-
delivery and useful error/delivery alerts. Keep the current DNS delegation.
97+
3. **Operational checks partly complete.** Historical uploads and fail-closed
98+
documentation routes are verified. Native documentation logs are enabled.
99+
Real mail delivery and useful failure alerts remain to be checked; redirect
100+
routes will be checked after Astro. Keep the current DNS delegation.
99101
4. **Canary documentation verified.** The 6.4.0 deployment passed HTML, source
100102
folding, changelog fragment, CSS/JS/image, PDF ranges, missing paths,
101103
canonical links and sitemap checks. Ordinary Jekyll pages remain unchanged.
102-
5. **Move documentation.** Deploy production documentation routes, verify
103-
historical versions and both aliases, then remove the narrower canary.
104-
Allow at least one day with the Jekyll origin still available as fallback.
104+
5. **Documentation moved.** Production routes, every historical version and
105+
both aliases pass verification. The canary is removed. Allow at least one
106+
day with the Jekyll origin still available as fallback before Astro.
105107
6. **Publish Astro.** Deploy `build:pages` from reviewed `main`. Verify ordinary
106108
pages, downloads, publications, archive search/browsing and mobile layout,
107109
plus R2 documentation. The Pages artifact must contain no documentation tree.
@@ -161,11 +163,37 @@ on the sampled source page. `/`, `/download.html` and the latest alias still
161163
return classic content; `/download/` retains the expected pre-Astro 404.
162164

163165
Operational review found an enabled $10 budget email alert, but no failure-alert
164-
policy. Documentation Worker logging is configured for the next deployment,
166+
policy. Documentation Worker logging is enabled in production,
165167
using [native Workers Logs](https://developers.cloudflare.com/workers/observability/logs/workers-logs/).
166168
Production deployment smoke checks allow for the five-minute alias cache TTL.
167169
Email Routing is ready, but delivery-event access requires Zone Analytics Read;
168-
real delivery remains unverified.
170+
real delivery remains unverified. The native alert UI requires a Cloudflare
171+
dashboard sign-in, and a notification policy alone does not configure a Worker
172+
failure detector.
173+
174+
## Production cutover result
175+
176+
[PR #8](https://github.com/Gecode/gecode.github.io/pull/8) added latest-only indexing,
177+
verified legacy map compatibility, native logs and production smoke checks.
178+
[PR #9](https://github.com/Gecode/gecode.github.io/pull/9) fixed query routing and
179+
the landing-page redirect. Both passed clean-checkout CI, staging and canary.
180+
181+
The [successful production run](https://github.com/Gecode/gecode.github.io/actions/runs/33970884194)
182+
deployed `f4051a2c15626d99236cc284e1afa88ce8e4215e` as Worker version
183+
`4d257836-ea9d-4820-8acb-d691082150f5`.
184+
[Canary cleanup](https://github.com/Gecode/gecode.github.io/actions/runs/33971074416)
185+
passed. The live route set was checked afterward and five superseded routes
186+
were removed; only `www.gecode.dev/doc*` and `www.gecode.dev/robots.txt*` remain,
187+
both fail-closed. After changing route patterns, verify the live set explicitly:
188+
this Wrangler deployment retained older routes instead of removing them.
189+
190+
The final public checks cover all historical version headers/noindex, latest
191+
and compatibility aliases, HTML/PDF indexing, query redirects, robots rules,
192+
sitemap index and shards, missing pages, PDF ranges and the classic landing page.
193+
The original production verification correctly failed on the queried `/doc`
194+
entry point; the corrected deployment and final checks passed. `/doc` now uses
195+
`/documentation.html`, which works throughout the classic-to-Astro transition.
196+
No Astro or active-site redirect Worker deployment has occurred.
169197

170198
## Documentation indexing policy
171199

@@ -219,7 +247,7 @@ Completed locally:
219247

220248
- Full website quality gate: Astro build, HTML, executable modes, 23 canonical
221249
routes, rendered semantics, 2 content tests, 10 documentation-tool tests,
222-
13 documentation-Worker tests, 5 redirect tests and 9 email tests; all configured
250+
21 documentation-Worker tests, 5 redirect tests and 9 email tests; all configured
223251
Worker dry-run builds pass.
224252
- Pages artifact: 12,198 files and 124,084,466 bytes, without documentation
225253
trees or symlinks. Archive path checks across 8,767 HTML files, restored
@@ -231,13 +259,17 @@ Completed locally:
231259
- Real MPG HTML build: 51 pages, local links, redirects, search assets and
232260
version marker verified. MPG's 14 unit tests and package-release platform
233261
tests pass.
262+
- Full MPG 6.4.0 PDF rehearsal: 609 pages / 2,799,680 bytes. PDF metadata,
263+
references, glyph/text extraction checks and immutable/latest URL annotations
264+
pass. The successful version marker matches the earlier HTML build. No MPG
265+
release was published.
234266
- Release-support's 50 tests and existing build dry run pass. Tests cover
235267
metadata advancing to 7.0.0, bundle corruption/mismatch and the publication
236268
stop. No real Gecode release was built or published.
237269
- The 91 MB classic rollback build from the exact July commit succeeds.
238270

239-
Still required: full Gecode plus MPG PDF preparation, production documentation
240-
rollout and soak, Astro cutover, real mail delivery, and failure-alert setup.
271+
Still required: a complete coordinated Gecode producer rehearsal, the
272+
documentation soak, Astro cutover, real mail delivery, and failure-alert setup.
241273
Clean-checkout CI and internal lychee checks pass; nonblocking external checks
242274
include new Astro URLs that are not live yet and broken historical external links. The archive browser samples are not
243275
an exhaustive accessibility or Lighthouse audit.

0 commit comments

Comments
 (0)