Skip to content

[failproofai-555] docs: talk-to-us CTA, footer parity, prune orphaned translations#556

Merged
hermes-exosphere merged 1 commit into
mainfrom
luv-555
Jul 17, 2026
Merged

[failproofai-555] docs: talk-to-us CTA, footer parity, prune orphaned translations#556
hermes-exosphere merged 1 commit into
mainfrom
luv-555

Conversation

@NiveditJain

Copy link
Copy Markdown
Member

Summary

Started as "make the docs' Get started button say talk to us, pointing where the landing page points". That change is here — and chasing it surfaced two larger gaps in the docs chrome and the translation pipeline.

Docs chrome

Navbar CTA. Get startedTalk to us, pointing at the same cal.com link as befailproof.ai's [ talk to us → ]. Sentence case to match the docs' existing style rather than the landing page's lowercase terminal aesthetic.

The docs had no link back to befailproof.ai from anywhere — not navbar, not footer. Once a reader landed in docs, the marketing site was unreachable. The footer carried only GitHub and X while the landing footer carries GitHub, npm, Discord, and X. Now mirrored: website + discord added to socials, plus Product (Home / Blog / Guides) and Resources (npm / GitHub / Discord) columns. npm is not a valid Mintlify social key (only these 19 are), so it lives in a column.

Redirects. The AgentEye syncs deleted 13 English pages with no redirects configured, so /agenteye/deployment and friends hard-404 for anyone with a bookmark. Each now redirects to a live page (mostly /agenteye/overview; github-token/tenant-managementapi-keys, health-monitoringobservability).

The translation prune (the real find)

scripts/translate-docs/ had no prune step at all. Translation only ever moves forward — getEnglishMdxPages() drives what gets written — so when an English page is deleted upstream (the AgentEye sync does this routinely), its 14 translations are never revisited. --update-nav then drops them from docs.json, which hides them from the sidebar but does not unpublish them: Mintlify serves any .mdx present.

Verified live before this PR:

URL Status
docs.befailproof.ai/zh/agenteye/kubernetes-deployment 200 ← stale, indexable
docs.befailproof.ai/ja/agenteye/troubleshooting 200 ← stale, indexable
docs.befailproof.ai/agenteye/deployment (English source) 404

So a Chinese or Japanese reader could land on deployment instructions for a surface that no longer exists, with no way to navigate out. 154 orphans (11 pages × 14 locales) are deleted here.

To stop it recurring:

  • --prune mode, plus an automatic prune on every translation pass (--no-prune opts out), so the daily cron self-heals.
  • An explicit prune step in the consolidate job. This one matters: consolidate re-checks-out main and overlays the artifacts, and download-artifact only ever adds files — a prune done solely in the per-language jobs would be silently undone.
  • A repo invariant test that fails if any translation outlives its English source.

Relationship to #555

Complementary, not conflicting — verified:

Merge #555 first if convenient. It creates the locale agenteye/overview pages, which then unblocks a follow-up adding locale redirects for the 154 pruned URLs (they're deliberately omitted here — /zh/agenteye/overview doesn't exist yet, so redirecting there today would just point at a different 404).

Known follow-ups (deliberately not in this PR)

  • Localized Observability group headers. buildLanguageNav's groupNameMap only knows the six Enforcement group names, so Overview / Features / SDK and CLI / Administration fall through untranslated in every locale. Fixing it means authoring ~90 UI strings across 14 languages (incl. Arabic, Hebrew, Hindi) — that deserves review by someone who speaks them, not machine-authored strings shipped unreviewed.
  • Locale redirects for the 154 pruned URLs, once [auto] update translations #555 lands.
  • A docs content contradiction spotted in passing: the policy count reads 26 in one place and 39 in another.

