Skip to content

Addon-docs: Add MDX manifest generation#33408

Merged
JReinhold merged 13 commits into
nextfrom
copilot/add-mdx-support-manifest
Jan 6, 2026
Merged

Addon-docs: Add MDX manifest generation#33408
JReinhold merged 13 commits into
nextfrom
copilot/add-mdx-support-manifest

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Dec 22, 2025

What I did

Extends the manifest generation system to include MDX documentation files alongside component manifests. This enables AI agents and other tools to access structured documentation content through the manifest API.

Key Changes

addon-docs (code/addons/docs/src/manifest.ts)

  • New experimental_manifests preset function that processes MDX docs entries
  • Attached MDX entries (attached-mdx tag) are added to their corresponding component manifests under a docs property
  • Unattached MDX entries (unattached-mdx tag) are added to a separate /manifests/docs.json endpoint
  • Includes the raw MDX content for each docs entry

React renderer (code/renderers/react/src/componentManifest/generator.ts)

  • Updated to create component manifests even when only attached-mdx docs entries have the manifest tag (previously required story entries)
  • Uses storiesImports[0] to find the story file for attached docs entries

Core server (code/core/src/core-server/utils/manifests/manifests.ts)

  • Updated to properly handle the new docs manifest format

Manifest Structure

Attached docs are added to component manifests:

{
  "components": {
    "v": 0,
    "components": {
      "example-button": {
        "id": "example-button",
        "name": "Button",
        "docs": {
          "example-button--docs": {
            "id": "example-button--docs",
            "name": "docs",
            "path": "./Button.mdx",
            "title": "Example/Button",
            "content": "# Button\n\nDocumentation content..."
          }
        }
      }
    }
  }
}

Unattached docs are served at /manifests/docs.json:

{
  "v": 0,
  "docs": {
    "standalone--docs": {
      "id": "standalone--docs",
      "name": "docs",
      "path": "./Standalone.mdx",
      "title": "Standalone",
      "content": "# Standalone\n\nStandalone documentation..."
    }
  }
}

Checklist for Contributors

Testing

The changes in this PR are covered in the following automated tests:

  • stories
  • unit tests
  • integration tests
  • end-to-end tests

Manual testing

  1. Run a sandbox: yarn task --task sandbox --start-from auto --template react-vite/default-ts
  2. Add an MDX file and use <Meta of={ButtonStories} /> to attach it to the Button stories.
  3. Start Storybook and access /manifests/components.json to see attached docs in component entries
  4. Access /manifests/docs.json to see unattached docs entries

Documentation

  • Add or update documentation reflecting your changes
  • If you are deprecating/removing a feature, make sure to update MIGRATION.MD

Summary by CodeRabbit

  • New Features

    • Docs manifest system: supports standalone and component-attached docs, extracts MDX content, and augments component manifests and a global docs manifest.
    • Centralized Tag enum exported across APIs for consistent tag usage.
  • Tests

    • New comprehensive test suite validating docs manifest generation, attachment vs unattached separation, content extraction, and error propagation.

✏️ Tip: You can customize this high-level summary in your review settings.

Copilot AI self-assigned this Dec 22, 2025
Copilot AI and others added 3 commits December 22, 2025 10:49
- Create manifest.ts to generate manifests for MDX files
- Filter MDX entries with 'attached-mdx' or 'unattached-mdx' tags
- Export experimental_manifests from preset.ts
- Add comprehensive tests for MDX manifest generation

Co-authored-by: JReinhold <5678122+JReinhold@users.noreply.github.com>
Co-authored-by: JReinhold <5678122+JReinhold@users.noreply.github.com>
Co-authored-by: JReinhold <5678122+JReinhold@users.noreply.github.com>
Copilot AI changed the title [WIP] Add support for MDX files in manifest generation feat(addon-docs): add MDX manifest generation Dec 22, 2025
Copilot AI requested a review from JReinhold December 22, 2025 10:55
Base automatically changed from jeppe/support-manifest-tag-in-preview to next December 22, 2025 22:04
@nx-cloud
Copy link
Copy Markdown

nx-cloud Bot commented Dec 22, 2025

View your CI Pipeline Execution ↗ for commit 2f7d638

Command Status Duration Result
nx run-many -t compile,check,knip,test,pretty-d... ✅ Succeeded 9m 31s View ↗

☁️ Nx Cloud last updated this comment at 2026-01-06 12:25:49 UTC

@JReinhold JReinhold changed the title feat(addon-docs): add MDX manifest generation Manifest: Add basic support for attached and unattached MDX Dec 29, 2025
@JReinhold JReinhold added react addon: docs ci:normal manifest Component manifest generation labels Dec 29, 2025
@storybook-app-bot
Copy link
Copy Markdown

storybook-app-bot Bot commented Dec 29, 2025

Package Benchmarks

Commit: 2f7d638, ran on 6 January 2026 at 12:24:57 UTC

The following packages have significant changes to their size or dependencies:

storybook

Before After Difference
Dependency count 49 49 0
Self size 20.18 MB 20.20 MB 🚨 +20 KB 🚨
Dependency size 16.52 MB 16.52 MB 🎉 -2 B 🎉
Bundle Size Analyzer Link Link

@storybook/cli

Before After Difference
Dependency count 183 183 0
Self size 775 KB 775 KB 🚨 +53 B 🚨
Dependency size 67.23 MB 67.25 MB 🚨 +20 KB 🚨
Bundle Size Analyzer Link Link

@storybook/codemod

Before After Difference
Dependency count 176 176 0
Self size 30 KB 30 KB 🎉 -2 B 🎉
Dependency size 65.80 MB 65.82 MB 🚨 +20 KB 🚨
Bundle Size Analyzer Link Link

create-storybook

Before After Difference
Dependency count 50 50 0
Self size 999 KB 999 KB 🎉 -3 B 🎉
Dependency size 36.70 MB 36.72 MB 🚨 +20 KB 🚨
Bundle Size Analyzer node node

@JReinhold JReinhold changed the title Manifest: Add basic support for attached and unattached MDX Addon-docs: Add MDX manifest generation Dec 29, 2025
@JReinhold JReinhold marked this pull request as ready for review December 29, 2025 09:32
@coderabbitai
Copy link
Copy Markdown
Contributor

coderabbitai Bot commented Dec 29, 2025

📝 Walkthrough

Walkthrough

Adds a Docs manifest pipeline that classifies DocsIndexEntry items (attached/unattached/ignored), extracts MDX content or errors, attaches docs to component manifests, and emits a separate unattached docs manifest; also centralizes tag constants and updates manifest/component generators and tests to use Tag.*.

Changes

