fix(cli): detect changelog overview pages beyond reserved filenames#16268
Merged
broady merged 1 commit intoJun 8, 2026
Merged
Conversation
…ilenames Previously, ChangelogNodeConverter only recognized overview pages named 'summary', 'index', or 'overview'. Any non-date file with a different name was silently skipped, leaving overviewPageId unset and preventing frontmatter slug overrides from propagating to the V1 navigation tree. Now, when no reserved-name overview file is found, the first non-date file in the changelog directory is used as a fallback overview page. This allows its frontmatter slug override (if any) to correctly set the changelog node's slug in the V1 tree. Co-Authored-By: Eugene Joseph <joseph.eugene@gmail.com>
Contributor
🤖 Devin AI EngineerI'll be helping with this pull request! Here's what you should know: ✅ I will automatically:
Note: I can only respond to comments from users who have write access to this repository. ⚙️ Control Options:
|
There was a problem hiding this comment.
Claude Code Review
This repository is configured for manual code reviews. Comment @claude review to trigger a review and subscribe this PR to future pushes, or @claude review once for a one-time review.
Tip: disable this comment in your organization's Code Review settings.
broady
approved these changes
Jun 8, 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.
Description
Fixes a changelog URL slug divergence between V2 and ledger rendering. Sites with changelog overview pages that use non-standard filenames (anything other than
summary.mdx,index.mdx, oroverview.mdx) produce incorrect navigation slugs in the V1 tree, which then propagate through the ledger pipeline.Example: A changelog with an overview file named
release-notes.mdxcontaining frontmatterslug: release-notesrenders as/docs/release-notesin V2 but/docs/changelog/connectin the ledger.Root Cause
ChangelogNodeConverter.toChangelogNode()scans changelog directory files and classifies each as either:YYYY-MM-DDpattern) → changelog entrysummary,index,overview) → overview pageWhen no reserved-name file exists,
overviewPageIdstaysundefinedand the node's slug falls through to the raw config slug (opts.slug ?? kebabCase(title)), ignoring any frontmatterslug:override on the non-reserved overview file.The V2 reader compensates via
fullSlugMapapplied at read time from page markdown (NavigationConfigConverter→ChangelogNavigationConverter). The ledger pipeline has no equivalent — it trusts the V1 tree's slug as-is. So the V1 tree arriving with the wrong slug produces wrongsectionPathin the ledger segment, wrong nav routes, and the URL divergence.Changes Made
ChangelogNodeConverter.toChangelogNode()to track the first non-date, non-reserved file as a fallback overview candidateoverviewPagePathslug:override to propagate viamarkdownToFullSlug→opts.parentSlug.apply({ fullSlug: ... }), and correctly setsoverviewPageIdon the resultingChangelogNodeV2 ↔ V1 Tree
fullSlugMapParity AnalysisTraced every place V2 uses
fullSlugMapat read time and compared it against how the CLI's V1 tree builder (DocsDefinitionResolver) usesmarkdownFilesToFullSlugsat build time. The changelog overview was the only gap:NavigationConfigConverter:330DocsDefinitionResolver:2033NavigationConfigConverter:330DocsDefinitionResolver:2071-2091DocsDefinitionResolver:1078ApiReferenceNavigationConverter:76ApiReferenceNodeConverter:94ApiReferenceNavigationConverter:495ApiReferenceNodeConverter:321,363,443ChangelogConverter:40ChangelogNodeConverter— only matched reserved filenamesThis means the CLI fix fully closes the V2 ↔ ledger slug parity gap. No FDR/docs-server changes are needed — the existing transform and read path work correctly once the V1 tree carries the right
overviewPageIdand slug.Testing
@fern-api/docs-resolvertests passintegrationstype errors inmapDocsConfigToLedgerConfig.ts/buildLedgerInput.test.tson base branch are unrelated — the published@fern-api/fdr-sdkdoesn't yet includeintegrationsonLedgerConfigSchema)Link to Devin session: https://app.devin.ai/sessions/ec72b39820204a31be764cd3d1e8f654
Requested by: @emjoseph