Test plan

  • bun run test:run2092 passed (122 files), including 9 new prune tests + 2 redirect-integrity tests.
  • Invariant guard mutation-tested: planting a fake orphan makes it fail naming that exact file; it passes once removed.
  • bun run validate:mdx — 463 pages parse cleanly (617 − 154).
  • bun scripts/translate-docs/cli.ts --validate — all 448 nav references resolve.
  • bun run lint (0 errors) and tsc --noEmit (clean).
  • Prune dry-run reported exactly 154, cross-checked against an independent count via a different criterion (missing English source vs. absent from nav).
  • Every redirect verified: destination exists, and no source shadows a live page.

⚠️ mintlify validate could not run locally (the CLI produces no output even for --help in this environment); each field was checked against Mintlify's published settings reference instead. CI is the real check for docs.json.

🤖 Generated with Claude Code

… translations

Docs chrome:
- Navbar button now points at the landing page's "talk to us" booking link
  rather than the getting-started page, matching befailproof.ai's primary CTA.
- The docs linked back to the marketing site from nowhere — once a reader
  landed here, befailproof.ai was unreachable. Mirror the landing footer:
  website + discord socials (npm is not a valid Mintlify social key, so it
  goes in a column) plus Product and Resources link columns.
- Redirect the 13 AgentEye pages the upstream syncs deleted instead of
  hard-404ing them.

Translation prune:
Translation only ever moved forward — getEnglishMdxPages() drives what gets
written, so a page deleted upstream left its 14 translations untouched
forever. --update-nav then dropped them from the sidebar, which hid them but
did not unpublish them: Mintlify serves any .mdx present, so the Chinese
kubernetes-deployment page was live and indexable while its English source
404'd. 154 such orphans (11 pages x 14 locales) are removed here.

Adds --prune (and --no-prune to opt out), run by default on every translation
pass and as an explicit consolidate step — that job re-checks-out main and
overlays the artifacts, and download-artifact only ever adds files, so a
prune done solely in the per-language jobs would be silently undone.

A repo invariant test now fails if any translation outlives its English
source, so this cannot silently regress on the next sync.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@coderabbitai

coderabbitai Bot commented Jul 17, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@NiveditJain, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 16 minutes

Enable usage-based reviews in Billing to review now. Otherwise, wait until the next included review is available.
You're only billed for reviews past your plan's rate limits ($0.25/file).

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

Run ID: 41652927-6343-41c4-86a6-14f66b7a97b8

📥 Commits

Reviewing files that changed from the base of the PR and between 7c712f8 and 46be811.

📒 Files selected for processing (161)
  • .github/workflows/translate-docs.yml
  • CHANGELOG.md
  • __tests__/scripts/translate-docs/mdx-translator.test.ts
  • __tests__/scripts/translate-docs/mintlify-nav.test.ts
  • docs/ar/agenteye/collector-installation.mdx
  • docs/ar/agenteye/collector-migration.mdx
  • docs/ar/agenteye/deployment.mdx
  • docs/ar/agenteye/getting-started.mdx
  • docs/ar/agenteye/github-token.mdx
  • docs/ar/agenteye/health-monitoring.mdx
  • docs/ar/agenteye/kubernetes-deployment.mdx
  • docs/ar/agenteye/managed-deployment.mdx
  • docs/ar/agenteye/single-pod-deployment.mdx
  • docs/ar/agenteye/tenant-management.mdx
  • docs/ar/agenteye/troubleshooting.mdx
  • docs/de/agenteye/collector-installation.mdx
  • docs/de/agenteye/collector-migration.mdx
  • docs/de/agenteye/deployment.mdx
  • docs/de/agenteye/getting-started.mdx
  • docs/de/agenteye/github-token.mdx
  • docs/de/agenteye/health-monitoring.mdx
  • docs/de/agenteye/kubernetes-deployment.mdx
  • docs/de/agenteye/managed-deployment.mdx
  • docs/de/agenteye/single-pod-deployment.mdx
  • docs/de/agenteye/tenant-management.mdx
  • docs/de/agenteye/troubleshooting.mdx
  • docs/docs.json
  • docs/es/agenteye/collector-installation.mdx
  • docs/es/agenteye/collector-migration.mdx
  • docs/es/agenteye/deployment.mdx
  • docs/es/agenteye/getting-started.mdx
  • docs/es/agenteye/github-token.mdx
  • docs/es/agenteye/health-monitoring.mdx
  • docs/es/agenteye/kubernetes-deployment.mdx
  • docs/es/agenteye/managed-deployment.mdx
  • docs/es/agenteye/single-pod-deployment.mdx
  • docs/es/agenteye/tenant-management.mdx
  • docs/es/agenteye/troubleshooting.mdx
  • docs/fr/agenteye/collector-installation.mdx
  • docs/fr/agenteye/collector-migration.mdx
  • docs/fr/agenteye/deployment.mdx
  • docs/fr/agenteye/getting-started.mdx
  • docs/fr/agenteye/github-token.mdx
  • docs/fr/agenteye/health-monitoring.mdx
  • docs/fr/agenteye/kubernetes-deployment.mdx
  • docs/fr/agenteye/managed-deployment.mdx
  • docs/fr/agenteye/single-pod-deployment.mdx
  • docs/fr/agenteye/tenant-management.mdx
  • docs/fr/agenteye/troubleshooting.mdx
  • docs/he/agenteye/collector-installation.mdx
  • docs/he/agenteye/collector-migration.mdx
  • docs/he/agenteye/deployment.mdx
  • docs/he/agenteye/getting-started.mdx
  • docs/he/agenteye/github-token.mdx
  • docs/he/agenteye/health-monitoring.mdx
  • docs/he/agenteye/kubernetes-deployment.mdx
  • docs/he/agenteye/managed-deployment.mdx
  • docs/he/agenteye/single-pod-deployment.mdx
  • docs/he/agenteye/tenant-management.mdx
  • docs/he/agenteye/troubleshooting.mdx
  • docs/hi/agenteye/collector-installation.mdx
  • docs/hi/agenteye/collector-migration.mdx
  • docs/hi/agenteye/deployment.mdx
  • docs/hi/agenteye/getting-started.mdx
  • docs/hi/agenteye/github-token.mdx
  • docs/hi/agenteye/health-monitoring.mdx
  • docs/hi/agenteye/kubernetes-deployment.mdx
  • docs/hi/agenteye/managed-deployment.mdx
  • docs/hi/agenteye/single-pod-deployment.mdx
  • docs/hi/agenteye/tenant-management.mdx
  • docs/hi/agenteye/troubleshooting.mdx
  • docs/it/agenteye/collector-installation.mdx
  • docs/it/agenteye/collector-migration.mdx
  • docs/it/agenteye/deployment.mdx
  • docs/it/agenteye/getting-started.mdx
  • docs/it/agenteye/github-token.mdx
  • docs/it/agenteye/health-monitoring.mdx
  • docs/it/agenteye/kubernetes-deployment.mdx
  • docs/it/agenteye/managed-deployment.mdx
  • docs/it/agenteye/single-pod-deployment.mdx
  • docs/it/agenteye/tenant-management.mdx
  • docs/it/agenteye/troubleshooting.mdx
  • docs/ja/agenteye/collector-installation.mdx
  • docs/ja/agenteye/collector-migration.mdx
  • docs/ja/agenteye/deployment.mdx
  • docs/ja/agenteye/getting-started.mdx
  • docs/ja/agenteye/github-token.mdx
  • docs/ja/agenteye/health-monitoring.mdx
  • docs/ja/agenteye/kubernetes-deployment.mdx
  • docs/ja/agenteye/managed-deployment.mdx
  • docs/ja/agenteye/single-pod-deployment.mdx
  • docs/ja/agenteye/tenant-management.mdx
  • docs/ja/agenteye/troubleshooting.mdx
  • docs/ko/agenteye/collector-installation.mdx
  • docs/ko/agenteye/collector-migration.mdx
  • docs/ko/agenteye/deployment.mdx
  • docs/ko/agenteye/getting-started.mdx
  • docs/ko/agenteye/github-token.mdx
  • docs/ko/agenteye/health-monitoring.mdx
  • docs/ko/agenteye/kubernetes-deployment.mdx
  • docs/ko/agenteye/managed-deployment.mdx
  • docs/ko/agenteye/single-pod-deployment.mdx
  • docs/ko/agenteye/tenant-management.mdx
  • docs/ko/agenteye/troubleshooting.mdx
  • docs/pt-br/agenteye/collector-installation.mdx
  • docs/pt-br/agenteye/collector-migration.mdx
  • docs/pt-br/agenteye/deployment.mdx
  • docs/pt-br/agenteye/getting-started.mdx
  • docs/pt-br/agenteye/github-token.mdx
  • docs/pt-br/agenteye/health-monitoring.mdx
  • docs/pt-br/agenteye/kubernetes-deployment.mdx
  • docs/pt-br/agenteye/managed-deployment.mdx
  • docs/pt-br/agenteye/single-pod-deployment.mdx
  • docs/pt-br/agenteye/tenant-management.mdx
  • docs/pt-br/agenteye/troubleshooting.mdx
  • docs/ru/agenteye/collector-installation.mdx
  • docs/ru/agenteye/collector-migration.mdx
  • docs/ru/agenteye/deployment.mdx
  • docs/ru/agenteye/getting-started.mdx
  • docs/ru/agenteye/github-token.mdx
  • docs/ru/agenteye/health-monitoring.mdx
  • docs/ru/agenteye/kubernetes-deployment.mdx
  • docs/ru/agenteye/managed-deployment.mdx
  • docs/ru/agenteye/single-pod-deployment.mdx
  • docs/ru/agenteye/tenant-management.mdx
  • docs/ru/agenteye/troubleshooting.mdx
  • docs/tr/agenteye/collector-installation.mdx
  • docs/tr/agenteye/collector-migration.mdx
  • docs/tr/agenteye/deployment.mdx
  • docs/tr/agenteye/getting-started.mdx
  • docs/tr/agenteye/github-token.mdx
  • docs/tr/agenteye/health-monitoring.mdx
  • docs/tr/agenteye/kubernetes-deployment.mdx
  • docs/tr/agenteye/managed-deployment.mdx
  • docs/tr/agenteye/single-pod-deployment.mdx
  • docs/tr/agenteye/tenant-management.mdx
  • docs/tr/agenteye/troubleshooting.mdx
  • docs/vi/agenteye/collector-installation.mdx
  • docs/vi/agenteye/collector-migration.mdx
  • docs/vi/agenteye/deployment.mdx
  • docs/vi/agenteye/getting-started.mdx
  • docs/vi/agenteye/github-token.mdx
  • docs/vi/agenteye/health-monitoring.mdx
  • docs/vi/agenteye/kubernetes-deployment.mdx
  • docs/vi/agenteye/managed-deployment.mdx
  • docs/vi/agenteye/single-pod-deployment.mdx
  • docs/vi/agenteye/tenant-management.mdx
  • docs/vi/agenteye/troubleshooting.mdx
  • docs/zh/agenteye/collector-installation.mdx
  • docs/zh/agenteye/collector-migration.mdx
  • docs/zh/agenteye/deployment.mdx
  • docs/zh/agenteye/getting-started.mdx
  • docs/zh/agenteye/github-token.mdx
  • docs/zh/agenteye/health-monitoring.mdx
  • docs/zh/agenteye/kubernetes-deployment.mdx
  • docs/zh/agenteye/managed-deployment.mdx
  • docs/zh/agenteye/single-pod-deployment.mdx
  • docs/zh/agenteye/tenant-management.mdx
  • docs/zh/agenteye/troubleshooting.mdx
  • scripts/translate-docs/cli.ts
  • scripts/translate-docs/mdx-translator.ts

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@hermes-exosphere
hermes-exosphere merged commit 8d7fab6 into main Jul 17, 2026
12 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants