You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: .agents/skills/datadesigner-docs/SKILL.md
+37-61Lines changed: 37 additions & 61 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -12,34 +12,31 @@ description: >
12
12
13
13
Unified skill for adding, updating, moving, and removing pages on the NeMo Data Designer Fern docs site.
14
14
15
-
Production URL: **`docs.nvidia.com/nemo/datadesigner`** (see `instances` in [`fern/docs.yml`](../../../fern/docs.yml)). Source of truth for everything user-facing is `fern/`.
15
+
Current URL: **`datadesigner.docs.buildwithfern.com/nemo/datadesigner`** (see `instances` in [`fern/docs.yml`](../../../fern/docs.yml)). Source of truth for everything user-facing is `fern/`.
16
16
17
17
## Scope Rule
18
18
19
19
**ALL doc edits happen under `fern/`.** The legacy `docs/` directory is the original MkDocs source — `docs/notebook_source/*.py` (jupytext) and `docs/devnotes/*.md` are still canonical for notebooks and dev notes (they feed Fern), but **do not add new top-level prose pages under `docs/`**. Concept pages, recipes, plugins, code reference — all of these live under `fern/versions/v0.5.8/pages/`.
20
20
21
21
## Versioning Model: Floating Latest
22
22
23
-
DataDesigner uses a **floating-latest pointer** (matches NeMo Curator). One canonical MDX tree backs both the "Latest" tab and the current frozen train.
23
+
DataDesigner currently has Fern-native version entries backed by one shared migrated MDX tree. `latest` is a real rolling nav file; `v0.5.9`and `v0.5.8` are release nav files. All currently reuse `v0.5.8/pages/`.
24
24
25
25
```
26
26
fern/versions/
27
-
├── latest.yml ← Unix symlink → v0.5.8.yml
28
-
├── v0.5.8.yml ← real nav file (paths point at ./v0.5.8/pages/...)
29
-
└── v0.5.8/pages/ ← single canonical MDX tree
27
+
├── latest.yml ← rolling nav file (reuses ./v0.5.8/pages/...)
28
+
├── v0.5.9.yml ← release nav file (reuses ./v0.5.8/pages/...)
29
+
├── v0.5.8.yml ← release nav file (reuses ./v0.5.8/pages/...)
30
+
└── v0.5.8/pages/ ← shared migrated MDX tree
30
31
```
31
32
32
-
`docs.yml` registers both `slug: latest`and `slug: v0.5.8`. When you edit a page, **you only edit the v0.5.8 copy** — the symlink means `latest` automatically tracks. No mirror step.
33
+
`docs.yml` registers `slug: latest`, `slug: v0.5.9`, and `slug: v0.5.8`. When you edit shared docs, edit `v0.5.8/pages/`. Add version-specific page copies only when content diverges.
33
34
34
-
When a new release ships (e.g. v0.5.9):
35
+
Dev Notes are rolling release: `latest.yml` can include posts from `main` that are not in the release nav yet. Frozen release navs (`v0.5.9.yml`, `v0.5.8.yml`) should include only posts available at that release point.
4.`ln -sf v0.5.9.yml fern/versions/latest.yml` (re-target the symlink)
40
-
5. Add a `v0.5.9` entry to `docs.yml`'s `versions:` list and update the `latest` entry's `display-name`.
37
+
Released versions older than `v0.5.8` remain on the legacy MkDocs archive at `https://nvidia-nemo.github.io/DataDesigner/<version>/`. `docs.yml` redirects `/nemo/datadesigner/v<version>/...` to those archives for versions without a real Fern tree.
41
38
42
-
Old `v0.5.8` then renders unchanged from its frozen tree at `/v0.5.8/...`. The published site at `/latest/...` follows the symlink to `v0.5.9`.
39
+
For future Fern-native releases, add a version YAML that reuses shared pages by default. Copy only pages that need version-specific content.
43
40
44
41
## Layout at a Glance
45
42
@@ -59,20 +56,21 @@ fern/
59
56
│ ├── TrajectoryViewer.tsx ← multi-turn tool-call traces (research dev notes)
Fern's URL is computed from the **section/page titles in `v0.5.8.yml`**, not the file path:
73
+
Fern's URL is computed from the **section/page titles in the active version YAML**, not the file path:
76
74
77
75
```
78
76
File system Published URL
@@ -88,7 +86,7 @@ Rules:
88
86
-**Page title → kebab-case slug**: `page: Text-to-SQL for Nemotron Super` → `text-to-sql-for-nemotron-super` (the filename `text-to-sql.mdx` is irrelevant for routing).
89
87
-**Subdirectories in the file path are dropped** — `devnotes/posts/foo.mdx` becomes `/dev-notes/<page-title>` (no `/posts/`).
90
88
91
-
When in doubt, recompute by walking the page's position in `v0.5.8.yml` and slugifying each title.
89
+
When in doubt, recompute by walking the page's position in the active version YAML and slugifying each title.
92
90
93
91
## Operations
94
92
@@ -116,7 +114,7 @@ When in doubt, recompute by walking the page's position in `v0.5.8.yml` and slug
116
114
```
117
115
118
116
4. The URL becomes `/<section-slug>/<page-title-slug>`. Update any cross-references in other MDX accordingly.
119
-
5. **Do not edit `latest.yml`** — it's the symlink and auto-tracks.
117
+
5. If the page is a rolling Dev Note that should appear before the next release, add it to `latest.yml` only.
120
118
121
119
### Update a Page
122
120
@@ -261,12 +259,14 @@ layout: overview # optional — only on landing pages
261
259
---
262
260
```
263
261
264
-
Do **not** add `position:` (we use explicit nav order in `v0.5.8.yml`), `date:`, or `authors:` to frontmatter — Fern's runtime treats `authors:` as a JSX scope variable and explodes when a component tries to reference it. For dev notes, see "Dev Notes" below.
262
+
Do **not** add `position:` (we use explicit nav order in the version YAML), `date:`, or `authors:` to frontmatter — Fern's runtime treats `authors:` as a JSX scope variable and explodes when a component tries to reference it. For dev notes, see "Dev Notes" below.
265
263
266
264
## Dev Notes (Blog Posts)
267
265
268
266
Dev notes live under `fern/versions/v0.5.8/pages/devnotes/posts/`. They use the dev-notes kit components: **`<Authors>`, `<MetricsTable>`, `<TrajectoryViewer>`, `<ExpandableCode>`, `<CustomCard>`** (sources in `fern/components/`, CSS in `fern/styles/`).
269
267
268
+
For rolling posts on `main`, add the page and card to `latest.yml` first. Add the same nav entry to a release YAML only when that post is part of that release.
269
+
270
270
### Authors Byline
271
271
272
272
Author registry: `fern/components/devnotes/.authors.yml` (source of truth) + `fern/components/devnotes/authors-data.ts` (typed copy that `Authors.tsx` imports). Edit both together.
fern/components/notebooks/*.{json,ts} (gitignored; generated before preview/publish)
373
372
```
374
373
375
-
The `.ts` is what the wrapper MDX imports — Fern's bundler doesn't follow `.json` imports cleanly.
374
+
`docs/colab_notebooks/*.ipynb`is a separate committed output for "Open in Colab" links. It is generated by `make generate-colab-notebooks`, but it is not a Fern docs build input.
375
+
376
+
The `.ts` is what the wrapper MDX imports. Fern's bundler doesn't follow `.json` imports cleanly.
376
377
377
378
### Make Targets
378
379
379
380
| Command | When |
380
381
|---------|------|
381
-
| `make generate-fern-notebooks` | Notebook prose changed, no need to re-execute. Auto-detects `docs/notebooks/` (executed) vs `docs/colab_notebooks/` (un-executed snapshots). |
382
+
| `make generate-fern-notebooks` | Notebook prose changed, no need to re-execute. Per file, prefers `docs/notebooks/` (executed) and falls back to converting `docs/notebook_source/*.py` directly. |
Both targets pin to `DOCS_PYTHON ?= 3.13` because `pyarrow` lacks Python 3.14 wheels. Override via `DOCS_PYTHON=3.12 make ...`.
385
+
Install notebook docs dependencies first with `make install-dev-notebooks`. Docs setup pins to `DOCS_PYTHON_VERSION ?= 3.13` because `pyarrow` lacks Python 3.14 wheels. Override via `DOCS_PYTHON_VERSION=3.12 make ...`.
385
386
386
-
The `convert-execute-notebooks` step loops per-file with `|| failed=...`, so one notebook missing an API key won't kill the others — failures are reported at the end and the chain continues with whatever succeeded.
387
+
The `convert-execute-notebooks` step loops perfile so one notebook missing an API key does not prevent later notebooks from running. Any failure is reported after the loop and the make target exits non-zero.
387
388
388
389
### Wrapper Page
389
390
@@ -408,13 +409,13 @@ The converter (`fern/scripts/ipynb-to-fern-json.py`) **auto-strips the leading C
408
409
409
410
## Python API Reference (`libraries:`)
410
411
411
-
`docs.yml` declares a `libraries:` block pointing at `packages/data-designer-config/src/data_designer/config`. Generated output lands at `fern/code-reference/data-designer/` — **gitignored**. To populate locally:
412
+
`docs.yml` declares a `libraries:` block pointing at `packages/data-designer-config/src/data_designer/config`. Local generation uses `py2fern` against that same source. Generated output lands at `fern/code-reference/data-designer/` - **gitignored**. To populate locally:
412
413
413
414
```bash
414
-
cd fern && fern docs md generate
415
+
make generate-fern-api-reference
415
416
```
416
417
417
-
No FERN_TOKEN required. Re-run when the upstream Python source changes.
418
+
This does not require Fern auth. Re-run when the upstream Python source changes. If you need to compare with Fern's native generator, use `make generate-fern-api-reference-native` with Fern auth.
418
419
419
420
The generated tree is wired into the nav via `versions/v0.5.8.yml`'s "Code Reference > Python API" folder entry (`folder: ../code-reference/data-designer`). The nav also includes prose pages under "Topic Overviews" — those are conceptual landings that link to the auto-generated reference.
The `v0.5.8` tree continues to render at frozen URLs.
488
+
Do not copy page trees by hand. Add a new version YAML that reuses shared pages by default; copy only pages that need version-specific content. If that becomes tedious, add a build-time materialization script before `fern generate --docs`.
513
489
514
490
## Debugging
515
491
@@ -523,8 +499,8 @@ The `v0.5.8` tree continues to render at frozen URLs.
523
499
| "Something went wrong!" runtime error | A custom component is throwing — check `<Authors ids={authors} />` (use literal array) or `<ExpandableCode>` (currently broken in SSR) |
524
500
| Notebook page renders raw `<a href=colab...>` HTML | `.ts` was generated before the colab-strip improvement; re-run `make generate-fern-notebooks` |
525
501
| Notebook page has no cell outputs | Ran without `NVIDIA_API_KEY` or `convert-execute-notebooks` failed; run `make generate-fern-notebooks-with-outputs` |
526
-
| `URLError: [SSL: CERTIFICATE_VERIFY_FAILED]` during notebook execution | `DOCS_CERTS` not propagated; ensure you're invoking via the make target, not raw `uv run` |
527
-
| `Failed to build pyarrow==X` from source | `DOCS_PYTHON` resolved to 3.14+; override with `DOCS_PYTHON=3.13 make ...` (or just rely on the default) |
502
+
| `URLError: [SSL: CERTIFICATE_VERIFY_FAILED]` during notebook execution | `DOCS_CERTS` not propagated; ensure you're invoking via the make target, not raw Python |
503
+
| `Failed to build pyarrow==X` from source | `DOCS_PYTHON_VERSION` resolved to 3.14+; override with `DOCS_PYTHON_VERSION=3.13 make ...` (or just rely on the default) |
528
504
| Cards on landing all link to the same wrong URL | `href` not matching Fern's slugified-title rule — recompute as `/<section-slug>/<page-title-slug>` |
529
505
| Image broken in preview, file exists at `fern/assets/...` | Reference uses relative `../assets/...` — change to absolute `/assets/...` (relative paths break across version slugs) |
0 commit comments