Cohort / File(s) Summary
Docs manifest core
code/addons/docs/src/manifest.ts, code/addons/docs/src/manifest.test.ts
New Docs manifest types and helpers (DocsManifestEntry, createDocsManifestEntry, extractUnattachedDocsEntries, extractAttachedDocsEntries) plus manifests preset implementation; tests cover content extraction, ENOENT/error propagation, attachment, and mixed scenarios using memfs.
Preset export
code/addons/docs/src/preset.ts
Re-exports manifests as experimental_manifests; removed unused import.
Component manifest generator
code/renderers/react/src/componentManifest/generator.ts, code/renderers/react/src/componentManifest/generator.test.ts, code/renderers/react/src/componentManifest/fixtures.ts
Treat attached MDX as part of component grouping (use storiesImports when no story import), compute storyFilePath/absoluteImportPath from stories or attached docs, update base path emission; tests updated to use Tag constants and include attached-mdx-only manifest case.
Tag centralization & re-exports
code/core/src/shared/constants/tags.ts, code/core/src/core-server/index.ts, code/core/src/manager-api/index.ts, code/core/src/preview-api/index.ts, code/core/src/manager-api/index.mock.ts, code/core/src/manager/globals/exports.ts
Introduces shared Tag const and type, and re-exports Tag from public entrypoints; many modules updated to import/use Tag.* instead of string literals.
Docs blocks & hooks
code/addons/docs/src/blocks/blocks/Stories.tsx, code/addons/docs/src/blocks/blocks/usePrimaryStory.ts, code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
Replace string 'autodocs' checks with Tag.AUTODOCS; no control-flow changes.
Vitest & test tooling
code/addons/vitest/src/**, code/core/src/csf-tools/vitest-plugin/**, code/renderers/react/src/entry-preview.tsx
Replace test-related string tags with Tag.TEST/Tag.TEST_FN, update default include/tag filters to use Tag constants; tests adjusted.
Preview/store/story preparation
code/core/src/preview-api/modules/store/csf/prepareStory.ts, code/core/src/preview-api/modules/store/csf/portable-stories.test.ts, code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts, code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
Use Tag constants for default and constructed tags (DEV, TEST, AUTODOCS, ATTACHED_MDX, UNATTACHED_MDX); removed some exported string-tag constants.
Core utilities & tests
various under code/core/src/core-server/**, code/core/src/csf-tools/**, code/core/src/manager/**, code/core/src/shared/**
Widespread replacement of string tag literals with Tag.* in utilities and tests; updated imports to shared tags module and minor signature/import adjustments.

Sequence Diagram(s)

sequenceDiagram
    participant Preset as experimental_manifests
    participant Grouper as Entry Grouper
    participant Attached as Attached Handler
    participant Unattached as Unattached Handler
    participant Components as Components Manifest Store
    participant DocsOut as Docs Manifest Store
    Note over Preset,Grouper: Input: manifestEntries filtered for docs

    Preset->>Grouper: classify entries by Tag (ATTACHED_MDX / UNATTACHED_MDX / ignore)
    par attach and extract concurrently
        Grouper->>Attached: attached-mdx entries + existing components
        Attached->>Components: resolve storyFilePath, attach docs into component manifests
        Components-->>Attached: updated components manifest
        Grouper->>Unattached: unattached-mdx entries
        Unattached->>Unattached: read MDX files (createDocsManifestEntry)
        Unattached-->>DocsOut: docs manifest entries (content or error)
    end
    Components->>Preset: return updated components manifest
    DocsOut->>Preset: return docs manifest
    Preset->>Preset: merge into final ManifestsWithDocs (docs + components)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Possibly related PRs

✨ Finishing touches
  • 📝 Generate docstrings

📜 Recent review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0a404c6 and 2f7d638.

📒 Files selected for processing (11)
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/entry-preview.tsx
🚧 Files skipped from review as they are similar to previous changes (5)
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/renderers/react/src/entry-preview.tsx
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/core/src/shared/checklist-store/checklistData.tsx
🧰 Additional context used
📓 Path-based instructions (5)
**/*.{js,jsx,ts,tsx,json,md,html,css,scss}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Format code using Prettier with yarn prettier --write <file>

Files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/renderers/react/src/componentManifest/generator.ts
**/*.{js,jsx,json,html,ts,tsx,mjs}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Run ESLint checks using yarn lint:js:cmd <file> or the full command cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives to fix linting errors before committing

Files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/renderers/react/src/componentManifest/generator.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Enable TypeScript strict mode across all packages

Files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/renderers/react/src/componentManifest/generator.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx,js,jsx}: Export functions from modules if they need to be tested
Do not use console.log, console.warn, or console.error directly unless in isolated files where importing loggers would significantly increase bundle size

Files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/renderers/react/src/componentManifest/generator.ts
code/{core,lib,addons,builders,frameworks,presets}/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use logger from storybook/internal/node-logger for server-side logging in Node.js code

Files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
🧠 Learnings (9)
📚 Learning: 2025-11-05T09:38:47.712Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/Select/Select.tsx:200-204
Timestamp: 2025-11-05T09:38:47.712Z
Learning: Repo: storybookjs/storybook — Guidance: Until Storybook 11 is released, do not suggest using React.useId anywhere (e.g., in code/core/src/components/components/Select/Select.tsx) to maintain compatibility with React 17 runtimes. Prefer advising: accept a caller-provided props.id and, if needed, generate a client-only fallback id to minimize SSR hydration issues — but avoid useId. Resume prompting for useId after Storybook 11.

Applied to files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-09-24T09:39:39.233Z
Learnt from: ndelangen
Repo: storybookjs/storybook PR: 32507
File: code/core/src/manager/globals/globals-module-info.ts:25-33
Timestamp: 2025-09-24T09:39:39.233Z
Learning: In Storybook, storybook/actions/decorator is a preview-only entrypoint and should not be included in manager globals configuration. The duplicatedKeys array in code/core/src/manager/globals/globals-module-info.ts is specifically for manager-side externalization, not preview entrypoints.

Applied to files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
📚 Learning: 2025-09-18T20:51:06.618Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/viewport/components/Tool.tsx:38-39
Timestamp: 2025-09-18T20:51:06.618Z
Learning: The useGlobals hook from storybook/manager-api returns a tuple where the third element (storyGlobals) is typed as Globals, not Globals | undefined. This means TypeScript guarantees it's always defined, making the `in` operator safe to use without additional null checks.

Applied to files:

  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/manager.tsx
📚 Learning: 2025-09-18T20:51:06.618Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/viewport/components/Tool.tsx:38-39
Timestamp: 2025-09-18T20:51:06.618Z
Learning: In viewport tool code, when using the `useGlobals` hook from storybook/manager-api, the third returned value `storyGlobals` is guaranteed by TypeScript to be defined (not undefined/null), making the `in` operator safe to use without additional null checks.

Applied to files:

  • code/core/src/manager-api/lib/stories.ts
📚 Learning: 2025-11-05T09:37:25.920Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/tooltip/WithTooltip.tsx:54-96
Timestamp: 2025-11-05T09:37:25.920Z
Learning: Repo: storybookjs/storybook — In code/core/src/components/components/tooltip/WithTooltip.tsx, the legacy WithTooltip implementation is intentionally reintroduced for backward compatibility and is deprecated; maintainers (per Sidnioulz) do not want maintenance or improvements on it. Prefer WithTooltipNew/Popover; avoid suggesting changes to WithTooltip.* going forward.

Applied to files:

  • code/addons/vitest/src/manager.tsx
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to code/{core,lib,addons,builders,frameworks,presets}/**/*.{ts,tsx,js,jsx} : Use `logger` from `storybook/internal/node-logger` for server-side logging in Node.js code

