docs(fern): retire Latest slug, flatten /latest/ redirects to /main/, drop Main beta, fix duplicate H1 - #1328
Merged
Merged
Conversation
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>
2 tasks
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>
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>
…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>
ananthsub
approved these changes
May 15, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Bundled Fern docs fixes on one branch.
1. Scope
detailed-setup/rollout-collectionredirects tomain/nemo/gym/latest/get-started/{detailed-setup,rollout-collection}→/quickstart. But thelatestFern slug was sourced fromv0.2.1(the current GA), and both pages still exist there — so the redirects were 308-ing live GA pages away.quickstartonly happened on themainsource content. Flip the redirect source prefix from/latest/to/main/.2. Remove duplicate H1 on
mainhome landing pagetitleas the page's H1.fern/versions/latest/pages/about/index.mdx(themainhome landing per docs: move index page to About section #1320) also had an explicit# NeMo Gymheading in the body, producing two stacked H1s.3. Retire the
Latestversion slug; alias/latest/*→/main/*Latestdropdown entry pointed at v0.2.1 content, making slug semantics backwards from user expectation ("latest" should mean "newest", not "last GA").Latestfrom theversions:block./nemo/gym/latest/...URL lands on the equivalent/main/...path, mirroring the existing/v0.2→/v0.2.1alias pattern.Main(trunk, default) and0.2.1(pinned historical GA).4. Drop the
betabadge fromMainLatestretired,Mainis the canonical version users see. PM intent is "latest = main", treated as stable; drop theavailability: betaflag.0.2.1keeps itsstablebadge.5. Flatten
/latest/redirect destinations to/main/index.htmlrules still had destinations under/nemo/gym/latest/.... With/latest/reachable only via the new catch-all, those rules chained through a second hop./main/...equivalent so redirects resolve in one hop. Each target verified to exist in main's source content (fern/versions/latest/pages/).Test plan
fern/versions/v0.2.1/pages/get-started/detailed-setup.mdxandrollout-collection.mdxexist (current GA content under0.2.1).fern/versions/latest/pages/get-started/(themainslug's source) only containsinstallation,prerequisites,quickstart.title: "NeMo Gym"is intact on the home landing./main/...flatten target exists infern/versions/latest/pages/before rewriting destinations.nvidia-gym.docs.buildwithfern.comafter publish:/latest/get-started/detailed-setup→ 200,/main/get-started/detailed-setup→ 308 → quickstart (same for rollout-collection).Main(no badge) and0.2.1(stable).curl -sI https://nvidia-gym.docs.buildwithfern.com/nemo/gym/latest/aboutreturns 308 →/main/about(single hop).curl -sI https://nvidia-gym.docs.buildwithfern.com/nemo/gym/latest/about/concepts/core-componentsreturns 308 →/main/about/core-components(single hop, flattened).https://nvidia-gym.docs.buildwithfern.com/nemo/gym/mainrenders 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.comcustom-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 ondocs.nvidia.comcurrently sends/nemo/gym/to/nemo/gym/latest/index.html; once Fern's/latest/index.html→/mainrule is live, those hops will land on/main/in one step.