@@ -15,15 +15,16 @@ small Pages fallback files.
1515As checked on 5 September 2026, Cloudflare is authoritative for ` gecode.dev ` .
1616Cloudflare 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 production website and documentation; the Astro artifact has
19- not been deployed.
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.
2020
2121Cloudflare Email Routing is ready. Its managed MX, SPF, and DKIM records are
2222authoritative, both forwarding destinations are verified, and the catch-all
2323rule sends mail through the checked-in ` gecode-email-routing ` Worker. The
2424private R2 documentation archive and ` docs-staging.gecode.dev ` Worker custom
25- domain are live and pass the phase 4 smoke tests. No canary or production
26- documentation Worker routes exist yet.
25+ domain are live and pass the phase 4 smoke tests. Full R2 verification passed
26+ 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.
2728
2829The ` cloudflare-staging ` , ` cloudflare-canary ` , and ` cloudflare-production `
2930GitHub environments contain the stable Cloudflare account ID and the dedicated
@@ -36,7 +37,8 @@ The [5 September readiness review](migration-readiness-review-2026-09-05.md)
3637records the local fixes, rollback build, verification limits and remaining
3738work. Phases 2–4 below describe the original migration sequence; DNS delegation
3839and infrastructure setup are largely complete. Staging deployment through
39- GitHub now passes. Continue with clean-checkout website CI and phase 5 checks.
40+ 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.
4042
4143## Cutover overview
4244
@@ -116,12 +118,14 @@ The successful [staging run](https://github.com/Gecode/gecode.github.io/actions/
116118used commit ` 5ec53f3b111a46d92c42f8b996d79b86dc39cd80 ` on
117119` codex/verify-docs-staging-20260905 ` . That branch contains a limited Worker
118120snapshot with a staging-only push workflow and suppresses the old Pages
119- workflow for its branch. Land the complete website migration separately.
121+ workflow for its branch. The complete website migration was subsequently
122+ merged in [ PR #7 ] ( https://github.com/Gecode/gecode.github.io/pull/7 ) .
120123Worker tests, dry-run builds, deployment and all HTTP smoke checks passed.
121124The deployed ` gecode-documentation-staging ` version is
122125` f9295ce3-1641-4727-b3d9-8f0c7f31b016 ` . The pre-rehearsal version was
123- ` 8bfa5cfb-1c96-4cb6-8f57-d5d2bb85080c ` . Production and canary zone routes remain
124- absent, and the classic production pages still return 200.
126+ ` 8bfa5cfb-1c96-4cb6-8f57-d5d2bb85080c ` . The later
127+ [ canary run] ( https://github.com/Gecode/gecode.github.io/actions/runs/33967976199 )
128+ passed from merged ` main ` . Classic production pages still return 200.
125129
126130To replace the token, create a new token with those permissions, set
127131` CLOUDFLARE_API_TOKEN ` in all three environments, verify a staging deployment,
@@ -231,14 +235,21 @@ Worker route remains sufficient rollback.
231235 documentation Worker.
2322365 . Deploy the production documentation routes and rerun the smoke tests.
233237 Confirm ` /doc/sitemap.xml ` serves the selected version's index and that its
234- shards contain immutable versioned URLs.
238+ shards contain only canonical ` /doc/latest/... ` URLs. Confirm versioned
239+ content and ` /doc-latest/... ` return ` X-Robots-Tag: noindex ` , including PDFs.
240+ ` /robots.txt ` must allow documentation crawling so search engines can read
241+ those headers; it continues to exclude the users archive.
2352426 . Use the workflow's ` remove-canary ` operation with the ` canary ` environment.
236243 The narrow canary route is more specific than ` /doc/* ` and would otherwise
237244 keep intercepting that version.
238245
239- The production documentation routes are ` /doc ` , ` /doc/* ` , ` /doc-latest ` , and
240- ` /doc-latest/* ` . The Worker selects aliases through ` LATEST_DOC_VERSION ` ; it
241- does not copy alias objects.
246+ The production documentation routes are ` /doc ` , ` /doc/* ` , ` /doc-latest ` ,
247+ ` /doc-latest/* ` and ` /robots.txt ` . The Worker serves the same checked-in robots
248+ file as Astro so the indexing policy takes effect before the website cutover.
249+ It selects aliases through ` LATEST_DOC_VERSION ` ; it does not copy alias objects.
250+ Only ` https://www.gecode.dev/doc/latest/... ` is indexable. Versioned URLs remain
251+ available for citations and downloads. Stored versioned sitemaps stay immutable;
252+ the Worker rewrites the selected sitemap responses to latest URLs.
242253
243254Set the documentation routes to fail closed: after documentation leaves the
244255Pages artifact, fail-open traffic would reach a missing origin path. Set the
@@ -359,7 +370,8 @@ Run `python3 scripts/build-classic-rollback.py` from the website checkout with
359370the existing Bundler dependencies installed. It creates
360371` dist/classic-rollback/ ` and ` dist/classic-rollback.tar.gz ` , refusing to replace
361372an existing output directory. The 5 September rehearsal produced 91,168,795
362- uncompressed bytes. Keep the tarball outside this checkout before cutover;
373+ uncompressed bytes. A verified copy is retained at
374+ ` /Users/zayenz/gecode/website-rollback/classic-site-2026-07-15.tar.gz ` ;
363375restore its contents as the Pages artifact when needed.
364376
365377Before Astro, removing the documentation routes restores the existing origin
0 commit comments