Applied to files:

  • code/core/src/csf-tools/CsfFile.ts
  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-11-05T09:36:55.944Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/Tabs/Tabs.stories.tsx:222-227
Timestamp: 2025-11-05T09:36:55.944Z
Learning: Repo: storybookjs/storybook PR: 32458 — In code/core/src/components/components/Button/Button.tsx (React/TypeScript), ButtonProps includes ariaLabel?: string | false and the component maps it to the DOM aria-label. Convention: ariaLabel is mandatory on all Button usages — provide a descriptive string for icon-only buttons; set ariaLabel=false when the button’s children already serve as the accessible name. Do not suggest using a raw aria-label prop on Button call sites.

Applied to files:

  • code/core/src/manager/components/sidebar/TagsFilter.tsx
📚 Learning: 2025-10-01T15:24:01.060Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32594
File: code/core/src/components/components/Popover/WithPopover.tsx:7-9
Timestamp: 2025-10-01T15:24:01.060Z
Learning: In the Storybook repository, "react-aria-components/patched-dist/*" (e.g., "react-aria-components/patched-dist/Dialog", "react-aria-components/patched-dist/Popover", "react-aria-components/patched-dist/Tooltip") are valid import paths created by a patch applied to the react-aria-components package. These imports should not be flagged as broken or invalid until a maintainer explicitly states they are no longer acceptable.

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to code/{renderers}/**/*.{ts,tsx,js,jsx} : Use `logger` from `storybook/internal/client-logger` for client-side logging in browser code

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
🧬 Code graph analysis (5)
code/core/src/manager-api/lib/stories.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/addons/vitest/src/manager.tsx (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/csf-tools/CsfFile.ts (3)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/csf/story.ts (1)
  • Tag (15-15)
code/core/src/csf/csf-factories.ts (1)
  • test (199-229)
code/core/src/manager/components/sidebar/TagsFilter.tsx (4)
code/core/src/manager-api/index.mock.ts (1)
  • Tag (4-4)
code/core/src/manager-api/index.ts (1)
  • Tag (26-26)
code/core/src/preview-api/index.ts (1)
  • Tag (75-75)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/renderers/react/src/componentManifest/generator.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: normal
  • GitHub Check: Core Unit Tests, windows-latest
  • GitHub Check: nx
🔇 Additional comments (13)
code/core/src/csf-tools/CsfFile.ts (2)

26-26: LGTM! Centralized tag constants improve maintainability.

Importing Tag from the shared constants location ensures consistency across the codebase and provides a single source of truth for tag values.


877-877: LGTM! Tag constant usage eliminates magic strings.

Replacing string literals with Tag.PLAY_FN, Tag.AUTODOCS, and Tag.TEST_FN constants improves type safety, prevents typos, and makes the code more maintainable. The template literal usage on line 1027 (!${Tag.AUTODOCS}) correctly produces the negation syntax.

Also applies to: 906-906, 1027-1027, 1030-1030

code/addons/vitest/src/manager.tsx (2)

11-11: LGTM: Clean import addition for Tag constant.

The Tag import is correctly added to support the centralized tag constants pattern introduced in this PR.


98-98: LGTM: Improved maintainability by using centralized Tag constant.

Replacing the magic string 'test' with Tag.TEST improves code maintainability and reduces the risk of typos. This change aligns well with the PR's objective to centralize tag constants across the codebase.

code/core/src/csf/csf-factories.ts (1)

22-22: LGTM! Good refactoring to centralized tag constants.

The migration from hardcoded strings ('test-fn', '!autodocs') to centralized Tag constants improves maintainability and type safety. The template literal !${Tag.AUTODOCS} correctly produces the negated tag string.

Also applies to: 223-223

code/core/src/manager-api/lib/stories.ts (1)

29-29: LGTM! Clean refactoring to centralized tag constants.

The migration from hard-coded string literals 'dev' and 'test' to Tag.DEV and Tag.TEST improves maintainability and aligns with the PR's goal of centralizing tag constants across the codebase.

Also applies to: 158-158

code/renderers/react/src/componentManifest/generator.ts (4)

2-2: LGTM! Tag constants now centralized.

The import of Tag from storybook/internal/core-server addresses the previous review comment about exporting and reusing tag constants from core. This improves consistency across the codebase.

Also applies to: 5-5


109-117: LGTM! Filter logic correctly handles attached MDX docs.

The expanded filter appropriately includes docs entries that are attached to stories (via Tag.ATTACHED_MDX and storiesImports). The condition entry.storiesImports.length > 0 ensures only docs entries with associated story files are processed, which prevents potential issues downstream when accessing storiesImports[0] on line 127.


123-128: LGTM! Story file path resolution is type-safe and correct.

The conditional logic correctly handles both entry types:

  • For story entries, uses entry.importPath directly.
  • For attached docs entries, uses storiesImports[0] to reference the story file they're attached to.

The cast to DocsIndexEntry on line 127 is necessary (TypeScript doesn't automatically narrow in the else branch) and safe because the filter on lines 114-116 guarantees only docs entries with valid storiesImports reach this code path.


154-154: LGTM! Manifest path correctly references story file.

Changing from entry.importPath to storyFilePath is correct. For attached docs entries, this ensures the manifest points to the component's story file rather than the MDX file, which properly represents the component's location in the codebase.

code/core/src/manager/components/sidebar/TagsFilter.tsx (3)

4-4: LGTM: Import reorganization aligns with Tag centralization.

The import changes correctly move the Tag reference from internal/types to manager-api, which re-exports the centralized Tag constants. This is consistent with the PR's goal of establishing Tag as the single source of truth for tag constants.

Also applies to: 9-9


110-111: LGTM: Consistent use of Tag.PLAY_FN constant.

Replacing the hardcoded 'play-fn' string with Tag.PLAY_FN improves maintainability and aligns with the centralized tag constants approach. This makes the code more refactor-friendly and reduces the risk of typos.


16-16: Good refactoring: Dynamic built-in tags from Tag enum.

Using Object.values(Tag) to populate BUILT_IN_TAGS is a solid approach that:

  • Automatically includes new built-in tags (like ATTACHED_MDX and UNATTACHED_MDX from this PR)
  • Reduces maintenance burden by avoiding hardcoded tag lists
  • Ensures consistency: all Tag enum values are properly excluded from the user-defined tags section

This correctly prevents Storybook-internal tags (autodocs, attached-mdx, unattached-mdx, play-fn, test-fn, dev, test, manifest) from appearing in the user-defined tags filtering.


Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (2)
code/addons/docs/src/manifest.ts (2)

92-116: Consider a non-mutating approach for extractAttachedDocsEntries.

This function mutates existingComponents directly (lines 108-111). While it works correctly and the caller handles the result appropriately, a non-mutating approach would be more predictable and align with functional programming best practices.

🔎 Proposed non-mutating approach
 export async function extractAttachedDocsEntries(
   entries: DocsIndexEntry[],
   existingComponents: ComponentsManifestWithDocs | undefined
 ): Promise<ComponentsManifestWithDocs | undefined> {
   if (!existingComponents || entries.length === 0) {
     return existingComponents;
   }

   const entriesWithContent = await Promise.all(entries.map(createDocsManifestEntry));

+  // Build updated components without mutating
+  const updatedComponents = { ...existingComponents.components };
+
   // Add docs to their corresponding components based on the entry id prefix
   for (const docsEntry of entriesWithContent) {
     const componentId = docsEntry.id.split('--')[0];

-    const component = existingComponents.components[componentId];
+    const component = updatedComponents[componentId];
     if (component) {
-      if (!component.docs) {
-        component.docs = {};
-      }
-      component.docs[docsEntry.id] = docsEntry;
+      updatedComponents[componentId] = {
+        ...component,
+        docs: {
+          ...component.docs,
+          [docsEntry.id]: docsEntry,
+        },
+      };
     }
   }

-  return existingComponents;
+  return {
+    ...existingComponents,
+    components: updatedComponents,
+  };
 }

16-17: These constants are duplicated across the codebase.

The same ATTACHED_MDX_TAG and UNATTACHED_MDX_TAG constants are already exported from code/core/src/core-server/utils/StoryIndexGenerator.ts (and also from code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx). However, they are not currently exposed through the storybook/internal/* public API, and importing from those internal core-server modules would require a cross-package import. Consider whether extracting these to a shared storybook/internal/* export location would be worthwhile to eliminate duplication.

📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 3d036b5 and d91d75c.

📒 Files selected for processing (5)
  • code/addons/docs/src/manifest.test.ts
  • code/addons/docs/src/manifest.ts
  • code/addons/docs/src/preset.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
  • code/renderers/react/src/componentManifest/generator.ts
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{js,jsx,ts,tsx,json,md,html,css,scss}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Format code using Prettier with yarn prettier --write <file>

Files:

  • code/addons/docs/src/manifest.ts
  • code/addons/docs/src/preset.ts
  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
**/*.{js,jsx,json,html,ts,tsx,mjs}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Run ESLint checks using yarn lint:js:cmd <file> or the full command cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives to fix linting errors before committing

Files:

  • code/addons/docs/src/manifest.ts
  • code/addons/docs/src/preset.ts
  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Enable TypeScript strict mode across all packages

Files:

  • code/addons/docs/src/manifest.ts
  • code/addons/docs/src/preset.ts
  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx,js,jsx}: Export functions from modules if they need to be tested
Do not use console.log, console.warn, or console.error directly unless in isolated files where importing loggers would significantly increase bundle size

Files:

  • code/addons/docs/src/manifest.ts
  • code/addons/docs/src/preset.ts
  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
code/{core,lib,addons,builders,frameworks,presets}/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use logger from storybook/internal/node-logger for server-side logging in Node.js code

Files:

  • code/addons/docs/src/manifest.ts
  • code/addons/docs/src/preset.ts
  • code/addons/docs/src/manifest.test.ts
**/*.{test,spec}.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{test,spec}.{ts,tsx}: Test files should follow the naming pattern *.test.ts, *.test.tsx, *.spec.ts, or *.spec.tsx
Follow the spy mocking rules defined in .cursor/rules/spy-mocking.mdc for consistent mocking patterns with Vitest

Files:

  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
**/*.test.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/spy-mocking.mdc)

