Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 12 additions & 1 deletion .github/workflows/bot-serving-check.yml
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,12 @@ jobs:
}

# Bot path: prerendered per-route HTML from the seo-proxy
check "$GOOGLEBOT" "$ORIGIN/" "<title>anyplot.ai</title>"
# Prefix, not the full title: the copy changed to "anyplot.ai —
# AI-generated plot catalog for 15 libraries" and this check went red
# for ten consecutive days without anyone noticing. The prefix still
# separates the prerendered page from the SPA shell, whose title is
# "any.plot() — any library.", which is the property under test.
check "$GOOGLEBOT" "$ORIGIN/" "<title>anyplot.ai"
check "$GOOGLEBOT" "$ORIGIN/scatter-basic" "<title>Basic Scatter Plot | anyplot.ai</title>"
check "$TWITTERBOT" "$ORIGIN/scatter-basic/python/matplotlib" "<title>Basic Scatter Plot - Matplotlib | anyplot.ai</title>"

Expand Down Expand Up @@ -108,6 +113,12 @@ jobs:
slash_target=$(curl -sS --max-time 30 -o /dev/null -A "$GOOGLEBOT" \
-w '%{redirect_url}' "$ORIGIN/scatter-basic/")
case "$slash_target" in
"")
# No redirect at all: %{redirect_url} is empty, which the previous
Comment on lines 113 to +117
# form printed as "OK: trailing slash -> " and passed. Copilot
# raised this twice; it means the rewrite has disappeared.
echo "::error::trailing slash produced no redirect — the rewrite is gone"
fail=1 ;;
*"/seo-proxy"*|http://*|*:8080/*)
echo "::error::trailing-slash redirect leaks or downgrades: $slash_target"
fail=1 ;;
Expand Down
10 changes: 10 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -232,6 +232,16 @@ aggregate instead: an italic *Catalog* line at the end of the version section an

### Fixed

- **The daily bot-serving monitor had been red for ten days** — it greps for an exact home-page
title, the copy changed to "anyplot.ai — AI-generated plot catalog for 15 libraries", and every
scheduled run since 2026-08-09 failed on that one line. Nothing else was wrong, and nobody looked:
this run of SEO work edited the workflow twice and cited it repeatedly as the regression cover for
changes that have no local verification loop, while it was failing daily. It now matches on the
prefix, which still separates the prerendered page from the SPA shell — the property actually
under test — and no longer breaks on copy. The trailing-slash check also no longer passes when
there is no redirect at all: an empty `%{redirect_url}` printed "OK" and returned success, which
Copilot raised on two separate PRs (#10478).
Comment on lines +241 to +243

- **The trailing-slash redirect leaked the internal port** — #10473 removed a redirect to
`http://api.anyplot.ai/seo-proxy/…` and replaced it with `http://anyplot.ai:8080/…`: a smaller
version of the same defect, since nginx builds a `permanent` rewrite's Location from
Expand Down
Loading