Skip to content

docs(fern): retire Latest slug, flatten /latest/ redirects to /main/, drop Main beta, fix duplicate H1 - #1328

Merged
lbliii merged 14 commits into
mainfrom
lbliii/fix-latest-getstarted-redirects-v2
May 15, 2026
Merged

docs(fern): retire Latest slug, flatten /latest/ redirects to /main/, drop Main beta, fix duplicate H1#1328
lbliii merged 14 commits into
mainfrom
lbliii/fix-latest-getstarted-redirects-v2

Conversation

@lbliii

@lbliii lbliii commented May 15, 2026

Copy link
Copy Markdown
Contributor

Summary

Bundled Fern docs fixes on one branch.

1. Scope detailed-setup / rollout-collection redirects to main

  • PR docs(fern): fix redirects so Sphinx URLs actually resolve #1310 added two redirect rules sourced at /nemo/gym/latest/get-started/{detailed-setup,rollout-collection}/quickstart. But the latest Fern slug was sourced from v0.2.1 (the current GA), and both pages still exist there — so the redirects were 308-ing live GA pages away.
  • The consolidation into quickstart only happened on the main source content. Flip the redirect source prefix from /latest/ to /main/.

2. Remove duplicate H1 on main home landing page

  • Fern auto-renders the frontmatter title as the page's H1. fern/versions/latest/pages/about/index.mdx (the main home landing per docs: move index page to About section #1320) also had an explicit # NeMo Gym heading in the body, producing two stacked H1s.
  • Remove the body heading; let the frontmatter title stand alone.

