Phase 3 re-run: renames pass, /almanac/ does not - #65
Conversation
Re-ran every Phase 3 check against the live site. The 14 category renames now
pass -- rule 4b is deployed -- so that blocker is closed, with the page/N, feed
and ai-ml split all verified and the cascade guard confirmed.
The re-run went wider than the loops ask for, and that is where the one failure
came from. Instead of spot-checking four aliases it tested all 75 enabled
non-regex plugin rules from the dump: 73 end 200, and /almanac/ and /almanac
404. Both redirected to javaalmanac.io on WordPress, with 644 and 23 recorded
hits and the first used two days before cutover. Rule 2 only matches
^/almanac/(jdk|java)-([0-9]+), so the section's front door was never carried,
and the verification loop tests only the versioned shape -- which is exactly
how it stayed invisible. A widened rule 2 is written out, and both bare forms
are added to the loop.
Three items that were open and needed "a real browser" turn out to be partly
answerable without one, so what is left is smaller and sharper:
view counter the beacon is a plain POST to /api/views/hit/<key>, so curl
exercises it: 204, and the key goes up by one. Also confirms
the dump-based re-import landed -- 0 post keys now sit below
the database, against 2,169 before.
analytics the Phase 0 question (is Ketch's Google Consent Mode plugin
enabled on foojay_io?) is answered yes by the property's own
config: plugins.googletag is present. Only the banner-to-
beacon path still needs a browser.
search pagefind-entry.json reports 2,861 pages indexed, which is the
part that could silently be empty.
mail MX and SPF are intact, which is what Phase 2 step 1 warns
about. Sending a test is still worth doing.
Noted, both pre-existing and unrelated to cutover: no _dmarc record, and no
HSTS header.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: 📒 Files selected for processing (1)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Copilot review overview
🟡 Changes recommended
The runbook still contains stale rename instructions and an outdated canonical Rule 2 definition that could lead to incorrect deployment.
Get a fresh assessment by requesting another Copilot review.
Review effort: Lite
Findings: 1
What changed in this PR
Updates CUTOVER.md with post-cutover verification results, closes the category rename blocker, and documents the remaining /almanac/ redirect blocker.
Changes:
- Records successful checks for redirects, aliases, views, search, analytics configuration, and DNS/mail.
- Adds a widened
/almanacCloudflare rule and verification paths. - Documents remaining browser and operational follow-ups.
| File | Description |
|---|---|
CUTOVER.md |
Records Phase 3 rerun results and redirect remediation steps. |
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
| - [x] **The 14 category renames are deployed.** Rule 4b is live. All 14 answer | ||
| `302` and end `200`, checked one by one rather than trusting the three the |

Re-ran every Phase 3 check against the live site now that cutover has happened, and recorded the results in
CUTOVER.md.The renames blocker is closed
Rule 4b is deployed. All 14 renames answer
302and end200, checked one by one rather than trusting the three the loop covers — including the parts the rule was written to get right:page/N/andfeed/tails carried through, theai-mlsplit (bare →/ai/, deeper →machine-learning/), and the cascade guard (surveys/,interviews/,tutorials/,vs-code/… all200, none re-matched by the rule that produced them).One new blocker:
/almanac/and/almanac404Both redirected to
https://javaalmanac.io/on WordPress — plugin rules 69 and 70, 644 and 23 recorded hits, the first used 2026-09-19, two days before cutover. Rule 2 only matches^/almanac/(jdk|java)-([0-9]+), so the section's own front door was never carried./almanac/anything/404s too.They are not in "What was deliberately NOT carried over", so this is an oversight rather than a decision. A Hugo alias can't fix it — an alias resolves against
baseURLand can't point off-site — so it needs Cloudflare. The PR writes out a widened rule 2 that covers all three shapes with one nestedregex_replacepair, and adds both bare forms to the verification loop.How it stayed invisible is the part worth keeping: the loop tests
/almanac/jdk-17and/almanac/java-8and nothing else. I found it by testing all 75 enabled non-regex plugin rules from the SQL dump instead of spot-checking four — 73 end200, these two don't. The dump makes that list reproducible, and the PR records the query.Three "needs a browser" items shrank
partials/views-beacon.htmljustsendBeacons a POST, socurl -X POST /api/views/hit/<key>is the same request:204, and the key goes up by one (5052 → 5053). Also confirms the dump-based re-import landed — 0 post keys now sit below the database, against 2,169 before.foojay_io? — is answered yes by the property's own config:plugins.googletagis present, and_ga/_gidmap to theanalyticspurpose. Only the banner-to-beacon path still needs a browser.pagefind-entry.jsonreports 2,861 pages indexed, which is the part that could silently be empty. Running a query is still client-side.Mail:
MX→foojay-io.mail.protection.outlook.comand the full SPF include list are intact — what the "touchingMXbreaks mail" warning in Phase 2 is about. Sending a real test is still worth doing.Everything else
Indexable (no
noindex,Disallow:empty, sitemap line present), no trial URLs leaked,wwwandhttpboth301to the apex, comments archive + giscus loader in the HTML, proxy on (cf-raypresent, Cloudflare anycast). All 22 top-level pages and feeds200; a 46-URL sample of/today/posts from the live sitemap (2,740 URLs)200. The two posts repaired from the dump are live and correct — the SVG-fonts article now has its body and both images, andcalling-microservices-in-javahas its hero.Still open, for a human
/almanac/rule — needs Cloudflare access./g/collectwithtid=G-GS21L12HYK. My sandbox can't reach Google's endpoints at all, so I can't do this one even partially.hello@foojay.io.sitemap.xmlin Search Console.302.Noted, both pre-existing and unrelated to cutover: no
_dmarc.foojay.iorecord, and no HSTS header.🤖 Generated with Claude Code
Summary by CodeRabbit
/almanac/paths and the corresponding Cloudflare redirect rule fix./almanac/behavior.