**/*.test.{ts,tsx,js,jsx}: Use vi.mock() with the spy: true option for all package and file mocks in Vitest tests
Place all mocks at the top of the test file before any test cases
Use vi.mocked() to type and access the mocked functions in Vitest tests
Implement mock behaviors in beforeEach blocks in Vitest tests
Mock all required dependencies that the test subject uses
Each mock implementation should return a Promise for async functions in Vitest
Mock implementations should match the expected return type of the original function
Mock all required properties and methods that the test subject uses in Vitest tests
Avoid direct function mocking without vi.mocked() in Vitest tests
Avoid mock implementations outside of beforeEach blocks in Vitest tests
Avoid mocking without the spy: true option in Vitest tests
Avoid inline mock implementations within test cases in Vitest tests
Avoid mocking only a subset of required dependencies in Vitest tests
Mock at the highest level of abstraction needed in Vitest tests
Keep mock implementations simple and focused in Vitest tests
Use type-safe mocking with vi.mocked() in Vitest tests
Document complex mock behaviors in Vitest tests
Group related mocks together in Vitest tests

Files:

  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
**/*.{test,spec}.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{test,spec}.{ts,tsx,js,jsx}: Write meaningful unit tests that actually import and call the functions being tested, not just verify syntax patterns
Achieve high test coverage of business logic, aiming for 75%+ coverage of statements/lines
Cover all branches, conditions, edge cases, error paths, and different input variations in unit tests
Use vi.mock() to mock file system, loggers, and other external dependencies in tests

Files:

  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
🧠 Learnings (20)
📓 Common learnings
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to {code/addons,code/frameworks}/**/README.md : Update README files for significant changes and include code examples in addon/framework documentation
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to {code/addons,code/frameworks}/**/README.md : Update README files for significant changes and include code examples in addon/framework documentation

Applied to files:

  • code/addons/docs/src/manifest.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to code/{core,lib,addons,builders,frameworks,presets}/**/*.{ts,tsx,js,jsx} : Use `logger` from `storybook/internal/node-logger` for server-side logging in Node.js code

Applied to files:

  • code/addons/docs/src/preset.ts
  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to code/{renderers}/**/*.{ts,tsx,js,jsx} : Use `logger` from `storybook/internal/client-logger` for client-side logging in browser code

Applied to files:

  • code/addons/docs/src/preset.ts
  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Cover all branches, conditions, edge cases, error paths, and different input variations in unit tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Write meaningful unit tests that actually import and call the functions being tested, not just verify syntax patterns

Applied to files:

  • code/addons/docs/src/manifest.test.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Document complex mock behaviors in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid mocking only a subset of required dependencies in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid inline mock implementations within test cases in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Keep mock implementations simple and focused in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid mock implementations outside of `beforeEach` blocks in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Each mock implementation should return a Promise for async functions in Vitest

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Implement mock behaviors in `beforeEach` blocks in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Group related mocks together in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Mock all required properties and methods that the test subject uses in Vitest tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Use `vi.mock()` to mock file system, loggers, and other external dependencies in tests

