Repository navigation
Release: Prerelease beta 10.5.0-beta.2 - #35393
Merged
Merged
Conversation
framework.name could leak a pnpm virtual-store path (e.g. .pnpm/@storybook+react-vite@9.0.0) instead of the stable package name, which is version-unstable and pollutes telemetry. Two failure modes are fixed: - extractFrameworkPackageName only matched paths ending with the package name, missing pnpm virtual-store dirs; it now also matches the .pnpm/<encoded-name>@ form for known framework packages. - cleanAndSanitizePath's greedy node_modules strip left a .pnpm/<name>@<version> tail for pnpm-resolved packages; it now decodes that back to the real package name (defense-in-depth for third-party packages), tolerating peer-dep version suffixes.
Portable stories (vitest/playwright/jest) have no manager Code panel and no OSA server peer, so `storyDocsSourceBeforeEach` firing the server-only `core/story-docs.extractStoryDocs` remote command rejected after the ack timeout, failing addon-vitest browser tests when `features.experimentalDocgenServer` is enabled. Guard the hook on `context.parameters.__isPortableStory` and add a defensive `.catch()` on the load chain so an unbacked remote command can never surface as an unhandled rejection. Co-authored-by: Cursor <cursoragent@cursor.com>
The `__isPortableStory` guard already prevents the remote command in the only environment that hit it (portable stories). A blanket `.catch()` only masks genuine extraction failures in scenarios that do not occur in practice, so remove it and keep the fix to the precise guard. Co-authored-by: Cursor <cursoragent@cursor.com>
detect-port resolves undefined instead of rejecting when the environment denies every bind attempt (e.g. sandboxed shells used by coding agents). That undefined slipped through getServerPort and crashed buildDevStandalone with the cryptic 'Invariant failed: expected options to have a port'. Also log a clear error before exiting when --exact-port is set and the requested port is unavailable, instead of exiting silently.
…message - NoFreePortError now uses CORE_SERVER code 18; 17 was already taken by OxcParseError in oxc-parser/errors.ts, and these codes must stay unique for telemetry. - getServerPort now lets NoFreePortError propagate instead of swallowing it with logger.error + process.exit: storybook dev reports it through withTelemetry (like the old invariant crash did), and storybook init's opportunistic port probe can recover from it instead of hard-exiting. - The --exact-port bail-out only applies when a port was actually requested, fixing the 'Port undefined is not available' message (and the pre-existing always-exit) when --exact-port is passed without -p.
Derive the widget count from the displayed review payload instead of counting every story with a reviewing status in the sidebar store.
Replace incremental status diffing with a full clear-and-apply sync so remounted tabs and replaced reviews do not leave stale reviewing counts in the sidebar filter menu.
Record the resolved configDir in the runtime instance record written by storybook dev, and let storybook ai resolve an instance when either its recorded cwd or its recorded config dir matches the CLI's target, so monorepo instances are found from a different cwd. When nothing matches, the no-instance guidance now lists the running instances with their recorded cwd/config dir and copyable retry invocations. Related to #35359
…ection-crash Core: Fix cryptic invariant crash when dev server port detection fails
Angular: Support Angular 22 in Webpack framework
storybook-bot
force-pushed
the
version-non-patch-from-10.5.0-beta.1
branch
from
July 7, 2026 13:01
ada6602 to
720e245
Compare
Added a check in `shouldSkipStoryDocsEmit` to skip portable stories, ensuring that the function correctly identifies and handles these cases. Updated the test suite to include a new test case for this behavior, confirming that portable stories are skipped even when they would otherwise render dynamically. Co-authored-by: Cursor <cursoragent@cursor.com>
Implemented a new test case in `jsxDecorator.test.tsx` to verify that JSX rendering is correctly skipped for portable stories. Updated the `skipJsxRender` function in `jsxDecorator.tsx` to include a check for the `__isPortableStory` parameter, ensuring efficient handling of portable stories without unnecessary overhead. Co-authored-by: Cursor <cursoragent@cursor.com>
4 of 7 tasks
Findings from a dual review (subagent + codex gpt-5.5 xhigh): - An explicit --config-dir now restricts matching to records with that exact configDir; previously a same-cwd instance serving a different config could silently win. The defaulted .storybook guess keeps the either-or union. - No-instance retry examples emit --config-dir (not --cwd) for records with a configDir, since a bare --cwd retry fails metadata loading when the config is not at <cwd>/.storybook; paths with whitespace are quoted. - The multi-instance warning no longer claims 'at this cwd' and lists each competing instance's cwd/config dir, since matches can span cwds.
…n enable review The explicit `experimentalReview: false` default added in #35379 is indistinguishable, in the merged features preset, from a user opting out via main.ts. @storybook/addon-mcp gates review for the `storybook ai` CLI channel as `experimentalReview !== false` (storybookjs/mcp#341), so the explicit default silently disabled review for every Claude/Codex plugin user as of 10.5.0-beta.1. Make the flag an honest tri-state: unset (default) mounts the dormant review infrastructure so the plugins can use review per-request while direct MCP clients and the UI stay off; `false` is a hard opt-out everywhere; `true` also enables direct MCP clients. Core's gates switch from truthy to `!== false` accordingly, and the default features preset must never set the flag explicitly. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Modified the test in `jsxDecorator.test.tsx` to return the correct story output for portable stories. This change ensures that the test accurately reflects the expected behavior of skipping JSX rendering, enhancing the reliability of the test suite. Co-authored-by: Cursor <cursoragent@cursor.com>
…rnal comments only
…-default' into kasper/experimental-review-unset-default
Let the state-driven effect own status sync when displayReview updates state; keep the handler sync only for same-payload replays where state does not change.
Addresses review feedback: the gate tests set changeDetection explicitly, so nothing failed if the real defaults regressed. Apply the actual default features preset and assert experimentalReview stays unset and review is enabled on it.
Telemetry: Prevent pnpm paths from leaking into framework.name
storybook-bot
force-pushed
the
version-non-patch-from-10.5.0-beta.1
branch
from
July 7, 2026 14:12
720e245 to
883d12c
Compare
…table-stories Core: Skip story-docs Code panel emission in portable stories
storybook-bot
force-pushed
the
version-non-patch-from-10.5.0-beta.1
branch
from
July 7, 2026 14:18
883d12c to
06dbaf9
Compare
…uracy Review: Fix inaccurate review story counts in sidebar
storybook-bot
force-pushed
the
version-non-patch-from-10.5.0-beta.1
branch
from
July 7, 2026 14:32
06dbaf9 to
a682b21
Compare
…-unset-default Core: Leave experimentalReview unset by default so the AI CLI plugins can enable review
storybook-bot
force-pushed
the
version-non-patch-from-10.5.0-beta.1
branch
from
July 7, 2026 15:06
a682b21 to
aa324ec
Compare
…stance-matching CLI: Match `storybook ai` instances by config dir as well as cwd
storybook-bot
force-pushed
the
version-non-patch-from-10.5.0-beta.1
branch
from
July 7, 2026 16:09
aa324ec to
de23cc7
Compare
storybook-bot
force-pushed
the
version-non-patch-from-10.5.0-beta.1
branch
from
July 8, 2026 07:44
de23cc7 to
cb7a60b
Compare
Contributor
Package BenchmarksCommit: The following packages have significant changes to their size or dependencies:
|
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 188 | 188 | 0 |
| Self size | 79 KB | 79 KB | 0 B |
| Dependency size | 35.44 MB | 35.57 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/angular
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 185 | 185 | 0 |
| Self size | 160 KB | 160 KB | 0 B |
| Dependency size | 30.65 MB | 30.79 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/ember
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 187 | 187 | 0 |
| Self size | 15 KB | 15 KB | 0 B |
| Dependency size | 30.79 MB | 30.92 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/nextjs
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 533 | 533 | 0 |
| Self size | 663 KB | 663 KB | 0 B |
| Dependency size | 62.16 MB | 62.29 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/react-webpack5
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 274 | 274 | 0 |
| Self size | 23 KB | 23 KB | 0 B |
| Dependency size | 47.94 MB | 48.07 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/server-webpack5
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 200 | 200 | 0 |
| Self size | 16 KB | 16 KB | 🚨 +12 B 🚨 |
| Dependency size | 36.70 MB | 36.84 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/cli
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 204 | 204 | 0 |
| Self size | 821 KB | 821 KB | 🚨 +118 B 🚨 |
| Dependency size | 91.80 MB | 91.94 MB | 🚨 +139 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/codemod
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 197 | 197 | 0 |
| Self size | 32 KB | 32 KB | 🚨 +36 B 🚨 |
| Dependency size | 90.28 MB | 90.42 MB | 🚨 +139 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/preset-create-react-app
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 68 | 68 | 0 |
| Self size | 32 KB | 32 KB | 0 B |
| Dependency size | 6.03 MB | 6.16 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
@storybook/preset-react-webpack
| Before | After | Difference | |
|---|---|---|---|
| Dependency count | 163 | 163 | 0 |
| Self size | 19 KB | 19 KB | 0 B |
| Dependency size | 32.42 MB | 32.55 MB | 🚨 +135 KB 🚨 |
| Bundle Size Analyzer | Link | Link |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This is an automated pull request that bumps the version from `10.5.0-beta.1` to `10.5.0-beta.2`.
Once this pull request is merged, it will trigger a new release of version `10.5.0-beta.2`.
If you're not a core maintainer with permissions to release you can ignore this pull request.
To do
Before merging the PR, there are a few QA steps to go through:
And for each change below:
This is a list of all the PRs merged and commits pushed directly to `next`, that will be part of this release:
If you've made any changes doing the above QA (change PR titles, revert PRs), manually trigger a re-generation of this PR with this workflow and wait for it to finish. It will wipe your progress in this to do, which is expected.
Feel free to manually commit any changes necessary to this branch after you've done the last re-generation, following the Make Manual Changes section in the docs, especially if you're making changes to the changelog.
When everything above is done:
Generated changelog
10.5.0-beta.2