3. Retire the Latest version slug; alias /latest/*/main/*

  • The Latest dropdown entry pointed at v0.2.1 content, making slug semantics backwards from user expectation ("latest" should mean "newest", not "last GA").
  • Remove Latest from the versions: block.
  • Add catch-all redirects so any inbound /nemo/gym/latest/... URL lands on the equivalent /main/... path, mirroring the existing /v0.2/v0.2.1 alias pattern.
  • Dropdown after this change: Main (trunk, default) and 0.2.1 (pinned historical GA).

4. Drop the beta badge from Main

  • With Latest retired, Main is the canonical version users see. PM intent is "latest = main", treated as stable; drop the availability: beta flag. 0.2.1 keeps its stable badge.

5. Flatten /latest/ redirect destinations to /main/

  • Existing page-reorg and Sphinx index.html rules still had destinations under /nemo/gym/latest/.... With /latest/ reachable only via the new catch-all, those rules chained through a second hop.
  • Rewrite each destination directly to the /main/... equivalent so redirects resolve in one hop. Each target verified to exist in main's source content (fern/versions/latest/pages/).

Test plan

  • Confirmed fern/versions/v0.2.1/pages/get-started/detailed-setup.mdx and rollout-collection.mdx exist (current GA content under 0.2.1).
  • Confirmed fern/versions/latest/pages/get-started/ (the main slug's source) only contains installation, prerequisites, quickstart.
  • Confirmed frontmatter title: "NeMo Gym" is intact on the home landing.
  • Verified each /main/... flatten target exists in fern/versions/latest/pages/ before rewriting destinations.
  • Verified on nvidia-gym.docs.buildwithfern.com after publish: /latest/get-started/detailed-setup → 200, /main/get-started/detailed-setup → 308 → quickstart (same for rollout-collection).
  • Post-merge + republish: dropdown shows only Main (no badge) and 0.2.1 (stable).
  • Post-merge + republish: curl -sI https://nvidia-gym.docs.buildwithfern.com/nemo/gym/latest/about returns 308 → /main/about (single hop).
  • Post-merge + republish: curl -sI https://nvidia-gym.docs.buildwithfern.com/nemo/gym/latest/about/concepts/core-components returns 308 → /main/about/core-components (single hop, flattened).
  • Post-merge + republish: https://nvidia-gym.docs.buildwithfern.com/nemo/gym/main renders exactly one "NeMo Gym" H1.

Known caveat

There is an outstanding Fern issue where redirects work on the buildwithfern preview hostname but don't propagate to the docs.nvidia.com custom-domain hostname (etag differs between the two, both hit Vercel). That's a separate problem — not this PR's concern. The Akamai-layer root redirect on docs.nvidia.com currently sends /nemo/gym/ to /nemo/gym/latest/index.html; once Fern's /latest/index.html/main rule is live, those hops will land on /main/ in one step.

These two get-started pages still exist on the `latest` version (which is
sourced from `v0.2.1`, the current GA), so they should remain accessible
at /nemo/gym/latest/get-started/.... They were consolidated into
`quickstart` only on the `main` version. Flip the redirect source
prefix from /latest/ to /main/ so prod stops 308-ing live GA pages.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
Fern auto-renders the frontmatter `title` as the page's H1. The body
also had an explicit `# NeMo Gym` heading, producing two stacked H1s
on the main landing page. Remove the body heading and let the
frontmatter title stand alone.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
@lbliii lbliii changed the title docs(fern): scope detailed-setup/rollout-collection redirects to main docs(fern): scope redirects to main + remove duplicate H1 on home May 15, 2026
The `Latest` dropdown entry pointed at v0.2.1 content, which made the
URL slug semantics backwards from user expectation ('latest' = newest,
but here it meant the last GA release). Remove `Latest` from the
`versions:` block and add catch-all redirects so any inbound
/nemo/gym/latest/... URL lands on the equivalent /main/... path,
mirroring the existing /v0.2 → /v0.2.1 alias pattern.

The dropdown now shows `Main` (trunk, default) and `0.2.1` (pinned
historical GA). Existing /latest/-sourced redirects (page-reorg rules
above the catch-all) still take precedence by match order, then chain
through the catch-all to /main/.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
@lbliii lbliii changed the title docs(fern): scope redirects to main + remove duplicate H1 on home docs(fern): retire Latest slug, scope get-started redirects to main, fix duplicate H1 May 15, 2026
With `Latest` retired, `Main` is the canonical trunk version users
see in the dropdown. The `availability: beta` badge no longer
reflects PM intent (latest = main, treated as stable for users).
`0.2.1` keeps its `availability: stable` badge as the pinned
historical GA.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
Existing page-reorg and Sphinx index.html redirects had destinations
under /nemo/gym/latest/.... With /latest/ retired and only reachable
via the new /latest/:path* → /main/:path* catch-all, those rules
chained through a second hop. Rewrite each destination directly to
the /main/... equivalent so redirects resolve in one hop.

Verified each target page exists in main's source content
(fern/versions/latest/pages/) before flattening.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
@lbliii lbliii changed the title docs(fern): retire Latest slug, scope get-started redirects to main, fix duplicate H1 docs(fern): retire Latest slug, flatten /latest/ redirects to /main/, drop Main beta, fix duplicate H1 May 15, 2026
…arned pages

H1 sweep: Fern auto-renders the frontmatter `title` as the page's
H1. Five pages on main also had an explicit body `# Title` heading
that exactly matched their frontmatter — duplicates stripped:
release-notes, get-started/{installation,prerequisites,quickstart},
training-tutorials/verl.

Redirects:
- Flatten /latest/get-started/{detailed-setup,rollout-collection} to
  go directly to /main/get-started/quickstart in one hop.
- Add explicit rules for pages Fern warned about that don't exist on
  main at the same path (would 404 via the wildcard catch-all):
  benchmarks/ → environment-tutorials/, documentation/home → main,
  get-started/pypi-install → get-started/installation.

Mismatched H1s (frontmatter title differs from body H1) left for
manual review: agent-server/index, resources-server/index, faq —
those H1s look like intentional in-body section markers.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
Diff of v0.2.1's page set against main's surfaced one outlier not
already covered by an explicit rule: v0.2.1 has `get-started/index.mdx`
(URL `/latest/get-started`) but main has no folder index there
(only `prerequisites`, `installation`, `quickstart` as child pages).
The wildcard catch-all would route to `/main/get-started`, which may
not render reliably. Send the folder URL to `/main/get-started/installation`
to land users on a concrete entry point.

All other v0.2.1-only paths are already handled by explicit rules
above the catch-all.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
External links and old Sphinx-era URLs reference the version without
the Fern `v` prefix (e.g. /nemo/gym/0.2.1/about), and some reference
the older 0.2.0 release that has no Fern version at all. Both 404ed.

Mirror the existing /v0.2/* -> /v0.2.1/* alias pattern with no-prefix
variants pointing at the pinned GA (v0.2.1).

Signed-off-by: Lawrence Lane <llane@nvidia.com>
…1322)

PR #1322 ("add next step cards to About overview page") was merged
into a stacked feature branch (cwing/docs-main-default) after that
branch's PR (#1320) had already shipped to main, so the cards never
reached main. Bringing the change into this PR.

Hrefs use slugless form (e.g. /get-started/installation) to match the
version-portable convention we adopted in 5d15302; original PR
hardcoded /main/.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
- NVIDIA-NeMo/NeMo-Skills (404) -> NVIDIA-NeMo/Skills (repo was renamed
  upstream, removing the redundant NeMo- prefix). Affects v0.2.1
  ecosystem page; main already had the correct URL.
- encode/httpx#3215 comment -> archive.org snapshot. The upstream
  issue/PR was deleted from GitHub; the engineering note cited it as
  validation for choosing aiohttp over httpx, so preserve the citation
  via web.archive.org rather than losing it.
- OpenRLHF agent_func_nemogym_executor.py reference removed entirely.
  OpenRLHF removed the NeMo Gym integration upstream (0 results in
  their repo for 'nemogym'); no working file exists to link to and
  no archive snapshot. Cards/bullets dropped on both main and v0.2.1.

Verified each replacement target with curl; no broken patterns remain
under fern/versions/.

Signed-off-by: Lawrence Lane <llane@nvidia.com>
@lbliii
lbliii merged commit 49bb5f7 into main May 15, 2026
20 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