Applied to files:

  • code/addons/docs/src/manifest.test.ts
📚 Learning: 2025-10-01T15:24:01.060Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32594
File: code/core/src/components/components/Popover/WithPopover.tsx:7-9
Timestamp: 2025-10-01T15:24:01.060Z
Learning: In the Storybook repository, "react-aria-components/patched-dist/*" (e.g., "react-aria-components/patched-dist/Dialog", "react-aria-components/patched-dist/Popover", "react-aria-components/patched-dist/Tooltip") are valid import paths created by a patch applied to the react-aria-components package. These imports should not be flagged as broken or invalid until a maintainer explicitly states they are no longer acceptable.

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-11-05T09:38:47.712Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/Select/Select.tsx:200-204
Timestamp: 2025-11-05T09:38:47.712Z
Learning: Repo: storybookjs/storybook — Guidance: Until Storybook 11 is released, do not suggest using React.useId anywhere (e.g., in code/core/src/components/components/Select/Select.tsx) to maintain compatibility with React 17 runtimes. Prefer advising: accept a caller-provided props.id and, if needed, generate a client-only fallback id to minimize SSR hydration issues — but avoid useId. Resume prompting for useId after Storybook 11.

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-11-05T09:37:25.920Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/tooltip/WithTooltip.tsx:54-96
Timestamp: 2025-11-05T09:37:25.920Z
Learning: Repo: storybookjs/storybook — In code/core/src/components/components/tooltip/WithTooltip.tsx, the legacy WithTooltip implementation is intentionally reintroduced for backward compatibility and is deprecated; maintainers (per Sidnioulz) do not want maintenance or improvements on it. Prefer WithTooltipNew/Popover; avoid suggesting changes to WithTooltip.* going forward.

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
📚 Learning: 2025-09-24T09:39:39.233Z
Learnt from: ndelangen
Repo: storybookjs/storybook PR: 32507
File: code/core/src/manager/globals/globals-module-info.ts:25-33
Timestamp: 2025-09-24T09:39:39.233Z
Learning: In Storybook, storybook/actions/decorator is a preview-only entrypoint and should not be included in manager globals configuration. The duplicatedKeys array in code/core/src/manager/globals/globals-module-info.ts is specifically for manager-side externalization, not preview entrypoints.

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
🧬 Code graph analysis (2)
code/addons/docs/src/manifest.ts (1)
code/core/src/core-server/utils/StoryIndexGenerator.ts (2)
  • ATTACHED_MDX_TAG (68-68)
  • UNATTACHED_MDX_TAG (69-69)
code/renderers/react/src/componentManifest/generator.ts (1)
code/core/src/core-server/utils/StoryIndexGenerator.ts (1)
  • ATTACHED_MDX_TAG (68-68)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: normal
  • GitHub Check: Core Unit Tests, windows-latest
  • GitHub Check: nx
🔇 Additional comments (9)
code/addons/docs/src/preset.ts (1)

221-221: LGTM!

Clean re-export that exposes the new docs manifest functionality through the preset system. The experimental_ prefix appropriately signals the API's maturity level.

code/renderers/react/src/componentManifest/generator.test.ts (1)

461-565: LGTM!

Well-structured test that verifies component manifest generation when only attached-mdx docs entries have the manifest tag. The test:

  • Follows existing test patterns in the file
  • Clearly documents the scenario being tested via comments
  • Properly sets up the docs entry with required fields (storiesImports, attached-mdx tag)
  • Validates the expected manifest structure via snapshot
code/renderers/react/src/componentManifest/generator.ts (3)

110-118: LGTM!

The filter logic correctly extends manifest generation to include attached docs entries. The conditions properly guard against accessing storiesImports when it's empty.


124-129: LGTM!

The storyFilePath derivation correctly handles both entry types:

  • Stories use their importPath directly
  • Attached docs use storiesImports[0] to locate the associated story file

This ensures the component manifest is built from the correct source file in both cases.


20-21: The suggestion to import ATTACHED_MDX_TAG from a shared location is not feasible. The constant is not exported through any public API (storybook/internal or otherwise), and the react renderer is intentionally kept separate from core-server. The local duplication is the correct approach for maintaining package boundaries.

Likely an incorrect or invalid review comment.

code/addons/docs/src/manifest.test.ts (2)

10-13: Mock setup note.

The mock pattern here doesn't use the spy: true option mentioned in the coding guidelines. However, since this is mocking the entire node:fs/promises module with memfs (not spying on individual functions), this approach is appropriate for this use case.


50-360: Excellent test coverage!

The test suite thoroughly covers the docs manifest functionality:

  • ✅ No docs entries scenario
  • ✅ Filtering out docs without proper tags
  • ✅ Attached docs integration with component manifests
  • ✅ Unattached docs in separate manifest
  • ✅ Mixed attached/unattached handling
  • ✅ Preservation of existing manifests
  • ✅ Error handling for file read failures
  • ✅ Mixed success/error scenarios

All tests follow the pattern of actually calling the manifests function and asserting on the results. Good job covering edge cases and error paths per the coding guidelines.

code/addons/docs/src/manifest.ts (2)

47-71: LGTM!

The createDocsManifestEntry function properly:

  • Resolves paths relative to cwd
  • Reads file content asynchronously
  • Handles errors gracefully by returning a structured error object instead of throwing

This allows partial success when processing multiple docs entries.


127-185: Well-structured manifest orchestration.

The main manifests function:

  • Early returns for empty inputs (good performance optimization)
  • Uses groupBy for clean categorization with explicit handling of ignored entries
  • Processes attached and unattached docs in parallel via Promise.all
  • Includes verbose performance logging
  • Properly spreads existing manifests to avoid mutation at the top level


