Skip to content

[pull] main from fern-api:main#682

Merged
pull[bot] merged 23 commits into
code:mainfrom
fern-api:main
Apr 27, 2026
Merged

[pull] main from fern-api:main#682
pull[bot] merged 23 commits into
code:mainfrom
fern-api:main

Conversation

@pull
Copy link
Copy Markdown

@pull pull Bot commented Apr 27, 2026

See Commits and Changes for more details.


Created by pull[bot] (v2.0.0-alpha.4)

Can you help keep this open source service alive? 💖 Please sponsor : )

Swimburger and others added 23 commits April 26, 2026 20:10
… configured in IR (#14407)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: dsinghvi <10870189+dsinghvi@users.noreply.github.com>
* feat(docs): add translations block to docs.yml for multi-language docs

Add a `translations` block to `docs.yml` that lets users declare which
locales their documentation supports, with an optional `default` flag.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(docs): add translations handler to docs AST visitor

Add noop handler for the new `translations` field in the exhaustive
ObjectPropertiesVisitor<DocsConfiguration> call inside
visitDocsConfigFileYamlAst, fixing the TS2345 compile error.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* feat(docs): load translations/<lang>/ pages and register with FDR

- ParsedDocsConfiguration gains translationPages: Record<locale, pages>
- parseDocsConfiguration reads translations/<lang>/ directories, errors
  clearly when a declared locale directory is missing, and warns about
  individual missing files (partial translations are allowed)
- DocsDefinitionResolver exposes getTranslationPages() after resolve()
- publishDocs calls POST /v2/registry/docs/translations/register for
  each locale after finishDocsRegister, using a direct axios call
  (registerTranslation is not yet in the published fdr-sdk version)
- visitDocsConfigFileYamlAst gains translations: noop to satisfy the
  exhaustive ObjectPropertiesVisitor<DocsConfiguration> type
- Integration tests use real temp directories to exercise FS loading

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(deps): upgrade @fern-api/fdr-sdk to 1.1.23-d25ead8e05

Upgrades fdr-sdk from 1.1.13-c1ad12a2b8 to 1.1.23-d25ead8e05 which includes
the registerTranslation SDK call used by the docs translations feature.

Fixes resulting type errors:
- IntegrationsConfig.context7 changed from string to FileId — suppress the
  raw path string by setting context7: undefined in parseDocsConfiguration
  (the resolved AbsoluteFilePath is already stored as context7File)
- AiChatLocation now excludes "discord" in the SDK type — cast at the
  API boundary in DocsDefinitionResolver
- Remove now-resolved @ts-expect-error directive for agents field

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix docs upstream issue

* fix(docs): skip default locale when loading translation pages

When a locale listed in `translations:` has no corresponding
`translations/<lang>/` directory, and that locale is the default
(first entry or marked `default: true`), skip it silently rather
than erroring. The default locale's pages already live in `pages/`.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(docs): apply translated frontmatter to nav tree in CLI

For i18n translations, the CLI now:
1. Uses gray-matter (from docs-resolver) to parse sidebar-title and slug
   overrides from translated page frontmatter
2. Walks the navigation tree and updates PageNode title/slug where
   translated pages have frontmatter overrides
3. Sends the fully-computed DocsDefinition (with updated nav root) to FDR
   so the server can write a correct LoadDocsForUrlResponse to S3

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(docs): add blank line before translations config in DocsDefinitionResolver

Address reviewer feedback requesting a missing blank line.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* chore(docs): mark translations feature as alpha in changelog

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* chore(lint): fix biome formatting in package.json files

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(docs): address review comments for translations alpha

- Filter 'discord' from AIChatLocation at runtime instead of using type cast
- Add TODO comment documenting that translated pages bypass MDX transformation pipeline

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(docs): address remaining review comments for translations alpha

- Fix language code jp -> ja in docs.yml example
- Add preview mode guard to prevent translations overwriting prod in preview
- Remove slug override support (requires proper composition with parent slugs)

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(docs): apply MDX transformations to translated pages

- Add getCollectedFileIds() and getDocsWorkspacePath() to DocsDefinitionResolver
- Re-export stripMdxComments and replaceImagePathsAndUrls from docs-resolver
- Apply stripMdxComments to translated pages to prevent comment leakage
- Preserve editThisPageUrl/editThisPageLaunch from base pages

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(docs): add image path rewriting and tests for translations

- Apply replaceImagePathsAndUrls to translated pages using base page path for resolution
- Add comprehensive tests for applyTranslatedFrontmatterToNavTree
- Remaining TODOs: <Markdown src=.../>, <CodeBlock src=.../>, @-prefix imports

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(docs): address remaining review comments for translations

- Hoist default locale skip above existence check in loadTranslationPages
- Add superRefine validation to reject multiple default translations
- Handle section nodes in applyTranslatedFrontmatterToNavTree (overviewPageId)
- Rewrite editThisPageUrl to point to translated file path
- Add tests for section node handling

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(docs): add telemetry headers and error logging for translations

- Spread telemetry headers (X-CLI-Version, X-CI-Source, etc.) into translation registration fetch
- Add logging for frontmatter parse errors in applyTranslatedFrontmatterToNavTree

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(lint): fix biome linting errors in translation tests

- Replace `as any` with helper functions using proper type casts
- Fix import ordering in docs-resolver/index.ts

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* fix(docs): fix translation tests to include default locale

The translation tests were failing because they only specified a single
translation locale without marking any as the default. The code treats
the first translation without a `default: true` flag as the default locale,
which means it gets skipped during translation loading.

Fixed by adding `{ lang: "en", default: true }` to each test's translations
config so the other locales (fr, ja) are correctly treated as translations.

Also fixes TypeScript errors in applyTranslatedFrontmatterToNavTree tests
by using optional chaining on array access.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* chore(docs): regenerate docs-yml SDK types and schema

Regenerates the TypeScript SDK types and JSON schemas for the docs-yml
API definition to include the translations configuration documentation.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

* chore(internal): update IR test definition snapshots

Updates IR test definition snapshots to include the new tokenPlaceholder
field added in main.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

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

---------

Co-authored-by: Deep Singhvi <deep@buildwithfern.com>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
Co-authored-by: Jacob Schein <scheinjacob@gmail.com>
…zer + replace switch-on-type WebSocket dispatch with shape-based trial deserialization (#15349)

Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
Co-authored-by: Swimburger <3382717+Swimburger@users.noreply.github.com>
)

* [Dependabot Alert #2041] Scaffold PR for postcss

* chore(deps): deduplicate postcss to 8.5.10 to fix CVE-2026-41305

---------

Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com>
Co-authored-by: Devin AI <158243242+devin-ai-integration[bot]@users.noreply.github.com>
@pull pull Bot locked and limited conversation to collaborators Apr 27, 2026
@pull pull Bot added the ⤵️ pull label Apr 27, 2026
@pull pull Bot merged commit c288fdb into code:main Apr 27, 2026
32 of 35 checks passed
Sign up for free to subscribe to this conversation on GitHub. Already have an account? Sign in.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants