# Behavior traces — storybookjs/storybook

> Canonical page: https://codevetter.com/unpack/storybook/behavior-traces

# Behavior traces — storybookjs/storybook

Scanned commit dc9b30e8fd8a71383ec01b9510f38bee51457e8a (2026-10-02). Generated by codevetter codevetter 1.15.0 on 2026-10-02.

Source inspection; upstream code and tests were not executed.

Three concrete flows were followed through implementation: development startup, selecting and rendering a story, and saving Controls changes to source. Startup has separate configuration-discovery and final preset passes. Selection branches between stories and docs and handles asynchronous replacement of an existing render. Saving crosses from browser events to AST mutation and filesystem output, then returns through correlated response events.
- Startup begins dispatcher.run() → core dev action → resolveDevCommandOptions() → dev() → withTelemetry() → buildDevStandalone(); invalid CLI options use handleCommandFailure(). — [code/core/src/bin/dispatcher.ts#L34-L46](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/bin/dispatcher.ts#L34-L46) [code/core/src/bin/core.ts#L133-L150](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/bin/core.ts#L133-L150) [code/core/src/cli/dev.ts#L54-L62](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/cli/dev.ts#L54-L62)
- buildDevStandalone resolves port/config → first loadAllPresets → builder selection → second loadAllPresets → features/services/server-channel hooks → storybookDevServer; the server starts builders, listens, and conditionally opens the browser. — [code/core/src/core-server/build-dev.ts#L148-L156](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/build-dev.ts#L148-L156) [code/core/src/core-server/build-dev.ts#L184-L204](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/build-dev.ts#L184-L204) [code/core/src/core-server/build-dev.ts#L265-L297](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/build-dev.ts#L265-L297) [code/core/src/core-server/dev-server.ts#L116-L184](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/dev-server.ts#L116-L184)
- Initial preview selection runs initializeWithStoryIndex() → selectSpecifiedStory() → entryFromSpecifier() → setSelection() → STORY_SPECIFIED/CURRENT_STORY_WAS_SET → renderSelection(); missing selection or index matches produce explicit error views. — [code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L152-L203](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L152-L203)
- renderSelection resolves the entry → constructs StoryRender/MdxDocsRender/CsfDocsRender → prepare(); StoryRender.prepare calls StoryStore.loadStory → loadCSFFileByStoryId → importFn → storyFromCSFFile. — [code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L354-L390](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L354-L390) [code/core/src/preview-api/modules/preview-web/render/StoryRender.ts#L136-L144](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/preview-web/render/StoryRender.ts#L136-L144) [code/core/src/preview-api/modules/store/StoryStore.ts#L149-L155](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/store/StoryStore.ts#L149-L155) [code/core/src/preview-api/modules/store/StoryStore.ts#L195-L224](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/store/StoryStore.ts#L195-L224)
- After preparation, the preview emits STORY_PREPARED and renders to an element; StoryRender applies loaders → beforeEach → mount → conditional play, while React renderToCanvas creates the story subtree and calls renderElement inside act. — [code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L452-L461](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L452-L461) [code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L491-L504](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/preview-web/PreviewWithSelection.tsx#L491-L504) [code/core/src/preview-api/modules/preview-web/render/StoryRender.ts#L294-L347](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/preview-api/modules/preview-web/render/StoryRender.ts#L294-L347) [code/renderers/react/src/renderToCanvas.tsx#L100-L129](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/renderers/react/src/renderToCanvas.tsx#L100-L129)
- Update story runs SaveStory.onSaveStory → Controls saveStory → experimental_requestResponse(SAVE_STORY_REQUEST); the dev preset has already registered initializeSaveStory, which reads/parses CSF, checks source/export names, and updates args or duplicates the export. — [code/core/src/controls/components/SaveStory.tsx#L98-L104](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/controls/components/SaveStory.tsx#L98-L104) [code/core/src/controls/manager.tsx#L31-L54](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/controls/manager.tsx#L31-L54) [code/core/src/core-server/presets/common-preset.ts#L310-L322](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/presets/common-preset.ts#L310-L322) [code/core/src/core-server/utils/save-story/save-story.ts#L62-L90](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/utils/save-story/save-story.ts#L62-L90)
- The save handler formats source → concurrently writes and waits for STORY_RENDERED or 3000 ms → emits SAVE_STORY_RESPONSE; the manager resets args and optionally selects the new story, while errors produce a failed response and notification. — [code/core/src/core-server/utils/save-story/save-story.ts#L92-L121](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/utils/save-story/save-story.ts#L92-L121) [code/core/src/core-server/utils/save-story/save-story.ts#L131-L139](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/utils/save-story/save-story.ts#L131-L139) [code/core/src/controls/manager.tsx#L69-L81](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/controls/manager.tsx#L69-L81) [code/core/src/controls/manager.tsx#L140-L153](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/controls/manager.tsx#L140-L153)
- Static build runs output cleanup → configuration/preset resolution → services registration → optional manager build → service snapshots before dependent manifests → preview build alongside remaining output effects. — [code/core/src/core-server/build-static.ts#L40-L85](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/build-static.ts#L40-L85) [code/core/src/core-server/build-static.ts#L136-L176](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/build-static.ts#L136-L176) [code/core/src/core-server/build-static.ts#L188-L212](https://github.com/storybookjs/storybook/blob/dc9b30e8fd8a71383ec01b9510f38bee51457e8a/code/core/src/core-server/build-static.ts#L188-L212)

Every claim links to its cited files at the pinned commit. Citations identify source evidence; they do not establish runtime correctness. Independent CodeVetter scan — not reviewed by upstream maintainers.

## Public product links

- [CodeVetter](https://codevetter.com/)
- [Download](https://codevetter.com/download)
- [Documentation](https://codevetter.com/docs/)
- [Source](https://github.com/Codevetter/codevetter)