/** Converts a DocsIndexEntry to a DocsManifestEntry by reading its file content. */
export async function createDocsManifestEntry(entry: DocsIndexEntry): Promise<DocsManifestEntry> {
const absolutePath = path.join(process.cwd(), entry.importPath);
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

As discussed, evaluating the absolute path of the import path needs a helper function and refactoring, because it's opaque to know what the "workingDir" actually is. I have agreed with Jeppe that refactoring and adjusting other code places as well will be a separate task, likely implemented in the next cooldown cycle.


// Add docs to their corresponding components based on the entry id prefix
for (const docsEntry of entriesWithContent) {
const componentId = docsEntry.id.split('--')[0];
Copy link
Copy Markdown
Contributor

@valentinpalkovic valentinpalkovic Dec 29, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should use a helper function to get the component id. Does storybook/internal/csf already provide a proper helper function?

import { type DocObj } from './reactDocgen';
import { cachedFindUp, cachedReadFileSync, invalidateCache, invariant } from './utils';

const ATTACHED_MDX_TAG = 'attached-mdx';
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

We should export the tag const from core and re-use it in addon/docs and react

@JReinhold
Copy link
Copy Markdown
Contributor

0.0.0-pr-33408-sha-d91d75c7

JReinhold added a commit to storybookjs/mcp that referenced this pull request Jan 5, 2026
Copy link
Copy Markdown
Contributor

@coderabbitai coderabbitai Bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Fix all issues with AI Agents
In @code/core/src/manager/globals/exports.ts:
- Line 319: This file was manually edited to add the 'Tag' export but is
auto-generated; remove the manual 'Tag' entry from exports.ts and run the
generator (generate-source-files.ts) so it picks up 'Tag' from
storybook/manager-api/index.ts (which is imported via runtime.ts) and
regenerates the exports list correctly.
📜 Review details

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between d91d75c and 0a404c6.

📒 Files selected for processing (40)
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/addons/docs/src/manifest.test.ts
  • code/addons/docs/src/manifest.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/core/src/core-server/utils/manifests/manifests.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/csf-tools/CsfFile.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager-api/index.mock.ts
  • code/core/src/manager-api/index.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/core/src/manager/globals/exports.ts
  • code/core/src/preview-api/index.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/shared/constants/tags.ts
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/renderers/react/src/componentManifest/generator.test.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/entry-preview.tsx
🚧 Files skipped from review as they are similar to previous changes (2)
  • code/renderers/react/src/componentManifest/generator.test.ts
  • code/addons/docs/src/manifest.test.ts
🧰 Additional context used
📓 Path-based instructions (8)
**/*.{js,jsx,ts,tsx,json,md,html,css,scss}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Format code using Prettier with yarn prettier --write <file>

Files:

  • code/core/src/manager-api/index.mock.ts
  • code/renderers/react/src/entry-preview.tsx
  • code/core/src/core-server/utils/manifests/manifests.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/manager/globals/exports.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/preview-api/index.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/manager-api/index.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/addons/docs/src/manifest.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/core/src/shared/constants/tags.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/core/src/csf-tools/CsfFile.ts
**/*.{js,jsx,json,html,ts,tsx,mjs}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Run ESLint checks using yarn lint:js:cmd <file> or the full command cross-env NODE_ENV=production eslint --cache --cache-location=../.cache/eslint --ext .js,.jsx,.json,.html,.ts,.tsx,.mjs --report-unused-disable-directives to fix linting errors before committing

Files:

  • code/core/src/manager-api/index.mock.ts
  • code/renderers/react/src/entry-preview.tsx
  • code/core/src/core-server/utils/manifests/manifests.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/manager/globals/exports.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/preview-api/index.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/manager-api/index.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/addons/docs/src/manifest.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/core/src/shared/constants/tags.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/core/src/csf-tools/CsfFile.ts
**/*.{ts,tsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Enable TypeScript strict mode across all packages

Files:

  • code/core/src/manager-api/index.mock.ts
  • code/renderers/react/src/entry-preview.tsx
  • code/core/src/core-server/utils/manifests/manifests.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/manager/globals/exports.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/preview-api/index.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/manager-api/index.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/addons/docs/src/manifest.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/core/src/shared/constants/tags.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/core/src/csf-tools/CsfFile.ts
**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{ts,tsx,js,jsx}: Export functions from modules if they need to be tested
Do not use console.log, console.warn, or console.error directly unless in isolated files where importing loggers would significantly increase bundle size

Files:

  • code/core/src/manager-api/index.mock.ts
  • code/renderers/react/src/entry-preview.tsx
  • code/core/src/core-server/utils/manifests/manifests.ts
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/manager/globals/exports.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/preview-api/index.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/manager-api/index.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/addons/docs/src/manifest.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/core/src/shared/constants/tags.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/core/src/csf-tools/CsfFile.ts
code/{core,lib,addons,builders,frameworks,presets}/**/*.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

Use logger from storybook/internal/node-logger for server-side logging in Node.js code

Files:

  • code/core/src/manager-api/index.mock.ts
  • code/core/src/core-server/utils/manifests/manifests.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/manager/globals/exports.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/preview-api/index.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/manager-api/index.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/csf/csf-factories.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/addons/docs/src/manifest.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/core/src/shared/constants/tags.ts
  • code/addons/vitest/src/node/test-manager.test.ts
  • code/core/src/csf-tools/CsfFile.ts
**/*.{test,spec}.{ts,tsx}

📄 CodeRabbit inference engine (.cursorrules)

**/*.{test,spec}.{ts,tsx}: Test files should follow the naming pattern *.test.ts, *.test.tsx, *.spec.ts, or *.spec.tsx
Follow the spy mocking rules defined in .cursor/rules/spy-mocking.mdc for consistent mocking patterns with Vitest

Files:

  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/addons/vitest/src/node/test-manager.test.ts
**/*.test.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.cursor/rules/spy-mocking.mdc)

**/*.test.{ts,tsx,js,jsx}: Use vi.mock() with the spy: true option for all package and file mocks in Vitest tests
Place all mocks at the top of the test file before any test cases
Use vi.mocked() to type and access the mocked functions in Vitest tests
Implement mock behaviors in beforeEach blocks in Vitest tests
Mock all required dependencies that the test subject uses
Each mock implementation should return a Promise for async functions in Vitest
Mock implementations should match the expected return type of the original function
Mock all required properties and methods that the test subject uses in Vitest tests
Avoid direct function mocking without vi.mocked() in Vitest tests
Avoid mock implementations outside of beforeEach blocks in Vitest tests
Avoid mocking without the spy: true option in Vitest tests
Avoid inline mock implementations within test cases in Vitest tests
Avoid mocking only a subset of required dependencies in Vitest tests
Mock at the highest level of abstraction needed in Vitest tests
Keep mock implementations simple and focused in Vitest tests
Use type-safe mocking with vi.mocked() in Vitest tests
Document complex mock behaviors in Vitest tests
Group related mocks together in Vitest tests

Files:

  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/addons/vitest/src/node/test-manager.test.ts
**/*.{test,spec}.{ts,tsx,js,jsx}

📄 CodeRabbit inference engine (.github/copilot-instructions.md)

**/*.{test,spec}.{ts,tsx,js,jsx}: Write meaningful unit tests that actually import and call the functions being tested, not just verify syntax patterns
Achieve high test coverage of business logic, aiming for 75%+ coverage of statements/lines
Cover all branches, conditions, edge cases, error paths, and different input variations in unit tests
Use vi.mock() to mock file system, loggers, and other external dependencies in tests

Files:

  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/core/src/preview-api/modules/store/csf/portable-stories.test.ts
  • code/addons/vitest/src/node/test-manager.test.ts
🧠 Learnings (34)
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{ts,tsx,js,jsx} : Export functions from modules if they need to be tested

Applied to files:

  • code/core/src/manager-api/index.mock.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Mock all required dependencies that the test subject uses

Applied to files:

  • code/core/src/manager-api/index.mock.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
📚 Learning: 2025-11-05T09:38:47.712Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/Select/Select.tsx:200-204
Timestamp: 2025-11-05T09:38:47.712Z
Learning: Repo: storybookjs/storybook — Guidance: Until Storybook 11 is released, do not suggest using React.useId anywhere (e.g., in code/core/src/components/components/Select/Select.tsx) to maintain compatibility with React 17 runtimes. Prefer advising: accept a caller-provided props.id and, if needed, generate a client-only fallback id to minimize SSR hydration issues — but avoid useId. Resume prompting for useId after Storybook 11.

Applied to files:

  • code/core/src/manager-api/index.mock.ts
  • code/renderers/react/src/entry-preview.tsx
  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/Stories.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/manager-api/lib/stories.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/addons/docs/src/manifest.ts
  • code/core/src/csf-tools/CsfFile.ts
📚 Learning: 2025-09-24T09:39:39.233Z
Learnt from: ndelangen
Repo: storybookjs/storybook PR: 32507
File: code/core/src/manager/globals/globals-module-info.ts:25-33
Timestamp: 2025-09-24T09:39:39.233Z
Learning: In Storybook, storybook/actions/decorator is a preview-only entrypoint and should not be included in manager globals configuration. The duplicatedKeys array in code/core/src/manager/globals/globals-module-info.ts is specifically for manager-side externalization, not preview entrypoints.

Applied to files:

  • code/renderers/react/src/entry-preview.tsx
  • code/renderers/react/src/componentManifest/generator.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/core-server/index.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/manager/globals/exports.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/manager/components/sidebar/TagsFilter.tsx
📚 Learning: 2025-11-05T09:37:25.920Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/tooltip/WithTooltip.tsx:54-96
Timestamp: 2025-11-05T09:37:25.920Z
Learning: Repo: storybookjs/storybook — In code/core/src/components/components/tooltip/WithTooltip.tsx, the legacy WithTooltip implementation is intentionally reintroduced for backward compatibility and is deprecated; maintainers (per Sidnioulz) do not want maintenance or improvements on it. Prefer WithTooltipNew/Popover; avoid suggesting changes to WithTooltip.* going forward.

Applied to files:

  • code/renderers/react/src/entry-preview.tsx
  • code/renderers/react/src/componentManifest/generator.ts
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/csf-tools/CsfFile.ts
📚 Learning: 2025-09-18T20:51:06.618Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/viewport/components/Tool.tsx:38-39
Timestamp: 2025-09-18T20:51:06.618Z
Learning: The useGlobals hook from storybook/manager-api returns a tuple where the third element (storyGlobals) is typed as Globals, not Globals | undefined. This means TypeScript guarantees it's always defined, making the `in` operator safe to use without additional null checks.

Applied to files:

  • code/renderers/react/src/entry-preview.tsx
  • code/addons/vitest/src/manager.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/core-server/index.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/shared/checklist-store/checklistData.tsx
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/core-server/presets/common-manager.ts
📚 Learning: 2025-09-18T20:51:06.618Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/viewport/components/Tool.tsx:38-39
Timestamp: 2025-09-18T20:51:06.618Z
Learning: In viewport tool code, when using the `useGlobals` hook from storybook/manager-api, the third returned value `storyGlobals` is guaranteed by TypeScript to be defined (not undefined/null), making the `in` operator safe to use without additional null checks.

Applied to files:

  • code/renderers/react/src/entry-preview.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.ts
  • code/core/src/core-server/utils/summarizeIndex.ts
  • code/core/src/core-server/presets/common-manager.ts
📚 Learning: 2025-09-24T13:04:58.631Z
Learnt from: cylewaitforit
Repo: storybookjs/storybook PR: 31965
File: code/lib/eslint-plugin/src/rules/only-csf3.ts:31-33
Timestamp: 2025-09-24T13:04:58.631Z
Learning: The Storybook ESLint plugin supports ESLint v8.57+ where context.sourceCode is already available as a property since it was introduced in v8.40.0, so no fallback to context.getSourceCode() is needed in rules.

Applied to files:

  • code/renderers/react/src/entry-preview.tsx
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Write meaningful unit tests that actually import and call the functions being tested, not just verify syntax patterns

Applied to files:

  • code/renderers/react/src/entry-preview.tsx
  • code/core/src/preview-api/modules/store/csf/prepareStory.test.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
📚 Learning: 2025-10-01T15:24:01.060Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32594
File: code/core/src/components/components/Popover/WithPopover.tsx:7-9
Timestamp: 2025-10-01T15:24:01.060Z
Learning: In the Storybook repository, "react-aria-components/patched-dist/*" (e.g., "react-aria-components/patched-dist/Dialog", "react-aria-components/patched-dist/Popover", "react-aria-components/patched-dist/Tooltip") are valid import paths created by a patch applied to the react-aria-components package. These imports should not be flagged as broken or invalid until a maintainer explicitly states they are no longer acceptable.

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
  • code/renderers/react/src/componentManifest/fixtures.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to code/{core,lib,addons,builders,frameworks,presets}/**/*.{ts,tsx,js,jsx} : Use `logger` from `storybook/internal/node-logger` for server-side logging in Node.js code

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/core-server/presets/common-manager.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.ts
  • code/core/src/csf-tools/CsfFile.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to code/{renderers}/**/*.{ts,tsx,js,jsx} : Use `logger` from `storybook/internal/client-logger` for client-side logging in browser code

Applied to files:

  • code/renderers/react/src/componentManifest/generator.ts
  • code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/core/src/csf-tools/CsfFile.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Use `vi.mock()` to mock file system, loggers, and other external dependencies in tests

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/manifests/manifests.test.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Document complex mock behaviors in Vitest tests

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Mock all required properties and methods that the test subject uses in Vitest tests

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Group related mocks together in Vitest tests

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid mocking only a subset of required dependencies in Vitest tests

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:31.838Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursorrules:0-0
Timestamp: 2025-11-24T17:49:31.838Z
Learning: Applies to **/*.{test,spec}.{ts,tsx} : Follow the spy mocking rules defined in `.cursor/rules/spy-mocking.mdc` for consistent mocking patterns with Vitest

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Mock implementations should match the expected return type of the original function

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Implement mock behaviors in `beforeEach` blocks in Vitest tests

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Mock at the highest level of abstraction needed in Vitest tests

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-05T09:36:55.944Z
Learnt from: Sidnioulz
Repo: storybookjs/storybook PR: 32458
File: code/core/src/components/components/Tabs/Tabs.stories.tsx:222-227
Timestamp: 2025-11-05T09:36:55.944Z
Learning: Repo: storybookjs/storybook PR: 32458 — In code/core/src/components/components/Button/Button.tsx (React/TypeScript), ButtonProps includes ariaLabel?: string | false and the component maps it to the DOM aria-label. Convention: ariaLabel is mandatory on all Button usages — provide a descriptive string for icon-only buttons; set ariaLabel=false when the button’s children already serve as the accessible name. Do not suggest using a raw aria-label prop on Button call sites.

Applied to files:

  • code/renderers/react/src/componentManifest/fixtures.ts
  • code/addons/docs/src/blocks/blocks/usePrimaryStory.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid inline mock implementations within test cases in Vitest tests

Applied to files:

  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/StoryIndexGenerator.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Keep mock implementations simple and focused in Vitest tests

Applied to files:

  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid mock implementations outside of `beforeEach` blocks in Vitest tests

Applied to files:

  • code/addons/vitest/src/manager.tsx
  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/__tests__/index-extraction.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:31.838Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursorrules:0-0
Timestamp: 2025-11-24T17:49:31.838Z
Learning: Applies to code/vitest.workspace.ts : Vitest configuration is centralized in `code/vitest.workspace.ts` for workspace setup

Applied to files:

  • code/addons/vitest/src/manager.tsx
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/vitest-plugin/index.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid direct function mocking without `vi.mocked()` in Vitest tests

Applied to files:

  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Use `vi.mocked()` to type and access the mocked functions in Vitest tests

Applied to files:

  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Use type-safe mocking with `vi.mocked()` in Vitest tests

Applied to files:

  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Cover all branches, conditions, edge cases, error paths, and different input variations in unit tests

Applied to files:

  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
  • code/core/src/core-server/utils/summarizeIndex.test.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to **/*.{test,spec}.{ts,tsx,js,jsx} : Achieve high test coverage of business logic, aiming for 75%+ coverage of statements/lines

Applied to files:

  • code/core/src/csf-tools/vitest-plugin/transformer.test.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to docs/**/migration*.md : Update migration guides for breaking changes

Applied to files:

  • code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts
📚 Learning: 2025-11-24T17:49:59.279Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .cursor/rules/spy-mocking.mdc:0-0
Timestamp: 2025-11-24T17:49:59.279Z
Learning: Applies to **/*.test.{ts,tsx,js,jsx} : Avoid mocking without the `spy: true` option in Vitest tests

Applied to files:

  • code/core/src/core-server/utils/summarizeIndex.test.ts
  • code/addons/vitest/src/node/vitest-manager.ts
  • code/addons/vitest/src/node/test-manager.test.ts
📚 Learning: 2025-12-22T22:03:40.123Z
Learnt from: CR
Repo: storybookjs/storybook PR: 0
File: .github/copilot-instructions.md:0-0
Timestamp: 2025-12-22T22:03:40.123Z
Learning: Applies to {code/addons,code/frameworks}/**/README.md : Update README files for significant changes and include code examples in addon/framework documentation

Applied to files:

  • code/addons/docs/src/manifest.ts
🧬 Code graph analysis (31)
code/renderers/react/src/entry-preview.tsx (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/utils/manifests/manifests.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/renderers/react/src/componentManifest/generator.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/renderers/react/src/componentManifest/fixtures.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/addons/docs/src/blocks/blocks/usePrimaryStory.test.tsx (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/preview-api/modules/store/csf/prepareStory.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/addons/docs/src/blocks/blocks/Stories.tsx (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/csf-tools/vitest-plugin/transformer.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/addons/docs/src/blocks/blocks/usePrimaryStory.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/shared/checklist-store/checklistData.tsx (5)
code/core/src/core-server/index.ts (1)
  • Tag (15-15)
code/core/src/manager-api/index.mock.ts (1)
  • Tag (4-4)
code/core/src/manager-api/index.ts (1)
  • Tag (26-26)
code/core/src/preview-api/index.ts (1)
  • Tag (75-75)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/utils/__tests__/index-extraction.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/preview-api/modules/preview-web/render/CsfDocsRender.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/preview-api/modules/store/csf/prepareStory.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/utils/manifests/manifests.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/lib/cli-storybook/src/automigrate/fixes/remove-docs-autodocs.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/preview-api/modules/preview-web/PreviewWeb.mockdata.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/utils/summarizeIndex.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/utils/StoryIndexGenerator.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/utils/summarizeIndex.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/manager-api/lib/stories.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/addons/vitest/src/node/vitest-manager.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/addons/vitest/src/vitest-plugin/index.ts (5)
code/core/src/core-server/index.ts (1)
  • Tag (15-15)
code/core/src/manager-api/index.mock.ts (1)
  • Tag (4-4)
code/core/src/manager-api/index.ts (1)
  • Tag (26-26)
code/core/src/preview-api/index.ts (1)
  • Tag (75-75)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/presets/common-manager.ts (3)
code/core/src/core-server/index.ts (1)
  • Tag (15-15)
code/core/src/manager-api/index.ts (1)
  • Tag (26-26)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/manager/components/sidebar/TagsFilter.tsx (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/core-server/utils/StoryIndexGenerator.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/addons/docs/src/manifest.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/preview-api/modules/store/csf/portable-stories.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/shared/constants/tags.ts (4)
code/core/src/core-server/index.ts (1)
  • Tag (15-15)
code/core/src/manager-api/index.mock.ts (1)
  • Tag (4-4)
code/core/src/manager-api/index.ts (1)
  • Tag (26-26)
code/core/src/preview-api/index.ts (1)
  • Tag (75-75)
code/addons/vitest/src/node/test-manager.test.ts (1)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/csf-tools/CsfFile.ts (3)
code/core/src/shared/constants/tags.ts (2)
  • Tag (2-19)
  • Tag (25-25)
code/core/src/csf/story.ts (1)
  • Tag (15-15)
code/core/src/csf/csf-factories.ts (1)
  • test (198-228)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (3)
  • GitHub Check: normal
  • GitHub Check: nx
  • GitHub Check: Core Unit Tests, windows-latest

Comment thread code/core/src/manager/globals/exports.ts
@JReinhold JReinhold merged commit 0406ca8 into next Jan 6, 2026
59 of 69 checks passed
@JReinhold JReinhold deleted the copilot/add-mdx-support-manifest branch January 6, 2026 13:23
JReinhold added a commit to storybookjs/mcp that referenced this pull request Jan 8, 2026
* make getManifest handle both component and docs manifests

* add support for docs manifest in both tools

* update bin and eval to support manifest split

* fix manifest feature detection

* add MDX files to test support

* Use canary version of storybookjs/storybook#33408

* fix tests

* rename "list all components" tool to "list all documentation"

* fix check-deps e2e tests

* remove dependency on canary again

* add changesets

* fix Button.mdx to match implementation

* fix lints

* add support for summary in MDX

* update storybook deps

* small docs fixes

* simpllify storybook docs context in eval to always get components.json/docs.json instead of supporting custom filenames

* update storybook
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants