docs: compatibility corrections — first-timer definition, SGLang KV routing, driver-floor table - #12241
docs: compatibility corrections — first-timer definition, SGLang KV routing, driver-floor table#12241dagil-nvidia wants to merge 21 commits into
Conversation
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 47971934ce
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
The Find a Compatible Release picker asked readers to state their backend and driver generation before showing anything. Replace it with the matrix itself, collapsed in a native Fern Accordion, so the CUDA toolkit and minimum driver requirements are scannable across releases in one view. This also closes a nav gap: the full CUDA-and-driver-by-release table was reachable only from reference/releases-data.mdx (hidden from the sidebar) and the llms-only twin, neither of which a browsing reader will find. gen_llms_tables.py grows support for more than one generated span per page, keyed by marker name, and emits the accordion from CUDA_HISTORY so the numbers stay tied to releases.data.ts at every release bump. The new span fails closed when its markers are absent rather than appending itself, keeping placement under human control. Mainline is read as the stable minor lines (v1.3.0 down to v0.7.0); CUDA_NOTES already records that patch releases inherit the CUDA support of their base version, so their rows would only restate the mainline row. RunsWhereWizard.tsx is left in place -- compatibility.mdx was its only consumer, but deleting the component is the PR author's call. Signed-off-by: Daniel Gil <dagil@nvidia.com> Signed-off-by: Dan Gil <dagil@nvidia.com>
The accordion listed only the stable minor lines, on the reasoning that patch rows restate their base version. That drops real information: a reader running v1.2.1 had to infer their row from v1.2.0. Cover every released line instead -- stable releases and their patches -- taking the matrix from 29 rows to all 60 in CUDA_HISTORY. Platform previews and model-specific builds stay out. CUDA_HISTORY carries no rows for them today, so filtering on kind is currently a no-op, but the filter is expressed on kind rather than on the data happening to be clean, so a future -dev entry cannot leak in unnoticed. The accordion and the llms-only twin now emit the same 60 rows. Keeping both is deliberate: the twin exists because component output may be dropped from the agent-facing exports, and <Accordion> is a component. The local dev server does not serve the .md export, so this could not be verified here; losing the matrix for agents is a worse failure than repeating it. Comment records the intent so it is not pruned blindly. Signed-off-by: Daniel Gil <dagil@nvidia.com> Signed-off-by: Dan Gil <dagil@nvidia.com>
The widened matrix runs 60 rows. In a collapsed accordion a single flat run pushes its header off screen almost immediately, so the reader loses track of which column is which. Split it into one captioned table per minor line (1.3.x down to 0.7.x, largest group 15 rows) inside the same single <Accordion> -- the header repeats every few rows and there is still only one panel to open. Separate tables rather than printing the version once and blanking the repeats: blank leading cells are ambiguous once the page is flattened into the agent-facing markdown export. The agent twin keeps the matrix as one flat table. The human and agent spans are now genuinely different renderings -- grouped for scanning, flat for parsing -- so carrying both is justified on the merits rather than on uncertainty about whether <Accordion> children survive the export. Signed-off-by: Dan Gil <dagil@nvidia.com>
[kv-routing] pointed at ../user-guides/kv-cache-aware-routing.md. No user-guides/ directory exists under docs/fern and no file ever lived at that path in this repo's history, so the reference resolved nowhere and failed fern broken-links twice (once per docs variant). The note it sources -- SGLang multimodal plus KV-aware routing is not supported -- is mirrored from docs/fern/backends/sglang/README.md, which compatibility.mdx names as its source for the SGLang matrix. That README carries the identical note and cites components/router/README.md, whose multimodal section documents image routing for the TRT-LLM and vLLM router paths only. Pointing at the same target keeps the two pages citing one authority instead of diverging. reference/ broken-link errors go 2 -> 0. One pre-existing error remains in kubernetes/api-reference.md, untouched here. Signed-off-by: Dan Gil <dagil@nvidia.com>
3780b43 to
5d8fb95
Compare
4797193 to
48fc165
Compare
|
/ok to test 48fc165 |
One conflict, on the [kv-routing] link definition in compatibility.mdx. #12243 repointed it at ../kubernetes/kv-aware-routing.md; this branch had repointed it at ../components/router/README.md. Kept this branch's target: #12241 introduces a separate [mm-kv-routing] reference for the multimodal claims and keeps [kv-routing] on the router README, so taking the other side would re-conflict one PR later. Both targets exist; the link resolves. Also regenerated releases-data.mdx, which went stale on a dependency bump (nixl 1.1.0 -> 1.3.1). check_reference.sh: all 5 gates pass, 0 broken links in reference/. Signed-off-by: Dan Gil <dagil@nvidia.com>
5d8fb95 to
603c04e
Compare
48fc165 to
333a827
Compare
|
/ok to test 333a827 |
One conflict, in docs/fern/reference/releases-data.mdx. That file is generated by gen_llms_tables.py, which auto-merged, so the conflict was resolved by regenerating rather than hand-merging the markers. gen_llms_tables.py --check is idempotent afterwards, and fern broken-links reports 0 errors in reference/. Signed-off-by: Dan Gil <dagil@nvidia.com>
Resolve conflicts: - docs/fern/pages/reference/general/compatibility.mdx: keep main's relocated reference paths under developer-guide/knowledge-base and use-cases. - docs/fern/scripts/gen_llms_tables.py: preserve this PR's Block/support-matrix architecture (support-matrix + llms-tables markers) and adopt main's current generated filename releases-machine-readable.mdx (was releases-data.mdx). Regenerate outputs; compatibility.mdx accordion now links to releases-machine-readable.mdx. Signed-off-by: Daniel Gil <dagil@nvidia.com>
Propagate #12223's updated parent (707fac7, which itself carries #12215's merge of main and the releases-machine-readable.mdx rename) into #12241. Resolve conflict in docs/fern/pages/developer-guide/knowledge-base/ modular-components/backends/sglang/overview.md Note 1: keep this PR's corrected SGLang KV-routing text (hash-forwarding patch on Dynamo's image, fallback to text-prefix on custom builds) and update its `Source` href to the current relocated site path use-cases/multimodal-serving/ multimodal-kv-routing.md (matching notes 2/3 already using the relocated knowledge-base paths). The compatibility.mdx SGLang cell auto-merged with the same correction; the driver-floor renderer/table and generator tests carry over untouched at their current paths. Signed-off-by: Daniel Gil <dagil@nvidia.com>
Signed-off-by: Dan Gil <dagil@nvidia.com> Signed-off-by: Daniel Gil <dagil@nvidia.com>
The column was mixing two incompatible quantities. Most cells came from
the release bodies, but the bodies themselves are not uniform: v1.1.0's
figure counted only external contributors, from a list its own wording
calls partial ("first-time external contributors ... include"). GitHub's
New Contributors lists answer a third question -- first-ever merged PR
over the compare range -- and put the pre-v1.0.0 releases at 11 where
their announcements say 20 and 14.
Settle on the bodies, which is what every other column in this table
already uses, and require the figure to be release-wide and complete.
v1.1.0 fails both tests and becomes a dash rather than an undercount.
v1.3.0 moves 23 -> 24. The published body states 24 and enumerates 24;
23 came from a pre-release draft. @Change72 was raised as a name that
should not be on that list, on the grounds that PR #10157 predates the
v1.2.1 tag. It does by date, but release/1.2.x was cut from main on
2026-05-12 and #10157 merged 2026-06-02, so it is absent from v1.2.1 and
first ships in v1.3.0 -- inside the compare range, which makes them a
genuine first-timer here. Left in place.
Footnote the empty cells on the rendered page too. They are permanent
now rather than pending, so a reader deserves to know why they are empty
and that first-timers are counted release-wide.
Signed-off-by: Dan Gil <dagil@nvidia.com>
The compatibility matrix, the SGLang backend README, and the data behind the agent-facing twin all said multimodal plus KV-aware routing was not supported on SGLang. The code says otherwise, and has since the upstream interop patch landed. decode_handler.py probes engine.async_generate once at startup for the mm_hashes argument. When it is there, per-image hashes are forwarded and SGLang builds the same pad_value the router used, so image identity participates in cache overlap. When it is absent the request still completes and routing falls back to text-prefix overlap alone. So the honest answer is neither "supported" nor "not supported": it is supported on Dynamo's SGLang image, which carries the patch, and degrades rather than fails on a custom build without it. State that everywhere the claim appears, including the router README, whose "documented TRT-LLM and vLLM router paths" wording implied SGLang was excluded outright. The SGLang multimodal guide describes the hash forwarding but never said what happens without it; it does now. The support matrix in multimodal-kv-routing.md already had this right. Signed-off-by: Dan Gil <dagil@nvidia.com>
The matrix answers "what does this release require". A reader who already has a driver installed is asking the inverse, and the only way to answer it from the matrix is to scan every row deciding which floors their driver clears. Add a small generated table above the accordion that inverts it: one row per driver floor, one column per backend, each cell the newest release that backend runs on that driver. Read it as "at least this version" -- a 580 driver satisfies the 575 and 570 floors too, so those releases stay runnable and the cell reflects that rather than showing only what requires exactly 580. Floors and backends are both derived from CUDA_HISTORY, so a fourth floor or a fourth backend appears without touching this code. Driver versions parse to integers before they are compared; the retired wizard compared strings like "580.xx+", which is right only for as long as every floor has three digits. TensorRT-LLM has no build that runs on a 570 or 575 driver. That is the most useful cell in the table, so it says None rather than rendering an ambiguous dash. Signed-off-by: Dan Gil <dagil@nvidia.com>
Same coincidence as the from-candidate filter, one layer down. buildReadingChips tested RELEASE_STATS membership before emitting a chip that deep-links to a per-release section of the Deprecations or Known Issues page. Those sections exist only for releases with a notes page; stats membership stood in for that, and only matched because RELEASE_STATS held nothing older than v1.0.0. Backfilling the pre-v1.0.0 rows ended that. It is not currently reachable with a bad version, because the caller now filters from-candidates on notesHref, but ReadingListFooter is exported and the guard is one import away from being wrong again. Test the condition the hrefs actually depend on so both layers agree. Signed-off-by: Dan Gil <dagil@nvidia.com>
The bare directory URL 301s to /latest/, and the link checker counts a redirect as a failure. Only this one use was bare; the deep links elsewhere already resolve directly. Signed-off-by: Dan Gil <dagil@nvidia.com>
copyright-checks rejects any .py under the repo that does not open with the Apache header block. The new generator test file started at its docstring, so the job failed on this one path. Match the header gen_llms_tables.py already carries. Signed-off-by: Dan Gil <dagil@nvidia.com>
The hand-authored Per-Backend Detail tab still said multimodal was not compatible with KV-aware routing, so the page contradicted the Feature Interactions note and the generated per-release table a few hundred lines away. Same wording as the generated table: supported on Dynamo's SGLang image, text-prefix fallback on a build without the patch. Signed-off-by: Dan Gil <dagil@nvidia.com>
The ingested page was taken from a pre-release draft: 23 first-timers, and @jooe0824 missing from both the New Contributors list and the SK Telecom line. The published v1.3.0 body says 24 and enumerates 24, which is the figure the release table now carries, so the page was the only thing still saying 23. Signed-off-by: Dan Gil <dagil@nvidia.com>
456b515 to
d46fd16
Compare
|
/ok to test d46fd16 |
The 11 (now 14) tests for gen_llms_tables.py were only reachable by hand: the root pytest config carries --ignore-glob=docs/*, and neither check_reference.sh, pre-commit, nor any workflow invoked the file. Add a local hook scoped to the generator, its tests, and releases.data.ts. Markers cannot come from the root config for the same ignore-glob reason, so a standalone pytest.ini beside the tests registers pre_merge / gpu_0 / unit and turns on --strict-markers for this file. Signed-off-by: Dan Gil <dagil@nvidia.com>
Two accuracy fixes on the compatibility page. Driver floors: the table filtered CUDA_HISTORY on an exact version match, so post trains -- which deliberately carry no CUDA_HISTORY row because CUDA_NOTES states they inherit their base release's CUDA support -- never appeared. The 570.xx+ row named vLLM 0.7.0 when v0.7.0.post1 is the newest release that runs there. Resolve each cell through the newest release sharing that base. SGLang fallback note: the note claimed Dynamo drops image identity from the routing key when the startup probe finds no mm_hashes kwarg. It does not. _resolve_mm_hashes_supported only gates the kwarg passed to engine.async_generate in the SGLang decode handler; the frontend keeps building image-aware routing keys via gather_mm_exact_routing_info, so the worker's internally computed hashes never align and only the text prefix overlaps. The distinction matters when diagnosing KV events on a custom image. Same note on the SGLang overview page, corrected identically. Three tests cover the post-train inheritance. Signed-off-by: Dan Gil <dagil@nvidia.com>
|
/ok to test 5fcaa5e |
#12215 merged and its branch was deleted, so this retargeted to main. Four files conflicted. gen_llms_tables.py: took main's narrowed accordion caption and SUPPORT_MATRIX_KINDS comment, both from #12215's own review fix, and kept this branch's driver-floor work. The PAGES entry now carries driver-floors, support-matrix and llms-tables; #12529 deletes SUPPORT_MATRIX_KINDS and released_versions(), which driver_floor_table() and newest_release_per_base() call, so that sibling conflict must not be resolved by taking the deletion. compatibility.mdx: kept the generated driver-floors block. release-history.mdx and releases.data.ts: kept this branch's first-timer definition -- release-wide, blank rather than undercounted -- which is the correction the PR exists to make. Main still carried 23 and 12. Restored pages/use-cases/multimodal-serving/parallel-media-decoding.md, added on main and dropped by the merge while index.yml still referenced it. Verified: gen_llms_tables --check 0 stale; 14 tests pass; fern check 0 errors and 1292 warnings, matching main's baseline. The driver-floor table renders 0.7.0.post1 on the 570 row, release-history shows 24 and a blank v1.1.0, and the corrected SGLang KV-routing claim has no stale occurrences left. Signed-off-by: Dan Gil <dagil@nvidia.com>
|
/ok to test f2ddd76 |
WalkthroughThe PR adds generated driver-floor compatibility tables and their tests, documents conditional SGLang multimodal KV-aware routing, corrects release statistics, updates release acknowledgments, and adds validation for release reading-list links. ChangesDriver-floor compatibility support
SGLang multimodal routing documentation
Release statistics and release navigation
Estimated code review effort: 4 (Complex) | ~45 minutes 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
Comment |
There was a problem hiding this comment.
Actionable comments posted: 1
🧹 Nitpick comments (1)
docs/fern/scripts/test_gen_llms_tables.py (1)
116-116: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse
next()instead of an indexed list comprehension.Ruff flags this pattern (RUF015). Building the full list only to take the first element is unnecessary here.
♻️ Proposed fix
- oldest = [ln for ln in table.splitlines() if ln.startswith("| 570.xx+")][0] + oldest = next(ln for ln in table.splitlines() if ln.startswith("| 570.xx+"))🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@docs/fern/scripts/test_gen_llms_tables.py` at line 116, Update the oldest assignment in the table-processing logic to use next() over the filtered splitlines iterator instead of constructing a list and indexing its first element, preserving the existing lookup for the first line starting with "| 570.xx+".Source: Linters/SAST tools
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/fern/components/releases.data.ts`:
- Line 444: Clarify the SGLang compatibility note in all three release
representations: docs/fern/components/releases.data.ts:444,
docs/fern/assets/releases.json:906, and
docs/fern/pages/reference/general/releases-machine-readable.mdx:131. State that
KV-aware routing applies to aggregated worker deployments, then separately
describe EPD, E/PD, and E/P/D as multimodal-serving disaggregation patterns;
keep the custom-build fallback detail consistent across all copies.
---
Nitpick comments:
In `@docs/fern/scripts/test_gen_llms_tables.py`:
- Line 116: Update the oldest assignment in the table-processing logic to use
next() over the filtered splitlines iterator instead of constructing a list and
indexing its first element, preserving the existing lookup for the first line
starting with "| 570.xx+".
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 1b03220d-9011-46e1-92e5-2f72d72ab877
📒 Files selected for processing (14)
.pre-commit-config.yamldocs/fern/assets/releases.jsondocs/fern/components/UpgradePanel.tsxdocs/fern/components/releases.data.tsdocs/fern/pages/developer-guide/knowledge-base/modular-components/backends/sglang/multimodal.mddocs/fern/pages/developer-guide/knowledge-base/modular-components/backends/sglang/overview.mddocs/fern/pages/developer-guide/knowledge-base/modular-components/router/overview.mddocs/fern/pages/reference/general/compatibility.mdxdocs/fern/pages/reference/general/releases-machine-readable.mdxdocs/fern/pages/reference/general/releases/dynamo-v1-3-0.mdxdocs/fern/pages/reference/general/releases/release-history.mdxdocs/fern/scripts/gen_llms_tables.pydocs/fern/scripts/pytest.inidocs/fern/scripts/test_gen_llms_tables.py
CodeRabbit was right that the SGLang multimodal note read as if EPD, E/PD and E/P/D were KV-aware routing modes. They are multimodal-serving disaggregation patterns. Split the two claims: KV-aware routing applies to aggregated workers, disaggregation is stated separately. releases.json regenerates from the same source. Also removes the import-shaped examples from the ReferenceStyles, RecipeStyles and TerminalDemo docblocks. Fern's bundler scans component files for import specifiers without skipping comments; a non-relative "@/..." specifier sends it to `npx rolldown`, which has no network on the runner. That is what failed this PR's `Preview or publish docs` job: Failed to bundle third-party imports in .../RecipeStyles.tsx: rolldown exited with code 127 -- sh: 1: rolldown: not found Publishes on main are unaffected -- only the preview path bundles components -- so this broke previews on every docs PR while the site kept updating. #12388 fixes the same three files repo-wide and adds a guard; this is the minimum to unblock here and will conflict trivially with it. gen_llms_tables --check 0 stale; fern check 0 errors, 1292 warnings; 14 tests pass; all three components parse under esbuild. Signed-off-by: Dan Gil <dagil@nvidia.com>
|
/ok to test 7409ce7 |
Signed-off-by: Dan Gil <dagil@nvidia.com> # Conflicts: # .pre-commit-config.yaml
|
/ok to test da040e0 |
#12241 and this PR both rewrote compatibility.mdx and gen_llms_tables.py and conflicted in both. Landing them in sequence would have meant resolving that conflict blind on the second rebase; folding resolves it once with both sides in hand. #12241 is closed in favour of this. Carried over from #12241: * The driver-floor table, which inverts the support matrix -- read across from a driver you already have to the newest release each backend runs on it. <ReleaseSupportMatrix /> renders only the forward view (release -> min driver), so this stays a generated span, now placed beside the component it inverts. * The SGLang multimodal and router prose corrections, the v1.3.0 release note and release-history fixes, and the UpgradePanel change. * test_gen_llms_tables.py (14 tests) with its pytest.ini and pre-commit hook. * The CUDA compatibility link, now pointing at /latest/ so it resolves without a redirect hop. Dropped from #12241, superseded here: * The generated support-matrix accordion and its render_support_matrix renderer. <ReleaseSupportMatrix /> replaces that rendering, and the data still reaches agents through the llms-tables twin. * The raw feature-interaction markdown tables, replaced by <FeatureInteractions />. Their per-cell notes live in releases.data.ts. Corrects a factual error this fold exposed. FEATURE_INTERACTIONS marked the SGLang Multimodal x KV-Aware Routing cell "no" ("This feature combination is not supported"), while the merged feature table on the same page described it as supported with a fallback -- the page contradicted itself. multimodal-kv- routing.md is the authority and says supported: hash forwarding is upstream in SGLang 0.5.13+ and Dynamo pins 0.5.16. The cell is now "yes", noting that a custom build without the patch degrades to text-prefix routing. Not carried over: the RecipeStyles, ReferenceStyles and TerminalDemo comment fixes, which are #12388's and stay there. Those three files are byte-identical to main on this branch. Validation: gen_llms_tables.py --check clean; check_agent_twins.py clean on all three governed pages with its self-test at 14/14; pytest test_gen_llms_tables.py 14 passed; ruff clean. Verified the corrected note reaches the agent twin. Signed-off-by: Dan Gil <dagil@nvidia.com>
|
Closing — folded into #12529 as de97c69. Both PRs rewrote Carried over: the driver-floor table (it inverts the support matrix — read across from a driver you have to the newest release each backend runs on it — and Dropped as superseded: the generated The fold also exposed a factual error worth calling out. #12529 had the SGLang Multimodal × KV-Aware Routing cell as Not carried over: the |
Base is
main. #12215 and #12223 have merged, so this is no longer stacked — the diff reads honestly on its own.What is here
Settle one definition for the first-time contributor column. The column was mixing quantities. v1.1.0's
12came from a list its own wording calls partial and confines to external contributors; GitHub's New Contributors lists compute a third thing entirely (first-ever merged PR over the compare range) and put the pre-v1.0.0 releases at 11 where their announcements say 20 and 14. Settled on the release bodies, which every other column in this table already uses, and required the figure to be release-wide and complete. v1.1.0 becomes a dash rather than an undercount. The rule is written intoCOUNTING RULESso the next ingest does not re-litigate it.v1.3.0 first-timers 23 → 24. The published body states 24 and enumerates 24; 23 came from a pre-release draft.
@Change72was raised as a name that should not be on that list because PR #10157 predates the v1.2.1 tag. It does by date, butrelease/1.2.xwas cut from main on 2026-05-12 and #10157 merged 2026-06-02, so it is absent from v1.2.1 and first ships in v1.3.0 — inside the compare range, which makes them a genuine first-timer. Left in place.Correct the SGLang multimodal KV routing claim. Several places said "not supported".
decode_handler.pyprobesengine.async_generateformm_hashesat startup: present means per-image hashes are forwarded and image identity participates in cache overlap; absent means the request still completes and routing falls back to text-prefix overlap. So it is supported on Dynamo's SGLang image and degrades rather than fails elsewhere.A later review pass found the mechanism as first written was still wrong: the probe only gates the kwarg passed to
engine.async_generate, whilegather_mm_exact_routing_infoinpreprocessor.rsbuilds image-aware keys regardless. The note now says that. The scope was also split soEPD,E/PDandE/P/Dread as multimodal-serving disaggregation patterns rather than as KV-routing modes.A driver-first view of the support matrix. The matrix answers "what does this release require"; a reader with a driver already installed is asking the inverse. New generated table: one row per driver floor, one column per backend, each cell the newest release that backend runs on that driver. Floors and backends derive from
CUDA_HISTORY, so a fourth of either flows through without a code change. Driver versions parse to integers before comparison. TensorRT-LLM saysNoneon the 570 and 575 rows rather than a dash — that is the most useful cell in the table.A review pass caught that the table named vLLM
0.7.0on the 570 row whenv0.7.0.post1is the newest release on that floor; post trains carry noCUDA_HISTORYrow of their own and inherit their base's. Now resolved through the base version.Gate the reading-list chips on notes pages.
buildReadingChipstestedRELEASE_STATSmembership before emitting a deep link to a per-release section that only exists for releases with a notes page. Not currently reachable with a bad version, butReadingListFooteris exported and the guard was one import away from being wrong again.Run the generator tests. The 14 tests covering this generator never executed in CI — root
pytestcarries--ignore-glob=docs/*,check_reference.shdoes not invoke pytest, and nothing in.github/referenced them. Added agen-llms-tablespre-commit hook scoped to the generator, its tests, andreleases.data.ts, plus adocs/fern/scripts/pytest.iniregistering the markers under--strict-markers.Drop three phantom imports.
ReferenceStyles,RecipeStylesandTerminalDemocarried import-shaped examples in their docblocks. Fern's bundler scans component files for import specifiers without skipping comments, and a non-relative@/…specifier sends it tonpx rolldown, which has no network on the runner. That is what failed this PR'sPreview or publish docsjob. Publishes onmainare unaffected because only the preview path bundles components, so this was breaking previews on every docs PR while the site kept updating. #12388 fixes the same three files repo-wide and adds a guard; this is the minimum to unblock here and will conflict trivially with it.Repoint the CUDA compatibility link. The bare directory URL 301s; the link checker counts a redirect as a failure.
Verification
gen_llms_tables.py --check— all outputsunchanged; visible tables and the agent mirror stay in lockstepfern check— 0 errors, 1292 warnings, matching main's baselinecheck_reference.sh— gates 1, 2, 3 and 5 pass, 0 broken links inreference/. Gate 4 raisesStopIterationon main as well: docs: align documentation paths with site structure #12373 removed thevariants:layer under thereferencetab and the gate still walks it. Pre-existing, not from this PR, and not CI-wired.pre-commitclean on every touched fileOwnership
All files are docs-owned except
.pre-commit-config.yaml, which adds the generator-test hook and routes todynamo-ops-codeowners.