From 88bf4c6c1d222f818faa56257efe79207c892a6c Mon Sep 17 00:00:00 2001 From: Dotta <34892728+cryppadotta@users.noreply.github.com> Date: Mon, 12 Oct 2026 17:29:22 -0500 Subject: [PATCH] refactor(storybook): organize folders and navigation by feature map (#16049) ## Thinking Path > - Paperclip is the open source app people use to manage AI agents for work. > - The feature map describes product areas and verification entry points. > - Storybook has 223 story suites that show production components, proposals, and retained history. > - The parent PR maps those suites to features, but their folders and sidebar still use unrelated groups. > - This pull request puts the existing suites under feature folders and uses the feature map's names and order in the sidebar. > - Explicit meta IDs preserve existing story links while the titles change. > - Contributors can find stories through the same product structure without losing examples. ## Linked Issues or Issue Description Refs #16046. This is the requested follow-up. Parent #16046 is merged. This PR now targets master, with its single follow-up commit rebased onto the parent squash merge. The Storybook implementation is unchanged by that rebase. Related open Storybook PRs were checked; this change organizes existing suites and adds no product capability. ## What Changed - Move all 223 story files into folders named for their primary feature area. Keep useful scenario groups below the feature's sidebar label. - Order the sidebar by the eight feature-map sections. Put Overview first and shared Foundations last. Leave areas with no stories out of the sidebar. - Move 19 support files into `ui/storybook/support/` and update relative imports and active documentation. - Preserve all 2,210 story IDs and the single docs ID through explicit CSF meta IDs. Keep all entry names and story exports. - Record stable IDs and sidebar titles in the downstream catalog. Validate feature folders, title prefixes, and IDs. Update the maintenance skill and review evidence. ## Verification - Storybook build passed. Built index comparison against parent `75bd3c977cd828d5222823850339e8204f40eb47` found the same 2,211 entries, IDs, and names. - UI typecheck passed (`ui/node_modules/.bin/tsc -b` from `ui`, invoked as `./node_modules/.bin/tsc -b`). - UI Vitest project: 728 files and 8,176 tests passed. - Catalog checker and its nine tests passed. Feature-map checks, token gates, and the maintenance-skill validator passed. - Chromium: nine existing play cases and one render case reached `storyFinished: success` with no page exceptions. The guide rendered, sidebar sections followed map order, and a search for `steering/queue` opened its preserved story link. - Source comparison found only meta title/ID changes, rebased relative references, and updated fixture path text in story files. - To inspect: build Storybook, start `node scripts/serve-storybook-static.mjs --port 6136`, and open the Overview guide. Expand feature folders and use existing story links. - The complete repository suite was not repeated for this organization change. The parent records a backend timeout that passed in isolation, without a complete broad-suite pass. Visual comparisons remain blocked by the unpublished empty baseline. The separate fixture-server story was not run. ## Risks - Open branches that add stories under old paths will need to choose a feature folder and update the catalog. Cross-feature suites have one primary home and retain related capability references. - Sidebar paths change; story and docs IDs remain stable. Automated references to source paths may need the new location. - This is one requested follow-up with 258 changed files, mostly moves. It exceeds the usual review-size guideline because splitting it would leave the sidebar and folder convention partly migrated. - Browser verification samples ten stories, not all 2,210. Existing production/prototype classifications and review gaps remain unchanged. - Required CI gates and a 5/5 review passed on the original head. Fresh checks and review are running for the rebased head. Catalog validation and all nine checker tests passed after rebase; UI, map, skill, and checker contents are identical to the original reviewed head. ## Model Used - OpenAI Codex, GPT-6. The exact runtime model ID and context-window size are not exposed in this session. Used reasoning, repository inspection, code execution, and local browser automation. ## Checklist - [x] I have included a thinking path that traces from project context to this change - [x] I have specified the model used (with version and capability details) - [x] I have checked ROADMAP.md and confirmed this PR does not duplicate planned core work - [x] I have searched GitHub for duplicate or related PRs and linked them above - [x] I have either (a) linked existing issues with `Fixes: #` / `Closes #` / `Refs #` OR (b) described the issue in-PR following the relevant issue template - [x] I have not referenced internal/instance-local Paperclip issues or links (only public GitHub `#NNN` / `github.com/paperclipai/paperclip` URLs) - [x] My branch name describes the change (e.g. `docs/...`, `fix/...`) and contains no internal Paperclip ticket id or instance-derived details - [x] I have run tests locally and they pass - [x] I have added or updated tests where applicable - [x] I have updated relevant documentation to reflect my changes - [x] I have considered and documented any risks above - [ ] All Paperclip CI gates are green - [ ] Greptile is 5/5 with no open P2s, recommendations, or follow-ups - [x] I will address all Greptile and reviewer comments before requesting merge Co-authored-by: Paperclip --- .../create-issue-interaction-ui/SKILL.md | 2 +- .agents/skills/maintain-storybook/SKILL.md | 6 + doc/DEVELOPING.md | 5 + doc/connection-intents.md | 2 +- maps/storybook-map/INDEX.md | 648 +++--- maps/storybook-map/README.md | 18 + maps/storybook-map/REVIEW.md | 49 +- maps/storybook-map/catalog.json | 1915 ++++++++++------- scripts/storybook-catalog.mjs | 20 +- scripts/storybook-catalog.test.mjs | 38 +- .../DecisionModelSettings.test.tsx | 2 +- .../FastResponseSettings.test.tsx | 2 +- ui/src/pages/TeamCatalog.fixtures.ts | 2 +- ui/storybook/.storybook/preview.tsx | 67 + ui/storybook/fixtures/paperclipData.ts | 2 +- .../private-tasks/00-review-guide.stories.tsx | 3 +- .../private-tasks/01-creation.stories.tsx | 5 +- .../private-tasks/02-sharing.stories.tsx | 7 +- .../private-tasks/03-task-actions.stories.tsx | 7 +- .../04-references-and-blockers.stories.tsx | 5 +- .../private-tasks/05-projects.stories.tsx | 5 +- .../06-full-product-pages.stories.tsx | 5 +- .../private-tasks/07-user-stories.stories.tsx | 5 +- .../{ => activity}/activity-feed.stories.tsx | 3 +- .../app-activity-lifecycle.stories.tsx | 3 +- .../{ => activity}/data-viz-misc.stories.tsx | 5 +- .../{ => activity}/work-timeline.stories.tsx | 7 +- .../agent-chat-sidebar.stories.tsx | 5 +- .../{ => agent-chat}/agent-chat.stories.tsx | 5 +- .../agent-conversation-sidebar.stories.tsx | 7 +- .../{ => agent-chat}/chat-entry.stories.tsx | 5 +- .../{ => agents}/agent-detail.stories.tsx | 5 +- .../{ => agents}/agent-files.stories.tsx | 5 +- .../{ => agents}/agent-management.stories.tsx | 5 +- .../agent-persona-pages.stories.tsx | 5 +- .../{ => agents}/agent-personas.stories.tsx | 11 +- .../agent-settings-redesign.stories.tsx | 5 +- .../{ => agents}/built-in-agents.stories.tsx | 3 +- .../components.stories.tsx | 3 +- .../journeys.stories.tsx | 5 +- .../new-agent-onboarding.stories.tsx | 5 +- .../primary-agent/00-review-guide.stories.tsx | 3 +- .../primary-agent/01-components.stories.tsx | 5 +- .../primary-agent/02-sidebar.stories.tsx | 5 +- .../primary-agent/03-agents.stories.tsx | 5 +- .../primary-agent/04-new-task.stories.tsx | 5 +- .../primary-agent/05-chat.stories.tsx | 5 +- .../primary-agent/06-journeys.stories.tsx | 5 +- .../primary-agent/07-confirmation.stories.tsx | 5 +- .../summary-slot-card.stories.tsx | 3 +- .../action-card.stories.tsx | 3 +- .../action-permissions-test.stories.tsx | 3 +- .../apps-managed-accounts.stories.tsx | 7 + .../permitted-vs-installed.stories.tsx | 3 +- .../stories/apps-managed-accounts.stories.tsx | 6 - .../budget-finance.stories.tsx | 3 +- .../costs/subscriptions.stories.tsx | 3 +- .../agentmail-onboarding.stories.tsx | 5 +- .../agentmail-settings.stories.tsx | 3 +- .../{ => chat-channels}/agentmail.stories.tsx | 3 +- .../chat-connection-actions.stories.tsx | 3 +- .../chat-management.stories.tsx | 5 +- .../management.stories.tsx | 7 +- .../github-chat.stories.tsx | 5 +- .../github-connections.stories.tsx | 5 +- .../imessage-photon.stories.tsx | 5 +- .../slack-automatic-setup.stories.tsx | 5 +- .../slack-avatar-settings.stories.tsx | 5 +- .../slack-communication-settings.stories.tsx | 5 +- .../slack-managed-setup.stories.tsx | 5 +- .../slack-tools.stories.tsx | 5 +- .../decision-models/01-settings.stories.tsx | 5 +- .../decision-models/02-history.stories.tsx | 5 +- .../decision-models/03-journey.stories.tsx | 5 +- .../fast-responses/01-settings.stories.tsx | 5 +- .../fast-responses/02-history.stories.tsx | 5 +- .../AppLogoRegistry.stories.tsx | 5 +- .../ArcadeConnection.stories.tsx | 5 +- .../ComposioConnection.stories.tsx | 5 +- .../ConnectionProviderChoice.stories.tsx | 5 +- .../ExecutorConnection.stories.tsx | 5 +- .../ZapierConnection.stories.tsx | 5 +- .../agent-setup-prompt.stories.tsx | 7 +- .../apps-catalog-source-selection.stories.tsx | 5 +- .../apps-connect-discoverability.stories.tsx | 3 +- .../apps-connect-name.stories.tsx | 3 +- .../browser-use-settings.stories.tsx | 5 +- .../connection-instructions.stories.tsx | 5 +- .../enterpret-connect-flow.stories.tsx | 3 +- .../fireflies-pr.stories.tsx | 5 +- .../in-feed-connections.stories.tsx | 5 +- .../managed-cloud-oauth-handoff.stories.tsx | 3 +- .../memory-connectors.stories.tsx | 3 +- .../notion-connect-flow.stories.tsx | 3 +- .../personal-connection-identity.stories.tsx | 3 +- .../{ => developer-labs}/ux-labs.stories.tsx | 3 +- .../artifact-cards/commit.stories.tsx | 5 +- .../artifact-cards/data.stories.tsx | 5 +- .../artifact-cards/document.stories.tsx | 5 +- .../artifact-cards/file.stories.tsx | 5 +- .../artifact-cards/image.stories.tsx | 7 +- .../artifact-cards/link-preview.stories.tsx | 5 +- .../artifact-cards/pull-request.stories.tsx | 5 +- .../artifact-cards/video.stories.tsx | 9 +- .../artifact-upload/01-components.stories.tsx | 7 +- .../02-task-journey.stories.tsx | 7 +- .../artifacts.stories.tsx | 3 +- .../csv-preview.stories.tsx | 3 +- .../document-annotations.stories.tsx | 3 +- .../document-comments.stories.tsx | 3 +- .../file-viewer.stories.tsx | 3 +- .../html-artifacts/01-preview.stories.tsx | 5 +- .../html-artifacts/02-workspace.stories.tsx | 5 +- .../03-task-journey.stories.tsx | 9 +- .../rich-work-product-cards.stories.tsx | 9 +- .../task-artifact-gallery.stories.tsx | 19 +- .../task-text-files.stories.tsx | 5 +- .../forms-editors.stories.tsx | 5 +- .../{ => foundations}/foundations.stories.tsx | 1 + .../primitives-coverage.stories.tsx | 1 + .../status-language.stories.tsx | 3 +- .../access-profiles.stories.tsx | 3 +- .../gateways-tab.stories.tsx | 3 +- .../public-mcp-connections.stories.tsx | 5 +- .../public-mcp-consent.stories.tsx | 5 +- .../public-mcp-device.stories.tsx | 5 +- .../public-mcp-journey.stories.tsx | 7 +- .../public-mcp-setting.stories.tsx | 5 +- .../blocked-inbox.stories.tsx | 5 +- .../decision-card.stories.tsx | 3 +- .../decisions-desk.stories.tsx | 3 +- .../{ => inbox-search}/search.stories.tsx | 5 +- .../what-needs-me.stories.tsx | 3 +- .../dev-ops-surfaces.stories.tsx | 3 +- .../announcement-card.stories.tsx | 3 +- .../mobile-task-tabs.stories.tsx | 3 +- .../navigation-layout.stories.tsx | 5 +- .../onboarding-agent-arc.stories.tsx | 7 +- .../onboarding-character.stories.tsx | 7 +- .../onboarding-connect-model.stories.tsx | 3 +- .../{ => overview}/overview.stories.tsx | 3 +- .../new-project-repos.stories.tsx | 7 +- ...t-execution-workspace-strategy.stories.tsx | 5 +- .../project-repos-configuration.stories.tsx | 7 +- .../projects-goals-workspaces.stories.tsx | 5 +- ...gent-chat-unanswered-questions.stories.tsx | 5 +- .../composer-question-flow.stories.tsx | 3 +- .../connection-reviews.stories.tsx | 5 +- .../issue-plan-decompositions.stories.tsx | 5 +- .../issue-thread-interactions.stories.tsx | 5 +- .../rich-acp-interactions.stories.tsx | 5 +- ...hat-interaction-above-composer.stories.tsx | 7 +- ...task-chat-unanswered-questions.stories.tsx | 5 +- .../cloud-access-recovery.stories.tsx | 3 +- .../execution-blocker-notice.stories.tsx | 3 +- .../execution-recovery.stories.tsx | 5 +- .../issue-blocked-notice.stories.tsx | 3 +- .../model-capacity-retry.stories.tsx | 3 +- .../recovery-notice-preview.stories.tsx | 5 +- .../scheduled-retry.stories.tsx | 5 +- .../source-issue-recovery.stories.tsx | 5 +- .../source-resolved-fold.stories.tsx | 3 +- .../01-component.stories.tsx | 5 +- .../02-task-journey.stories.tsx | 5 +- .../routine-detail-c.stories.tsx | 5 +- .../routine-secrets.stories.tsx | 5 +- .../routine-webhooks-ux.stories.tsx | 11 +- .../routine-webhooks.stories.tsx | 5 +- .../routines-list-groups.stories.tsx | 3 +- .../agent-connection-reuse.stories.tsx | 5 +- .../ai-connection-usage.stories.tsx | 5 +- .../ai-connections.stories.tsx | 13 +- .../connection-pool-connector.stories.tsx | 5 +- .../connection-pools.stories.tsx | 5 +- .../dot-runner-connection.stories.tsx | 3 +- .../local-ai-subscription.stories.tsx | 3 +- .../provider-routing-00-overview.stories.tsx | 9 +- ...provider-routing-01-onboarding.stories.tsx | 9 +- .../provider-routing-02-connect.stories.tsx | 11 +- .../provider-routing-03-agent.stories.tsx | 9 +- .../provider-routing-04-manage.stories.tsx | 9 +- .../provider-routing-05-recovery.stories.tsx | 9 +- ...provider-routing-06-production.stories.tsx | 7 +- .../session-goals.stories.tsx | 3 +- .../credential-access/01-notice.stories.tsx | 3 +- .../02-task-page.stories.tsx | 5 +- .../environment-variables-editor.stories.tsx | 3 +- .../stories/{ => secrets}/secrets.stories.tsx | 5 +- .../{ => secrets}/user-secrets.stories.tsx | 3 +- .../{ => skills}/agent-skill-row.stories.tsx | 3 +- .../agent-skills-edge.stories.tsx | 3 +- .../agents-using-skill.stories.tsx | 3 +- .../{ => skills}/fork-skill-flow.stories.tsx | 3 +- .../frontmatter-panel.stories.tsx | 3 +- .../github-skills-journey.stories.tsx | 5 +- .../github-synced-skills.stories.tsx | 5 +- .../repository-skill-packages.stories.tsx | 3 +- .../skill-import-progress.stories.tsx | 5 +- .../skill-policy-surfaces.stories.tsx | 3 +- .../skills-store-detail.stories.tsx | 3 +- .../skills-store-discovery.stories.tsx | 3 +- .../composer-queued-messages.stories.tsx | 5 +- .../interrupt-handoff.stories.tsx | 3 +- .../paused-composer.stories.tsx | 5 +- .../task-execution-controls.stories.tsx | 3 +- .../issue-review-panel.stories.tsx | 3 +- .../monitor-surfaces.stories.tsx | 5 +- .../originating-tasks.stories.tsx | 5 +- .../sub-issues-workflow.stories.tsx | 5 +- .../task-watchdog-surfaces.stories.tsx | 5 +- .../assigned-backlog-safeguards.stories.tsx | 5 +- .../{ => tasks}/chat-comments.stories.tsx | 11 +- .../completed-activity.stories.tsx | 5 +- .../{ => tasks}/composer-add-menu.stories.tsx | 5 +- .../composer-mobile-assignee.stories.tsx | 5 +- .../composer-model-picker.stories.tsx | 7 +- .../control-plane-surfaces.stories.tsx | 5 +- .../{ => tasks}/dialogs-modals.stories.tsx | 5 +- .../{ => tasks}/external-objects.stories.tsx | 5 +- .../{ => tasks}/issue-management.stories.tsx | 5 +- .../mobile-entity-pickers.stories.tsx | 3 +- .../{ => tasks}/new-task-composer.stories.tsx | 5 +- .../{ => tasks}/runner-activity.stories.tsx | 5 +- .../successful-run-handoff.stories.tsx | 5 +- .../task-chat-chain-of-thought.stories.tsx | 3 +- .../task-chat-mobile-follow.stories.tsx | 3 +- .../task-chat-system-notice.stories.tsx | 3 +- .../task-context-notices.stories.tsx | 3 +- .../00-evidence.stories.tsx | 5 +- .../01-components.stories.tsx | 5 +- .../02-task-journey.stories.tsx | 7 +- .../{ => teams}/team-catalog.stories.tsx | 3 +- .../browser-use-activity.stories.tsx | 5 +- .../browser-use-footer.stories.tsx | 5 +- .../{ => workspaces}/browser-use.stories.tsx | 7 +- .../searchable-select.stories.tsx | 3 +- .../workspace-file-browser.stories.tsx | 3 +- ...workspace-runtime-provisioning.stories.tsx | 3 +- .../workspace-service-control-bar.stories.tsx | 3 +- .../artifact-cards/README.md | 2 +- .../artifact-cards/storyConfig.tsx | 0 .../artifact-upload/UploadPreview.tsx | 0 .../artifact-upload/fixtures.ts | 0 .../credential-access/CredentialTaskPage.tsx | 0 .../decision-models/fixtures.ts | 0 .../ExternalAgentInvitePreview.tsx | 0 .../external-agent-invite/fixtures.ts | 0 .../fixture-api.test.tsx | 0 .../github-bot-management/fixture-api.tsx | 0 .../github-bot-management/fixtures.ts | 0 .../html-artifacts/fixtures.ts | 0 .../html-artifacts/report.html | 0 .../primary-agent/PrimaryAgentStory.tsx | 0 .../private-tasks/PrivacyStory.tsx | 0 .../public-mcp-presenter.tsx | 0 .../repository-skill-packages/README.md | 2 +- .../thread-human-identity/fixtures.ts | 0 .../workspace-branch-recovery/fixtures.ts | 0 258 files changed, 2356 insertions(+), 1509 deletions(-) rename ui/storybook/stories/{ => access}/private-tasks/00-review-guide.stories.tsx (98%) rename ui/storybook/stories/{ => access}/private-tasks/01-creation.stories.tsx (98%) rename ui/storybook/stories/{ => access}/private-tasks/02-sharing.stories.tsx (97%) rename ui/storybook/stories/{ => access}/private-tasks/03-task-actions.stories.tsx (95%) rename ui/storybook/stories/{ => access}/private-tasks/04-references-and-blockers.stories.tsx (97%) rename ui/storybook/stories/{ => access}/private-tasks/05-projects.stories.tsx (98%) rename ui/storybook/stories/{ => access}/private-tasks/06-full-product-pages.stories.tsx (97%) rename ui/storybook/stories/{ => access}/private-tasks/07-user-stories.stories.tsx (97%) rename ui/storybook/stories/{ => activity}/activity-feed.stories.tsx (97%) rename ui/storybook/stories/{ => activity}/app-activity-lifecycle.stories.tsx (96%) rename ui/storybook/stories/{ => activity}/data-viz-misc.stories.tsx (99%) rename ui/storybook/stories/{ => activity}/work-timeline.stories.tsx (95%) rename ui/storybook/stories/{ => agent-chat}/agent-chat-sidebar.stories.tsx (89%) rename ui/storybook/stories/{ => agent-chat}/agent-chat.stories.tsx (93%) rename ui/storybook/stories/{ => agent-chat}/agent-conversation-sidebar.stories.tsx (92%) rename ui/storybook/stories/{ => agent-chat}/chat-entry.stories.tsx (92%) rename ui/storybook/stories/{ => agents}/agent-detail.stories.tsx (97%) rename ui/storybook/stories/{ => agents}/agent-files.stories.tsx (97%) rename ui/storybook/stories/{ => agents}/agent-management.stories.tsx (99%) rename ui/storybook/stories/{ => agents}/agent-persona-pages.stories.tsx (96%) rename ui/storybook/stories/{ => agents}/agent-personas.stories.tsx (95%) rename ui/storybook/stories/{ => agents}/agent-settings-redesign.stories.tsx (91%) rename ui/storybook/stories/{ => agents}/built-in-agents.stories.tsx (98%) rename ui/storybook/stories/{ => agents}/external-agent-invite/components.stories.tsx (88%) rename ui/storybook/stories/{ => agents}/external-agent-invite/journeys.stories.tsx (96%) rename ui/storybook/stories/{ => agents}/new-agent-onboarding.stories.tsx (97%) rename ui/storybook/stories/{ => agents}/primary-agent/00-review-guide.stories.tsx (95%) rename ui/storybook/stories/{ => agents}/primary-agent/01-components.stories.tsx (73%) rename ui/storybook/stories/{ => agents}/primary-agent/02-sidebar.stories.tsx (76%) rename ui/storybook/stories/{ => agents}/primary-agent/03-agents.stories.tsx (78%) rename ui/storybook/stories/{ => agents}/primary-agent/04-new-task.stories.tsx (74%) rename ui/storybook/stories/{ => agents}/primary-agent/05-chat.stories.tsx (68%) rename ui/storybook/stories/{ => agents}/primary-agent/06-journeys.stories.tsx (95%) rename ui/storybook/stories/{ => agents}/primary-agent/07-confirmation.stories.tsx (82%) rename ui/storybook/stories/{ => agents}/summary-slot-card.stories.tsx (98%) rename ui/storybook/stories/{ => app-permissions}/action-card.stories.tsx (95%) rename ui/storybook/stories/{ => app-permissions}/action-permissions-test.stories.tsx (98%) create mode 100644 ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx rename ui/storybook/stories/{ => app-permissions}/permitted-vs-installed.stories.tsx (98%) delete mode 100644 ui/storybook/stories/apps-managed-accounts.stories.tsx rename ui/storybook/stories/{ => budgets-costs}/budget-finance.stories.tsx (99%) rename ui/storybook/stories/{ => budgets-costs}/costs/subscriptions.stories.tsx (98%) rename ui/storybook/stories/{ => chat-channels}/agentmail-onboarding.stories.tsx (98%) rename ui/storybook/stories/{ => chat-channels}/agentmail-settings.stories.tsx (97%) rename ui/storybook/stories/{ => chat-channels}/agentmail.stories.tsx (99%) rename ui/storybook/stories/{ => chat-channels}/chat-connection-actions.stories.tsx (93%) rename ui/storybook/stories/{ => chat-channels}/chat-management/chat-management.stories.tsx (98%) rename ui/storybook/stories/{ => chat-channels}/github-bot-management/management.stories.tsx (97%) rename ui/storybook/stories/{ => chat-channels}/github-chat.stories.tsx (98%) rename ui/storybook/stories/{ => chat-channels}/github-connections.stories.tsx (96%) rename ui/storybook/stories/{ => chat-channels}/imessage-photon.stories.tsx (98%) rename ui/storybook/stories/{ => chat-channels}/slack-automatic-setup.stories.tsx (95%) rename ui/storybook/stories/{ => chat-channels}/slack-avatar-settings.stories.tsx (67%) rename ui/storybook/stories/{ => chat-channels}/slack-communication-settings.stories.tsx (86%) rename ui/storybook/stories/{ => chat-channels}/slack-managed-setup.stories.tsx (96%) rename ui/storybook/stories/{ => chat-channels}/slack-tools.stories.tsx (91%) rename ui/storybook/stories/{ => companies}/decision-models/01-settings.stories.tsx (83%) rename ui/storybook/stories/{ => companies}/decision-models/02-history.stories.tsx (81%) rename ui/storybook/stories/{ => companies}/decision-models/03-journey.stories.tsx (96%) rename ui/storybook/stories/{ => companies}/fast-responses/01-settings.stories.tsx (91%) rename ui/storybook/stories/{ => companies}/fast-responses/02-history.stories.tsx (91%) rename ui/storybook/stories/{ => connection-setup}/AppLogoRegistry.stories.tsx (86%) rename ui/storybook/stories/{ => connection-setup}/ArcadeConnection.stories.tsx (94%) rename ui/storybook/stories/{ => connection-setup}/ComposioConnection.stories.tsx (94%) rename ui/storybook/stories/{ => connection-setup}/ConnectionProviderChoice.stories.tsx (96%) rename ui/storybook/stories/{ => connection-setup}/ExecutorConnection.stories.tsx (93%) rename ui/storybook/stories/{ => connection-setup}/ZapierConnection.stories.tsx (92%) rename ui/storybook/stories/{ => connection-setup}/agent-setup-prompt.stories.tsx (97%) rename ui/storybook/stories/{ => connection-setup}/apps-catalog-source-selection.stories.tsx (95%) rename ui/storybook/stories/{ => connection-setup}/apps-connect-discoverability.stories.tsx (97%) rename ui/storybook/stories/{ => connection-setup}/apps-connect-name.stories.tsx (95%) rename ui/storybook/stories/{ => connection-setup}/browser-use-settings.stories.tsx (92%) rename ui/storybook/stories/{ => connection-setup}/connection-instructions.stories.tsx (97%) rename ui/storybook/stories/{ => connection-setup}/enterpret-connect-flow.stories.tsx (98%) rename ui/storybook/stories/{ => connection-setup}/fireflies-pr.stories.tsx (98%) rename ui/storybook/stories/{ => connection-setup}/in-feed-connections.stories.tsx (99%) rename ui/storybook/stories/{ => connection-setup}/managed-cloud-oauth-handoff.stories.tsx (87%) rename ui/storybook/stories/{ => connection-setup}/memory-connectors.stories.tsx (98%) rename ui/storybook/stories/{ => connection-setup}/notion-connect-flow.stories.tsx (98%) rename ui/storybook/stories/{ => connection-setup}/personal-connection-identity.stories.tsx (98%) rename ui/storybook/stories/{ => developer-labs}/ux-labs.stories.tsx (94%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/commit.stories.tsx (86%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/data.stories.tsx (85%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/document.stories.tsx (85%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/file.stories.tsx (87%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/image.stories.tsx (80%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/link-preview.stories.tsx (82%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/pull-request.stories.tsx (90%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-cards/video.stories.tsx (72%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-upload/01-components.stories.tsx (86%) rename ui/storybook/stories/{ => documents-artifacts}/artifact-upload/02-task-journey.stories.tsx (92%) rename ui/storybook/stories/{ => documents-artifacts}/artifacts.stories.tsx (99%) rename ui/storybook/stories/{ => documents-artifacts}/csv-preview.stories.tsx (95%) rename ui/storybook/stories/{ => documents-artifacts}/document-annotations.stories.tsx (99%) rename ui/storybook/stories/{ => documents-artifacts}/document-comments.stories.tsx (97%) rename ui/storybook/stories/{ => documents-artifacts}/file-viewer.stories.tsx (98%) rename ui/storybook/stories/{ => documents-artifacts}/html-artifacts/01-preview.stories.tsx (87%) rename ui/storybook/stories/{ => documents-artifacts}/html-artifacts/02-workspace.stories.tsx (84%) rename ui/storybook/stories/{ => documents-artifacts}/html-artifacts/03-task-journey.stories.tsx (93%) rename ui/storybook/stories/{ => documents-artifacts}/rich-work-product-cards.stories.tsx (96%) rename ui/storybook/stories/{ => documents-artifacts}/task-artifact-gallery.stories.tsx (92%) rename ui/storybook/stories/{ => documents-artifacts}/task-text-files.stories.tsx (91%) rename ui/storybook/stories/{ => foundations}/forms-editors.stories.tsx (99%) rename ui/storybook/stories/{ => foundations}/foundations.stories.tsx (99%) rename ui/storybook/stories/{ => foundations}/primitives-coverage.stories.tsx (99%) rename ui/storybook/stories/{ => foundations}/status-language.stories.tsx (99%) rename ui/storybook/stories/{ => gateways-profiles}/access-profiles.stories.tsx (99%) rename ui/storybook/stories/{ => gateways-profiles}/gateways-tab.stories.tsx (98%) rename ui/storybook/stories/{ => gateways-profiles}/public-mcp-connections.stories.tsx (90%) rename ui/storybook/stories/{ => gateways-profiles}/public-mcp-consent.stories.tsx (98%) rename ui/storybook/stories/{ => gateways-profiles}/public-mcp-device.stories.tsx (88%) rename ui/storybook/stories/{ => gateways-profiles}/public-mcp-journey.stories.tsx (94%) rename ui/storybook/stories/{ => gateways-profiles}/public-mcp-setting.stories.tsx (90%) rename ui/storybook/stories/{ => inbox-search}/blocked-inbox.stories.tsx (98%) rename ui/storybook/stories/{ => inbox-search}/decision-card.stories.tsx (98%) rename ui/storybook/stories/{ => inbox-search}/decisions-desk.stories.tsx (99%) rename ui/storybook/stories/{ => inbox-search}/search.stories.tsx (99%) rename ui/storybook/stories/{ => inbox-search}/what-needs-me.stories.tsx (99%) rename ui/storybook/stories/{ => instance-operations}/dev-ops-surfaces.stories.tsx (95%) rename ui/storybook/stories/{ => navigation-preferences}/announcement-card.stories.tsx (93%) rename ui/storybook/stories/{ => navigation-preferences}/mobile-task-tabs.stories.tsx (97%) rename ui/storybook/stories/{ => navigation-preferences}/navigation-layout.stories.tsx (98%) rename ui/storybook/stories/{ => onboarding}/onboarding-agent-arc.stories.tsx (99%) rename ui/storybook/stories/{ => onboarding}/onboarding-character.stories.tsx (90%) rename ui/storybook/stories/{ => onboarding}/onboarding-connect-model.stories.tsx (95%) rename ui/storybook/stories/{ => overview}/overview.stories.tsx (97%) rename ui/storybook/stories/{ => projects}/new-project-repos.stories.tsx (92%) rename ui/storybook/stories/{ => projects}/project-execution-workspace-strategy.stories.tsx (92%) rename ui/storybook/stories/{ => projects}/project-repos-configuration.stories.tsx (87%) rename ui/storybook/stories/{ => projects}/projects-goals-workspaces.stories.tsx (99%) rename ui/storybook/stories/{ => questions-and-approvals}/agent-chat-unanswered-questions.stories.tsx (93%) rename ui/storybook/stories/{ => questions-and-approvals}/composer-question-flow.stories.tsx (98%) rename ui/storybook/stories/{ => questions-and-approvals}/connection-reviews.stories.tsx (98%) rename ui/storybook/stories/{ => questions-and-approvals}/issue-plan-decompositions.stories.tsx (94%) rename ui/storybook/stories/{ => questions-and-approvals}/issue-thread-interactions.stories.tsx (99%) rename ui/storybook/stories/{ => questions-and-approvals}/rich-acp-interactions.stories.tsx (98%) rename ui/storybook/stories/{ => questions-and-approvals}/task-chat-interaction-above-composer.stories.tsx (97%) rename ui/storybook/stories/{ => questions-and-approvals}/task-chat-unanswered-questions.stories.tsx (89%) rename ui/storybook/stories/{ => recovery}/cloud-access-recovery.stories.tsx (85%) rename ui/storybook/stories/{ => recovery}/execution-blocker-notice.stories.tsx (91%) rename ui/storybook/stories/{ => recovery}/execution-recovery.stories.tsx (98%) rename ui/storybook/stories/{ => recovery}/issue-blocked-notice.stories.tsx (98%) rename ui/storybook/stories/{ => recovery}/model-capacity-retry.stories.tsx (89%) rename ui/storybook/stories/{ => recovery}/recovery-notice-preview.stories.tsx (91%) rename ui/storybook/stories/{ => recovery}/scheduled-retry.stories.tsx (97%) rename ui/storybook/stories/{ => recovery}/source-issue-recovery.stories.tsx (99%) rename ui/storybook/stories/{ => recovery}/source-resolved-fold.stories.tsx (98%) rename ui/storybook/stories/{ => recovery}/workspace-branch-recovery/01-component.stories.tsx (90%) rename ui/storybook/stories/{ => recovery}/workspace-branch-recovery/02-task-journey.stories.tsx (92%) rename ui/storybook/stories/{ => routines}/routine-detail-c.stories.tsx (98%) rename ui/storybook/stories/{ => routines}/routine-secrets.stories.tsx (97%) rename ui/storybook/stories/{ => routines}/routine-webhooks-ux.stories.tsx (98%) rename ui/storybook/stories/{ => routines}/routine-webhooks.stories.tsx (95%) rename ui/storybook/stories/{ => routines}/routines-list-groups.stories.tsx (96%) rename ui/storybook/stories/{ => runs-adapters}/agent-connection-reuse.stories.tsx (95%) rename ui/storybook/stories/{ => runs-adapters}/ai-connection-usage.stories.tsx (93%) rename ui/storybook/stories/{ => runs-adapters}/ai-connections.stories.tsx (97%) rename ui/storybook/stories/{ => runs-adapters}/connection-pool-connector.stories.tsx (85%) rename ui/storybook/stories/{ => runs-adapters}/connection-pools.stories.tsx (92%) rename ui/storybook/stories/{ => runs-adapters}/dot-runner-connection.stories.tsx (94%) rename ui/storybook/stories/{ => runs-adapters}/local-ai-subscription.stories.tsx (92%) rename ui/storybook/stories/{ => runs-adapters}/provider-routing-00-overview.stories.tsx (52%) rename ui/storybook/stories/{ => runs-adapters}/provider-routing-01-onboarding.stories.tsx (89%) rename ui/storybook/stories/{ => runs-adapters}/provider-routing-02-connect.stories.tsx (88%) rename ui/storybook/stories/{ => runs-adapters}/provider-routing-03-agent.stories.tsx (96%) rename ui/storybook/stories/{ => runs-adapters}/provider-routing-04-manage.stories.tsx (89%) rename ui/storybook/stories/{ => runs-adapters}/provider-routing-05-recovery.stories.tsx (87%) rename ui/storybook/stories/{ => runs-adapters}/provider-routing-06-production.stories.tsx (97%) rename ui/storybook/stories/{ => runs-adapters}/session-goals.stories.tsx (97%) rename ui/storybook/stories/{ => secrets}/credential-access/01-notice.stories.tsx (91%) rename ui/storybook/stories/{ => secrets}/credential-access/02-task-page.stories.tsx (82%) rename ui/storybook/stories/{ => secrets}/environment-variables-editor.stories.tsx (98%) rename ui/storybook/stories/{ => secrets}/secrets.stories.tsx (98%) rename ui/storybook/stories/{ => secrets}/user-secrets.stories.tsx (98%) rename ui/storybook/stories/{ => skills}/agent-skill-row.stories.tsx (95%) rename ui/storybook/stories/{ => skills}/agent-skills-edge.stories.tsx (98%) rename ui/storybook/stories/{ => skills}/agents-using-skill.stories.tsx (97%) rename ui/storybook/stories/{ => skills}/fork-skill-flow.stories.tsx (98%) rename ui/storybook/stories/{ => skills}/frontmatter-panel.stories.tsx (97%) rename ui/storybook/stories/{ => skills}/github-skills-journey.stories.tsx (97%) rename ui/storybook/stories/{ => skills}/github-synced-skills.stories.tsx (97%) rename ui/storybook/stories/{ => skills}/repository-skill-packages/repository-skill-packages.stories.tsx (93%) rename ui/storybook/stories/{ => skills}/skill-import-progress.stories.tsx (90%) rename ui/storybook/stories/{ => skills}/skill-policy-surfaces.stories.tsx (94%) rename ui/storybook/stories/{ => skills}/skills-store-detail.stories.tsx (98%) rename ui/storybook/stories/{ => skills}/skills-store-discovery.stories.tsx (98%) rename ui/storybook/stories/{ => steering}/composer-queued-messages.stories.tsx (96%) rename ui/storybook/stories/{ => steering}/interrupt-handoff.stories.tsx (98%) rename ui/storybook/stories/{ => steering}/paused-composer.stories.tsx (85%) rename ui/storybook/stories/{ => steering}/task-execution-controls.stories.tsx (99%) rename ui/storybook/stories/{ => task-coordination}/issue-review-panel.stories.tsx (95%) rename ui/storybook/stories/{ => task-coordination}/monitor-surfaces.stories.tsx (98%) rename ui/storybook/stories/{ => task-coordination}/originating-tasks.stories.tsx (91%) rename ui/storybook/stories/{ => task-coordination}/sub-issues-workflow.stories.tsx (97%) rename ui/storybook/stories/{ => task-coordination}/task-watchdog-surfaces.stories.tsx (95%) rename ui/storybook/stories/{ => tasks}/assigned-backlog-safeguards.stories.tsx (97%) rename ui/storybook/stories/{ => tasks}/chat-comments.stories.tsx (98%) rename ui/storybook/stories/{ => tasks}/completed-activity.stories.tsx (88%) rename ui/storybook/stories/{ => tasks}/composer-add-menu.stories.tsx (98%) rename ui/storybook/stories/{ => tasks}/composer-mobile-assignee.stories.tsx (84%) rename ui/storybook/stories/{ => tasks}/composer-model-picker.stories.tsx (98%) rename ui/storybook/stories/{ => tasks}/control-plane-surfaces.stories.tsx (98%) rename ui/storybook/stories/{ => tasks}/dialogs-modals.stories.tsx (99%) rename ui/storybook/stories/{ => tasks}/external-objects.stories.tsx (99%) rename ui/storybook/stories/{ => tasks}/issue-management.stories.tsx (99%) rename ui/storybook/stories/{ => tasks}/mobile-entity-pickers.stories.tsx (94%) rename ui/storybook/stories/{ => tasks}/new-task-composer.stories.tsx (99%) rename ui/storybook/stories/{ => tasks}/runner-activity.stories.tsx (93%) rename ui/storybook/stories/{ => tasks}/successful-run-handoff.stories.tsx (97%) rename ui/storybook/stories/{ => tasks}/task-chat-chain-of-thought.stories.tsx (97%) rename ui/storybook/stories/{ => tasks}/task-chat-mobile-follow.stories.tsx (95%) rename ui/storybook/stories/{ => tasks}/task-chat-system-notice.stories.tsx (94%) rename ui/storybook/stories/{ => tasks}/task-context-notices.stories.tsx (96%) rename ui/storybook/stories/{ => tasks}/thread-human-identity/00-evidence.stories.tsx (85%) rename ui/storybook/stories/{ => tasks}/thread-human-identity/01-components.stories.tsx (88%) rename ui/storybook/stories/{ => tasks}/thread-human-identity/02-task-journey.stories.tsx (93%) rename ui/storybook/stories/{ => teams}/team-catalog.stories.tsx (99%) rename ui/storybook/stories/{ => workspaces}/browser-use-activity.stories.tsx (94%) rename ui/storybook/stories/{ => workspaces}/browser-use-footer.stories.tsx (96%) rename ui/storybook/stories/{ => workspaces}/browser-use.stories.tsx (97%) rename ui/storybook/stories/{ => workspaces}/searchable-select.stories.tsx (98%) rename ui/storybook/stories/{ => workspaces}/workspace-file-browser.stories.tsx (98%) rename ui/storybook/stories/{ => workspaces}/workspace-runtime-provisioning.stories.tsx (95%) rename ui/storybook/stories/{ => workspaces}/workspace-service-control-bar.stories.tsx (97%) rename ui/storybook/{stories => support}/artifact-cards/README.md (96%) rename ui/storybook/{stories => support}/artifact-cards/storyConfig.tsx (100%) rename ui/storybook/{stories => support}/artifact-upload/UploadPreview.tsx (100%) rename ui/storybook/{stories => support}/artifact-upload/fixtures.ts (100%) rename ui/storybook/{stories => support}/credential-access/CredentialTaskPage.tsx (100%) rename ui/storybook/{stories => support}/decision-models/fixtures.ts (100%) rename ui/storybook/{stories => support}/external-agent-invite/ExternalAgentInvitePreview.tsx (100%) rename ui/storybook/{stories => support}/external-agent-invite/fixtures.ts (100%) rename ui/storybook/{stories => support}/github-bot-management/fixture-api.test.tsx (100%) rename ui/storybook/{stories => support}/github-bot-management/fixture-api.tsx (100%) rename ui/storybook/{stories => support}/github-bot-management/fixtures.ts (100%) rename ui/storybook/{stories => support}/html-artifacts/fixtures.ts (100%) rename ui/storybook/{stories => support}/html-artifacts/report.html (100%) rename ui/storybook/{stories => support}/primary-agent/PrimaryAgentStory.tsx (100%) rename ui/storybook/{stories => support}/private-tasks/PrivacyStory.tsx (100%) rename ui/storybook/{stories => support}/public-mcp-presenter.tsx (100%) rename ui/storybook/{stories => support}/repository-skill-packages/README.md (68%) rename ui/storybook/{stories => support}/thread-human-identity/fixtures.ts (100%) rename ui/storybook/{stories => support}/workspace-branch-recovery/fixtures.ts (100%) diff --git a/.agents/skills/create-issue-interaction-ui/SKILL.md b/.agents/skills/create-issue-interaction-ui/SKILL.md index db19f14768..984a81ad61 100644 --- a/.agents/skills/create-issue-interaction-ui/SKILL.md +++ b/.agents/skills/create-issue-interaction-ui/SKILL.md @@ -163,7 +163,7 @@ Touch: resolved, stale, disabled/submitting, and validation-error states. - `ui/src/fixtures/issueThreadInteractionFixtures.ts` — seed at least one pending and one resolved fixture for the new kind. -- `ui/storybook/stories/issue-thread-interactions.stories.tsx` — Storybook entries +- `ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx` — Storybook entries for the key states. - `ui/src/pages/IssueDetail.tsx` — extend the per-kind branches the card is rendered from (callback wiring, response submission). diff --git a/.agents/skills/maintain-storybook/SKILL.md b/.agents/skills/maintain-storybook/SKILL.md index ce4837167e..5735eb5e56 100644 --- a/.agents/skills/maintain-storybook/SKILL.md +++ b/.agents/skills/maintain-storybook/SKILL.md @@ -52,6 +52,12 @@ feature coverage. Preserve story exports and IDs. Before moves/title changes, capture the existing built `index.json`; use explicit meta IDs when needed and compare IDs afterward. +Place stories under `ui/storybook/stories//`. Use the feature +map's section and feature names as their sidebar prefix; keep useful scenario +groupings beneath that prefix. Put shared fixture modules in `ui/storybook/support/`. +Keep the catalog's `stableId` equal to the explicit CSF meta ID even when the title +changes. Unmapped component examples belong under Foundations; the catalog guide +belongs under Overview. The checker verifies these conventions. Keep review links and snapshot names working. Prefer classification/index fixes before bulk directory moves. Record every directly rendered production subject in the catalog's review sources, including relative imports and primitives when they diff --git a/doc/DEVELOPING.md b/doc/DEVELOPING.md index e803ac65a2..ae303f2d9b 100644 --- a/doc/DEVELOPING.md +++ b/doc/DEVELOPING.md @@ -124,6 +124,11 @@ API responses and MCP transports keep their existing compression behavior. The board UI Storybook keeps stories and Storybook config under `ui/storybook/` so component review files stay out of the app source routes. +Stories are grouped in `ui/storybook/stories//` and the sidebar follows +the feature map's sections and feature names. Shared fixtures live in +`ui/storybook/support/`. Keep each suite's explicit meta `id` and catalog `stableId` +when changing titles or locations so existing review links remain valid. + Start from the downstream [Storybook feature index](../maps/storybook-map/INDEX.md) to find existing stories by capability. Its [contract](../maps/storybook-map/README.md) separates production subjects, prototype implementations, simulated data, and diff --git a/doc/connection-intents.md b/doc/connection-intents.md index ef848e2abf..c41e5d129b 100644 --- a/doc/connection-intents.md +++ b/doc/connection-intents.md @@ -77,4 +77,4 @@ Task setup defaults to personal identity when supported and the requesting agent Service and native-authority tests cover discovery, current identity, company boundaries, cross-run deduplication, additive grants and installs, permission denial, resolution atomicity, restart delivery and stale assignment. `tests/e2e/in-feed-native/playwright.config.ts` starts source `test-drive` instances with fresh data directories and a deterministic fake Codex provider plus MCP server. It exercises the real native runner and gateway; it is fixture proof, not live Notion or GitHub proof. Run with `pnpm exec playwright test -c tests/e2e/in-feed-native/playwright.config.ts`. -Offline Storybook examples live in `ui/storybook/stories/in-feed-connections.stories.tsx`. Build with `pnpm --filter @paperclipai/ui build-storybook`, then run `pnpm exec playwright test -c tests/storybook-visual/in-feed-connections.config.ts`. The suite checks every independently addressable story in both themes, catches play-function failures, and saves screenshots. Live provider acceptance additionally requires a model credential and a test workspace/account; do not describe fixture results or local-trusted testing as authenticated/cloud acceptance. +Offline Storybook examples live in `ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx`. Build with `pnpm --filter @paperclipai/ui build-storybook`, then run `pnpm exec playwright test -c tests/storybook-visual/in-feed-connections.config.ts`. The suite checks every independently addressable story in both themes, catches play-function failures, and saves screenshots. Live provider acceptance additionally requires a model credential and a test workspace/account; do not describe fixture results or local-trusted testing as authenticated/cloud acceptance. diff --git a/maps/storybook-map/INDEX.md b/maps/storybook-map/INDEX.md index e4ad7063ab..f66a50ca75 100644 --- a/maps/storybook-map/INDEX.md +++ b/maps/storybook-map/INDEX.md @@ -14,14 +14,14 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Private tasks/00 Review guide](../../ui/storybook/stories/private-tasks/00-review-guide.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | -| [Private tasks/01 Creation](../../ui/storybook/stories/private-tasks/01-creation.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 22 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Private tasks/02 Sharing](../../ui/storybook/stories/private-tasks/02-sharing.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 26 / 10 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Private tasks/03 Task actions](../../ui/storybook/stories/private-tasks/03-task-actions.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 11 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Private tasks/04 References and blockers](../../ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 12 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Private tasks/05 Projects](../../ui/storybook/stories/private-tasks/05-projects.stories.tsx) | `access/resources`, `tasks/properties`, `projects/lifecycle` | unreviewed / production / fixtures | 19 / 12 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Private tasks/06 Full product pages](../../ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx) | `access/resources`, `tasks/properties`, `projects/lifecycle` | unreviewed / production / fixtures | 21 / 12 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Private tasks/07 User stories](../../ui/storybook/stories/private-tasks/07-user-stories.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 13 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Login, invitations, and access/Private tasks/00 Review guide](../../ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | +| [Getting started and access/Login, invitations, and access/Private tasks/01 Creation](../../ui/storybook/stories/access/private-tasks/01-creation.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 22 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Login, invitations, and access/Private tasks/02 Sharing](../../ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 26 / 10 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Login, invitations, and access/Private tasks/03 Task actions](../../ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 11 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers](../../ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 12 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) | `access/resources`, `tasks/properties`, `projects/lifecycle` | unreviewed / production / fixtures | 19 / 12 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) | `access/resources`, `tasks/properties`, `projects/lifecycle` | unreviewed / production / fixtures | 21 / 12 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Login, invitations, and access/Private tasks/07 User stories](../../ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx) | `access/resources`, `tasks/properties` | unreviewed / production / fixtures | 13 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## activity @@ -29,10 +29,10 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Tools/Activity (audit feed)](../../ui/storybook/stories/activity-feed.stories.tsx) | `activity/activity`, `gateways-profiles/activity` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/app-activity-lifecycle.stories.tsx) | `activity/activity`, `gateways-profiles/activity` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Data Visualization & Misc](../../ui/storybook/stories/data-viz-misc.stories.tsx) | `activity/overview` | unreviewed / production / fixtures | 21 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Pages/Work Timeline](../../ui/storybook/stories/work-timeline.stories.tsx) | `activity/timeline` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)](../../ui/storybook/stories/activity/activity-feed.stories.tsx) | `activity/activity`, `gateways-profiles/activity` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx) | `activity/activity`, `gateways-profiles/activity` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Dashboards and audit trails/Product/Data Visualization & Misc](../../ui/storybook/stories/activity/data-viz-misc.stories.tsx) | `activity/overview` | unreviewed / production / fixtures | 21 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Dashboards and audit trails/Pages/Work Timeline](../../ui/storybook/stories/activity/work-timeline.stories.tsx) | `activity/timeline` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## agent-chat @@ -40,10 +40,10 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat-sidebar.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | current / production / fixtures | 9 / 1 | Wrapper mounts production Layout and AgentChat; conversation selection and sends use in-memory routes. Directory name is not prototype evidence. | -| [Design explorations/Agent chat](../../ui/storybook/stories/agent-chat.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | mixed / mixed / fixtures | 17 / 0 | Production conversation/task routes with a local ChatEntryLanding. Default-agent behavior and fallback API responses remain outside current-product parity. | -| [Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-conversation-sidebar.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | current / production / fixtures | 10 / 1 | Support module re-exports production AgentConversationSidebar; search/selection use fixture callbacks. | -| [Design explorations/Chat entry](../../ui/storybook/stories/chat-entry.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | historical / mixed / fixtures | 9 / 3 | Retained first-created-agent sidebar/landing design predates personal primary-agent selection. Shared production conversation components remain useful. | +| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | current / production / fixtures | 9 / 1 | Wrapper mounts production Layout and AgentChat; conversation selection and sends use in-memory routes. Directory name is not prototype evidence. | +| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat](../../ui/storybook/stories/agent-chat/agent-chat.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | mixed / mixed / fixtures | 17 / 0 | Production conversation/task routes with a local ChatEntryLanding. Default-agent behavior and fallback API responses remain outside current-product parity. | +| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | current / production / fixtures | 10 / 1 | Support module re-exports production AgentConversationSidebar; search/selection use fixture callbacks. | +| [Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry](../../ui/storybook/stories/agent-chat/chat-entry.stories.tsx) | `agent-chat/discovery`, `agent-chat/history` | historical / mixed / fixtures | 9 / 3 | Retained first-created-agent sidebar/landing design predates personal primary-agent selection. Shared production conversation components remain useful. | ## agents @@ -51,25 +51,25 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Pages/Agent Detail](../../ui/storybook/stories/agent-detail.stories.tsx) | `agents/lifecycle`, `agents/instructions` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents/Persistent files](../../ui/storybook/stories/agent-files.stories.tsx) | `agents/instructions` | unreviewed / production / fixtures | 9 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Agent Management](../../ui/storybook/stories/agent-management.stories.tsx) | `agents/lifecycle`, `agents/instructions` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents/Personas/Full pages](../../ui/storybook/stories/agent-persona-pages.stories.tsx) | `agents/organization`, `navigation-preferences/profile` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents/Personas](../../ui/storybook/stories/agent-personas.stories.tsx) | `agents/organization`, `navigation-preferences/profile` | unreviewed / production / fixtures | 19 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Agents/Configuration refresh](../../ui/storybook/stories/agent-settings-redesign.stories.tsx) | `agents/lifecycle`, `agents/instructions` | mixed / mixed / fixtures | 15 / 0 | Production configuration panels in a locally composed settings shell; full AgentDetail route parity remains unreviewed. | -| [Product/Built-in Agents](../../ui/storybook/stories/built-in-agents.stories.tsx) | `agents/built-in` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Onboarding/External agent invitation/Components](../../ui/storybook/stories/external-agent-invite/components.stories.tsx) | `agents/hire`, `access/invitations` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/external-agent-invite/journeys.stories.tsx) | `agents/hire`, `access/invitations` | unreviewed / production / fixtures | 20 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Onboarding/New agent](../../ui/storybook/stories/new-agent-onboarding.stories.tsx) | `agents/hire` | historical / prototype / fixtures | 37 / 1 | Retained local wizard predates production ui/src/components/new-agent flow; shared fields do not make the wizard current. | -| [Primary Agent/00 Review guide](../../ui/storybook/stories/primary-agent/00-review-guide.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | -| [Primary Agent/01 Components](../../ui/storybook/stories/primary-agent/01-components.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Primary Agent/02 Sidebar](../../ui/storybook/stories/primary-agent/02-sidebar.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 12 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Primary Agent/03 Agents](../../ui/storybook/stories/primary-agent/03-agents.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Primary Agent/04 New task](../../ui/storybook/stories/primary-agent/04-new-task.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Primary Agent/05 Chat](../../ui/storybook/stories/primary-agent/05-chat.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Primary Agent/06 Journeys](../../ui/storybook/stories/primary-agent/06-journeys.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 11 / 11 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Primary Agent/07 Confirmation](../../ui/storybook/stories/primary-agent/07-confirmation.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 4 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Summaries/SummarySlotCard](../../ui/storybook/stories/summary-slot-card.stories.tsx) | `agents/built-in` | unreviewed / production / fixtures | 15 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail](../../ui/storybook/stories/agents/agent-detail.stories.tsx) | `agents/lifecycle`, `agents/instructions` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Persistent files](../../ui/storybook/stories/agents/agent-files.stories.tsx) | `agents/instructions` | unreviewed / production / fixtures | 9 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management](../../ui/storybook/stories/agents/agent-management.stories.tsx) | `agents/lifecycle`, `agents/instructions` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages](../../ui/storybook/stories/agents/agent-persona-pages.stories.tsx) | `agents/organization`, `navigation-preferences/profile` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas](../../ui/storybook/stories/agents/agent-personas.stories.tsx) | `agents/organization`, `navigation-preferences/profile` | unreviewed / production / fixtures | 19 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh](../../ui/storybook/stories/agents/agent-settings-redesign.stories.tsx) | `agents/lifecycle`, `agents/instructions` | mixed / mixed / fixtures | 15 / 0 | Production configuration panels in a locally composed settings shell; full AgentDetail route parity remains unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Built-in Agents](../../ui/storybook/stories/agents/built-in-agents.stories.tsx) | `agents/built-in` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components](../../ui/storybook/stories/agents/external-agent-invite/components.stories.tsx) | `agents/hire`, `access/invitations` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx) | `agents/hire`, `access/invitations` | unreviewed / production / fixtures | 20 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/New agent](../../ui/storybook/stories/agents/new-agent-onboarding.stories.tsx) | `agents/hire` | historical / prototype / fixtures | 37 / 1 | Retained local wizard predates production ui/src/components/new-agent flow; shared fields do not make the wizard current. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 12 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 11 / 11 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) | `agents/organization`, `tasks/create`, `agent-chat/discovery` | unreviewed / production / fixtures | 4 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Hiring, configuration, and organization/Summaries/SummarySlotCard](../../ui/storybook/stories/agents/summary-slot-card.stories.tsx) | `agents/built-in` | unreviewed / production / fixtures | 15 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## app-permissions @@ -77,10 +77,10 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Tools & Access/ActionCard](../../ui/storybook/stories/action-card.stories.tsx) | `app-permissions/test-action`, `app-permissions/action-policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Action permissions test](../../ui/storybook/stories/action-permissions-test.stories.tsx) | `app-permissions/test-action`, `app-permissions/action-policy` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Managed accounts](../../ui/storybook/stories/apps-managed-accounts.stories.tsx) | `app-permissions/account-maintenance` | current / production / fixture-server | 1 / 0 | Production Browse requires owned tests/aggregator-accounts/test-drive.ts on localhost:4310; providers are simulated. Not an offline story. | -| [Tools/Permitted vs Installed](../../ui/storybook/stories/permitted-vs-installed.stories.tsx) | `app-permissions/agent-access`, `app-permissions/action-policy` | unreviewed / production / fixtures | 12 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard](../../ui/storybook/stories/app-permissions/action-card.stories.tsx) | `app-permissions/test-action`, `app-permissions/action-policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test](../../ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx) | `app-permissions/test-action`, `app-permissions/action-policy` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/App access and action permissions/Apps/Managed accounts](../../ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx) | `app-permissions/account-maintenance` | current / production / fixture-server | 1 / 0 | Production Browse requires owned tests/aggregator-accounts/test-drive.ts on localhost:4310; providers are simulated. Not an offline story. | +| [Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed](../../ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx) | `app-permissions/agent-access`, `app-permissions/action-policy` | unreviewed / production / fixtures | 12 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## budgets-costs @@ -88,8 +88,8 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Product/Budget & Finance](../../ui/storybook/stories/budget-finance.stories.tsx) | `budgets-costs/cost-reporting`, `budgets-costs/budgets` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Costs/Subscriptions](../../ui/storybook/stories/costs/subscriptions.stories.tsx) | `budgets-costs/cost-reporting`, `budgets-costs/budgets` | unreviewed / production / fixtures | 7 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Costs and budgets/Product/Budget & Finance](../../ui/storybook/stories/budgets-costs/budget-finance.stories.tsx) | `budgets-costs/cost-reporting`, `budgets-costs/budgets` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Costs and budgets/Costs/Subscriptions](../../ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx) | `budgets-costs/cost-reporting`, `budgets-costs/budgets` | unreviewed / production / fixtures | 7 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## chat-channels @@ -97,20 +97,20 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Connections/AgentMail setup](../../ui/storybook/stories/agentmail-onboarding.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 19 / 16 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/AgentMail settings](../../ui/storybook/stories/agentmail-settings.stories.tsx) | `chat-channels/lifecycle` | unreviewed / production / fixtures | 8 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/AgentMail tasks](../../ui/storybook/stories/agentmail.stories.tsx) | `chat-channels/conversation` | unreviewed / prototype / fixtures | 9 / 2 | Local EmailTaskExperience combines production composer/bubbles with simulated email lifecycle; compare against IssueDetail before claiming page parity. | -| [Connections/Chat connection actions](../../ui/storybook/stories/chat-connection-actions.stories.tsx) | `chat-channels/providers` | unreviewed / production / fixtures | 1 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/Chat management](../../ui/storybook/stories/chat-management/chat-management.stories.tsx) | `chat-channels/lifecycle` | unreviewed / production / fixtures | 15 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connectors/GitHub bot management](../../ui/storybook/stories/github-bot-management/management.stories.tsx) | `chat-channels/providers`, `chat-channels/conversation` | unreviewed / production / fixtures | 33 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Historical/GitHub chat prototypes](../../ui/storybook/stories/github-chat.stories.tsx) | `chat-channels/providers`, `chat-channels/conversation` | historical / prototype / fixtures | 48 / 9 | Historical wizard retained for original setup/access/review design; current GitHub setup is ui/src/pages/apps/chat/GitHubChatSetup.tsx. | -| [Connections/GitHub and Code Review Bot](../../ui/storybook/stories/github-connections.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 7 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/iMessage Photon](../../ui/storybook/stories/imessage-photon.stories.tsx) | `chat-channels/conversation` | unreviewed / production / fixtures | 13 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/Slack/Automatic setup](../../ui/storybook/stories/slack-automatic-setup.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 18 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/Slack/Avatar in Settings](../../ui/storybook/stories/slack-avatar-settings.stories.tsx) | `chat-channels/identity` | current / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/Slack/Communication in Settings](../../ui/storybook/stories/slack-communication-settings.stories.tsx) | `chat-channels/identity` | current / production / fixtures | 4 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/Slack/Managed setup](../../ui/storybook/stories/slack-managed-setup.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 21 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/Slack/Task tools](../../ui/storybook/stories/slack-tools.stories.tsx) | `chat-channels/conversation` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/AgentMail setup](../../ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 19 / 16 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/AgentMail settings](../../ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx) | `chat-channels/lifecycle` | unreviewed / production / fixtures | 8 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/AgentMail tasks](../../ui/storybook/stories/chat-channels/agentmail.stories.tsx) | `chat-channels/conversation` | unreviewed / prototype / fixtures | 9 / 2 | Local EmailTaskExperience combines production composer/bubbles with simulated email lifecycle; compare against IssueDetail before claiming page parity. | +| [Apps, channels, and extensions/External chat and email/Connections/Chat connection actions](../../ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx) | `chat-channels/providers` | unreviewed / production / fixtures | 1 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/Chat management](../../ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx) | `chat-channels/lifecycle` | unreviewed / production / fixtures | 15 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management](../../ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx) | `chat-channels/providers`, `chat-channels/conversation` | unreviewed / production / fixtures | 33 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes](../../ui/storybook/stories/chat-channels/github-chat.stories.tsx) | `chat-channels/providers`, `chat-channels/conversation` | historical / prototype / fixtures | 48 / 9 | Historical wizard retained for original setup/access/review design; current GitHub setup is ui/src/pages/apps/chat/GitHubChatSetup.tsx. | +| [Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot](../../ui/storybook/stories/chat-channels/github-connections.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 7 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) | `chat-channels/conversation` | unreviewed / production / fixtures | 13 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup](../../ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 18 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/Slack/Avatar in Settings](../../ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx) | `chat-channels/identity` | current / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/Slack/Communication in Settings](../../ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx) | `chat-channels/identity` | current / production / fixtures | 4 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup](../../ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx) | `chat-channels/providers`, `connection-setup/channel-setup` | unreviewed / production / fixtures | 21 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/External chat and email/Connections/Slack/Task tools](../../ui/storybook/stories/chat-channels/slack-tools.stories.tsx) | `chat-channels/conversation` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## companies @@ -118,11 +118,11 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Decision models/01 Settings](../../ui/storybook/stories/decision-models/01-settings.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Decision models/02 History](../../ui/storybook/stories/decision-models/02-history.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Decision models/03 Journey](../../ui/storybook/stories/decision-models/03-journey.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Fast responses/01 Settings](../../ui/storybook/stories/fast-responses/01-settings.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 9 / 0 | Production settings view with simulated callbacks. Excluded exported fixture helpers and added the onConnectionChange spy required during rendering; full save/API state parity remains unreviewed. | -| [Fast responses/02 History](../../ui/storybook/stories/fast-responses/02-history.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | current / production / fixtures | 4 / 0 | Shared production DecisionHistoryTable receives fastResponse=true, matching FastResponseHistory presentation; API loading/error and feature-gate wrapper are outside this story. | +| [Getting started and access/Companies and portability/Decision models/01 Settings](../../ui/storybook/stories/companies/decision-models/01-settings.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Companies and portability/Decision models/02 History](../../ui/storybook/stories/companies/decision-models/02-history.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Companies and portability/Decision models/03 Journey](../../ui/storybook/stories/companies/decision-models/03-journey.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Companies and portability/Fast responses/01 Settings](../../ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | unreviewed / production / fixtures | 9 / 0 | Production settings view with simulated callbacks. Excluded exported fixture helpers and added the onConnectionChange spy required during rendering; full save/API state parity remains unreviewed. | +| [Getting started and access/Companies and portability/Fast responses/02 History](../../ui/storybook/stories/companies/fast-responses/02-history.stories.tsx) | `companies/identity`, `budgets-costs/cost-reporting` | current / production / fixtures | 4 / 0 | Shared production DecisionHistoryTable receives fastResponse=true, matching FastResponseHistory presentation; API loading/error and feature-gate wrapper are outside this story. | ## connection-setup @@ -130,25 +130,25 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Components/Agent setup prompt](../../ui/storybook/stories/agent-setup-prompt.stories.tsx) | `connection-setup/channel-setup`, `gateways-profiles/client-connect` | unreviewed / production / fixtures | 11 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Canonical icon registry](../../ui/storybook/stories/AppLogoRegistry.stories.tsx) | `connection-setup/catalog` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Catalog source selection](../../ui/storybook/stories/apps-catalog-source-selection.stories.tsx) | `connection-setup/catalog` | proposed / prototype / fixtures | 12 / 1 | Local catalog composition uses shipped cards and filters; retains design exploration purpose, not acceptance of the Apps route. | -| [Apps/Connect discoverability (PAP-11091)](../../ui/storybook/stories/apps-connect-discoverability.stories.tsx) | `connection-setup/catalog` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Connect name at create time (PAP-11283)](../../ui/storybook/stories/apps-connect-name.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Connections/Arcade](../../ui/storybook/stories/ArcadeConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 26 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/Browser Use Cloud/Settings](../../ui/storybook/stories/browser-use-settings.stories.tsx) | `connection-setup/credentials` | current / production / fixtures | 9 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Connections/Composio](../../ui/storybook/stories/ComposioConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 27 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-instructions.stories.tsx) | `connection-setup/credentials`, `agents/instructions` | unreviewed / production / fixtures | 20 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Connections/Provider choice](../../ui/storybook/stories/ConnectionProviderChoice.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 7 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Enterpret connector](../../ui/storybook/stories/enterpret-connect-flow.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 9 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Connections/Executor](../../ui/storybook/stories/ExecutorConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 26 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/fireflies-pr.stories.tsx) | `connection-setup/credentials`, `routines/triggers` | unreviewed / production / fixtures | 27 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connections/In-task connections](../../ui/storybook/stories/in-feed-connections.stories.tsx) | `connection-setup/task-request` | unreviewed / production / fixtures | 78 / 23 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Managed Cloud OAuth handoff](../../ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx) | `connection-setup/handoff` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Connections/Memory](../../ui/storybook/stories/memory-connectors.stories.tsx) | `connection-setup/credentials`, `agents/instructions` | unreviewed / production / fixtures | 21 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/notion-connect-flow.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Reviews/PAP-17835 Personal connection identity](../../ui/storybook/stories/personal-connection-identity.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 10 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Apps/Connections/Zapier](../../ui/storybook/stories/ZapierConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 21 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Components/Agent setup prompt](../../ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx) | `connection-setup/channel-setup`, `gateways-profiles/client-connect` | unreviewed / production / fixtures | 11 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Canonical icon registry](../../ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx) | `connection-setup/catalog` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Catalog source selection](../../ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx) | `connection-setup/catalog` | proposed / prototype / fixtures | 12 / 1 | Local catalog composition uses shipped cards and filters; retains design exploration purpose, not acceptance of the Apps route. | +| [Apps, channels, and extensions/Connection setup/Apps/Connect discoverability (PAP-11091)](../../ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx) | `connection-setup/catalog` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Connect name at create time (PAP-11283)](../../ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 26 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Connections/Browser Use Cloud/Settings](../../ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx) | `connection-setup/credentials` | current / production / fixtures | 9 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 27 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-setup/connection-instructions.stories.tsx) | `connection-setup/credentials`, `agents/instructions` | unreviewed / production / fixtures | 20 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Connections/Provider choice](../../ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 7 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Enterpret connector](../../ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 9 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 26 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx) | `connection-setup/credentials`, `routines/triggers` | unreviewed / production / fixtures | 27 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Connections/In-task connections](../../ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx) | `connection-setup/task-request` | unreviewed / production / fixtures | 78 / 23 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Managed Cloud OAuth handoff](../../ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx) | `connection-setup/handoff` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Connections/Memory](../../ui/storybook/stories/connection-setup/memory-connectors.stories.tsx) | `connection-setup/credentials`, `agents/instructions` | unreviewed / production / fixtures | 21 / 7 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Reviews/PAP-17835 Personal connection identity](../../ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx) | `connection-setup/identity-and-access` | unreviewed / production / fixtures | 10 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) | `connection-setup/credentials`, `connection-setup/failure` | unreviewed / production / fixtures | 21 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## developer-labs @@ -156,7 +156,7 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [UX Labs/Converted Test Pages](../../ui/storybook/stories/ux-labs.stories.tsx) | `developer-labs/interaction-labs` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Contributor surfaces/Developer previews and diagnostic labs/UX Labs/Converted Test Pages](../../ui/storybook/stories/developer-labs/ux-labs.stories.tsx) | `developer-labs/interaction-labs` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## documents-artifacts @@ -164,37 +164,37 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Explorations/Artifact cards/Commit](../../ui/storybook/stories/artifact-cards/commit.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Explorations/Artifact cards/Data](../../ui/storybook/stories/artifact-cards/data.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Explorations/Artifact cards/Document](../../ui/storybook/stories/artifact-cards/document.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Explorations/Artifact cards/File](../../ui/storybook/stories/artifact-cards/file.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Explorations/Artifact cards/Image](../../ui/storybook/stories/artifact-cards/image.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Explorations/Artifact cards/Link preview](../../ui/storybook/stories/artifact-cards/link-preview.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Explorations/Artifact cards/Pull request](../../ui/storybook/stories/artifact-cards/pull-request.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Explorations/Artifact cards/Video](../../ui/storybook/stories/artifact-cards/video.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Artifact upload/01 Artifacts pane](../../ui/storybook/stories/artifact-upload/01-components.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 10 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Artifact upload/02 Paused task journey](../../ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Pages/Artifacts](../../ui/storybook/stories/artifacts.stories.tsx) | `documents-artifacts/library`, `documents-artifacts/work-products` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Components/CSV File Tab](../../ui/storybook/stories/csv-preview.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Documents/Annotations](../../ui/storybook/stories/document-annotations.stories.tsx) | `documents-artifacts/annotations` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Document Comments](../../ui/storybook/stories/document-comments.stories.tsx) | `documents-artifacts/annotations` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Components/File Viewer Sheet](../../ui/storybook/stories/file-viewer.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [HTML artifacts/01 Preview](../../ui/storybook/stories/html-artifacts/01-preview.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [HTML artifacts/02 Workspace](../../ui/storybook/stories/html-artifacts/02-workspace.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [HTML artifacts/03 Task journey](../../ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Task Chat/Rich Work Product Cards](../../ui/storybook/stories/rich-work-product-cards.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Artifact Gallery](../../ui/storybook/stories/task-artifact-gallery.stories.tsx) | `documents-artifacts/library`, `documents-artifacts/work-products` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Text file tabs](../../ui/storybook/stories/task-text-files.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Commit](../../ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Data](../../ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Document](../../ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/File](../../ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Image](../../ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Link preview](../../ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Pull request](../../ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Video](../../ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Artifact upload/01 Artifacts pane](../../ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 10 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Artifact upload/02 Paused task journey](../../ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts](../../ui/storybook/stories/documents-artifacts/artifacts.stories.tsx) | `documents-artifacts/library`, `documents-artifacts/work-products` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Components/CSV File Tab](../../ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Product/Documents/Annotations](../../ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx) | `documents-artifacts/annotations` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Product/Document Comments](../../ui/storybook/stories/documents-artifacts/document-comments.stories.tsx) | `documents-artifacts/annotations` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Components/File Viewer Sheet](../../ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview](../../ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace](../../ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey](../../ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx) | `documents-artifacts/attachments`, `workspaces/files-git` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Task Chat/Rich Work Product Cards](../../ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx) | `documents-artifacts/work-products` | unreviewed / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery](../../ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx) | `documents-artifacts/library`, `documents-artifacts/work-products` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Documents, attachments, and work products/Tasks/Text file tabs](../../ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx) | `documents-artifacts/attachments` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## foundations-and-guides | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Components/Forms & Editors](../../ui/storybook/stories/forms-editors.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Foundations/Primitive Matrix](../../ui/storybook/stories/foundations.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Overview/Storybook Guide](../../ui/storybook/stories/overview.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / guide / static | 1 / 0 | Generated inventory counts replace stale hand-maintained Planned/Covered claims; no execution coverage is implied. | -| [Foundations/Primitive Coverage](../../ui/storybook/stories/primitives-coverage.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Foundations/Status Language](../../ui/storybook/stories/status-language.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Foundations/Components/Forms & Editors](../../ui/storybook/stories/foundations/forms-editors.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Foundations/Primitive Matrix](../../ui/storybook/stories/foundations/foundations.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Foundations/Primitive Coverage](../../ui/storybook/stories/foundations/primitives-coverage.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Foundations/Status Language](../../ui/storybook/stories/foundations/status-language.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Overview/Storybook Guide](../../ui/storybook/stories/overview/overview.stories.tsx) | Shared foundations or contributor guide; no single business capability owns this suite. | unreviewed / guide / static | 1 / 0 | Generated inventory counts replace stale hand-maintained Planned/Covered claims; no execution coverage is implied. | ## gateways-profiles @@ -202,13 +202,13 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Tools/Access profiles](../../ui/storybook/stories/access-profiles.stories.tsx) | `gateways-profiles/profiles` | unreviewed / production / fixtures | 18 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tools/Gateways (PAP-11182)](../../ui/storybook/stories/gateways-tab.stories.tsx) | `gateways-profiles/gateway` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Assistant connections/Manage connections](../../ui/storybook/stories/public-mcp-connections.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 9 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Assistant connections/Consent](../../ui/storybook/stories/public-mcp-consent.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 25 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Assistant connections/Device authorization](../../ui/storybook/stories/public-mcp-device.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 7 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Assistant connections/Start here](../../ui/storybook/stories/public-mcp-journey.stories.tsx) | `gateways-profiles/client-connect` | unreviewed / production / fixtures | 14 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Assistant connections/Experimental setting](../../ui/storybook/stories/public-mcp-setting.stories.tsx) | `gateways-profiles/client-connect` | unreviewed / production / fixtures | 8 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Access profiles](../../ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx) | `gateways-profiles/profiles` | unreviewed / production / fixtures | 18 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Gateways (PAP-11182)](../../ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx) | `gateways-profiles/gateway` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Manage connections](../../ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 9 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Consent](../../ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 25 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Device authorization](../../ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx) | `gateways-profiles/client-connect` | current / production / fixtures | 7 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Start here](../../ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx) | `gateways-profiles/client-connect` | unreviewed / production / fixtures | 14 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting](../../ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx) | `gateways-profiles/client-connect` | unreviewed / production / fixtures | 8 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## inbox-search @@ -216,11 +216,11 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Product/Inbox/Blocked tab](../../ui/storybook/stories/blocked-inbox.stories.tsx) | `inbox-search/triage`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Decisions/DecisionCard](../../ui/storybook/stories/decision-card.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Pages/Decisions Desk](../../ui/storybook/stories/decisions-desk.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Search & Command K](../../ui/storybook/stories/search.stories.tsx) | `inbox-search/search` | unreviewed / prototype / fixtures | 1 / 0 | Local search-page composition mounts production result components; does not establish parity with the production Search route. | -| [Pages/Decisions](../../ui/storybook/stories/what-needs-me.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab](../../ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx) | `inbox-search/triage`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Inbox, decisions, and search/Decisions/DecisionCard](../../ui/storybook/stories/inbox-search/decision-card.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions Desk](../../ui/storybook/stories/inbox-search/decisions-desk.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Inbox, decisions, and search/Product/Search & Command K](../../ui/storybook/stories/inbox-search/search.stories.tsx) | `inbox-search/search` | unreviewed / prototype / fixtures | 1 / 0 | Local search-page composition mounts production result components; does not establish parity with the production Search route. | +| [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions](../../ui/storybook/stories/inbox-search/what-needs-me.stories.tsx) | `inbox-search/decisions` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## instance-operations @@ -228,7 +228,7 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Product/Dev Ops Surfaces](../../ui/storybook/stories/dev-ops-surfaces.stories.tsx) | `instance-operations/server-service` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Instance operations/Product/Dev Ops Surfaces](../../ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx) | `instance-operations/server-service` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## navigation-preferences @@ -236,9 +236,9 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Announcements/AnnouncementCard](../../ui/storybook/stories/announcement-card.stories.tsx) | `navigation-preferences/announcements` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Prototypes/Task detail/Mobile tabs](../../ui/storybook/stories/mobile-task-tabs.stories.tsx) | `navigation-preferences/navigation` | proposed / prototype / fixtures | 4 / 2 | Local composition retained for its original design purpose; full production parity remains unreviewed. | -| [Product/Navigation & Layout](../../ui/storybook/stories/navigation-layout.stories.tsx) | `navigation-preferences/navigation` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Navigation, profile, and announcements/Announcements/AnnouncementCard](../../ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx) | `navigation-preferences/announcements` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Oversight and operation/Navigation, profile, and announcements/Prototypes/Task detail/Mobile tabs](../../ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx) | `navigation-preferences/navigation` | proposed / prototype / fixtures | 4 / 2 | Local composition retained for its original design purpose; full production parity remains unreviewed. | +| [Oversight and operation/Navigation, profile, and announcements/Product/Navigation & Layout](../../ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx) | `navigation-preferences/navigation` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## onboarding @@ -246,9 +246,9 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Onboarding/Agent arc](../../ui/storybook/stories/onboarding-agent-arc.stories.tsx) | `onboarding/adapter`, `onboarding/first-task` | unreviewed / production / fixtures | 27 / 11 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Onboarding/Character](../../ui/storybook/stories/onboarding-character.stories.tsx) | `onboarding/company` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Onboarding/Connect a model](../../ui/storybook/stories/onboarding-connect-model.stories.tsx) | `onboarding/adapter`, `onboarding/first-task` | historical / prototype / fixtures | 5 / 0 | Older tile/mode preview; onboarding-agent-arc mounts the production wizard. | +| [Getting started and access/Onboarding and first work/Onboarding/Agent arc](../../ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx) | `onboarding/adapter`, `onboarding/first-task` | unreviewed / production / fixtures | 27 / 11 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Onboarding and first work/Onboarding/Character](../../ui/storybook/stories/onboarding/onboarding-character.stories.tsx) | `onboarding/company` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Getting started and access/Onboarding and first work/Onboarding/Connect a model](../../ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx) | `onboarding/adapter`, `onboarding/first-task` | historical / prototype / fixtures | 5 / 0 | Older tile/mode preview; onboarding-agent-arc mounts the production wizard. | ## projects @@ -256,10 +256,10 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Proposals/Project repos/New project](../../ui/storybook/stories/new-project-repos.stories.tsx) | `projects/repositories` | proposed / mixed / fixtures | 18 / 5 | RepositoryEditor is shipped, but NewProjectPrototype composes its own creation flow. Preserve proposal until route parity is checked. | -| [Workspaces/Project runtime provision command](../../ui/storybook/stories/project-execution-workspace-strategy.stories.tsx) | `projects/defaults`, `workspaces/provisioning` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Proposals/Project repos/Configuration](../../ui/storybook/stories/project-repos-configuration.stories.tsx) | `projects/repositories` | proposed / mixed / fixtures | 12 / 0 | Production properties plus local configuration page composition; repository interaction is simulated. | -| [Product/Projects Goals Workspaces](../../ui/storybook/stories/projects-goals-workspaces.stories.tsx) | `projects/lifecycle`, `goals/hierarchy`, `workspaces/binding` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Projects and repositories/Proposals/Project repos/New project](../../ui/storybook/stories/projects/new-project-repos.stories.tsx) | `projects/repositories` | proposed / mixed / fixtures | 18 / 5 | RepositoryEditor is shipped, but NewProjectPrototype composes its own creation flow. Preserve proposal until route parity is checked. | +| [Projects and execution/Projects and repositories/Workspaces/Project runtime provision command](../../ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx) | `projects/defaults`, `workspaces/provisioning` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Projects and repositories/Proposals/Project repos/Configuration](../../ui/storybook/stories/projects/project-repos-configuration.stories.tsx) | `projects/repositories` | proposed / mixed / fixtures | 12 / 0 | Production properties plus local configuration page composition; repository interaction is simulated. | +| [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) | `projects/lifecycle`, `goals/hierarchy`, `workspaces/binding` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## questions-and-approvals @@ -267,14 +267,14 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx) | `questions-and-approvals/dismiss-and-reopen`, `agent-chat/history` | unreviewed / production / fixtures | 9 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Composer/Question flow](../../ui/storybook/stories/composer-question-flow.stories.tsx) | `questions-and-approvals/questions` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Chat & Comments/Connection Reviews](../../ui/storybook/stories/connection-reviews.stories.tsx) | `questions-and-approvals/tool-review`, `connection-setup/task-request` | unreviewed / production / fixtures | 25 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Issue Detail/Plan Decompositions](../../ui/storybook/stories/issue-plan-decompositions.stories.tsx) | `questions-and-approvals/plan-review`, `task-coordination/delegation` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/issue-thread-interactions.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | unreviewed / production / fixtures | 53 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/rich-acp-interactions.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | unreviewed / production / fixtures | 12 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Composer/Interaction above composer](../../ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | current / production / fixtures | 15 / 5 | Corrected local dismissal/send harness: questions leave no pending badge; confirmations retain reopen. Production cards/composer; persisted dismissal is covered separately by unanswered-question fixtures. | -| [Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/task-chat-unanswered-questions.stories.tsx) | `questions-and-approvals/dismiss-and-reopen`, `tasks/discussion` | unreviewed / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx) | `questions-and-approvals/dismiss-and-reopen`, `agent-chat/history` | unreviewed / production / fixtures | 9 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Questions and approvals/Composer/Question flow](../../ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx) | `questions-and-approvals/questions` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews](../../ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx) | `questions-and-approvals/tool-review`, `connection-setup/task-request` | unreviewed / production / fixtures | 25 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions](../../ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx) | `questions-and-approvals/plan-review`, `task-coordination/delegation` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | unreviewed / production / fixtures | 53 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | unreviewed / production / fixtures | 12 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) | `questions-and-approvals/questions`, `questions-and-approvals/confirmations`, `questions-and-approvals/audience` | current / production / fixtures | 15 / 5 | Corrected local dismissal/send harness: questions leave no pending badge; confirmations retain reopen. Production cards/composer; persisted dismissal is covered separately by unanswered-question fixtures. | +| [Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx) | `questions-and-approvals/dismiss-and-reopen`, `tasks/discussion` | unreviewed / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## recovery @@ -282,17 +282,17 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [App/Connection recovery](../../ui/storybook/stories/cloud-access-recovery.stories.tsx) | `recovery/reconnect` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Task chat/Recovery notice](../../ui/storybook/stories/execution-blocker-notice.stories.tsx) | `recovery/diagnosis` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Execution recovery](../../ui/storybook/stories/execution-recovery.stories.tsx) | `recovery/diagnosis` | unreviewed / production / fixtures | 18 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Issue/Blocked notice](../../ui/storybook/stories/issue-blocked-notice.stories.tsx) | `recovery/diagnosis`, `task-coordination/dependencies` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Model capacity retry](../../ui/storybook/stories/model-capacity-retry.stories.tsx) | `recovery/bounded-continuation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Design previews/Recovery notice](../../ui/storybook/stories/recovery-notice-preview.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | current / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Issue Scheduled retry surfaces](../../ui/storybook/stories/scheduled-retry.stories.tsx) | `recovery/bounded-continuation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Paperclip/Source Issue Recovery](../../ui/storybook/stories/source-issue-recovery.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Paperclip/Source-resolved Fold](../../ui/storybook/stories/source-resolved-fold.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Workspace branch recovery/01 Repair card](../../ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx) | `recovery/workspace` | unreviewed / production / fixtures | 8 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Workspace branch recovery/02 Task journey](../../ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx) | `recovery/workspace` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/App/Connection recovery](../../ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx) | `recovery/reconnect` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Task chat/Recovery notice](../../ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx) | `recovery/diagnosis` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Tasks/Execution recovery](../../ui/storybook/stories/recovery/execution-recovery.stories.tsx) | `recovery/diagnosis` | unreviewed / production / fixtures | 18 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Product/Issue/Blocked notice](../../ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx) | `recovery/diagnosis`, `task-coordination/dependencies` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Tasks/Model capacity retry](../../ui/storybook/stories/recovery/model-capacity-retry.stories.tsx) | `recovery/bounded-continuation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Design previews/Recovery notice](../../ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | current / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Product/Issue Scheduled retry surfaces](../../ui/storybook/stories/recovery/scheduled-retry.stories.tsx) | `recovery/bounded-continuation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Paperclip/Source Issue Recovery](../../ui/storybook/stories/recovery/source-issue-recovery.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Paperclip/Source-resolved Fold](../../ui/storybook/stories/recovery/source-resolved-fold.stories.tsx) | `recovery/diagnosis`, `recovery/source-action` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Workspace branch recovery/01 Repair card](../../ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx) | `recovery/workspace` | unreviewed / production / fixtures | 8 / 4 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Recovery/Workspace branch recovery/02 Task journey](../../ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx) | `recovery/workspace` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## routines @@ -300,11 +300,11 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Product/Routines · Detail (variation C)](../../ui/storybook/stories/routine-detail-c.stories.tsx) | `routines/definition`, `routines/management` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Routines · Secrets tab](../../ui/storybook/stories/routine-secrets.stories.tsx) | `routines/definition`, `secrets/runtime-delivery` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Routines/Webhooks UX preview](../../ui/storybook/stories/routine-webhooks-ux.stories.tsx) | `routines/triggers` | unreviewed / production / fixtures | 21 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Routines/Webhooks](../../ui/storybook/stories/routine-webhooks.stories.tsx) | `routines/triggers` | unreviewed / production / fixtures | 16 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines-list-groups.stories.tsx) | `routines/definition`, `routines/management` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)](../../ui/storybook/stories/routines/routine-detail-c.stories.tsx) | `routines/definition`, `routines/management` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab](../../ui/storybook/stories/routines/routine-secrets.stories.tsx) | `routines/definition`, `secrets/runtime-delivery` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks UX preview](../../ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx) | `routines/triggers` | unreviewed / production / fixtures | 21 / 5 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks](../../ui/storybook/stories/routines/routine-webhooks.stories.tsx) | `routines/triggers` | unreviewed / production / fixtures | 16 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines/routines-list-groups.stories.tsx) | `routines/definition`, `routines/management` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## runs-adapters @@ -312,21 +312,21 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Onboarding/Saved connections](../../ui/storybook/stories/agent-connection-reuse.stories.tsx) | `runs-adapters/validation`, `agents/hire` | current / production / fixtures | 7 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [AI Connections/Usage limits](../../ui/storybook/stories/ai-connection-usage.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 8 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [AI Connections/Review](../../ui/storybook/stories/ai-connections.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 46 / 15 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Connectors/Pool host](../../ui/storybook/stories/connection-pool-connector.stories.tsx) | `runs-adapters/validation`, `connection-setup/catalog` | unreviewed / production / fixtures | 5 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [AI Connections/Connection pools](../../ui/storybook/stories/connection-pools.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 16 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Assistant connections/Dot Runner](../../ui/storybook/stories/dot-runner-connection.stories.tsx) | `runs-adapters/validation`, `gateways-profiles/client-connect` | unreviewed / production / fixtures | 4 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [AI Connections/Provider routing/07 Subscription sign-in](../../ui/storybook/stories/local-ai-subscription.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 4 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [AI Connections/Provider routing/00 Overview](../../ui/storybook/stories/provider-routing-00-overview.stories.tsx) | `runs-adapters/validation` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | -| [AI Connections/Provider routing/01 Onboarding](../../ui/storybook/stories/provider-routing-01-onboarding.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 6 / 3 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | -| [AI Connections/Provider routing/02 Connect](../../ui/storybook/stories/provider-routing-02-connect.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 14 / 3 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | -| [AI Connections/Provider routing/03 Agent](../../ui/storybook/stories/provider-routing-03-agent.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 34 / 7 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | -| [AI Connections/Provider routing/04 Manage](../../ui/storybook/stories/provider-routing-04-manage.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 11 / 5 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | -| [AI Connections/Provider routing/05 Recovery](../../ui/storybook/stories/provider-routing-05-recovery.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 7 / 2 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | -| [AI Connections/Provider routing/06 Production components](../../ui/storybook/stories/provider-routing-06-production.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 5 / 5 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | -| [Composer/Session goals](../../ui/storybook/stories/session-goals.stories.tsx) | `runs-adapters/session` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections](../../ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx) | `runs-adapters/validation`, `agents/hire` | current / production / fixtures | 7 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Usage limits](../../ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 8 / 8 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Review](../../ui/storybook/stories/runs-adapters/ai-connections.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 46 / 15 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host](../../ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx) | `runs-adapters/validation`, `connection-setup/catalog` | unreviewed / production / fixtures | 5 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Connection pools](../../ui/storybook/stories/runs-adapters/connection-pools.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 16 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner](../../ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx) | `runs-adapters/validation`, `gateways-profiles/client-connect` | unreviewed / production / fixtures | 4 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/07 Subscription sign-in](../../ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 4 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/00 Overview](../../ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx) | `runs-adapters/validation` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/01 Onboarding](../../ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 6 / 3 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/02 Connect](../../ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 14 / 3 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/03 Agent](../../ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 34 / 7 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/04 Manage](../../ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 11 / 5 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/05 Recovery](../../ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx) | `runs-adapters/validation` | mixed / mixed / fixtures | 7 / 2 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/06 Production components](../../ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx) | `runs-adapters/validation` | unreviewed / production / fixtures | 5 / 5 | Design-review route uses simulated account/provider state; audit the rendered subject before treating it as the live connection flow. | +| [Agents and reusable capabilities/Runs, harnesses, and model accounts/Composer/Session goals](../../ui/storybook/stories/runs-adapters/session-goals.stories.tsx) | `runs-adapters/session` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## secrets @@ -334,11 +334,11 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Task credential access/01 Notice](../../ui/storybook/stories/credential-access/01-notice.stories.tsx) | `secrets/runtime-delivery`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Task credential access/02 Task page](../../ui/storybook/stories/credential-access/02-task-page.stories.tsx) | `secrets/runtime-delivery`, `recovery/diagnosis` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Environment Variables Editor](../../ui/storybook/stories/environment-variables-editor.stories.tsx) | `secrets/runtime-delivery` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Secrets](../../ui/storybook/stories/secrets.stories.tsx) | `secrets/company-secrets`, `secrets/vault-import` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/User secrets](../../ui/storybook/stories/user-secrets.stories.tsx) | `secrets/user-secrets` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice](../../ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx) | `secrets/runtime-delivery`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page](../../ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx) | `secrets/runtime-delivery`, `recovery/diagnosis` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Secrets and proposals/Product/Environment Variables Editor](../../ui/storybook/stories/secrets/environment-variables-editor.stories.tsx) | `secrets/runtime-delivery` | unreviewed / production / fixtures | 11 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Secrets and proposals/Product/Secrets](../../ui/storybook/stories/secrets/secrets.stories.tsx) | `secrets/company-secrets`, `secrets/vault-import` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Apps, channels, and extensions/Secrets and proposals/Product/User secrets](../../ui/storybook/stories/secrets/user-secrets.stories.tsx) | `secrets/user-secrets` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## skills @@ -346,18 +346,18 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Agent Skills/AgentSkillRow](../../ui/storybook/stories/agent-skill-row.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [QA / Agent skills edge states](../../ui/storybook/stories/agent-skills-edge.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skill Studio/AgentsUsingSkill](../../ui/storybook/stories/agents-using-skill.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skill Studio/EditACopy](../../ui/storybook/stories/fork-skill-flow.stories.tsx) | `skills/authoring` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Skill Studio · FrontmatterPanel](../../ui/storybook/stories/frontmatter-panel.stories.tsx) | `skills/authoring` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skills/GitHub sync journey](../../ui/storybook/stories/github-skills-journey.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 14 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skills/GitHub synced skills](../../ui/storybook/stories/github-synced-skills.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 19 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skills/Repository packages](../../ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skills/Import progress](../../ui/storybook/stories/skill-import-progress.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Skills/Policy surfaces](../../ui/storybook/stories/skill-policy-surfaces.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skills Store/Skill detail](../../ui/storybook/stories/skills-store-detail.stories.tsx) | `skills/discovery` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Skills Store/Discovery grid](../../ui/storybook/stories/skills-store-discovery.stories.tsx) | `skills/discovery` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Agent Skills/AgentSkillRow](../../ui/storybook/stories/skills/agent-skill-row.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/QA / Agent skills edge states](../../ui/storybook/stories/skills/agent-skills-edge.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/AgentsUsingSkill](../../ui/storybook/stories/skills/agents-using-skill.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/EditACopy](../../ui/storybook/stories/skills/fork-skill-flow.stories.tsx) | `skills/authoring` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Product/Skill Studio · FrontmatterPanel](../../ui/storybook/stories/skills/frontmatter-panel.stories.tsx) | `skills/authoring` | unreviewed / production / fixtures | 13 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey](../../ui/storybook/stories/skills/github-skills-journey.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 14 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills](../../ui/storybook/stories/skills/github-synced-skills.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 19 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages](../../ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 9 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress](../../ui/storybook/stories/skills/skill-import-progress.stories.tsx) | `skills/versions`, `skills/discovery` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Product/Skills/Policy surfaces](../../ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx) | `skills/policy` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail](../../ui/storybook/stories/skills/skills-store-detail.stories.tsx) | `skills/discovery` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Discovery grid](../../ui/storybook/stories/skills/skills-store-discovery.stories.tsx) | `skills/discovery` | unreviewed / production / fixtures | 3 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## steering @@ -365,10 +365,10 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Composer/Steering and queued messages](../../ui/storybook/stories/composer-queued-messages.stories.tsx) | `steering/queue`, `steering/edit-order-discard`, `steering/steer`, `steering/interrupt` | current / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Surfaces/Interrupt Handoff](../../ui/storybook/stories/interrupt-handoff.stories.tsx) | `steering/interrupt` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Composer/Paused task takeover](../../ui/storybook/stories/paused-composer.stories.tsx) | `steering/stop-and-pause` | historical / prototype / fixtures | 8 / 0 | Retained local paused takeover; task-execution-controls exercises the shipped pause/stop controls. | -| [Composer/Execution controls](../../ui/storybook/stories/task-execution-controls.stories.tsx) | `steering/stop-and-pause` | current / production / fixtures | 22 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) | `steering/queue`, `steering/edit-order-discard`, `steering/steer`, `steering/interrupt` | current / production / fixtures | 6 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Steering and queued messages/Surfaces/Interrupt Handoff](../../ui/storybook/stories/steering/interrupt-handoff.stories.tsx) | `steering/interrupt` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Steering and queued messages/Composer/Paused task takeover](../../ui/storybook/stories/steering/paused-composer.stories.tsx) | `steering/stop-and-pause` | historical / prototype / fixtures | 8 / 0 | Retained local paused takeover; task-execution-controls exercises the shipped pause/stop controls. | +| [Tasks and conversations/Steering and queued messages/Composer/Execution controls](../../ui/storybook/stories/steering/task-execution-controls.stories.tsx) | `steering/stop-and-pause` | current / production / fixtures | 22 / 6 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## task-coordination @@ -376,11 +376,11 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Product/Decisions/Stalled review actions](../../ui/storybook/stories/issue-review-panel.stories.tsx) | `task-coordination/signoff` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Issue Monitor surfaces](../../ui/storybook/stories/monitor-surfaces.stories.tsx) | `task-coordination/tree-control` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [UX Labs/Tasks Created From a Task](../../ui/storybook/stories/originating-tasks.stories.tsx) | `task-coordination/delegation`, `projects/task-context` | unreviewed / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/sub-issues-workflow.stories.tsx) | `task-coordination/dependencies`, `task-coordination/delegation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Task Watchdog surfaces](../../ui/storybook/stories/task-watchdog-surfaces.stories.tsx) | `task-coordination/tree-control` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Delegation, dependencies, and signoff/Product/Decisions/Stalled review actions](../../ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx) | `task-coordination/signoff` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Delegation, dependencies, and signoff/Product/Issue Monitor surfaces](../../ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx) | `task-coordination/tree-control` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task](../../ui/storybook/stories/task-coordination/originating-tasks.stories.tsx) | `task-coordination/delegation`, `projects/task-context` | unreviewed / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx) | `task-coordination/dependencies`, `task-coordination/delegation` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Delegation, dependencies, and signoff/Product/Task Watchdog surfaces](../../ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx) | `task-coordination/tree-control` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## tasks @@ -388,27 +388,27 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/assigned-backlog-safeguards.stories.tsx) | `tasks/completion`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Chat & Comments](../../ui/storybook/stories/chat-comments.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Completed activity preview](../../ui/storybook/stories/completed-activity.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | current / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Composer/Add menu](../../ui/storybook/stories/composer-add-menu.stories.tsx) | `tasks/create` | unreviewed / production / fixtures | 14 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Composer/Mobile assignee picker](../../ui/storybook/stories/composer-mobile-assignee.stories.tsx) | `tasks/create`, `runs-adapters/availability` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Composer/Model and effort picker](../../ui/storybook/stories/composer-model-picker.stories.tsx) | `tasks/create`, `runs-adapters/availability` | mixed / mixed / fixtures | 57 / 30 | Most examples use a local picker implementation; live picker examples use ComposerRunSettingsLiveStory. Do not count the whole suite as production parity. | -| [Product/Control Plane Surfaces](../../ui/storybook/stories/control-plane-surfaces.stories.tsx) | `tasks/organize`, `questions-and-approvals/governance`, `budgets-costs/budgets`, `activity/activity` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Dialogs & Modals](../../ui/storybook/stories/dialogs-modals.stories.tsx) | `tasks/create`, `agents/hire`, `projects/lifecycle`, `goals/hierarchy` | unreviewed / production / fixtures | 17 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Foundations/External Objects](../../ui/storybook/stories/external-objects.stories.tsx) | `tasks/properties` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Issue Management](../../ui/storybook/stories/issue-management.stories.tsx) | `tasks/properties`, `tasks/organize` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Components/Entity pickers/Mobile](../../ui/storybook/stories/mobile-entity-pickers.stories.tsx) | `tasks/create` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Composer/New task](../../ui/storybook/stories/new-task-composer.stories.tsx) | `tasks/create` | current / production / fixtures | 40 / 25 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Runner activity preview](../../ui/storybook/stories/runner-activity.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | current / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Paperclip/Successful Run Handoff](../../ui/storybook/stories/successful-run-handoff.stories.tsx) | `tasks/completion`, `recovery/diagnosis` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Task chat review fixes](../../ui/storybook/stories/task-chat-chain-of-thought.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Task chat/Mobile streaming follow](../../ui/storybook/stories/task-chat-mobile-follow.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Product/Task chat/System notice](../../ui/storybook/stories/task-chat-system-notice.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Context notices](../../ui/storybook/stories/task-context-notices.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 1 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Chat & Comments/Human identity/00 Review guide](../../ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx) | `tasks/discussion` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | -| [Chat & Comments/Human identity/01 Components](../../ui/storybook/stories/thread-human-identity/01-components.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 5 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Chat & Comments/Human identity/02 Mixed-author journey](../../ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 5 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx) | `tasks/completion`, `recovery/diagnosis` | unreviewed / production / fixtures | 5 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments](../../ui/storybook/stories/tasks/chat-comments.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview](../../ui/storybook/stories/tasks/completed-activity.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | current / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Composer/Add menu](../../ui/storybook/stories/tasks/composer-add-menu.stories.tsx) | `tasks/create` | unreviewed / production / fixtures | 14 / 14 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker](../../ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx) | `tasks/create`, `runs-adapters/availability` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker](../../ui/storybook/stories/tasks/composer-model-picker.stories.tsx) | `tasks/create`, `runs-adapters/availability` | mixed / mixed / fixtures | 57 / 30 | Most examples use a local picker implementation; live picker examples use ComposerRunSettingsLiveStory. Do not count the whole suite as production parity. | +| [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) | `tasks/organize`, `questions-and-approvals/governance`, `budgets-costs/budgets`, `activity/activity` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) | `tasks/create`, `agents/hire`, `projects/lifecycle`, `goals/hierarchy` | unreviewed / production / fixtures | 17 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/External Objects](../../ui/storybook/stories/tasks/external-objects.stories.tsx) | `tasks/properties` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Product/Issue Management](../../ui/storybook/stories/tasks/issue-management.stories.tsx) | `tasks/properties`, `tasks/organize` | unreviewed / production / fixtures | 8 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Components/Entity pickers/Mobile](../../ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx) | `tasks/create` | unreviewed / production / fixtures | 3 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Composer/New task](../../ui/storybook/stories/tasks/new-task-composer.stories.tsx) | `tasks/create` | current / production / fixtures | 40 / 25 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview](../../ui/storybook/stories/tasks/runner-activity.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | current / production / fixtures | 14 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff](../../ui/storybook/stories/tasks/successful-run-handoff.stories.tsx) | `tasks/completion`, `recovery/diagnosis` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes](../../ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx) | `tasks/discussion`, `runs-adapters/runs` | unreviewed / production / fixtures | 4 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Task chat/Mobile streaming follow](../../ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 1 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Product/Task chat/System notice](../../ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 2 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Tasks/Context notices](../../ui/storybook/stories/tasks/task-context-notices.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 1 / 1 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/00 Review guide](../../ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx) | `tasks/discussion` | unreviewed / guide / static | 1 / 0 | Review guide retained; explanatory content does not establish runtime or production coverage. | +| [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/01 Components](../../ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 5 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/02 Mixed-author journey](../../ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx) | `tasks/discussion` | unreviewed / production / fixtures | 5 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## teams @@ -416,7 +416,7 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Surfaces/Team Catalog](../../ui/storybook/stories/team-catalog.stories.tsx) | `teams/preview`, `teams/discovery` | unreviewed / production / fixtures | 12 / 0 | Renders shipped TeamCatalog source, but feature map documents current CLI/API access and no top-level catalog route. | +| [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) | `teams/preview`, `teams/discovery` | unreviewed / production / fixtures | 12 / 0 | Renders shipped TeamCatalog source, but feature map documents current CLI/API access and no top-level catalog route. | ## workspaces @@ -424,112 +424,112 @@ Status describes product alignment; implementation describes the rendered subjec | Story suite | Capabilities | Product / implementation / data | Stories / play functions | Review note | | --- | --- | --- | --- | --- | -| [Tasks/Browser Use/Task activity](../../ui/storybook/stories/browser-use-activity.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Browser Use/Footer](../../ui/storybook/stories/browser-use-footer.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 21 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Tasks/Browser Use/Panel](../../ui/storybook/stories/browser-use.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 28 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Components/SearchableSelect/Workspace picker](../../ui/storybook/stories/searchable-select.stories.tsx) | `workspaces/binding` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Issue/Workspace File Browser](../../ui/storybook/stories/workspace-file-browser.stories.tsx) | `workspaces/files-git` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Workspaces/Runtime provisioning status](../../ui/storybook/stories/workspace-runtime-provisioning.stories.tsx) | `workspaces/provisioning` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | -| [Workspaces/Service control bar](../../ui/storybook/stories/workspace-service-control-bar.stories.tsx) | `workspaces/services` | unreviewed / production / fixtures | 16 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity](../../ui/storybook/stories/workspaces/browser-use-activity.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 7 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer](../../ui/storybook/stories/workspaces/browser-use-footer.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 21 / 2 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel](../../ui/storybook/stories/workspaces/browser-use.stories.tsx) | `workspaces/services`, `tasks/discussion` | unreviewed / production / fixtures | 28 / 3 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Workspaces, services, and files/Components/SearchableSelect/Workspace picker](../../ui/storybook/stories/workspaces/searchable-select.stories.tsx) | `workspaces/binding` | unreviewed / production / fixtures | 9 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Workspaces, services, and files/Issue/Workspace File Browser](../../ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx) | `workspaces/files-git` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Workspaces, services, and files/Workspaces/Runtime provisioning status](../../ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx) | `workspaces/provisioning` | unreviewed / production / fixtures | 6 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | +| [Projects and execution/Workspaces, services, and files/Workspaces/Service control bar](../../ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx) | `workspaces/services` | unreviewed / production / fixtures | 16 / 0 | Shipped subjects identified through imports and local wrappers; full state, fixture-contract and route parity remain unreviewed. | ## Capability lookup References are navigation links, not proof of parity. An absent link means no cataloged story, not a missing product feature. CLI/operator capabilities may need no Storybook example. - `access/login`: No cataloged story. -- `access/invitations`: [Onboarding/External agent invitation/Components](../../ui/storybook/stories/external-agent-invite/components.stories.tsx) (unreviewed), [Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/external-agent-invite/journeys.stories.tsx) (unreviewed) +- `access/invitations`: [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components](../../ui/storybook/stories/agents/external-agent-invite/components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx) (unreviewed) - `access/membership`: No cataloged story. -- `access/resources`: [Private tasks/00 Review guide](../../ui/storybook/stories/private-tasks/00-review-guide.stories.tsx) (unreviewed), [Private tasks/01 Creation](../../ui/storybook/stories/private-tasks/01-creation.stories.tsx) (unreviewed), [Private tasks/02 Sharing](../../ui/storybook/stories/private-tasks/02-sharing.stories.tsx) (unreviewed), [Private tasks/03 Task actions](../../ui/storybook/stories/private-tasks/03-task-actions.stories.tsx) (unreviewed), [Private tasks/04 References and blockers](../../ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx) (unreviewed), [Private tasks/05 Projects](../../ui/storybook/stories/private-tasks/05-projects.stories.tsx) (unreviewed), [Private tasks/06 Full product pages](../../ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Private tasks/07 User stories](../../ui/storybook/stories/private-tasks/07-user-stories.stories.tsx) (unreviewed) +- `access/resources`: [Getting started and access/Login, invitations, and access/Private tasks/00 Review guide](../../ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/01 Creation](../../ui/storybook/stories/access/private-tasks/01-creation.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/02 Sharing](../../ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/03 Task actions](../../ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers](../../ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/07 User stories](../../ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx) (unreviewed) - `access/cli-auth`: No cataloged story. -- `activity/overview`: [Product/Data Visualization & Misc](../../ui/storybook/stories/data-viz-misc.stories.tsx) (unreviewed) -- `activity/activity`: [Tools/Activity (audit feed)](../../ui/storybook/stories/activity-feed.stories.tsx) (unreviewed), [Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/app-activity-lifecycle.stories.tsx) (unreviewed), [Product/Control Plane Surfaces](../../ui/storybook/stories/control-plane-surfaces.stories.tsx) (unreviewed) +- `activity/overview`: [Oversight and operation/Dashboards and audit trails/Product/Data Visualization & Misc](../../ui/storybook/stories/activity/data-viz-misc.stories.tsx) (unreviewed) +- `activity/activity`: [Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)](../../ui/storybook/stories/activity/activity-feed.stories.tsx) (unreviewed), [Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed) - `activity/runs`: No cataloged story. - `activity/routine-audit`: No cataloged story. -- `activity/timeline`: [Pages/Work Timeline](../../ui/storybook/stories/work-timeline.stories.tsx) (unreviewed) -- `agent-chat/discovery`: [Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat-sidebar.stories.tsx) (current), [Design explorations/Agent chat](../../ui/storybook/stories/agent-chat.stories.tsx) (mixed), [Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-conversation-sidebar.stories.tsx) (current), [Design explorations/Chat entry](../../ui/storybook/stories/chat-entry.stories.tsx) (historical), [Primary Agent/00 Review guide](../../ui/storybook/stories/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Primary Agent/01 Components](../../ui/storybook/stories/primary-agent/01-components.stories.tsx) (unreviewed), [Primary Agent/02 Sidebar](../../ui/storybook/stories/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Primary Agent/03 Agents](../../ui/storybook/stories/primary-agent/03-agents.stories.tsx) (unreviewed), [Primary Agent/04 New task](../../ui/storybook/stories/primary-agent/04-new-task.stories.tsx) (unreviewed), [Primary Agent/05 Chat](../../ui/storybook/stories/primary-agent/05-chat.stories.tsx) (unreviewed), [Primary Agent/06 Journeys](../../ui/storybook/stories/primary-agent/06-journeys.stories.tsx) (unreviewed), [Primary Agent/07 Confirmation](../../ui/storybook/stories/primary-agent/07-confirmation.stories.tsx) (unreviewed) -- `agent-chat/history`: [Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat-sidebar.stories.tsx) (current), [Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx) (unreviewed), [Design explorations/Agent chat](../../ui/storybook/stories/agent-chat.stories.tsx) (mixed), [Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-conversation-sidebar.stories.tsx) (current), [Design explorations/Chat entry](../../ui/storybook/stories/chat-entry.stories.tsx) (historical) +- `activity/timeline`: [Oversight and operation/Dashboards and audit trails/Pages/Work Timeline](../../ui/storybook/stories/activity/work-timeline.stories.tsx) (unreviewed) +- `agent-chat/discovery`: [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx) (current), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat](../../ui/storybook/stories/agent-chat/agent-chat.stories.tsx) (mixed), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx) (current), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry](../../ui/storybook/stories/agent-chat/chat-entry.stories.tsx) (historical), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) (unreviewed) +- `agent-chat/history`: [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages](../../ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx) (current), [Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx) (unreviewed), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat](../../ui/storybook/stories/agent-chat/agent-chat.stories.tsx) (mixed), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components](../../ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx) (current), [Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry](../../ui/storybook/stories/agent-chat/chat-entry.stories.tsx) (historical) - `agent-chat/handoff`: No cataloged story. - `agent-chat/conference-room`: No cataloged story. -- `agents/hire`: [Onboarding/Saved connections](../../ui/storybook/stories/agent-connection-reuse.stories.tsx) (current), [Product/Dialogs & Modals](../../ui/storybook/stories/dialogs-modals.stories.tsx) (unreviewed), [Onboarding/External agent invitation/Components](../../ui/storybook/stories/external-agent-invite/components.stories.tsx) (unreviewed), [Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/external-agent-invite/journeys.stories.tsx) (unreviewed), [Onboarding/New agent](../../ui/storybook/stories/new-agent-onboarding.stories.tsx) (historical) -- `agents/instructions`: [Pages/Agent Detail](../../ui/storybook/stories/agent-detail.stories.tsx) (unreviewed), [Agents/Persistent files](../../ui/storybook/stories/agent-files.stories.tsx) (unreviewed), [Product/Agent Management](../../ui/storybook/stories/agent-management.stories.tsx) (unreviewed), [Agents/Configuration refresh](../../ui/storybook/stories/agent-settings-redesign.stories.tsx) (mixed), [Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-instructions.stories.tsx) (unreviewed), [Apps/Connections/Memory](../../ui/storybook/stories/memory-connectors.stories.tsx) (unreviewed) -- `agents/organization`: [Agents/Personas/Full pages](../../ui/storybook/stories/agent-persona-pages.stories.tsx) (unreviewed), [Agents/Personas](../../ui/storybook/stories/agent-personas.stories.tsx) (unreviewed), [Primary Agent/00 Review guide](../../ui/storybook/stories/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Primary Agent/01 Components](../../ui/storybook/stories/primary-agent/01-components.stories.tsx) (unreviewed), [Primary Agent/02 Sidebar](../../ui/storybook/stories/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Primary Agent/03 Agents](../../ui/storybook/stories/primary-agent/03-agents.stories.tsx) (unreviewed), [Primary Agent/04 New task](../../ui/storybook/stories/primary-agent/04-new-task.stories.tsx) (unreviewed), [Primary Agent/05 Chat](../../ui/storybook/stories/primary-agent/05-chat.stories.tsx) (unreviewed), [Primary Agent/06 Journeys](../../ui/storybook/stories/primary-agent/06-journeys.stories.tsx) (unreviewed), [Primary Agent/07 Confirmation](../../ui/storybook/stories/primary-agent/07-confirmation.stories.tsx) (unreviewed) -- `agents/lifecycle`: [Pages/Agent Detail](../../ui/storybook/stories/agent-detail.stories.tsx) (unreviewed), [Product/Agent Management](../../ui/storybook/stories/agent-management.stories.tsx) (unreviewed), [Agents/Configuration refresh](../../ui/storybook/stories/agent-settings-redesign.stories.tsx) (mixed) -- `agents/built-in`: [Product/Built-in Agents](../../ui/storybook/stories/built-in-agents.stories.tsx) (unreviewed), [Summaries/SummarySlotCard](../../ui/storybook/stories/summary-slot-card.stories.tsx) (unreviewed) -- `app-permissions/agent-access`: [Tools/Permitted vs Installed](../../ui/storybook/stories/permitted-vs-installed.stories.tsx) (unreviewed) -- `app-permissions/action-policy`: [Tools & Access/ActionCard](../../ui/storybook/stories/action-card.stories.tsx) (unreviewed), [Apps/Action permissions test](../../ui/storybook/stories/action-permissions-test.stories.tsx) (unreviewed), [Tools/Permitted vs Installed](../../ui/storybook/stories/permitted-vs-installed.stories.tsx) (unreviewed) +- `agents/hire`: [Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections](../../ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components](../../ui/storybook/stories/agents/external-agent-invite/components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys](../../ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/New agent](../../ui/storybook/stories/agents/new-agent-onboarding.stories.tsx) (historical) +- `agents/instructions`: [Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail](../../ui/storybook/stories/agents/agent-detail.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Persistent files](../../ui/storybook/stories/agents/agent-files.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management](../../ui/storybook/stories/agents/agent-management.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh](../../ui/storybook/stories/agents/agent-settings-redesign.stories.tsx) (mixed), [Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-setup/connection-instructions.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Memory](../../ui/storybook/stories/connection-setup/memory-connectors.stories.tsx) (unreviewed) +- `agents/organization`: [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages](../../ui/storybook/stories/agents/agent-persona-pages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas](../../ui/storybook/stories/agents/agent-personas.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) (unreviewed) +- `agents/lifecycle`: [Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail](../../ui/storybook/stories/agents/agent-detail.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management](../../ui/storybook/stories/agents/agent-management.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh](../../ui/storybook/stories/agents/agent-settings-redesign.stories.tsx) (mixed) +- `agents/built-in`: [Agents and reusable capabilities/Hiring, configuration, and organization/Product/Built-in Agents](../../ui/storybook/stories/agents/built-in-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Summaries/SummarySlotCard](../../ui/storybook/stories/agents/summary-slot-card.stories.tsx) (unreviewed) +- `app-permissions/agent-access`: [Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed](../../ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx) (unreviewed) +- `app-permissions/action-policy`: [Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard](../../ui/storybook/stories/app-permissions/action-card.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test](../../ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed](../../ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx) (unreviewed) - `app-permissions/catalog-change`: No cataloged story. -- `app-permissions/test-action`: [Tools & Access/ActionCard](../../ui/storybook/stories/action-card.stories.tsx) (unreviewed), [Apps/Action permissions test](../../ui/storybook/stories/action-permissions-test.stories.tsx) (unreviewed) -- `app-permissions/account-maintenance`: [Apps/Managed accounts](../../ui/storybook/stories/apps-managed-accounts.stories.tsx) (current) -- `budgets-costs/cost-reporting`: [Product/Budget & Finance](../../ui/storybook/stories/budget-finance.stories.tsx) (unreviewed), [Costs/Subscriptions](../../ui/storybook/stories/costs/subscriptions.stories.tsx) (unreviewed), [Decision models/01 Settings](../../ui/storybook/stories/decision-models/01-settings.stories.tsx) (unreviewed), [Decision models/02 History](../../ui/storybook/stories/decision-models/02-history.stories.tsx) (unreviewed), [Decision models/03 Journey](../../ui/storybook/stories/decision-models/03-journey.stories.tsx) (unreviewed), [Fast responses/01 Settings](../../ui/storybook/stories/fast-responses/01-settings.stories.tsx) (unreviewed), [Fast responses/02 History](../../ui/storybook/stories/fast-responses/02-history.stories.tsx) (current) -- `budgets-costs/budgets`: [Product/Budget & Finance](../../ui/storybook/stories/budget-finance.stories.tsx) (unreviewed), [Product/Control Plane Surfaces](../../ui/storybook/stories/control-plane-surfaces.stories.tsx) (unreviewed), [Costs/Subscriptions](../../ui/storybook/stories/costs/subscriptions.stories.tsx) (unreviewed) +- `app-permissions/test-action`: [Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard](../../ui/storybook/stories/app-permissions/action-card.stories.tsx) (unreviewed), [Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test](../../ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx) (unreviewed) +- `app-permissions/account-maintenance`: [Apps, channels, and extensions/App access and action permissions/Apps/Managed accounts](../../ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx) (current) +- `budgets-costs/cost-reporting`: [Oversight and operation/Costs and budgets/Product/Budget & Finance](../../ui/storybook/stories/budgets-costs/budget-finance.stories.tsx) (unreviewed), [Oversight and operation/Costs and budgets/Costs/Subscriptions](../../ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/01 Settings](../../ui/storybook/stories/companies/decision-models/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/02 History](../../ui/storybook/stories/companies/decision-models/02-history.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/03 Journey](../../ui/storybook/stories/companies/decision-models/03-journey.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/01 Settings](../../ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/02 History](../../ui/storybook/stories/companies/fast-responses/02-history.stories.tsx) (current) +- `budgets-costs/budgets`: [Oversight and operation/Costs and budgets/Product/Budget & Finance](../../ui/storybook/stories/budgets-costs/budget-finance.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed), [Oversight and operation/Costs and budgets/Costs/Subscriptions](../../ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx) (unreviewed) - `budgets-costs/incidents`: No cataloged story. - `budgets-costs/resolution`: No cataloged story. - `cases/browse`: No cataloged story. - `cases/structure`: No cataloged story. - `cases/history`: No cataloged story. - `cases/task-links`: No cataloged story. -- `chat-channels/providers`: [Connections/AgentMail setup](../../ui/storybook/stories/agentmail-onboarding.stories.tsx) (unreviewed), [Connections/Chat connection actions](../../ui/storybook/stories/chat-connection-actions.stories.tsx) (unreviewed), [Connectors/GitHub bot management](../../ui/storybook/stories/github-bot-management/management.stories.tsx) (unreviewed), [Historical/GitHub chat prototypes](../../ui/storybook/stories/github-chat.stories.tsx) (historical), [Connections/GitHub and Code Review Bot](../../ui/storybook/stories/github-connections.stories.tsx) (unreviewed), [Connections/Slack/Automatic setup](../../ui/storybook/stories/slack-automatic-setup.stories.tsx) (unreviewed), [Connections/Slack/Managed setup](../../ui/storybook/stories/slack-managed-setup.stories.tsx) (unreviewed) -- `chat-channels/identity`: [Connections/Slack/Avatar in Settings](../../ui/storybook/stories/slack-avatar-settings.stories.tsx) (current), [Connections/Slack/Communication in Settings](../../ui/storybook/stories/slack-communication-settings.stories.tsx) (current) -- `chat-channels/conversation`: [Connections/AgentMail tasks](../../ui/storybook/stories/agentmail.stories.tsx) (unreviewed), [Connectors/GitHub bot management](../../ui/storybook/stories/github-bot-management/management.stories.tsx) (unreviewed), [Historical/GitHub chat prototypes](../../ui/storybook/stories/github-chat.stories.tsx) (historical), [Connections/iMessage Photon](../../ui/storybook/stories/imessage-photon.stories.tsx) (unreviewed), [Connections/Slack/Task tools](../../ui/storybook/stories/slack-tools.stories.tsx) (unreviewed) +- `chat-channels/providers`: [Apps, channels, and extensions/External chat and email/Connections/AgentMail setup](../../ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Chat connection actions](../../ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management](../../ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes](../../ui/storybook/stories/chat-channels/github-chat.stories.tsx) (historical), [Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot](../../ui/storybook/stories/chat-channels/github-connections.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup](../../ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup](../../ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx) (unreviewed) +- `chat-channels/identity`: [Apps, channels, and extensions/External chat and email/Connections/Slack/Avatar in Settings](../../ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx) (current), [Apps, channels, and extensions/External chat and email/Connections/Slack/Communication in Settings](../../ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx) (current) +- `chat-channels/conversation`: [Apps, channels, and extensions/External chat and email/Connections/AgentMail tasks](../../ui/storybook/stories/chat-channels/agentmail.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management](../../ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes](../../ui/storybook/stories/chat-channels/github-chat.stories.tsx) (historical), [Apps, channels, and extensions/External chat and email/Connections/iMessage Photon](../../ui/storybook/stories/chat-channels/imessage-photon.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Task tools](../../ui/storybook/stories/chat-channels/slack-tools.stories.tsx) (unreviewed) - `chat-channels/attachments`: No cataloged story. -- `chat-channels/lifecycle`: [Connections/AgentMail settings](../../ui/storybook/stories/agentmail-settings.stories.tsx) (unreviewed), [Connections/Chat management](../../ui/storybook/stories/chat-management/chat-management.stories.tsx) (unreviewed) +- `chat-channels/lifecycle`: [Apps, channels, and extensions/External chat and email/Connections/AgentMail settings](../../ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Chat management](../../ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx) (unreviewed) - `cli-operations/context`: No cataloged story. - `cli-operations/domain-commands`: No cataloged story. - `cli-operations/outputs`: No cataloged story. - `cli-operations/run-controls`: No cataloged story. - `cli-operations/worktree-instances`: No cataloged story. - `companies/selection`: No cataloged story. -- `companies/identity`: [Decision models/01 Settings](../../ui/storybook/stories/decision-models/01-settings.stories.tsx) (unreviewed), [Decision models/02 History](../../ui/storybook/stories/decision-models/02-history.stories.tsx) (unreviewed), [Decision models/03 Journey](../../ui/storybook/stories/decision-models/03-journey.stories.tsx) (unreviewed), [Fast responses/01 Settings](../../ui/storybook/stories/fast-responses/01-settings.stories.tsx) (unreviewed), [Fast responses/02 History](../../ui/storybook/stories/fast-responses/02-history.stories.tsx) (current) +- `companies/identity`: [Getting started and access/Companies and portability/Decision models/01 Settings](../../ui/storybook/stories/companies/decision-models/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/02 History](../../ui/storybook/stories/companies/decision-models/02-history.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Decision models/03 Journey](../../ui/storybook/stories/companies/decision-models/03-journey.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/01 Settings](../../ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx) (unreviewed), [Getting started and access/Companies and portability/Fast responses/02 History](../../ui/storybook/stories/companies/fast-responses/02-history.stories.tsx) (current) - `companies/archive`: No cataloged story. - `companies/portability`: No cataloged story. -- `connection-setup/catalog`: [Apps/Canonical icon registry](../../ui/storybook/stories/AppLogoRegistry.stories.tsx) (unreviewed), [Apps/Catalog source selection](../../ui/storybook/stories/apps-catalog-source-selection.stories.tsx) (proposed), [Apps/Connect discoverability (PAP-11091)](../../ui/storybook/stories/apps-connect-discoverability.stories.tsx) (unreviewed), [Connectors/Pool host](../../ui/storybook/stories/connection-pool-connector.stories.tsx) (unreviewed) -- `connection-setup/identity-and-access`: [Apps/Connections/Provider choice](../../ui/storybook/stories/ConnectionProviderChoice.stories.tsx) (unreviewed), [Apps/Connect name at create time (PAP-11283)](../../ui/storybook/stories/apps-connect-name.stories.tsx) (unreviewed), [Reviews/PAP-17835 Personal connection identity](../../ui/storybook/stories/personal-connection-identity.stories.tsx) (unreviewed) -- `connection-setup/credentials`: [Apps/Connections/Arcade](../../ui/storybook/stories/ArcadeConnection.stories.tsx) (unreviewed), [Apps/Connections/Composio](../../ui/storybook/stories/ComposioConnection.stories.tsx) (unreviewed), [Apps/Connections/Executor](../../ui/storybook/stories/ExecutorConnection.stories.tsx) (unreviewed), [Apps/Connections/Zapier](../../ui/storybook/stories/ZapierConnection.stories.tsx) (unreviewed), [Connections/Browser Use Cloud/Settings](../../ui/storybook/stories/browser-use-settings.stories.tsx) (current), [Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-instructions.stories.tsx) (unreviewed), [Apps/Enterpret connector](../../ui/storybook/stories/enterpret-connect-flow.stories.tsx) (unreviewed), [PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/fireflies-pr.stories.tsx) (unreviewed), [Apps/Connections/Memory](../../ui/storybook/stories/memory-connectors.stories.tsx) (unreviewed), [Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/notion-connect-flow.stories.tsx) (unreviewed) -- `connection-setup/handoff`: [Apps/Managed Cloud OAuth handoff](../../ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx) (unreviewed) +- `connection-setup/catalog`: [Apps, channels, and extensions/Connection setup/Apps/Canonical icon registry](../../ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Catalog source selection](../../ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx) (proposed), [Apps, channels, and extensions/Connection setup/Apps/Connect discoverability (PAP-11091)](../../ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host](../../ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx) (unreviewed) +- `connection-setup/identity-and-access`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Provider choice](../../ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connect name at create time (PAP-11283)](../../ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Reviews/PAP-17835 Personal connection identity](../../ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx) (unreviewed) +- `connection-setup/credentials`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Connections/Browser Use Cloud/Settings](../../ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx) (current), [Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions](../../ui/storybook/stories/connection-setup/connection-instructions.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Enterpret connector](../../ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Memory](../../ui/storybook/stories/connection-setup/memory-connectors.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx) (unreviewed) +- `connection-setup/handoff`: [Apps, channels, and extensions/Connection setup/Apps/Managed Cloud OAuth handoff](../../ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx) (unreviewed) - `connection-setup/draft-recovery`: No cataloged story. -- `connection-setup/task-request`: [Chat & Comments/Connection Reviews](../../ui/storybook/stories/connection-reviews.stories.tsx) (unreviewed), [Connections/In-task connections](../../ui/storybook/stories/in-feed-connections.stories.tsx) (unreviewed) -- `connection-setup/channel-setup`: [Components/Agent setup prompt](../../ui/storybook/stories/agent-setup-prompt.stories.tsx) (unreviewed), [Connections/AgentMail setup](../../ui/storybook/stories/agentmail-onboarding.stories.tsx) (unreviewed), [Connections/GitHub and Code Review Bot](../../ui/storybook/stories/github-connections.stories.tsx) (unreviewed), [Connections/Slack/Automatic setup](../../ui/storybook/stories/slack-automatic-setup.stories.tsx) (unreviewed), [Connections/Slack/Managed setup](../../ui/storybook/stories/slack-managed-setup.stories.tsx) (unreviewed) -- `connection-setup/failure`: [Apps/Connections/Arcade](../../ui/storybook/stories/ArcadeConnection.stories.tsx) (unreviewed), [Apps/Connections/Composio](../../ui/storybook/stories/ComposioConnection.stories.tsx) (unreviewed), [Apps/Connections/Executor](../../ui/storybook/stories/ExecutorConnection.stories.tsx) (unreviewed), [Apps/Connections/Zapier](../../ui/storybook/stories/ZapierConnection.stories.tsx) (unreviewed), [Apps/Enterpret connector](../../ui/storybook/stories/enterpret-connect-flow.stories.tsx) (unreviewed), [Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/notion-connect-flow.stories.tsx) (unreviewed) +- `connection-setup/task-request`: [Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews](../../ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Connections/In-task connections](../../ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx) (unreviewed) +- `connection-setup/channel-setup`: [Apps, channels, and extensions/Connection setup/Components/Agent setup prompt](../../ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/AgentMail setup](../../ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot](../../ui/storybook/stories/chat-channels/github-connections.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup](../../ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx) (unreviewed), [Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup](../../ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx) (unreviewed) +- `connection-setup/failure`: [Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade](../../ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Composio](../../ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Executor](../../ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier](../../ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Enterpret connector](../../ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx) (unreviewed), [Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)](../../ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx) (unreviewed) - `developer-labs/design`: No cataloged story. -- `developer-labs/interaction-labs`: [UX Labs/Converted Test Pages](../../ui/storybook/stories/ux-labs.stories.tsx) (unreviewed) +- `developer-labs/interaction-labs`: [Contributor surfaces/Developer previews and diagnostic labs/UX Labs/Converted Test Pages](../../ui/storybook/stories/developer-labs/ux-labs.stories.tsx) (unreviewed) - `developer-labs/performance`: No cataloged story. - `developer-labs/route-gates`: No cataloged story. - `documents-artifacts/documents`: No cataloged story. -- `documents-artifacts/annotations`: [Product/Documents/Annotations](../../ui/storybook/stories/document-annotations.stories.tsx) (unreviewed), [Product/Document Comments](../../ui/storybook/stories/document-comments.stories.tsx) (unreviewed) -- `documents-artifacts/attachments`: [Artifact upload/01 Artifacts pane](../../ui/storybook/stories/artifact-upload/01-components.stories.tsx) (unreviewed), [Artifact upload/02 Paused task journey](../../ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx) (unreviewed), [Components/CSV File Tab](../../ui/storybook/stories/csv-preview.stories.tsx) (unreviewed), [Components/File Viewer Sheet](../../ui/storybook/stories/file-viewer.stories.tsx) (unreviewed), [HTML artifacts/01 Preview](../../ui/storybook/stories/html-artifacts/01-preview.stories.tsx) (unreviewed), [HTML artifacts/02 Workspace](../../ui/storybook/stories/html-artifacts/02-workspace.stories.tsx) (unreviewed), [HTML artifacts/03 Task journey](../../ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx) (unreviewed), [Tasks/Text file tabs](../../ui/storybook/stories/task-text-files.stories.tsx) (unreviewed) -- `documents-artifacts/work-products`: [Explorations/Artifact cards/Commit](../../ui/storybook/stories/artifact-cards/commit.stories.tsx) (unreviewed), [Explorations/Artifact cards/Data](../../ui/storybook/stories/artifact-cards/data.stories.tsx) (unreviewed), [Explorations/Artifact cards/Document](../../ui/storybook/stories/artifact-cards/document.stories.tsx) (unreviewed), [Explorations/Artifact cards/File](../../ui/storybook/stories/artifact-cards/file.stories.tsx) (unreviewed), [Explorations/Artifact cards/Image](../../ui/storybook/stories/artifact-cards/image.stories.tsx) (unreviewed), [Explorations/Artifact cards/Link preview](../../ui/storybook/stories/artifact-cards/link-preview.stories.tsx) (unreviewed), [Explorations/Artifact cards/Pull request](../../ui/storybook/stories/artifact-cards/pull-request.stories.tsx) (unreviewed), [Explorations/Artifact cards/Video](../../ui/storybook/stories/artifact-cards/video.stories.tsx) (unreviewed), [Pages/Artifacts](../../ui/storybook/stories/artifacts.stories.tsx) (unreviewed), [Task Chat/Rich Work Product Cards](../../ui/storybook/stories/rich-work-product-cards.stories.tsx) (unreviewed), [Tasks/Artifact Gallery](../../ui/storybook/stories/task-artifact-gallery.stories.tsx) (unreviewed) -- `documents-artifacts/library`: [Pages/Artifacts](../../ui/storybook/stories/artifacts.stories.tsx) (unreviewed), [Tasks/Artifact Gallery](../../ui/storybook/stories/task-artifact-gallery.stories.tsx) (unreviewed) +- `documents-artifacts/annotations`: [Tasks and conversations/Documents, attachments, and work products/Product/Documents/Annotations](../../ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Product/Document Comments](../../ui/storybook/stories/documents-artifacts/document-comments.stories.tsx) (unreviewed) +- `documents-artifacts/attachments`: [Tasks and conversations/Documents, attachments, and work products/Artifact upload/01 Artifacts pane](../../ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Artifact upload/02 Paused task journey](../../ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Components/CSV File Tab](../../ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Components/File Viewer Sheet](../../ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview](../../ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace](../../ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey](../../ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Tasks/Text file tabs](../../ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx) (unreviewed) +- `documents-artifacts/work-products`: [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Commit](../../ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Data](../../ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Document](../../ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/File](../../ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Image](../../ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Link preview](../../ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Pull request](../../ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Video](../../ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts](../../ui/storybook/stories/documents-artifacts/artifacts.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Task Chat/Rich Work Product Cards](../../ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery](../../ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx) (unreviewed) +- `documents-artifacts/library`: [Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts](../../ui/storybook/stories/documents-artifacts/artifacts.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery](../../ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx) (unreviewed) - `execution-environments/configuration`: No cataloged story. - `execution-environments/capabilities`: No cataloged story. - `execution-environments/probe`: No cataloged story. - `execution-environments/assignment`: No cataloged story. - `execution-environments/images`: No cataloged story. -- `gateways-profiles/gateway`: [Tools/Gateways (PAP-11182)](../../ui/storybook/stories/gateways-tab.stories.tsx) (unreviewed) -- `gateways-profiles/profiles`: [Tools/Access profiles](../../ui/storybook/stories/access-profiles.stories.tsx) (unreviewed) -- `gateways-profiles/client-connect`: [Components/Agent setup prompt](../../ui/storybook/stories/agent-setup-prompt.stories.tsx) (unreviewed), [Assistant connections/Dot Runner](../../ui/storybook/stories/dot-runner-connection.stories.tsx) (unreviewed), [Assistant connections/Manage connections](../../ui/storybook/stories/public-mcp-connections.stories.tsx) (current), [Assistant connections/Consent](../../ui/storybook/stories/public-mcp-consent.stories.tsx) (current), [Assistant connections/Device authorization](../../ui/storybook/stories/public-mcp-device.stories.tsx) (current), [Assistant connections/Start here](../../ui/storybook/stories/public-mcp-journey.stories.tsx) (unreviewed), [Assistant connections/Experimental setting](../../ui/storybook/stories/public-mcp-setting.stories.tsx) (unreviewed) +- `gateways-profiles/gateway`: [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Gateways (PAP-11182)](../../ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx) (unreviewed) +- `gateways-profiles/profiles`: [Apps, channels, and extensions/Tool gateways and access profiles/Tools/Access profiles](../../ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx) (unreviewed) +- `gateways-profiles/client-connect`: [Apps, channels, and extensions/Connection setup/Components/Agent setup prompt](../../ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner](../../ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx) (unreviewed), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Manage connections](../../ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx) (current), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Consent](../../ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx) (current), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Device authorization](../../ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx) (current), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Start here](../../ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx) (unreviewed), [Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting](../../ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx) (unreviewed) - `gateways-profiles/tokens`: No cataloged story. -- `gateways-profiles/activity`: [Tools/Activity (audit feed)](../../ui/storybook/stories/activity-feed.stories.tsx) (unreviewed), [Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/app-activity-lifecycle.stories.tsx) (unreviewed) -- `goals/hierarchy`: [Product/Dialogs & Modals](../../ui/storybook/stories/dialogs-modals.stories.tsx) (unreviewed), [Product/Projects Goals Workspaces](../../ui/storybook/stories/projects-goals-workspaces.stories.tsx) (unreviewed) +- `gateways-profiles/activity`: [Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)](../../ui/storybook/stories/activity/activity-feed.stories.tsx) (unreviewed), [Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)](../../ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx) (unreviewed) +- `goals/hierarchy`: [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) (unreviewed) - `goals/alignment`: No cataloged story. - `goals/navigation`: No cataloged story. - `inbox-search/views`: No cataloged story. -- `inbox-search/triage`: [Product/Inbox/Blocked tab](../../ui/storybook/stories/blocked-inbox.stories.tsx) (unreviewed) -- `inbox-search/decisions`: [Decisions/DecisionCard](../../ui/storybook/stories/decision-card.stories.tsx) (unreviewed), [Pages/Decisions Desk](../../ui/storybook/stories/decisions-desk.stories.tsx) (unreviewed), [Pages/Decisions](../../ui/storybook/stories/what-needs-me.stories.tsx) (unreviewed) -- `inbox-search/search`: [Product/Search & Command K](../../ui/storybook/stories/search.stories.tsx) (unreviewed) +- `inbox-search/triage`: [Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab](../../ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx) (unreviewed) +- `inbox-search/decisions`: [Tasks and conversations/Inbox, decisions, and search/Decisions/DecisionCard](../../ui/storybook/stories/inbox-search/decision-card.stories.tsx) (unreviewed), [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions Desk](../../ui/storybook/stories/inbox-search/decisions-desk.stories.tsx) (unreviewed), [Tasks and conversations/Inbox, decisions, and search/Pages/Decisions](../../ui/storybook/stories/inbox-search/what-needs-me.stories.tsx) (unreviewed) +- `inbox-search/search`: [Tasks and conversations/Inbox, decisions, and search/Product/Search & Command K](../../ui/storybook/stories/inbox-search/search.stories.tsx) (unreviewed) - `instance-operations/install-update`: No cataloged story. -- `instance-operations/server-service`: [Product/Dev Ops Surfaces](../../ui/storybook/stories/dev-ops-surfaces.stories.tsx) (unreviewed) +- `instance-operations/server-service`: [Oversight and operation/Instance operations/Product/Dev Ops Surfaces](../../ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx) (unreviewed) - `instance-operations/configuration`: No cataloged story. - `instance-operations/diagnostics`: No cataloged story. - `instance-operations/backup`: No cataloged story. -- `navigation-preferences/navigation`: [Prototypes/Task detail/Mobile tabs](../../ui/storybook/stories/mobile-task-tabs.stories.tsx) (proposed), [Product/Navigation & Layout](../../ui/storybook/stories/navigation-layout.stories.tsx) (unreviewed) +- `navigation-preferences/navigation`: [Oversight and operation/Navigation, profile, and announcements/Prototypes/Task detail/Mobile tabs](../../ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx) (proposed), [Oversight and operation/Navigation, profile, and announcements/Product/Navigation & Layout](../../ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx) (unreviewed) - `navigation-preferences/preferences`: No cataloged story. -- `navigation-preferences/profile`: [Agents/Personas/Full pages](../../ui/storybook/stories/agent-persona-pages.stories.tsx) (unreviewed), [Agents/Personas](../../ui/storybook/stories/agent-personas.stories.tsx) (unreviewed) -- `navigation-preferences/announcements`: [Announcements/AnnouncementCard](../../ui/storybook/stories/announcement-card.stories.tsx) (unreviewed) +- `navigation-preferences/profile`: [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages](../../ui/storybook/stories/agents/agent-persona-pages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas](../../ui/storybook/stories/agents/agent-personas.stories.tsx) (unreviewed) +- `navigation-preferences/announcements`: [Oversight and operation/Navigation, profile, and announcements/Announcements/AnnouncementCard](../../ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx) (unreviewed) - `navigation-preferences/fallbacks`: No cataloged story. - `onboarding/instance`: No cataloged story. -- `onboarding/company`: [Onboarding/Character](../../ui/storybook/stories/onboarding-character.stories.tsx) (unreviewed) -- `onboarding/adapter`: [Onboarding/Agent arc](../../ui/storybook/stories/onboarding-agent-arc.stories.tsx) (unreviewed), [Onboarding/Connect a model](../../ui/storybook/stories/onboarding-connect-model.stories.tsx) (historical) -- `onboarding/first-task`: [Onboarding/Agent arc](../../ui/storybook/stories/onboarding-agent-arc.stories.tsx) (unreviewed), [Onboarding/Connect a model](../../ui/storybook/stories/onboarding-connect-model.stories.tsx) (historical) +- `onboarding/company`: [Getting started and access/Onboarding and first work/Onboarding/Character](../../ui/storybook/stories/onboarding/onboarding-character.stories.tsx) (unreviewed) +- `onboarding/adapter`: [Getting started and access/Onboarding and first work/Onboarding/Agent arc](../../ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx) (unreviewed), [Getting started and access/Onboarding and first work/Onboarding/Connect a model](../../ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx) (historical) +- `onboarding/first-task`: [Getting started and access/Onboarding and first work/Onboarding/Agent arc](../../ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx) (unreviewed), [Getting started and access/Onboarding and first work/Onboarding/Connect a model](../../ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx) (historical) - `onboarding/resume`: No cataloged story. - `pipelines/stages`: No cataloged story. - `pipelines/items`: No cataloged story. @@ -539,71 +539,71 @@ References are navigation links, not proof of parity. An absent link means no ca - `plugins/configuration`: No cataloged story. - `plugins/contributions`: No cataloged story. - `plugins/lifecycle`: No cataloged story. -- `projects/lifecycle`: [Product/Dialogs & Modals](../../ui/storybook/stories/dialogs-modals.stories.tsx) (unreviewed), [Private tasks/05 Projects](../../ui/storybook/stories/private-tasks/05-projects.stories.tsx) (unreviewed), [Private tasks/06 Full product pages](../../ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Product/Projects Goals Workspaces](../../ui/storybook/stories/projects-goals-workspaces.stories.tsx) (unreviewed) -- `projects/task-context`: [UX Labs/Tasks Created From a Task](../../ui/storybook/stories/originating-tasks.stories.tsx) (unreviewed) -- `projects/repositories`: [Proposals/Project repos/New project](../../ui/storybook/stories/new-project-repos.stories.tsx) (proposed), [Proposals/Project repos/Configuration](../../ui/storybook/stories/project-repos-configuration.stories.tsx) (proposed) -- `projects/defaults`: [Workspaces/Project runtime provision command](../../ui/storybook/stories/project-execution-workspace-strategy.stories.tsx) (unreviewed) -- `questions-and-approvals/questions`: [Composer/Question flow](../../ui/storybook/stories/composer-question-flow.stories.tsx) (unreviewed), [Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/issue-thread-interactions.stories.tsx) (unreviewed), [Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/rich-acp-interactions.stories.tsx) (unreviewed), [Composer/Interaction above composer](../../ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx) (current) -- `questions-and-approvals/dismiss-and-reopen`: [Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx) (unreviewed), [Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/task-chat-unanswered-questions.stories.tsx) (unreviewed) -- `questions-and-approvals/confirmations`: [Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/issue-thread-interactions.stories.tsx) (unreviewed), [Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/rich-acp-interactions.stories.tsx) (unreviewed), [Composer/Interaction above composer](../../ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx) (current) -- `questions-and-approvals/plan-review`: [Issue Detail/Plan Decompositions](../../ui/storybook/stories/issue-plan-decompositions.stories.tsx) (unreviewed) -- `questions-and-approvals/audience`: [Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/issue-thread-interactions.stories.tsx) (unreviewed), [Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/rich-acp-interactions.stories.tsx) (unreviewed), [Composer/Interaction above composer](../../ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx) (current) -- `questions-and-approvals/governance`: [Product/Control Plane Surfaces](../../ui/storybook/stories/control-plane-surfaces.stories.tsx) (unreviewed) -- `questions-and-approvals/tool-review`: [Chat & Comments/Connection Reviews](../../ui/storybook/stories/connection-reviews.stories.tsx) (unreviewed) +- `projects/lifecycle`: [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) (unreviewed) +- `projects/task-context`: [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task](../../ui/storybook/stories/task-coordination/originating-tasks.stories.tsx) (unreviewed) +- `projects/repositories`: [Projects and execution/Projects and repositories/Proposals/Project repos/New project](../../ui/storybook/stories/projects/new-project-repos.stories.tsx) (proposed), [Projects and execution/Projects and repositories/Proposals/Project repos/Configuration](../../ui/storybook/stories/projects/project-repos-configuration.stories.tsx) (proposed) +- `projects/defaults`: [Projects and execution/Projects and repositories/Workspaces/Project runtime provision command](../../ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx) (unreviewed) +- `questions-and-approvals/questions`: [Tasks and conversations/Questions and approvals/Composer/Question flow](../../ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) (current) +- `questions-and-approvals/dismiss-and-reopen`: [Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx) (unreviewed) +- `questions-and-approvals/confirmations`: [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) (current) +- `questions-and-approvals/plan-review`: [Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions](../../ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx) (unreviewed) +- `questions-and-approvals/audience`: [Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions](../../ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions](../../ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Composer/Interaction above composer](../../ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx) (current) +- `questions-and-approvals/governance`: [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed) +- `questions-and-approvals/tool-review`: [Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews](../../ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx) (unreviewed) - `questions-and-approvals/continuation`: No cataloged story. -- `recovery/diagnosis`: [Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/assigned-backlog-safeguards.stories.tsx) (unreviewed), [Product/Inbox/Blocked tab](../../ui/storybook/stories/blocked-inbox.stories.tsx) (unreviewed), [Task credential access/01 Notice](../../ui/storybook/stories/credential-access/01-notice.stories.tsx) (unreviewed), [Task credential access/02 Task page](../../ui/storybook/stories/credential-access/02-task-page.stories.tsx) (unreviewed), [Task chat/Recovery notice](../../ui/storybook/stories/execution-blocker-notice.stories.tsx) (unreviewed), [Tasks/Execution recovery](../../ui/storybook/stories/execution-recovery.stories.tsx) (unreviewed), [Product/Issue/Blocked notice](../../ui/storybook/stories/issue-blocked-notice.stories.tsx) (unreviewed), [Design previews/Recovery notice](../../ui/storybook/stories/recovery-notice-preview.stories.tsx) (current), [Paperclip/Source Issue Recovery](../../ui/storybook/stories/source-issue-recovery.stories.tsx) (unreviewed), [Paperclip/Source-resolved Fold](../../ui/storybook/stories/source-resolved-fold.stories.tsx) (unreviewed), [Paperclip/Successful Run Handoff](../../ui/storybook/stories/successful-run-handoff.stories.tsx) (unreviewed) -- `recovery/bounded-continuation`: [Tasks/Model capacity retry](../../ui/storybook/stories/model-capacity-retry.stories.tsx) (unreviewed), [Product/Issue Scheduled retry surfaces](../../ui/storybook/stories/scheduled-retry.stories.tsx) (unreviewed) -- `recovery/source-action`: [Design previews/Recovery notice](../../ui/storybook/stories/recovery-notice-preview.stories.tsx) (current), [Paperclip/Source Issue Recovery](../../ui/storybook/stories/source-issue-recovery.stories.tsx) (unreviewed), [Paperclip/Source-resolved Fold](../../ui/storybook/stories/source-resolved-fold.stories.tsx) (unreviewed) +- `recovery/diagnosis`: [Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx) (unreviewed), [Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab](../../ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice](../../ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page](../../ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx) (unreviewed), [Projects and execution/Recovery/Task chat/Recovery notice](../../ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx) (unreviewed), [Projects and execution/Recovery/Tasks/Execution recovery](../../ui/storybook/stories/recovery/execution-recovery.stories.tsx) (unreviewed), [Projects and execution/Recovery/Product/Issue/Blocked notice](../../ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx) (unreviewed), [Projects and execution/Recovery/Design previews/Recovery notice](../../ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx) (current), [Projects and execution/Recovery/Paperclip/Source Issue Recovery](../../ui/storybook/stories/recovery/source-issue-recovery.stories.tsx) (unreviewed), [Projects and execution/Recovery/Paperclip/Source-resolved Fold](../../ui/storybook/stories/recovery/source-resolved-fold.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff](../../ui/storybook/stories/tasks/successful-run-handoff.stories.tsx) (unreviewed) +- `recovery/bounded-continuation`: [Projects and execution/Recovery/Tasks/Model capacity retry](../../ui/storybook/stories/recovery/model-capacity-retry.stories.tsx) (unreviewed), [Projects and execution/Recovery/Product/Issue Scheduled retry surfaces](../../ui/storybook/stories/recovery/scheduled-retry.stories.tsx) (unreviewed) +- `recovery/source-action`: [Projects and execution/Recovery/Design previews/Recovery notice](../../ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx) (current), [Projects and execution/Recovery/Paperclip/Source Issue Recovery](../../ui/storybook/stories/recovery/source-issue-recovery.stories.tsx) (unreviewed), [Projects and execution/Recovery/Paperclip/Source-resolved Fold](../../ui/storybook/stories/recovery/source-resolved-fold.stories.tsx) (unreviewed) - `recovery/exhaustion`: No cataloged story. -- `recovery/workspace`: [Workspace branch recovery/01 Repair card](../../ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx) (unreviewed), [Workspace branch recovery/02 Task journey](../../ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx) (unreviewed) +- `recovery/workspace`: [Projects and execution/Recovery/Workspace branch recovery/01 Repair card](../../ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx) (unreviewed), [Projects and execution/Recovery/Workspace branch recovery/02 Task journey](../../ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx) (unreviewed) - `recovery/unknown-outcome`: No cataloged story. - `recovery/user-continuation`: No cataloged story. -- `recovery/reconnect`: [App/Connection recovery](../../ui/storybook/stories/cloud-access-recovery.stories.tsx) (unreviewed) -- `routines/definition`: [Product/Routines · Detail (variation C)](../../ui/storybook/stories/routine-detail-c.stories.tsx) (unreviewed), [Product/Routines · Secrets tab](../../ui/storybook/stories/routine-secrets.stories.tsx) (unreviewed), [Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines-list-groups.stories.tsx) (unreviewed) -- `routines/triggers`: [PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/fireflies-pr.stories.tsx) (unreviewed), [Product/Routines/Webhooks UX preview](../../ui/storybook/stories/routine-webhooks-ux.stories.tsx) (unreviewed), [Product/Routines/Webhooks](../../ui/storybook/stories/routine-webhooks.stories.tsx) (unreviewed) +- `recovery/reconnect`: [Projects and execution/Recovery/App/Connection recovery](../../ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx) (unreviewed) +- `routines/definition`: [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)](../../ui/storybook/stories/routines/routine-detail-c.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab](../../ui/storybook/stories/routines/routine-secrets.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines/routines-list-groups.stories.tsx) (unreviewed) +- `routines/triggers`: [Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks](../../ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks UX preview](../../ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks](../../ui/storybook/stories/routines/routine-webhooks.stories.tsx) (unreviewed) - `routines/run-now`: No cataloged story. - `routines/history`: No cataloged story. -- `routines/management`: [Product/Routines · Detail (variation C)](../../ui/storybook/stories/routine-detail-c.stories.tsx) (unreviewed), [Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines-list-groups.stories.tsx) (unreviewed) -- `runs-adapters/availability`: [Composer/Mobile assignee picker](../../ui/storybook/stories/composer-mobile-assignee.stories.tsx) (unreviewed), [Composer/Model and effort picker](../../ui/storybook/stories/composer-model-picker.stories.tsx) (mixed) -- `runs-adapters/validation`: [Onboarding/Saved connections](../../ui/storybook/stories/agent-connection-reuse.stories.tsx) (current), [AI Connections/Usage limits](../../ui/storybook/stories/ai-connection-usage.stories.tsx) (unreviewed), [AI Connections/Review](../../ui/storybook/stories/ai-connections.stories.tsx) (unreviewed), [Connectors/Pool host](../../ui/storybook/stories/connection-pool-connector.stories.tsx) (unreviewed), [AI Connections/Connection pools](../../ui/storybook/stories/connection-pools.stories.tsx) (unreviewed), [Assistant connections/Dot Runner](../../ui/storybook/stories/dot-runner-connection.stories.tsx) (unreviewed), [AI Connections/Provider routing/07 Subscription sign-in](../../ui/storybook/stories/local-ai-subscription.stories.tsx) (unreviewed), [AI Connections/Provider routing/00 Overview](../../ui/storybook/stories/provider-routing-00-overview.stories.tsx) (unreviewed), [AI Connections/Provider routing/01 Onboarding](../../ui/storybook/stories/provider-routing-01-onboarding.stories.tsx) (mixed), [AI Connections/Provider routing/02 Connect](../../ui/storybook/stories/provider-routing-02-connect.stories.tsx) (mixed), [AI Connections/Provider routing/03 Agent](../../ui/storybook/stories/provider-routing-03-agent.stories.tsx) (mixed), [AI Connections/Provider routing/04 Manage](../../ui/storybook/stories/provider-routing-04-manage.stories.tsx) (mixed), [AI Connections/Provider routing/05 Recovery](../../ui/storybook/stories/provider-routing-05-recovery.stories.tsx) (mixed), [AI Connections/Provider routing/06 Production components](../../ui/storybook/stories/provider-routing-06-production.stories.tsx) (unreviewed) -- `runs-adapters/runs`: [Product/Chat & Comments](../../ui/storybook/stories/chat-comments.stories.tsx) (unreviewed), [Tasks/Completed activity preview](../../ui/storybook/stories/completed-activity.stories.tsx) (current), [Tasks/Runner activity preview](../../ui/storybook/stories/runner-activity.stories.tsx) (current), [Tasks/Task chat review fixes](../../ui/storybook/stories/task-chat-chain-of-thought.stories.tsx) (unreviewed) -- `runs-adapters/session`: [Composer/Session goals](../../ui/storybook/stories/session-goals.stories.tsx) (unreviewed) -- `secrets/company-secrets`: [Product/Secrets](../../ui/storybook/stories/secrets.stories.tsx) (unreviewed) -- `secrets/user-secrets`: [Product/User secrets](../../ui/storybook/stories/user-secrets.stories.tsx) (unreviewed) +- `routines/management`: [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)](../../ui/storybook/stories/routines/routine-detail-c.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)](../../ui/storybook/stories/routines/routines-list-groups.stories.tsx) (unreviewed) +- `runs-adapters/availability`: [Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker](../../ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker](../../ui/storybook/stories/tasks/composer-model-picker.stories.tsx) (mixed) +- `runs-adapters/validation`: [Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections](../../ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx) (current), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Usage limits](../../ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Review](../../ui/storybook/stories/runs-adapters/ai-connections.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host](../../ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Connection pools](../../ui/storybook/stories/runs-adapters/connection-pools.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner](../../ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/07 Subscription sign-in](../../ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/00 Overview](../../ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx) (unreviewed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/01 Onboarding](../../ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/02 Connect](../../ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/03 Agent](../../ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/04 Manage](../../ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/05 Recovery](../../ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx) (mixed), [Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/06 Production components](../../ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx) (unreviewed) +- `runs-adapters/runs`: [Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments](../../ui/storybook/stories/tasks/chat-comments.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview](../../ui/storybook/stories/tasks/completed-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview](../../ui/storybook/stories/tasks/runner-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes](../../ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx) (unreviewed) +- `runs-adapters/session`: [Agents and reusable capabilities/Runs, harnesses, and model accounts/Composer/Session goals](../../ui/storybook/stories/runs-adapters/session-goals.stories.tsx) (unreviewed) +- `secrets/company-secrets`: [Apps, channels, and extensions/Secrets and proposals/Product/Secrets](../../ui/storybook/stories/secrets/secrets.stories.tsx) (unreviewed) +- `secrets/user-secrets`: [Apps, channels, and extensions/Secrets and proposals/Product/User secrets](../../ui/storybook/stories/secrets/user-secrets.stories.tsx) (unreviewed) - `secrets/proposals`: No cataloged story. -- `secrets/vault-import`: [Product/Secrets](../../ui/storybook/stories/secrets.stories.tsx) (unreviewed) -- `secrets/runtime-delivery`: [Task credential access/01 Notice](../../ui/storybook/stories/credential-access/01-notice.stories.tsx) (unreviewed), [Task credential access/02 Task page](../../ui/storybook/stories/credential-access/02-task-page.stories.tsx) (unreviewed), [Product/Environment Variables Editor](../../ui/storybook/stories/environment-variables-editor.stories.tsx) (unreviewed), [Product/Routines · Secrets tab](../../ui/storybook/stories/routine-secrets.stories.tsx) (unreviewed) -- `skills/discovery`: [Skills/GitHub sync journey](../../ui/storybook/stories/github-skills-journey.stories.tsx) (unreviewed), [Skills/GitHub synced skills](../../ui/storybook/stories/github-synced-skills.stories.tsx) (unreviewed), [Skills/Repository packages](../../ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx) (unreviewed), [Skills/Import progress](../../ui/storybook/stories/skill-import-progress.stories.tsx) (unreviewed), [Skills Store/Skill detail](../../ui/storybook/stories/skills-store-detail.stories.tsx) (unreviewed), [Skills Store/Discovery grid](../../ui/storybook/stories/skills-store-discovery.stories.tsx) (unreviewed) -- `skills/authoring`: [Skill Studio/EditACopy](../../ui/storybook/stories/fork-skill-flow.stories.tsx) (unreviewed), [Product/Skill Studio · FrontmatterPanel](../../ui/storybook/stories/frontmatter-panel.stories.tsx) (unreviewed) -- `skills/versions`: [Skills/GitHub sync journey](../../ui/storybook/stories/github-skills-journey.stories.tsx) (unreviewed), [Skills/GitHub synced skills](../../ui/storybook/stories/github-synced-skills.stories.tsx) (unreviewed), [Skills/Repository packages](../../ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx) (unreviewed), [Skills/Import progress](../../ui/storybook/stories/skill-import-progress.stories.tsx) (unreviewed) -- `skills/policy`: [Agent Skills/AgentSkillRow](../../ui/storybook/stories/agent-skill-row.stories.tsx) (unreviewed), [QA / Agent skills edge states](../../ui/storybook/stories/agent-skills-edge.stories.tsx) (unreviewed), [Skill Studio/AgentsUsingSkill](../../ui/storybook/stories/agents-using-skill.stories.tsx) (unreviewed), [Product/Skills/Policy surfaces](../../ui/storybook/stories/skill-policy-surfaces.stories.tsx) (unreviewed) +- `secrets/vault-import`: [Apps, channels, and extensions/Secrets and proposals/Product/Secrets](../../ui/storybook/stories/secrets/secrets.stories.tsx) (unreviewed) +- `secrets/runtime-delivery`: [Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice](../../ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page](../../ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx) (unreviewed), [Apps, channels, and extensions/Secrets and proposals/Product/Environment Variables Editor](../../ui/storybook/stories/secrets/environment-variables-editor.stories.tsx) (unreviewed), [Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab](../../ui/storybook/stories/routines/routine-secrets.stories.tsx) (unreviewed) +- `skills/discovery`: [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey](../../ui/storybook/stories/skills/github-skills-journey.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills](../../ui/storybook/stories/skills/github-synced-skills.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages](../../ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress](../../ui/storybook/stories/skills/skill-import-progress.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail](../../ui/storybook/stories/skills/skills-store-detail.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Discovery grid](../../ui/storybook/stories/skills/skills-store-discovery.stories.tsx) (unreviewed) +- `skills/authoring`: [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/EditACopy](../../ui/storybook/stories/skills/fork-skill-flow.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Product/Skill Studio · FrontmatterPanel](../../ui/storybook/stories/skills/frontmatter-panel.stories.tsx) (unreviewed) +- `skills/versions`: [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey](../../ui/storybook/stories/skills/github-skills-journey.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills](../../ui/storybook/stories/skills/github-synced-skills.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages](../../ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress](../../ui/storybook/stories/skills/skill-import-progress.stories.tsx) (unreviewed) +- `skills/policy`: [Agents and reusable capabilities/Skills and Skill Studio/Agent Skills/AgentSkillRow](../../ui/storybook/stories/skills/agent-skill-row.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/QA / Agent skills edge states](../../ui/storybook/stories/skills/agent-skills-edge.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/AgentsUsingSkill](../../ui/storybook/stories/skills/agents-using-skill.stories.tsx) (unreviewed), [Agents and reusable capabilities/Skills and Skill Studio/Product/Skills/Policy surfaces](../../ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx) (unreviewed) - `skills/testing`: No cataloged story. - `status-cards/authoring`: No cataloged story. - `status-cards/generation`: No cataloged story. - `status-cards/inspection`: No cataloged story. - `status-cards/archive`: No cataloged story. -- `steering/queue`: [Composer/Steering and queued messages](../../ui/storybook/stories/composer-queued-messages.stories.tsx) (current) -- `steering/edit-order-discard`: [Composer/Steering and queued messages](../../ui/storybook/stories/composer-queued-messages.stories.tsx) (current) -- `steering/steer`: [Composer/Steering and queued messages](../../ui/storybook/stories/composer-queued-messages.stories.tsx) (current) -- `steering/interrupt`: [Composer/Steering and queued messages](../../ui/storybook/stories/composer-queued-messages.stories.tsx) (current), [Surfaces/Interrupt Handoff](../../ui/storybook/stories/interrupt-handoff.stories.tsx) (unreviewed) -- `steering/stop-and-pause`: [Composer/Paused task takeover](../../ui/storybook/stories/paused-composer.stories.tsx) (historical), [Composer/Execution controls](../../ui/storybook/stories/task-execution-controls.stories.tsx) (current) +- `steering/queue`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current) +- `steering/edit-order-discard`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current) +- `steering/steer`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current) +- `steering/interrupt`: [Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages](../../ui/storybook/stories/steering/composer-queued-messages.stories.tsx) (current), [Tasks and conversations/Steering and queued messages/Surfaces/Interrupt Handoff](../../ui/storybook/stories/steering/interrupt-handoff.stories.tsx) (unreviewed) +- `steering/stop-and-pause`: [Tasks and conversations/Steering and queued messages/Composer/Paused task takeover](../../ui/storybook/stories/steering/paused-composer.stories.tsx) (historical), [Tasks and conversations/Steering and queued messages/Composer/Execution controls](../../ui/storybook/stories/steering/task-execution-controls.stories.tsx) (current) - `steering/drafts`: No cataloged story. - `steering/approval-queue`: No cataloged story. -- `task-coordination/delegation`: [Issue Detail/Plan Decompositions](../../ui/storybook/stories/issue-plan-decompositions.stories.tsx) (unreviewed), [UX Labs/Tasks Created From a Task](../../ui/storybook/stories/originating-tasks.stories.tsx) (unreviewed), [UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/sub-issues-workflow.stories.tsx) (unreviewed) -- `task-coordination/dependencies`: [Product/Issue/Blocked notice](../../ui/storybook/stories/issue-blocked-notice.stories.tsx) (unreviewed), [UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/sub-issues-workflow.stories.tsx) (unreviewed) -- `task-coordination/signoff`: [Product/Decisions/Stalled review actions](../../ui/storybook/stories/issue-review-panel.stories.tsx) (unreviewed) -- `task-coordination/tree-control`: [Product/Issue Monitor surfaces](../../ui/storybook/stories/monitor-surfaces.stories.tsx) (unreviewed), [Product/Task Watchdog surfaces](../../ui/storybook/stories/task-watchdog-surfaces.stories.tsx) (unreviewed) -- `tasks/create`: [Composer/Add menu](../../ui/storybook/stories/composer-add-menu.stories.tsx) (unreviewed), [Composer/Mobile assignee picker](../../ui/storybook/stories/composer-mobile-assignee.stories.tsx) (unreviewed), [Composer/Model and effort picker](../../ui/storybook/stories/composer-model-picker.stories.tsx) (mixed), [Product/Dialogs & Modals](../../ui/storybook/stories/dialogs-modals.stories.tsx) (unreviewed), [Components/Entity pickers/Mobile](../../ui/storybook/stories/mobile-entity-pickers.stories.tsx) (unreviewed), [Composer/New task](../../ui/storybook/stories/new-task-composer.stories.tsx) (current), [Primary Agent/00 Review guide](../../ui/storybook/stories/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Primary Agent/01 Components](../../ui/storybook/stories/primary-agent/01-components.stories.tsx) (unreviewed), [Primary Agent/02 Sidebar](../../ui/storybook/stories/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Primary Agent/03 Agents](../../ui/storybook/stories/primary-agent/03-agents.stories.tsx) (unreviewed), [Primary Agent/04 New task](../../ui/storybook/stories/primary-agent/04-new-task.stories.tsx) (unreviewed), [Primary Agent/05 Chat](../../ui/storybook/stories/primary-agent/05-chat.stories.tsx) (unreviewed), [Primary Agent/06 Journeys](../../ui/storybook/stories/primary-agent/06-journeys.stories.tsx) (unreviewed), [Primary Agent/07 Confirmation](../../ui/storybook/stories/primary-agent/07-confirmation.stories.tsx) (unreviewed) -- `tasks/organize`: [Product/Control Plane Surfaces](../../ui/storybook/stories/control-plane-surfaces.stories.tsx) (unreviewed), [Product/Issue Management](../../ui/storybook/stories/issue-management.stories.tsx) (unreviewed) -- `tasks/properties`: [Foundations/External Objects](../../ui/storybook/stories/external-objects.stories.tsx) (unreviewed), [Product/Issue Management](../../ui/storybook/stories/issue-management.stories.tsx) (unreviewed), [Private tasks/00 Review guide](../../ui/storybook/stories/private-tasks/00-review-guide.stories.tsx) (unreviewed), [Private tasks/01 Creation](../../ui/storybook/stories/private-tasks/01-creation.stories.tsx) (unreviewed), [Private tasks/02 Sharing](../../ui/storybook/stories/private-tasks/02-sharing.stories.tsx) (unreviewed), [Private tasks/03 Task actions](../../ui/storybook/stories/private-tasks/03-task-actions.stories.tsx) (unreviewed), [Private tasks/04 References and blockers](../../ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx) (unreviewed), [Private tasks/05 Projects](../../ui/storybook/stories/private-tasks/05-projects.stories.tsx) (unreviewed), [Private tasks/06 Full product pages](../../ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Private tasks/07 User stories](../../ui/storybook/stories/private-tasks/07-user-stories.stories.tsx) (unreviewed) -- `tasks/discussion`: [Tasks/Browser Use/Task activity](../../ui/storybook/stories/browser-use-activity.stories.tsx) (unreviewed), [Tasks/Browser Use/Footer](../../ui/storybook/stories/browser-use-footer.stories.tsx) (unreviewed), [Tasks/Browser Use/Panel](../../ui/storybook/stories/browser-use.stories.tsx) (unreviewed), [Product/Chat & Comments](../../ui/storybook/stories/chat-comments.stories.tsx) (unreviewed), [Tasks/Completed activity preview](../../ui/storybook/stories/completed-activity.stories.tsx) (current), [Tasks/Runner activity preview](../../ui/storybook/stories/runner-activity.stories.tsx) (current), [Tasks/Task chat review fixes](../../ui/storybook/stories/task-chat-chain-of-thought.stories.tsx) (unreviewed), [Task chat/Mobile streaming follow](../../ui/storybook/stories/task-chat-mobile-follow.stories.tsx) (unreviewed), [Product/Task chat/System notice](../../ui/storybook/stories/task-chat-system-notice.stories.tsx) (unreviewed), [Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/task-chat-unanswered-questions.stories.tsx) (unreviewed), [Tasks/Context notices](../../ui/storybook/stories/task-context-notices.stories.tsx) (unreviewed), [Chat & Comments/Human identity/00 Review guide](../../ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx) (unreviewed), [Chat & Comments/Human identity/01 Components](../../ui/storybook/stories/thread-human-identity/01-components.stories.tsx) (unreviewed), [Chat & Comments/Human identity/02 Mixed-author journey](../../ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx) (unreviewed) -- `tasks/completion`: [Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/assigned-backlog-safeguards.stories.tsx) (unreviewed), [Paperclip/Successful Run Handoff](../../ui/storybook/stories/successful-run-handoff.stories.tsx) (unreviewed) -- `teams/discovery`: [Surfaces/Team Catalog](../../ui/storybook/stories/team-catalog.stories.tsx) (unreviewed) -- `teams/preview`: [Surfaces/Team Catalog](../../ui/storybook/stories/team-catalog.stories.tsx) (unreviewed) +- `task-coordination/delegation`: [Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions](../../ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task](../../ui/storybook/stories/task-coordination/originating-tasks.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx) (unreviewed) +- `task-coordination/dependencies`: [Projects and execution/Recovery/Product/Issue/Blocked notice](../../ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist](../../ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx) (unreviewed) +- `task-coordination/signoff`: [Tasks and conversations/Delegation, dependencies, and signoff/Product/Decisions/Stalled review actions](../../ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx) (unreviewed) +- `task-coordination/tree-control`: [Tasks and conversations/Delegation, dependencies, and signoff/Product/Issue Monitor surfaces](../../ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx) (unreviewed), [Tasks and conversations/Delegation, dependencies, and signoff/Product/Task Watchdog surfaces](../../ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx) (unreviewed) +- `tasks/create`: [Tasks and conversations/Task creation and lifecycle/Composer/Add menu](../../ui/storybook/stories/tasks/composer-add-menu.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker](../../ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker](../../ui/storybook/stories/tasks/composer-model-picker.stories.tsx) (mixed), [Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals](../../ui/storybook/stories/tasks/dialogs-modals.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Components/Entity pickers/Mobile](../../ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Composer/New task](../../ui/storybook/stories/tasks/new-task-composer.stories.tsx) (current), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide](../../ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components](../../ui/storybook/stories/agents/primary-agent/01-components.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar](../../ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents](../../ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task](../../ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat](../../ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys](../../ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx) (unreviewed), [Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation](../../ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx) (unreviewed) +- `tasks/organize`: [Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces](../../ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Issue Management](../../ui/storybook/stories/tasks/issue-management.stories.tsx) (unreviewed) +- `tasks/properties`: [Tasks and conversations/Task creation and lifecycle/External Objects](../../ui/storybook/stories/tasks/external-objects.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Issue Management](../../ui/storybook/stories/tasks/issue-management.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/00 Review guide](../../ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/01 Creation](../../ui/storybook/stories/access/private-tasks/01-creation.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/02 Sharing](../../ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/03 Task actions](../../ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers](../../ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/05 Projects](../../ui/storybook/stories/access/private-tasks/05-projects.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages](../../ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx) (unreviewed), [Getting started and access/Login, invitations, and access/Private tasks/07 User stories](../../ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx) (unreviewed) +- `tasks/discussion`: [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity](../../ui/storybook/stories/workspaces/browser-use-activity.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer](../../ui/storybook/stories/workspaces/browser-use-footer.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel](../../ui/storybook/stories/workspaces/browser-use.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments](../../ui/storybook/stories/tasks/chat-comments.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview](../../ui/storybook/stories/tasks/completed-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview](../../ui/storybook/stories/tasks/runner-activity.stories.tsx) (current), [Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes](../../ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Task chat/Mobile streaming follow](../../ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Product/Task chat/System notice](../../ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx) (unreviewed), [Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions](../../ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Tasks/Context notices](../../ui/storybook/stories/tasks/task-context-notices.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/00 Review guide](../../ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/01 Components](../../ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/02 Mixed-author journey](../../ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx) (unreviewed) +- `tasks/completion`: [Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards](../../ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx) (unreviewed), [Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff](../../ui/storybook/stories/tasks/successful-run-handoff.stories.tsx) (unreviewed) +- `teams/discovery`: [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) (unreviewed) +- `teams/preview`: [Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog](../../ui/storybook/stories/teams/team-catalog.stories.tsx) (unreviewed) - `teams/install`: No cataloged story. - `teams/configuration`: No cataloged story. -- `workspaces/binding`: [Product/Projects Goals Workspaces](../../ui/storybook/stories/projects-goals-workspaces.stories.tsx) (unreviewed), [Components/SearchableSelect/Workspace picker](../../ui/storybook/stories/searchable-select.stories.tsx) (unreviewed) -- `workspaces/provisioning`: [Workspaces/Project runtime provision command](../../ui/storybook/stories/project-execution-workspace-strategy.stories.tsx) (unreviewed), [Workspaces/Runtime provisioning status](../../ui/storybook/stories/workspace-runtime-provisioning.stories.tsx) (unreviewed) -- `workspaces/services`: [Tasks/Browser Use/Task activity](../../ui/storybook/stories/browser-use-activity.stories.tsx) (unreviewed), [Tasks/Browser Use/Footer](../../ui/storybook/stories/browser-use-footer.stories.tsx) (unreviewed), [Tasks/Browser Use/Panel](../../ui/storybook/stories/browser-use.stories.tsx) (unreviewed), [Workspaces/Service control bar](../../ui/storybook/stories/workspace-service-control-bar.stories.tsx) (unreviewed) -- `workspaces/files-git`: [HTML artifacts/01 Preview](../../ui/storybook/stories/html-artifacts/01-preview.stories.tsx) (unreviewed), [HTML artifacts/02 Workspace](../../ui/storybook/stories/html-artifacts/02-workspace.stories.tsx) (unreviewed), [HTML artifacts/03 Task journey](../../ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx) (unreviewed), [Issue/Workspace File Browser](../../ui/storybook/stories/workspace-file-browser.stories.tsx) (unreviewed) +- `workspaces/binding`: [Projects and execution/Projects and repositories/Product/Projects Goals Workspaces](../../ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Components/SearchableSelect/Workspace picker](../../ui/storybook/stories/workspaces/searchable-select.stories.tsx) (unreviewed) +- `workspaces/provisioning`: [Projects and execution/Projects and repositories/Workspaces/Project runtime provision command](../../ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Workspaces/Runtime provisioning status](../../ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx) (unreviewed) +- `workspaces/services`: [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity](../../ui/storybook/stories/workspaces/browser-use-activity.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer](../../ui/storybook/stories/workspaces/browser-use-footer.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel](../../ui/storybook/stories/workspaces/browser-use.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Workspaces/Service control bar](../../ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx) (unreviewed) +- `workspaces/files-git`: [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview](../../ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace](../../ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx) (unreviewed), [Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey](../../ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx) (unreviewed), [Projects and execution/Workspaces, services, and files/Issue/Workspace File Browser](../../ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx) (unreviewed) - `workspaces/closure`: No cataloged story. diff --git a/maps/storybook-map/README.md b/maps/storybook-map/README.md index 528e9f5721..1351a22b78 100644 --- a/maps/storybook-map/README.md +++ b/maps/storybook-map/README.md @@ -25,6 +25,24 @@ is its primary home; remaining capabilities are lookup references, not copies. Foundations/guides and proposals without a mapped capability need an exception reason. An absent story is not automatically a feature gap. +## Folders and sidebar + +Story files live in `ui/storybook/stories//`, using the first +capability's area slug. Related capabilities still point to the same story. Shared +fixture modules and assets live in `ui/storybook/support/`; production wrappers in +`ui/storybook/prototypes/` retain their existing ownership. + +The sidebar follows the section and feature names in the feature-map README, then +retains each suite's useful scenario grouping. Foundations contains shared component +examples with no primary product capability. Overview contains the catalog guide. +Areas with no stories do not get empty sidebar folders. + +Each suite declares an explicit CSF `id`, recorded as `stableId` in the catalog. +The `sidebarTitle` can change without changing that identity. Existing story and +autodocs URLs and screenshot names remain valid. Do not derive a replacement ID +from a newly organized title. The checker rejects missing or changed explicit IDs, +incorrect feature folders, and sidebar titles outside their primary feature home. + Each entry records purpose, capability references, review sources/date/fingerprint, notes, and three independent dimensions: diff --git a/maps/storybook-map/REVIEW.md b/maps/storybook-map/REVIEW.md index a98ce00134..a914397c46 100644 --- a/maps/storybook-map/REVIEW.md +++ b/maps/storybook-map/REVIEW.md @@ -7,17 +7,17 @@ coverage, or production acceptance for all stories. ## Inventory and organization -There is one Storybook, already centralized under `ui/storybook/`. Its 223 story -files are split between 176 files at the stories root and 47 nested files. The -existing sidebar has 51 top-level groups. A bulk file move would add churn without -fixing the main problem: product meaning, provenance, and review status were not -recorded consistently. +There is one Storybook, already centralized under `ui/storybook/`. At the initial +baseline, its 223 story files were split between 176 files at the stories root and +47 nested files, with 51 top-level sidebar groups. The initial pass recorded +product meaning, provenance, and review status before changing that organization. +The follow-up organization pass below moves the files and sidebar together. The downstream catalog gives each file a primary feature home and related stable capability IDs. The generated index includes all 171 upstream capabilities across 35 feature areas. The existing Overview story now provides searchable feature -navigation into the actual built story index. Existing sidebar titles remain -stable to preserve links and snapshot identity. +navigation into the actual built story index. The initial pass kept sidebar titles +stable; the follow-up uses explicit IDs to preserve links while changing titles. | Dimension | Initial classification | | --- | --- | @@ -101,6 +101,41 @@ guide classification. This records change detection, not new parity acceptance. Added a real CSF parser regression for nested discovery, include/exclude rules, stable explicit IDs, and play counts. +## Feature organization follow-up — 2026-10-12 + +Source baseline: `75bd3c977cd828d5222823850339e8204f40eb47` (parent PR #16046). +The 223 story files now live under their primary feature area in +`ui/storybook/stories/`. The sidebar uses the feature map's section and feature +labels in map order. Existing scenario groups remain below those labels. +Overview and shared Foundations have dedicated homes. Areas without stories do +not get empty sidebar groups; their gaps remain visible in the catalog. + +Nineteen supporting files moved to `ui/storybook/support/`, including fixtures, +shared wrappers, guide READMEs, an HTML fixture, and a fixture test. Relative imports, +active documentation, catalog sources, and replacement references follow the +moves. Classification and review scope did not change. The upstream feature map +and its skill are unchanged. + +Every suite now has an explicit meta ID, recorded as `stableId` in the catalog. +The built index comparison preserved all 2,210 story IDs, the single docs ID, and +all entry names. No story was removed or added. Catalog validation checks primary +feature folders, sidebar prefixes, and stable meta IDs; its nine tests passed. + +The Storybook build, UI typecheck, all 8,176 UI tests in 728 files, token gates, +map checks, and the maintenance-skill validator passed. A source comparison found +only changed meta titles/IDs, rebased relative references, and updated fixture +path text in story files. The full repository suite was not repeated for these +file moves; the prior full-suite limitation above still applies. + +Local Chromium verified the sidebar's section/feature order, rendered the guide, +searched `steering/queue`, and followed its link to the unchanged +`composer-steering-and-queued-messages--queued-while-running` ID. The nine play +cases listed above and `fast-responses-01-settings--empty` all reached +`storyFinished: success` without page exceptions after relocation. This is a +sample of interactions and rendering, not execution of all 2,210 stories. +The fixture-server story and visual-baseline comparisons remain untested for the +reasons below. The owned static preview was left running for the requested test-drive. + ## Remaining review work 1. Review the 188 unreviewed suites by capability and production subject. Compare diff --git a/maps/storybook-map/catalog.json b/maps/storybook-map/catalog.json index f5f709d681..3bdb0a3416 100644 --- a/maps/storybook-map/catalog.json +++ b/maps/storybook-map/catalog.json @@ -4,13 +4,14 @@ "sources": [ "ui/storybook/.storybook/main.ts", "ui/storybook/.storybook/preview.tsx", - "ui/storybook/fixtures/paperclipData.ts" + "ui/storybook/fixtures/paperclipData.ts", + "maps/feature-map/README.md" ], - "fingerprint": "0faabc5a8874f37674125d28314833c6a1e99c804d929a6d1e7f7917109eca0a" + "fingerprint": "eb37e5c7110df7804ffabbd4784bd78cf1f5d31a858bdcb8db7080cfa02b7f0b" }, "entries": [ { - "file": "ui/storybook/stories/AppLogoRegistry.stories.tsx", + "file": "ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx", "capabilities": [ "connection-setup/catalog" ], @@ -23,12 +24,14 @@ "sources": [ "maps/feature-map/connection-setup.md", "ui/src/pages/apps/AppLogo.tsx", - "ui/storybook/stories/AppLogoRegistry.stories.tsx" + "ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx" ], - "fingerprint": "e3fa28652112529c2761778f90a577aaf9f09a13ddda6d53e55679294b48b6f7" + "fingerprint": "c2cabf44446b0ae5ffba2959df65fb9aba16e635b9b5e63fa1a0e36cfb959f8b", + "stableId": "apps-canonical-icon-registry", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Canonical icon registry" }, { - "file": "ui/storybook/stories/ArcadeConnection.stories.tsx", + "file": "ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx", "capabilities": [ "connection-setup/credentials", "connection-setup/failure" @@ -47,12 +50,14 @@ "ui/src/features/connections/remote-mcp/types.ts", "ui/storybook/fixtures/remoteMcpConnections.ts", "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", - "ui/storybook/stories/ArcadeConnection.stories.tsx" + "ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx" ], - "fingerprint": "af73c5883c7a3e925f793162841c310ab72e5f32f6a4a469242391480ac2c6f8" + "fingerprint": "cb8802f6362599a2aa164520a07a15ae3d41d4ff90173cfcbb9f8b3cefae0dc4", + "stableId": "apps-connections-arcade", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade" }, { - "file": "ui/storybook/stories/ComposioConnection.stories.tsx", + "file": "ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx", "capabilities": [ "connection-setup/credentials", "connection-setup/failure" @@ -71,12 +76,14 @@ "ui/src/features/connections/remote-mcp/types.ts", "ui/storybook/fixtures/remoteMcpConnections.ts", "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", - "ui/storybook/stories/ComposioConnection.stories.tsx" + "ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx" ], - "fingerprint": "9299acfe719df8946ca3ebc03be6dfa5d851c2b1e6df0ad805a23f082fdde8e2" + "fingerprint": "f7623b707dd4982dc583621f2b7b478544b2873653eff36cb7e62e2d2d1bbce3", + "stableId": "apps-connections-composio", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Composio" }, { - "file": "ui/storybook/stories/ConnectionProviderChoice.stories.tsx", + "file": "ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx", "capabilities": [ "connection-setup/identity-and-access" ], @@ -96,12 +103,14 @@ "ui/src/features/connections/remote-mcp/types.ts", "ui/storybook/fixtures/remoteMcpConnections.ts", "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", - "ui/storybook/stories/ConnectionProviderChoice.stories.tsx" + "ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx" ], - "fingerprint": "565a8e231c737785da884ecacb7f6496e47e0adcf8c0b8b53a2e783d85431190" + "fingerprint": "046ab725fad4b30c0b6c51d0064725e9688012a67c9106290fde7cb9413c3715", + "stableId": "apps-connections-provider-choice", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Provider choice" }, { - "file": "ui/storybook/stories/ExecutorConnection.stories.tsx", + "file": "ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx", "capabilities": [ "connection-setup/credentials", "connection-setup/failure" @@ -120,12 +129,14 @@ "ui/src/features/connections/remote-mcp/types.ts", "ui/storybook/fixtures/remoteMcpConnections.ts", "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", - "ui/storybook/stories/ExecutorConnection.stories.tsx" + "ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx" ], - "fingerprint": "28ab0d5d137cf7b0f034b38b09ab70ce149fe87a80f38925b39b4ff33ea6a1ff" + "fingerprint": "4617104a6f8867e3eaa996a643bcefa03b158fe9be0c43c0d77f578da42a0cf2", + "stableId": "apps-connections-executor", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Executor" }, { - "file": "ui/storybook/stories/ZapierConnection.stories.tsx", + "file": "ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx", "capabilities": [ "connection-setup/credentials", "connection-setup/failure" @@ -144,12 +155,14 @@ "ui/src/features/connections/remote-mcp/types.ts", "ui/storybook/fixtures/remoteMcpConnections.ts", "ui/storybook/prototypes/RemoteMcpConnectionReview.tsx", - "ui/storybook/stories/ZapierConnection.stories.tsx" + "ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx" ], - "fingerprint": "07c8ba08275396b83609fe6abe9c96a8ee3e770a79ee87d3c50dc5e154739030" + "fingerprint": "6ab45d2c88183f3f63efaa1a1a6ad9eb05436f94fc4e1ba67fcfb97345ee8ffb", + "stableId": "apps-connections-zapier", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier" }, { - "file": "ui/storybook/stories/access-profiles.stories.tsx", + "file": "ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx", "capabilities": [ "gateways-profiles/profiles" ], @@ -167,12 +180,14 @@ "ui/src/pages/tools/profiles/ProfilesIndex.tsx", "ui/src/pages/tools/profiles/WizardToolsStep.tsx", "ui/src/pages/tools/profiles/profile-model.ts", - "ui/storybook/stories/access-profiles.stories.tsx" + "ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx" ], - "fingerprint": "357db52703a6de66aa349e1be6e3b63c05d63c73ebea09b8222cc029fac61bd6" + "fingerprint": "23dfe9b1750b7eae8e6eae652f820ae2ff3e1415ce1b35e27717e24c3eed681b", + "stableId": "tools-access-profiles", + "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Tools/Access profiles" }, { - "file": "ui/storybook/stories/action-card.stories.tsx", + "file": "ui/storybook/stories/app-permissions/action-card.stories.tsx", "capabilities": [ "app-permissions/test-action", "app-permissions/action-policy" @@ -186,12 +201,14 @@ "sources": [ "maps/feature-map/app-permissions.md", "ui/src/components/actions/ActionCard.tsx", - "ui/storybook/stories/action-card.stories.tsx" + "ui/storybook/stories/app-permissions/action-card.stories.tsx" ], - "fingerprint": "a6435989227e6cf87f99ba2b04e2fa530916d215af99376807954b9368d841e7" + "fingerprint": "37849ece1ec378382e41b84ee23d506ee9cbcee923e421b6fc9929fc4d420cc5", + "stableId": "tools-access-actioncard", + "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard" }, { - "file": "ui/storybook/stories/action-permissions-test.stories.tsx", + "file": "ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx", "capabilities": [ "app-permissions/test-action", "app-permissions/action-policy" @@ -205,12 +222,14 @@ "sources": [ "maps/feature-map/app-permissions.md", "ui/src/pages/apps/app-detail/PermissionsPanel.tsx", - "ui/storybook/stories/action-permissions-test.stories.tsx" + "ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx" ], - "fingerprint": "d439cc4ed01cde90656217bd21eb5252543333096f1585ed176d698073540db6" + "fingerprint": "7804d31cc4bf5fabd5191b201a85258f9d4c9a670331ac611628f8001114d687", + "stableId": "apps-action-permissions-test", + "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test" }, { - "file": "ui/storybook/stories/activity-feed.stories.tsx", + "file": "ui/storybook/stories/activity/activity-feed.stories.tsx", "capabilities": [ "activity/activity", "gateways-profiles/activity" @@ -225,12 +244,14 @@ "maps/feature-map/activity.md", "maps/feature-map/gateways-profiles.md", "ui/src/pages/tools/AuditTab.tsx", - "ui/storybook/stories/activity-feed.stories.tsx" + "ui/storybook/stories/activity/activity-feed.stories.tsx" ], - "fingerprint": "44c9670f0f93caef2fa27a2dff3068b8e8f8d5acfb04ca75605e4157e626afa2" + "fingerprint": "e38af3b7963caf0cc3b13f7681da370a579f97ad78a6064559fbb18aeb73b4ed", + "stableId": "tools-activity-audit-feed", + "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)" }, { - "file": "ui/storybook/stories/agent-chat-sidebar.stories.tsx", + "file": "ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx", "capabilities": [ "agent-chat/discovery", "agent-chat/history" @@ -258,12 +279,14 @@ "ui/storybook/prototypes/agent-chat/AgentChatPrototype.tsx", "ui/storybook/prototypes/agent-chat/AgentChatSidebar.tsx", "ui/storybook/prototypes/chat-entry/ChatEntryReview.tsx", - "ui/storybook/stories/agent-chat-sidebar.stories.tsx" + "ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx" ], - "fingerprint": "06118dfa08dfe635b484e629cd7c0f60b2659362a364586dd0769274dcf7d835" + "fingerprint": "aeea37e51418ab1d78eca93cfd4b51636941ac22c8dbadf7fe1a70de74b7ae8b", + "stableId": "design-explorations-agent-chat-sidebar-pages", + "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages" }, { - "file": "ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx", "capabilities": [ "questions-and-approvals/dismiss-and-reopen", "agent-chat/history" @@ -280,12 +303,14 @@ "ui/src/components/TaskChatThread.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/unansweredQuestionChat.tsx", - "ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx" + "ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx" ], - "fingerprint": "f7d8eae40ddb9ce46bac841a84f56f334be3d84b4cd3a29e9e2d0be29bba210c" + "fingerprint": "a55976ae6cf404c1febe64fb674e1096e8e58dc0360001a5a12af202e0b40908", + "stableId": "chat-comments-agent-chat-unanswered-questions", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions" }, { - "file": "ui/storybook/stories/agent-chat.stories.tsx", + "file": "ui/storybook/stories/agent-chat/agent-chat.stories.tsx", "capabilities": [ "agent-chat/discovery", "agent-chat/history" @@ -313,12 +338,14 @@ "ui/storybook/prototypes/agent-chat/AgentChatPrototype.tsx", "ui/storybook/prototypes/agent-chat/AgentChatSidebar.tsx", "ui/storybook/prototypes/chat-entry/ChatEntryReview.tsx", - "ui/storybook/stories/agent-chat.stories.tsx" + "ui/storybook/stories/agent-chat/agent-chat.stories.tsx" ], - "fingerprint": "fb9e699105a458fb3d5737cb56fdbe9fe2d2d057263866a151eca5b3027706f8" + "fingerprint": "b04974700adf2b2fc95565066e4385c68979e509da1f97443ae31a653947255e", + "stableId": "design-explorations-agent-chat", + "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat" }, { - "file": "ui/storybook/stories/agent-connection-reuse.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx", "capabilities": [ "runs-adapters/validation", "agents/hire" @@ -334,12 +361,14 @@ "maps/feature-map/runs-adapters.md", "ui/src/components/new-agent/AgentProviderConnection.tsx", "ui/storybook/fixtures/onboardingEnvironment.ts", - "ui/storybook/stories/agent-connection-reuse.stories.tsx" + "ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx" ], - "fingerprint": "47e8cbed9e9c4c8ee2c8f81a9c21c60ba9eec566927c5338e288358d3309daca" + "fingerprint": "4dfc350a48d8f378eabf1b7785d1b867541121fa7715da5fd9812b28a0288d9b", + "stableId": "onboarding-saved-connections", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections" }, { - "file": "ui/storybook/stories/agent-conversation-sidebar.stories.tsx", + "file": "ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx", "capabilities": [ "agent-chat/discovery", "agent-chat/history" @@ -356,12 +385,14 @@ "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/prototypes/agent-chat-sidebar/AgentConversationSidebar.tsx", "ui/storybook/prototypes/agent-chat-sidebar/fixtures.ts", - "ui/storybook/stories/agent-conversation-sidebar.stories.tsx" + "ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx" ], - "fingerprint": "2487bb6ec01cd75131317b2739088256dabd217227b2af11d62590c31a9b3e14" + "fingerprint": "2a57c402c2036a5c934b9d8da71699b3c4c93f023d12b9f80834b04fd16a4d7e", + "stableId": "design-explorations-agent-chat-sidebar-components", + "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components" }, { - "file": "ui/storybook/stories/agent-detail.stories.tsx", + "file": "ui/storybook/stories/agents/agent-detail.stories.tsx", "capabilities": [ "agents/lifecycle", "agents/instructions" @@ -376,12 +407,14 @@ "maps/feature-map/agents.md", "ui/src/pages/AgentDetail.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agent-detail.stories.tsx" + "ui/storybook/stories/agents/agent-detail.stories.tsx" ], - "fingerprint": "2764437abfbc3c215e400ad167c45927f4a77d5aa978a2f0d267918008ffbea2" + "fingerprint": "11057146b400c257fbdc3ec5c20da9b55eacc6735121632f2fa55e72af29e777", + "stableId": "pages-agent-detail", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail" }, { - "file": "ui/storybook/stories/agent-files.stories.tsx", + "file": "ui/storybook/stories/agents/agent-files.stories.tsx", "capabilities": [ "agents/instructions" ], @@ -395,12 +428,14 @@ "maps/feature-map/agents.md", "ui/src/pages/AgentDetail.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agent-files.stories.tsx" + "ui/storybook/stories/agents/agent-files.stories.tsx" ], - "fingerprint": "98f8c49c2ae6b814d58948151b9d448b2ee527c8aba505682e7c4c218f66f7b3" + "fingerprint": "d7976922e4431b6432f966c2f120b9a57f66437bfe519694007d76a790318043", + "stableId": "agents-persistent-files", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Persistent files" }, { - "file": "ui/storybook/stories/agent-management.stories.tsx", + "file": "ui/storybook/stories/agents/agent-management.stories.tsx", "capabilities": [ "agents/lifecycle", "agents/instructions" @@ -421,12 +456,14 @@ "ui/src/components/agent-config-defaults.ts", "ui/src/components/agent-config-primitives.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agent-management.stories.tsx" + "ui/storybook/stories/agents/agent-management.stories.tsx" ], - "fingerprint": "16725cb4e0337cd38458dbc497c614de2252b564afc80648c7311c36bfa2ad11" + "fingerprint": "f6dbb548bf03324350a3658ce6e724d88d04535b1d7e4a647492f21ff64cc332", + "stableId": "product-agent-management", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management" }, { - "file": "ui/storybook/stories/agent-persona-pages.stories.tsx", + "file": "ui/storybook/stories/agents/agent-persona-pages.stories.tsx", "capabilities": [ "agents/organization", "navigation-preferences/profile" @@ -448,12 +485,14 @@ "ui/src/pages/IssueDetail.tsx", "ui/src/pages/NewAgent.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agent-persona-pages.stories.tsx" + "ui/storybook/stories/agents/agent-persona-pages.stories.tsx" ], - "fingerprint": "e32cbe590cef4e26e04dad1207814c21321c97b9e227b80867dd8643351e6671" + "fingerprint": "4c76c6a1c6f5ac036140b649bcf8a0a02978273550a8f784d772a8756358b34a", + "stableId": "agents-personas-full-pages", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages" }, { - "file": "ui/storybook/stories/agent-personas.stories.tsx", + "file": "ui/storybook/stories/agents/agent-personas.stories.tsx", "capabilities": [ "agents/organization", "navigation-preferences/profile" @@ -471,12 +510,14 @@ "ui/src/components/AgentCharacter.tsx", "ui/src/components/AgentIdentity.tsx", "ui/src/components/ui/button.tsx", - "ui/storybook/stories/agent-personas.stories.tsx" + "ui/storybook/stories/agents/agent-personas.stories.tsx" ], - "fingerprint": "03774c3aa9c051aedd0b06603e2f11b79ef2ab46f4fe36f3de3cca8b20779630" + "fingerprint": "0b6f1811a05f57c3f87f45072d762f5c7fb613d82ddf1967553f0f0f78e9a4fe", + "stableId": "agents-personas", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas" }, { - "file": "ui/storybook/stories/agent-settings-redesign.stories.tsx", + "file": "ui/storybook/stories/agents/agent-settings-redesign.stories.tsx", "capabilities": [ "agents/lifecycle", "agents/instructions" @@ -505,12 +546,14 @@ "ui/storybook/prototypes/agent-settings/AgentSettingsPreview.tsx", "ui/storybook/prototypes/agent-settings/fixtures.ts", "ui/storybook/prototypes/new-agent-fixtures.ts", - "ui/storybook/stories/agent-settings-redesign.stories.tsx" + "ui/storybook/stories/agents/agent-settings-redesign.stories.tsx" ], - "fingerprint": "68fb03c2e0b52e178b3e4a31330a23de8a6568e683d7b6c1e0288fa9e8817cef" + "fingerprint": "0d438c68efa2c8b29d359c95944bc7aa55bd90808ea4f6229f144ffb4a16ffe4", + "stableId": "agents-configuration-refresh", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh" }, { - "file": "ui/storybook/stories/agent-setup-prompt.stories.tsx", + "file": "ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx", "capabilities": [ "connection-setup/channel-setup", "gateways-profiles/client-connect" @@ -533,12 +576,14 @@ "ui/src/pages/tools/McpConfigHelpDialog.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/routineTriggerWizard.tsx", - "ui/storybook/stories/agent-setup-prompt.stories.tsx" + "ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx" ], - "fingerprint": "fc121ecd05c89050c58aa621dc8fded8b5cf0573a1190bacca73e31c560421f9" + "fingerprint": "5628f9ddbb4484f964e4b95d3c342e982f9b10e1c39e8cfbaa49a0ab2cb2a484", + "stableId": "components-agent-setup-prompt", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Components/Agent setup prompt" }, { - "file": "ui/storybook/stories/agent-skill-row.stories.tsx", + "file": "ui/storybook/stories/skills/agent-skill-row.stories.tsx", "capabilities": [ "skills/policy" ], @@ -552,12 +597,14 @@ "maps/feature-map/skills.md", "ui/src/components/icons/github-icon.tsx", "ui/src/pages/agent-skills/AgentSkillRow.tsx", - "ui/storybook/stories/agent-skill-row.stories.tsx" + "ui/storybook/stories/skills/agent-skill-row.stories.tsx" ], - "fingerprint": "b7d7b0f600d8cfbc93b410283bd9ed5340c18a71e3943036d796755d6c8fd996" + "fingerprint": "4eeb2029b5b1002afe393ab41da89a949c28d955130caa9feee4068b4b63fd2f", + "stableId": "agent-skills-agentskillrow", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Agent Skills/AgentSkillRow" }, { - "file": "ui/storybook/stories/agent-skills-edge.stories.tsx", + "file": "ui/storybook/stories/skills/agent-skills-edge.stories.tsx", "capabilities": [ "skills/policy" ], @@ -570,12 +617,14 @@ "sources": [ "maps/feature-map/skills.md", "ui/src/pages/agent-skills/AgentSkillsTab.tsx", - "ui/storybook/stories/agent-skills-edge.stories.tsx" + "ui/storybook/stories/skills/agent-skills-edge.stories.tsx" ], - "fingerprint": "5132a7175c3065dba3d329ab7e7307f54e84834c378c3ffaa81265501d8e69e9" + "fingerprint": "e2beaa5b5d5fb0b9ee34935d05548d0448c250129b3c2377eb7973f284fdc452", + "stableId": "qa-agent-skills-edge-states", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/QA / Agent skills edge states" }, { - "file": "ui/storybook/stories/agentmail-onboarding.stories.tsx", + "file": "ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx", "capabilities": [ "chat-channels/providers", "connection-setup/channel-setup" @@ -592,12 +641,14 @@ "ui/src/components/chat/ChatSetupNavigation.tsx", "ui/src/pages/apps/chat/EmailEndpointSetup.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/agentmail-onboarding.stories.tsx" + "ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx" ], - "fingerprint": "464f6dee03ed94915bf3156bb2aa97401e180bf5db43c82bceaa6bb9a7887c66" + "fingerprint": "a1d017e03f98f45224826a5c6a2bebeecb8a9fc42eba667a8164d0be6168f735", + "stableId": "connections-agentmail-setup", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/AgentMail setup" }, { - "file": "ui/storybook/stories/agentmail-settings.stories.tsx", + "file": "ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx", "capabilities": [ "chat-channels/lifecycle" ], @@ -610,12 +661,14 @@ "sources": [ "maps/feature-map/chat-channels.md", "ui/src/pages/apps/chat/EmailEndpointSetup.tsx", - "ui/storybook/stories/agentmail-settings.stories.tsx" + "ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx" ], - "fingerprint": "ba24f131f18b10d82bf6f9fac575deace7f768826c87be7802c3d13754b32a33" + "fingerprint": "1fda3e7570e13c73c9bb9908efe05508e3eb14c716a7c9462ae6a370b77b5a5c", + "stableId": "connections-agentmail-settings", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/AgentMail settings" }, { - "file": "ui/storybook/stories/agentmail.stories.tsx", + "file": "ui/storybook/stories/chat-channels/agentmail.stories.tsx", "capabilities": [ "chat-channels/conversation" ], @@ -632,12 +685,14 @@ "ui/src/components/task-chat/TaskChatBubble.tsx", "ui/src/components/task-chat/TaskChatComposer.tsx", "ui/src/components/task-chat/presentation-mode.tsx", - "ui/storybook/stories/agentmail.stories.tsx" + "ui/storybook/stories/chat-channels/agentmail.stories.tsx" ], - "fingerprint": "2fdb42f80a884f88df3cc3d6c2ad943a0d3795e6211419dbc3de65e87171605e" + "fingerprint": "9f476aac6ea2ecd4a5cb72226b460fc1c78e3bfda05926d6bfd1b8581e68fdcd", + "stableId": "connections-agentmail-tasks", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/AgentMail tasks" }, { - "file": "ui/storybook/stories/agents-using-skill.stories.tsx", + "file": "ui/storybook/stories/skills/agents-using-skill.stories.tsx", "capabilities": [ "skills/policy" ], @@ -650,12 +705,14 @@ "sources": [ "maps/feature-map/skills.md", "ui/src/components/skill-studio/AgentsUsingSkillDialog.tsx", - "ui/storybook/stories/agents-using-skill.stories.tsx" + "ui/storybook/stories/skills/agents-using-skill.stories.tsx" ], - "fingerprint": "5e5234b76008eb043c0f5eface1a5d517acd5c9bcd8eb2bafdba52dbf9d326a0" + "fingerprint": "28d0e3a9ffe07d1c48b2e7e73cd67df55047c47cec1163779d1a9c46beb981ef", + "stableId": "skill-studio-agentsusingskill", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/AgentsUsingSkill" }, { - "file": "ui/storybook/stories/ai-connection-usage.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -669,12 +726,14 @@ "maps/feature-map/runs-adapters.md", "ui/src/components/ai-connections/ManagedAiConnectionDetails.tsx", "ui/storybook/prototypes/AiConnectionUsageReview.tsx", - "ui/storybook/stories/ai-connection-usage.stories.tsx" + "ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx" ], - "fingerprint": "4efd03cf0c2db2db7e6e0ab7355a228601f310796c503ae5bb4af1114a428173" + "fingerprint": "0b03669a6abba327c01222793a41d898958d50a483ed1a2e842c195484cb33ec", + "stableId": "ai-connections-usage-limits", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Usage limits" }, { - "file": "ui/storybook/stories/ai-connections.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/ai-connections.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -704,12 +763,14 @@ "ui/storybook/prototypes/AiConnectorPages.tsx", "ui/storybook/prototypes/AiReviewFrame.tsx", "ui/storybook/prototypes/AiTaskConnectionReview.tsx", - "ui/storybook/stories/ai-connections.stories.tsx" + "ui/storybook/stories/runs-adapters/ai-connections.stories.tsx" ], - "fingerprint": "fc716216e27fe7f4e51ce86bd85932032868845e326b7921d7d8de7e6d3694f2" + "fingerprint": "2f32110235d513dbfb6086126180d03107bc2167bc472da6280dfeb64629343a", + "stableId": "ai-connections-review", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Review" }, { - "file": "ui/storybook/stories/announcement-card.stories.tsx", + "file": "ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx", "capabilities": [ "navigation-preferences/announcements" ], @@ -722,17 +783,19 @@ "sources": [ "maps/feature-map/navigation-preferences.md", "ui/src/components/AnnouncementCard.tsx", - "ui/storybook/stories/announcement-card.stories.tsx" + "ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx" ], - "fingerprint": "bd2aa00c1b5368b969623de78f908d6c150d5c7eafa7849443619577ffda5584" + "fingerprint": "39d0cbdb22d29fee065260ad54fb01da1df21897f3228275875250793ef23bf8", + "stableId": "announcements-announcementcard", + "sidebarTitle": "Oversight and operation/Navigation, profile, and announcements/Announcements/AnnouncementCard" }, { - "file": "ui/storybook/stories/app-activity-lifecycle.stories.tsx", + "file": "ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx", "capabilities": [ "activity/activity", "gateways-profiles/activity" ], - "purpose": "Apps/App detail \u00b7 Activity (lifecycle)", + "purpose": "Apps/App detail · Activity (lifecycle)", "status": "unreviewed", "implementation": "production", "boundary": "fixtures", @@ -743,12 +806,14 @@ "maps/feature-map/gateways-profiles.md", "ui/src/pages/apps/app-detail/ActivityPanel.tsx", "ui/src/pages/apps/app-detail/types.ts", - "ui/storybook/stories/app-activity-lifecycle.stories.tsx" + "ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx" ], - "fingerprint": "2052136a7fe3aa332b62ca8f834466c6f4aadfac1132e4b0a339b5d90e4ae121" + "fingerprint": "1642f6a6692ccd3ac058d1841f388607b3379c683711bbe558aad3cc79ffc077", + "stableId": "apps-app-detail-·-activity-lifecycle", + "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)" }, { - "file": "ui/storybook/stories/apps-catalog-source-selection.stories.tsx", + "file": "ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx", "capabilities": [ "connection-setup/catalog" ], @@ -763,12 +828,14 @@ "ui/src/pages/apps/Browse.tsx", "ui/src/pages/apps/CatalogSourceFilters.tsx", "ui/storybook/prototypes/ConnectorCatalogNavigation.tsx", - "ui/storybook/stories/apps-catalog-source-selection.stories.tsx" + "ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx" ], - "fingerprint": "71108df1e0c55a7d007d5ea9524c82fbe02c1fe09681d0f42b1cc09b682459c5" + "fingerprint": "5157a890fe6825a1f89d138a582e5b11791aceef4a0d7cfb6c5cc968c06ee7f6", + "stableId": "apps-catalog-source-selection", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Catalog source selection" }, { - "file": "ui/storybook/stories/apps-connect-discoverability.stories.tsx", + "file": "ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx", "capabilities": [ "connection-setup/catalog" ], @@ -782,12 +849,14 @@ "maps/feature-map/connection-setup.md", "ui/src/pages/apps/AppsConnect.tsx", "ui/src/pages/tools/PasteConfigTab.tsx", - "ui/storybook/stories/apps-connect-discoverability.stories.tsx" + "ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx" ], - "fingerprint": "339076110e02558725fdf381a8afd22c028d6b1a2a338a4936c1fd952c4b031b" + "fingerprint": "bd84a617cba9cc83a08f36d133e954a54a8f60c94ae805382736f560e41c3bdd", + "stableId": "apps-connect-discoverability-pap-11091", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connect discoverability (PAP-11091)" }, { - "file": "ui/storybook/stories/apps-connect-name.stories.tsx", + "file": "ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx", "capabilities": [ "connection-setup/identity-and-access" ], @@ -800,12 +869,14 @@ "sources": [ "maps/feature-map/connection-setup.md", "ui/src/pages/apps/AppsConnect.tsx", - "ui/storybook/stories/apps-connect-name.stories.tsx" + "ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx" ], - "fingerprint": "b1a3c62891259a601e557401ae736ff07f36086d6590dd2c162dcdfbf64169ee" + "fingerprint": "cf644220c06d38aa70e94b35519698b7bb4f00cc0565dc7d9cd4840293d15630", + "stableId": "apps-connect-name-at-create-time-pap-11283", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connect name at create time (PAP-11283)" }, { - "file": "ui/storybook/stories/apps-managed-accounts.stories.tsx", + "file": "ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx", "capabilities": [ "app-permissions/account-maintenance" ], @@ -819,12 +890,14 @@ "maps/feature-map/app-permissions.md", "ui/src/pages/apps/Browse.tsx", "ui/storybook/prototypes/ManagedAggregatorAccounts.tsx", - "ui/storybook/stories/apps-managed-accounts.stories.tsx" + "ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx" ], - "fingerprint": "db39db8db1587a056f564aba8644046039cf05851922e4252eba654ccef67247" + "fingerprint": "a1627ade7b4327780b978e7f58fc54d70f30337ef109c8ef2afc793450045b1b", + "stableId": "apps-managed-accounts", + "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Apps/Managed accounts" }, { - "file": "ui/storybook/stories/artifact-cards/commit.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -837,13 +910,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/commit.stories.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx" + "ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx", + "ui/storybook/support/artifact-cards/storyConfig.tsx" ], - "fingerprint": "cc04cd9c903fe2481162604f9b01581f2aecbb34ffeca71b4d8f30e6a5fc4878" + "fingerprint": "7a6d3f80bcdbdc75b9d4b212ac5ad48fe33ec983cadabd2d9d8a75f4bd373ccb", + "stableId": "explorations-artifact-cards-commit", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Commit" }, { - "file": "ui/storybook/stories/artifact-cards/data.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -856,13 +931,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/data.stories.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx" + "ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx", + "ui/storybook/support/artifact-cards/storyConfig.tsx" ], - "fingerprint": "5d6b98f8eb2d9ff0c9731d1b693abab7af1249684e628db7e12bee50b140079e" + "fingerprint": "d811c07d4b2febcca8880f2cbb370d5fd6812aab11981122e1ff0cd452026ea1", + "stableId": "explorations-artifact-cards-data", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Data" }, { - "file": "ui/storybook/stories/artifact-cards/document.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -875,13 +952,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/document.stories.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx" + "ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx", + "ui/storybook/support/artifact-cards/storyConfig.tsx" ], - "fingerprint": "2da653267415c871f17d8c98e9ef2fa242ba16887f4a8d1ce36f518639b86a36" + "fingerprint": "84f56eaeecd79297c6aaef270770229d3692325313dc4838ca1bf758c518abb0", + "stableId": "explorations-artifact-cards-document", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Document" }, { - "file": "ui/storybook/stories/artifact-cards/file.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -894,13 +973,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/file.stories.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx" + "ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx", + "ui/storybook/support/artifact-cards/storyConfig.tsx" ], - "fingerprint": "ef9ef8d955bda7798faf079478bd199cfda610b4aba21b868a337708165181ea" + "fingerprint": "d2ccd3e4eb8272bfc2e54292141e6367d169979933c27f9d099e437000c5522f", + "stableId": "explorations-artifact-cards-file", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/File" }, { - "file": "ui/storybook/stories/artifact-cards/image.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -913,13 +994,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/image.stories.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx" + "ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx", + "ui/storybook/support/artifact-cards/storyConfig.tsx" ], - "fingerprint": "de8efb7cdd55182eea4864acb3cc0d780316cce1f38a098c39a18146185fd8dd" + "fingerprint": "3f56a6aa81d4ccbbd5666840bc017a813482e9a40df61c0ac18aa6d42f7c860a", + "stableId": "explorations-artifact-cards-image", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Image" }, { - "file": "ui/storybook/stories/artifact-cards/link-preview.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -932,13 +1015,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/link-preview.stories.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx" + "ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx", + "ui/storybook/support/artifact-cards/storyConfig.tsx" ], - "fingerprint": "204dd94ac390bee7999c35f16f9018f4c9375c58c4275efa54516a4f94a997f3" + "fingerprint": "30807b316e1ddc32e3288927283512507974ef537dee5d7ecb11936b6bcb7131", + "stableId": "explorations-artifact-cards-link-preview", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Link preview" }, { - "file": "ui/storybook/stories/artifact-cards/pull-request.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -951,13 +1036,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/pull-request.stories.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx" + "ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx", + "ui/storybook/support/artifact-cards/storyConfig.tsx" ], - "fingerprint": "ee061a6b23593b55d3e1faa53f29b949d4376c169154dec0d00927a191d9df0d" + "fingerprint": "21959a663489bd8ab8389ef1492a2b459c7159efa87033253d2430827f288bfc", + "stableId": "explorations-artifact-cards-pull-request", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Pull request" }, { - "file": "ui/storybook/stories/artifact-cards/video.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -970,13 +1057,15 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/artifacts/RichArtifactCards.tsx", - "ui/storybook/stories/artifact-cards/storyConfig.tsx", - "ui/storybook/stories/artifact-cards/video.stories.tsx" + "ui/storybook/support/artifact-cards/storyConfig.tsx", + "ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx" ], - "fingerprint": "4a8f4ffd72e951ef7cb7f48d93a46b333b780d135cccbacea35112c3efd784ea" + "fingerprint": "7187d0b7c3486eaa0e9b7abe375eb11db9c993701ee23edf3f1703a99c1acdd2", + "stableId": "explorations-artifact-cards-video", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Video" }, { - "file": "ui/storybook/stories/artifact-upload/01-components.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx", "capabilities": [ "documents-artifacts/attachments" ], @@ -996,14 +1085,16 @@ "ui/src/components/side-panel/types.ts", "ui/src/components/task-side-panel/TaskDocumentPanel.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/artifact-upload/01-components.stories.tsx", - "ui/storybook/stories/artifact-upload/UploadPreview.tsx", - "ui/storybook/stories/artifact-upload/fixtures.ts" + "ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx", + "ui/storybook/support/artifact-upload/UploadPreview.tsx", + "ui/storybook/support/artifact-upload/fixtures.ts" ], - "fingerprint": "a4a362aff84256bf6c9d668d1af32beacc213df283be72f0c15274e862d711d2" + "fingerprint": "97036aef581ed62b1032742741c139e710f0f2a9e634c75e507ce5dc38d938e5", + "stableId": "artifact-upload-01-artifacts-pane", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Artifact upload/01 Artifacts pane" }, { - "file": "ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx", "capabilities": [ "documents-artifacts/attachments" ], @@ -1027,14 +1118,16 @@ "ui/src/components/task-chat/TaskChatPausedTakeover.tsx", "ui/src/components/task-side-panel/TaskDocumentPanel.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx", - "ui/storybook/stories/artifact-upload/UploadPreview.tsx", - "ui/storybook/stories/artifact-upload/fixtures.ts" + "ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx", + "ui/storybook/support/artifact-upload/UploadPreview.tsx", + "ui/storybook/support/artifact-upload/fixtures.ts" ], - "fingerprint": "3234dc9f9f9f8554c70c5e47ce99e7625d9be6c18fde2f68e9919b67c94d189e" + "fingerprint": "ce98222afff00d7dfdfa7f84fd5e909bfe49fe8e5c1bd0f7f188942d11eafec7", + "stableId": "artifact-upload-02-paused-task-journey", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Artifact upload/02 Paused task journey" }, { - "file": "ui/storybook/stories/artifacts.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/artifacts.stories.tsx", "capabilities": [ "documents-artifacts/library", "documents-artifacts/work-products" @@ -1050,12 +1143,14 @@ "ui/src/components/EmptyState.tsx", "ui/src/components/artifacts/ArtifactCard.tsx", "ui/src/pages/Artifacts.tsx", - "ui/storybook/stories/artifacts.stories.tsx" + "ui/storybook/stories/documents-artifacts/artifacts.stories.tsx" ], - "fingerprint": "6849a85f6f4a0ace498ef44555703631ccef19d8d6c5bf0be77a0939a6355570" + "fingerprint": "8752ed42735eb3e31b788c3d6661109a5a1230b667575cf5b4f78ba4f2f950af", + "stableId": "pages-artifacts", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts" }, { - "file": "ui/storybook/stories/assigned-backlog-safeguards.stories.tsx", + "file": "ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx", "capabilities": [ "tasks/completion", "recovery/diagnosis" @@ -1073,12 +1168,14 @@ "ui/src/components/IssueBlockedNotice.tsx", "ui/src/components/IssueRow.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/assigned-backlog-safeguards.stories.tsx" + "ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx" ], - "fingerprint": "1bfdf9275f15aaf609ba074aee9ff5697640ce7aedf1f7442c29ba2efaab3815" + "fingerprint": "3a3610f557ca0b31528e7df0a2faf0885132ba6c947380588bc63b144c14833e", + "stableId": "paperclip-assigned-backlog-safeguards", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards" }, { - "file": "ui/storybook/stories/blocked-inbox.stories.tsx", + "file": "ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx", "capabilities": [ "inbox-search/triage", "recovery/diagnosis" @@ -1095,12 +1192,14 @@ "ui/src/components/BlockedInboxView.tsx", "ui/src/components/BlockedReasonChip.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/blocked-inbox.stories.tsx" + "ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx" ], - "fingerprint": "b3307d74bb191f0e68d92957c72583d5fbf086c8a4fd5c5a8373d9b62bf94373" + "fingerprint": "d7406369152782fe626f9be02cecde54a7abc58753fc9e5a5b0d167f2a5df3f2", + "stableId": "product-inbox-blocked-tab", + "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab" }, { - "file": "ui/storybook/stories/browser-use-activity.stories.tsx", + "file": "ui/storybook/stories/workspaces/browser-use-activity.stories.tsx", "capabilities": [ "workspaces/services", "tasks/discussion" @@ -1118,12 +1217,14 @@ "ui/src/components/task-side-panel/TaskBrowserActivity.tsx", "ui/src/components/task-side-panel/TaskBrowserPanel.tsx", "ui/storybook/fixtures/browser-use.tsx", - "ui/storybook/stories/browser-use-activity.stories.tsx" + "ui/storybook/stories/workspaces/browser-use-activity.stories.tsx" ], - "fingerprint": "f48f9bca0111f2c8724b8e6988519a2773d50bad540384e9700c2d2223989702" + "fingerprint": "0fb038daa922a0b61864f4ebf0096a50c9caf5dc290887cbf97a0bb63dad22af", + "stableId": "tasks-browser-use-task-activity", + "sidebarTitle": "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity" }, { - "file": "ui/storybook/stories/browser-use-footer.stories.tsx", + "file": "ui/storybook/stories/workspaces/browser-use-footer.stories.tsx", "capabilities": [ "workspaces/services", "tasks/discussion" @@ -1140,12 +1241,14 @@ "ui/src/components/task-side-panel/TaskBrowserFooter.tsx", "ui/src/components/task-side-panel/TaskBrowserPanel.tsx", "ui/storybook/fixtures/browser-use.tsx", - "ui/storybook/stories/browser-use-footer.stories.tsx" + "ui/storybook/stories/workspaces/browser-use-footer.stories.tsx" ], - "fingerprint": "1b526f900301f1f88da2f6407aee5aca7810febbe08ee21d2ea894caa0c1fc16" + "fingerprint": "f42487c77335ac64cbe0822c51b1706098f26d9b5823e20837089f261277fd58", + "stableId": "tasks-browser-use-footer", + "sidebarTitle": "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer" }, { - "file": "ui/storybook/stories/browser-use-settings.stories.tsx", + "file": "ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx", "capabilities": [ "connection-setup/credentials" ], @@ -1160,12 +1263,14 @@ "ui/src/components/task-side-panel/TaskBrowserPanel.tsx", "ui/src/pages/apps/app-detail/BrowserUseSettingsPanel.tsx", "ui/storybook/fixtures/browser-use.tsx", - "ui/storybook/stories/browser-use-settings.stories.tsx" + "ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx" ], - "fingerprint": "d3c1ef6ae15960f95b3f01a29015ec13f12c808b3518a09fe51f2343a6c45cf6" + "fingerprint": "03d6a432d16ecfb9bea1c75108ee7c70d23d283b47bd28f287547f4b6c23f7f3", + "stableId": "connections-browser-use-cloud-settings", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Connections/Browser Use Cloud/Settings" }, { - "file": "ui/storybook/stories/browser-use.stories.tsx", + "file": "ui/storybook/stories/workspaces/browser-use.stories.tsx", "capabilities": [ "workspaces/services", "tasks/discussion" @@ -1183,12 +1288,14 @@ "ui/src/components/task-side-panel/TaskSidePanel.tsx", "ui/storybook/fixtures/browser-use.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/browser-use.stories.tsx" + "ui/storybook/stories/workspaces/browser-use.stories.tsx" ], - "fingerprint": "c20411591b3079cb7327011443916a51814cbe08a352e43b55a5e760fb60bbcb" + "fingerprint": "ce0948c8a9dade2bcab999dccf4f5daa1ddbc4f3ecc72a70e88a1f40861d5199", + "stableId": "tasks-browser-use-panel", + "sidebarTitle": "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel" }, { - "file": "ui/storybook/stories/budget-finance.stories.tsx", + "file": "ui/storybook/stories/budgets-costs/budget-finance.stories.tsx", "capabilities": [ "budgets-costs/cost-reporting", "budgets-costs/budgets" @@ -1211,12 +1318,14 @@ "ui/src/components/FinanceKindCard.tsx", "ui/src/components/FinanceTimelineCard.tsx", "ui/src/components/ProviderQuotaCard.tsx", - "ui/storybook/stories/budget-finance.stories.tsx" + "ui/storybook/stories/budgets-costs/budget-finance.stories.tsx" ], - "fingerprint": "87b870bba22a1ce4ec0fec08bdaf04e45c5cffe47c74a3b0de4950fee8f716f3" + "fingerprint": "b71fa2f405c1d671b092bd2d86b220429819950b100c5aed3b7afb2b4efae1d3", + "stableId": "product-budget-finance", + "sidebarTitle": "Oversight and operation/Costs and budgets/Product/Budget & Finance" }, { - "file": "ui/storybook/stories/built-in-agents.stories.tsx", + "file": "ui/storybook/stories/agents/built-in-agents.stories.tsx", "capabilities": [ "agents/built-in" ], @@ -1235,12 +1344,14 @@ "ui/src/components/EntityRow.tsx", "ui/src/components/InlineBanner.tsx", "ui/src/components/StatusBadge.tsx", - "ui/storybook/stories/built-in-agents.stories.tsx" + "ui/storybook/stories/agents/built-in-agents.stories.tsx" ], - "fingerprint": "340d7f75d5e4fe1cf8a4da2de80993db12476da37f865095d85f8f3ad199d322" + "fingerprint": "10f7d4cc67fac768afe96fc635480cf9cb91cfe1f18f11ffdfd2273de8eac8a3", + "stableId": "product-built-in-agents", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Product/Built-in Agents" }, { - "file": "ui/storybook/stories/chat-comments.stories.tsx", + "file": "ui/storybook/stories/tasks/chat-comments.stories.tsx", "capabilities": [ "tasks/discussion", "runs-adapters/runs" @@ -1261,12 +1372,14 @@ "ui/src/components/MarkdownEditor.tsx", "ui/src/components/RunChatSurface.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/chat-comments.stories.tsx" + "ui/storybook/stories/tasks/chat-comments.stories.tsx" ], - "fingerprint": "42d7f459fe99fa1ffe35aca99adc7d50fbf021def17217d4d0d98a3138147545" + "fingerprint": "aae493759f1217f0805fc6a577c8c1444d95ddbc3abc08cafe7288a543020657", + "stableId": "product-chat-comments", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Chat & Comments" }, { - "file": "ui/storybook/stories/chat-connection-actions.stories.tsx", + "file": "ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx", "capabilities": [ "chat-channels/providers" ], @@ -1279,12 +1392,14 @@ "sources": [ "maps/feature-map/chat-channels.md", "ui/src/pages/apps/Browse.tsx", - "ui/storybook/stories/chat-connection-actions.stories.tsx" + "ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx" ], - "fingerprint": "584867de85a87346a449e621a647ad0560480f49c1ecb5856fc289a37efdd55d" + "fingerprint": "c80c99044431f1cfe75e7b3da1b28d776595217d5bbda14aa82c78b0b272aab0", + "stableId": "connections-chat-connection-actions", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Chat connection actions" }, { - "file": "ui/storybook/stories/chat-entry.stories.tsx", + "file": "ui/storybook/stories/agent-chat/chat-entry.stories.tsx", "capabilities": [ "agent-chat/discovery", "agent-chat/history" @@ -1312,13 +1427,15 @@ "ui/storybook/prototypes/agent-chat/AgentChatPrototype.tsx", "ui/storybook/prototypes/agent-chat/AgentChatSidebar.tsx", "ui/storybook/prototypes/chat-entry/ChatEntryReview.tsx", - "ui/storybook/stories/chat-entry.stories.tsx" + "ui/storybook/stories/agent-chat/chat-entry.stories.tsx" ], - "fingerprint": "bd01b59465cfd0306600927d9d866699aae96586d86b9d4dd62d44fb95b9e559", - "replacement": "ui/storybook/stories/primary-agent/05-chat.stories.tsx" + "fingerprint": "8e43da9f1bb33d31007ceb6adb20ed6ece6a0cbc99f87ab0cea2172d11d4d2e4", + "replacement": "ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx", + "stableId": "design-explorations-chat-entry", + "sidebarTitle": "Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry" }, { - "file": "ui/storybook/stories/chat-management/chat-management.stories.tsx", + "file": "ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx", "capabilities": [ "chat-channels/lifecycle" ], @@ -1333,12 +1450,14 @@ "ui/src/components/Layout.tsx", "ui/src/pages/apps/chat/ChatEndpointDetail.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/chat-management/chat-management.stories.tsx" + "ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx" ], - "fingerprint": "35e68e70b16c8fc6eee7d7b80b39ba0a8c06ef855b25617678e37089591e63e5" + "fingerprint": "5025a812c84d5700fea3907dd09f484ae3ded0d2f1cfc0f8e83f0fb5bc6d181e", + "stableId": "connections-chat-management", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Chat management" }, { - "file": "ui/storybook/stories/cloud-access-recovery.stories.tsx", + "file": "ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx", "capabilities": [ "recovery/reconnect" ], @@ -1351,12 +1470,14 @@ "sources": [ "maps/feature-map/recovery.md", "ui/src/components/CloudAccessGate.tsx", - "ui/storybook/stories/cloud-access-recovery.stories.tsx" + "ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx" ], - "fingerprint": "54a65a26d71cbfe2c513c7b88c93c5c3ce5cd34aa0930a992595a8506e6cc16c" + "fingerprint": "ce4f356d3f8296a2f6e3c6da8bb6b3a57866a0ad9c9e74850a76ff7fd9484b54", + "stableId": "app-connection-recovery", + "sidebarTitle": "Projects and execution/Recovery/App/Connection recovery" }, { - "file": "ui/storybook/stories/completed-activity.stories.tsx", + "file": "ui/storybook/stories/tasks/completed-activity.stories.tsx", "capabilities": [ "tasks/discussion", "runs-adapters/runs" @@ -1373,12 +1494,14 @@ "ui/src/components/task-chat/TaskChatRunnerActivityGroup.tsx", "ui/src/components/task-chat/task-chat-model.ts", "ui/storybook/prototypes/completed-activity/CompletedActivityPreview.tsx", - "ui/storybook/stories/completed-activity.stories.tsx" + "ui/storybook/stories/tasks/completed-activity.stories.tsx" ], - "fingerprint": "b402003511480056c4da8c1d21ce6965ab73affe015320448221d1a8bbe4bcff" + "fingerprint": "76af14f51a89a98ed64685cee95edb29133f31bf6f3e8356c31a3b7c7b1d00b2", + "stableId": "tasks-completed-activity-preview", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Completed activity preview" }, { - "file": "ui/storybook/stories/composer-add-menu.stories.tsx", + "file": "ui/storybook/stories/tasks/composer-add-menu.stories.tsx", "capabilities": [ "tasks/create" ], @@ -1394,12 +1517,14 @@ "ui/src/components/task-chat/TaskChatComposer.tsx", "ui/src/components/task-chat/TaskChatComposerDock.tsx", "ui/storybook/prototypes/composer-model-picker/fixtures.ts", - "ui/storybook/stories/composer-add-menu.stories.tsx" + "ui/storybook/stories/tasks/composer-add-menu.stories.tsx" ], - "fingerprint": "38fa1c5109aa9cb260b1984b63fa68a0e26060c771739013281025e5f5ba1ff4" + "fingerprint": "cad28d51256da8f82100cec8c051bb8c40af4477b6582341c9a18e2ad18ba612", + "stableId": "composer-add-menu", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/Add menu" }, { - "file": "ui/storybook/stories/composer-mobile-assignee.stories.tsx", + "file": "ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx", "capabilities": [ "tasks/create", "runs-adapters/availability" @@ -1419,12 +1544,14 @@ "ui/src/components/task-chat/composer-run-settings.ts", "ui/storybook/prototypes/composer-model-picker/ComposerRunSettingsLiveStory.tsx", "ui/storybook/prototypes/composer-model-picker/fixtures.ts", - "ui/storybook/stories/composer-mobile-assignee.stories.tsx" + "ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx" ], - "fingerprint": "36c893ca298a464eeefa476ac8fca984eee193610d071123bfbabeca347cd91c" + "fingerprint": "1288567427591ad546f49303ae7922bfd2b02c01635528cc4ae5470b926b723d", + "stableId": "composer-mobile-assignee-picker", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker" }, { - "file": "ui/storybook/stories/composer-model-picker.stories.tsx", + "file": "ui/storybook/stories/tasks/composer-model-picker.stories.tsx", "capabilities": [ "tasks/create", "runs-adapters/availability" @@ -1445,12 +1572,14 @@ "ui/storybook/prototypes/composer-model-picker/ComposerModelPickerPreview.tsx", "ui/storybook/prototypes/composer-model-picker/ComposerRunSettingsLiveStory.tsx", "ui/storybook/prototypes/composer-model-picker/fixtures.ts", - "ui/storybook/stories/composer-model-picker.stories.tsx" + "ui/storybook/stories/tasks/composer-model-picker.stories.tsx" ], - "fingerprint": "ca7bbe93d9cc0deb70b4ba628c1cce4733ee2740606da3b580edf5f1f637064e" + "fingerprint": "ecd36c7bcc1b331cc83aa50fc15bc18842e6fdb813f21889b30966c803204fcd", + "stableId": "composer-model-and-effort-picker", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker" }, { - "file": "ui/storybook/stories/composer-question-flow.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx", "capabilities": [ "questions-and-approvals/questions" ], @@ -1464,12 +1593,14 @@ "maps/feature-map/questions-and-approvals.md", "ui/src/components/task-chat/QuestionForm.tsx", "ui/src/components/task-chat/TaskChatComposer.tsx", - "ui/storybook/stories/composer-question-flow.stories.tsx" + "ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx" ], - "fingerprint": "77aefffb9459df532e75930249ac41364b2767c6a86180cb6f585b2b503397a6" + "fingerprint": "72abe627bd9ac15ef9c85219136bd36780be29d4cf042b5c26651b1df7b3a25c", + "stableId": "composer-question-flow", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Composer/Question flow" }, { - "file": "ui/storybook/stories/composer-queued-messages.stories.tsx", + "file": "ui/storybook/stories/steering/composer-queued-messages.stories.tsx", "capabilities": [ "steering/queue", "steering/edit-order-discard", @@ -1487,12 +1618,14 @@ "ui/src/components/task-chat/TaskChatComposer.tsx", "ui/src/components/task-chat/TaskChatQueuedMessages.tsx", "ui/storybook/prototypes/composer-model-picker/fixtures.ts", - "ui/storybook/stories/composer-queued-messages.stories.tsx" + "ui/storybook/stories/steering/composer-queued-messages.stories.tsx" ], - "fingerprint": "552065861fb09fde815ba7ee5474d2ac8029a8cd9709e416feab8f68bde9f665" + "fingerprint": "a411b06048a06cacf97c10f29c761c0b13f526766078955f98420d4a1530d7a2", + "stableId": "composer-steering-and-queued-messages", + "sidebarTitle": "Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages" }, { - "file": "ui/storybook/stories/connection-instructions.stories.tsx", + "file": "ui/storybook/stories/connection-setup/connection-instructions.stories.tsx", "capabilities": [ "connection-setup/credentials", "agents/instructions" @@ -1513,12 +1646,14 @@ "ui/src/pages/apps/Browse.tsx", "ui/storybook/fixtures/connectionInstructions.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/connection-instructions.stories.tsx" + "ui/storybook/stories/connection-setup/connection-instructions.stories.tsx" ], - "fingerprint": "f893e2f93a81a7dfee9bbdb283c7fe6751816895e520620ca44ac308447a6be9" + "fingerprint": "3efdccf3ef32cfd6593a9dd5490337f53be859f7b2f0ecc3d8e3e843be74c7f7", + "stableId": "design-explorations-connections-agent-instructions", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions" }, { - "file": "ui/storybook/stories/connection-pool-connector.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx", "capabilities": [ "runs-adapters/validation", "connection-setup/catalog" @@ -1538,12 +1673,14 @@ "ui/src/pages/apps/AppsConnect.tsx", "ui/src/pages/apps/Browse.tsx", "ui/storybook/prototypes/ConnectionPoolConnectorHost.tsx", - "ui/storybook/stories/connection-pool-connector.stories.tsx" + "ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx" ], - "fingerprint": "bcbb6152b8d200bc36aaffafbd7b0caf3d66d4af568f3891334c1772a9d69762" + "fingerprint": "045ed080d3c5ebecf92131e090085065ca2753ac7eadd66e3386b88542ff543c", + "stableId": "connectors-pool-host", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host" }, { - "file": "ui/storybook/stories/connection-pools.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/connection-pools.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -1562,12 +1699,14 @@ "ui/src/components/task-chat/ComposerRunSettingsPicker.tsx", "ui/src/components/task-chat/composer-run-settings.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/connection-pools.stories.tsx" + "ui/storybook/stories/runs-adapters/connection-pools.stories.tsx" ], - "fingerprint": "a86d650543360c07057740d5cc7f3e48cbee9e290b86c96adcc18158b749e130" + "fingerprint": "dd72a70a6dc0173d82c92dc9aedaba6b5e0414d2befb8a8d4ee38c5e3cce8494", + "stableId": "ai-connections-connection-pools", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Connection pools" }, { - "file": "ui/storybook/stories/connection-reviews.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx", "capabilities": [ "questions-and-approvals/tool-review", "connection-setup/task-request" @@ -1585,12 +1724,14 @@ "ui/src/components/TaskChatThread.tsx", "ui/src/pages/apps/ReviewQueueCard.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/connection-reviews.stories.tsx" + "ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx" ], - "fingerprint": "4781c70468820e516ec54b28c4aa86c892ebdd8ea7ff4d8beda7f45ce16cf52b" + "fingerprint": "749a735937db08e6c6798578b75db4e81a744f6762d2218d8e392fe9c36afad8", + "stableId": "chat-comments-connection-reviews", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews" }, { - "file": "ui/storybook/stories/control-plane-surfaces.stories.tsx", + "file": "ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx", "capabilities": [ "tasks/organize", "questions-and-approvals/governance", @@ -1616,12 +1757,14 @@ "ui/src/components/PriorityIcon.tsx", "ui/src/components/StatusBadge.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/control-plane-surfaces.stories.tsx" + "ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx" ], - "fingerprint": "48e463f33df3edee88e408325f106f057cf626392a7798db29ff21e67cc1751b" + "fingerprint": "121469a91e60dbb4e085512d86e3bd8a24b1590469d0f1321ea5e1a869df7da0", + "stableId": "product-control-plane-surfaces", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces" }, { - "file": "ui/storybook/stories/costs/subscriptions.stories.tsx", + "file": "ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx", "capabilities": [ "budgets-costs/cost-reporting", "budgets-costs/budgets" @@ -1636,12 +1779,14 @@ "maps/feature-map/budgets-costs.md", "ui/src/components/ToastViewport.tsx", "ui/src/pages/Costs.tsx", - "ui/storybook/stories/costs/subscriptions.stories.tsx" + "ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx" ], - "fingerprint": "44c98579ca40b85cc50891025e0a162475e6f9e355106a52cff2d928123b0e7f" + "fingerprint": "5663cc1d142ce63bf2c5e2edc23c19ef6b6f45fdee12cc79ad9e20446a5be5a8", + "stableId": "costs-subscriptions", + "sidebarTitle": "Oversight and operation/Costs and budgets/Costs/Subscriptions" }, { - "file": "ui/storybook/stories/credential-access/01-notice.stories.tsx", + "file": "ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx", "capabilities": [ "secrets/runtime-delivery", "recovery/diagnosis" @@ -1656,12 +1801,14 @@ "maps/feature-map/recovery.md", "maps/feature-map/secrets.md", "ui/src/components/task-chat/TaskChatMarker.tsx", - "ui/storybook/stories/credential-access/01-notice.stories.tsx" + "ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx" ], - "fingerprint": "3f39c81151efe0e2eddf5eb3b6dc8e2ebe8bba356907acf26388e7ac5803c22a" + "fingerprint": "d4d4b6098d76fa827e6529a6f071948f1f4e6a15a337da4a85ffe9f0234d8565", + "stableId": "task-credential-access-01-notice", + "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice" }, { - "file": "ui/storybook/stories/credential-access/02-task-page.stories.tsx", + "file": "ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx", "capabilities": [ "secrets/runtime-delivery", "recovery/diagnosis" @@ -1679,13 +1826,15 @@ "ui/src/pages/AgentDetail.tsx", "ui/src/pages/IssueDetail.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/credential-access/02-task-page.stories.tsx", - "ui/storybook/stories/credential-access/CredentialTaskPage.tsx" + "ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx", + "ui/storybook/support/credential-access/CredentialTaskPage.tsx" ], - "fingerprint": "dee6d9ef6fa8157814bddba5cb3b98e3fe5701c4ae0393dfa4662217f1af3ef1" + "fingerprint": "b7f5b355919f9e11c7d079955113f365d3a41e956fd6cc6746e4c3fdddae644e", + "stableId": "task-credential-access-02-task-page", + "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page" }, { - "file": "ui/storybook/stories/csv-preview.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx", "capabilities": [ "documents-artifacts/attachments" ], @@ -1699,12 +1848,14 @@ "maps/feature-map/documents-artifacts.md", "ui/src/components/task-side-panel/TaskAttachmentPanel.tsx", "ui/src/components/task-side-panel/TaskWorkspaceFilePanel.tsx", - "ui/storybook/stories/csv-preview.stories.tsx" + "ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx" ], - "fingerprint": "8dbae007bfb9b3667c2da65148ce2e9512e8db0eb95f928d2f31de629aca2652" + "fingerprint": "734738f2d9a747215f4a34baa7d448238fbfc2da7218c79b1eff8643aed6cefc", + "stableId": "components-csv-file-tab", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Components/CSV File Tab" }, { - "file": "ui/storybook/stories/data-viz-misc.stories.tsx", + "file": "ui/storybook/stories/activity/data-viz-misc.stories.tsx", "capabilities": [ "activity/overview" ], @@ -1729,12 +1880,14 @@ "ui/src/components/StatusBadge.tsx", "ui/src/components/SwipeToArchive.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/data-viz-misc.stories.tsx" + "ui/storybook/stories/activity/data-viz-misc.stories.tsx" ], - "fingerprint": "ad2d828d1515d8e6143029578a298b6c7d43b28134b3f0881d0389859b815abc" + "fingerprint": "5cc019e34fd9a2adae706143c0af4fd78334a2ffefac62eb82d7ec7f64ee0ea3", + "stableId": "product-data-visualization-misc", + "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Product/Data Visualization & Misc" }, { - "file": "ui/storybook/stories/decision-card.stories.tsx", + "file": "ui/storybook/stories/inbox-search/decision-card.stories.tsx", "capabilities": [ "inbox-search/decisions" ], @@ -1747,12 +1900,14 @@ "sources": [ "maps/feature-map/inbox-search.md", "ui/src/components/DecisionCard.tsx", - "ui/storybook/stories/decision-card.stories.tsx" + "ui/storybook/stories/inbox-search/decision-card.stories.tsx" ], - "fingerprint": "6e0e5aab6a83de14c0bea6778c15f39420bc52086b4f3660bdcb7d07d446e5ea" + "fingerprint": "151c678aa5f7befc369d2def8df019b626c865f1c5b7bf91543dd4454395cb66", + "stableId": "decisions-decisioncard", + "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Decisions/DecisionCard" }, { - "file": "ui/storybook/stories/decision-models/01-settings.stories.tsx", + "file": "ui/storybook/stories/companies/decision-models/01-settings.stories.tsx", "capabilities": [ "companies/identity", "budgets-costs/cost-reporting" @@ -1767,13 +1922,15 @@ "maps/feature-map/budgets-costs.md", "maps/feature-map/companies.md", "ui/src/components/decision-models/DecisionModelSettings.tsx", - "ui/storybook/stories/decision-models/01-settings.stories.tsx", - "ui/storybook/stories/decision-models/fixtures.ts" + "ui/storybook/stories/companies/decision-models/01-settings.stories.tsx", + "ui/storybook/support/decision-models/fixtures.ts" ], - "fingerprint": "f2ba9d71abb3a7c5e3fbc5a9aa4ecc9c516d6de381c3d625f5339bd28c42bfc9" + "fingerprint": "26ac3209bb283a94e102e2328689aec2cd801680ede48cbfdf85f77ed3b2b647", + "stableId": "decision-models-01-settings", + "sidebarTitle": "Getting started and access/Companies and portability/Decision models/01 Settings" }, { - "file": "ui/storybook/stories/decision-models/02-history.stories.tsx", + "file": "ui/storybook/stories/companies/decision-models/02-history.stories.tsx", "capabilities": [ "companies/identity", "budgets-costs/cost-reporting" @@ -1788,13 +1945,15 @@ "maps/feature-map/budgets-costs.md", "maps/feature-map/companies.md", "ui/src/components/decision-models/DecisionHistory.tsx", - "ui/storybook/stories/decision-models/02-history.stories.tsx", - "ui/storybook/stories/decision-models/fixtures.ts" + "ui/storybook/stories/companies/decision-models/02-history.stories.tsx", + "ui/storybook/support/decision-models/fixtures.ts" ], - "fingerprint": "27b401345fcace0bb84970d98fb2f1029de3c75c4c9e509b9772fd2fa60d7ff2" + "fingerprint": "bae133e089fe0a1f7a27436d63bcc6eb4e49612a6418bb0529d49dc3da54d79f", + "stableId": "decision-models-02-history", + "sidebarTitle": "Getting started and access/Companies and portability/Decision models/02 History" }, { - "file": "ui/storybook/stories/decision-models/03-journey.stories.tsx", + "file": "ui/storybook/stories/companies/decision-models/03-journey.stories.tsx", "capabilities": [ "companies/identity", "budgets-costs/cost-reporting" @@ -1811,13 +1970,15 @@ "ui/src/components/Layout.tsx", "ui/src/pages/CompanySettings.tsx", "ui/src/pages/Costs.tsx", - "ui/storybook/stories/decision-models/03-journey.stories.tsx", - "ui/storybook/stories/decision-models/fixtures.ts" + "ui/storybook/stories/companies/decision-models/03-journey.stories.tsx", + "ui/storybook/support/decision-models/fixtures.ts" ], - "fingerprint": "588cc23bf34b758335fd5ab5ce0f69f478b638b61058a7069bc3de2da327333e" + "fingerprint": "9d5c8aa2027e900b4b5b52b602065dfe7c779e235b42f46a99dddb8037e4006a", + "stableId": "decision-models-03-journey", + "sidebarTitle": "Getting started and access/Companies and portability/Decision models/03 Journey" }, { - "file": "ui/storybook/stories/decisions-desk.stories.tsx", + "file": "ui/storybook/stories/inbox-search/decisions-desk.stories.tsx", "capabilities": [ "inbox-search/decisions" ], @@ -1832,12 +1993,14 @@ "ui/src/components/AttentionQueueRow.tsx", "ui/src/pages/DecisionQueuePage.tsx", "ui/src/pages/WhatNeedsMe.tsx", - "ui/storybook/stories/decisions-desk.stories.tsx" + "ui/storybook/stories/inbox-search/decisions-desk.stories.tsx" ], - "fingerprint": "5aa325138c3bd33be22c11c805d3b0e30bdf40f6e67e5f131d45536fc1af6c52" + "fingerprint": "614be5300540b7c3c8942a8a043e005d0f92e0a021819ade6ad291526b923566", + "stableId": "pages-decisions-desk", + "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Pages/Decisions Desk" }, { - "file": "ui/storybook/stories/dev-ops-surfaces.stories.tsx", + "file": "ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx", "capabilities": [ "instance-operations/server-service" ], @@ -1850,12 +2013,14 @@ "sources": [ "maps/feature-map/instance-operations.md", "ui/src/components/DevRestartBanner.tsx", - "ui/storybook/stories/dev-ops-surfaces.stories.tsx" + "ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx" ], - "fingerprint": "82dde37a5fbbdbaf053c736e3146a7c2bd44da21f0d3a1f48db56149fbeb729a" + "fingerprint": "e936abb4c886157de2f3772383b4062734e0b3a8c7dc64bb42331eef64cd6456", + "stableId": "product-dev-ops-surfaces", + "sidebarTitle": "Oversight and operation/Instance operations/Product/Dev Ops Surfaces" }, { - "file": "ui/storybook/stories/dialogs-modals.stories.tsx", + "file": "ui/storybook/stories/tasks/dialogs-modals.stories.tsx", "capabilities": [ "tasks/create", "agents/hire", @@ -1882,12 +2047,14 @@ "ui/src/components/NewProjectDialog.tsx", "ui/src/components/PathInstructionsModal.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/dialogs-modals.stories.tsx" + "ui/storybook/stories/tasks/dialogs-modals.stories.tsx" ], - "fingerprint": "92e635333d20802c9677c94bc00eff89a6b65fbdef225b9701e71b5919a6ddb5" + "fingerprint": "d1b6c016e119b19affd5d0af49c55b244d280cb4808d683fd583ac15d2fd1b73", + "stableId": "product-dialogs-modals", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals" }, { - "file": "ui/storybook/stories/document-annotations.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx", "capabilities": [ "documents-artifacts/annotations" ], @@ -1905,12 +2072,14 @@ "ui/src/components/IssueDocumentsSection.tsx", "ui/src/components/MarkdownBody.tsx", "ui/src/components/MarkdownEditor.tsx", - "ui/storybook/stories/document-annotations.stories.tsx" + "ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx" ], - "fingerprint": "36a016bab626258ff76af00b5697ef622a29e19f7032d241ebedd6550ff837f8" + "fingerprint": "37f01db23f298992b973fed56fd439ae0a0586bfc703af55dcf9fa69f14b86de", + "stableId": "product-documents-annotations", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Product/Documents/Annotations" }, { - "file": "ui/storybook/stories/document-comments.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/document-comments.stories.tsx", "capabilities": [ "documents-artifacts/annotations" ], @@ -1924,12 +2093,14 @@ "maps/feature-map/documents-artifacts.md", "ui/src/components/DocumentAnnotationLayer.tsx", "ui/src/components/DocumentAnnotationPanel.tsx", - "ui/storybook/stories/document-comments.stories.tsx" + "ui/storybook/stories/documents-artifacts/document-comments.stories.tsx" ], - "fingerprint": "7abfc302970dd3cc86ac621735b88a368baf216947b674a6b4283cdaf7f31c03" + "fingerprint": "1ff3445ed22893256cecf44c00c5f4714ae573e4d26351388fb672efe8726df4", + "stableId": "product-document-comments", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Product/Document Comments" }, { - "file": "ui/storybook/stories/dot-runner-connection.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx", "capabilities": [ "runs-adapters/validation", "gateways-profiles/client-connect" @@ -1944,12 +2115,14 @@ "maps/feature-map/gateways-profiles.md", "maps/feature-map/runs-adapters.md", "ui/src/components/DotRunnerConnection.tsx", - "ui/storybook/stories/dot-runner-connection.stories.tsx" + "ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx" ], - "fingerprint": "5dd7b6158480717fe85fe65a7df9323fc753ec3c673cf9bed002304c3e87cbc0" + "fingerprint": "a5fbe31bc2b35136830bfd8fb1cf10e1b35cd7cc6995f108ceca5a6773a4db73", + "stableId": "assistant-connections-dot-runner", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner" }, { - "file": "ui/storybook/stories/enterpret-connect-flow.stories.tsx", + "file": "ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx", "capabilities": [ "connection-setup/credentials", "connection-setup/failure" @@ -1965,12 +2138,14 @@ "ui/src/pages/apps/AppsConnect.tsx", "ui/src/pages/apps/Browse.tsx", "ui/src/pages/apps/app-detail/AdvancedPanel.tsx", - "ui/storybook/stories/enterpret-connect-flow.stories.tsx" + "ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx" ], - "fingerprint": "d03b56c9a89770a5f4222d0567be3c98aa4c878732098c4dcf2573f54cc5bb2d" + "fingerprint": "4b82e0db0a71ad569c10f32553084e884a89cb58eac33782ca07ae272e7411c1", + "stableId": "apps-enterpret-connector", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Enterpret connector" }, { - "file": "ui/storybook/stories/environment-variables-editor.stories.tsx", + "file": "ui/storybook/stories/secrets/environment-variables-editor.stories.tsx", "capabilities": [ "secrets/runtime-delivery" ], @@ -1983,12 +2158,14 @@ "sources": [ "maps/feature-map/secrets.md", "ui/src/components/environment-variables-editor/index.tsx", - "ui/storybook/stories/environment-variables-editor.stories.tsx" + "ui/storybook/stories/secrets/environment-variables-editor.stories.tsx" ], - "fingerprint": "daf57dd13f3c746a473b4c9bd7996f0dd70c9bfef9c698d2eb581a40b6deac08" + "fingerprint": "f41ed501dc34f19a8ef6071f1e7e563e8ac60769e6a2930dcfd8cde15d6551d0", + "stableId": "product-environment-variables-editor", + "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Product/Environment Variables Editor" }, { - "file": "ui/storybook/stories/execution-blocker-notice.stories.tsx", + "file": "ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx", "capabilities": [ "recovery/diagnosis" ], @@ -2001,12 +2178,14 @@ "sources": [ "maps/feature-map/recovery.md", "ui/src/components/ExecutionBlockerNotice.tsx", - "ui/storybook/stories/execution-blocker-notice.stories.tsx" + "ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx" ], - "fingerprint": "99fbecc373d993e752e8a89580492eecf947a54329f067cf468f97d18cd328b6" + "fingerprint": "19fa3d95095bbcd67c5306d6ad3c8c00ae526bab9d8cbc49e69ca36c15a873c2", + "stableId": "task-chat-recovery-notice", + "sidebarTitle": "Projects and execution/Recovery/Task chat/Recovery notice" }, { - "file": "ui/storybook/stories/execution-recovery.stories.tsx", + "file": "ui/storybook/stories/recovery/execution-recovery.stories.tsx", "capabilities": [ "recovery/diagnosis" ], @@ -2023,12 +2202,14 @@ "ui/src/components/task-chat/TaskChatLiveRunPill.tsx", "ui/src/components/task-chat/TaskChatRunnerTurn.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/execution-recovery.stories.tsx" + "ui/storybook/stories/recovery/execution-recovery.stories.tsx" ], - "fingerprint": "d726c8a489acdd94563d30b8a0c8e48c965d3bd429fbe2a2463d4d6c6c065b28" + "fingerprint": "003b5d7b2f8d0baea06402776157854f6b55d06bfd4d6223300413c284a22fd2", + "stableId": "tasks-execution-recovery", + "sidebarTitle": "Projects and execution/Recovery/Tasks/Execution recovery" }, { - "file": "ui/storybook/stories/external-agent-invite/components.stories.tsx", + "file": "ui/storybook/stories/agents/external-agent-invite/components.stories.tsx", "capabilities": [ "agents/hire", "access/invitations" @@ -2043,12 +2224,14 @@ "maps/feature-map/access.md", "maps/feature-map/agents.md", "ui/src/components/new-agent/ExternalAgentInviteContent.tsx", - "ui/storybook/stories/external-agent-invite/components.stories.tsx" + "ui/storybook/stories/agents/external-agent-invite/components.stories.tsx" ], - "fingerprint": "456e1d9cfad730f3fc7d8c003bb4ab4296417e3869f8d7acbc360d3337f5cb58" + "fingerprint": "68569d7c53ea9f52a63965a6a7568bf7d34d7fc8b34f404bf2e45cccd5822c3b", + "stableId": "onboarding-external-agent-invitation-components", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components" }, { - "file": "ui/storybook/stories/external-agent-invite/journeys.stories.tsx", + "file": "ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx", "capabilities": [ "agents/hire", "access/invitations" @@ -2067,14 +2250,16 @@ "ui/src/components/new-agent/AgentBasicsDialog.tsx", "ui/src/components/new-agent/ExternalAgentInviteContent.tsx", "ui/src/pages/Agents.tsx", - "ui/storybook/stories/external-agent-invite/ExternalAgentInvitePreview.tsx", - "ui/storybook/stories/external-agent-invite/fixtures.ts", - "ui/storybook/stories/external-agent-invite/journeys.stories.tsx" + "ui/storybook/support/external-agent-invite/ExternalAgentInvitePreview.tsx", + "ui/storybook/support/external-agent-invite/fixtures.ts", + "ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx" ], - "fingerprint": "9f79299cb00018bddaccd36024e79a5876b9543fdd772938cced8c38a3b3823c" + "fingerprint": "1dcbec5f8100e600233a3d2a27124e946f24a3fdb9c6fd4dd2b91e42c7134363", + "stableId": "onboarding-external-agent-invitation-journeys", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys" }, { - "file": "ui/storybook/stories/external-objects.stories.tsx", + "file": "ui/storybook/stories/tasks/external-objects.stories.tsx", "capabilities": [ "tasks/properties" ], @@ -2095,12 +2280,14 @@ "ui/src/components/IssueRow.tsx", "ui/src/components/MarkdownBody.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/external-objects.stories.tsx" + "ui/storybook/stories/tasks/external-objects.stories.tsx" ], - "fingerprint": "2e6a73b716687244aee6f93214c025bfe755ce41a4aa6bd65a37a4d6d3275596" + "fingerprint": "5654b1d1a51fe8d00c3546452e6e2a02bda0be49b014a2bad2a4227c3f1ce685", + "stableId": "foundations-external-objects", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/External Objects" }, { - "file": "ui/storybook/stories/fast-responses/01-settings.stories.tsx", + "file": "ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx", "capabilities": [ "companies/identity", "budgets-costs/cost-reporting" @@ -2115,13 +2302,15 @@ "maps/feature-map/budgets-costs.md", "maps/feature-map/companies.md", "ui/src/components/fast-responses/FastResponseSettings.tsx", - "ui/storybook/stories/decision-models/fixtures.ts", - "ui/storybook/stories/fast-responses/01-settings.stories.tsx" + "ui/storybook/support/decision-models/fixtures.ts", + "ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx" ], - "fingerprint": "4cf2ba38415e1a07a1e265858961d5414ef19bc2090b4b93c4b18cb5e691310d" + "fingerprint": "1610fca918abcbf89a5cf901ae36217df841169efcc21bd91db735bb0ea306bd", + "stableId": "fast-responses-01-settings", + "sidebarTitle": "Getting started and access/Companies and portability/Fast responses/01 Settings" }, { - "file": "ui/storybook/stories/fast-responses/02-history.stories.tsx", + "file": "ui/storybook/stories/companies/fast-responses/02-history.stories.tsx", "capabilities": [ "companies/identity", "budgets-costs/cost-reporting" @@ -2136,13 +2325,15 @@ "maps/feature-map/budgets-costs.md", "maps/feature-map/companies.md", "ui/src/components/decision-models/DecisionHistory.tsx", - "ui/storybook/stories/decision-models/fixtures.ts", - "ui/storybook/stories/fast-responses/02-history.stories.tsx" + "ui/storybook/support/decision-models/fixtures.ts", + "ui/storybook/stories/companies/fast-responses/02-history.stories.tsx" ], - "fingerprint": "c123c70c4cdc78548a5c1d50777f456946366cf532ac8e01ab48a625d3fbc285" + "fingerprint": "a2ed599851817c86c4b03be10c9083e365401be922f731260f1c718e0975c803", + "stableId": "fast-responses-02-history", + "sidebarTitle": "Getting started and access/Companies and portability/Fast responses/02 History" }, { - "file": "ui/storybook/stories/file-viewer.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx", "capabilities": [ "documents-artifacts/attachments" ], @@ -2155,12 +2346,14 @@ "sources": [ "maps/feature-map/documents-artifacts.md", "ui/src/components/FileViewerSheet.tsx", - "ui/storybook/stories/file-viewer.stories.tsx" + "ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx" ], - "fingerprint": "a3d440e82f0a0f537dbe3634770e807ca21cab8b567d2eb3ac48780b67f72790" + "fingerprint": "8626806337c9c664e11cee4587b80e068dfd3e6259e8c8fc2d3d1648b68abf84", + "stableId": "components-file-viewer-sheet", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Components/File Viewer Sheet" }, { - "file": "ui/storybook/stories/fireflies-pr.stories.tsx", + "file": "ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx", "capabilities": [ "connection-setup/credentials", "routines/triggers" @@ -2187,12 +2380,14 @@ "ui/src/pages/apps/app-detail/PermissionsPanel.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/routineWebhooks.tsx", - "ui/storybook/stories/fireflies-pr.stories.tsx" + "ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx" ], - "fingerprint": "0dc5bda5ecbb676ba9758350884e51ebe017a0e17b24802107a1472296acae51" + "fingerprint": "d7898061478285bbc6fa9ee5152bdb840ca3d329590a3b35573e0632282278e5", + "stableId": "pr-reviews-fireflies-and-app-webhooks", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks" }, { - "file": "ui/storybook/stories/fork-skill-flow.stories.tsx", + "file": "ui/storybook/stories/skills/fork-skill-flow.stories.tsx", "capabilities": [ "skills/authoring" ], @@ -2207,12 +2402,14 @@ "ui/src/components/skill-studio/AgentsUsingSkillDialog.tsx", "ui/src/components/skill-studio/ForkSkillDialog.tsx", "ui/src/components/skill-studio/SkillProvenance.tsx", - "ui/storybook/stories/fork-skill-flow.stories.tsx" + "ui/storybook/stories/skills/fork-skill-flow.stories.tsx" ], - "fingerprint": "158ff9882eec7349de17fe68bfe1470a925b7f272fd8f82450b6f2100c58f6b5" + "fingerprint": "7cd95e52a451f78371dc2c5793679c14b28f1fb486dcb2ed5f8b1f4e041267a8", + "stableId": "skill-studio-editacopy", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/EditACopy" }, { - "file": "ui/storybook/stories/forms-editors.stories.tsx", + "file": "ui/storybook/stories/foundations/forms-editors.stories.tsx", "capabilities": [], "purpose": "Components/Forms & Editors", "status": "unreviewed", @@ -2236,13 +2433,15 @@ "ui/src/components/ui/badge.tsx", "ui/src/components/ui/button.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/forms-editors.stories.tsx" + "ui/storybook/stories/foundations/forms-editors.stories.tsx" ], "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "1e30e2c2e33d155a068ccbc1a5709d1ea5d40ad8d87fe81c9981dd19fd2fb497" + "fingerprint": "2ffc131b9725c748a223fe4ddc8f9d31242e6d96e0d2feb3ab91563a89dea120", + "stableId": "components-forms-editors", + "sidebarTitle": "Foundations/Components/Forms & Editors" }, { - "file": "ui/storybook/stories/foundations.stories.tsx", + "file": "ui/storybook/stories/foundations/foundations.stories.tsx", "capabilities": [], "purpose": "Foundations/Primitive Matrix", "status": "unreviewed", @@ -2265,17 +2464,19 @@ "ui/src/components/ui/textarea.tsx", "ui/src/components/ui/toggle-switch.tsx", "ui/src/components/ui/tooltip.tsx", - "ui/storybook/stories/foundations.stories.tsx" + "ui/storybook/stories/foundations/foundations.stories.tsx" ], "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "d6d2f239b4d934521156ed03cc515de419e02a48256fc33aab9cb0fc9b57c078" + "fingerprint": "ed53a4be78a572368f4c22577ccad159699f291eb1d01c242528df3b35cd63fe", + "stableId": "foundations-primitive-matrix", + "sidebarTitle": "Foundations/Primitive Matrix" }, { - "file": "ui/storybook/stories/frontmatter-panel.stories.tsx", + "file": "ui/storybook/stories/skills/frontmatter-panel.stories.tsx", "capabilities": [ "skills/authoring" ], - "purpose": "Product/Skill Studio \u00b7 FrontmatterPanel", + "purpose": "Product/Skill Studio · FrontmatterPanel", "status": "unreviewed", "implementation": "production", "boundary": "fixtures", @@ -2284,12 +2485,14 @@ "sources": [ "maps/feature-map/skills.md", "ui/src/components/FrontmatterPanel.tsx", - "ui/storybook/stories/frontmatter-panel.stories.tsx" + "ui/storybook/stories/skills/frontmatter-panel.stories.tsx" ], - "fingerprint": "0bf948fb2bad1159d2415df2d2d50e106ef696f6a259dcf6dc4afe15c9765fe6" + "fingerprint": "e7b2ffabdadc43d7fa2f564465792539d25f15da54fb4f7fec31cc4a2f0aec76", + "stableId": "product-skill-studio-·-frontmatterpanel", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Product/Skill Studio · FrontmatterPanel" }, { - "file": "ui/storybook/stories/gateways-tab.stories.tsx", + "file": "ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx", "capabilities": [ "gateways-profiles/gateway" ], @@ -2302,12 +2505,14 @@ "sources": [ "maps/feature-map/gateways-profiles.md", "ui/src/pages/tools/GatewaysTab.tsx", - "ui/storybook/stories/gateways-tab.stories.tsx" + "ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx" ], - "fingerprint": "ae5af9816de7c7159e3a26d86cbf69ede2f9a58b43f272a03849b2e490a66016" + "fingerprint": "c4e0e6770f0ed5d6cad1805717b38b9ab6a96e1c885a2013af979556dd45e8ae", + "stableId": "tools-gateways-pap-11182", + "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Tools/Gateways (PAP-11182)" }, { - "file": "ui/storybook/stories/github-bot-management/management.stories.tsx", + "file": "ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx", "capabilities": [ "chat-channels/providers", "chat-channels/conversation" @@ -2331,14 +2536,16 @@ "ui/src/pages/apps/chat/GitHubConnectionComplete.tsx", "ui/storybook/fixtures/onboardingDraft.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/github-bot-management/fixture-api.tsx", - "ui/storybook/stories/github-bot-management/fixtures.ts", - "ui/storybook/stories/github-bot-management/management.stories.tsx" + "ui/storybook/support/github-bot-management/fixture-api.tsx", + "ui/storybook/support/github-bot-management/fixtures.ts", + "ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx" ], - "fingerprint": "b48f3a6a4aae5c83d4a8481105c6d2e80d80c694006e2f18804f1a4eed107fb5" + "fingerprint": "9a432840be84fdfd9e437b851d5a975d13edba7eeca4c6273eb21cf69ed29e32", + "stableId": "connectors-github-bot-management", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management" }, { - "file": "ui/storybook/stories/github-chat.stories.tsx", + "file": "ui/storybook/stories/chat-channels/github-chat.stories.tsx", "capabilities": [ "chat-channels/providers", "chat-channels/conversation" @@ -2357,13 +2564,15 @@ "ui/storybook/prototypes/github-chat/AccessEditor.tsx", "ui/storybook/prototypes/github-chat/GitHubChatPreview.tsx", "ui/storybook/prototypes/github-chat/fixtures.ts", - "ui/storybook/stories/github-chat.stories.tsx" + "ui/storybook/stories/chat-channels/github-chat.stories.tsx" ], - "replacement": "ui/storybook/stories/github-connections.stories.tsx", - "fingerprint": "f110f2f0ccee9e5bc8eb633f2e6cac4e4aea432232cdd702fd233277380a7028" + "replacement": "ui/storybook/stories/chat-channels/github-connections.stories.tsx", + "fingerprint": "acb56c908e107266128dd0d817162007a0a7ec75b24fa059714cee490e4ef642", + "stableId": "historical-github-chat-prototypes", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes" }, { - "file": "ui/storybook/stories/github-connections.stories.tsx", + "file": "ui/storybook/stories/chat-channels/github-connections.stories.tsx", "capabilities": [ "chat-channels/providers", "connection-setup/channel-setup" @@ -2382,12 +2591,14 @@ "ui/src/pages/apps/Browse.tsx", "ui/src/pages/apps/chat/ChatEndpointSetup.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/github-connections.stories.tsx" + "ui/storybook/stories/chat-channels/github-connections.stories.tsx" ], - "fingerprint": "2932e77ea9103b6c08585123cc4ca4bcdd35ab5c9539f70e2b30bae165adc3cb" + "fingerprint": "737355c3a9a9e1fe69b606edf543d0e7f0b94b7332a344a0f077c4cccfb544b9", + "stableId": "connections-github-and-code-review-bot", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot" }, { - "file": "ui/storybook/stories/github-skills-journey.stories.tsx", + "file": "ui/storybook/stories/skills/github-skills-journey.stories.tsx", "capabilities": [ "skills/versions", "skills/discovery" @@ -2406,12 +2617,14 @@ "ui/src/pages/SkillStudio.tsx", "ui/storybook/fixtures/githubSkillSources.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/github-skills-journey.stories.tsx" + "ui/storybook/stories/skills/github-skills-journey.stories.tsx" ], - "fingerprint": "c4d5daba6e1ced0fea63533094e2ecc25c14bdab7e078a61c1aac95184fe3bc6" + "fingerprint": "dcb8e4ce80ddc71f25542b9d84cdf1ce20e552da2848404e62d61f0687e3fc3f", + "stableId": "skills-github-sync-journey", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey" }, { - "file": "ui/storybook/stories/github-synced-skills.stories.tsx", + "file": "ui/storybook/stories/skills/github-synced-skills.stories.tsx", "capabilities": [ "skills/versions", "skills/discovery" @@ -2427,12 +2640,14 @@ "ui/src/pages/SkillSources.tsx", "ui/storybook/fixtures/githubSkillSources.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/github-synced-skills.stories.tsx" + "ui/storybook/stories/skills/github-synced-skills.stories.tsx" ], - "fingerprint": "56e11ea7e42f58754b347286ac84df240314d3fc6b2d973b1df1215985d89de9" + "fingerprint": "f87c8ee2574a097ef4e4828589618ad196f170fb652db022bc7488b3fb7971e2", + "stableId": "skills-github-synced-skills", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills" }, { - "file": "ui/storybook/stories/html-artifacts/01-preview.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx", "capabilities": [ "documents-artifacts/attachments", "workspaces/files-git" @@ -2447,13 +2662,15 @@ "maps/feature-map/documents-artifacts.md", "maps/feature-map/workspaces.md", "ui/src/components/task-side-panel/TaskAttachmentPanel.tsx", - "ui/storybook/stories/html-artifacts/01-preview.stories.tsx", - "ui/storybook/stories/html-artifacts/fixtures.ts" + "ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx", + "ui/storybook/support/html-artifacts/fixtures.ts" ], - "fingerprint": "eb93ebf603a4ba1d7103e49d2a7486bdcc3fe02aa8c87c1bbbbe165fde24bd6d" + "fingerprint": "7289b022aeb669441639942cb709e07a1f03f1cf4e0ca5db3672c654a50da92a", + "stableId": "html-artifacts-01-preview", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview" }, { - "file": "ui/storybook/stories/html-artifacts/02-workspace.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx", "capabilities": [ "documents-artifacts/attachments", "workspaces/files-git" @@ -2469,13 +2686,15 @@ "maps/feature-map/workspaces.md", "ui/src/components/FileViewerSheet.tsx", "ui/src/components/task-side-panel/TaskWorkspaceFilePanel.tsx", - "ui/storybook/stories/html-artifacts/02-workspace.stories.tsx", - "ui/storybook/stories/html-artifacts/fixtures.ts" + "ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx", + "ui/storybook/support/html-artifacts/fixtures.ts" ], - "fingerprint": "a20420d26e42635529e7b298376a27edf3ff761ed7de134c5349bd5b9934198f" + "fingerprint": "2463cc23aa39bca80133e8b19bb4899f9dfbab7272747796db7855da51642ec2", + "stableId": "html-artifacts-02-workspace", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace" }, { - "file": "ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx", "capabilities": [ "documents-artifacts/attachments", "workspaces/files-git" @@ -2494,13 +2713,15 @@ "ui/src/components/task-chat/TaskChatBubble.tsx", "ui/src/components/task-side-panel/TaskSidePanel.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx", - "ui/storybook/stories/html-artifacts/fixtures.ts" + "ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx", + "ui/storybook/support/html-artifacts/fixtures.ts" ], - "fingerprint": "2d4ab0475f66fea01b18ddd3a54694c7ed94fd749dc457c8f134de20b9faea78" + "fingerprint": "d2b3ecd2b4490ca3bec6c8dfacad4c02b794f78fd4d348c6c0fd165fb8928f33", + "stableId": "html-artifacts-03-task-journey", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey" }, { - "file": "ui/storybook/stories/imessage-photon.stories.tsx", + "file": "ui/storybook/stories/chat-channels/imessage-photon.stories.tsx", "capabilities": [ "chat-channels/conversation" ], @@ -2518,12 +2739,14 @@ "ui/src/pages/apps/chat/ChatEndpointDetail.tsx", "ui/src/pages/apps/chat/ChatEndpointSetup.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/imessage-photon.stories.tsx" + "ui/storybook/stories/chat-channels/imessage-photon.stories.tsx" ], - "fingerprint": "3bd3147aaf8c0eb0df017ddd3a10c0a11f8429907ac9d24049e8b507224d7da6" + "fingerprint": "e808e8533ef84eaa5f0c49144f7fa23554a0956217177a25fe7386ddaf4c9ffc", + "stableId": "connections-imessage-photon", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/iMessage Photon" }, { - "file": "ui/storybook/stories/in-feed-connections.stories.tsx", + "file": "ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx", "capabilities": [ "connection-setup/task-request" ], @@ -2540,12 +2763,14 @@ "ui/src/features/connections/ConnectionIntentInteractionBody.tsx", "ui/src/features/connections/ConnectionSetupFlow.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/in-feed-connections.stories.tsx" + "ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx" ], - "fingerprint": "91d582c9624c38820c4d6991c3ea16c7dda10be7ea5122e8a97b63e34d4c849a" + "fingerprint": "23c4fa7c1255dd2110e51fcd9cc78942c716ea1adc3bd59ffd8cabf7830930a3", + "stableId": "connections-in-task-connections", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Connections/In-task connections" }, { - "file": "ui/storybook/stories/interrupt-handoff.stories.tsx", + "file": "ui/storybook/stories/steering/interrupt-handoff.stories.tsx", "capabilities": [ "steering/interrupt" ], @@ -2558,12 +2783,14 @@ "sources": [ "maps/feature-map/steering.md", "ui/src/components/interrupt-handoff/InterruptHandoffViews.tsx", - "ui/storybook/stories/interrupt-handoff.stories.tsx" + "ui/storybook/stories/steering/interrupt-handoff.stories.tsx" ], - "fingerprint": "975a75361986c904fb485958695acbf13f100b9ce4652e8eb4c0a032e5b9c9a1" + "fingerprint": "dbfb5b79928aefbc232eb6abbb17325aa6e5e0002c32bda062b529d2f486faab", + "stableId": "surfaces-interrupt-handoff", + "sidebarTitle": "Tasks and conversations/Steering and queued messages/Surfaces/Interrupt Handoff" }, { - "file": "ui/storybook/stories/issue-blocked-notice.stories.tsx", + "file": "ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx", "capabilities": [ "recovery/diagnosis", "task-coordination/dependencies" @@ -2579,12 +2806,14 @@ "maps/feature-map/task-coordination.md", "ui/src/components/IssueBlockedNotice.tsx", "ui/src/components/task-chat/TaskChatBlockerLinks.tsx", - "ui/storybook/stories/issue-blocked-notice.stories.tsx" + "ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx" ], - "fingerprint": "439f467f261680b59ef3772406f9f6bf1fdeb68c2d820cb10e055ae5283589d6" + "fingerprint": "4eb78b4e772567d657339435dc650e9b59c2347792cf764c7b376d7f631fe4de", + "stableId": "product-issue-blocked-notice", + "sidebarTitle": "Projects and execution/Recovery/Product/Issue/Blocked notice" }, { - "file": "ui/storybook/stories/issue-management.stories.tsx", + "file": "ui/storybook/stories/tasks/issue-management.stories.tsx", "capabilities": [ "tasks/properties", "tasks/organize" @@ -2612,12 +2841,14 @@ "ui/src/components/PriorityIcon.tsx", "ui/src/components/StatusBadge.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/issue-management.stories.tsx" + "ui/storybook/stories/tasks/issue-management.stories.tsx" ], - "fingerprint": "a5012bece16d1825dbabc03512795d082ebcd08e55cedf04b05fcef82e0f4395" + "fingerprint": "0692ea26dbbe757bb070183a445b72c08d0431cd3f008d77b57682ee099a7cc2", + "stableId": "product-issue-management", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Issue Management" }, { - "file": "ui/storybook/stories/issue-plan-decompositions.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx", "capabilities": [ "questions-and-approvals/plan-review", "task-coordination/delegation" @@ -2633,12 +2864,14 @@ "maps/feature-map/task-coordination.md", "ui/src/components/IssuePlanDecompositionsSection.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/issue-plan-decompositions.stories.tsx" + "ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx" ], - "fingerprint": "b527e5525ef4f4e3b0b834cf22e423e2c369692b887243f01cc4d6b5ebfa5875" + "fingerprint": "b2a44ee40bf7e673563ad6e164e3476306782a9ea74e132fa5330eb78acb82e0", + "stableId": "issue-detail-plan-decompositions", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions" }, { - "file": "ui/storybook/stories/issue-review-panel.stories.tsx", + "file": "ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx", "capabilities": [ "task-coordination/signoff" ], @@ -2651,12 +2884,14 @@ "sources": [ "maps/feature-map/task-coordination.md", "ui/src/components/AttentionQueueRow.tsx", - "ui/storybook/stories/issue-review-panel.stories.tsx" + "ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx" ], - "fingerprint": "089b43a36b1cc8cd336f81a5fc654607ffaadcde51a6ace883fc7023850680aa" + "fingerprint": "3c5317b38030ea75a8d57284af6d3ca2f0258dce52c694adc7b36fd41f6f875f", + "stableId": "product-decisions-stalled-review-actions", + "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/Product/Decisions/Stalled review actions" }, { - "file": "ui/storybook/stories/issue-thread-interactions.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx", "capabilities": [ "questions-and-approvals/questions", "questions-and-approvals/confirmations", @@ -2673,12 +2908,14 @@ "ui/src/components/IssueChatThread.tsx", "ui/src/components/IssueThreadInteractionCard.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/issue-thread-interactions.stories.tsx" + "ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx" ], - "fingerprint": "80ba300809eb79e06600ae4af00a6d9c22c6b83abacb10ba2b6587ffd6092e77" + "fingerprint": "b50484bfb74560001734590d7e7519fd6138f8f24c19afd4a26fdc99593cdb05", + "stableId": "chat-comments-issue-thread-interactions", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions" }, { - "file": "ui/storybook/stories/local-ai-subscription.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -2691,12 +2928,14 @@ "sources": [ "maps/feature-map/runs-adapters.md", "ui/src/components/AdapterLoginChrome.tsx", - "ui/storybook/stories/local-ai-subscription.stories.tsx" + "ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx" ], - "fingerprint": "d53b62241b00a9c42cd7caa1c7aa2f6254c48331fce73cb42ccb62e3648744cb" + "fingerprint": "79d32a9424c87080ebaa86216c23e3c36fcb1d3c8f4051a109a201e4e3adf1c6", + "stableId": "ai-connections-provider-routing-07-subscription-sign-in", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/07 Subscription sign-in" }, { - "file": "ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx", + "file": "ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx", "capabilities": [ "connection-setup/handoff" ], @@ -2709,12 +2948,14 @@ "sources": [ "maps/feature-map/connection-setup.md", "ui/src/pages/apps/PaperclipCloudOAuthHandoff.tsx", - "ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx" + "ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx" ], - "fingerprint": "8e8abadcb4a6601e5c750843a5ce6a15c8126a72a5d810d15683e36706823fa6" + "fingerprint": "990d6bc169b5150f28c7e07eb8e9acb13056e4d71459217c36a637c5ef256d15", + "stableId": "apps-managed-cloud-oauth-handoff", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Managed Cloud OAuth handoff" }, { - "file": "ui/storybook/stories/memory-connectors.stories.tsx", + "file": "ui/storybook/stories/connection-setup/memory-connectors.stories.tsx", "capabilities": [ "connection-setup/credentials", "agents/instructions" @@ -2731,12 +2972,14 @@ "ui/src/features/connections/ConnectionSetupFlow.tsx", "ui/src/pages/InstanceExperimentalSettings.tsx", "ui/src/pages/apps/Browse.tsx", - "ui/storybook/stories/memory-connectors.stories.tsx" + "ui/storybook/stories/connection-setup/memory-connectors.stories.tsx" ], - "fingerprint": "5b5206e62ff639874206741e6fa420b80bef9e4bda804c5d2d61f4786d8081ec" + "fingerprint": "498446eef1e0bae94d8d740335989d615eeddb5961768d900bee994533ed9883", + "stableId": "apps-connections-memory", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Connections/Memory" }, { - "file": "ui/storybook/stories/mobile-entity-pickers.stories.tsx", + "file": "ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx", "capabilities": [ "tasks/create" ], @@ -2750,12 +2993,14 @@ "maps/feature-map/tasks.md", "ui/src/components/InlineEntitySelector.tsx", "ui/src/components/SearchableSelect.tsx", - "ui/storybook/stories/mobile-entity-pickers.stories.tsx" + "ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx" ], - "fingerprint": "5a1fc8e5d98b3cb562cc80462d90991b8d74b99df2b8842439ef4038116d3af7" + "fingerprint": "bf52ad146d2393f6acf3854ba155f6df367fc279410c1419dfc353b69e0a7507", + "stableId": "components-entity-pickers-mobile", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Components/Entity pickers/Mobile" }, { - "file": "ui/storybook/stories/mobile-task-tabs.stories.tsx", + "file": "ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx", "capabilities": [ "navigation-preferences/navigation" ], @@ -2768,12 +3013,14 @@ "sources": [ "maps/feature-map/navigation-preferences.md", "ui/src/components/side-panel/index.ts", - "ui/storybook/stories/mobile-task-tabs.stories.tsx" + "ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx" ], - "fingerprint": "ee708c2b2bcbc41dcdddb48738ba2dc52f41e9e304604d2b441eca3cfcc8be45" + "fingerprint": "f4ca5d157e5d943470084559cd557a95f80e3d20348e972bb3fa8df93d339bf6", + "stableId": "prototypes-task-detail-mobile-tabs", + "sidebarTitle": "Oversight and operation/Navigation, profile, and announcements/Prototypes/Task detail/Mobile tabs" }, { - "file": "ui/storybook/stories/model-capacity-retry.stories.tsx", + "file": "ui/storybook/stories/recovery/model-capacity-retry.stories.tsx", "capabilities": [ "recovery/bounded-continuation" ], @@ -2786,12 +3033,14 @@ "sources": [ "maps/feature-map/recovery.md", "ui/src/components/IssueScheduledRetryCard.tsx", - "ui/storybook/stories/model-capacity-retry.stories.tsx" + "ui/storybook/stories/recovery/model-capacity-retry.stories.tsx" ], - "fingerprint": "55e83f93b4ecca792c37f241a040e61315cb320b7b98e4b2cf06d6fbe8547f8f" + "fingerprint": "4f7421c0267fee71b9de5e38916ab86c66a2c69caa950730751c031a86503b4f", + "stableId": "tasks-model-capacity-retry", + "sidebarTitle": "Projects and execution/Recovery/Tasks/Model capacity retry" }, { - "file": "ui/storybook/stories/monitor-surfaces.stories.tsx", + "file": "ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx", "capabilities": [ "task-coordination/tree-control" ], @@ -2806,12 +3055,14 @@ "ui/src/components/IssueMonitorBanner.tsx", "ui/src/components/IssueProperties.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/monitor-surfaces.stories.tsx" + "ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx" ], - "fingerprint": "7b62af0430a4924c27c06ad8ecdfe9f13e9b9207640b18142611176291589b23" + "fingerprint": "2a9a823ce7e27a2e49d80bafc21394af1d34a396d53299b89e0d0c7fe4ae60f6", + "stableId": "product-issue-monitor-surfaces", + "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/Product/Issue Monitor surfaces" }, { - "file": "ui/storybook/stories/navigation-layout.stories.tsx", + "file": "ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx", "capabilities": [ "navigation-preferences/navigation" ], @@ -2834,12 +3085,14 @@ "ui/src/components/SidebarCompanyMenu.tsx", "ui/src/components/StatusBadge.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/navigation-layout.stories.tsx" + "ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx" ], - "fingerprint": "322ff8736c38f3c9c0778a2ad232edc916daaf170905330a1594000f17a9b025" + "fingerprint": "80b5d40676ba4a9e37936b8481dd282e1e468c6e7b256cc8687a0a712e4d3dfe", + "stableId": "product-navigation-layout", + "sidebarTitle": "Oversight and operation/Navigation, profile, and announcements/Product/Navigation & Layout" }, { - "file": "ui/storybook/stories/new-agent-onboarding.stories.tsx", + "file": "ui/storybook/stories/agents/new-agent-onboarding.stories.tsx", "capabilities": [ "agents/hire" ], @@ -2868,13 +3121,15 @@ "ui/storybook/prototypes/ProviderConnectionPreview.tsx", "ui/storybook/prototypes/RuntimeTestCard.tsx", "ui/storybook/prototypes/new-agent-fixtures.ts", - "ui/storybook/stories/new-agent-onboarding.stories.tsx" + "ui/storybook/stories/agents/new-agent-onboarding.stories.tsx" ], - "replacement": "ui/storybook/stories/agent-persona-pages.stories.tsx", - "fingerprint": "a4172933b445ae3b6d73008e4fa2b6988c3ef722602ef82f363e288d354441b2" + "replacement": "ui/storybook/stories/agents/agent-persona-pages.stories.tsx", + "fingerprint": "4f8600fabe74a9c84e6fd6501f8f7cf9c1e1b5926bf2086d3bafaf2b2ed17a94", + "stableId": "onboarding-new-agent", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/New agent" }, { - "file": "ui/storybook/stories/new-project-repos.stories.tsx", + "file": "ui/storybook/stories/projects/new-project-repos.stories.tsx", "capabilities": [ "projects/repositories" ], @@ -2892,12 +3147,14 @@ "ui/src/features/connections/ConnectionSetupFlow.tsx", "ui/storybook/prototypes/project-repos/ProjectReposPrototype.tsx", "ui/storybook/prototypes/project-repos/fixtures.ts", - "ui/storybook/stories/new-project-repos.stories.tsx" + "ui/storybook/stories/projects/new-project-repos.stories.tsx" ], - "fingerprint": "97b3022dc7fcaae73f24d9d486803c6658463849a99ec15aec72d8c2825fc25f" + "fingerprint": "bf8bd88964cbf20a95449a10485d2aaf074cfe3f88456144332b193c2920be4b", + "stableId": "proposals-project-repos-new-project", + "sidebarTitle": "Projects and execution/Projects and repositories/Proposals/Project repos/New project" }, { - "file": "ui/storybook/stories/new-task-composer.stories.tsx", + "file": "ui/storybook/stories/tasks/new-task-composer.stories.tsx", "capabilities": [ "tasks/create" ], @@ -2912,12 +3169,14 @@ "ui/src/components/MarkdownBody.tsx", "ui/src/components/NewIssueDialog.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/new-task-composer.stories.tsx" + "ui/storybook/stories/tasks/new-task-composer.stories.tsx" ], - "fingerprint": "91f49f5ebddbbb2e5d893787c49ddbe9b3a00508ba107f1ff55a4077647d4129" + "fingerprint": "5fd37958b2f864e0f96e881540736c48f9884a0d4bf48200dea0fd0468c43a6d", + "stableId": "composer-new-task", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Composer/New task" }, { - "file": "ui/storybook/stories/notion-connect-flow.stories.tsx", + "file": "ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx", "capabilities": [ "connection-setup/credentials", "connection-setup/failure" @@ -2936,12 +3195,14 @@ "ui/src/pages/apps/app-detail/AdvancedPanel.tsx", "ui/src/pages/apps/app-detail/IdentitiesSection.tsx", "ui/src/pages/apps/app-detail/SetupPanel.tsx", - "ui/storybook/stories/notion-connect-flow.stories.tsx" + "ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx" ], - "fingerprint": "059bfb1db9c3d71dca7c10ff6440f588c539d6bb0923007f1b3360b7b322a016" + "fingerprint": "d1cedce55a218e81ba61a5f60d073b61cf6ce7235707a22de2305e10c3621544", + "stableId": "apps-notion-mcp-connect-flow-pap-16650", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)" }, { - "file": "ui/storybook/stories/onboarding-agent-arc.stories.tsx", + "file": "ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx", "capabilities": [ "onboarding/adapter", "onboarding/first-task" @@ -2959,12 +3220,14 @@ "ui/src/components/onboarding/Stepper.tsx", "ui/storybook/fixtures/onboardingDraft.ts", "ui/storybook/fixtures/onboardingEnvironment.ts", - "ui/storybook/stories/onboarding-agent-arc.stories.tsx" + "ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx" ], - "fingerprint": "74ccb2cd806467152cdd9732e9de09c86b88934364ae50932c3e7d5c5bc87b6f" + "fingerprint": "b963de5ca45df1b937323d98f79221755215038490df854191b8ece8e7c6e174", + "stableId": "onboarding-agent-arc", + "sidebarTitle": "Getting started and access/Onboarding and first work/Onboarding/Agent arc" }, { - "file": "ui/storybook/stories/onboarding-character.stories.tsx", + "file": "ui/storybook/stories/onboarding/onboarding-character.stories.tsx", "capabilities": [ "onboarding/company" ], @@ -2978,12 +3241,14 @@ "maps/feature-map/onboarding.md", "ui/src/components/onboarding/OnboardingCharacter.tsx", "ui/src/components/ui/button.tsx", - "ui/storybook/stories/onboarding-character.stories.tsx" + "ui/storybook/stories/onboarding/onboarding-character.stories.tsx" ], - "fingerprint": "59566e6ec1b21ccc51e69c7c3a8114594ca4ddb507dfaf09724a28745f8d4f16" + "fingerprint": "a5dcbade2bfe0d1ac11473ae8ee14112a22fd2d51bc9bf3a86c9a979da396b91", + "stableId": "onboarding-character", + "sidebarTitle": "Getting started and access/Onboarding and first work/Onboarding/Character" }, { - "file": "ui/storybook/stories/onboarding-connect-model.stories.tsx", + "file": "ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx", "capabilities": [ "onboarding/adapter", "onboarding/first-task" @@ -2997,13 +3262,15 @@ "sources": [ "maps/feature-map/onboarding.md", "ui/src/components/onboarding/ConnectModelPreview.tsx", - "ui/storybook/stories/onboarding-connect-model.stories.tsx" + "ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx" ], - "replacement": "ui/storybook/stories/onboarding-agent-arc.stories.tsx", - "fingerprint": "04ff3c06366ee28c99034af68cbb3935aecdba8c5d106c08124cacc0a0d5a8fc" + "replacement": "ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx", + "fingerprint": "d25e90d99be339dd918c5b0ca388683be54feae4750e4f358b675c359b75be77", + "stableId": "onboarding-connect-a-model", + "sidebarTitle": "Getting started and access/Onboarding and first work/Onboarding/Connect a model" }, { - "file": "ui/storybook/stories/originating-tasks.stories.tsx", + "file": "ui/storybook/stories/task-coordination/originating-tasks.stories.tsx", "capabilities": [ "task-coordination/delegation", "projects/task-context" @@ -3023,12 +3290,14 @@ "ui/src/pages/ProjectDetail.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/prototypes/originating-tasks/OriginatingTasks.tsx", - "ui/storybook/stories/originating-tasks.stories.tsx" + "ui/storybook/stories/task-coordination/originating-tasks.stories.tsx" ], - "fingerprint": "8529ab64f5d73a48dd0c0fba0ad6de97eb7ae849bc9b87f6d982a0b8cb42965c" + "fingerprint": "e16a7c6351086b45005478d57101377fe51d5c2e8f8ae59ee0f3a32b1811d09d", + "stableId": "ux-labs-tasks-created-from-a-task", + "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task" }, { - "file": "ui/storybook/stories/overview.stories.tsx", + "file": "ui/storybook/stories/overview/overview.stories.tsx", "capabilities": [], "purpose": "Overview/Storybook Guide", "status": "unreviewed", @@ -3039,13 +3308,15 @@ "sources": [ "ui/src/components/ui/badge.tsx", "ui/src/components/ui/input.tsx", - "ui/storybook/stories/overview.stories.tsx" + "ui/storybook/stories/overview/overview.stories.tsx" ], "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "e4937a04090633914db07616816556caa1b980e0b1cbb9f9b9d132094f960a6d" + "fingerprint": "cc12edb19c1e75db6869f343a6d07b6f1d11faff9ecfbf18a38a7d710a01e6d3", + "stableId": "overview-storybook-guide", + "sidebarTitle": "Overview/Storybook Guide" }, { - "file": "ui/storybook/stories/paused-composer.stories.tsx", + "file": "ui/storybook/stories/steering/paused-composer.stories.tsx", "capabilities": [ "steering/stop-and-pause" ], @@ -3059,13 +3330,15 @@ "maps/feature-map/steering.md", "ui/src/components/task-chat/TaskChatComposer.tsx", "ui/storybook/prototypes/PausedTaskComposer.tsx", - "ui/storybook/stories/paused-composer.stories.tsx" + "ui/storybook/stories/steering/paused-composer.stories.tsx" ], - "replacement": "ui/storybook/stories/task-execution-controls.stories.tsx", - "fingerprint": "c186d26498e51279f1a262773ccaff918c4f15d8c58f3c1068bd697a6d511a16" + "replacement": "ui/storybook/stories/steering/task-execution-controls.stories.tsx", + "fingerprint": "cd90d40ff87a2ce1da5f1a815607055fbed0f9ea42cb74ffe170c769316d570b", + "stableId": "composer-paused-task-takeover", + "sidebarTitle": "Tasks and conversations/Steering and queued messages/Composer/Paused task takeover" }, { - "file": "ui/storybook/stories/permitted-vs-installed.stories.tsx", + "file": "ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx", "capabilities": [ "app-permissions/agent-access", "app-permissions/action-policy" @@ -3083,12 +3356,14 @@ "ui/src/pages/apps/AppsConnect.tsx", "ui/src/pages/apps/app-detail/PermissionsPanel.tsx", "ui/src/pages/apps/app-detail/types.ts", - "ui/storybook/stories/permitted-vs-installed.stories.tsx" + "ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx" ], - "fingerprint": "b87ffd90db211d079fe708638c65734bd95b07b379ca679e2f1f532fb65c1ea0" + "fingerprint": "8142253f986d8f969b73602f8832ded6b86f459f8ad46257af48655bc737b234", + "stableId": "tools-permitted-vs-installed", + "sidebarTitle": "Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed" }, { - "file": "ui/storybook/stories/personal-connection-identity.stories.tsx", + "file": "ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx", "capabilities": [ "connection-setup/identity-and-access" ], @@ -3101,12 +3376,14 @@ "sources": [ "maps/feature-map/connection-setup.md", "ui/src/pages/apps/app-detail/IdentitiesSection.tsx", - "ui/storybook/stories/personal-connection-identity.stories.tsx" + "ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx" ], - "fingerprint": "36c0da3501cf320bffa467227e0ad4cd02d9293f400dfeff43a3e633ca179adb" + "fingerprint": "2ac1d0214d0f286f3c35bd2ef7d50c59bc038ba314976e22f2900918e18e876a", + "stableId": "reviews-pap-17835-personal-connection-identity", + "sidebarTitle": "Apps, channels, and extensions/Connection setup/Reviews/PAP-17835 Personal connection identity" }, { - "file": "ui/storybook/stories/primary-agent/00-review-guide.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3122,12 +3399,14 @@ "maps/feature-map/agent-chat.md", "maps/feature-map/agents.md", "maps/feature-map/tasks.md", - "ui/storybook/stories/primary-agent/00-review-guide.stories.tsx" + "ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx" ], - "fingerprint": "463e3e9c850aa58719b16f21a4aef72856f612ca825e15b6052845008c927370" + "fingerprint": "851f4f865947d60c6b17d8eef65b78035caf27dcbd0ec2ac46afaad7ed38fa78", + "stableId": "primary-agent-00-review-guide", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide" }, { - "file": "ui/storybook/stories/primary-agent/01-components.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/01-components.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3154,13 +3433,15 @@ "ui/src/pages/Agents.production.tsx", "ui/src/pages/Agents.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/primary-agent/01-components.stories.tsx", - "ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx" + "ui/storybook/stories/agents/primary-agent/01-components.stories.tsx", + "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx" ], - "fingerprint": "5d6db5bda14b16e0dfec87a3d44e8e805ceefde034b53774d948392edcbb2373" + "fingerprint": "158129bcc28622cc3de88f13b51620bcc3e7b634b1f69938c7f4ff9892b7d356", + "stableId": "primary-agent-01-components", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components" }, { - "file": "ui/storybook/stories/primary-agent/02-sidebar.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3186,13 +3467,15 @@ "ui/src/pages/Agents.production.tsx", "ui/src/pages/Agents.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/primary-agent/02-sidebar.stories.tsx", - "ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx" + "ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx", + "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx" ], - "fingerprint": "7407f13fb2987fbd52b0adc72dda0eac39ab209005179b999ad3e1ed4f4b85d2" + "fingerprint": "3ad1e1e519d3a0e02ec2fd09cb64cd1dbf2e592712a6418e03d075c3a462fa75", + "stableId": "primary-agent-02-sidebar", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar" }, { - "file": "ui/storybook/stories/primary-agent/03-agents.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3218,13 +3501,15 @@ "ui/src/pages/Agents.production.tsx", "ui/src/pages/Agents.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/primary-agent/03-agents.stories.tsx", - "ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx" + "ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx", + "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx" ], - "fingerprint": "1713ccdafd4b46cf1b91ee6bf3c13c4bae35d2546793a6756b370261df175ef0" + "fingerprint": "a9a767d5708e58e8d5ab4a893a6723c96a9cb17f90459dab19104701dcd2850b", + "stableId": "primary-agent-03-agents", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents" }, { - "file": "ui/storybook/stories/primary-agent/04-new-task.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3250,13 +3535,15 @@ "ui/src/pages/Agents.production.tsx", "ui/src/pages/Agents.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/primary-agent/04-new-task.stories.tsx", - "ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx" + "ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx", + "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx" ], - "fingerprint": "ead0839536fb6b3d24449548e4a67cab23d1f704e7753ea1918eb734740c880f" + "fingerprint": "b8e2d721f79dcc64210f4c7b35f09536262a6a23f72241174f3a832fbed2bba3", + "stableId": "primary-agent-04-new-task", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task" }, { - "file": "ui/storybook/stories/primary-agent/05-chat.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3282,13 +3569,15 @@ "ui/src/pages/Agents.production.tsx", "ui/src/pages/Agents.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/primary-agent/05-chat.stories.tsx", - "ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx" + "ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx", + "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx" ], - "fingerprint": "b2c0128668180437fb0f416693e9cd91faa272b1dd8e1d376d67623873fb66b1" + "fingerprint": "e05752da7c5a429dbb4922bb995fb9579ac7163e6c4af65cf22c8e8d82008f33", + "stableId": "primary-agent-05-chat", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat" }, { - "file": "ui/storybook/stories/primary-agent/06-journeys.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3314,13 +3603,15 @@ "ui/src/pages/Agents.production.tsx", "ui/src/pages/Agents.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/primary-agent/06-journeys.stories.tsx", - "ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx" + "ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx", + "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx" ], - "fingerprint": "2dadd05767979d2e9cc2b17486bb33648cb7edc2ef0310ad176854d9351758fc" + "fingerprint": "3e6310ce06cb3d7528ea93c1717696fcd4ccff72f36171c2b608ac2e1b18d86e", + "stableId": "primary-agent-06-journeys", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys" }, { - "file": "ui/storybook/stories/primary-agent/07-confirmation.stories.tsx", + "file": "ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx", "capabilities": [ "agents/organization", "tasks/create", @@ -3346,13 +3637,15 @@ "ui/src/pages/Agents.production.tsx", "ui/src/pages/Agents.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/primary-agent/07-confirmation.stories.tsx", - "ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx" + "ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx", + "ui/storybook/support/primary-agent/PrimaryAgentStory.tsx" ], - "fingerprint": "6d3a3ce92995071c644c1032a3c9a3e9551af080e7c5c18507146428d6c7d49d" + "fingerprint": "eebd68443ba087a528b29589b085f89c6f968f94ce289e92e75278878da194db", + "stableId": "primary-agent-07-confirmation", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation" }, { - "file": "ui/storybook/stories/primitives-coverage.stories.tsx", + "file": "ui/storybook/stories/foundations/primitives-coverage.stories.tsx", "capabilities": [], "purpose": "Foundations/Primitive Coverage", "status": "unreviewed", @@ -3372,13 +3665,15 @@ "ui/src/components/ui/scroll-area.tsx", "ui/src/components/ui/sheet.tsx", "ui/src/components/ui/skeleton.tsx", - "ui/storybook/stories/primitives-coverage.stories.tsx" + "ui/storybook/stories/foundations/primitives-coverage.stories.tsx" ], "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "be31785092ae0b06c86bcaa52241ebe2cc209325310c811417cb2d7134a2fa69" + "fingerprint": "b8a0afd9a2fefb2e89e3215ca86a7dea3673f254d361f7d821d43c13c2a795bc", + "stableId": "foundations-primitive-coverage", + "sidebarTitle": "Foundations/Primitive Coverage" }, { - "file": "ui/storybook/stories/private-tasks/00-review-guide.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx", "capabilities": [ "access/resources", "tasks/properties" @@ -3392,12 +3687,14 @@ "sources": [ "maps/feature-map/access.md", "maps/feature-map/tasks.md", - "ui/storybook/stories/private-tasks/00-review-guide.stories.tsx" + "ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx" ], - "fingerprint": "bc7b2ff37bfb9d66ee562875119b3ca03fc7ae19ce749f1e06dcd4a3364574ab" + "fingerprint": "9c6ac52cc6d027359890f69a49ed413a092f36c7eb305b36d8bab54070633b9d", + "stableId": "private-tasks-00-review-guide", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/00 Review guide" }, { - "file": "ui/storybook/stories/private-tasks/01-creation.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/01-creation.stories.tsx", "capabilities": [ "access/resources", "tasks/properties" @@ -3420,14 +3717,16 @@ "ui/src/pages/Projects.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/privateTasks.ts", - "ui/storybook/stories/private-tasks/01-creation.stories.tsx", - "ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx", - "ui/storybook/stories/private-tasks/PrivacyStory.tsx" + "ui/storybook/stories/access/private-tasks/01-creation.stories.tsx", + "ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx", + "ui/storybook/support/private-tasks/PrivacyStory.tsx" ], - "fingerprint": "cacab6c556db61f247ba64a80a9785b8d4bda1292a255d689ed5b6fc6bdc3428" + "fingerprint": "03b3b019f9495280cc89648b901f4f49396c97e6cb8f25354d170f47ec968ffb", + "stableId": "private-tasks-01-creation", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/01 Creation" }, { - "file": "ui/storybook/stories/private-tasks/02-sharing.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx", "capabilities": [ "access/resources", "tasks/properties" @@ -3445,13 +3744,15 @@ "ui/src/components/ToastViewport.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/privateTasks.ts", - "ui/storybook/stories/private-tasks/02-sharing.stories.tsx", - "ui/storybook/stories/private-tasks/PrivacyStory.tsx" + "ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx", + "ui/storybook/support/private-tasks/PrivacyStory.tsx" ], - "fingerprint": "a24044c442953bd0cb1b197950b35640894d203e07fd1d3e02e042cc3ad263ed" + "fingerprint": "14eef8227c4193de41f7a75c7d0b8857e129a8d45c8eea619189f9a70f984b6f", + "stableId": "private-tasks-02-sharing", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/02 Sharing" }, { - "file": "ui/storybook/stories/private-tasks/03-task-actions.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx", "capabilities": [ "access/resources", "tasks/properties" @@ -3469,13 +3770,15 @@ "ui/src/components/ToastViewport.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/privateTasks.ts", - "ui/storybook/stories/private-tasks/03-task-actions.stories.tsx", - "ui/storybook/stories/private-tasks/PrivacyStory.tsx" + "ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx", + "ui/storybook/support/private-tasks/PrivacyStory.tsx" ], - "fingerprint": "382ac5d8ae287988d64a5eb808be14e86d6e880122f8b0765befd099b965e45f" + "fingerprint": "767e097ad435242b2bbf6453b58636458f2f0edcec0a9838443ada2bcced1ada", + "stableId": "private-tasks-03-task-actions", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/03 Task actions" }, { - "file": "ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx", "capabilities": [ "access/resources", "tasks/properties" @@ -3498,13 +3801,15 @@ "ui/src/components/task-detail/TaskDetailRelationsPanel.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/privateTasks.ts", - "ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx", - "ui/storybook/stories/private-tasks/PrivacyStory.tsx" + "ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx", + "ui/storybook/support/private-tasks/PrivacyStory.tsx" ], - "fingerprint": "993d88c52dc315938430be9a903a1de1f0a1b7ef3850ae6debab1ba0607cce24" + "fingerprint": "a0dc537873e6362097e5cdd7a7cfe141f42303b3e975547d03f428a937a6c037", + "stableId": "private-tasks-04-references-and-blockers", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers" }, { - "file": "ui/storybook/stories/private-tasks/05-projects.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/05-projects.stories.tsx", "capabilities": [ "access/resources", "tasks/properties", @@ -3526,13 +3831,15 @@ "ui/src/components/ToastViewport.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/privateTasks.ts", - "ui/storybook/stories/private-tasks/05-projects.stories.tsx", - "ui/storybook/stories/private-tasks/PrivacyStory.tsx" + "ui/storybook/stories/access/private-tasks/05-projects.stories.tsx", + "ui/storybook/support/private-tasks/PrivacyStory.tsx" ], - "fingerprint": "6141c4eaacee9f826673d15cea001ca1ca327f386ec23da03e393ab96820e989" + "fingerprint": "c3ae29a4a0e550629a17eaf817dc3d385e9ed811d3bcd6bf06859e0822378681", + "stableId": "private-tasks-05-projects", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/05 Projects" }, { - "file": "ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx", "capabilities": [ "access/resources", "tasks/properties", @@ -3557,13 +3864,15 @@ "ui/src/pages/Projects.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/privateTasks.ts", - "ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx", - "ui/storybook/stories/private-tasks/PrivacyStory.tsx" + "ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx", + "ui/storybook/support/private-tasks/PrivacyStory.tsx" ], - "fingerprint": "2acb548a73de6c8b7d6cdb39d9680018400a2739297309b6d0a4246301349ce6" + "fingerprint": "bbdceb12f6ba702663f243dd3986c5295677c7e9e007ffbed7cbe3efb385ab52", + "stableId": "private-tasks-06-full-product-pages", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages" }, { - "file": "ui/storybook/stories/private-tasks/07-user-stories.stories.tsx", + "file": "ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx", "capabilities": [ "access/resources", "tasks/properties" @@ -3596,19 +3905,21 @@ "ui/src/pages/Projects.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/privateTasks.ts", - "ui/storybook/stories/private-tasks/01-creation.stories.tsx", - "ui/storybook/stories/private-tasks/02-sharing.stories.tsx", - "ui/storybook/stories/private-tasks/03-task-actions.stories.tsx", - "ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx", - "ui/storybook/stories/private-tasks/05-projects.stories.tsx", - "ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx", - "ui/storybook/stories/private-tasks/07-user-stories.stories.tsx", - "ui/storybook/stories/private-tasks/PrivacyStory.tsx" + "ui/storybook/stories/access/private-tasks/01-creation.stories.tsx", + "ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx", + "ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx", + "ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx", + "ui/storybook/stories/access/private-tasks/05-projects.stories.tsx", + "ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx", + "ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx", + "ui/storybook/support/private-tasks/PrivacyStory.tsx" ], - "fingerprint": "ec90dd616ca5b936fcd597d3da85b62b2f379a6b5308348b55ba60592f4e405d" + "fingerprint": "361fb8ed1b95d3668529e2fa2c2d3951524909468134613f6e0c00d062a3ac82", + "stableId": "private-tasks-07-user-stories", + "sidebarTitle": "Getting started and access/Login, invitations, and access/Private tasks/07 User stories" }, { - "file": "ui/storybook/stories/project-execution-workspace-strategy.stories.tsx", + "file": "ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx", "capabilities": [ "projects/defaults", "workspaces/provisioning" @@ -3624,12 +3935,14 @@ "maps/feature-map/workspaces.md", "ui/src/components/ProjectProperties.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/project-execution-workspace-strategy.stories.tsx" + "ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx" ], - "fingerprint": "cfb10722518a7748f98a9320cfae3234388902bdeee9c0ec54cfb9fd817039d2" + "fingerprint": "d3c1ddd40e4acf1b30ee80655773c475e71885b75fe61b94c5a7ab1010fcb7ed", + "stableId": "workspaces-project-runtime-provision-command", + "sidebarTitle": "Projects and execution/Projects and repositories/Workspaces/Project runtime provision command" }, { - "file": "ui/storybook/stories/project-repos-configuration.stories.tsx", + "file": "ui/storybook/stories/projects/project-repos-configuration.stories.tsx", "capabilities": [ "projects/repositories" ], @@ -3651,12 +3964,14 @@ "ui/storybook/prototypes/project-repos/ProjectConfigurationPage.tsx", "ui/storybook/prototypes/project-repos/ProjectReposPrototype.tsx", "ui/storybook/prototypes/project-repos/fixtures.ts", - "ui/storybook/stories/project-repos-configuration.stories.tsx" + "ui/storybook/stories/projects/project-repos-configuration.stories.tsx" ], - "fingerprint": "9924dc5dd676d948318714f9ad76cdf08c47be36e4691833928a637ed6e4a03b" + "fingerprint": "8d96ac58686362abbaf468ba7cc400d43612fe0c8c21239cfa3fab2079ff5270", + "stableId": "proposals-project-repos-configuration", + "sidebarTitle": "Projects and execution/Projects and repositories/Proposals/Project repos/Configuration" }, { - "file": "ui/storybook/stories/projects-goals-workspaces.stories.tsx", + "file": "ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx", "capabilities": [ "projects/lifecycle", "goals/hierarchy", @@ -3680,12 +3995,14 @@ "ui/src/components/WorkspaceRuntimeControls.tsx", "ui/src/components/WorktreeBanner.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/projects-goals-workspaces.stories.tsx" + "ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx" ], - "fingerprint": "d1a5b5eced02dd205ae8acc07ebe41f29edfeb8fb38434a5c12f9d0927679a7e" + "fingerprint": "4aa89b2f36fd6db30b20528b2e95063a8846279d28623f927de35acd75ce64f5", + "stableId": "product-projects-goals-workspaces", + "sidebarTitle": "Projects and execution/Projects and repositories/Product/Projects Goals Workspaces" }, { - "file": "ui/storybook/stories/provider-routing-00-overview.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -3700,12 +4017,14 @@ "ui/storybook/prototypes/provider-routing/ReviewIndex.tsx", "ui/storybook/prototypes/provider-routing/shared.tsx", "ui/storybook/prototypes/provider-routing/story-support.ts", - "ui/storybook/stories/provider-routing-00-overview.stories.tsx" + "ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx" ], - "fingerprint": "6e0da3867aacfd313e24b8b14494536c0dffe2c4927e79371bd263a19e5be30f" + "fingerprint": "9f1c436cf8ac4a409ca597d95abf4a975ab5a58be08c37edbcd44547bea04d55", + "stableId": "ai-connections-provider-routing-00-overview", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/00 Overview" }, { - "file": "ui/storybook/stories/provider-routing-01-onboarding.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -3748,12 +4067,14 @@ "ui/storybook/prototypes/provider-routing/model.ts", "ui/storybook/prototypes/provider-routing/shared.tsx", "ui/storybook/prototypes/provider-routing/story-support.ts", - "ui/storybook/stories/provider-routing-01-onboarding.stories.tsx" + "ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx" ], - "fingerprint": "c4867ec22b6b54a872d42fbe210ad0b671e64b920bdcf5e450d88091995c5965" + "fingerprint": "17ed706f27cb9282f6918dd855160aeb6a63c003d7891c6fa6a336cd7cec1f8b", + "stableId": "ai-connections-provider-routing-01-onboarding", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/01 Onboarding" }, { - "file": "ui/storybook/stories/provider-routing-02-connect.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -3777,12 +4098,14 @@ "ui/storybook/prototypes/provider-routing/model.ts", "ui/storybook/prototypes/provider-routing/shared.tsx", "ui/storybook/prototypes/provider-routing/story-support.ts", - "ui/storybook/stories/provider-routing-02-connect.stories.tsx" + "ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx" ], - "fingerprint": "a6cd3df8023c60a14a54dfb399ae3d5c42c42300daa22f6fffd9f8f75d1dd14c" + "fingerprint": "25d750d1d9ab3e1adf71bc1273d577e7b59939f6db1b96a55f59e6da3bea8b8e", + "stableId": "ai-connections-provider-routing-02-connect", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/02 Connect" }, { - "file": "ui/storybook/stories/provider-routing-03-agent.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -3825,12 +4148,14 @@ "ui/storybook/prototypes/provider-routing/model.ts", "ui/storybook/prototypes/provider-routing/shared.tsx", "ui/storybook/prototypes/provider-routing/story-support.ts", - "ui/storybook/stories/provider-routing-03-agent.stories.tsx" + "ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx" ], - "fingerprint": "826b6dff2a44cbf04f433672b1a05daa6e479d3e4dddfbbe9f1b68b5a08ce90d" + "fingerprint": "dd04df0958753c6b4e3fbf97b118e1d69543c8e213970f2cfeffebdc5a7ecc91", + "stableId": "ai-connections-provider-routing-03-agent", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/03 Agent" }, { - "file": "ui/storybook/stories/provider-routing-04-manage.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -3856,12 +4181,14 @@ "ui/storybook/prototypes/provider-routing/model.ts", "ui/storybook/prototypes/provider-routing/shared.tsx", "ui/storybook/prototypes/provider-routing/story-support.ts", - "ui/storybook/stories/provider-routing-04-manage.stories.tsx" + "ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx" ], - "fingerprint": "2503a1f43bf4d887c466fca9b462ad21b603140dbaff0d3f940a4adcf37898f0" + "fingerprint": "f549ac215f9307cb77deefce243283d673b497901c996f5be67eeff177420024", + "stableId": "ai-connections-provider-routing-04-manage", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/04 Manage" }, { - "file": "ui/storybook/stories/provider-routing-05-recovery.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -3879,12 +4206,14 @@ "ui/storybook/prototypes/provider-routing/Recovery.tsx", "ui/storybook/prototypes/provider-routing/shared.tsx", "ui/storybook/prototypes/provider-routing/story-support.ts", - "ui/storybook/stories/provider-routing-05-recovery.stories.tsx" + "ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx" ], - "fingerprint": "d028cd3f82eae265db8b93a3ad523fa268929ee897ba6bf10fa5af13821ecb0d" + "fingerprint": "5cfce358ed547b3eba402b1cdd5c58bac7ea71359c4edc7674c0c7e4de72e51e", + "stableId": "ai-connections-provider-routing-05-recovery", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/05 Recovery" }, { - "file": "ui/storybook/stories/provider-routing-06-production.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx", "capabilities": [ "runs-adapters/validation" ], @@ -3908,12 +4237,14 @@ "ui/storybook/prototypes/provider-routing/ConnectionCatalog.tsx", "ui/storybook/prototypes/provider-routing/model.ts", "ui/storybook/prototypes/provider-routing/shared.tsx", - "ui/storybook/stories/provider-routing-06-production.stories.tsx" + "ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx" ], - "fingerprint": "05984862e300309f20b828d08375ebe545c561b02f3bfbf0968fbbc2f18ae210" + "fingerprint": "405597333685a02824aa162927f2e0c544647ec7079adbc74c61031e8258c8e6", + "stableId": "ai-connections-provider-routing-06-production-components", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/06 Production components" }, { - "file": "ui/storybook/stories/public-mcp-connections.stories.tsx", + "file": "ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx", "capabilities": [ "gateways-profiles/client-connect" ], @@ -3927,12 +4258,14 @@ "maps/feature-map/gateways-profiles.md", "ui/src/pages/McpConnect.tsx", "ui/storybook/fixtures/publicMcp.ts", - "ui/storybook/stories/public-mcp-connections.stories.tsx" + "ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx" ], - "fingerprint": "cb92bcca9caaf974d56d500a00abc79c80f84a88330a99f0afa804c2ee5a96e8" + "fingerprint": "59a7260fb8b5b123828d9d0d0d2cd081d1456bbdf0ebedf7e65e5b880fe084b5", + "stableId": "assistant-connections-manage-connections", + "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Manage connections" }, { - "file": "ui/storybook/stories/public-mcp-consent.stories.tsx", + "file": "ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx", "capabilities": [ "gateways-profiles/client-connect" ], @@ -3946,12 +4279,14 @@ "maps/feature-map/gateways-profiles.md", "ui/src/pages/McpConnect.tsx", "ui/storybook/fixtures/publicMcp.ts", - "ui/storybook/stories/public-mcp-consent.stories.tsx" + "ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx" ], - "fingerprint": "e1925d8873434a241d8b5acf605210a3b0c179c418cdbb4c96ba08bc208e17c7" + "fingerprint": "263a310d8c4fdf4c693f77dddc923880330d9be73c69cbb05b83d3ed4d59490a", + "stableId": "assistant-connections-consent", + "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Consent" }, { - "file": "ui/storybook/stories/public-mcp-device.stories.tsx", + "file": "ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx", "capabilities": [ "gateways-profiles/client-connect" ], @@ -3965,12 +4300,14 @@ "maps/feature-map/gateways-profiles.md", "ui/src/pages/McpConnect.tsx", "ui/storybook/fixtures/publicMcp.ts", - "ui/storybook/stories/public-mcp-device.stories.tsx" + "ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx" ], - "fingerprint": "726d36d9d9652a36cae43834ccb12f7bbe98cd0cb1f938c1ddfe5eada05f9a13" + "fingerprint": "931a100cc1ad520bdb43712fad8b0284e47ad1a3ee531d55a5cbff0a430907c0", + "stableId": "assistant-connections-device-authorization", + "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Device authorization" }, { - "file": "ui/storybook/stories/public-mcp-journey.stories.tsx", + "file": "ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx", "capabilities": [ "gateways-profiles/client-connect" ], @@ -3987,13 +4324,15 @@ "ui/src/pages/apps/AssistantConnection.tsx", "ui/src/pages/apps/Browse.tsx", "ui/storybook/fixtures/publicMcp.ts", - "ui/storybook/stories/public-mcp-journey.stories.tsx", - "ui/storybook/stories/public-mcp-presenter.tsx" + "ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx", + "ui/storybook/support/public-mcp-presenter.tsx" ], - "fingerprint": "c64f1aa2b77aeb83acece5e1a62f5ce890cf48434cbb07a6fdcfbe37cb5abc33" + "fingerprint": "683c517cdaa396555d0bafe049401ccd9768c4d4dec58c3fc4cbbb292e7c147d", + "stableId": "assistant-connections-start-here", + "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Start here" }, { - "file": "ui/storybook/stories/public-mcp-setting.stories.tsx", + "file": "ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx", "capabilities": [ "gateways-profiles/client-connect" ], @@ -4007,12 +4346,14 @@ "maps/feature-map/gateways-profiles.md", "ui/src/pages/InstanceExperimentalSettings.tsx", "ui/storybook/fixtures/publicMcp.ts", - "ui/storybook/stories/public-mcp-setting.stories.tsx" + "ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx" ], - "fingerprint": "95d870bcd963c30a6ba79bcbb5b0e97db8406d21b044fae6a8e795638428b629" + "fingerprint": "15f99c5632c11f8e90dfaa340d192b90b07138176317e17e51a176952383adb7", + "stableId": "assistant-connections-experimental-setting", + "sidebarTitle": "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting" }, { - "file": "ui/storybook/stories/recovery-notice-preview.stories.tsx", + "file": "ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx", "capabilities": [ "recovery/diagnosis", "recovery/source-action" @@ -4029,12 +4370,14 @@ "ui/src/components/task-chat/TaskChatSystemNotice.tsx", "ui/src/components/task-chat/task-chat-model.ts", "ui/storybook/prototypes/recovery-notice/RecoveryNoticePreview.tsx", - "ui/storybook/stories/recovery-notice-preview.stories.tsx" + "ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx" ], - "fingerprint": "844e5749b27fa106b07357e82223ca559d35281e6a4cff086e8d38db048eac95" + "fingerprint": "4e880f02947c96e751ecca7a0f662106874ac5b58f254915592ecdec699298de", + "stableId": "design-previews-recovery-notice", + "sidebarTitle": "Projects and execution/Recovery/Design previews/Recovery notice" }, { - "file": "ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx", + "file": "ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx", "capabilities": [ "skills/versions", "skills/discovery" @@ -4053,13 +4396,15 @@ "ui/src/pages/SkillStudio.tsx", "ui/storybook/fixtures/githubSkillSources.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/github-skills-journey.stories.tsx", - "ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx" + "ui/storybook/stories/skills/github-skills-journey.stories.tsx", + "ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx" ], - "fingerprint": "a1931c5b6ddcc74287861c3b0bc014ebc3d37614f96784da9008d63630e04e4e" + "fingerprint": "a90fb6c9377034d3645b851711ddc84eb3b9945dce0cdea4496cb9a4050fb8ad", + "stableId": "skills-repository-packages", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages" }, { - "file": "ui/storybook/stories/rich-acp-interactions.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx", "capabilities": [ "questions-and-approvals/questions", "questions-and-approvals/confirmations", @@ -4080,12 +4425,14 @@ "ui/src/components/task-chat/task-chat-model.ts", "ui/src/components/task-chat/transcript-adapter.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/rich-acp-interactions.stories.tsx" + "ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx" ], - "fingerprint": "e707ee55d955565de4be5b7bd33a1c84f0dda43ed7d8a0ad1af5704da409b116" + "fingerprint": "6a524bb57fd5e0c0e70ce6cb4b7d61076293f4380f93707a6786f1cccbdcc887", + "stableId": "chat-comments-rich-acp-interactions", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions" }, { - "file": "ui/storybook/stories/rich-work-product-cards.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx", "capabilities": [ "documents-artifacts/work-products" ], @@ -4100,17 +4447,19 @@ "ui/src/components/task-chat/RichWorkProductCard.tsx", "ui/src/components/task-chat/TaskChatBubble.tsx", "ui/src/components/task-chat/task-chat-model.ts", - "ui/storybook/stories/rich-work-product-cards.stories.tsx" + "ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx" ], - "fingerprint": "715cfced9ddfd845e74b8cb391faaacd223979f5e4dde95b4e7924302b3822eb" + "fingerprint": "e02eeeed61f5311ac298a8655906089e96ca867670a1deebcc36fb7432fb3153", + "stableId": "task-chat-rich-work-product-cards", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Task Chat/Rich Work Product Cards" }, { - "file": "ui/storybook/stories/routine-detail-c.stories.tsx", + "file": "ui/storybook/stories/routines/routine-detail-c.stories.tsx", "capabilities": [ "routines/definition", "routines/management" ], - "purpose": "Product/Routines \u00b7 Detail (variation C)", + "purpose": "Product/Routines · Detail (variation C)", "status": "unreviewed", "implementation": "production", "boundary": "fixtures", @@ -4125,17 +4474,19 @@ "ui/src/components/routine-sections/editable-sections.tsx", "ui/src/components/routine-sections/operate-sections.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/routine-detail-c.stories.tsx" + "ui/storybook/stories/routines/routine-detail-c.stories.tsx" ], - "fingerprint": "803771d302dae639105261ccf7589ca7577f07aadaa060d6015804268a23922b" + "fingerprint": "c07544c830cd35d90c553d9388e2a9479e42f69460a6c506e1c541cea78607d4", + "stableId": "product-routines-·-detail-variation-c", + "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)" }, { - "file": "ui/storybook/stories/routine-secrets.stories.tsx", + "file": "ui/storybook/stories/routines/routine-secrets.stories.tsx", "capabilities": [ "routines/definition", "secrets/runtime-delivery" ], - "purpose": "Product/Routines \u00b7 Secrets tab", + "purpose": "Product/Routines · Secrets tab", "status": "unreviewed", "implementation": "production", "boundary": "fixtures", @@ -4147,12 +4498,14 @@ "ui/src/components/RoutineHistoryTab.tsx", "ui/src/components/environment-variables-editor/index.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/routine-secrets.stories.tsx" + "ui/storybook/stories/routines/routine-secrets.stories.tsx" ], - "fingerprint": "03c9f2ff8c2f32316a5ab9e245b5aca89bff831523a8d40672f45fb919d108d7" + "fingerprint": "03c05c0cca01d220885ea96f13495bcc185121eecbbeb00918511b4d7de26016", + "stableId": "product-routines-·-secrets-tab", + "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab" }, { - "file": "ui/storybook/stories/routine-webhooks-ux.stories.tsx", + "file": "ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx", "capabilities": [ "routines/triggers" ], @@ -4175,12 +4528,14 @@ "ui/storybook/fixtures/routineTriggerWizard.tsx", "ui/storybook/fixtures/routineWebhookFields.tsx", "ui/storybook/fixtures/routineWebhooks.tsx", - "ui/storybook/stories/routine-webhooks-ux.stories.tsx" + "ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx" ], - "fingerprint": "79ae3dfb95aa9ec283df353b856a96e35f85a20360305853e3f566dc9e587a97" + "fingerprint": "96129f07a13497700039df8275b2f8d3d74468793e042c01e61bda2bdc1ad8fe", + "stableId": "product-routines-webhooks-ux-preview", + "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks UX preview" }, { - "file": "ui/storybook/stories/routine-webhooks.stories.tsx", + "file": "ui/storybook/stories/routines/routine-webhooks.stories.tsx", "capabilities": [ "routines/triggers" ], @@ -4197,17 +4552,19 @@ "ui/src/pages/Routines.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/routineWebhooks.tsx", - "ui/storybook/stories/routine-webhooks.stories.tsx" + "ui/storybook/stories/routines/routine-webhooks.stories.tsx" ], - "fingerprint": "3e73dd1236c56f2033765874654ed86418612a91de8c4aa8aaedc71bb751dcfe" + "fingerprint": "588536cb71d6c79eff20ea1dc14d60c96932631f267a45adc36e2078d816aa39", + "stableId": "product-routines-webhooks", + "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks" }, { - "file": "ui/storybook/stories/routines-list-groups.stories.tsx", + "file": "ui/storybook/stories/routines/routines-list-groups.stories.tsx", "capabilities": [ "routines/definition", "routines/management" ], - "purpose": "Product/Routines \u00b7 List (grouped cards)", + "purpose": "Product/Routines · List (grouped cards)", "status": "unreviewed", "implementation": "production", "boundary": "fixtures", @@ -4216,12 +4573,14 @@ "sources": [ "maps/feature-map/routines.md", "ui/src/components/RoutineList.tsx", - "ui/storybook/stories/routines-list-groups.stories.tsx" + "ui/storybook/stories/routines/routines-list-groups.stories.tsx" ], - "fingerprint": "50c3957e9dcc8fc61ab90352d9646f06108ae1da56ad37a3107f0ca5e782dfe3" + "fingerprint": "02a433aeee5be2ecc3284f0a27c45c4222e3abf05cbd478e55bfb7462a301d19", + "stableId": "product-routines-·-list-grouped-cards", + "sidebarTitle": "Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)" }, { - "file": "ui/storybook/stories/runner-activity.stories.tsx", + "file": "ui/storybook/stories/tasks/runner-activity.stories.tsx", "capabilities": [ "tasks/discussion", "runs-adapters/runs" @@ -4243,12 +4602,14 @@ "ui/src/components/task-chat/task-chat-model.ts", "ui/src/components/task-chat/transcript-adapter.ts", "ui/storybook/prototypes/runner-activity/RunnerActivityPreview.tsx", - "ui/storybook/stories/runner-activity.stories.tsx" + "ui/storybook/stories/tasks/runner-activity.stories.tsx" ], - "fingerprint": "c49b64d79396d3a04dc7ec15d241758fc90ba47785d330fd5024b65e367d2c90" + "fingerprint": "fc9539ac75fd89906fcd403ca1e5792b21440b898d0662317fbe28d7192e725d", + "stableId": "tasks-runner-activity-preview", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview" }, { - "file": "ui/storybook/stories/scheduled-retry.stories.tsx", + "file": "ui/storybook/stories/recovery/scheduled-retry.stories.tsx", "capabilities": [ "recovery/bounded-continuation" ], @@ -4263,12 +4624,14 @@ "ui/src/components/IssueProperties.tsx", "ui/src/components/IssueScheduledRetryCard.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/scheduled-retry.stories.tsx" + "ui/storybook/stories/recovery/scheduled-retry.stories.tsx" ], - "fingerprint": "ca1545d68d032468f9ad897d9942b59c1d8a60b29f2211a47d6e0c191b30279d" + "fingerprint": "b07bdc368ce48d184b5cd99156ed23c03251ac9ecd90de47812db351261cc5c0", + "stableId": "product-issue-scheduled-retry-surfaces", + "sidebarTitle": "Projects and execution/Recovery/Product/Issue Scheduled retry surfaces" }, { - "file": "ui/storybook/stories/search.stories.tsx", + "file": "ui/storybook/stories/inbox-search/search.stories.tsx", "capabilities": [ "inbox-search/search" ], @@ -4288,12 +4651,14 @@ "ui/src/components/search/SearchResultRow.tsx", "ui/src/components/search/ZeroResultsRecovery.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/search.stories.tsx" + "ui/storybook/stories/inbox-search/search.stories.tsx" ], - "fingerprint": "204fd804d9d5ff2235b0a770f2317e245e695c4bc9f069d8d09b4cb99d85b877" + "fingerprint": "dfd04cb52d810ed016fae1508dea6fa7baeb8a71676e605a4eff269d844957b6", + "stableId": "product-search-command-k", + "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Product/Search & Command K" }, { - "file": "ui/storybook/stories/searchable-select.stories.tsx", + "file": "ui/storybook/stories/workspaces/searchable-select.stories.tsx", "capabilities": [ "workspaces/binding" ], @@ -4306,12 +4671,14 @@ "sources": [ "maps/feature-map/workspaces.md", "ui/src/components/SearchableSelect.tsx", - "ui/storybook/stories/searchable-select.stories.tsx" + "ui/storybook/stories/workspaces/searchable-select.stories.tsx" ], - "fingerprint": "08f37975b7be5affcdf2905dfa9b7d7a47cb18615591fb6167c563b07cb61533" + "fingerprint": "a09a2ecf9c05843dc29ea4fd173fa7e9b0968defc8a83d48b2ffc81503b2f98f", + "stableId": "components-searchableselect-workspace-picker", + "sidebarTitle": "Projects and execution/Workspaces, services, and files/Components/SearchableSelect/Workspace picker" }, { - "file": "ui/storybook/stories/secrets.stories.tsx", + "file": "ui/storybook/stories/secrets/secrets.stories.tsx", "capabilities": [ "secrets/company-secrets", "secrets/vault-import" @@ -4328,12 +4695,14 @@ "ui/src/components/environment-variables-editor/index.tsx", "ui/src/pages/Secrets.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/secrets.stories.tsx" + "ui/storybook/stories/secrets/secrets.stories.tsx" ], - "fingerprint": "30dcadb034495649535e501bdbd31c41327437f6f96c05937f544cdfb2dd0624" + "fingerprint": "246539c619974c29848ae6ba3685aa741dbc572eeb6f8cffb2e9328501fbf31b", + "stableId": "product-secrets", + "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Product/Secrets" }, { - "file": "ui/storybook/stories/session-goals.stories.tsx", + "file": "ui/storybook/stories/runs-adapters/session-goals.stories.tsx", "capabilities": [ "runs-adapters/session" ], @@ -4346,12 +4715,14 @@ "sources": [ "maps/feature-map/runs-adapters.md", "ui/src/components/task-chat/RunnerGoalWidget.tsx", - "ui/storybook/stories/session-goals.stories.tsx" + "ui/storybook/stories/runs-adapters/session-goals.stories.tsx" ], - "fingerprint": "9bcfb237cf6c16bcb81ecdfbd31110f8709fb9b06d2c60bb3bfe58b2d2314ecc" + "fingerprint": "1d6e7f30007a296443b0670142cb13694e0e955e6f97687f306f69155e766593", + "stableId": "composer-session-goals", + "sidebarTitle": "Agents and reusable capabilities/Runs, harnesses, and model accounts/Composer/Session goals" }, { - "file": "ui/storybook/stories/skill-import-progress.stories.tsx", + "file": "ui/storybook/stories/skills/skill-import-progress.stories.tsx", "capabilities": [ "skills/versions", "skills/discovery" @@ -4367,12 +4738,14 @@ "ui/src/pages/skills/SkillImportProgress.tsx", "ui/storybook/fixtures/githubSkillSources.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/skill-import-progress.stories.tsx" + "ui/storybook/stories/skills/skill-import-progress.stories.tsx" ], - "fingerprint": "b4f466783a0864a6841a650483ffb00ec0999fac0eba6b3a3a38c2f87258b938" + "fingerprint": "55477a243eb0cd940e20e47b0c2e388af26268930be5ee516043a8812f3ab0e5", + "stableId": "skills-import-progress", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress" }, { - "file": "ui/storybook/stories/skill-policy-surfaces.stories.tsx", + "file": "ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx", "capabilities": [ "skills/policy" ], @@ -4385,12 +4758,14 @@ "sources": [ "maps/feature-map/skills.md", "ui/src/components/skill-studio/SkillPolicySurfaces.tsx", - "ui/storybook/stories/skill-policy-surfaces.stories.tsx" + "ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx" ], - "fingerprint": "13ba7a87a34ca9aedddb9fe28132238b2064d9e6155a8e4ce7d587a641483f97" + "fingerprint": "1f39ed395b4e147167ad855f867d7cb61d4829f4077e74ffe7c53029d67b67de", + "stableId": "product-skills-policy-surfaces", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Product/Skills/Policy surfaces" }, { - "file": "ui/storybook/stories/skills-store-detail.stories.tsx", + "file": "ui/storybook/stories/skills/skills-store-detail.stories.tsx", "capabilities": [ "skills/discovery" ], @@ -4403,12 +4778,14 @@ "sources": [ "maps/feature-map/skills.md", "ui/src/pages/CompanySkills.tsx", - "ui/storybook/stories/skills-store-detail.stories.tsx" + "ui/storybook/stories/skills/skills-store-detail.stories.tsx" ], - "fingerprint": "22f4467cce744d7eed66f0c441c549d289dc34c6723ff3c4dd4c7df31e22a262" + "fingerprint": "18c72ba27b8f06c186e21552c62d03a477ceb0b4f0d66253ed556830d7cc9a75", + "stableId": "skills-store-skill-detail", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail" }, { - "file": "ui/storybook/stories/skills-store-discovery.stories.tsx", + "file": "ui/storybook/stories/skills/skills-store-discovery.stories.tsx", "capabilities": [ "skills/discovery" ], @@ -4421,12 +4798,14 @@ "sources": [ "maps/feature-map/skills.md", "ui/src/pages/CompanySkills.tsx", - "ui/storybook/stories/skills-store-discovery.stories.tsx" + "ui/storybook/stories/skills/skills-store-discovery.stories.tsx" ], - "fingerprint": "110b1e6168b39c7112d3317e7ef9db33048e77cf2c78331e3cb6f194567f182e" + "fingerprint": "8f492ae3f71ac39d7a752929df767b9d37a0e782e2d3ee515cfa1b5c22d0c1a9", + "stableId": "skills-store-discovery-grid", + "sidebarTitle": "Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Discovery grid" }, { - "file": "ui/storybook/stories/slack-automatic-setup.stories.tsx", + "file": "ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx", "capabilities": [ "chat-channels/providers", "connection-setup/channel-setup" @@ -4444,12 +4823,14 @@ "ui/src/pages/apps/chat/ChatEndpointSetup.tsx", "ui/storybook/fixtures/SlackSetupFixture.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/slack-automatic-setup.stories.tsx" + "ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx" ], - "fingerprint": "51f957023492730e96a73d3322fceab232e522f4ef15c84e872d8924ddb72149" + "fingerprint": "42fb2d53434f7ba8cc5cce556818d6469e02da559bd40fb6dbd4fd5bec9aecb5", + "stableId": "connections-slack-automatic-setup", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup" }, { - "file": "ui/storybook/stories/slack-avatar-settings.stories.tsx", + "file": "ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx", "capabilities": [ "chat-channels/identity" ], @@ -4464,12 +4845,14 @@ "ui/src/pages/apps/chat/ChatCommunicationInstructions.tsx", "ui/src/pages/apps/chat/SlackAvatarStep.tsx", "ui/storybook/prototypes/slack-avatar/SlackAvatarSettingsPreview.tsx", - "ui/storybook/stories/slack-avatar-settings.stories.tsx" + "ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx" ], - "fingerprint": "216835fbd5f463176e6e1eef64df3bfa6325f460004aa0ae0dc22518ef5de2a1" + "fingerprint": "ed2053a543507e9ad110084b6974204897193fcc1d7a1c4cb23f15e1cfe5dcba", + "stableId": "connections-slack-avatar-in-settings", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Avatar in Settings" }, { - "file": "ui/storybook/stories/slack-communication-settings.stories.tsx", + "file": "ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx", "capabilities": [ "chat-channels/identity" ], @@ -4484,12 +4867,14 @@ "ui/src/pages/apps/chat/ChatCommunicationInstructions.tsx", "ui/src/pages/apps/chat/SlackAvatarStep.tsx", "ui/storybook/prototypes/slack-avatar/SlackAvatarSettingsPreview.tsx", - "ui/storybook/stories/slack-communication-settings.stories.tsx" + "ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx" ], - "fingerprint": "100ef834dc5074cc4682a04a329967db5844489b71b56fa410bd76dfa0541ff4" + "fingerprint": "c581843a009938f16173f6874a1edbe6a562c3c4382b3a674fcd3487d37a50ce", + "stableId": "connections-slack-communication-in-settings", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Communication in Settings" }, { - "file": "ui/storybook/stories/slack-managed-setup.stories.tsx", + "file": "ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx", "capabilities": [ "chat-channels/providers", "connection-setup/channel-setup" @@ -4507,12 +4892,14 @@ "ui/src/pages/apps/chat/ChatEndpointSetup.tsx", "ui/storybook/fixtures/SlackSetupFixture.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/slack-managed-setup.stories.tsx" + "ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx" ], - "fingerprint": "010592e2358a425353471763246fa801034c65b83cf01c4eed1e4a82e4ea6ed6" + "fingerprint": "d947a4bd8dec88fd77c0b68e51ff12bab050342661e455a4f72443d82916d7c9", + "stableId": "connections-slack-managed-setup", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup" }, { - "file": "ui/storybook/stories/slack-tools.stories.tsx", + "file": "ui/storybook/stories/chat-channels/slack-tools.stories.tsx", "capabilities": [ "chat-channels/conversation" ], @@ -4525,12 +4912,14 @@ "sources": [ "maps/feature-map/chat-channels.md", "ui/src/pages/apps/chat/SlackToolSettings.tsx", - "ui/storybook/stories/slack-tools.stories.tsx" + "ui/storybook/stories/chat-channels/slack-tools.stories.tsx" ], - "fingerprint": "9348c9d89befbf34e9eb905b290f7b73b192337cd498ddc028e4ddfe44e7d8bd" + "fingerprint": "a8464a4cbed26f72dacc14e77326caa7d649b23eec075729667d48f267bb8a03", + "stableId": "connections-slack-task-tools", + "sidebarTitle": "Apps, channels, and extensions/External chat and email/Connections/Slack/Task tools" }, { - "file": "ui/storybook/stories/source-issue-recovery.stories.tsx", + "file": "ui/storybook/stories/recovery/source-issue-recovery.stories.tsx", "capabilities": [ "recovery/diagnosis", "recovery/source-action" @@ -4547,12 +4936,14 @@ "ui/src/components/IssueRecoveryActionCard.tsx", "ui/src/components/IssueRow.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/source-issue-recovery.stories.tsx" + "ui/storybook/stories/recovery/source-issue-recovery.stories.tsx" ], - "fingerprint": "c7457183c25c8802e6b6b47f1ec8575ed277f834b09aa1ebc5735fe61776f5cd" + "fingerprint": "ad00308c561a44cfb60a7b359ac88b48ad5ee2f13d4b36af99552c29c0a3df67", + "stableId": "paperclip-source-issue-recovery", + "sidebarTitle": "Projects and execution/Recovery/Paperclip/Source Issue Recovery" }, { - "file": "ui/storybook/stories/source-resolved-fold.stories.tsx", + "file": "ui/storybook/stories/recovery/source-resolved-fold.stories.tsx", "capabilities": [ "recovery/diagnosis", "recovery/source-action" @@ -4567,12 +4958,14 @@ "maps/feature-map/recovery.md", "ui/src/components/SourceResolvedFoldBadge.tsx", "ui/src/components/SourceResolvedFoldCallout.tsx", - "ui/storybook/stories/source-resolved-fold.stories.tsx" + "ui/storybook/stories/recovery/source-resolved-fold.stories.tsx" ], - "fingerprint": "8afd150fe253fae2d9094c6678449693b28e63249f5a852feabd43bed87a1b25" + "fingerprint": "f6a8c8477c45cbf1c98a0e0a8618373800183aa49a189b00efac62c42fb0b92e", + "stableId": "paperclip-source-resolved-fold", + "sidebarTitle": "Projects and execution/Recovery/Paperclip/Source-resolved Fold" }, { - "file": "ui/storybook/stories/status-language.stories.tsx", + "file": "ui/storybook/stories/foundations/status-language.stories.tsx", "capabilities": [], "purpose": "Foundations/Status Language", "status": "unreviewed", @@ -4593,13 +4986,15 @@ "ui/src/components/StatusIcon.tsx", "ui/src/components/ui/card.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/status-language.stories.tsx" + "ui/storybook/stories/foundations/status-language.stories.tsx" ], "exception": "Shared foundations or contributor guide; no single business capability owns this suite.", - "fingerprint": "8514f6eaa6b793e7737f4aef33dd2a1bf1fe47bf7cf106f7fd56be1c1466be26" + "fingerprint": "1c7360f6c527b4377c85ee10b1eeb4d268b1af77b7a403ed321129b918409b76", + "stableId": "foundations-status-language", + "sidebarTitle": "Foundations/Status Language" }, { - "file": "ui/storybook/stories/sub-issues-workflow.stories.tsx", + "file": "ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx", "capabilities": [ "task-coordination/dependencies", "task-coordination/delegation" @@ -4614,12 +5009,14 @@ "maps/feature-map/task-coordination.md", "ui/src/components/IssuesList.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/sub-issues-workflow.stories.tsx" + "ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx" ], - "fingerprint": "aab65b7c2d7d976b9f8ceb99d60c1b16d6e6eb97e8443afa48fa3e92561feec3" + "fingerprint": "f9ebab21b19cd4aed698c7f1b060c8c6e39788f8224b567d86bf0b4841d038b2", + "stableId": "ux-labs-sub-issues-workflow-checklist", + "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist" }, { - "file": "ui/storybook/stories/successful-run-handoff.stories.tsx", + "file": "ui/storybook/stories/tasks/successful-run-handoff.stories.tsx", "capabilities": [ "tasks/completion", "recovery/diagnosis" @@ -4638,12 +5035,14 @@ "ui/src/components/IssueChatThread.tsx", "ui/src/components/KanbanBoard.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/successful-run-handoff.stories.tsx" + "ui/storybook/stories/tasks/successful-run-handoff.stories.tsx" ], - "fingerprint": "453ca62993784ebcff825853ee3ac3207d6ea0ff0db960a9f6fd9da418bb50e4" + "fingerprint": "dee060e56c932b5c076cde939cc8cad36b46452fd3fd85118e1eb6664deb47ad", + "stableId": "paperclip-successful-run-handoff", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff" }, { - "file": "ui/storybook/stories/summary-slot-card.stories.tsx", + "file": "ui/storybook/stories/agents/summary-slot-card.stories.tsx", "capabilities": [ "agents/built-in" ], @@ -4656,12 +5055,14 @@ "sources": [ "maps/feature-map/agents.md", "ui/src/components/SummarySlotCard.tsx", - "ui/storybook/stories/summary-slot-card.stories.tsx" + "ui/storybook/stories/agents/summary-slot-card.stories.tsx" ], - "fingerprint": "8504293cf126375d22ffe6a6fd80c5f1736b5fb03bb01618e5c65c5d9a32bb31" + "fingerprint": "810f833adef832e3eaf3a0e70da1b433d6c1bb59deb7928725e4de48753c0000", + "stableId": "summaries-summaryslotcard", + "sidebarTitle": "Agents and reusable capabilities/Hiring, configuration, and organization/Summaries/SummarySlotCard" }, { - "file": "ui/storybook/stories/task-artifact-gallery.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx", "capabilities": [ "documents-artifacts/library", "documents-artifacts/work-products" @@ -4679,12 +5080,14 @@ "ui/src/components/task-chat/RichWorkProductCard.tsx", "ui/src/components/task-chat/TaskChatBubble.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/task-artifact-gallery.stories.tsx" + "ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx" ], - "fingerprint": "80254d3e29fbbb687300a8fee5900dbb9b6a8b68ce22d95a4a9ae78fe956dc16" + "fingerprint": "4d8181361cd7fd9c38ad04cde9ce1ed245498d063650890ca356a6c1e304c448", + "stableId": "tasks-artifact-gallery", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery" }, { - "file": "ui/storybook/stories/task-chat-chain-of-thought.stories.tsx", + "file": "ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx", "capabilities": [ "tasks/discussion", "runs-adapters/runs" @@ -4703,12 +5106,14 @@ "ui/src/components/task-chat/TaskChatStatusPill.tsx", "ui/src/components/task-chat/task-chat-adapter.ts", "ui/src/components/task-chat/task-chat-model.ts", - "ui/storybook/stories/task-chat-chain-of-thought.stories.tsx" + "ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx" ], - "fingerprint": "74ed9bd9d86ccc043226551cf9896ecd7ba85bec03019fcf03facf4d20a360b6" + "fingerprint": "c9641a4c8ac8ab68a6d1ad7b9a730f5c3b4f894d5a60262ba2ef196d1c1da7d2", + "stableId": "tasks-task-chat-review-fixes", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes" }, { - "file": "ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx", "capabilities": [ "questions-and-approvals/questions", "questions-and-approvals/confirmations", @@ -4730,12 +5135,14 @@ "ui/src/components/task-chat/task-chat-model.ts", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/prototypes/composer-model-picker/fixtures.ts", - "ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx" + "ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx" ], - "fingerprint": "917b21b457c6c173cfcfc5a6e1d6ec54bbbee92a4d04bc2be5a6c4928984681c" + "fingerprint": "65414677c895af91f8381eb20082f1d9cacd84631324060e170589c7e48a6488", + "stableId": "composer-interaction-above-composer", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Composer/Interaction above composer" }, { - "file": "ui/storybook/stories/task-chat-mobile-follow.stories.tsx", + "file": "ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx", "capabilities": [ "tasks/discussion" ], @@ -4752,12 +5159,14 @@ "ui/src/components/task-chat/TaskChatComposerDock.tsx", "ui/src/components/task-chat/TaskChatThreadView.tsx", "ui/src/components/task-chat/useWindowAutoFollow.ts", - "ui/storybook/stories/task-chat-mobile-follow.stories.tsx" + "ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx" ], - "fingerprint": "3ccff6b7e818d1691c0287229b7f5ef18aa2668332fcd873cc6f188d49d69e73" + "fingerprint": "5050a4cd07125dc0a5375950e14fb8d73c87c5832271973cf593b2d619e156d4", + "stableId": "task-chat-mobile-streaming-follow", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Task chat/Mobile streaming follow" }, { - "file": "ui/storybook/stories/task-chat-system-notice.stories.tsx", + "file": "ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx", "capabilities": [ "tasks/discussion" ], @@ -4771,12 +5180,14 @@ "maps/feature-map/tasks.md", "ui/src/components/task-chat/TaskChatSystemNotice.tsx", "ui/src/components/task-chat/task-chat-model.ts", - "ui/storybook/stories/task-chat-system-notice.stories.tsx" + "ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx" ], - "fingerprint": "1cd42408b2c31320e2dec854dd0dec86ae6fe9328b5c9bf0bc7d82c7acdffd35" + "fingerprint": "017a102634d3eb0172abd399b115caba602466469efe5fe6292d0d69c49a4a92", + "stableId": "product-task-chat-system-notice", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Product/Task chat/System notice" }, { - "file": "ui/storybook/stories/task-chat-unanswered-questions.stories.tsx", + "file": "ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx", "capabilities": [ "questions-and-approvals/dismiss-and-reopen", "tasks/discussion" @@ -4793,12 +5204,14 @@ "ui/src/components/TaskChatThread.tsx", "ui/storybook/fixtures/paperclipData.ts", "ui/storybook/fixtures/unansweredQuestionChat.tsx", - "ui/storybook/stories/task-chat-unanswered-questions.stories.tsx" + "ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx" ], - "fingerprint": "402f78a40546ce9b4a4b9fc28f995ec18e9c27702e6ba8df609a8f4d5f001fee" + "fingerprint": "57a0668631cdab3b46f20a1144b367117307fa788114ee3a231e41c9db745dbe", + "stableId": "chat-comments-task-chat-unanswered-questions", + "sidebarTitle": "Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions" }, { - "file": "ui/storybook/stories/task-context-notices.stories.tsx", + "file": "ui/storybook/stories/tasks/task-context-notices.stories.tsx", "capabilities": [ "tasks/discussion" ], @@ -4813,12 +5226,14 @@ "ui/src/components/EmailMessageCard.tsx", "ui/src/components/ExecutionBlockerNotice.tsx", "ui/src/components/chat/ExternallyConnectedTaskBanner.tsx", - "ui/storybook/stories/task-context-notices.stories.tsx" + "ui/storybook/stories/tasks/task-context-notices.stories.tsx" ], - "fingerprint": "550059ae3c321e98ae8273caf7ff8d33d4702703e7bfaa3e13aa7a33b8e0efc2" + "fingerprint": "87bfd426fdddcc330f0850b036102dd3f1f023e4c0df26f0519dce43cadd1901", + "stableId": "tasks-context-notices", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Tasks/Context notices" }, { - "file": "ui/storybook/stories/task-execution-controls.stories.tsx", + "file": "ui/storybook/stories/steering/task-execution-controls.stories.tsx", "capabilities": [ "steering/stop-and-pause" ], @@ -4834,12 +5249,14 @@ "ui/src/components/ToastViewport.tsx", "ui/src/components/task-chat/TaskChatComposer.tsx", "ui/src/components/task-chat/TaskChatMarker.tsx", - "ui/storybook/stories/task-execution-controls.stories.tsx" + "ui/storybook/stories/steering/task-execution-controls.stories.tsx" ], - "fingerprint": "2ab3cccc76d0a055efbd97501e257088470150423473d77651057229bf5a612a" + "fingerprint": "c0d5b4c251fbdb83e15c7b4dcbffe3da402672c88145053bade66facf45d5fbe", + "stableId": "composer-execution-controls", + "sidebarTitle": "Tasks and conversations/Steering and queued messages/Composer/Execution controls" }, { - "file": "ui/storybook/stories/task-text-files.stories.tsx", + "file": "ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx", "capabilities": [ "documents-artifacts/attachments" ], @@ -4853,12 +5270,14 @@ "maps/feature-map/documents-artifacts.md", "ui/src/components/task-side-panel/TaskSidePanel.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/task-text-files.stories.tsx" + "ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx" ], - "fingerprint": "88992903362472d8587168537357335425e6239270bafe02e05d108c72b1a69b" + "fingerprint": "1028fe178cec6a8d04100a1a89364cd64ffda5112e5235443ad47e4f4ef0358f", + "stableId": "tasks-text-file-tabs", + "sidebarTitle": "Tasks and conversations/Documents, attachments, and work products/Tasks/Text file tabs" }, { - "file": "ui/storybook/stories/task-watchdog-surfaces.stories.tsx", + "file": "ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx", "capabilities": [ "task-coordination/tree-control" ], @@ -4872,12 +5291,14 @@ "maps/feature-map/task-coordination.md", "ui/src/components/IssueProperties.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/task-watchdog-surfaces.stories.tsx" + "ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx" ], - "fingerprint": "43b0522a20b83ff2fc4833e7d62249098564f42f64bbfcc0c26537d93a650d3e" + "fingerprint": "ac40d01fdf92f09aeeb648ffe0a8304f5ea7aa8b47ab36bf7a62c89a1603a791", + "stableId": "product-task-watchdog-surfaces", + "sidebarTitle": "Tasks and conversations/Delegation, dependencies, and signoff/Product/Task Watchdog surfaces" }, { - "file": "ui/storybook/stories/team-catalog.stories.tsx", + "file": "ui/storybook/stories/teams/team-catalog.stories.tsx", "capabilities": [ "teams/preview", "teams/discovery" @@ -4892,12 +5313,14 @@ "maps/feature-map/teams.md", "ui/src/pages/TeamCatalog.fixtures.ts", "ui/src/pages/TeamCatalog.tsx", - "ui/storybook/stories/team-catalog.stories.tsx" + "ui/storybook/stories/teams/team-catalog.stories.tsx" ], - "fingerprint": "d6ff514c0048eb1cb47965cb2e7af54d3483f5921bf0957fee96612d34f51e1d" + "fingerprint": "00b449499c3b79649dc1f29b5f105996c79e063b3d03c31226d861ad2954803b", + "stableId": "surfaces-team-catalog", + "sidebarTitle": "Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog" }, { - "file": "ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx", + "file": "ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx", "capabilities": [ "tasks/discussion" ], @@ -4910,13 +5333,15 @@ "sources": [ "maps/feature-map/tasks.md", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx", - "ui/storybook/stories/thread-human-identity/fixtures.ts" + "ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx", + "ui/storybook/support/thread-human-identity/fixtures.ts" ], - "fingerprint": "f2f790b481362ed01fbffea8688613804b416f9bc488301adf59993bba4d8f72" + "fingerprint": "4ff06d0f3bec2c8f318f58463e671fd91e279d8677c118b124b49273c63c72df", + "stableId": "chat-comments-human-identity-00-review-guide", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/00 Review guide" }, { - "file": "ui/storybook/stories/thread-human-identity/01-components.stories.tsx", + "file": "ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx", "capabilities": [ "tasks/discussion" ], @@ -4932,13 +5357,15 @@ "ui/src/components/task-chat/task-chat-adapter.ts", "ui/src/components/task-chat/task-chat-model.ts", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/thread-human-identity/01-components.stories.tsx", - "ui/storybook/stories/thread-human-identity/fixtures.ts" + "ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx", + "ui/storybook/support/thread-human-identity/fixtures.ts" ], - "fingerprint": "7d18f314cbbcaacca17b800d8a64e4ab2c42f5b723aefcf03b0e21cbf41d9476" + "fingerprint": "15e8035278a39e51ececfae5601e57dae8046e24aee5ed04949bdc219c9250c0", + "stableId": "chat-comments-human-identity-01-components", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/01 Components" }, { - "file": "ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx", + "file": "ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx", "capabilities": [ "tasks/discussion" ], @@ -4953,13 +5380,15 @@ "ui/src/components/Layout.tsx", "ui/src/components/TaskChatThread.tsx", "ui/storybook/fixtures/paperclipData.ts", - "ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx", - "ui/storybook/stories/thread-human-identity/fixtures.ts" + "ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx", + "ui/storybook/support/thread-human-identity/fixtures.ts" ], - "fingerprint": "6af2fa024cc2a7ef17d355bab43fc4f10132ff596b71d93ae0327aaadc0323cd" + "fingerprint": "167c4f2d1cfb9c7f0487f8197908342b889d89bb6a0e752b1aac3a3c9ca6d132", + "stableId": "chat-comments-human-identity-02-mixed-author-journey", + "sidebarTitle": "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/02 Mixed-author journey" }, { - "file": "ui/storybook/stories/user-secrets.stories.tsx", + "file": "ui/storybook/stories/secrets/user-secrets.stories.tsx", "capabilities": [ "secrets/user-secrets" ], @@ -4975,12 +5404,14 @@ "ui/src/pages/secrets/MissingUserSecretsBanner.tsx", "ui/src/pages/secrets/MyUserSecretsTab.tsx", "ui/src/pages/secrets/UserSecretDefinitionsTab.tsx", - "ui/storybook/stories/user-secrets.stories.tsx" + "ui/storybook/stories/secrets/user-secrets.stories.tsx" ], - "fingerprint": "52de3176504986226f5a3e1d8e0fb1a3b0caafdd71da6656d9bdcfa4bd87ef52" + "fingerprint": "5c875865c81923b2c568559d0c2f7bde22d1a8162501736ba3eeeb027acae772", + "stableId": "product-user-secrets", + "sidebarTitle": "Apps, channels, and extensions/Secrets and proposals/Product/User secrets" }, { - "file": "ui/storybook/stories/ux-labs.stories.tsx", + "file": "ui/storybook/stories/developer-labs/ux-labs.stories.tsx", "capabilities": [ "developer-labs/interaction-labs" ], @@ -4996,12 +5427,14 @@ "ui/src/pages/IssueChatUxLab.tsx", "ui/src/pages/RunTranscriptUxLab.tsx", "ui/src/pages/SystemNoticeUxLab.tsx", - "ui/storybook/stories/ux-labs.stories.tsx" + "ui/storybook/stories/developer-labs/ux-labs.stories.tsx" ], - "fingerprint": "3570ef2e7b2b4c84e47614b2a907c67d97128a1a7f8f2307527da66c7a0443bf" + "fingerprint": "b8df6cf57fcda25d2b175bc3156d539fb71055b5dae069bca61af8903a01aaf8", + "stableId": "ux-labs-converted-test-pages", + "sidebarTitle": "Contributor surfaces/Developer previews and diagnostic labs/UX Labs/Converted Test Pages" }, { - "file": "ui/storybook/stories/what-needs-me.stories.tsx", + "file": "ui/storybook/stories/inbox-search/what-needs-me.stories.tsx", "capabilities": [ "inbox-search/decisions" ], @@ -5016,12 +5449,14 @@ "ui/src/components/AttentionQueueRow.tsx", "ui/src/components/IssueGroupHeader.tsx", "ui/src/components/ToastViewport.tsx", - "ui/storybook/stories/what-needs-me.stories.tsx" + "ui/storybook/stories/inbox-search/what-needs-me.stories.tsx" ], - "fingerprint": "2ddefa4378c04219b88c9b9f33973aa3c892ec173cdac764588521001940dce0" + "fingerprint": "b84aef9b566d476455d6b441adfb301d92f68148a409eff29f5850c047d04baf", + "stableId": "pages-decisions", + "sidebarTitle": "Tasks and conversations/Inbox, decisions, and search/Pages/Decisions" }, { - "file": "ui/storybook/stories/work-timeline.stories.tsx", + "file": "ui/storybook/stories/activity/work-timeline.stories.tsx", "capabilities": [ "activity/timeline" ], @@ -5037,12 +5472,14 @@ "ui/src/pages/Timeline.tsx", "ui/storybook/fixtures/workTimeline.human.sample.json", "ui/storybook/fixtures/workTimeline.sample.json", - "ui/storybook/stories/work-timeline.stories.tsx" + "ui/storybook/stories/activity/work-timeline.stories.tsx" ], - "fingerprint": "39930f80f4b2758c9887093bc34094f07e07e058ec77707e7dc7dafdbcae8826" + "fingerprint": "ef4f6622a54c742869916b1bded0fd410aaf1faa3bf9e5ff37182eac7ac6aa50", + "stableId": "pages-work-timeline", + "sidebarTitle": "Oversight and operation/Dashboards and audit trails/Pages/Work Timeline" }, { - "file": "ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx", + "file": "ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx", "capabilities": [ "recovery/workspace" ], @@ -5055,13 +5492,15 @@ "sources": [ "maps/feature-map/recovery.md", "ui/src/components/WorkspaceBaseRefRecoveryNotice.tsx", - "ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx", - "ui/storybook/stories/workspace-branch-recovery/fixtures.ts" + "ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx", + "ui/storybook/support/workspace-branch-recovery/fixtures.ts" ], - "fingerprint": "23eb031735a6d86350ab65cf7136f83ec156527e701bc731cef2543b59cfea82" + "fingerprint": "411a3a9332d5348327cb4c04e508895f9f1989d6da27fe8d1d73ebd34be87a82", + "stableId": "workspace-branch-recovery-01-repair-card", + "sidebarTitle": "Projects and execution/Recovery/Workspace branch recovery/01 Repair card" }, { - "file": "ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx", + "file": "ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx", "capabilities": [ "recovery/workspace" ], @@ -5078,13 +5517,15 @@ "ui/src/components/WorkspaceBaseRefRecoveryNotice.tsx", "ui/src/components/task-chat/TaskChatBubble.tsx", "ui/src/components/task-chat/TaskChatComposer.tsx", - "ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx", - "ui/storybook/stories/workspace-branch-recovery/fixtures.ts" + "ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx", + "ui/storybook/support/workspace-branch-recovery/fixtures.ts" ], - "fingerprint": "5f196b568769b5a1ae4be18b710c7c8d330ded45d15fa62109d6a6daf2c6dec5" + "fingerprint": "85db6aeb522937db01d8e307eab632d16f887abe88301c5d2f3c2f797fcb7cec", + "stableId": "workspace-branch-recovery-02-task-journey", + "sidebarTitle": "Projects and execution/Recovery/Workspace branch recovery/02 Task journey" }, { - "file": "ui/storybook/stories/workspace-file-browser.stories.tsx", + "file": "ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx", "capabilities": [ "workspaces/files-git" ], @@ -5098,12 +5539,14 @@ "maps/feature-map/workspaces.md", "ui/src/components/FileViewerSheet.tsx", "ui/src/components/IssueWorkspaceCard.tsx", - "ui/storybook/stories/workspace-file-browser.stories.tsx" + "ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx" ], - "fingerprint": "dd09003a9523f2c234445d60827125ec9b5c3df732ec54631d86a5be91447fc8" + "fingerprint": "e8ece699c3f156643552e788ba86cedda4f2e3a4e6e1a40fbf8b6bef1103254f", + "stableId": "issue-workspace-file-browser", + "sidebarTitle": "Projects and execution/Workspaces, services, and files/Issue/Workspace File Browser" }, { - "file": "ui/storybook/stories/workspace-runtime-provisioning.stories.tsx", + "file": "ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx", "capabilities": [ "workspaces/provisioning" ], @@ -5116,12 +5559,14 @@ "sources": [ "maps/feature-map/workspaces.md", "ui/src/pages/ExecutionWorkspaceDetail.tsx", - "ui/storybook/stories/workspace-runtime-provisioning.stories.tsx" + "ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx" ], - "fingerprint": "b91646a603aefc363fc3e2e2e5ab54f785825ba66f5b86d5a0c75e135efb16a1" + "fingerprint": "4ec295039bb17a9590ab1fb0be2864845a903a625fcaf79459541ddd5a4670f4", + "stableId": "workspaces-runtime-provisioning-status", + "sidebarTitle": "Projects and execution/Workspaces, services, and files/Workspaces/Runtime provisioning status" }, { - "file": "ui/storybook/stories/workspace-service-control-bar.stories.tsx", + "file": "ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx", "capabilities": [ "workspaces/services" ], @@ -5134,9 +5579,11 @@ "sources": [ "maps/feature-map/workspaces.md", "ui/src/components/WorkspaceServiceControlBar.tsx", - "ui/storybook/stories/workspace-service-control-bar.stories.tsx" + "ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx" ], - "fingerprint": "4c18f2b9ac0ba5512478f554054a5be973b68211f15caff8875d2abb4ea7fdab" + "fingerprint": "cbe4b5d61324f8eec1dfff9583dc84eab5c83947ff947f5c381d00217b29b5e2", + "stableId": "workspaces-service-control-bar", + "sidebarTitle": "Projects and execution/Workspaces, services, and files/Workspaces/Service control bar" } ] } diff --git a/scripts/storybook-catalog.mjs b/scripts/storybook-catalog.mjs index e1f1f4a279..41d777b4dd 100644 --- a/scripts/storybook-catalog.mjs +++ b/scripts/storybook-catalog.mjs @@ -40,18 +40,30 @@ export function capabilities(root) { return result; } +export function featureNavigation(root) { + const navigation = new Map(); + let section; + for (const line of readFileSync(path.join(root, "maps/feature-map/README.md"), "utf8").split("\n")) { + if (line.startsWith("### ")) section = line.slice(4); + const match = line.match(/^\| \[([^\]]+)\]\(\.\/([^.)]+)\.md\)/); + if (match && section) navigation.set(match[2], `${section}/${match[1]}`); + } + return navigation; +} + export function scanStories(root = defaultRoot) { const require = createRequire(path.join(root, "ui/package.json")); const { loadCsf } = require("storybook/internal/csf-tools"); return files(root, storyRoot).filter(file => /\.stories\.(ts|tsx|mdx)$/.test(file)).map(file => { const csf = loadCsf(readFileSync(path.join(root, file), "utf8"), { fileName: file, makeTitle: title => title }).parse(); - return { file, title: csf.meta.title, ids: csf.stories.map(story => story.id), plays: csf.stories.filter(story => story.__stats?.play).length }; + return { file, title: csf.meta.title, metaId: csf.meta.id, ids: csf.stories.map(story => story.id), plays: csf.stories.filter(story => story.__stats?.play).length }; }); } export function validateCatalog(root, catalog, stories) { const errors = []; const refs = capabilities(root); + const navigation = featureNavigation(root); const byFile = new Map(stories.map(story => [story.file, story])); const seen = new Set(); const local = file => typeof file === "string" && !path.isAbsolute(file) && !file.split("/").includes("..") && existsSync(path.join(root, file)); @@ -76,6 +88,12 @@ export function validateCatalog(root, catalog, stories) { for (const ref of entry.capabilities) if (!refs.has(ref)) errors.push(`${label}: unknown feature capability ${ref}`); if (!entry.capabilities.length && !entry.exception?.trim()) errors.push(`${label}: unmapped story needs an explicit reason`); if (entry.capabilities.length !== new Set(entry.capabilities).size) errors.push(`${label}: duplicate capability references`); + const area = entry.capabilities[0]?.split("/")[0] ?? (entry.implementation === "guide" ? "overview" : "foundations"); + const prefix = navigation.get(area) ?? ({ overview: "Overview", foundations: "Foundations" })[area]; + const story = byFile.get(label); + if (!label.startsWith(`${storyRoot}/${area}/`)) errors.push(`${label}: story must live in its primary feature folder ${area}`); + if (!prefix || !entry.sidebarTitle?.startsWith(`${prefix}/`) || story?.title !== entry.sidebarTitle) errors.push(`${label}: sidebar title must match its feature-map home`); + if (!entry.stableId || story?.metaId !== entry.stableId) errors.push(`${label}: explicit meta ID must preserve the catalog stableId`); if (entry.replacement && !byFile.has(entry.replacement)) errors.push(`${label}: replacement story is missing`); if (!entry.sources?.includes(label)) errors.push(`${label}: review must include its story source`); review(label, entry.sources, entry.fingerprint); diff --git a/scripts/storybook-catalog.test.mjs b/scripts/storybook-catalog.test.mjs index c82059060a..8a2d5f2a08 100644 --- a/scripts/storybook-catalog.test.mjs +++ b/scripts/storybook-catalog.test.mjs @@ -13,20 +13,21 @@ function fixture(t) { mkdirSync(path.dirname(path.join(root, file)), { recursive: true }); writeFileSync(path.join(root, file), text); } + write("maps/feature-map/README.md", "# Features\n\n### Tasks and conversations\n\n| [Tasks](./tasks.md) | Tasks |\n"); write("maps/feature-map/tasks.md", "# Tasks\n\n## Sub-features\n\n- `create`: create\n- `discussion`: discuss\n\n## How to get to it\n"); write("ui/storybook/.storybook/preview.tsx", "// shared fixtures\n"); - const file = "ui/storybook/stories/task.stories.tsx"; + const file = "ui/storybook/stories/tasks/task.stories.tsx"; write(file, "// a story\n"); write("ui/src/Task.tsx", "// production subject\n"); const sharedSources = ["ui/storybook/.storybook/preview.tsx"]; const sources = [file, "ui/src/Task.tsx"]; const catalog = { version: 1, sharedReview: { sources: sharedSources, fingerprint: fingerprint(root, sharedSources) }, - entries: [{ file, capabilities: ["tasks/create", "tasks/discussion"], purpose: "Create a task", status: "current", + entries: [{ file, stableId: "tasks-create", sidebarTitle: "Tasks and conversations/Tasks/Create", capabilities: ["tasks/create", "tasks/discussion"], purpose: "Create a task", status: "current", implementation: "production", boundary: "fixtures", notes: "Production subject; callbacks simulated.", reviewedAt: "2026-10-12", sources, fingerprint: fingerprint(root, sources) }], }; - const stories = [{ file, title: "Tasks/Create", ids: ["tasks-create--empty"], plays: 0 }]; + const stories = [{ file, title: "Tasks and conversations/Tasks/Create", metaId: "tasks-create", ids: ["tasks-create--empty"], plays: 0 }]; return { root, write, file, catalog, stories }; } @@ -50,9 +51,36 @@ test("capability renames and unjustified unmapped stories fail", t => { f.catalog.entries[0].capabilities = []; assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /explicit reason/); f.catalog.entries[0].exception = "Shared foundation"; + const file = "ui/storybook/stories/foundations/task.stories.tsx"; + f.write(file, "export default {};"); + const entry = f.catalog.entries[0]; + entry.file = file; + entry.sources = [file, "ui/src/Task.tsx"]; + entry.fingerprint = fingerprint(f.root, entry.sources); + entry.sidebarTitle = "Foundations/Task"; + f.stories[0].file = file; + f.stories[0].title = entry.sidebarTitle; assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); }); +test("feature organization rejects wrong folders, sidebar homes and unstable meta IDs", t => { + const f = fixture(t); + f.catalog.entries[0].capabilities = ["tasks/discussion"]; + assert.deepEqual(validateCatalog(f.root, f.catalog, f.stories), []); + f.stories[0].metaId = "renamed-task"; + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /explicit meta ID/); + f.stories[0].metaId = "tasks-create"; + f.stories[0].title = "Unrelated/Task"; + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /sidebar title/); + f.stories[0].title = f.catalog.entries[0].sidebarTitle; + const originalFile = f.catalog.entries[0].file; + f.catalog.entries[0].file = "ui/storybook/stories/foundations/task.stories.tsx"; + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /primary feature folder tasks/); + f.catalog.entries[0].file = originalFile; + f.write("maps/feature-map/README.md", "### Conversations\n| [Tasks](./tasks.md) | Tasks |\n"); + assert.match(validateCatalog(f.root, f.catalog, f.stories).join("\n"), /sidebar title/); +}); + test("production and shared fixture drift invalidate review fingerprints", t => { const f = fixture(t); f.write("ui/src/Task.tsx", "// changed contract\n"); @@ -106,9 +134,9 @@ test("Storybook parser discovers nested files, filters helpers, preserves explic const stories = scanStories(f.root); assert.equal(stories.length, 2); assert.deepEqual(stories.find(story => story.file === f.file), { - file: f.file, title: "Tasks/Create", ids: ["stable-task--empty", "stable-task--filled"], plays: 1, + file: f.file, title: "Tasks/Create", metaId: "stable-task", ids: ["stable-task--empty", "stable-task--filled"], plays: 1, }); assert.deepEqual(stories.find(story => story.file.endsWith("other.stories.ts")), { - file: "ui/storybook/stories/nested/other.stories.ts", title: "Other/Subject", ids: ["other-subject--included"], plays: 0, + file: "ui/storybook/stories/nested/other.stories.ts", title: "Other/Subject", metaId: undefined, ids: ["other-subject--included"], plays: 0, }); }); diff --git a/ui/src/components/decision-models/DecisionModelSettings.test.tsx b/ui/src/components/decision-models/DecisionModelSettings.test.tsx index 1804ce583a..88039176b3 100644 --- a/ui/src/components/decision-models/DecisionModelSettings.test.tsx +++ b/ui/src/components/decision-models/DecisionModelSettings.test.tsx @@ -6,7 +6,7 @@ import { expect, it, vi } from "vitest"; import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import { decisionModelsApi } from "@/api/decision-models"; import { DecisionModelSettingsSection, DecisionModelSettingsView } from "./DecisionModelSettings"; -import { choices, configured, result } from "../../../storybook/stories/decision-models/fixtures"; +import { choices, configured, result } from "../../../storybook/support/decision-models/fixtures"; vi.mock("@/context/CompanyContext", () => ({ useCompany: () => ({ selectedCompanyId: "company-storybook" }) })); (globalThis as { IS_REACT_ACT_ENVIRONMENT?: boolean }).IS_REACT_ACT_ENVIRONMENT = true; diff --git a/ui/src/components/fast-responses/FastResponseSettings.test.tsx b/ui/src/components/fast-responses/FastResponseSettings.test.tsx index fb6f8502a5..6910968c24 100644 --- a/ui/src/components/fast-responses/FastResponseSettings.test.tsx +++ b/ui/src/components/fast-responses/FastResponseSettings.test.tsx @@ -5,7 +5,7 @@ import { MemoryRouter } from "react-router-dom"; import { expect, it, vi } from "vitest"; import { updateFastResponseSchema } from "@paperclipai/shared"; import { FastResponseSettingsView } from "./FastResponseSettings"; -import { choices } from "../../../storybook/stories/decision-models/fixtures"; +import { choices } from "../../../storybook/support/decision-models/fixtures"; vi.mock("@/context/CompanyContext", () => ({ useCompany: () => ({ selectedCompanyId: "company-storybook" }), })); diff --git a/ui/src/pages/TeamCatalog.fixtures.ts b/ui/src/pages/TeamCatalog.fixtures.ts index c3f93191f8..511dd3b40b 100644 --- a/ui/src/pages/TeamCatalog.fixtures.ts +++ b/ui/src/pages/TeamCatalog.fixtures.ts @@ -7,7 +7,7 @@ import type { // --------------------------------------------------------------------------- // Shared Team Catalog fixtures. // -// Used by both the Storybook stories (ui/storybook/stories/team-catalog.stories.tsx) +// Used by both the Storybook stories (ui/storybook/stories/teams/team-catalog.stories.tsx) // and the in-app /design-guide showcase so the two surfaces stay in sync. // --------------------------------------------------------------------------- diff --git a/ui/storybook/.storybook/preview.tsx b/ui/storybook/.storybook/preview.tsx index cd548b4f2c..bfd3349cf9 100644 --- a/ui/storybook/.storybook/preview.tsx +++ b/ui/storybook/.storybook/preview.tsx @@ -850,6 +850,73 @@ const preview: Preview = { }, }, parameters: { + options: { + storySort: { + order: [ + "Overview", + "Getting started and access", + [ + "Onboarding and first work", + "Login, invitations, and access", + "Companies and portability" + ], + "Tasks and conversations", + [ + "Task creation and lifecycle", + "Delegation, dependencies, and signoff", + "Inbox, decisions, and search", + "Agent conversations and project handoff", + "Questions and approvals", + "Steering and queued messages", + "Documents, attachments, and work products" + ], + "Agents and reusable capabilities", + [ + "Hiring, configuration, and organization", + "Runs, harnesses, and model accounts", + "Skills and Skill Studio", + "Team packages and installation" + ], + "Projects and execution", + [ + "Projects and repositories", + "Goals and work alignment", + "Workspaces, services, and files", + "Execution environments", + "Recovery" + ], + "Apps, channels, and extensions", + [ + "Connection setup", + "App access and action permissions", + "External chat and email", + "Tool gateways and access profiles", + "Secrets and proposals", + "Plugins" + ], + "Automation and structured work", + [ + "Routines, schedules, and triggers", + "Pipelines, review queues, and learnings", + "Cases", + "Status cards" + ], + "Oversight and operation", + [ + "Costs and budgets", + "Dashboards and audit trails", + "Navigation, profile, and announcements", + "Instance operations", + "CLI/API and local worktrees" + ], + "Contributor surfaces", + [ + "Developer previews and diagnostic labs" + ], + "Foundations" + ], + }, + }, actions: { argTypesRegex: "^on[A-Z].*" }, a11y: { test: "error", diff --git a/ui/storybook/fixtures/paperclipData.ts b/ui/storybook/fixtures/paperclipData.ts index 23a2d8db9c..4a3ab2ddd1 100644 --- a/ui/storybook/fixtures/paperclipData.ts +++ b/ui/storybook/fixtures/paperclipData.ts @@ -1010,7 +1010,7 @@ export const storybookContinuationHandoff: IssueDocument = { "", "Next action: run the Storybook build, inspect the issue management story, then request QA visual review if the build passes.", "", - "Important files: `ui/storybook/stories/issue-management.stories.tsx` and `ui/storybook/fixtures/paperclipData.ts`.", + "Important files: `ui/storybook/stories/tasks/issue-management.stories.tsx` and `ui/storybook/fixtures/paperclipData.ts`.", ].join("\n"), latestRevisionId: "revision-continuation-1", latestRevisionNumber: 1, diff --git a/ui/storybook/stories/private-tasks/00-review-guide.stories.tsx b/ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx similarity index 98% rename from ui/storybook/stories/private-tasks/00-review-guide.stories.tsx rename to ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx index 2853525d17..394510b4bb 100644 --- a/ui/storybook/stories/private-tasks/00-review-guide.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/00-review-guide.stories.tsx @@ -265,7 +265,8 @@ function Overview() { ); } export default { - title: "Private tasks/00 Review guide", + id: "private-tasks-00-review-guide", + title: "Getting started and access/Login, invitations, and access/Private tasks/00 Review guide", parameters: { layout: "fullscreen", docs: { story: { inline: false } } }, render: () => , } satisfies Meta; diff --git a/ui/storybook/stories/private-tasks/01-creation.stories.tsx b/ui/storybook/stories/access/private-tasks/01-creation.stories.tsx similarity index 98% rename from ui/storybook/stories/private-tasks/01-creation.stories.tsx rename to ui/storybook/stories/access/private-tasks/01-creation.stories.tsx index ad44dd8ddf..5e3f9f666b 100644 --- a/ui/storybook/stories/private-tasks/01-creation.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/01-creation.stories.tsx @@ -10,7 +10,7 @@ import { privacyDecorator, privacyParameters, StoryFrame, -} from "./PrivacyStory"; +} from "../../../support/private-tasks/PrivacyStory"; function Creation({ parent = false, @@ -49,7 +49,8 @@ function Creation({ return ; } const meta = { - title: "Private tasks/01 Creation", + id: "private-tasks-01-creation", + title: "Getting started and access/Login, invitations, and access/Private tasks/01 Creation", decorators: [privacyDecorator], parameters: { ...privacyParameters, waitForViewport: true, docs: { description: { component: "Route /PAP/issues with the new-task composer. Choose Private task from +; the lock chip keeps the selection visible. Hover, focus, or tap an inherited chip to see the parent task or private project that requires privacy. Mobile stories use the real shell and check that menu actions and composer controls stay inside the viewport." } } }, args: { taskTitle: "Prepare my board briefing" }, diff --git a/ui/storybook/stories/private-tasks/02-sharing.stories.tsx b/ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx similarity index 97% rename from ui/storybook/stories/private-tasks/02-sharing.stories.tsx rename to ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx index c20a70273d..7a72e78bee 100644 --- a/ui/storybook/stories/private-tasks/02-sharing.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/02-sharing.stories.tsx @@ -3,14 +3,14 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within, waitFor } from "storybook/test"; import { IssueShareSheet } from "@/components/IssueShareSheet"; import { Button } from "@/components/ui/button"; -import { privacyCompanyId } from "../../fixtures/privateTasks"; +import { privacyCompanyId } from "../../../fixtures/privateTasks"; import { mobile, privacyDecorator, privacyParameters, StoryFrame, usePrivacyStory, -} from "./PrivacyStory"; +} from "../../../support/private-tasks/PrivacyStory"; function Sharing({ add = "", @@ -69,7 +69,8 @@ function Sharing({ ); } const meta = { - title: "Private tasks/02 Sharing", + id: "private-tasks-02-sharing", + title: "Getting started and access/Login, invitations, and access/Private tasks/02 Sharing", decorators: [privacyDecorator], parameters: { ...privacyParameters, docs: { description: { component: "Task menu → Share → Add someone. Inspect avatars in search and selected values, inherited grants, reader access, confirmations, empty/loading/error states and mobile. The sticky-access paragraph is removed." } } }, render: () => , diff --git a/ui/storybook/stories/private-tasks/03-task-actions.stories.tsx b/ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx similarity index 95% rename from ui/storybook/stories/private-tasks/03-task-actions.stories.tsx rename to ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx index cbeb5fd975..e60befdce7 100644 --- a/ui/storybook/stories/private-tasks/03-task-actions.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/03-task-actions.stories.tsx @@ -4,14 +4,14 @@ import { expect, userEvent, within, waitFor } from "storybook/test"; import { IssuePrivacyActions } from "@/components/IssuePrivacyActions"; import { issuesApi } from "@/api/issues"; import { queryKeys } from "@/lib/queryKeys"; -import { privacyCompanyId } from "../../fixtures/privateTasks"; +import { privacyCompanyId } from "../../../fixtures/privateTasks"; import { mobile, privacyDecorator, privacyParameters, StoryFrame, usePrivacyStory, -} from "./PrivacyStory"; +} from "../../../support/private-tasks/PrivacyStory"; function PrivacyActionsStory({ child = false }: { child?: boolean }) { const state = usePrivacyStory(); @@ -56,7 +56,8 @@ function PrivacyActionsStory({ child = false }: { child?: boolean }) { ); } const meta = { - title: "Private tasks/03 Task actions", + id: "private-tasks-03-task-actions", + title: "Getting started and access/Login, invitations, and access/Private tasks/03 Task actions", decorators: [privacyDecorator], parameters: { ...privacyParameters, docs: { description: { component: "Task menu privacy actions, permission gates and disclosure confirmation." } } }, render: () => , diff --git a/ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx b/ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx similarity index 97% rename from ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx rename to ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx index 22a618518d..78718c74ac 100644 --- a/ui/storybook/stories/private-tasks/04-references-and-blockers.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/04-references-and-blockers.stories.tsx @@ -13,7 +13,7 @@ import { privacyDecorator, privacyParameters, StoryFrame, -} from "./PrivacyStory"; +} from "../../../support/private-tasks/PrivacyStory"; const locked = { id: "privacy-root", @@ -110,7 +110,8 @@ function References({ ); } const meta = { - title: "Private tasks/04 References and blockers", + id: "private-tasks-04-references-and-blockers", + title: "Getting started and access/Login, invitations, and access/Private tasks/04 References and blockers", decorators: [privacyDecorator], parameters: { ...privacyParameters, docs: { description: { component: "Task references, parent navigation and blockers redact unreadable task content. Inspect all existing reference variants and mobile." } } }, render: () => , diff --git a/ui/storybook/stories/private-tasks/05-projects.stories.tsx b/ui/storybook/stories/access/private-tasks/05-projects.stories.tsx similarity index 98% rename from ui/storybook/stories/private-tasks/05-projects.stories.tsx rename to ui/storybook/stories/access/private-tasks/05-projects.stories.tsx index 85d32a3682..a64f7c9c9c 100644 --- a/ui/storybook/stories/private-tasks/05-projects.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/05-projects.stories.tsx @@ -14,7 +14,7 @@ import { privacyParameters, StoryFrame, usePrivacyStory, -} from "./PrivacyStory"; +} from "../../../support/private-tasks/PrivacyStory"; function ProjectStory({ settings = false, @@ -76,7 +76,8 @@ const openMembers = async (canvasElement: HTMLElement) => { return page; }; const meta = { - title: "Private tasks/05 Projects", + id: "private-tasks-05-projects", + title: "Getting started and access/Login, invitations, and access/Private tasks/05 Projects", decorators: [privacyDecorator], parameters: { ...privacyParameters, docs: { description: { component: "Project settings → Manage access. Human and agent identities appear in the search dropdown and selected value. Owner, reader, error, loading and mobile states use production components." } } }, args: { projectName: "Executive planning" }, diff --git a/ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx b/ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx similarity index 97% rename from ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx rename to ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx index c0550d7741..8c47b0adf0 100644 --- a/ui/storybook/stories/private-tasks/06-full-product-pages.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/06-full-product-pages.stories.tsx @@ -9,7 +9,7 @@ import { ProjectDetail } from "@/pages/ProjectDetail"; import { Projects } from "@/pages/Projects"; import { DesignGuide } from "@/pages/DesignGuide"; import { PluginLauncherProvider } from "@/plugins/launchers"; -import { mobile, privacyDecorator, privacyParameters } from "./PrivacyStory"; +import { mobile, privacyDecorator, privacyParameters } from "../../../support/private-tasks/PrivacyStory"; export function PrivacyPage({ child = false, @@ -51,7 +51,8 @@ export function PrivacyPage({ ); } const meta = { - title: "Private tasks/06 Full product pages", + id: "private-tasks-06-full-product-pages", + title: "Getting started and access/Login, invitations, and access/Private tasks/06 Full product pages", excludeStories: ["PrivacyPage"], decorators: [privacyDecorator], parameters: { ...privacyParameters, waitForViewport: true }, diff --git a/ui/storybook/stories/private-tasks/07-user-stories.stories.tsx b/ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx similarity index 97% rename from ui/storybook/stories/private-tasks/07-user-stories.stories.tsx rename to ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx index 746661637f..ae3516e777 100644 --- a/ui/storybook/stories/private-tasks/07-user-stories.stories.tsx +++ b/ui/storybook/stories/access/private-tasks/07-user-stories.stories.tsx @@ -16,12 +16,13 @@ import { privacyDecorator, privacyParameters, mobile, -} from "./PrivacyStory"; +} from "../../../support/private-tasks/PrivacyStory"; // Reuse the same real-component canvases. Each play is a complete user journey, // while the component stories deliberately stop at individual review states. const meta = { - title: "Private tasks/07 User stories", + id: "private-tasks-07-user-stories", + title: "Getting started and access/Login, invitations, and access/Private tasks/07 User stories", decorators: [privacyDecorator], parameters: { ...privacyParameters, waitForViewport: true }, } satisfies Meta; diff --git a/ui/storybook/stories/activity-feed.stories.tsx b/ui/storybook/stories/activity/activity-feed.stories.tsx similarity index 97% rename from ui/storybook/stories/activity-feed.stories.tsx rename to ui/storybook/stories/activity/activity-feed.stories.tsx index 27cfb82124..5b81c28841 100644 --- a/ui/storybook/stories/activity-feed.stories.tsx +++ b/ui/storybook/stories/activity/activity-feed.stories.tsx @@ -154,7 +154,8 @@ function Seeded({ events }: { events: ToolGatewayActivityEvent[] }) { } const meta: Meta = { - title: "Tools/Activity (audit feed)", + id: "tools-activity-audit-feed", + title: "Oversight and operation/Dashboards and audit trails/Tools/Activity (audit feed)", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/app-activity-lifecycle.stories.tsx b/ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx similarity index 96% rename from ui/storybook/stories/app-activity-lifecycle.stories.tsx rename to ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx index 16252d42b5..952790fc78 100644 --- a/ui/storybook/stories/app-activity-lifecycle.stories.tsx +++ b/ui/storybook/stories/activity/app-activity-lifecycle.stories.tsx @@ -122,7 +122,8 @@ function Panel(props: ActivityPanelProps) { } const meta: Meta = { - title: "Apps/App detail · Activity (lifecycle)", + id: "apps-app-detail-·-activity-lifecycle", + title: "Oversight and operation/Dashboards and audit trails/Apps/App detail · Activity (lifecycle)", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/data-viz-misc.stories.tsx b/ui/storybook/stories/activity/data-viz-misc.stories.tsx similarity index 99% rename from ui/storybook/stories/data-viz-misc.stories.tsx rename to ui/storybook/stories/activity/data-viz-misc.stories.tsx index 98336af9f6..54af2de347 100644 --- a/ui/storybook/stories/data-viz-misc.stories.tsx +++ b/ui/storybook/stories/activity/data-viz-misc.stories.tsx @@ -50,7 +50,7 @@ import { storybookAgents, storybookIssues, storybookLiveRuns, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const companyId = "company-storybook"; const primaryIssueId = "issue-storybook-1"; @@ -642,7 +642,8 @@ function PageSkeletonMatrix() { } const meta = { - title: "Product/Data Visualization & Misc", + id: "product-data-visualization-misc", + title: "Oversight and operation/Dashboards and audit trails/Product/Data Visualization & Misc", parameters: { docs: { description: { diff --git a/ui/storybook/stories/work-timeline.stories.tsx b/ui/storybook/stories/activity/work-timeline.stories.tsx similarity index 95% rename from ui/storybook/stories/work-timeline.stories.tsx rename to ui/storybook/stories/activity/work-timeline.stories.tsx index ae195d8969..7e4b4160eb 100644 --- a/ui/storybook/stories/work-timeline.stories.tsx +++ b/ui/storybook/stories/activity/work-timeline.stories.tsx @@ -12,8 +12,8 @@ import { } from "@/components/timeline/WorkTimelineChart"; import { Button } from "@/components/ui/button"; import { useCompany } from "@/context/CompanyContext"; -import sampleJson from "../fixtures/workTimeline.sample.json"; -import humanSampleJson from "../fixtures/workTimeline.human.sample.json"; +import sampleJson from "../../fixtures/workTimeline.sample.json"; +import humanSampleJson from "../../fixtures/workTimeline.human.sample.json"; const COMPANY_ID = "company-storybook"; const STORYBOOK_USER_AVATAR = @@ -159,7 +159,8 @@ function TimelineHarness({ } const meta: Meta = { - title: "Pages/Work Timeline", + id: "pages-work-timeline", + title: "Oversight and operation/Dashboards and audit trails/Pages/Work Timeline", component: TimelineHarness, parameters: { layout: "fullscreen" }, }; diff --git a/ui/storybook/stories/agent-chat-sidebar.stories.tsx b/ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx similarity index 89% rename from ui/storybook/stories/agent-chat-sidebar.stories.tsx rename to ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx index ec3e14b8f7..1bab0c320f 100644 --- a/ui/storybook/stories/agent-chat-sidebar.stories.tsx +++ b/ui/storybook/stories/agent-chat/agent-chat-sidebar.stories.tsx @@ -1,9 +1,10 @@ import { userEvent, within } from "storybook/test"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { AgentChatPrototype } from "../prototypes/agent-chat/AgentChatPrototype"; +import { AgentChatPrototype } from "../../prototypes/agent-chat/AgentChatPrototype"; const meta = { - title: "Design explorations/Agent chat sidebar/Pages", + id: "design-explorations-agent-chat-sidebar-pages", + title: "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Pages", component: AgentChatPrototype, parameters: { layout: "fullscreen", docs: { description: { component: "The production chat sidebar and pages inside the real Paperclip Layout, including the existing transcript, composer, and context panel. Click Chat to see the landing page, search by name or role, or use + to start or reopen an agent conversation. Each agent has one conversation; sends stay in this Storybook's in-memory fixtures." diff --git a/ui/storybook/stories/agent-chat.stories.tsx b/ui/storybook/stories/agent-chat/agent-chat.stories.tsx similarity index 93% rename from ui/storybook/stories/agent-chat.stories.tsx rename to ui/storybook/stories/agent-chat/agent-chat.stories.tsx index 592dde0335..493e1283f0 100644 --- a/ui/storybook/stories/agent-chat.stories.tsx +++ b/ui/storybook/stories/agent-chat/agent-chat.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { AgentChatPrototype } from "../prototypes/agent-chat/AgentChatPrototype"; +import { AgentChatPrototype } from "../../prototypes/agent-chat/AgentChatPrototype"; const meta = { - title: "Design explorations/Agent chat", + id: "design-explorations-agent-chat", + title: "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat", component: AgentChatPrototype, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/agent-conversation-sidebar.stories.tsx b/ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx similarity index 92% rename from ui/storybook/stories/agent-conversation-sidebar.stories.tsx rename to ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx index f0917a4000..54928fc6ff 100644 --- a/ui/storybook/stories/agent-conversation-sidebar.stories.tsx +++ b/ui/storybook/stories/agent-chat/agent-conversation-sidebar.stories.tsx @@ -1,8 +1,8 @@ import { userEvent, within, expect } from "storybook/test"; import { useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { AgentConversationSidebar } from "../prototypes/agent-chat-sidebar/AgentConversationSidebar"; -import { sidebarAgents, sidebarPreviews, sidebarRoster } from "../prototypes/agent-chat-sidebar/fixtures"; +import { AgentConversationSidebar } from "../../prototypes/agent-chat-sidebar/AgentConversationSidebar"; +import { sidebarAgents, sidebarPreviews, sidebarRoster } from "../../prototypes/agent-chat-sidebar/fixtures"; function InteractiveSidebar(args: React.ComponentProps) { const [activeId, setActiveId] = useState(args.activeId); @@ -14,7 +14,8 @@ function InteractiveSidebar(args: React.ComponentProps; } const meta = { - title: "Design explorations/Agent chat sidebar/Components", + id: "design-explorations-agent-chat-sidebar-components", + title: "Tasks and conversations/Agent conversations and project handoff/Design explorations/Agent chat sidebar/Components", component: AgentConversationSidebar, parameters: { layout: "fullscreen", docs: { description: { component: "Secondary agent navigation at the same width as the app's other contextual sidebars. Uses production AgentAvatar, Input, and Button. The entire row is a link; selection and search are interactive. Search matches agent name, title, and role. Escape clears the query. Browse all agents links to the existing agent directory in the page stories." diff --git a/ui/storybook/stories/chat-entry.stories.tsx b/ui/storybook/stories/agent-chat/chat-entry.stories.tsx similarity index 92% rename from ui/storybook/stories/chat-entry.stories.tsx rename to ui/storybook/stories/agent-chat/chat-entry.stories.tsx index 539d5721fe..35137094ae 100644 --- a/ui/storybook/stories/chat-entry.stories.tsx +++ b/ui/storybook/stories/agent-chat/chat-entry.stories.tsx @@ -1,9 +1,10 @@ import { userEvent, within } from "storybook/test"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { AgentChatPrototype } from "../prototypes/agent-chat/AgentChatPrototype"; +import { AgentChatPrototype } from "../../prototypes/agent-chat/AgentChatPrototype"; const meta = { - title: "Design explorations/Chat entry", + id: "design-explorations-chat-entry", + title: "Tasks and conversations/Agent conversations and project handoff/Design explorations/Chat entry", component: AgentChatPrototype, parameters: { layout: "fullscreen", docs: { description: { component: "Historical chat-entry exploration: the local sidebar and landing composition keeps a first-created-agent default. The current product uses the personal primary-agent preference and recent-conversation rules. Shared layout, picker and conversation components remain useful here, but these entry/default rules are retained design history. Selecting and sending use in-memory fixtures; no real agents run. Use Primary Agent journeys for current default-selection examples." diff --git a/ui/storybook/stories/agent-detail.stories.tsx b/ui/storybook/stories/agents/agent-detail.stories.tsx similarity index 97% rename from ui/storybook/stories/agent-detail.stories.tsx rename to ui/storybook/stories/agents/agent-detail.stories.tsx index 83fb19feb3..96dc123e80 100644 --- a/ui/storybook/stories/agent-detail.stories.tsx +++ b/ui/storybook/stories/agents/agent-detail.stories.tsx @@ -11,7 +11,7 @@ import type { import { AgentDetail } from "@/pages/AgentDetail"; import { useCompany } from "@/context/CompanyContext"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookAgentMap, storybookAgents, storybookIssues } from "../fixtures/paperclipData"; +import { storybookAgentMap, storybookAgents, storybookIssues } from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; const AGENT_ID = "agent-codex"; @@ -190,7 +190,8 @@ function AgentDetailScenario() { } const meta: Meta = { - title: "Pages/Agent Detail", + id: "pages-agent-detail", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Pages/Agent Detail", parameters: { layout: "fullscreen", a11y: { test: "off" } }, }; export default meta; diff --git a/ui/storybook/stories/agent-files.stories.tsx b/ui/storybook/stories/agents/agent-files.stories.tsx similarity index 97% rename from ui/storybook/stories/agent-files.stories.tsx rename to ui/storybook/stories/agents/agent-files.stories.tsx index fdd982422f..7a60e9119d 100644 --- a/ui/storybook/stories/agent-files.stories.tsx +++ b/ui/storybook/stories/agents/agent-files.stories.tsx @@ -6,7 +6,7 @@ import type { AgentInstructionsFileDetail } from "@paperclipai/shared"; import { AgentFileRunNotice, PromptsTab } from "@/pages/AgentDetail"; import { Button } from "@/components/ui/button"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookAgents } from "../fixtures/paperclipData"; +import { storybookAgents } from "../../fixtures/paperclipData"; const agent = { ...storybookAgents[0]!, id: "agent-files-story", adapterType: "codex_local" as const }; const root = "/instance/agents/agent-files-story/instructions"; @@ -106,7 +106,8 @@ function AgentFilesStory({ failedSync = false, fullStorageRun = false, historica ; } -const meta = { title: "Agents/Persistent files", component: AgentFilesStory, parameters: { layout: "fullscreen" } } satisfies Meta; +const meta = { id: "agents-persistent-files", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Persistent files", component: AgentFilesStory, parameters: { layout: "fullscreen" } } satisfies Meta; export default meta; type Story = StoryObj; export const InstructionsAndFiles: Story = {}; diff --git a/ui/storybook/stories/agent-management.stories.tsx b/ui/storybook/stories/agents/agent-management.stories.tsx similarity index 99% rename from ui/storybook/stories/agent-management.stories.tsx rename to ui/storybook/stories/agents/agent-management.stories.tsx index 7f1bee25fc..2b877ad5ce 100644 --- a/ui/storybook/stories/agent-management.stories.tsx +++ b/ui/storybook/stories/agents/agent-management.stories.tsx @@ -38,7 +38,7 @@ import { SelectValue, } from "@/components/ui/select"; import { Separator } from "@/components/ui/separator"; -import { storybookAgents, storybookIssues } from "../fixtures/paperclipData"; +import { storybookAgents, storybookIssues } from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; const now = new Date("2026-04-20T12:00:00.000Z"); @@ -819,7 +819,8 @@ function AgentManagementStories() { } const meta = { - title: "Product/Agent Management", + id: "product-agent-management", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Product/Agent Management", component: AgentManagementStories, parameters: { docs: { diff --git a/ui/storybook/stories/agent-persona-pages.stories.tsx b/ui/storybook/stories/agents/agent-persona-pages.stories.tsx similarity index 96% rename from ui/storybook/stories/agent-persona-pages.stories.tsx rename to ui/storybook/stories/agents/agent-persona-pages.stories.tsx index 0ae8a72759..f220ae53f8 100644 --- a/ui/storybook/stories/agent-persona-pages.stories.tsx +++ b/ui/storybook/stories/agents/agent-persona-pages.stories.tsx @@ -14,7 +14,7 @@ import { NewAgent } from "@/pages/NewAgent"; import { AgentBasicsDialog } from "@/components/new-agent/AgentBasicsDialog"; import { queryKeys } from "@/lib/queryKeys"; import { resolveAgentAppearance } from "@paperclipai/shared"; -import { storybookAgents, storybookIssues, storybookActivityEvents, storybookLiveRuns, storybookDashboardSummary } from "../fixtures/paperclipData"; +import { storybookAgents, storybookIssues, storybookActivityEvents, storybookLiveRuns, storybookDashboardSummary } from "../../fixtures/paperclipData"; const companyId = "company-storybook"; const agents = storybookAgents.map(agent => { @@ -109,7 +109,8 @@ function PersonaPage({ path, meet = false }: { path: string; meet?: boolean }) { {meet && setDialogOpen(false)} onContinue={basics => { setDialogOpen(false); navigate(`/PAP/agents/new?name=${encodeURIComponent(basics.name)}&adapterType=${basics.adapterType}`); }} />} ; } -const meta = { title: "Agents/Personas/Full pages", parameters: { layout: "fullscreen", a11y: { test: "off" } } } satisfies Meta; +const meta = { id: "agents-personas-full-pages", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas/Full pages", parameters: { layout: "fullscreen", a11y: { test: "off" } } } satisfies Meta; export default meta; type Story = StoryObj; export const AllAgents: Story = { render: () => }; diff --git a/ui/storybook/stories/agent-personas.stories.tsx b/ui/storybook/stories/agents/agent-personas.stories.tsx similarity index 95% rename from ui/storybook/stories/agent-personas.stories.tsx rename to ui/storybook/stories/agents/agent-personas.stories.tsx index d4a7069629..57aeec4a85 100644 --- a/ui/storybook/stories/agent-personas.stories.tsx +++ b/ui/storybook/stories/agents/agent-personas.stories.tsx @@ -3,15 +3,16 @@ import { expect, waitFor } from "storybook/test"; import { useEffect, useRef, useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { AGENT_PALETTE_IDS, AGENT_AVATAR_SIZES, CHARACTER_STATES, appearanceForPalette, type CharacterState } from "@paperclipai/shared"; -import { AgentAvatar, avatarSizeClasses } from "../../src/components/AgentAvatar"; -import { AgentCharacter } from "../../src/components/AgentCharacter"; -import { AgentIdentity } from "../../src/components/AgentIdentity"; -import { Button } from "../../src/components/ui/button"; +import { AgentAvatar, avatarSizeClasses } from "../../../src/components/AgentAvatar"; +import { AgentCharacter } from "../../../src/components/AgentCharacter"; +import { AgentIdentity } from "../../../src/components/AgentIdentity"; +import { Button } from "../../../src/components/ui/button"; const appearance = appearanceForPalette("bubblegum-sky"); const agent = { id: "storybook-agent", name: "Chief of Staff", appearance }; const meta = { - title: "Agents/Personas", + id: "agents-personas", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Personas", component: AgentCharacter, args: { appearance, size: 256, state: "listening", label: "Chief of Staff" }, parameters: { docs: { description: { component: "Persistent cap-v1 identities. The hero alone loads ClipLab. Development Storybook renders capsule PNGs locally on demand; published Storybook packages the same PNGs during its build, including every preset and both densities. Neither needs a running API." } } }, diff --git a/ui/storybook/stories/agent-settings-redesign.stories.tsx b/ui/storybook/stories/agents/agent-settings-redesign.stories.tsx similarity index 91% rename from ui/storybook/stories/agent-settings-redesign.stories.tsx rename to ui/storybook/stories/agents/agent-settings-redesign.stories.tsx index 8a29b6c0a8..5a0d1bcd92 100644 --- a/ui/storybook/stories/agent-settings-redesign.stories.tsx +++ b/ui/storybook/stories/agents/agent-settings-redesign.stories.tsx @@ -1,7 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { AgentSettingsPreview } from "../prototypes/agent-settings/AgentSettingsPreview"; +import { AgentSettingsPreview } from "../../prototypes/agent-settings/AgentSettingsPreview"; const meta = { - title: "Agents/Configuration refresh", + id: "agents-configuration-refresh", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Agents/Configuration refresh", component: AgentSettingsPreview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/built-in-agents.stories.tsx b/ui/storybook/stories/agents/built-in-agents.stories.tsx similarity index 98% rename from ui/storybook/stories/built-in-agents.stories.tsx rename to ui/storybook/stories/agents/built-in-agents.stories.tsx index b0bf66ddf8..9364b3fd3a 100644 --- a/ui/storybook/stories/built-in-agents.stories.tsx +++ b/ui/storybook/stories/agents/built-in-agents.stories.tsx @@ -111,7 +111,8 @@ function SectionLabel({ children }: { children: React.ReactNode }) { } const meta: Meta = { - title: "Product/Built-in Agents", + id: "product-built-in-agents", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Product/Built-in Agents", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/external-agent-invite/components.stories.tsx b/ui/storybook/stories/agents/external-agent-invite/components.stories.tsx similarity index 88% rename from ui/storybook/stories/external-agent-invite/components.stories.tsx rename to ui/storybook/stories/agents/external-agent-invite/components.stories.tsx index be2808170f..6e08aaa085 100644 --- a/ui/storybook/stories/external-agent-invite/components.stories.tsx +++ b/ui/storybook/stories/agents/external-agent-invite/components.stories.tsx @@ -3,7 +3,8 @@ import { fn } from "storybook/test"; import { DotConnectionChecks, ExternalAgentPresetPicker } from "@/components/new-agent/ExternalAgentInviteContent"; const meta = { - title: "Onboarding/External agent invitation/Components", + id: "onboarding-external-agent-invitation-components", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Components", component: DotConnectionChecks, parameters: { layout: "centered", docs: { description: { component: "Controlled presentation states. Connection checks must be driven by server evidence. Subscription verification alone must never mark the connection ready." } } }, decorators: [Story =>
], diff --git a/ui/storybook/stories/external-agent-invite/journeys.stories.tsx b/ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx similarity index 96% rename from ui/storybook/stories/external-agent-invite/journeys.stories.tsx rename to ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx index 0c002c4672..31d8702172 100644 --- a/ui/storybook/stories/external-agent-invite/journeys.stories.tsx +++ b/ui/storybook/stories/agents/external-agent-invite/journeys.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within, waitFor } from "storybook/test"; -import { ExternalAgentInvitePreview } from "./ExternalAgentInvitePreview"; +import { ExternalAgentInvitePreview } from "../../../support/external-agent-invite/ExternalAgentInvitePreview"; const meta = { - title: "Onboarding/External agent invitation/Journeys", + id: "onboarding-external-agent-invitation-journeys", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/External agent invitation/Journeys", component: ExternalAgentInvitePreview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/new-agent-onboarding.stories.tsx b/ui/storybook/stories/agents/new-agent-onboarding.stories.tsx similarity index 97% rename from ui/storybook/stories/new-agent-onboarding.stories.tsx rename to ui/storybook/stories/agents/new-agent-onboarding.stories.tsx index c867442654..0c7c0a963d 100644 --- a/ui/storybook/stories/new-agent-onboarding.stories.tsx +++ b/ui/storybook/stories/agents/new-agent-onboarding.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { userEvent, within } from "storybook/test"; -import { NewAgentWizard } from "../prototypes/NewAgentWizard"; +import { NewAgentWizard } from "../../prototypes/NewAgentWizard"; const meta = { - title: "Onboarding/New agent", + id: "onboarding-new-agent", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Onboarding/New agent", component: NewAgentWizard, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/primary-agent/00-review-guide.stories.tsx b/ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx similarity index 95% rename from ui/storybook/stories/primary-agent/00-review-guide.stories.tsx rename to ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx index 229bef555d..851d249fe7 100644 --- a/ui/storybook/stories/primary-agent/00-review-guide.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/00-review-guide.stories.tsx @@ -50,5 +50,6 @@ function ReviewGuide() { ; } -export default { title: "Primary Agent/00 Review guide", parameters: { layout: "fullscreen" }, render: () => } satisfies Meta; +export default { id: "primary-agent-00-review-guide", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/00 Review guide", parameters: { layout: "fullscreen" }, render: () => } satisfies Meta; export const StartHere: StoryObj = {}; diff --git a/ui/storybook/stories/primary-agent/01-components.stories.tsx b/ui/storybook/stories/agents/primary-agent/01-components.stories.tsx similarity index 73% rename from ui/storybook/stories/primary-agent/01-components.stories.tsx rename to ui/storybook/stories/agents/primary-agent/01-components.stories.tsx index 339a71269f..20aad95c2f 100644 --- a/ui/storybook/stories/primary-agent/01-components.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/01-components.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { AgentIdentity } from "@/components/AgentIdentity"; import { PrimaryAgentIndicator } from "@/components/primary-agent/PrimaryAgentPresentation"; -import { primaryDecorator, primaryParameters, usePrimaryStory, type PrimaryScenario } from "./PrimaryAgentStory"; +import { primaryDecorator, primaryParameters, usePrimaryStory, type PrimaryScenario } from "../../../support/primary-agent/PrimaryAgentStory"; function Components(_args: PrimaryScenario) { const { agents } = usePrimaryStory(); @@ -11,7 +11,8 @@ function Components(_args: PrimaryScenario) { )} ; } -export default { title: "Primary Agent/01 Components", component: Components, decorators: [primaryDecorator], parameters: primaryParameters, args: { primaryName: "Maia" }, render: args => } satisfies Meta; +export default { id: "primary-agent-01-components", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/01 Components", component: Components, decorators: [primaryDecorator], parameters: primaryParameters, args: { primaryName: "Maia" }, render: args => } satisfies Meta; type Story = StoryObj; export const CrownIndicator: Story = {}; export const NoPrimary: Story = { args: { primaryId: null } }; diff --git a/ui/storybook/stories/primary-agent/02-sidebar.stories.tsx b/ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx similarity index 76% rename from ui/storybook/stories/primary-agent/02-sidebar.stories.tsx rename to ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx index e392af89f7..ca5b0d1056 100644 --- a/ui/storybook/stories/primary-agent/02-sidebar.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/02-sidebar.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { userEvent, within } from "storybook/test"; -import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "./PrimaryAgentStory"; +import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "../../../support/primary-agent/PrimaryAgentStory"; -export default { title: "Primary Agent/02 Sidebar", decorators: [primaryDecorator], parameters: primaryParameters, args: { primaryName: "Maia" }, argTypes: { primaryName: { control: "text" } }, render: () => } satisfies Meta; +export default { id: "primary-agent-02-sidebar", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/02 Sidebar", decorators: [primaryDecorator], parameters: primaryParameters, args: { primaryName: "Maia" }, argTypes: { primaryName: { control: "text" } }, render: () => } satisfies Meta; type Story = StoryObj; export const IdlePrimary: Story = {}; export const ActiveColleague: Story = { parameters: { primaryAgent: { active: true } } }; diff --git a/ui/storybook/stories/primary-agent/03-agents.stories.tsx b/ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx similarity index 78% rename from ui/storybook/stories/primary-agent/03-agents.stories.tsx rename to ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx index ae4d8115a3..17ae07fb2b 100644 --- a/ui/storybook/stories/primary-agent/03-agents.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/03-agents.stories.tsx @@ -1,7 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "./PrimaryAgentStory"; +import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "../../../support/primary-agent/PrimaryAgentStory"; -export default { title: "Primary Agent/03 Agents", decorators: [primaryDecorator], parameters: primaryParameters, args: { primaryName: "Maia" }, argTypes: { primaryName: { control: "text" } }, render: () => } satisfies Meta; +export default { id: "primary-agent-03-agents", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/03 Agents", decorators: [primaryDecorator], parameters: primaryParameters, args: { primaryName: "Maia" }, argTypes: { primaryName: { control: "text" } }, render: () => } satisfies Meta; type Story = StoryObj; export const Roster: Story = {}; export const Profile: Story = { parameters: { initialEntries: ["/PAP/agents/maia"] } }; diff --git a/ui/storybook/stories/primary-agent/04-new-task.stories.tsx b/ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx similarity index 74% rename from ui/storybook/stories/primary-agent/04-new-task.stories.tsx rename to ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx index 62a316e629..e3d78f4d0a 100644 --- a/ui/storybook/stories/primary-agent/04-new-task.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/04-new-task.stories.tsx @@ -1,7 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "./PrimaryAgentStory"; +import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "../../../support/primary-agent/PrimaryAgentStory"; -export default { title: "Primary Agent/04 New task", decorators: [primaryDecorator], parameters: primaryParameters, render: () => } satisfies Meta; +export default { id: "primary-agent-04-new-task", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/04 New task", decorators: [primaryDecorator], parameters: primaryParameters, render: () => } satisfies Meta; type Story = StoryObj; export const PrimaryFallback: Story = {}; export const RecentSpecialistWins: Story = { parameters: { primaryAgent: { recentAssignee: true } }, render: () => }; diff --git a/ui/storybook/stories/primary-agent/05-chat.stories.tsx b/ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx similarity index 68% rename from ui/storybook/stories/primary-agent/05-chat.stories.tsx rename to ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx index b5a2f3fa2a..e487734f4d 100644 --- a/ui/storybook/stories/primary-agent/05-chat.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/05-chat.stories.tsx @@ -1,7 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "./PrimaryAgentStory"; +import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "../../../support/primary-agent/PrimaryAgentStory"; -export default { title: "Primary Agent/05 Chat", decorators: [primaryDecorator], parameters: { ...primaryParameters, initialEntries: ["/PAP/chats"] }, render: () => } satisfies Meta; +export default { id: "primary-agent-05-chat", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/05 Chat", decorators: [primaryDecorator], parameters: { ...primaryParameters, initialEntries: ["/PAP/chats"] }, render: () => } satisfies Meta; type Story = StoryObj; export const PrimaryFallback: Story = {}; export const RecentConversationWins: Story = { parameters: { primaryAgent: { recentChat: true } } }; diff --git a/ui/storybook/stories/primary-agent/06-journeys.stories.tsx b/ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx similarity index 95% rename from ui/storybook/stories/primary-agent/06-journeys.stories.tsx rename to ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx index 0172759b91..c4496e5118 100644 --- a/ui/storybook/stories/primary-agent/06-journeys.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/06-journeys.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within, waitFor } from "storybook/test"; -import { PrimaryPage, primaryDecorator, primaryParameters } from "./PrimaryAgentStory"; +import { PrimaryPage, primaryDecorator, primaryParameters } from "../../../support/primary-agent/PrimaryAgentStory"; async function openActions(canvasElement: HTMLElement, name: string, profile = false) { const page = within(canvasElement.ownerDocument.body); @@ -11,7 +11,8 @@ async function openActions(canvasElement: HTMLElement, name: string, profile = f return page; } const maiaProfile = { initialEntries: ["/PAP/agents/maia"] }; -export default { title: "Primary Agent/06 Journeys", decorators: [primaryDecorator], parameters: { ...primaryParameters, initialEntries: ["/PAP/agents/alex"] }, render: () => } satisfies Meta; +export default { id: "primary-agent-06-journeys", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/06 Journeys", decorators: [primaryDecorator], parameters: { ...primaryParameters, initialEntries: ["/PAP/agents/alex"] }, render: () => } satisfies Meta; type Story = StoryObj; async function confirmPrimaryChange(canvasElement: HTMLElement) { const page = within(canvasElement.ownerDocument.body); diff --git a/ui/storybook/stories/primary-agent/07-confirmation.stories.tsx b/ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx similarity index 82% rename from ui/storybook/stories/primary-agent/07-confirmation.stories.tsx rename to ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx index 73329989d7..be3e59897d 100644 --- a/ui/storybook/stories/primary-agent/07-confirmation.stories.tsx +++ b/ui/storybook/stories/agents/primary-agent/07-confirmation.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "./PrimaryAgentStory"; +import { PrimaryPage, mobile, primaryDecorator, primaryParameters } from "../../../support/primary-agent/PrimaryAgentStory"; export default { - title: "Primary Agent/07 Confirmation", + id: "primary-agent-07-confirmation", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Primary Agent/07 Confirmation", decorators: [primaryDecorator], parameters: { ...primaryParameters, initialEntries: ["/PAP/agents/alex"] }, render: () => , diff --git a/ui/storybook/stories/summary-slot-card.stories.tsx b/ui/storybook/stories/agents/summary-slot-card.stories.tsx similarity index 98% rename from ui/storybook/stories/summary-slot-card.stories.tsx rename to ui/storybook/stories/agents/summary-slot-card.stories.tsx index 9a91ef710f..2742160f79 100644 --- a/ui/storybook/stories/summary-slot-card.stories.tsx +++ b/ui/storybook/stories/agents/summary-slot-card.stories.tsx @@ -325,7 +325,8 @@ const DESKTOP = 640; const MOBILE = 375; const meta: Meta = { - title: "Summaries/SummarySlotCard", + id: "summaries-summaryslotcard", + title: "Agents and reusable capabilities/Hiring, configuration, and organization/Summaries/SummarySlotCard", component: CardHarness, parameters: { layout: "padded" }, }; diff --git a/ui/storybook/stories/action-card.stories.tsx b/ui/storybook/stories/app-permissions/action-card.stories.tsx similarity index 95% rename from ui/storybook/stories/action-card.stories.tsx rename to ui/storybook/stories/app-permissions/action-card.stories.tsx index 869b070ac9..5222edf27e 100644 --- a/ui/storybook/stories/action-card.stories.tsx +++ b/ui/storybook/stories/app-permissions/action-card.stories.tsx @@ -21,7 +21,8 @@ const baseProps = { }; const meta: Meta = { - title: "Tools & Access/ActionCard", + id: "tools-access-actioncard", + title: "Apps, channels, and extensions/App access and action permissions/Tools & Access/ActionCard", component: ActionCard, }; export default meta; diff --git a/ui/storybook/stories/action-permissions-test.stories.tsx b/ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx similarity index 98% rename from ui/storybook/stories/action-permissions-test.stories.tsx rename to ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx index 38f2601ca3..235a8fde92 100644 --- a/ui/storybook/stories/action-permissions-test.stories.tsx +++ b/ui/storybook/stories/app-permissions/action-permissions-test.stories.tsx @@ -177,7 +177,8 @@ function PermissionsTestStory({ result, tool = TOOL, appName = "Asana", query }: } const meta = { - title: "Apps/Action permissions test", + id: "apps-action-permissions-test", + title: "Apps, channels, and extensions/App access and action permissions/Apps/Action permissions test", parameters: { layout: "fullscreen" }, } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx b/ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx new file mode 100644 index 0000000000..7fffdf2e6e --- /dev/null +++ b/ui/storybook/stories/app-permissions/apps-managed-accounts.stories.tsx @@ -0,0 +1,7 @@ +import type { Meta, StoryObj } from "@storybook/react-vite"; +import { ManagedAggregatorAccounts } from "../../prototypes/ManagedAggregatorAccounts"; +const meta = { id: "apps-managed-accounts", + title: "Apps, channels, and extensions/App access and action permissions/Apps/Managed accounts", component: ManagedAggregatorAccounts, parameters: { layout: "fullscreen", docs: { description: { component: "Production Apps page using production API routes and a disposable PostgreSQL database. Upstream Arcade, Composio and Executor responses are fixtures. Start tests/aggregator-accounts/test-drive.ts, then use the upstream controls and each gateway’s Refresh action." } } } } satisfies Meta; +export default meta; +type Story = StoryObj; +export const FullStackTestDrive: Story = {}; diff --git a/ui/storybook/stories/permitted-vs-installed.stories.tsx b/ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx similarity index 98% rename from ui/storybook/stories/permitted-vs-installed.stories.tsx rename to ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx index 6d5874bc63..07bb33c810 100644 --- a/ui/storybook/stories/permitted-vs-installed.stories.tsx +++ b/ui/storybook/stories/app-permissions/permitted-vs-installed.stories.tsx @@ -122,7 +122,8 @@ function connection(id: string, name: string, installs: InstallState): ToolConne } const meta: Meta = { - title: "Tools/Permitted vs Installed", + id: "tools-permitted-vs-installed", + title: "Apps, channels, and extensions/App access and action permissions/Tools/Permitted vs Installed", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/apps-managed-accounts.stories.tsx b/ui/storybook/stories/apps-managed-accounts.stories.tsx deleted file mode 100644 index fdff3c42e0..0000000000 --- a/ui/storybook/stories/apps-managed-accounts.stories.tsx +++ /dev/null @@ -1,6 +0,0 @@ -import type { Meta, StoryObj } from "@storybook/react-vite"; -import { ManagedAggregatorAccounts } from "../prototypes/ManagedAggregatorAccounts"; -const meta = { title: "Apps/Managed accounts", component: ManagedAggregatorAccounts, parameters: { layout: "fullscreen", docs: { description: { component: "Production Apps page using production API routes and a disposable PostgreSQL database. Upstream Arcade, Composio and Executor responses are fixtures. Start tests/aggregator-accounts/test-drive.ts, then use the upstream controls and each gateway’s Refresh action." } } } } satisfies Meta; -export default meta; -type Story = StoryObj; -export const FullStackTestDrive: Story = {}; diff --git a/ui/storybook/stories/budget-finance.stories.tsx b/ui/storybook/stories/budgets-costs/budget-finance.stories.tsx similarity index 99% rename from ui/storybook/stories/budget-finance.stories.tsx rename to ui/storybook/stories/budgets-costs/budget-finance.stories.tsx index 21cbe1df0c..df59337d58 100644 --- a/ui/storybook/stories/budget-finance.stories.tsx +++ b/ui/storybook/stories/budgets-costs/budget-finance.stories.tsx @@ -765,7 +765,8 @@ function BudgetFinanceMatrix() { } const meta = { - title: "Product/Budget & Finance", + id: "product-budget-finance", + title: "Oversight and operation/Costs and budgets/Product/Budget & Finance", component: BudgetFinanceMatrix, parameters: { docs: { diff --git a/ui/storybook/stories/costs/subscriptions.stories.tsx b/ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx similarity index 98% rename from ui/storybook/stories/costs/subscriptions.stories.tsx rename to ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx index 3173cb6259..6d55bb8434 100644 --- a/ui/storybook/stories/costs/subscriptions.stories.tsx +++ b/ui/storybook/stories/budgets-costs/costs/subscriptions.stories.tsx @@ -100,7 +100,8 @@ function SubscriptionCostsStory({ unknownPrice = false, stale = false, costGaps return ready ? <> : null; } -const meta = { title: "Costs/Subscriptions", component: SubscriptionCostsStory, parameters: { +const meta = { id: "costs-subscriptions", + title: "Oversight and operation/Costs and budgets/Costs/Subscriptions", component: SubscriptionCostsStory, parameters: { layout: "padded", docs: { description: { component: "Production Costs page with API spend, monthly subscription estimates, user and project costs. View details to edit monthly or annual prices. Provider calls are fixtures." } }, } } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/agentmail-onboarding.stories.tsx b/ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx similarity index 98% rename from ui/storybook/stories/agentmail-onboarding.stories.tsx rename to ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx index 30607a4528..0542a1c4bf 100644 --- a/ui/storybook/stories/agentmail-onboarding.stories.tsx +++ b/ui/storybook/stories/chat-channels/agentmail-onboarding.stories.tsx @@ -6,7 +6,7 @@ import { ChatSetupSidebar } from "@/components/chat/ChatSetupNavigation"; import { ChatSetupSidebarProvider } from "@/context/ChatSetupSidebarContext"; import { useCompany } from "@/context/CompanyContext"; import { useLocation, useNavigate } from "@/lib/router"; -import { storybookAgents } from "../fixtures/paperclipData"; +import { storybookAgents } from "../../fixtures/paperclipData"; const COMPANY = "company-storybook"; const CONNECTION = "agentmail-storybook-account"; @@ -40,7 +40,8 @@ function AgentMailJourney({ savedConnection = true }: { savedConnection?: boolea type Scenario = { noSavedKeys?: boolean; scopedKey?: boolean; missingBoundary?: boolean; denySetup?: boolean; initialTaken?: boolean; noCustomDomain?: boolean; checkFailed?: boolean }; const meta = { - title: "Connections/AgentMail setup", + id: "connections-agentmail-setup", + title: "Apps, channels, and extensions/External chat and email/Connections/AgentMail setup", component: AgentMailJourney, parameters: { layout: "fullscreen" }, args: { savedConnection: true }, diff --git a/ui/storybook/stories/agentmail-settings.stories.tsx b/ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx similarity index 97% rename from ui/storybook/stories/agentmail-settings.stories.tsx rename to ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx index 0d22f49ddc..cb992253ca 100644 --- a/ui/storybook/stories/agentmail-settings.stories.tsx +++ b/ui/storybook/stories/chat-channels/agentmail-settings.stories.tsx @@ -6,7 +6,8 @@ import type { EmailEndpointSummary } from "@paperclipai/shared"; const COMPANY = "company-storybook"; const ENDPOINT = "agentmail-settings-preview"; const meta = { - title: "Connections/AgentMail settings", + id: "connections-agentmail-settings", + title: "Apps, channels, and extensions/External chat and email/Connections/AgentMail settings", component: EmailEndpointSettings, parameters: { layout: "padded" }, args: { endpointId: ENDPOINT, companyId: COMPANY, assignedAgentName: "Ralph" }, diff --git a/ui/storybook/stories/agentmail.stories.tsx b/ui/storybook/stories/chat-channels/agentmail.stories.tsx similarity index 99% rename from ui/storybook/stories/agentmail.stories.tsx rename to ui/storybook/stories/chat-channels/agentmail.stories.tsx index 9e56b4fef7..0089529b4d 100644 --- a/ui/storybook/stories/agentmail.stories.tsx +++ b/ui/storybook/stories/chat-channels/agentmail.stories.tsx @@ -545,7 +545,8 @@ function EmailTaskExperience({ ); } const meta = { - title: "Connections/AgentMail tasks", + id: "connections-agentmail-tasks", + title: "Apps, channels, and extensions/External chat and email/Connections/AgentMail tasks", component: EmailTaskExperience, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/chat-connection-actions.stories.tsx b/ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx similarity index 93% rename from ui/storybook/stories/chat-connection-actions.stories.tsx rename to ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx index b96e48bafd..dc1793dd29 100644 --- a/ui/storybook/stories/chat-connection-actions.stories.tsx +++ b/ui/storybook/stories/chat-channels/chat-connection-actions.stories.tsx @@ -10,7 +10,8 @@ const endpoint: ChatEndpoint = { }; const meta = { - title: "Connections/Chat connection actions", + id: "connections-chat-connection-actions", + title: "Apps, channels, and extensions/External chat and email/Connections/Chat connection actions", component: ConnectorCard, parameters: { layout: "padded" }, args: { diff --git a/ui/storybook/stories/chat-management/chat-management.stories.tsx b/ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx similarity index 98% rename from ui/storybook/stories/chat-management/chat-management.stories.tsx rename to ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx index 6160849cbd..b6246aaba5 100644 --- a/ui/storybook/stories/chat-management/chat-management.stories.tsx +++ b/ui/storybook/stories/chat-channels/chat-management/chat-management.stories.tsx @@ -9,7 +9,7 @@ import { PluginLauncherProvider } from "@/plugins/launchers"; import { ChatEndpointDetail } from "@/pages/apps/chat/ChatEndpointDetail"; import { useCompany } from "@/context/CompanyContext"; import type { ChatEndpoint, ChatEndpointResource, ChatIdentityLink } from "@/api/chatEndpoints"; -import { storybookAgents } from "../../fixtures/paperclipData"; +import { storybookAgents } from "../../../fixtures/paperclipData"; type Scenario = "populated" | "empty" | "error" | "channel-added" | "unlinked" | "invitation-expired"; function ChatManagementPage({ tab = "settings", scenario = "populated" }: { tab?: string; scenario?: Scenario }) { @@ -105,7 +105,8 @@ function ChatManagementPage({ tab = "settings", scenario = "populated" }: { tab? } const meta = { - title: "Connections/Chat management", + id: "connections-chat-management", + title: "Apps, channels, and extensions/External chat and email/Connections/Chat management", component: ChatManagementPage, parameters: { layout: "fullscreen", a11y: { test: "off" } }, args: { tab: "settings", scenario: "populated" }, diff --git a/ui/storybook/stories/github-bot-management/management.stories.tsx b/ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx similarity index 97% rename from ui/storybook/stories/github-bot-management/management.stories.tsx rename to ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx index 0d32d84193..38b2ed87ee 100644 --- a/ui/storybook/stories/github-bot-management/management.stories.tsx +++ b/ui/storybook/stories/chat-channels/github-bot-management/management.stories.tsx @@ -32,11 +32,12 @@ import { configuration, reviews, conversations, -} from "./fixtures"; -import { FixtureApi, type FixtureState } from "./fixture-api"; +} from "../../../support/github-bot-management/fixtures"; +import { FixtureApi, type FixtureState } from "../../../support/github-bot-management/fixture-api"; const meta = { - title: "Connectors/GitHub bot management", + id: "connectors-github-bot-management", + title: "Apps, channels, and extensions/External chat and email/Connectors/GitHub bot management", parameters: { layout: "fullscreen", initialEntries: [`/PAP/apps/chat/${endpoint.id}/settings`], diff --git a/ui/storybook/stories/github-chat.stories.tsx b/ui/storybook/stories/chat-channels/github-chat.stories.tsx similarity index 98% rename from ui/storybook/stories/github-chat.stories.tsx rename to ui/storybook/stories/chat-channels/github-chat.stories.tsx index 5e6d09b6e2..b32fb9383d 100644 --- a/ui/storybook/stories/github-chat.stories.tsx +++ b/ui/storybook/stories/chat-channels/github-chat.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { GitHubChatPreview } from "../prototypes/github-chat/GitHubChatPreview"; +import { GitHubChatPreview } from "../../prototypes/github-chat/GitHubChatPreview"; const meta = { - title: "Historical/GitHub chat prototypes", + id: "historical-github-chat-prototypes", + title: "Apps, channels, and extensions/External chat and email/Historical/GitHub chat prototypes", component: GitHubChatPreview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/github-connections.stories.tsx b/ui/storybook/stories/chat-channels/github-connections.stories.tsx similarity index 96% rename from ui/storybook/stories/github-connections.stories.tsx rename to ui/storybook/stories/chat-channels/github-connections.stories.tsx index ed15b4ef80..a176546e78 100644 --- a/ui/storybook/stories/github-connections.stories.tsx +++ b/ui/storybook/stories/chat-channels/github-connections.stories.tsx @@ -10,7 +10,7 @@ import { queryKeys } from "@/lib/queryKeys"; import { Browse } from "@/pages/apps/Browse"; import { AppsConnect } from "@/pages/apps/AppsConnect"; import { ChatEndpointSetup } from "@/pages/apps/chat/ChatEndpointSetup"; -import { storybookAgents } from "../fixtures/paperclipData"; +import { storybookAgents } from "../../fixtures/paperclipData"; const companyId = "company-storybook"; // Hosted Storybooks live below a branch path; reuse their bundled GitHub marks. @@ -78,7 +78,8 @@ function GitHubConnections({ saved = false, chatEnabled = true }) { } const meta = { - title: "Connections/GitHub and Code Review Bot", + id: "connections-github-and-code-review-bot", + title: "Apps, channels, and extensions/External chat and email/Connections/GitHub and Code Review Bot", component: GitHubConnections, play: async ({ canvasElement }) => { await userEvent.type(await within(canvasElement).findByRole("searchbox", { name: "Search connectors" }), "GitHub"); diff --git a/ui/storybook/stories/imessage-photon.stories.tsx b/ui/storybook/stories/chat-channels/imessage-photon.stories.tsx similarity index 98% rename from ui/storybook/stories/imessage-photon.stories.tsx rename to ui/storybook/stories/chat-channels/imessage-photon.stories.tsx index 13a227a48d..00c7b2c462 100644 --- a/ui/storybook/stories/imessage-photon.stories.tsx +++ b/ui/storybook/stories/chat-channels/imessage-photon.stories.tsx @@ -11,7 +11,7 @@ import { TaskChatBubble } from "@/components/task-chat/TaskChatBubble"; import { Button } from "@/components/ui/button"; import type { ChatEndpoint, ChatIdentityLink } from "@/api/chatEndpoints"; import type { TaskChatMessageItem } from "@/components/task-chat/task-chat-model"; -import { storybookAgents } from "../fixtures/paperclipData"; +import { storybookAgents } from "../../fixtures/paperclipData"; type Screen = "catalog" | "agent" | "credentials" | "access" | "task" | "reconnect"; type Scenario = { screen?: Screen; dedicated?: boolean; outage?: boolean; noLine?: boolean; loading?: boolean; connecting?: boolean }; @@ -96,7 +96,8 @@ function Host(props: { screen?: Screen }) { } const meta = { - title: "Connections/iMessage Photon", component: Host, + id: "connections-imessage-photon", + title: "Apps, channels, and extensions/External chat and email/Connections/iMessage Photon", component: Host, parameters: { layout: "fullscreen" }, beforeEach: ({ parameters }) => { const scenario = (parameters.photonScenario ?? {}) as Scenario; diff --git a/ui/storybook/stories/slack-automatic-setup.stories.tsx b/ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx similarity index 95% rename from ui/storybook/stories/slack-automatic-setup.stories.tsx rename to ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx index 4ed65ff603..813937e17b 100644 --- a/ui/storybook/stories/slack-automatic-setup.stories.tsx +++ b/ui/storybook/stories/chat-channels/slack-automatic-setup.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { SlackSetupFixture } from "../fixtures/SlackSetupFixture"; +import { SlackSetupFixture } from "../../fixtures/SlackSetupFixture"; const start = "/PAP/apps/chat/connect?provider=slack&purpose=chat"; const meta = { - title: "Connections/Slack/Automatic setup", + id: "connections-slack-automatic-setup", + title: "Apps, channels, and extensions/External chat and email/Connections/Slack/Automatic setup", component: SlackSetupFixture, parameters: { layout: "fullscreen", initialEntries: [`${start}&resume=slack-story`], docs: { description: { component: "Production Slack setup pages in journey order. Automatic stories use the same four-step wizard; manual setup retains account linking. Slack creation, consent, verification, and identity discovery are simulated; use synthetic tokens only." } } }, diff --git a/ui/storybook/stories/slack-avatar-settings.stories.tsx b/ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx similarity index 67% rename from ui/storybook/stories/slack-avatar-settings.stories.tsx rename to ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx index 96ce07e811..011d9367cf 100644 --- a/ui/storybook/stories/slack-avatar-settings.stories.tsx +++ b/ui/storybook/stories/chat-channels/slack-avatar-settings.stories.tsx @@ -1,7 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { SlackAvatarSettingsPreview } from "../prototypes/slack-avatar/SlackAvatarSettingsPreview"; +import { SlackAvatarSettingsPreview } from "../../prototypes/slack-avatar/SlackAvatarSettingsPreview"; const meta = { - title: "Connections/Slack/Avatar in Settings", + id: "connections-slack-avatar-in-settings", + title: "Apps, channels, and extensions/External chat and email/Connections/Slack/Avatar in Settings", component: SlackAvatarSettingsPreview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/slack-communication-settings.stories.tsx b/ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx similarity index 86% rename from ui/storybook/stories/slack-communication-settings.stories.tsx rename to ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx index fa28a1145d..7e6d39a63d 100644 --- a/ui/storybook/stories/slack-communication-settings.stories.tsx +++ b/ui/storybook/stories/chat-channels/slack-communication-settings.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { SlackAvatarSettingsPreview } from "../prototypes/slack-avatar/SlackAvatarSettingsPreview"; +import { SlackAvatarSettingsPreview } from "../../prototypes/slack-avatar/SlackAvatarSettingsPreview"; const meta = { - title: "Connections/Slack/Communication in Settings", + id: "connections-slack-communication-in-settings", + title: "Apps, channels, and extensions/External chat and email/Connections/Slack/Communication in Settings", component: SlackAvatarSettingsPreview, parameters: { layout: "fullscreen", docs: { description: { component: "Production communication field in a Settings fixture. Saves use local story state; instructions apply to new tasks. Reply detail and progress are built-in behavior." } } }, } satisfies Meta; diff --git a/ui/storybook/stories/slack-managed-setup.stories.tsx b/ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx similarity index 96% rename from ui/storybook/stories/slack-managed-setup.stories.tsx rename to ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx index 78638174cf..5af30cc73a 100644 --- a/ui/storybook/stories/slack-managed-setup.stories.tsx +++ b/ui/storybook/stories/chat-channels/slack-managed-setup.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within, waitFor } from "storybook/test"; -import { SlackSetupFixture } from "../fixtures/SlackSetupFixture"; +import { SlackSetupFixture } from "../../fixtures/SlackSetupFixture"; const start = "/PAP/apps/chat/connect?provider=slack&purpose=chat"; const meta = { - title: "Connections/Slack/Managed setup", component: SlackSetupFixture, + id: "connections-slack-managed-setup", + title: "Apps, channels, and extensions/External chat and email/Connections/Slack/Managed setup", component: SlackSetupFixture, args: { managed: true }, parameters: { layout: "fullscreen", initialEntries: [`${start}&resume=slack-story`] }, render: args => , diff --git a/ui/storybook/stories/slack-tools.stories.tsx b/ui/storybook/stories/chat-channels/slack-tools.stories.tsx similarity index 91% rename from ui/storybook/stories/slack-tools.stories.tsx rename to ui/storybook/stories/chat-channels/slack-tools.stories.tsx index 18d7b99411..c5eba3392a 100644 --- a/ui/storybook/stories/slack-tools.stories.tsx +++ b/ui/storybook/stories/chat-channels/slack-tools.stories.tsx @@ -3,7 +3,7 @@ import { SLACK_TOOLS, type SlackSearchStatus } from "@paperclipai/shared"; import { SlackCapabilitiesView, SlackSearchView, -} from "../../src/pages/apps/chat/SlackToolSettings"; +} from "../../../src/pages/apps/chat/SlackToolSettings"; const base: SlackSearchStatus = { canConfigure: true, configured: false, @@ -52,7 +52,8 @@ function Preview({ ); } export default { - title: "Connections/Slack/Task tools", + id: "connections-slack-task-tools", + title: "Apps, channels, and extensions/External chat and email/Connections/Slack/Task tools", component: Preview, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/decision-models/01-settings.stories.tsx b/ui/storybook/stories/companies/decision-models/01-settings.stories.tsx similarity index 83% rename from ui/storybook/stories/decision-models/01-settings.stories.tsx rename to ui/storybook/stories/companies/decision-models/01-settings.stories.tsx index 51848e7839..f29a32edc6 100644 --- a/ui/storybook/stories/decision-models/01-settings.stories.tsx +++ b/ui/storybook/stories/companies/decision-models/01-settings.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { fn } from "storybook/test"; import { DecisionModelSettingsView } from "@/components/decision-models/DecisionModelSettings"; -import { choices, configured, result, unconfigured } from "./fixtures"; +import { choices, configured, result, unconfigured } from "../../../support/decision-models/fixtures"; -const meta = { title: "Decision models/01 Settings", component: DecisionModelSettingsView, +const meta = { id: "decision-models-01-settings", + title: "Getting started and access/Companies and portability/Decision models/01 Settings", component: DecisionModelSettingsView, decorators: [Story =>
], args: { settings: configured, choices, onSave: fn(), onTest: fn(), onAdd: fn() }, } satisfies Meta; diff --git a/ui/storybook/stories/decision-models/02-history.stories.tsx b/ui/storybook/stories/companies/decision-models/02-history.stories.tsx similarity index 81% rename from ui/storybook/stories/decision-models/02-history.stories.tsx rename to ui/storybook/stories/companies/decision-models/02-history.stories.tsx index 8ee9f752ba..5380d559d7 100644 --- a/ui/storybook/stories/decision-models/02-history.stories.tsx +++ b/ui/storybook/stories/companies/decision-models/02-history.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { DecisionHistoryTable } from "@/components/decision-models/DecisionHistory"; -import { entry } from "./fixtures"; +import { entry } from "../../../support/decision-models/fixtures"; -const meta = { title: "Decision models/02 History", component: DecisionHistoryTable, +const meta = { id: "decision-models-02-history", + title: "Getting started and access/Companies and portability/Decision models/02 History", component: DecisionHistoryTable, decorators: [Story =>
], args: { entries: [entry] }, } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/decision-models/03-journey.stories.tsx b/ui/storybook/stories/companies/decision-models/03-journey.stories.tsx similarity index 96% rename from ui/storybook/stories/decision-models/03-journey.stories.tsx rename to ui/storybook/stories/companies/decision-models/03-journey.stories.tsx index 8a409367d7..2140d99c97 100644 --- a/ui/storybook/stories/decision-models/03-journey.stories.tsx +++ b/ui/storybook/stories/companies/decision-models/03-journey.stories.tsx @@ -7,7 +7,7 @@ import { Layout } from "@/components/Layout"; import { CompanySettings } from "@/pages/CompanySettings"; import { Costs } from "@/pages/Costs"; import { PluginLauncherProvider } from "@/plugins/launchers"; -import { choices, companyId, configured, entry, result, unconfigured } from "./fixtures"; +import { choices, companyId, configured, entry, result, unconfigured } from "../../../support/decision-models/fixtures"; import type { DecisionHistoryEntry } from "@paperclipai/shared"; /** Production pages and shell; only API responses and paid provider execution are simulated. */ @@ -68,7 +68,8 @@ function Journey({ alreadyConfigured = false }: { alreadyConfigured?: boolean }) } /> : null; } -const meta = { title: "Decision models/03 Journey", component: Journey, parameters: { +const meta = { id: "decision-models-03-journey", + title: "Getting started and access/Companies and portability/Decision models/03 Journey", component: Journey, parameters: { layout: "fullscreen", initialEntries: ["/PAP/company/settings"], docs: { story: { inline: false }, description: { component: "Select an existing shared connection, preserve the background setting, save, run the sample, and follow View usage. Paid calls are fixtures." } }, } } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/fast-responses/01-settings.stories.tsx b/ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx similarity index 91% rename from ui/storybook/stories/fast-responses/01-settings.stories.tsx rename to ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx index 4ed8d04936..e306ab4745 100644 --- a/ui/storybook/stories/fast-responses/01-settings.stories.tsx +++ b/ui/storybook/stories/companies/fast-responses/01-settings.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { fn } from "storybook/test"; import { FastResponseSettingsView } from "@/components/fast-responses/FastResponseSettings"; -import { choices } from "../decision-models/fixtures"; +import { choices } from "../../../support/decision-models/fixtures"; import type { FastResponseSettings, FastResponseTestResult, @@ -36,7 +36,8 @@ export const result: FastResponseTestResult = { }, }; const meta = { - title: "Fast responses/01 Settings", + id: "fast-responses-01-settings", + title: "Getting started and access/Companies and portability/Fast responses/01 Settings", excludeStories: ["empty", "configured", "result"], component: FastResponseSettingsView, decorators: [ diff --git a/ui/storybook/stories/fast-responses/02-history.stories.tsx b/ui/storybook/stories/companies/fast-responses/02-history.stories.tsx similarity index 91% rename from ui/storybook/stories/fast-responses/02-history.stories.tsx rename to ui/storybook/stories/companies/fast-responses/02-history.stories.tsx index 646074f005..e3880534fb 100644 --- a/ui/storybook/stories/fast-responses/02-history.stories.tsx +++ b/ui/storybook/stories/companies/fast-responses/02-history.stories.tsx @@ -1,7 +1,7 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import type { FastResponseHistoryEntry } from "@paperclipai/shared"; import { DecisionHistoryTable } from "@/components/decision-models/DecisionHistory"; -import { entry } from "../decision-models/fixtures"; +import { entry } from "../../../support/decision-models/fixtures"; const receipt: FastResponseHistoryEntry = { ...entry, feature: "message", @@ -16,7 +16,8 @@ const receipt: FastResponseHistoryEntry = { costStatus: "reported", }; const meta = { - title: "Fast responses/02 History", + id: "fast-responses-02-history", + title: "Getting started and access/Companies and portability/Fast responses/02 History", component: DecisionHistoryTable, decorators: [ (Story) => ( diff --git a/ui/storybook/stories/AppLogoRegistry.stories.tsx b/ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx similarity index 86% rename from ui/storybook/stories/AppLogoRegistry.stories.tsx rename to ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx index 1c002a6bab..218ef2d7f9 100644 --- a/ui/storybook/stories/AppLogoRegistry.stories.tsx +++ b/ui/storybook/stories/connection-setup/AppLogoRegistry.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { AppLogo } from "@/pages/apps/AppLogo"; -import manifest from "../../public/brands/apps/manifest.json"; +import manifest from "../../../public/brands/apps/manifest.json"; const sizes = [24, 28, 32, 36, 44, 48]; const launchOrder = ["gmail", "google-calendar", "slack", "stripe"]; @@ -31,7 +31,8 @@ function Registry() { ); } -const meta = { title: "Apps/Canonical icon registry", component: Registry, parameters: { layout: "fullscreen" } } satisfies Meta; +const meta = { id: "apps-canonical-icon-registry", + title: "Apps, channels, and extensions/Connection setup/Apps/Canonical icon registry", component: Registry, parameters: { layout: "fullscreen" } } satisfies Meta; export default meta; type Story = StoryObj; export const Light: Story = { globals: { theme: "light" } }; diff --git a/ui/storybook/stories/ArcadeConnection.stories.tsx b/ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx similarity index 94% rename from ui/storybook/stories/ArcadeConnection.stories.tsx rename to ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx index 04688e63b6..15186c52ec 100644 --- a/ui/storybook/stories/ArcadeConnection.stories.tsx +++ b/ui/storybook/stories/connection-setup/ArcadeConnection.stories.tsx @@ -1,9 +1,10 @@ import { userEvent, within } from "storybook/test"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { RemoteMcpConnectionReview } from "../prototypes/RemoteMcpConnectionReview"; +import { RemoteMcpConnectionReview } from "../../prototypes/RemoteMcpConnectionReview"; const meta = { - title: "Apps/Connections/Arcade", + id: "apps-connections-arcade", + title: "Apps, channels, and extensions/Connection setup/Apps/Connections/Arcade", component: RemoteMcpConnectionReview, args: { provider: "arcade", scenario: "journey" }, parameters: { layout: "fullscreen", docs: { description: { component: "Interactive design review using application views with in-memory provider responses. No real authentication, tool calls, or credential persistence. Representative catalogs are examples; production discovery supplies the actual tools." } } }, diff --git a/ui/storybook/stories/ComposioConnection.stories.tsx b/ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx similarity index 94% rename from ui/storybook/stories/ComposioConnection.stories.tsx rename to ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx index fc5940e9e5..1919775505 100644 --- a/ui/storybook/stories/ComposioConnection.stories.tsx +++ b/ui/storybook/stories/connection-setup/ComposioConnection.stories.tsx @@ -1,9 +1,10 @@ import { userEvent, within } from "storybook/test"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { RemoteMcpConnectionReview } from "../prototypes/RemoteMcpConnectionReview"; +import { RemoteMcpConnectionReview } from "../../prototypes/RemoteMcpConnectionReview"; const meta = { - title: "Apps/Connections/Composio", + id: "apps-connections-composio", + title: "Apps, channels, and extensions/Connection setup/Apps/Connections/Composio", component: RemoteMcpConnectionReview, args: { provider: "composio", scenario: "journey" }, parameters: { layout: "fullscreen", docs: { description: { component: "Interactive design review using application views with in-memory provider responses. No real authentication, tool calls, or credential persistence. Representative catalogs are examples; production discovery supplies the actual tools." } } }, diff --git a/ui/storybook/stories/ConnectionProviderChoice.stories.tsx b/ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx similarity index 96% rename from ui/storybook/stories/ConnectionProviderChoice.stories.tsx rename to ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx index 911cc7d26f..4257a9628b 100644 --- a/ui/storybook/stories/ConnectionProviderChoice.stories.tsx +++ b/ui/storybook/stories/connection-setup/ConnectionProviderChoice.stories.tsx @@ -9,7 +9,7 @@ import { } from "@paperclipai/shared"; import { RemoteMcpAccountChoice } from "@/features/connections/remote-mcp/RemoteMcpAccountChoice"; import { QuestionForm } from "@/components/task-chat/QuestionForm"; -import { RemoteMcpConnectionReview } from "../prototypes/RemoteMcpConnectionReview"; +import { RemoteMcpConnectionReview } from "../../prototypes/RemoteMcpConnectionReview"; function ProviderChoice({ existing = false, @@ -109,7 +109,8 @@ function ProviderChoice({ ); } const meta = { - title: "Apps/Connections/Provider choice", + id: "apps-connections-provider-choice", + title: "Apps, channels, and extensions/Connection setup/Apps/Connections/Provider choice", component: ProviderChoice, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/ExecutorConnection.stories.tsx b/ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx similarity index 93% rename from ui/storybook/stories/ExecutorConnection.stories.tsx rename to ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx index c4ed3881dc..4390599ef1 100644 --- a/ui/storybook/stories/ExecutorConnection.stories.tsx +++ b/ui/storybook/stories/connection-setup/ExecutorConnection.stories.tsx @@ -1,9 +1,10 @@ import { userEvent, within } from "storybook/test"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { RemoteMcpConnectionReview } from "../prototypes/RemoteMcpConnectionReview"; +import { RemoteMcpConnectionReview } from "../../prototypes/RemoteMcpConnectionReview"; const meta = { - title: "Apps/Connections/Executor", + id: "apps-connections-executor", + title: "Apps, channels, and extensions/Connection setup/Apps/Connections/Executor", component: RemoteMcpConnectionReview, args: { provider: "executor", scenario: "journey" }, parameters: { layout: "fullscreen", docs: { description: { component: "Interactive design review using application views with in-memory provider responses. No real authentication, tool calls, or credential persistence. Representative catalogs are examples; production discovery supplies the actual tools." } } }, diff --git a/ui/storybook/stories/ZapierConnection.stories.tsx b/ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx similarity index 92% rename from ui/storybook/stories/ZapierConnection.stories.tsx rename to ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx index 3199dca11d..bb2d43cb3d 100644 --- a/ui/storybook/stories/ZapierConnection.stories.tsx +++ b/ui/storybook/stories/connection-setup/ZapierConnection.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { RemoteMcpConnectionReview } from "../prototypes/RemoteMcpConnectionReview"; +import { RemoteMcpConnectionReview } from "../../prototypes/RemoteMcpConnectionReview"; const meta = { - title: "Apps/Connections/Zapier", + id: "apps-connections-zapier", + title: "Apps, channels, and extensions/Connection setup/Apps/Connections/Zapier", component: RemoteMcpConnectionReview, args: { provider: "zapier", scenario: "journey" }, parameters: { layout: "fullscreen", docs: { description: { component: "Interactive design review using application views with in-memory provider responses. No real authentication, tool calls, or credential persistence. Representative catalogs are examples; production discovery supplies the actual tools." } } }, diff --git a/ui/storybook/stories/agent-setup-prompt.stories.tsx b/ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx similarity index 97% rename from ui/storybook/stories/agent-setup-prompt.stories.tsx rename to ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx index 8ee95576a4..ac6538d07c 100644 --- a/ui/storybook/stories/agent-setup-prompt.stories.tsx +++ b/ui/storybook/stories/connection-setup/agent-setup-prompt.stories.tsx @@ -10,8 +10,8 @@ import { GitHubSetupPrompt } from "@/pages/apps/chat/GitHubSetupPrompt"; import { McpConfigHelpDialog } from "@/pages/tools/McpConfigHelpDialog"; import { AgentInstructions } from "@/components/routine-triggers/WebhookFields"; import { IssueContinuationHandoff } from "@/components/IssueContinuationHandoff"; -import { webhookAgentInstructions } from "../fixtures/routineTriggerWizard"; -import { storybookContinuationHandoff } from "../fixtures/paperclipData"; +import { webhookAgentInstructions } from "../../fixtures/routineTriggerWizard"; +import { storybookContinuationHandoff } from "../../fixtures/paperclipData"; const slackPrompt = buildSlackSetupPrompt(import.meta.env.VITE_PAPERCLIP_INSTANCE_URL ?? ""); const apiPrompt = `Help me connect my agent to the Paperclip API. @@ -23,7 +23,8 @@ Guide me through creating a dedicated agent API key. Store it securely in my age Configure the base URL and authentication, then verify the connection with a read-only request. Show me what worked and ask before making any changes to my company.`; const meta = { - title: "Components/Agent setup prompt", + id: "components-agent-setup-prompt", + title: "Apps, channels, and extensions/Connection setup/Components/Agent setup prompt", component: AgentSetupPrompt, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/apps-catalog-source-selection.stories.tsx b/ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx similarity index 95% rename from ui/storybook/stories/apps-catalog-source-selection.stories.tsx rename to ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx index a665276d96..243d44d550 100644 --- a/ui/storybook/stories/apps-catalog-source-selection.stories.tsx +++ b/ui/storybook/stories/connection-setup/apps-catalog-source-selection.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { ConnectorCatalogNavigation } from "../prototypes/ConnectorCatalogNavigation"; +import { ConnectorCatalogNavigation } from "../../prototypes/ConnectorCatalogNavigation"; const meta = { - title: "Apps/Catalog source selection", + id: "apps-catalog-source-selection", + title: "Apps, channels, and extensions/Connection setup/Apps/Catalog source selection", component: ConnectorCatalogNavigation, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/apps-connect-discoverability.stories.tsx b/ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx similarity index 97% rename from ui/storybook/stories/apps-connect-discoverability.stories.tsx rename to ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx index 6d8d96e162..a0221b3cb1 100644 --- a/ui/storybook/stories/apps-connect-discoverability.stories.tsx +++ b/ui/storybook/stories/connection-setup/apps-connect-discoverability.stories.tsx @@ -58,7 +58,8 @@ function PasteConfigHost() { } const meta: Meta = { - title: "Apps/Connect discoverability (PAP-11091)", + id: "apps-connect-discoverability-pap-11091", + title: "Apps, channels, and extensions/Connection setup/Apps/Connect discoverability (PAP-11091)", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/apps-connect-name.stories.tsx b/ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx similarity index 95% rename from ui/storybook/stories/apps-connect-name.stories.tsx rename to ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx index c4511fd2a9..534ed375a3 100644 --- a/ui/storybook/stories/apps-connect-name.stories.tsx +++ b/ui/storybook/stories/connection-setup/apps-connect-name.stories.tsx @@ -82,7 +82,8 @@ function KeyStepHost({ customName }: { customName?: string }) { } const meta: Meta = { - title: "Apps/Connect name at create time (PAP-11283)", + id: "apps-connect-name-at-create-time-pap-11283", + title: "Apps, channels, and extensions/Connection setup/Apps/Connect name at create time (PAP-11283)", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/browser-use-settings.stories.tsx b/ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx similarity index 92% rename from ui/storybook/stories/browser-use-settings.stories.tsx rename to ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx index 6f1feba1f7..f8be4abe55 100644 --- a/ui/storybook/stories/browser-use-settings.stories.tsx +++ b/ui/storybook/stories/connection-setup/browser-use-settings.stories.tsx @@ -6,7 +6,7 @@ import type { ToolConnection, } from "@paperclipai/shared"; import { BrowserUseSettingsPanel } from "@/pages/apps/app-detail/BrowserUseSettingsPanel"; -import { BrowserStoryProviders, mockBrowserUse } from "../fixtures/browser-use"; +import { BrowserStoryProviders, mockBrowserUse } from "../../fixtures/browser-use"; const connection = { id: "browser-use-cloud-connection", companyId: "storybook-company", @@ -27,7 +27,8 @@ const grants = { grants: [grant("shared", "organization")], } as ConnectionGrantsResponse; const meta = { - title: "Connections/Browser Use Cloud/Settings", + id: "connections-browser-use-cloud-settings", + title: "Apps, channels, and extensions/Connection setup/Connections/Browser Use Cloud/Settings", component: BrowserUseSettingsPanel, parameters: { layout: "centered", diff --git a/ui/storybook/stories/connection-instructions.stories.tsx b/ui/storybook/stories/connection-setup/connection-instructions.stories.tsx similarity index 97% rename from ui/storybook/stories/connection-instructions.stories.tsx rename to ui/storybook/stories/connection-setup/connection-instructions.stories.tsx index ca63f1d6af..77bb5d0c59 100644 --- a/ui/storybook/stories/connection-instructions.stories.tsx +++ b/ui/storybook/stories/connection-setup/connection-instructions.stories.tsx @@ -13,7 +13,7 @@ import { ConnectionSetupFlow } from "@/features/connections/ConnectionSetupFlow" import { AgentConnectionInstructions } from "@/features/connections/ConnectionInstructions"; import { Button } from "@/components/ui/button"; import { Dialog, DialogContent, DialogDescription, DialogHeader, DialogTitle } from "@/components/ui/dialog"; -import { GUIDANCE_COMPANY, GUIDANCE_CONNECTION, guidanceAgents, installConnectionGuidanceFixtures } from "../fixtures/connectionInstructions"; +import { GUIDANCE_COMPANY, GUIDANCE_CONNECTION, guidanceAgents, installConnectionGuidanceFixtures } from "../../fixtures/connectionInstructions"; const HONCHO = getConnectableAppDefinition("honcho")!.agentInstructions!.text; const NOTION = "Use Notion as the source for our published product decisions. Look up the relevant decision before proposing a change, and link to the page you used. Ask before changing a published decision. If a page is unavailable, say which context is missing and continue with the information you have."; @@ -62,7 +62,8 @@ function ConnectionInstructionsPrototype({ initialView = "connection", provider } const meta = { - title: "Design explorations/Connections/Agent instructions", + id: "design-explorations-connections-agent-instructions", + title: "Apps, channels, and extensions/Connection setup/Design explorations/Connections/Agent instructions", component: ConnectionInstructionsPrototype, args: { providedInstructions: HONCHO }, parameters: { layout: "fullscreen", docs: { description: { component: "Production Layout, ConnectionSetupFlow, AppDetail, identity/access controls, and searchable Actions list with local API fixtures. The production instructions editor saves and reloads through mocked APIs. Baseline stories omit template metadata. No provider calls." } } }, diff --git a/ui/storybook/stories/enterpret-connect-flow.stories.tsx b/ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx similarity index 98% rename from ui/storybook/stories/enterpret-connect-flow.stories.tsx rename to ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx index d051444e9c..b75fa18325 100644 --- a/ui/storybook/stories/enterpret-connect-flow.stories.tsx +++ b/ui/storybook/stories/connection-setup/enterpret-connect-flow.stories.tsx @@ -225,7 +225,8 @@ function MethodCopyHost() { } const meta: Meta = { - title: "Apps/Enterpret connector", + id: "apps-enterpret-connector", + title: "Apps, channels, and extensions/Connection setup/Apps/Enterpret connector", parameters: { layout: "fullscreen", docs: { diff --git a/ui/storybook/stories/fireflies-pr.stories.tsx b/ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx similarity index 98% rename from ui/storybook/stories/fireflies-pr.stories.tsx rename to ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx index 18878d8832..c54e23d0f6 100644 --- a/ui/storybook/stories/fireflies-pr.stories.tsx +++ b/ui/storybook/stories/connection-setup/fireflies-pr.stories.tsx @@ -13,7 +13,7 @@ import { TriggersSection } from "@/components/routine-sections/editable-sections import { RoutineDetailContext, type RoutineDetailContextValue } from "@/components/routine-sections/context"; import { Button } from "@/components/ui/button"; import { useNavigate } from "@/lib/router"; -import { WebhookReview, webhook, baseRoutine } from "../fixtures/routineWebhooks"; +import { WebhookReview, webhook, baseRoutine } from "../../fixtures/routineWebhooks"; const fireflies = CONNECTABLE_APP_DEFINITIONS.find((app) => app.slug === "fireflies")!; const demoSecret = "storybook-only-signing-secret"; @@ -23,7 +23,8 @@ function Frame({ children }: { children: ReactNode }) { return

PR #13890 · Production components with simulated data. No provider requests or real credentials.

{children}
; } const meta = { - title: "PR reviews/Fireflies and app webhooks", + id: "pr-reviews-fireflies-and-app-webhooks", + title: "Apps, channels, and extensions/Connection setup/PR reviews/Fireflies and app webhooks", parameters: { layout: "fullscreen", docs: { description: { component: "Coverage of PR #13890: Fireflies catalog/artwork and shared connection flow, preserved action permissions, generic webhook wizard and saved settings, and both advanced trigger editors. All network mutations are simulated. Use the toolbar to switch theme or viewport. Legacy stories only demonstrate resuming existing configurations; new webhooks use Another app or script." } } }, afterEach: ({ id }) => { document.body.dataset.firefliesStoryReady = id; }, beforeEach: () => { diff --git a/ui/storybook/stories/in-feed-connections.stories.tsx b/ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx similarity index 99% rename from ui/storybook/stories/in-feed-connections.stories.tsx rename to ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx index dbcff61538..ecd1ad3f3f 100644 --- a/ui/storybook/stories/in-feed-connections.stories.tsx +++ b/ui/storybook/stories/connection-setup/in-feed-connections.stories.tsx @@ -9,7 +9,7 @@ import { ConnectionSetupFlow, ConnectionSetupCompletionScreen, AccessStep, OAuth import { Dialog, DialogContent, DialogTitle } from "@/components/ui/dialog"; import { TaskChatComposer } from "@/components/task-chat/TaskChatComposer"; import { TaskChatInteractionCard } from "@/components/task-chat/TaskChatInteractionCard"; -import { storybookAgentMap, storybookAgents } from "../fixtures/paperclipData"; +import { storybookAgentMap, storybookAgents } from "../../fixtures/paperclipData"; import { useNavigate } from "@/lib/router"; import { pendingConnectionIntentInteraction as pending, @@ -37,7 +37,8 @@ const connection = { type Scenario = { email?: boolean; access?: boolean; ai?: boolean; missingAiAccount?: "anthropic" | "openai"; ownerOnly?: boolean; checking?: boolean; count?: number; loading?: boolean; loadError?: boolean; completeError?: boolean; submitting?: boolean; denied?: boolean }; const meta: Meta = { - title: "Connections/In-task connections", + id: "connections-in-task-connections", + title: "Apps, channels, and extensions/Connection setup/Connections/In-task connections", parameters: { layout: "padded" }, afterEach: ({ id }) => { document.body.dataset.inFeedStoryReady = id; }, beforeEach: ({ parameters }) => { diff --git a/ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx b/ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx similarity index 87% rename from ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx rename to ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx index 110597cc6a..3f42764f63 100644 --- a/ui/storybook/stories/managed-cloud-oauth-handoff.stories.tsx +++ b/ui/storybook/stories/connection-setup/managed-cloud-oauth-handoff.stories.tsx @@ -2,7 +2,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { ManagedOAuthHandoffState } from "@/pages/apps/PaperclipCloudOAuthHandoff"; const meta: Meta = { - title: "Apps/Managed Cloud OAuth handoff", + id: "apps-managed-cloud-oauth-handoff", + title: "Apps, channels, and extensions/Connection setup/Apps/Managed Cloud OAuth handoff", component: ManagedOAuthHandoffState, parameters: { layout: "fullscreen" }, args: { diff --git a/ui/storybook/stories/memory-connectors.stories.tsx b/ui/storybook/stories/connection-setup/memory-connectors.stories.tsx similarity index 98% rename from ui/storybook/stories/memory-connectors.stories.tsx rename to ui/storybook/stories/connection-setup/memory-connectors.stories.tsx index c5eae9e301..8585a9711c 100644 --- a/ui/storybook/stories/memory-connectors.stories.tsx +++ b/ui/storybook/stories/connection-setup/memory-connectors.stories.tsx @@ -91,7 +91,8 @@ function MemoryReview({ provider = "mem0", scenario = "catalog" }: { provider?: ; } -const meta = { title: "Apps/Connections/Memory", component: MemoryReview, parameters: { layout: "fullscreen" } } satisfies Meta; +const meta = { id: "apps-connections-memory", + title: "Apps, channels, and extensions/Connection setup/Apps/Connections/Memory", component: MemoryReview, parameters: { layout: "fullscreen" } } satisfies Meta; export default meta; type Story = StoryObj; export const CatalogAndSetup: Story = { args: { scenario: "catalog" } }; diff --git a/ui/storybook/stories/notion-connect-flow.stories.tsx b/ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx similarity index 98% rename from ui/storybook/stories/notion-connect-flow.stories.tsx rename to ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx index 0ba848c88a..458c2a6c49 100644 --- a/ui/storybook/stories/notion-connect-flow.stories.tsx +++ b/ui/storybook/stories/connection-setup/notion-connect-flow.stories.tsx @@ -339,7 +339,8 @@ function VercelConnectProvenanceHost() { } const meta: Meta = { - title: "Apps/Notion MCP connect flow (PAP-16650)", + id: "apps-notion-mcp-connect-flow-pap-16650", + title: "Apps, channels, and extensions/Connection setup/Apps/Notion MCP connect flow (PAP-16650)", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/personal-connection-identity.stories.tsx b/ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx similarity index 98% rename from ui/storybook/stories/personal-connection-identity.stories.tsx rename to ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx index a2f771e637..71619ea4e0 100644 --- a/ui/storybook/stories/personal-connection-identity.stories.tsx +++ b/ui/storybook/stories/connection-setup/personal-connection-identity.stories.tsx @@ -152,7 +152,8 @@ function IdentitiesHarness({ } const meta: Meta = { - title: "Reviews/PAP-17835 Personal connection identity", + id: "reviews-pap-17835-personal-connection-identity", + title: "Apps, channels, and extensions/Connection setup/Reviews/PAP-17835 Personal connection identity", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/ux-labs.stories.tsx b/ui/storybook/stories/developer-labs/ux-labs.stories.tsx similarity index 94% rename from ui/storybook/stories/ux-labs.stories.tsx rename to ui/storybook/stories/developer-labs/ux-labs.stories.tsx index 1a6d0e85af..f72ae0db93 100644 --- a/ui/storybook/stories/ux-labs.stories.tsx +++ b/ui/storybook/stories/developer-labs/ux-labs.stories.tsx @@ -13,7 +13,8 @@ function StoryFrame({ children }: { children: React.ReactNode }) { } const meta = { - title: "UX Labs/Converted Test Pages", + id: "ux-labs-converted-test-pages", + title: "Contributor surfaces/Developer previews and diagnostic labs/UX Labs/Converted Test Pages", parameters: { docs: { description: { diff --git a/ui/storybook/stories/artifact-cards/commit.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx similarity index 86% rename from ui/storybook/stories/artifact-cards/commit.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx index 1927ac77f8..91c6e0cda6 100644 --- a/ui/storybook/stories/artifact-cards/commit.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/commit.stories.tsx @@ -6,10 +6,11 @@ import { identityControls, textData, diffControls, -} from "./storyConfig"; +} from "../../../support/artifact-cards/storyConfig"; const meta = { - title: "Explorations/Artifact cards/Commit", + id: "explorations-artifact-cards-commit", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Commit", component: CommitCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-cards/data.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx similarity index 85% rename from ui/storybook/stories/artifact-cards/data.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx index b203310bfe..38842f75c1 100644 --- a/ui/storybook/stories/artifact-cards/data.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/data.stories.tsx @@ -6,10 +6,11 @@ import { identityControls, textData, objectData, -} from "./storyConfig"; +} from "../../../support/artifact-cards/storyConfig"; const meta = { - title: "Explorations/Artifact cards/Data", + id: "explorations-artifact-cards-data", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Data", component: DataCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-cards/document.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx similarity index 85% rename from ui/storybook/stories/artifact-cards/document.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx index 00fac027ea..968afbd5e5 100644 --- a/ui/storybook/stories/artifact-cards/document.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/document.stories.tsx @@ -6,10 +6,11 @@ import { identityControls, textData, numberData, -} from "./storyConfig"; +} from "../../../support/artifact-cards/storyConfig"; const meta = { - title: "Explorations/Artifact cards/Document", + id: "explorations-artifact-cards-document", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Document", component: DocumentCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-cards/file.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx similarity index 87% rename from ui/storybook/stories/artifact-cards/file.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx index bf9df2f760..5183567678 100644 --- a/ui/storybook/stories/artifact-cards/file.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/file.stories.tsx @@ -6,10 +6,11 @@ import { identityControls, textData, objectData, -} from "./storyConfig"; +} from "../../../support/artifact-cards/storyConfig"; const meta = { - title: "Explorations/Artifact cards/File", + id: "explorations-artifact-cards-file", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/File", component: FileCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-cards/image.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx similarity index 80% rename from ui/storybook/stories/artifact-cards/image.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx index e6f7c0b258..33efe33b3c 100644 --- a/ui/storybook/stories/artifact-cards/image.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/image.stories.tsx @@ -6,11 +6,12 @@ import { identityControls, textData, numberData, -} from "./storyConfig"; -import posterUrl from "../../fixtures/artifact-media/paper-trail.png?url"; +} from "../../../support/artifact-cards/storyConfig"; +import posterUrl from "../../../fixtures/artifact-media/paper-trail.png?url"; const meta = { - title: "Explorations/Artifact cards/Image", + id: "explorations-artifact-cards-image", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Image", component: ImageCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-cards/link-preview.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx similarity index 82% rename from ui/storybook/stories/artifact-cards/link-preview.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx index 7f230a559c..baaa04c499 100644 --- a/ui/storybook/stories/artifact-cards/link-preview.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/link-preview.stories.tsx @@ -5,10 +5,11 @@ import { parameters, identityControls, textData, -} from "./storyConfig"; +} from "../../../support/artifact-cards/storyConfig"; const meta = { - title: "Explorations/Artifact cards/Link preview", + id: "explorations-artifact-cards-link-preview", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Link preview", component: LinkPreviewCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-cards/pull-request.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx similarity index 90% rename from ui/storybook/stories/artifact-cards/pull-request.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx index e7cda58f73..f992cfc6f0 100644 --- a/ui/storybook/stories/artifact-cards/pull-request.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/pull-request.stories.tsx @@ -7,10 +7,11 @@ import { textData, numberData, diffControls, -} from "./storyConfig"; +} from "../../../support/artifact-cards/storyConfig"; const meta = { - title: "Explorations/Artifact cards/Pull request", + id: "explorations-artifact-cards-pull-request", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Pull request", component: PullRequestCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-cards/video.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx similarity index 72% rename from ui/storybook/stories/artifact-cards/video.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx index 8a1f9d3cf1..902e01eb14 100644 --- a/ui/storybook/stories/artifact-cards/video.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-cards/video.stories.tsx @@ -5,12 +5,13 @@ import { parameters, identityControls, textData, -} from "./storyConfig"; -import posterUrl from "../../fixtures/artifact-media/paper-trail.png?url"; -import videoUrl from "../../fixtures/artifact-media/paper-trail.mp4?url"; +} from "../../../support/artifact-cards/storyConfig"; +import posterUrl from "../../../fixtures/artifact-media/paper-trail.png?url"; +import videoUrl from "../../../fixtures/artifact-media/paper-trail.mp4?url"; const meta = { - title: "Explorations/Artifact cards/Video", + id: "explorations-artifact-cards-video", + title: "Tasks and conversations/Documents, attachments, and work products/Explorations/Artifact cards/Video", component: VideoCard, decorators, parameters, diff --git a/ui/storybook/stories/artifact-upload/01-components.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx similarity index 86% rename from ui/storybook/stories/artifact-upload/01-components.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx index 2e33e82d78..7e6490d781 100644 --- a/ui/storybook/stories/artifact-upload/01-components.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-upload/01-components.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { UploadPreview } from "./UploadPreview"; -import { showFileDrag } from "./fixtures"; +import { UploadPreview } from "../../../support/artifact-upload/UploadPreview"; +import { showFileDrag } from "../../../support/artifact-upload/fixtures"; const meta = { - title: "Artifact upload/01 Artifacts pane", component: UploadPreview, + id: "artifact-upload-01-artifacts-pane", + title: "Tasks and conversations/Documents, attachments, and work products/Artifact upload/01 Artifacts pane", component: UploadPreview, parameters: { layout: "fullscreen", docs: { description: { component: "The upload icon sits in the tab header without text or a background. The entire Artifacts panel, including its header, padding, existing cards and empty space, accepts files. Drag-over stories enter through the actual header drag handler and highlight the complete visible panel, including after scrolling. Use the upload icon for one or several files. Markdown becomes a document; other files use artifact cards. Uploads are simulated in memory and reset when the story reloads. The Uploading story holds its example pending; Retry completes the sample CSV upload. No task or execution state changes." }, story: { inline: false } } }, argTypes: { state: { control: "select", options: ["empty", "populated", "uploading", "error", "long"] } }, render: (args, context) =>
, diff --git a/ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx b/ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx similarity index 92% rename from ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx index 6068e2d184..6dd1cfa023 100644 --- a/ui/storybook/stories/artifact-upload/02-task-journey.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifact-upload/02-task-journey.stories.tsx @@ -10,8 +10,8 @@ import { ArrowLeft, Box, X } from "lucide-react"; import { PluginLauncherProvider } from "@/plugins/launchers"; import { useBreadcrumbs } from "@/context/BreadcrumbContext"; import { useSidebar } from "@/context/SidebarContext"; -import { UploadPreview } from "./UploadPreview"; -import { issue, showFileDrag, type PreviewState } from "./fixtures"; +import { UploadPreview } from "../../../support/artifact-upload/UploadPreview"; +import { issue, showFileDrag, type PreviewState } from "../../../support/artifact-upload/fixtures"; function TaskPage({ state = "empty", panelOpenInitially = false }: { state?: PreviewState; panelOpenInitially?: boolean }) { const { setBreadcrumbs } = useBreadcrumbs(); @@ -45,7 +45,8 @@ function Journey(props: { state?: PreviewState; panelOpenInitially?: boolean }) } const meta = { - title: "Artifact upload/02 Paused task journey", component: Journey, + id: "artifact-upload-02-paused-task-journey", + title: "Tasks and conversations/Documents, attachments, and work products/Artifact upload/02 Paused task journey", component: Journey, parameters: { layout: "fullscreen", initialEntries: ["/PAP/issues/PAP-214"], docs: { description: { component: "Start on the paused, unassigned PAP-214 placeholder in the production app shell. Upload or drop files in Artifacts, open a document in another tab, then return to Artifacts. On mobile, open Artifacts from the task header. Uses production chat bubbles, paused takeover, panel frame, desktop/mobile tabs, artifact list and document viewer. The story composes these components for review; upload persistence is simulated. No live issue is modified or resumed." }, story: { inline: false } } }, render: (args, context) => , } satisfies Meta; diff --git a/ui/storybook/stories/artifacts.stories.tsx b/ui/storybook/stories/documents-artifacts/artifacts.stories.tsx similarity index 99% rename from ui/storybook/stories/artifacts.stories.tsx rename to ui/storybook/stories/documents-artifacts/artifacts.stories.tsx index 10a8723c52..ea0cbb85d8 100644 --- a/ui/storybook/stories/artifacts.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/artifacts.stories.tsx @@ -475,7 +475,8 @@ const SELECTED_GROUP_ARTIFACTS: CompanyArtifact[] = [ ]; const meta: Meta = { - title: "Pages/Artifacts", + id: "pages-artifacts", + title: "Tasks and conversations/Documents, attachments, and work products/Pages/Artifacts", }; export default meta; diff --git a/ui/storybook/stories/csv-preview.stories.tsx b/ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx similarity index 95% rename from ui/storybook/stories/csv-preview.stories.tsx rename to ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx index 40dc7e2b30..2c275cef74 100644 --- a/ui/storybook/stories/csv-preview.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/csv-preview.stories.tsx @@ -6,7 +6,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { TextAttachmentPreview } from "@/components/task-side-panel/TaskAttachmentPanel"; const meta: Meta = { - title: "Components/CSV File Tab", + id: "components-csv-file-tab", + title: "Tasks and conversations/Documents, attachments, and work products/Components/CSV File Tab", component: TextAttachmentPreview, parameters: { layout: "fullscreen" }, decorators: [(Story) =>
], diff --git a/ui/storybook/stories/document-annotations.stories.tsx b/ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx similarity index 99% rename from ui/storybook/stories/document-annotations.stories.tsx rename to ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx index 63a18f0c6e..deae38c99b 100644 --- a/ui/storybook/stories/document-annotations.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/document-annotations.stories.tsx @@ -504,7 +504,8 @@ function StatesShowcase({ focusedThreadId = "open-1" }: { focusedThreadId?: stri } const meta = { - title: "Product/Documents/Annotations", + id: "product-documents-annotations", + title: "Tasks and conversations/Documents, attachments, and work products/Product/Documents/Annotations", component: StatesShowcase, parameters: { docs: { diff --git a/ui/storybook/stories/document-comments.stories.tsx b/ui/storybook/stories/documents-artifacts/document-comments.stories.tsx similarity index 97% rename from ui/storybook/stories/document-comments.stories.tsx rename to ui/storybook/stories/documents-artifacts/document-comments.stories.tsx index 0e03550df2..befef1c6b1 100644 --- a/ui/storybook/stories/document-comments.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/document-comments.stories.tsx @@ -169,7 +169,8 @@ function DocumentCommentsMatrix() { } const meta = { - title: "Product/Document Comments", + id: "product-document-comments", + title: "Tasks and conversations/Documents, attachments, and work products/Product/Document Comments", component: DocumentCommentsMatrix, parameters: { docs: { diff --git a/ui/storybook/stories/file-viewer.stories.tsx b/ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx similarity index 98% rename from ui/storybook/stories/file-viewer.stories.tsx rename to ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx index aa3ddaa437..cbed714bd0 100644 --- a/ui/storybook/stories/file-viewer.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/file-viewer.stories.tsx @@ -212,7 +212,8 @@ function buildFetchStub( } const meta: Meta = { - title: "Components/File Viewer Sheet", + id: "components-file-viewer-sheet", + title: "Tasks and conversations/Documents, attachments, and work products/Components/File Viewer Sheet", component: FileViewerSheet, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/html-artifacts/01-preview.stories.tsx b/ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx similarity index 87% rename from ui/storybook/stories/html-artifacts/01-preview.stories.tsx rename to ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx index 953713b37a..9059baf18c 100644 --- a/ui/storybook/stories/html-artifacts/01-preview.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/html-artifacts/01-preview.stories.tsx @@ -1,6 +1,6 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { TextAttachmentPreview } from "@/components/task-side-panel/TaskAttachmentPanel"; -import { reportHtml, securityHtml } from "./fixtures"; +import { reportHtml, securityHtml } from "../../../support/html-artifacts/fixtures"; function Preview({ html = reportHtml, title = "repository-usage.html", width = 800 }: { html?: string; title?: string; width?: number }) { return
@@ -11,7 +11,8 @@ function Preview({ html = reportHtml, title = "repository-usage.html", width = 8 } const meta = { - title: "HTML artifacts/01 Preview", + id: "html-artifacts-01-preview", + title: "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/01 Preview", component: Preview, args: { html: reportHtml, title: "repository-usage.html", width: 800 }, parameters: { layout: "fullscreen", docs: { description: { component: "Production attachment viewer. Inline CSS and JavaScript run in an opaque-origin sandbox. Remote dependencies and API requests are blocked. The original file is available through Download or Raw." }, story: { inline: false } } }, diff --git a/ui/storybook/stories/html-artifacts/02-workspace.stories.tsx b/ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx similarity index 84% rename from ui/storybook/stories/html-artifacts/02-workspace.stories.tsx rename to ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx index eedb1f17d0..71e58e8b14 100644 --- a/ui/storybook/stories/html-artifacts/02-workspace.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/html-artifacts/02-workspace.stories.tsx @@ -6,7 +6,7 @@ import { TaskWorkspaceFilePanel } from "@/components/task-side-panel/TaskWorkspa import { FileViewerSheet } from "@/components/FileViewerSheet"; import { FileViewerProvider } from "@/context/FileViewerContext"; import { queryKeys } from "@/lib/queryKeys"; -import { reportHtml } from "./fixtures"; +import { reportHtml } from "../../../support/html-artifacts/fixtures"; const issueId = "html-workspace-story"; const state = { path: "reports/repository-usage.html", workspace: "project" as const, workspaceId: null, projectId: null, line: null, column: null }; @@ -32,7 +32,8 @@ function Workspace({ sheet = false }: { sheet?: boolean }) {
; } -const meta = { title: "HTML artifacts/02 Workspace", component: Workspace, render: (args, context) => , parameters: { layout: "fullscreen", docs: { story: { inline: false } } } } satisfies Meta; +const meta = { id: "html-artifacts-02-workspace", + title: "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/02 Workspace", component: Workspace, render: (args, context) => , parameters: { layout: "fullscreen", docs: { story: { inline: false } } } } satisfies Meta; export default meta; type Story = StoryObj; export const TaskPanel: Story = {}; diff --git a/ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx b/ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx similarity index 93% rename from ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx rename to ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx index 80458df3e0..6b9df5170f 100644 --- a/ui/storybook/stories/html-artifacts/03-task-journey.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/html-artifacts/03-task-journey.stories.tsx @@ -10,9 +10,9 @@ import { IssueArtifactFile } from "@/components/artifacts/IssueArtifactCard"; import { TextAttachmentContext } from "@/context/TextAttachmentContext"; import { PluginLauncherProvider } from "@/plugins/launchers"; import { queryKeys } from "@/lib/queryKeys"; -import { createIssue, storybookAgents } from "../../fixtures/paperclipData"; -import { reportHtml } from "./fixtures"; -import reportDownload from "./report.html?url"; +import { createIssue, storybookAgents } from "../../../fixtures/paperclipData"; +import { reportHtml } from "../../../support/html-artifacts/fixtures"; +import reportDownload from "../../../support/html-artifacts/report.html?url"; const issue = createIssue({ id: "html-artifact-journey", identifier: "DEMO-101", title: "Find popular repositories that use Paperclip a lot", status: "done", completedAt: new Date("2026-10-07T12:54:00Z"), currentExecutionWorkspace: null, executionWorkspaceId: null }); const attachment: IssueAttachment = { @@ -63,7 +63,8 @@ function Journey(props: { openInitially?: boolean }) { ; } const meta = { - title: "HTML artifacts/03 Task journey", component: Journey, + id: "html-artifacts-03-task-journey", + title: "Tasks and conversations/Documents, attachments, and work products/HTML artifacts/03 Task journey", component: Journey, parameters: { layout: "fullscreen", initialEntries: ["/PAP/issues/html-artifact-journey"], docs: { description: { component: "Open the HTML artifact from the task's report card or Artifacts tab, filter the report, then switch to Raw beside Download. Uses the production app shell, artifact card, task panel and HTML renderer with simulated report data." }, story: { inline: false } } }, beforeEach: () => { const originalFetch = window.fetch; diff --git a/ui/storybook/stories/rich-work-product-cards.stories.tsx b/ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx similarity index 96% rename from ui/storybook/stories/rich-work-product-cards.stories.tsx rename to ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx index a85c39c499..5127de63ab 100644 --- a/ui/storybook/stories/rich-work-product-cards.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/rich-work-product-cards.stories.tsx @@ -1,12 +1,13 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import type { IssueAttachment, IssueWorkProduct } from "@paperclipai/shared"; import { expect } from "storybook/test"; -import { RichWorkProductCard } from "../../src/components/task-chat/RichWorkProductCard"; -import { TaskChatBubble } from "../../src/components/task-chat/TaskChatBubble"; -import type { TaskChatMessageItem } from "../../src/components/task-chat/task-chat-model"; +import { RichWorkProductCard } from "../../../src/components/task-chat/RichWorkProductCard"; +import { TaskChatBubble } from "../../../src/components/task-chat/TaskChatBubble"; +import type { TaskChatMessageItem } from "../../../src/components/task-chat/task-chat-model"; const meta = { - title: "Task Chat/Rich Work Product Cards", + id: "task-chat-rich-work-product-cards", + title: "Tasks and conversations/Documents, attachments, and work products/Task Chat/Rich Work Product Cards", component: RichWorkProductCard, parameters: { layout: "centered" }, } satisfies Meta; diff --git a/ui/storybook/stories/task-artifact-gallery.stories.tsx b/ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx similarity index 92% rename from ui/storybook/stories/task-artifact-gallery.stories.tsx rename to ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx index 79a021486e..f2a2cbcee7 100644 --- a/ui/storybook/stories/task-artifact-gallery.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/task-artifact-gallery.stories.tsx @@ -10,14 +10,14 @@ import { queryKeys } from "@/lib/queryKeys"; import { isImageLikeOutput, isVideoLikeOutput } from "@/lib/issue-output"; import { TaskChatBubble } from "@/components/task-chat/TaskChatBubble"; import { workProductHref } from "@/lib/issue-artifacts"; -import { createIssue, storybookAgents } from "../fixtures/paperclipData"; -import manila from "../fixtures/artifact-media/manila-ledger.mp4?url"; -import night from "../fixtures/artifact-media/night-pills.mp4?url"; -import tickets from "../fixtures/artifact-media/ticket-board.mp4?url"; -import type from "../fixtures/artifact-media/big-type.mp4?url"; -import trail from "../fixtures/artifact-media/paper-trail.mp4?url"; -import manilaImage from "../fixtures/artifact-media/manila-ledger.png?url"; -import nightImage from "../fixtures/artifact-media/night-pills.png?url"; +import { createIssue, storybookAgents } from "../../fixtures/paperclipData"; +import manila from "../../fixtures/artifact-media/manila-ledger.mp4?url"; +import night from "../../fixtures/artifact-media/night-pills.mp4?url"; +import tickets from "../../fixtures/artifact-media/ticket-board.mp4?url"; +import type from "../../fixtures/artifact-media/big-type.mp4?url"; +import trail from "../../fixtures/artifact-media/paper-trail.mp4?url"; +import manilaImage from "../../fixtures/artifact-media/manila-ledger.png?url"; +import nightImage from "../../fixtures/artifact-media/night-pills.png?url"; const issue = createIssue({ id: "artifact-gallery-story", identifier: "DEMO-101", title: "Explore Paperclip Ships styles", status: "done" }); const date = new Date("2026-09-22T18:03:00Z"); @@ -93,7 +93,8 @@ function GalleryStory({ scenario = "videos", width = 480 }: { scenario?: Scenari ); } const meta = { - title: "Tasks/Artifact Gallery", component: GalleryStory, parameters: { layout: "fullscreen" }, + id: "tasks-artifact-gallery", + title: "Tasks and conversations/Documents, attachments, and work products/Tasks/Artifact Gallery", component: GalleryStory, parameters: { layout: "fullscreen" }, args: { scenario: "videos", width: 480 }, beforeEach: ({ args }) => { const originalFetch = window.fetch; diff --git a/ui/storybook/stories/task-text-files.stories.tsx b/ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx similarity index 91% rename from ui/storybook/stories/task-text-files.stories.tsx rename to ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx index e1db636b86..7e0c73ec66 100644 --- a/ui/storybook/stories/task-text-files.stories.tsx +++ b/ui/storybook/stories/documents-artifacts/task-text-files.stories.tsx @@ -4,7 +4,7 @@ import { QueryClient, QueryClientProvider } from "@tanstack/react-query"; import type { IssueAttachment } from "@paperclipai/shared"; import { TaskSidePanel } from "@/components/task-side-panel/TaskSidePanel"; import { queryKeys } from "@/lib/queryKeys"; -import { createIssue } from "../fixtures/paperclipData"; +import { createIssue } from "../../fixtures/paperclipData"; const markdown = "# Account review charter\n\nInvestigate whether new and active accounts succeeded.\n\n## Rules\n\n- Read customer data only.\n- Keep private information out of reports.\n- Report failures with evidence.\n\n```text\nReview → Evidence → Report\n```"; const plain = "Daily review summary\n\nAccounts reviewed: 20\nCompleted successfully: 18\nNeeds investigation: 2\n\n"; @@ -40,7 +40,8 @@ function TextFilesStory({ initial = "list", width = 640 }: { initial?: "list" | ; } -const meta = { title: "Tasks/Text file tabs", component: TextFilesStory, parameters: { layout: "fullscreen" }, render: (args, context) => } satisfies Meta; +const meta = { id: "tasks-text-file-tabs", + title: "Tasks and conversations/Documents, attachments, and work products/Tasks/Text file tabs", component: TextFilesStory, parameters: { layout: "fullscreen" }, render: (args, context) => } satisfies Meta; export default meta; type Story = StoryObj; export const OpenFromArtifacts: Story = {}; diff --git a/ui/storybook/stories/forms-editors.stories.tsx b/ui/storybook/stories/foundations/forms-editors.stories.tsx similarity index 99% rename from ui/storybook/stories/forms-editors.stories.tsx rename to ui/storybook/stories/foundations/forms-editors.stories.tsx index 7f1a723acd..e418820fd1 100644 --- a/ui/storybook/stories/forms-editors.stories.tsx +++ b/ui/storybook/stories/foundations/forms-editors.stories.tsx @@ -20,7 +20,7 @@ import { ScheduleEditor, describeSchedule } from "@/components/ScheduleEditor"; import { Badge } from "@/components/ui/badge"; import { Button } from "@/components/ui/button"; import { buildExecutionPolicy } from "@/lib/issue-execution-policy"; -import { createIssue, storybookAgents } from "../fixtures/paperclipData"; +import { createIssue, storybookAgents } from "../../fixtures/paperclipData"; function Section({ eyebrow, @@ -712,7 +712,8 @@ function RoutineRunDialogStory() { } const meta = { - title: "Components/Forms & Editors", + id: "components-forms-editors", + title: "Foundations/Components/Forms & Editors", parameters: { docs: { description: { diff --git a/ui/storybook/stories/foundations.stories.tsx b/ui/storybook/stories/foundations/foundations.stories.tsx similarity index 99% rename from ui/storybook/stories/foundations.stories.tsx rename to ui/storybook/stories/foundations/foundations.stories.tsx index 94c1a6874e..86d1c6eb81 100644 --- a/ui/storybook/stories/foundations.stories.tsx +++ b/ui/storybook/stories/foundations/foundations.stories.tsx @@ -281,6 +281,7 @@ function FoundationsMatrix() { } const meta = { + id: "foundations-primitive-matrix", title: "Foundations/Primitive Matrix", component: FoundationsMatrix, parameters: { diff --git a/ui/storybook/stories/primitives-coverage.stories.tsx b/ui/storybook/stories/foundations/primitives-coverage.stories.tsx similarity index 99% rename from ui/storybook/stories/primitives-coverage.stories.tsx rename to ui/storybook/stories/foundations/primitives-coverage.stories.tsx index 164f97f936..98d99b099a 100644 --- a/ui/storybook/stories/primitives-coverage.stories.tsx +++ b/ui/storybook/stories/foundations/primitives-coverage.stories.tsx @@ -69,6 +69,7 @@ import { Skeleton } from "@/components/ui/skeleton"; * static, deterministic state so the visual snapshot suite baselines it. */ const meta = { + id: "foundations-primitive-coverage", title: "Foundations/Primitive Coverage", parameters: { docs: { diff --git a/ui/storybook/stories/status-language.stories.tsx b/ui/storybook/stories/foundations/status-language.stories.tsx similarity index 99% rename from ui/storybook/stories/status-language.stories.tsx rename to ui/storybook/stories/foundations/status-language.stories.tsx index b39ab4b99c..82d356b9fb 100644 --- a/ui/storybook/stories/status-language.stories.tsx +++ b/ui/storybook/stories/foundations/status-language.stories.tsx @@ -17,7 +17,7 @@ import { QuotaBar } from "@/components/QuotaBar"; import { StatusBadge } from "@/components/StatusBadge"; import { StatusIcon } from "@/components/StatusIcon"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; -import { createIssue } from "../fixtures/paperclipData"; +import { createIssue } from "../../fixtures/paperclipData"; function Section({ eyebrow, @@ -589,6 +589,7 @@ function StatusLanguage() { } const meta = { + id: "foundations-status-language", title: "Foundations/Status Language", component: StatusLanguage, parameters: { diff --git a/ui/storybook/stories/access-profiles.stories.tsx b/ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx similarity index 99% rename from ui/storybook/stories/access-profiles.stories.tsx rename to ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx index 4ad365bdd6..c236a5bfae 100644 --- a/ui/storybook/stories/access-profiles.stories.tsx +++ b/ui/storybook/stories/gateways-profiles/access-profiles.stories.tsx @@ -474,7 +474,8 @@ function SeededAgentTools() { } const meta: Meta = { - title: "Tools/Access profiles", + id: "tools-access-profiles", + title: "Apps, channels, and extensions/Tool gateways and access profiles/Tools/Access profiles", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/gateways-tab.stories.tsx b/ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx similarity index 98% rename from ui/storybook/stories/gateways-tab.stories.tsx rename to ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx index 1a24d272db..1eac81d5aa 100644 --- a/ui/storybook/stories/gateways-tab.stories.tsx +++ b/ui/storybook/stories/gateways-profiles/gateways-tab.stories.tsx @@ -242,7 +242,8 @@ function GatewaysHost({ gateways }: { gateways: ToolMcpGatewayWithTokens[] }) { } const meta: Meta = { - title: "Tools/Gateways (PAP-11182)", + id: "tools-gateways-pap-11182", + title: "Apps, channels, and extensions/Tool gateways and access profiles/Tools/Gateways (PAP-11182)", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/public-mcp-connections.stories.tsx b/ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx similarity index 90% rename from ui/storybook/stories/public-mcp-connections.stories.tsx rename to ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx index fd6623e759..0f45100710 100644 --- a/ui/storybook/stories/public-mcp-connections.stories.tsx +++ b/ui/storybook/stories/gateways-profiles/public-mcp-connections.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, waitFor, within } from "storybook/test"; import { AssistantConnectionsPage } from "@/pages/McpConnect"; -import { installPublicMcpFixture } from "../fixtures/publicMcp"; +import { installPublicMcpFixture } from "../../fixtures/publicMcp"; const meta = { - title: "Assistant connections/Manage connections", component: AssistantConnectionsPage, + id: "assistant-connections-manage-connections", + title: "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Manage connections", component: AssistantConnectionsPage, parameters: { layout: "padded", initialEntries: ["/assistant-connections"], docs: { description: { component: "Production /assistant-connections page. Revocation changes only the in-memory story fixture." } } }, beforeEach: ({ parameters }) => installPublicMcpFixture(parameters.fixture), } satisfies Meta; diff --git a/ui/storybook/stories/public-mcp-consent.stories.tsx b/ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx similarity index 98% rename from ui/storybook/stories/public-mcp-consent.stories.tsx rename to ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx index 5a305fbfac..543046702a 100644 --- a/ui/storybook/stories/public-mcp-consent.stories.tsx +++ b/ui/storybook/stories/gateways-profiles/public-mcp-consent.stories.tsx @@ -2,10 +2,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; import { Route, Routes } from "@/lib/router"; import { McpConnectPage, AssistantConnectionsPage } from "@/pages/McpConnect"; -import { consentSubmission, installPublicMcpFixture, request } from "../fixtures/publicMcp"; +import { consentSubmission, installPublicMcpFixture, request } from "../../fixtures/publicMcp"; const meta = { - title: "Assistant connections/Consent", + id: "assistant-connections-consent", + title: "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Consent", component: McpConnectPage, parameters: { layout: "padded", initialEntries: [`/mcp-connect/${request.id}`], docs: { description: { component: "Production consent page at /mcp-connect/:id. API fixtures are isolated. Successful consent stays in this preview; no OAuth credentials are issued." } } }, beforeEach: ({ parameters }) => installPublicMcpFixture(parameters.fixture), diff --git a/ui/storybook/stories/public-mcp-device.stories.tsx b/ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx similarity index 88% rename from ui/storybook/stories/public-mcp-device.stories.tsx rename to ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx index 93b92b0891..758bf5e7d3 100644 --- a/ui/storybook/stories/public-mcp-device.stories.tsx +++ b/ui/storybook/stories/gateways-profiles/public-mcp-device.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; import { McpDevicePage } from "@/pages/McpConnect"; -import { installPublicMcpFixture } from "../fixtures/publicMcp"; +import { installPublicMcpFixture } from "../../fixtures/publicMcp"; const meta = { - title: "Assistant connections/Device authorization", component: McpDevicePage, + id: "assistant-connections-device-authorization", + title: "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Device authorization", component: McpDevicePage, parameters: { layout: "padded", fixture: {}, docs: { description: { component: "Production device consent. The assistant's private device code stays in its credential client; only the human verification code appears here. These isolated fixtures issue no credentials." } } }, args: { initialCode: "BCDF-GHJK" }, beforeEach: ({ parameters }) => installPublicMcpFixture(parameters.fixture), diff --git a/ui/storybook/stories/public-mcp-journey.stories.tsx b/ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx similarity index 94% rename from ui/storybook/stories/public-mcp-journey.stories.tsx rename to ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx index a4c43830ff..9b4a481e1a 100644 --- a/ui/storybook/stories/public-mcp-journey.stories.tsx +++ b/ui/storybook/stories/gateways-profiles/public-mcp-journey.stories.tsx @@ -6,8 +6,8 @@ import { Link, Route, Routes } from "@/lib/router"; import { Browse } from "@/pages/apps/Browse"; import { AssistantConnection } from "@/pages/apps/AssistantConnection"; import { InstanceExperimentalSettings } from "@/pages/InstanceExperimentalSettings"; -import { PublicMcpPresenter } from "./public-mcp-presenter"; -import { connectedUser, installPublicMcpFixture } from "../fixtures/publicMcp"; +import { PublicMcpPresenter } from "../../support/public-mcp-presenter"; +import { connectedUser, installPublicMcpFixture } from "../../fixtures/publicMcp"; function ConnectionJourney({ assistant = "opencode" }: { assistant?: "codex" | "claude" | "opencode" | "other" }) { return @@ -21,7 +21,8 @@ function ConnectionJourney({ assistant = "opencode" }: { assistant?: "codex" | " } const meta = { - title: "Assistant connections/Start here", + id: "assistant-connections-start-here", + title: "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Start here", component: ConnectionJourney, parameters: { layout: "fullscreen", initialEntries: ["/PAP/apps"], fixture: { enabled: false, empty: true }, diff --git a/ui/storybook/stories/public-mcp-setting.stories.tsx b/ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx similarity index 90% rename from ui/storybook/stories/public-mcp-setting.stories.tsx rename to ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx index a6cb3716cc..b0da6f0b01 100644 --- a/ui/storybook/stories/public-mcp-setting.stories.tsx +++ b/ui/storybook/stories/gateways-profiles/public-mcp-setting.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within, waitFor } from "storybook/test"; import { InstanceExperimentalSettings } from "@/pages/InstanceExperimentalSettings"; -import { installPublicMcpFixture } from "../fixtures/publicMcp"; +import { installPublicMcpFixture } from "../../fixtures/publicMcp"; const meta = { - title: "Assistant connections/Experimental setting", component: InstanceExperimentalSettings, + id: "assistant-connections-experimental-setting", + title: "Apps, channels, and extensions/Tool gateways and access profiles/Assistant connections/Experimental setting", component: InstanceExperimentalSettings, parameters: { layout: "padded", initialEntries: ["/PAP/company/settings/instance/experimental"], docs: { description: { component: "The production Experimental page, including surrounding settings. Changes are local to this story." } } }, beforeEach: ({ parameters }) => installPublicMcpFixture(parameters.fixture), } satisfies Meta; diff --git a/ui/storybook/stories/blocked-inbox.stories.tsx b/ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx similarity index 98% rename from ui/storybook/stories/blocked-inbox.stories.tsx rename to ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx index b4a5841cd2..727d3ce83a 100644 --- a/ui/storybook/stories/blocked-inbox.stories.tsx +++ b/ui/storybook/stories/inbox-search/blocked-inbox.stories.tsx @@ -6,7 +6,7 @@ import { BlockedInboxView } from "@/components/BlockedInboxView"; import { BlockedReasonChip } from "@/components/BlockedReasonChip"; import { defaultIssueFilterState } from "@/lib/issue-filters"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookIssues } from "../fixtures/paperclipData"; +import { storybookIssues } from "../../fixtures/paperclipData"; const companyId = "company-storybook"; const blockedViewDefaults = { @@ -267,7 +267,8 @@ function BlockedTabEmptyState() { } const meta = { - title: "Product/Inbox/Blocked tab", + id: "product-inbox-blocked-tab", + title: "Tasks and conversations/Inbox, decisions, and search/Product/Inbox/Blocked tab", component: BlockedTabSurface, parameters: { docs: { diff --git a/ui/storybook/stories/decision-card.stories.tsx b/ui/storybook/stories/inbox-search/decision-card.stories.tsx similarity index 98% rename from ui/storybook/stories/decision-card.stories.tsx rename to ui/storybook/stories/inbox-search/decision-card.stories.tsx index 6e051ad72d..fa96bd89ed 100644 --- a/ui/storybook/stories/decision-card.stories.tsx +++ b/ui/storybook/stories/inbox-search/decision-card.stories.tsx @@ -91,7 +91,8 @@ const shared = { }; const meta: Meta = { - title: "Decisions/DecisionCard", + id: "decisions-decisioncard", + title: "Tasks and conversations/Inbox, decisions, and search/Decisions/DecisionCard", component: DecisionCard, render: (args) => (
diff --git a/ui/storybook/stories/decisions-desk.stories.tsx b/ui/storybook/stories/inbox-search/decisions-desk.stories.tsx similarity index 99% rename from ui/storybook/stories/decisions-desk.stories.tsx rename to ui/storybook/stories/inbox-search/decisions-desk.stories.tsx index a2faf41e8f..8f8645dd13 100644 --- a/ui/storybook/stories/decisions-desk.stories.tsx +++ b/ui/storybook/stories/inbox-search/decisions-desk.stories.tsx @@ -444,7 +444,8 @@ const INTERACTION_AUDIENCE_ITEMS: AttentionItem[] = [ ]; const meta: Meta = { - title: "Pages/Decisions Desk", + id: "pages-decisions-desk", + title: "Tasks and conversations/Inbox, decisions, and search/Pages/Decisions Desk", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/search.stories.tsx b/ui/storybook/stories/inbox-search/search.stories.tsx similarity index 99% rename from ui/storybook/stories/search.stories.tsx rename to ui/storybook/stories/inbox-search/search.stories.tsx index 4a3291df9a..0d261a9541 100644 --- a/ui/storybook/stories/search.stories.tsx +++ b/ui/storybook/stories/inbox-search/search.stories.tsx @@ -39,7 +39,7 @@ import { CommandSeparator, } from "@/components/ui/command"; import { StatusBadge } from "@/components/StatusBadge"; -import { storybookAgents, storybookProjects, storybookIssues } from "../fixtures/paperclipData"; +import { storybookAgents, storybookProjects, storybookIssues } from "../../fixtures/paperclipData"; const agentsById = new Map(storybookAgents.map((agent) => [agent.id, agent])); @@ -716,7 +716,8 @@ function SearchStories() { } const meta = { - title: "Product/Search & Command K", + id: "product-search-command-k", + title: "Tasks and conversations/Inbox, decisions, and search/Product/Search & Command K", component: SearchStories, parameters: { docs: { diff --git a/ui/storybook/stories/what-needs-me.stories.tsx b/ui/storybook/stories/inbox-search/what-needs-me.stories.tsx similarity index 99% rename from ui/storybook/stories/what-needs-me.stories.tsx rename to ui/storybook/stories/inbox-search/what-needs-me.stories.tsx index fca76fdc23..292e363df0 100644 --- a/ui/storybook/stories/what-needs-me.stories.tsx +++ b/ui/storybook/stories/inbox-search/what-needs-me.stories.tsx @@ -488,7 +488,8 @@ function Queue({ } const meta: Meta = { - title: "Pages/Decisions", + id: "pages-decisions", + title: "Tasks and conversations/Inbox, decisions, and search/Pages/Decisions", component: Queue, parameters: { layout: "fullscreen" }, }; diff --git a/ui/storybook/stories/dev-ops-surfaces.stories.tsx b/ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx similarity index 95% rename from ui/storybook/stories/dev-ops-surfaces.stories.tsx rename to ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx index 6690392d15..2bf35725d2 100644 --- a/ui/storybook/stories/dev-ops-surfaces.stories.tsx +++ b/ui/storybook/stories/instance-operations/dev-ops-surfaces.stories.tsx @@ -54,7 +54,8 @@ function DevOpsSurfacesStory() { } const meta = { - title: "Product/Dev Ops Surfaces", + id: "product-dev-ops-surfaces", + title: "Oversight and operation/Instance operations/Product/Dev Ops Surfaces", component: DevOpsSurfacesStory, parameters: { docs: { diff --git a/ui/storybook/stories/announcement-card.stories.tsx b/ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx similarity index 93% rename from ui/storybook/stories/announcement-card.stories.tsx rename to ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx index b684e28107..5c0a53dba4 100644 --- a/ui/storybook/stories/announcement-card.stories.tsx +++ b/ui/storybook/stories/navigation-preferences/announcement-card.stories.tsx @@ -3,7 +3,8 @@ import { AnnouncementCard } from "@/components/AnnouncementCard"; import { announcementPreview, announcementAnimationPreview, announcementAnimationPreviewSrc } from "@/lib/announcement-preview"; const meta = { - title: "Announcements/AnnouncementCard", + id: "announcements-announcementcard", + title: "Oversight and operation/Navigation, profile, and announcements/Announcements/AnnouncementCard", component: AnnouncementCard, args: { announcement: announcementPreview, imageSrc: "/announcement-preview.svg", onDismiss: () => {} }, decorators: [(Story) =>
], diff --git a/ui/storybook/stories/mobile-task-tabs.stories.tsx b/ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx similarity index 97% rename from ui/storybook/stories/mobile-task-tabs.stories.tsx rename to ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx index b2f96dc95c..39c5e0cc20 100644 --- a/ui/storybook/stories/mobile-task-tabs.stories.tsx +++ b/ui/storybook/stories/navigation-preferences/mobile-task-tabs.stories.tsx @@ -48,7 +48,8 @@ function Prototype({ initialTabs = basicTabs, activeTabId = "plan" }: { initialT } const meta = { - title: "Prototypes/Task detail/Mobile tabs", + id: "prototypes-task-detail-mobile-tabs", + title: "Oversight and operation/Navigation, profile, and announcements/Prototypes/Task detail/Mobile tabs", parameters: { layout: "fullscreen", docs: { description: { component: "A task toolbar with a vertical open-tab overview. The current document stays readable; titles wrap in the overview, selection is explicit, close actions stay visible, and controls have 44px touch targets. Inspired by Apple’s toolbar and safe-area guidance: https://developer.apple.com/design/human-interface-guidelines/toolbars and https://developer.apple.com/design/human-interface-guidelines/layout." } }, diff --git a/ui/storybook/stories/navigation-layout.stories.tsx b/ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx similarity index 98% rename from ui/storybook/stories/navigation-layout.stories.tsx rename to ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx index 4eca73816f..0531694229 100644 --- a/ui/storybook/stories/navigation-layout.stories.tsx +++ b/ui/storybook/stories/navigation-preferences/navigation-layout.stories.tsx @@ -39,7 +39,7 @@ import { storybookIssues, storybookProjects, storybookSidebarBadges, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; function Section({ eyebrow, @@ -332,7 +332,8 @@ function NavigationLayoutStories() { } const meta = { - title: "Product/Navigation & Layout", + id: "product-navigation-layout", + title: "Oversight and operation/Navigation, profile, and announcements/Product/Navigation & Layout", component: NavigationLayoutStories, // Sidebar mounts PluginLauncherOutlet unconditionally once a company is // selected; without this provider the story raced company selection and diff --git a/ui/storybook/stories/onboarding-agent-arc.stories.tsx b/ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx similarity index 99% rename from ui/storybook/stories/onboarding-agent-arc.stories.tsx rename to ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx index 8671277b42..4718973792 100644 --- a/ui/storybook/stories/onboarding-agent-arc.stories.tsx +++ b/ui/storybook/stories/onboarding/onboarding-agent-arc.stories.tsx @@ -12,11 +12,11 @@ import { STORYBOOK_COMPANY_ID, clearOnboardingDraft, seedOnboardingDraft, -} from "../fixtures/onboardingDraft"; +} from "../../fixtures/onboardingDraft"; import { resetOnboardingFixtureState, setOnboardingFixtureState, -} from "../fixtures/onboardingEnvironment"; +} from "../../fixtures/onboardingEnvironment"; /** * The onboarding wizard's agent arc: create the agent, connect a model, review. @@ -32,7 +32,8 @@ import { * reached at all. */ const meta = { - title: "Onboarding/Agent arc", + id: "onboarding-agent-arc", + title: "Getting started and access/Onboarding and first work/Onboarding/Agent arc", parameters: { layout: "centered" }, } satisfies Meta; diff --git a/ui/storybook/stories/onboarding-character.stories.tsx b/ui/storybook/stories/onboarding/onboarding-character.stories.tsx similarity index 90% rename from ui/storybook/stories/onboarding-character.stories.tsx rename to ui/storybook/stories/onboarding/onboarding-character.stories.tsx index ca6d8c462e..b69cce348d 100644 --- a/ui/storybook/stories/onboarding-character.stories.tsx +++ b/ui/storybook/stories/onboarding/onboarding-character.stories.tsx @@ -1,11 +1,12 @@ import { useState, type ReactNode } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { AGENT_PALETTE_IDS, appearanceForPalette, type AgentPaletteId } from "@paperclipai/shared"; -import { OnboardingCharacter } from "../../src/components/onboarding/OnboardingCharacter"; -import { Button } from "../../src/components/ui/button"; +import { OnboardingCharacter } from "../../../src/components/onboarding/OnboardingCharacter"; +import { Button } from "../../../src/components/ui/button"; const meta = { - title: "Onboarding/Character", + id: "onboarding-character", + title: "Getting started and access/Onboarding and first work/Onboarding/Character", component: OnboardingCharacter, args: { appearance: appearanceForPalette("bubblegum-sky"), awake: false }, parameters: { docs: { description: { component: "The onboarding hero: the persona character (the studio's App export) on the shared ClipLab v0.2.0 engine. Gray and dozing until Review, where it plays the one-shot sleepy → wink → idle transition while its palette fades in, then settles into the idle loop. Reduced motion skips the sequence." } } }, diff --git a/ui/storybook/stories/onboarding-connect-model.stories.tsx b/ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx similarity index 95% rename from ui/storybook/stories/onboarding-connect-model.stories.tsx rename to ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx index b3c15e0739..065bc19457 100644 --- a/ui/storybook/stories/onboarding-connect-model.stories.tsx +++ b/ui/storybook/stories/onboarding/onboarding-connect-model.stories.tsx @@ -18,7 +18,8 @@ import { ConnectModelPreview } from "@/components/onboarding/ConnectModelPreview * it reads as one row changing its terms. */ const meta = { - title: "Onboarding/Connect a model", + id: "onboarding-connect-a-model", + title: "Getting started and access/Onboarding and first work/Onboarding/Connect a model", parameters: { layout: "centered" }, } satisfies Meta; diff --git a/ui/storybook/stories/overview.stories.tsx b/ui/storybook/stories/overview/overview.stories.tsx similarity index 97% rename from ui/storybook/stories/overview.stories.tsx rename to ui/storybook/stories/overview/overview.stories.tsx index c7e1ab8f64..4da748cfce 100644 --- a/ui/storybook/stories/overview.stories.tsx +++ b/ui/storybook/stories/overview/overview.stories.tsx @@ -2,7 +2,7 @@ import { useEffect, useMemo, useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { Badge } from "@/components/ui/badge"; import { Input } from "@/components/ui/input"; -import catalog from "../../../maps/storybook-map/catalog.json"; +import catalog from "../../../../maps/storybook-map/catalog.json"; type IndexEntry = { id: string; type: string; importPath: string }; @@ -83,6 +83,7 @@ function StorybookGuide() { } const meta = { + id: "overview-storybook-guide", title: "Overview/Storybook Guide", component: StorybookGuide, parameters: { docs: { description: { component: "Feature-based navigation from the downstream catalog, with separate product, component, and fixture classifications. Story links come from this build's index." } } }, diff --git a/ui/storybook/stories/new-project-repos.stories.tsx b/ui/storybook/stories/projects/new-project-repos.stories.tsx similarity index 92% rename from ui/storybook/stories/new-project-repos.stories.tsx rename to ui/storybook/stories/projects/new-project-repos.stories.tsx index 3d3bc78466..74179ac965 100644 --- a/ui/storybook/stories/new-project-repos.stories.tsx +++ b/ui/storybook/stories/projects/new-project-repos.stories.tsx @@ -1,11 +1,12 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { NewProjectPrototype } from "../prototypes/project-repos/ProjectReposPrototype"; +import { NewProjectPrototype } from "../../prototypes/project-repos/ProjectReposPrototype"; -import { crowdedRepoIds, reviewViewports } from "../prototypes/project-repos/fixtures"; +import { crowdedRepoIds, reviewViewports } from "../../prototypes/project-repos/fixtures"; const meta = { - title: "Proposals/Project repos/New project", + id: "proposals-project-repos-new-project", + title: "Projects and execution/Projects and repositories/Proposals/Project repos/New project", component: NewProjectPrototype, tags: ["!autodocs"], parameters: { layout: "fullscreen", viewport: { options: reviewViewports }, docs: { description: { component: "Interactive design proposal only. The project name starts empty and focused, with an outlined folder icon. The source repo region scrolls while the title, name, and actions remain visible. GitHub setup uses the existing ConnectionSetupFlow; Continue to GitHub simulates a successful provider return. Creation and repository changes stay in memory." } } }, diff --git a/ui/storybook/stories/project-execution-workspace-strategy.stories.tsx b/ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx similarity index 92% rename from ui/storybook/stories/project-execution-workspace-strategy.stories.tsx rename to ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx index c47bd8ed7a..2cfdbe3eff 100644 --- a/ui/storybook/stories/project-execution-workspace-strategy.stories.tsx +++ b/ui/storybook/stories/projects/project-execution-workspace-strategy.stories.tsx @@ -4,7 +4,7 @@ import { useQueryClient } from "@tanstack/react-query"; import type { Project } from "@paperclipai/shared"; import { ProjectProperties, type ProjectConfigFieldKey, type ProjectFieldSaveState } from "@/components/ProjectProperties"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookProjects } from "../fixtures/paperclipData"; +import { storybookProjects } from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; const boardProject = storybookProjects.find((project) => project.id === "project-board-ui") ?? storybookProjects[0]!; @@ -28,7 +28,8 @@ function Hydrate({ children }: { children: ReactNode }) { } const meta: Meta = { - title: "Workspaces/Project runtime provision command", + id: "workspaces-project-runtime-provision-command", + title: "Projects and execution/Projects and repositories/Workspaces/Project runtime provision command", component: ProjectProperties, parameters: { layout: "padded" }, }; diff --git a/ui/storybook/stories/project-repos-configuration.stories.tsx b/ui/storybook/stories/projects/project-repos-configuration.stories.tsx similarity index 87% rename from ui/storybook/stories/project-repos-configuration.stories.tsx rename to ui/storybook/stories/projects/project-repos-configuration.stories.tsx index 6015a5475a..1149d46544 100644 --- a/ui/storybook/stories/project-repos-configuration.stories.tsx +++ b/ui/storybook/stories/projects/project-repos-configuration.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { ProjectConfigurationPrototype } from "../prototypes/project-repos/ProjectConfigurationPage"; +import { ProjectConfigurationPrototype } from "../../prototypes/project-repos/ProjectConfigurationPage"; -import { crowdedRepoIds, reviewViewports } from "../prototypes/project-repos/fixtures"; +import { crowdedRepoIds, reviewViewports } from "../../prototypes/project-repos/fixtures"; const meta = { - title: "Proposals/Project repos/Configuration", + id: "proposals-project-repos-configuration", + title: "Projects and execution/Projects and repositories/Proposals/Project repos/Configuration", component: ProjectConfigurationPrototype, tags: ["!autodocs"], parameters: { layout: "fullscreen", viewport: { options: reviewViewports }, docs: { description: { component: "Full Onboarding configuration page, based on the Bull staging reference: sidebar, header, tabs, actual ProjectProperties, and the proposed source repo editor in the Codebase slot. Add/remove repos, save or discard, connect another GitHub account, and preserve existing text URLs. All writes and provider sign-in are simulated in Storybook." } } }, diff --git a/ui/storybook/stories/projects-goals-workspaces.stories.tsx b/ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx similarity index 99% rename from ui/storybook/stories/projects-goals-workspaces.stories.tsx rename to ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx index c10f595836..7eb9e5fbd2 100644 --- a/ui/storybook/stories/projects-goals-workspaces.stories.tsx +++ b/ui/storybook/stories/projects/projects-goals-workspaces.stories.tsx @@ -27,7 +27,7 @@ import { storybookIssues, storybookProjectWorkspaces, storybookProjects, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; const boardProject = storybookProjects.find((project) => project.id === "project-board-ui") ?? storybookProjects[0]!; @@ -497,7 +497,8 @@ function ProjectsGoalsWorkspacesStories() { } const meta = { - title: "Product/Projects Goals Workspaces", + id: "product-projects-goals-workspaces", + title: "Projects and execution/Projects and repositories/Product/Projects Goals Workspaces", component: ProjectsGoalsWorkspacesStories, parameters: { docs: { diff --git a/ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx b/ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx similarity index 93% rename from ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx rename to ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx index 6d25d08878..f292721632 100644 --- a/ui/storybook/stories/agent-chat-unanswered-questions.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/agent-chat-unanswered-questions.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within, waitFor } from "storybook/test"; -import { QuestionChat, question } from "../fixtures/unansweredQuestionChat"; +import { QuestionChat, question } from "../../fixtures/unansweredQuestionChat"; -const meta = { title: "Chat & Comments/Agent Chat Unanswered Questions", parameters: { layout: "fullscreen" }, component: QuestionChat, +const meta = { id: "chat-comments-agent-chat-unanswered-questions", + title: "Tasks and conversations/Questions and approvals/Chat & Comments/Agent Chat Unanswered Questions", parameters: { layout: "fullscreen" }, component: QuestionChat, beforeEach: () => { localStorage.removeItem(`paperclip:task-question-dismissals:user-board:${question.issueId}`); for (const key of Object.keys(localStorage)) { diff --git a/ui/storybook/stories/composer-question-flow.stories.tsx b/ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx similarity index 98% rename from ui/storybook/stories/composer-question-flow.stories.tsx rename to ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx index 4fd6af0f0e..34ec7fba1e 100644 --- a/ui/storybook/stories/composer-question-flow.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/composer-question-flow.stories.tsx @@ -85,7 +85,8 @@ function InteractiveComposerQuestions() { } const meta = { - title: "Composer/Question flow", + id: "composer-question-flow", + title: "Tasks and conversations/Questions and approvals/Composer/Question flow", component: InteractiveComposerQuestions, parameters: { layout: "padded", diff --git a/ui/storybook/stories/connection-reviews.stories.tsx b/ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx similarity index 98% rename from ui/storybook/stories/connection-reviews.stories.tsx rename to ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx index 360435d1f9..825c61b0a8 100644 --- a/ui/storybook/stories/connection-reviews.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/connection-reviews.stories.tsx @@ -17,7 +17,7 @@ import { toolsApi } from "@/api/tools"; import { issuesApi } from "@/api/issues"; import { ReviewQueueCard } from "@/pages/apps/ReviewQueueCard"; import type { ToolActionRequestListItem } from "@paperclipai/shared"; -import { storybookAgentMap } from "../fixtures/paperclipData"; +import { storybookAgentMap } from "../../fixtures/paperclipData"; const readRequest: RequestConfirmationInteraction = { ...pendingToolActionWriteInteraction, @@ -44,7 +44,8 @@ const readRequest: RequestConfirmationInteraction = { }, }; const meta = { - title: "Chat & Comments/Connection Reviews", + id: "chat-comments-connection-reviews", + title: "Tasks and conversations/Questions and approvals/Chat & Comments/Connection Reviews", parameters: { layout: "fullscreen" }, } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/issue-plan-decompositions.stories.tsx b/ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx similarity index 94% rename from ui/storybook/stories/issue-plan-decompositions.stories.tsx rename to ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx index e53f33c44f..0e3ab134d0 100644 --- a/ui/storybook/stories/issue-plan-decompositions.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/issue-plan-decompositions.stories.tsx @@ -4,7 +4,7 @@ import { useQueryClient } from "@tanstack/react-query"; import type { AcceptedPlanDecompositionSummary } from "@paperclipai/shared"; import { IssuePlanDecompositionsSection } from "@/components/IssuePlanDecompositionsSection"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookAgentMap } from "../fixtures/paperclipData"; +import { storybookAgentMap } from "../../fixtures/paperclipData"; const issueId = "issue-plan-decomposition-story"; const issueIdentifier = "PAP-6831"; @@ -82,7 +82,8 @@ function HydratedSection({ } const meta = { - title: "Issue Detail/Plan Decompositions", + id: "issue-detail-plan-decompositions", + title: "Tasks and conversations/Questions and approvals/Issue Detail/Plan Decompositions", component: HydratedSection, args: { decompositions: [], diff --git a/ui/storybook/stories/issue-thread-interactions.stories.tsx b/ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx similarity index 99% rename from ui/storybook/stories/issue-thread-interactions.stories.tsx rename to ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx index 371082cbda..d72c03559b 100644 --- a/ui/storybook/stories/issue-thread-interactions.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/issue-thread-interactions.stories.tsx @@ -79,7 +79,7 @@ import type { RequestItemVerdictValue, SuggestTasksInteraction, } from "@/lib/issue-thread-interactions"; -import { storybookAgentMap } from "../fixtures/paperclipData"; +import { storybookAgentMap } from "../../fixtures/paperclipData"; const boardUserLabels = new Map([ [issueThreadInteractionFixtureMeta.currentUserId, "Riley Board"], @@ -432,7 +432,8 @@ function AutoOpenDeclineRequestConfirmationCard({ } const meta = { - title: "Chat & Comments/Issue Thread Interactions", + id: "chat-comments-issue-thread-interactions", + title: "Tasks and conversations/Questions and approvals/Chat & Comments/Issue Thread Interactions", parameters: { docs: { description: { diff --git a/ui/storybook/stories/rich-acp-interactions.stories.tsx b/ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx similarity index 98% rename from ui/storybook/stories/rich-acp-interactions.stories.tsx rename to ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx index 5f17004f7d..929b9bbd2c 100644 --- a/ui/storybook/stories/rich-acp-interactions.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/rich-acp-interactions.stories.tsx @@ -19,7 +19,7 @@ import type { AskUserQuestionsInteraction, RequestConfirmationInteraction, } from "@/lib/issue-thread-interactions"; -import { storybookAgentMap } from "../fixtures/paperclipData"; +import { storybookAgentMap } from "../../fixtures/paperclipData"; // Production components and production projection, with callbacks kept in memory. // No provider, runner, or control-plane mutation is made by these stories. @@ -181,7 +181,8 @@ function ProviderNotice() { } const meta = { - title: "Chat & Comments/Rich ACP interactions", + id: "chat-comments-rich-acp-interactions", + title: "Tasks and conversations/Questions and approvals/Chat & Comments/Rich ACP interactions", parameters: { layout: "fullscreen", docs: { description: { component: "Credential-free production UI fixtures. Callback receipts establish UI payload fidelity only; they do not claim provider execution or server persistence." } } }, } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx b/ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx similarity index 97% rename from ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx rename to ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx index b8f896f8e4..2f35277bfc 100644 --- a/ui/storybook/stories/task-chat-interaction-above-composer.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/task-chat-interaction-above-composer.stories.tsx @@ -19,8 +19,8 @@ import { pendingToolActionWriteInteraction, issueThreadInteractionFixtureMeta, } from "@/fixtures/issueThreadInteractionFixtures"; -import { composerAgentAppearance, composerAgents } from "../prototypes/composer-model-picker/fixtures"; -import { storybookAgentMap } from "../fixtures/paperclipData"; +import { composerAgentAppearance, composerAgents } from "../../prototypes/composer-model-picker/fixtures"; +import { storybookAgentMap } from "../../fixtures/paperclipData"; const agentMap = new Map(composerAgents.map((agent) => [agent.id, { id: agent.id, @@ -143,7 +143,8 @@ function InteractionAboveComposer({ interaction, mobile = false }: { interaction } const meta = { - title: "Composer/Interaction above composer", + id: "composer-interaction-above-composer", + title: "Tasks and conversations/Questions and approvals/Composer/Interaction above composer", component: InteractionAboveComposer, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/task-chat-unanswered-questions.stories.tsx b/ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx similarity index 89% rename from ui/storybook/stories/task-chat-unanswered-questions.stories.tsx rename to ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx index a5b698086f..286a309052 100644 --- a/ui/storybook/stories/task-chat-unanswered-questions.stories.tsx +++ b/ui/storybook/stories/questions-and-approvals/task-chat-unanswered-questions.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within, waitFor } from "storybook/test"; -import { QuestionChat } from "../fixtures/unansweredQuestionChat"; +import { QuestionChat } from "../../fixtures/unansweredQuestionChat"; const meta = { - title: "Chat & Comments/Task Chat Unanswered Questions", + id: "chat-comments-task-chat-unanswered-questions", + title: "Tasks and conversations/Questions and approvals/Chat & Comments/Task Chat Unanswered Questions", parameters: { layout: "fullscreen" }, component: QuestionChat, args: { conversationMode: false }, diff --git a/ui/storybook/stories/cloud-access-recovery.stories.tsx b/ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx similarity index 85% rename from ui/storybook/stories/cloud-access-recovery.stories.tsx rename to ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx index 4d01137a24..9db96e84bd 100644 --- a/ui/storybook/stories/cloud-access-recovery.stories.tsx +++ b/ui/storybook/stories/recovery/cloud-access-recovery.stories.tsx @@ -2,7 +2,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { CloudAccessError } from "@/components/CloudAccessGate"; const meta: Meta = { - title: "App/Connection recovery", + id: "app-connection-recovery", + title: "Projects and execution/Recovery/App/Connection recovery", component: CloudAccessError, parameters: { layout: "fullscreen" }, args: { temporary: true, retrying: false, onRetry: () => undefined }, diff --git a/ui/storybook/stories/execution-blocker-notice.stories.tsx b/ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx similarity index 91% rename from ui/storybook/stories/execution-blocker-notice.stories.tsx rename to ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx index e97cc80ada..138e3cdb26 100644 --- a/ui/storybook/stories/execution-blocker-notice.stories.tsx +++ b/ui/storybook/stories/recovery/execution-blocker-notice.stories.tsx @@ -8,7 +8,8 @@ client.setQueryData(queryKeys.issues.runs("storybook-recovery"), [ { runId: "stopped-run", agentId: "agent", status: "failed" }, ]); const meta = { - title: "Task chat/Recovery notice", + id: "task-chat-recovery-notice", + title: "Projects and execution/Recovery/Task chat/Recovery notice", component: ExecutionBlockerNotice, decorators: [Story =>
], args: { diff --git a/ui/storybook/stories/execution-recovery.stories.tsx b/ui/storybook/stories/recovery/execution-recovery.stories.tsx similarity index 98% rename from ui/storybook/stories/execution-recovery.stories.tsx rename to ui/storybook/stories/recovery/execution-recovery.stories.tsx index 609f5456c6..b057457b4b 100644 --- a/ui/storybook/stories/execution-recovery.stories.tsx +++ b/ui/storybook/stories/recovery/execution-recovery.stories.tsx @@ -6,7 +6,7 @@ import { TaskChatRunnerTurn } from "@/components/task-chat/TaskChatRunnerTurn"; import { TaskChatLiveRunPill } from "@/components/task-chat/TaskChatLiveRunPill"; import { Textarea } from "@/components/ui/textarea"; import { queryKeys } from "@/lib/queryKeys"; -import { createIssue, storybookLiveRuns } from "../fixtures/paperclipData"; +import { createIssue, storybookLiveRuns } from "../../fixtures/paperclipData"; import type { Meta, StoryObj } from "@storybook/react-vite"; import type { ExecutionProjection } from "@paperclipai/shared"; import { expect, userEvent, within } from "storybook/test"; @@ -60,7 +60,8 @@ function QuietExecution({ execution }: { execution: ExecutionProjection }) { ); } const meta = { - title: "Tasks/Execution recovery", + id: "tasks-execution-recovery", + title: "Projects and execution/Recovery/Tasks/Execution recovery", component: QuietExecution, args: { execution: base }, decorators: [ diff --git a/ui/storybook/stories/issue-blocked-notice.stories.tsx b/ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx similarity index 98% rename from ui/storybook/stories/issue-blocked-notice.stories.tsx rename to ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx index a84bed3544..e13cb2a9f6 100644 --- a/ui/storybook/stories/issue-blocked-notice.stories.tsx +++ b/ui/storybook/stories/recovery/issue-blocked-notice.stories.tsx @@ -33,7 +33,8 @@ function Frame({ label, children }: { label: string; children: React.ReactNode } } const meta = { - title: "Product/Issue/Blocked notice", + id: "product-issue-blocked-notice", + title: "Projects and execution/Recovery/Product/Issue/Blocked notice", component: IssueBlockedNotice, // Each story supplies its own props via `render`; this default satisfies the // component's one required prop (`blockers`) so the story args type-checks. diff --git a/ui/storybook/stories/model-capacity-retry.stories.tsx b/ui/storybook/stories/recovery/model-capacity-retry.stories.tsx similarity index 89% rename from ui/storybook/stories/model-capacity-retry.stories.tsx rename to ui/storybook/stories/recovery/model-capacity-retry.stories.tsx index 4ef94229a7..4385292d11 100644 --- a/ui/storybook/stories/model-capacity-retry.stories.tsx +++ b/ui/storybook/stories/recovery/model-capacity-retry.stories.tsx @@ -2,7 +2,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { IssueScheduledRetryCard } from "@/components/IssueScheduledRetryCard"; const meta = { - title: "Tasks/Model capacity retry", + id: "tasks-model-capacity-retry", + title: "Projects and execution/Recovery/Tasks/Model capacity retry", component: IssueScheduledRetryCard, decorators: [Story =>
], args: { diff --git a/ui/storybook/stories/recovery-notice-preview.stories.tsx b/ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx similarity index 91% rename from ui/storybook/stories/recovery-notice-preview.stories.tsx rename to ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx index a5f5c87248..5a4e4de344 100644 --- a/ui/storybook/stories/recovery-notice-preview.stories.tsx +++ b/ui/storybook/stories/recovery/recovery-notice-preview.stories.tsx @@ -1,9 +1,10 @@ import { expect, userEvent, within } from "storybook/test"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { RecoveryNoticePreview } from "../prototypes/recovery-notice/RecoveryNoticePreview"; +import { RecoveryNoticePreview } from "../../prototypes/recovery-notice/RecoveryNoticePreview"; const meta = { - title: "Design previews/Recovery notice", + id: "design-previews-recovery-notice", + title: "Projects and execution/Recovery/Design previews/Recovery notice", component: RecoveryNoticePreview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/scheduled-retry.stories.tsx b/ui/storybook/stories/recovery/scheduled-retry.stories.tsx similarity index 97% rename from ui/storybook/stories/scheduled-retry.stories.tsx rename to ui/storybook/stories/recovery/scheduled-retry.stories.tsx index a18e72c06d..4a9acd8f5d 100644 --- a/ui/storybook/stories/scheduled-retry.stories.tsx +++ b/ui/storybook/stories/recovery/scheduled-retry.stories.tsx @@ -6,7 +6,7 @@ import { storybookExecutionWorkspaces, storybookIssueDocuments, storybookIssues, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const issueDocumentSummaries = storybookIssueDocuments.map(({ body: _body, ...summary }) => summary); @@ -144,7 +144,8 @@ function ScheduledRetrySurfaceStories() { } const meta = { - title: "Product/Issue Scheduled retry surfaces", + id: "product-issue-scheduled-retry-surfaces", + title: "Projects and execution/Recovery/Product/Issue Scheduled retry surfaces", component: ScheduledRetrySurfaceStories, parameters: { docs: { diff --git a/ui/storybook/stories/source-issue-recovery.stories.tsx b/ui/storybook/stories/recovery/source-issue-recovery.stories.tsx similarity index 99% rename from ui/storybook/stories/source-issue-recovery.stories.tsx rename to ui/storybook/stories/recovery/source-issue-recovery.stories.tsx index 6687556f83..fe49dfc09b 100644 --- a/ui/storybook/stories/source-issue-recovery.stories.tsx +++ b/ui/storybook/stories/recovery/source-issue-recovery.stories.tsx @@ -5,7 +5,7 @@ import { Eye, ExternalLink, OctagonAlert, RefreshCw, TriangleAlert } from "lucid import { IssueRecoveryActionCard } from "@/components/IssueRecoveryActionCard"; import { IssueRow } from "@/components/IssueRow"; import { IssueBlockedNotice } from "@/components/IssueBlockedNotice"; -import { storybookAgentMap, storybookAgents, createIssue } from "../fixtures/paperclipData"; +import { storybookAgentMap, storybookAgents, createIssue } from "../../fixtures/paperclipData"; const claudeAgent = storybookAgents.find((agent) => agent.name.toLowerCase().startsWith("claude")) ?? storybookAgents[0]!; const codexAgent = storybookAgents.find((agent) => agent.name.toLowerCase().startsWith("codex")) ?? storybookAgents[0]!; @@ -574,7 +574,8 @@ function InboxRowPanel() { } const meta = { - title: "Paperclip/Source Issue Recovery", + id: "paperclip-source-issue-recovery", + title: "Projects and execution/Recovery/Paperclip/Source Issue Recovery", component: AllStatesPanel, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/source-resolved-fold.stories.tsx b/ui/storybook/stories/recovery/source-resolved-fold.stories.tsx similarity index 98% rename from ui/storybook/stories/source-resolved-fold.stories.tsx rename to ui/storybook/stories/recovery/source-resolved-fold.stories.tsx index ff39164c37..ba714b96e8 100644 --- a/ui/storybook/stories/source-resolved-fold.stories.tsx +++ b/ui/storybook/stories/recovery/source-resolved-fold.stories.tsx @@ -54,7 +54,8 @@ function DefaultPanel() { } const meta = { - title: "Paperclip/Source-resolved Fold", + id: "paperclip-source-resolved-fold", + title: "Projects and execution/Recovery/Paperclip/Source-resolved Fold", component: DefaultPanel, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx b/ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx similarity index 90% rename from ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx rename to ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx index 8e2fdd6d57..cdc9698d70 100644 --- a/ui/storybook/stories/workspace-branch-recovery/01-component.stories.tsx +++ b/ui/storybook/stories/recovery/workspace-branch-recovery/01-component.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; import { WorkspaceBaseRefRecoveryNotice } from "@/components/WorkspaceBaseRefRecoveryNotice"; -import { evidence, simulateRepair } from "./fixtures"; +import { evidence, simulateRepair } from "../../../support/workspace-branch-recovery/fixtures"; const meta = { - title: "Workspace branch recovery/01 Repair card", + id: "workspace-branch-recovery-01-repair-card", + title: "Projects and execution/Recovery/Workspace branch recovery/01 Repair card", component: WorkspaceBaseRefRecoveryNotice, args: { ...evidence, onRepair: simulateRepair }, parameters: { layout: "fullscreen", docs: { description: { component: "Proposed inline repair using the reusable component. Repository data and save/retry responses are simulated here; this story does not change a live task. The default-branch action appears only with a verified repository default." } } }, diff --git a/ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx b/ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx similarity index 92% rename from ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx rename to ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx index 48f827ca78..f30e7a75a2 100644 --- a/ui/storybook/stories/workspace-branch-recovery/02-task-journey.stories.tsx +++ b/ui/storybook/stories/recovery/workspace-branch-recovery/02-task-journey.stories.tsx @@ -8,7 +8,7 @@ import { WorkspaceBaseRefRecoveryNotice } from "@/components/WorkspaceBaseRefRec import { StatusBadge } from "@/components/StatusBadge"; import { PluginLauncherProvider } from "@/plugins/launchers"; import { useBreadcrumbs } from "@/context/BreadcrumbContext"; -import { evidence, simulateRepair } from "./fixtures"; +import { evidence, simulateRepair } from "../../../support/workspace-branch-recovery/fixtures"; function TaskConversation() { const [retried, setRetried] = useState(false); @@ -33,7 +33,8 @@ function Journey() { return }>} />; } const meta = { - title: "Workspace branch recovery/02 Task journey", component: Journey, + id: "workspace-branch-recovery-02-task-journey", + title: "Projects and execution/Recovery/Workspace branch recovery/02 Task journey", component: Journey, parameters: { layout: "fullscreen", initialEntries: ["/PAP/issues/PAP-24"], docs: { description: { component: "Interactive proposal in the production app shell, using the shared task bubbles, composer and repair component. Save/retry and branch lookup are simulated. Use master or choose release/next; a missing branch shows an inline error. No live task is modified." }, story: { inline: false } } }, } satisfies Meta; export default meta; diff --git a/ui/storybook/stories/routine-detail-c.stories.tsx b/ui/storybook/stories/routines/routine-detail-c.stories.tsx similarity index 98% rename from ui/storybook/stories/routine-detail-c.stories.tsx rename to ui/storybook/stories/routines/routine-detail-c.stories.tsx index d85a6924b6..f536ef04ca 100644 --- a/ui/storybook/stories/routine-detail-c.stories.tsx +++ b/ui/storybook/stories/routines/routine-detail-c.stories.tsx @@ -33,7 +33,7 @@ import { ActivitySection, } from "@/components/routine-sections/operate-sections"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookAgents, storybookProjects } from "../fixtures/paperclipData"; +import { storybookAgents, storybookProjects } from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; const ROUTINE_ID = "routine-storybook"; @@ -440,7 +440,8 @@ function RoutineCShell({ } const meta: Meta = { - title: "Product/Routines · Detail (variation C)", + id: "product-routines-·-detail-variation-c", + title: "Automation and structured work/Routines, schedules, and triggers/Product/Routines · Detail (variation C)", component: RoutineCShell, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/routine-secrets.stories.tsx b/ui/storybook/stories/routines/routine-secrets.stories.tsx similarity index 97% rename from ui/storybook/stories/routine-secrets.stories.tsx rename to ui/storybook/stories/routines/routine-secrets.stories.tsx index 42bf771b2b..8117b6ea4d 100644 --- a/ui/storybook/stories/routine-secrets.stories.tsx +++ b/ui/storybook/stories/routines/routine-secrets.stories.tsx @@ -15,7 +15,7 @@ import { RoutineHistoryTab } from "@/components/RoutineHistoryTab"; import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/components/ui/card"; import { useCompany } from "@/context/CompanyContext"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookCompanies, storybookSecrets } from "../fixtures/paperclipData"; +import { storybookCompanies, storybookSecrets } from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; @@ -47,7 +47,8 @@ function StorybookRoutineFixtures({ } const meta: Meta = { - title: "Product/Routines · Secrets tab", + id: "product-routines-·-secrets-tab", + title: "Automation and structured work/Routines, schedules, and triggers/Product/Routines · Secrets tab", parameters: { layout: "fullscreen", a11y: { test: "off" }, diff --git a/ui/storybook/stories/routine-webhooks-ux.stories.tsx b/ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx similarity index 98% rename from ui/storybook/stories/routine-webhooks-ux.stories.tsx rename to ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx index a991e3598b..093addf2e4 100644 --- a/ui/storybook/stories/routine-webhooks-ux.stories.tsx +++ b/ui/storybook/stories/routines/routine-webhooks-ux.stories.tsx @@ -1,6 +1,6 @@ -import { RoutineTriggerCard } from "../fixtures/routineTriggerCard"; -import { RoutineTriggerWizard, defaultTriggerDraft, type TriggerDraft } from "../fixtures/routineTriggerWizard"; -import { CopyField } from "../fixtures/routineWebhookFields"; +import { RoutineTriggerCard } from "../../fixtures/routineTriggerCard"; +import { RoutineTriggerWizard, defaultTriggerDraft, type TriggerDraft } from "../../fixtures/routineTriggerWizard"; +import { CopyField } from "../../fixtures/routineWebhookFields"; import { useCallback, useEffect, useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; @@ -14,7 +14,7 @@ import { RoutineDetail } from "@/pages/RoutineDetail"; import { useBreadcrumbs } from "@/context/BreadcrumbContext"; import { Link, useNavigate, useParams } from "@/lib/router"; import { cn } from "@/lib/utils"; -import { WebhookReview } from "../fixtures/routineWebhooks"; +import { WebhookReview } from "../../fixtures/routineWebhooks"; // Deliberately Storybook-only: no production components or webhook APIs are changed. const endpoint = "https://acme.paperclip.example/api/routine-triggers/public/0123456789abcdef01234567/fire"; @@ -191,7 +191,8 @@ function Prototype(props: Props) { return } />; } const meta = { - title: "Product/Routines/Webhooks UX preview", + id: "product-routines-webhooks-ux-preview", + title: "Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks UX preview", component: Prototype, parameters: { layout: "fullscreen" }, args: { stage: "setup", sender: "custom", page: "triggers", triggerKind: "choose", wizardStep: 0, scheduleSaved: false, checkResult: "waiting" }, diff --git a/ui/storybook/stories/routine-webhooks.stories.tsx b/ui/storybook/stories/routines/routine-webhooks.stories.tsx similarity index 95% rename from ui/storybook/stories/routine-webhooks.stories.tsx rename to ui/storybook/stories/routines/routine-webhooks.stories.tsx index 3d6da63bf4..5769c0258d 100644 --- a/ui/storybook/stories/routine-webhooks.stories.tsx +++ b/ui/storybook/stories/routines/routine-webhooks.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { WebhookReview } from "../fixtures/routineWebhooks"; +import { WebhookReview } from "../../fixtures/routineWebhooks"; const meta = { - title: "Product/Routines/Webhooks", + id: "product-routines-webhooks", + title: "Automation and structured work/Routines, schedules, and triggers/Product/Routines/Webhooks", component: WebhookReview, parameters: { layout: "fullscreen" }, args: { signingMode: "bearer", state: "configured" }, diff --git a/ui/storybook/stories/routines-list-groups.stories.tsx b/ui/storybook/stories/routines/routines-list-groups.stories.tsx similarity index 96% rename from ui/storybook/stories/routines-list-groups.stories.tsx rename to ui/storybook/stories/routines/routines-list-groups.stories.tsx index cf4da48267..03955004ac 100644 --- a/ui/storybook/stories/routines-list-groups.stories.tsx +++ b/ui/storybook/stories/routines/routines-list-groups.stories.tsx @@ -91,7 +91,8 @@ function GroupedList() { } const meta: Meta = { - title: "Product/Routines · List (grouped cards)", + id: "product-routines-·-list-grouped-cards", + title: "Automation and structured work/Routines, schedules, and triggers/Product/Routines · List (grouped cards)", component: GroupedList, parameters: { layout: "fullscreen" }, }; diff --git a/ui/storybook/stories/agent-connection-reuse.stories.tsx b/ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx similarity index 95% rename from ui/storybook/stories/agent-connection-reuse.stories.tsx rename to ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx index d3f98a949d..2fd484a1c5 100644 --- a/ui/storybook/stories/agent-connection-reuse.stories.tsx +++ b/ui/storybook/stories/runs-adapters/agent-connection-reuse.stories.tsx @@ -9,7 +9,7 @@ import { resetOnboardingFixtureState, setOnboardingFixtureState, STORYBOOK_SANDBOX_ENVIRONMENT_ID, -} from "../fixtures/onboardingEnvironment"; +} from "../../fixtures/onboardingEnvironment"; function ConnectionStory({ adapterType = "claude_local", @@ -48,7 +48,8 @@ function ConnectionStory({ ); } const meta = { - title: "Onboarding/Saved connections", + id: "onboarding-saved-connections", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/Onboarding/Saved connections", component: ConnectionStory, parameters: { layout: "centered", diff --git a/ui/storybook/stories/ai-connection-usage.stories.tsx b/ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx similarity index 93% rename from ui/storybook/stories/ai-connection-usage.stories.tsx rename to ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx index d3b47a3a38..849cc67ac6 100644 --- a/ui/storybook/stories/ai-connection-usage.stories.tsx +++ b/ui/storybook/stories/runs-adapters/ai-connection-usage.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, waitFor, within } from "storybook/test"; -import { AiConnectionUsageReview, USAGE_REVIEW_SCENARIOS } from "../prototypes/AiConnectionUsageReview"; +import { AiConnectionUsageReview, USAGE_REVIEW_SCENARIOS } from "../../prototypes/AiConnectionUsageReview"; const { codex, claude, grok, openRouter, unavailable } = USAGE_REVIEW_SCENARIOS; const meta = { - title: "AI Connections/Usage limits", + id: "ai-connections-usage-limits", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Usage limits", component: AiConnectionUsageReview, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/ai-connections.stories.tsx b/ui/storybook/stories/runs-adapters/ai-connections.stories.tsx similarity index 97% rename from ui/storybook/stories/ai-connections.stories.tsx rename to ui/storybook/stories/runs-adapters/ai-connections.stories.tsx index 10f3419dce..100856e459 100644 --- a/ui/storybook/stories/ai-connections.stories.tsx +++ b/ui/storybook/stories/runs-adapters/ai-connections.stories.tsx @@ -1,17 +1,18 @@ -import { AiReviewFrame, aiReviewContext } from "../prototypes/AiReviewFrame"; -import { AiTaskConnectionReview } from "../prototypes/AiTaskConnectionReview"; +import { AiReviewFrame, aiReviewContext } from "../../prototypes/AiReviewFrame"; +import { AiTaskConnectionReview } from "../../prototypes/AiTaskConnectionReview"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { AiConnectionsReview } from "../prototypes/AiConnectionsReview"; -import { AiConnectorPages } from "../prototypes/AiConnectorPages"; +import { AiConnectionsReview } from "../../prototypes/AiConnectionsReview"; +import { AiConnectorPages } from "../../prototypes/AiConnectorPages"; import { AI_REVIEW_BINDING, AI_REVIEW_CONNECTIONS, AI_REVIEW_REQUIREMENT, -} from "../fixtures/aiConnections"; +} from "../../fixtures/aiConnections"; const meta = { - title: "AI Connections/Review", + id: "ai-connections-review", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Review", component: AiConnectionsReview, parameters: { layout: "fullscreen" }, decorators: [(Story, context) => ( diff --git a/ui/storybook/stories/connection-pool-connector.stories.tsx b/ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx similarity index 85% rename from ui/storybook/stories/connection-pool-connector.stories.tsx rename to ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx index d6dac52e8e..dac2a11391 100644 --- a/ui/storybook/stories/connection-pool-connector.stories.tsx +++ b/ui/storybook/stories/runs-adapters/connection-pool-connector.stories.tsx @@ -1,7 +1,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { ConnectionPoolConnectorHost } from "../prototypes/ConnectionPoolConnectorHost"; -const meta = { title: "Connectors/Pool host", component: ConnectionPoolConnectorHost, parameters: { layout: "fullscreen" } } satisfies Meta; +import { ConnectionPoolConnectorHost } from "../../prototypes/ConnectionPoolConnectorHost"; +const meta = { id: "connectors-pool-host", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/Connectors/Pool host", component: ConnectionPoolConnectorHost, parameters: { layout: "fullscreen" } } satisfies Meta; export default meta; type Story = StoryObj; export const Catalog: Story = {}; diff --git a/ui/storybook/stories/connection-pools.stories.tsx b/ui/storybook/stories/runs-adapters/connection-pools.stories.tsx similarity index 92% rename from ui/storybook/stories/connection-pools.stories.tsx rename to ui/storybook/stories/runs-adapters/connection-pools.stories.tsx index 0f480d7156..54ee9f59d3 100644 --- a/ui/storybook/stories/connection-pools.stories.tsx +++ b/ui/storybook/stories/runs-adapters/connection-pools.stories.tsx @@ -10,7 +10,7 @@ import { ComposerRunSettingsPicker } from "@/components/task-chat/ComposerRunSet import type { ComposerRunSettings } from "@/components/task-chat/composer-run-settings"; import { RunRetryDetails } from "@/components/RunRetryDetails"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookAgents, storybookIssues } from "../fixtures/paperclipData"; +import { storybookAgents, storybookIssues } from "../../fixtures/paperclipData"; const companyId = "company-storybook", agentId = "agent-codex"; const poolId = "10000000-0000-4000-8000-000000000001"; @@ -74,7 +74,8 @@ function PoolSurfaces({ scenario = "overview" }: { scenario?: Scenario }) { {(overview || ["run-codex", "run-claude", "fallback", "retry"].includes(scenario)) &&

Run account and runtime

} ; } -const meta = { title: "AI Connections/Connection pools", component: PoolSurfaces, parameters: { layout: "fullscreen", docs: { description: { component: "All user-facing Core additions for the private connection-pool plugin. These stories mount the production selector, composer, quota banners, and run details/retry metadata. Routing requires manual operator configuration; there is no settings toggle. Accounts are fixtures; no live provider calls or instance mutations occur." } } }, render: args => } satisfies Meta; +const meta = { id: "ai-connections-connection-pools", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Connection pools", component: PoolSurfaces, parameters: { layout: "fullscreen", docs: { description: { component: "All user-facing Core additions for the private connection-pool plugin. These stories mount the production selector, composer, quota banners, and run details/retry metadata. Routing requires manual operator configuration; there is no settings toggle. Accounts are fixtures; no live provider calls or instance mutations occur." } } }, render: args => } satisfies Meta; export default meta; type Story = StoryObj; export const AllCoreSurfaces: Story = { args: { scenario: "overview" } }; diff --git a/ui/storybook/stories/dot-runner-connection.stories.tsx b/ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx similarity index 94% rename from ui/storybook/stories/dot-runner-connection.stories.tsx rename to ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx index fd00dd211b..18b0cbb3ac 100644 --- a/ui/storybook/stories/dot-runner-connection.stories.tsx +++ b/ui/storybook/stories/runs-adapters/dot-runner-connection.stories.tsx @@ -33,7 +33,8 @@ function ConnectionForm() {
; } const meta = { - title: "Assistant connections/Dot Runner", component: ConnectionForm, + id: "assistant-connections-dot-runner", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/Assistant connections/Dot Runner", component: ConnectionForm, parameters: { layout: "padded", docs: { description: { component: "Production Dot pairing component. API responses, pairing code and account state are synthetic. This preview does not qualify a real Dot account." } } }, beforeEach: ({ parameters }) => installFixture(Boolean(parameters.connected)), } satisfies Meta; diff --git a/ui/storybook/stories/local-ai-subscription.stories.tsx b/ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx similarity index 92% rename from ui/storybook/stories/local-ai-subscription.stories.tsx rename to ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx index b5c8ddb8dd..57a7cf82cc 100644 --- a/ui/storybook/stories/local-ai-subscription.stories.tsx +++ b/ui/storybook/stories/runs-adapters/local-ai-subscription.stories.tsx @@ -3,7 +3,8 @@ import { expect, userEvent, waitFor, within } from "storybook/test"; import { LocalProviderLoginInstructions } from "@/components/AdapterLoginChrome"; const meta = { - title: "AI Connections/Provider routing/07 Subscription sign-in", + id: "ai-connections-provider-routing-07-subscription-sign-in", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/07 Subscription sign-in", component: LocalProviderLoginInstructions, parameters: { layout: "centered" }, } satisfies Meta; diff --git a/ui/storybook/stories/provider-routing-00-overview.stories.tsx b/ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx similarity index 52% rename from ui/storybook/stories/provider-routing-00-overview.stories.tsx rename to ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx index 868505913a..32cbb80c22 100644 --- a/ui/storybook/stories/provider-routing-00-overview.stories.tsx +++ b/ui/storybook/stories/runs-adapters/provider-routing-00-overview.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { ReviewIndex } from "../prototypes/provider-routing/ReviewIndex"; -import { ReviewFrame } from "../prototypes/provider-routing/shared"; -import { reviewLifecycle } from "../prototypes/provider-routing/story-support"; +import { ReviewIndex } from "../../prototypes/provider-routing/ReviewIndex"; +import { ReviewFrame } from "../../prototypes/provider-routing/shared"; +import { reviewLifecycle } from "../../prototypes/provider-routing/story-support"; const meta = { - title: "AI Connections/Provider routing/00 Overview", + id: "ai-connections-provider-routing-00-overview", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/00 Overview", component: ReviewIndex, parameters: { layout: "fullscreen" }, ...reviewLifecycle, diff --git a/ui/storybook/stories/provider-routing-01-onboarding.stories.tsx b/ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx similarity index 89% rename from ui/storybook/stories/provider-routing-01-onboarding.stories.tsx rename to ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx index 1fa29f8a34..ee0cf983ab 100644 --- a/ui/storybook/stories/provider-routing-01-onboarding.stories.tsx +++ b/ui/storybook/stories/runs-adapters/provider-routing-01-onboarding.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { Onboarding } from "../prototypes/provider-routing/AgentSetup"; -import { ReviewFrame } from "../prototypes/provider-routing/shared"; -import { reviewLifecycle } from "../prototypes/provider-routing/story-support"; +import { Onboarding } from "../../prototypes/provider-routing/AgentSetup"; +import { ReviewFrame } from "../../prototypes/provider-routing/shared"; +import { reviewLifecycle } from "../../prototypes/provider-routing/story-support"; const meta = { - title: "AI Connections/Provider routing/01 Onboarding", + id: "ai-connections-provider-routing-01-onboarding", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/01 Onboarding", component: Onboarding, parameters: { layout: "fullscreen" }, ...reviewLifecycle, diff --git a/ui/storybook/stories/provider-routing-02-connect.stories.tsx b/ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx similarity index 88% rename from ui/storybook/stories/provider-routing-02-connect.stories.tsx rename to ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx index 8d0f42ca24..0429473707 100644 --- a/ui/storybook/stories/provider-routing-02-connect.stories.tsx +++ b/ui/storybook/stories/runs-adapters/provider-routing-02-connect.stories.tsx @@ -1,14 +1,15 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { ProviderCatalogReview } from "../prototypes/provider-routing/ConnectionCatalog"; -import { ConnectionSetup } from "../prototypes/provider-routing/ConnectionSetup"; -import { ReviewFrame } from "../prototypes/provider-routing/shared"; +import { ProviderCatalogReview } from "../../prototypes/provider-routing/ConnectionCatalog"; +import { ConnectionSetup } from "../../prototypes/provider-routing/ConnectionSetup"; +import { ReviewFrame } from "../../prototypes/provider-routing/shared"; import { choose, reviewLifecycle, -} from "../prototypes/provider-routing/story-support"; +} from "../../prototypes/provider-routing/story-support"; const meta = { - title: "AI Connections/Provider routing/02 Connect", + id: "ai-connections-provider-routing-02-connect", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/02 Connect", component: ConnectionSetup, parameters: { layout: "fullscreen" }, ...reviewLifecycle, diff --git a/ui/storybook/stories/provider-routing-03-agent.stories.tsx b/ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx similarity index 96% rename from ui/storybook/stories/provider-routing-03-agent.stories.tsx rename to ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx index 2b45c5ddfd..dd7b66339d 100644 --- a/ui/storybook/stories/provider-routing-03-agent.stories.tsx +++ b/ui/storybook/stories/runs-adapters/provider-routing-03-agent.stories.tsx @@ -1,13 +1,14 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, waitFor, within } from "storybook/test"; -import { AgentSetup } from "../prototypes/provider-routing/AgentSetup"; -import { ReviewFrame } from "../prototypes/provider-routing/shared"; +import { AgentSetup } from "../../prototypes/provider-routing/AgentSetup"; +import { ReviewFrame } from "../../prototypes/provider-routing/shared"; import { choose, reviewLifecycle, -} from "../prototypes/provider-routing/story-support"; +} from "../../prototypes/provider-routing/story-support"; const meta = { - title: "AI Connections/Provider routing/03 Agent", + id: "ai-connections-provider-routing-03-agent", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/03 Agent", component: AgentSetup, parameters: { layout: "fullscreen" }, ...reviewLifecycle, diff --git a/ui/storybook/stories/provider-routing-04-manage.stories.tsx b/ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx similarity index 89% rename from ui/storybook/stories/provider-routing-04-manage.stories.tsx rename to ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx index 7e5299a745..3b40f1b84e 100644 --- a/ui/storybook/stories/provider-routing-04-manage.stories.tsx +++ b/ui/storybook/stories/runs-adapters/provider-routing-04-manage.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { Management } from "../prototypes/provider-routing/Management"; -import { ReviewFrame } from "../prototypes/provider-routing/shared"; -import { reviewLifecycle } from "../prototypes/provider-routing/story-support"; +import { Management } from "../../prototypes/provider-routing/Management"; +import { ReviewFrame } from "../../prototypes/provider-routing/shared"; +import { reviewLifecycle } from "../../prototypes/provider-routing/story-support"; const meta = { - title: "AI Connections/Provider routing/04 Manage", + id: "ai-connections-provider-routing-04-manage", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/04 Manage", component: Management, parameters: { layout: "fullscreen" }, ...reviewLifecycle, diff --git a/ui/storybook/stories/provider-routing-05-recovery.stories.tsx b/ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx similarity index 87% rename from ui/storybook/stories/provider-routing-05-recovery.stories.tsx rename to ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx index 222c79ec85..e1e9b33a8f 100644 --- a/ui/storybook/stories/provider-routing-05-recovery.stories.tsx +++ b/ui/storybook/stories/runs-adapters/provider-routing-05-recovery.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { Recovery } from "../prototypes/provider-routing/Recovery"; -import { ReviewFrame } from "../prototypes/provider-routing/shared"; -import { reviewLifecycle } from "../prototypes/provider-routing/story-support"; +import { Recovery } from "../../prototypes/provider-routing/Recovery"; +import { ReviewFrame } from "../../prototypes/provider-routing/shared"; +import { reviewLifecycle } from "../../prototypes/provider-routing/story-support"; const meta = { - title: "AI Connections/Provider routing/05 Recovery", + id: "ai-connections-provider-routing-05-recovery", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/05 Recovery", component: Recovery, parameters: { layout: "fullscreen" }, ...reviewLifecycle, diff --git a/ui/storybook/stories/provider-routing-06-production.stories.tsx b/ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx similarity index 97% rename from ui/storybook/stories/provider-routing-06-production.stories.tsx rename to ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx index 774e348107..2454daf417 100644 --- a/ui/storybook/stories/provider-routing-06-production.stories.tsx +++ b/ui/storybook/stories/runs-adapters/provider-routing-06-production.stories.tsx @@ -15,8 +15,8 @@ import type { AiManagedConnectionSummary, } from "@paperclipai/shared"; import { expect, userEvent, waitFor, within } from "storybook/test"; -import { ProviderCatalogReview } from "../prototypes/provider-routing/ConnectionCatalog"; -import { ReviewFrame } from "../prototypes/provider-routing/shared"; +import { ProviderCatalogReview } from "../../prototypes/provider-routing/ConnectionCatalog"; +import { ReviewFrame } from "../../prototypes/provider-routing/shared"; const companyId = "00000000-0000-4000-8000-000000000001"; const accounts: AiManagedConnectionSummary[] = [ @@ -161,7 +161,8 @@ function AgentConnectionModes() { ; } const meta = { - title: "AI Connections/Provider routing/06 Production components", + id: "ai-connections-provider-routing-06-production-components", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/AI Connections/Provider routing/06 Production components", parameters: { layout: "fullscreen" }, decorators: [ (Story) => ( diff --git a/ui/storybook/stories/session-goals.stories.tsx b/ui/storybook/stories/runs-adapters/session-goals.stories.tsx similarity index 97% rename from ui/storybook/stories/session-goals.stories.tsx rename to ui/storybook/stories/runs-adapters/session-goals.stories.tsx index b963440518..6658a1ae75 100644 --- a/ui/storybook/stories/session-goals.stories.tsx +++ b/ui/storybook/stories/runs-adapters/session-goals.stories.tsx @@ -159,7 +159,8 @@ function SessionGoalStates() { } const meta = { - title: "Composer/Session goals", + id: "composer-session-goals", + title: "Agents and reusable capabilities/Runs, harnesses, and model accounts/Composer/Session goals", component: SessionGoalStates, parameters: { docs: { diff --git a/ui/storybook/stories/credential-access/01-notice.stories.tsx b/ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx similarity index 91% rename from ui/storybook/stories/credential-access/01-notice.stories.tsx rename to ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx index 91ea2eb8a6..3e541190fa 100644 --- a/ui/storybook/stories/credential-access/01-notice.stories.tsx +++ b/ui/storybook/stories/secrets/credential-access/01-notice.stories.tsx @@ -2,7 +2,8 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { TaskChatMarker } from "@/components/task-chat/TaskChatMarker"; const meta = { - title: "Task credential access/01 Notice", + id: "task-credential-access-01-notice", + title: "Apps, channels, and extensions/Secrets and proposals/Task credential access/01 Notice", component: TaskChatMarker, parameters: { layout: "centered" }, decorators: [Story =>
], diff --git a/ui/storybook/stories/credential-access/02-task-page.stories.tsx b/ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx similarity index 82% rename from ui/storybook/stories/credential-access/02-task-page.stories.tsx rename to ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx index e60aa8f977..5914d100ef 100644 --- a/ui/storybook/stories/credential-access/02-task-page.stories.tsx +++ b/ui/storybook/stories/secrets/credential-access/02-task-page.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { CredentialTaskPage } from "./CredentialTaskPage"; +import { CredentialTaskPage } from "../../../support/credential-access/CredentialTaskPage"; const meta = { - title: "Task credential access/02 Task page", + id: "task-credential-access-02-task-page", + title: "Apps, channels, and extensions/Secrets and proposals/Task credential access/02 Task page", component: CredentialTaskPage, parameters: { layout: "fullscreen", waitForViewport: true, docs: { description: { component: "Production task detail and app shell. The latest credential failure stays expanded in the conversation and names the selected credential. The settings link uses the existing agent runtime route. Example data is local to Storybook." } }, diff --git a/ui/storybook/stories/environment-variables-editor.stories.tsx b/ui/storybook/stories/secrets/environment-variables-editor.stories.tsx similarity index 98% rename from ui/storybook/stories/environment-variables-editor.stories.tsx rename to ui/storybook/stories/secrets/environment-variables-editor.stories.tsx index b84afbd180..e0aaa83dc1 100644 --- a/ui/storybook/stories/environment-variables-editor.stories.tsx +++ b/ui/storybook/stories/secrets/environment-variables-editor.stories.tsx @@ -91,7 +91,8 @@ function Editor({ } const meta: Meta = { - title: "Product/Environment Variables Editor", + id: "product-environment-variables-editor", + title: "Apps, channels, and extensions/Secrets and proposals/Product/Environment Variables Editor", parameters: { layout: "fullscreen", a11y: { test: "off" } }, }; export default meta; diff --git a/ui/storybook/stories/secrets.stories.tsx b/ui/storybook/stories/secrets/secrets.stories.tsx similarity index 98% rename from ui/storybook/stories/secrets.stories.tsx rename to ui/storybook/stories/secrets/secrets.stories.tsx index 27fb659239..fb039058f1 100644 --- a/ui/storybook/stories/secrets.stories.tsx +++ b/ui/storybook/stories/secrets/secrets.stories.tsx @@ -15,7 +15,7 @@ import { Card, CardContent, CardDescription, CardHeader, CardTitle } from "@/com import { Badge } from "@/components/ui/badge"; import { useCompany } from "@/context/CompanyContext"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookCompanies, storybookSecrets } from "../fixtures/paperclipData"; +import { storybookCompanies, storybookSecrets } from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; @@ -118,7 +118,8 @@ function StorybookSecretsFixtures({ children }: { children: ReactNode }) { } const meta: Meta = { - title: "Product/Secrets", + id: "product-secrets", + title: "Apps, channels, and extensions/Secrets and proposals/Product/Secrets", parameters: { layout: "fullscreen", a11y: { diff --git a/ui/storybook/stories/user-secrets.stories.tsx b/ui/storybook/stories/secrets/user-secrets.stories.tsx similarity index 98% rename from ui/storybook/stories/user-secrets.stories.tsx rename to ui/storybook/stories/secrets/user-secrets.stories.tsx index 2244ba4a20..43544b079e 100644 --- a/ui/storybook/stories/user-secrets.stories.tsx +++ b/ui/storybook/stories/secrets/user-secrets.stories.tsx @@ -140,7 +140,8 @@ function Section({ title, children }: { title: string; children: ReactNode }) { } const meta: Meta = { - title: "Product/User secrets", + id: "product-user-secrets", + title: "Apps, channels, and extensions/Secrets and proposals/Product/User secrets", parameters: { layout: "fullscreen", a11y: { test: "off" } }, }; export default meta; diff --git a/ui/storybook/stories/agent-skill-row.stories.tsx b/ui/storybook/stories/skills/agent-skill-row.stories.tsx similarity index 95% rename from ui/storybook/stories/agent-skill-row.stories.tsx rename to ui/storybook/stories/skills/agent-skill-row.stories.tsx index fef898a117..c90f4e411f 100644 --- a/ui/storybook/stories/agent-skill-row.stories.tsx +++ b/ui/storybook/stories/skills/agent-skill-row.stories.tsx @@ -42,7 +42,8 @@ const READONLY: AgentSkillRowData = { }; const meta: Meta = { - title: "Agent Skills/AgentSkillRow", + id: "agent-skills-agentskillrow", + title: "Agents and reusable capabilities/Skills and Skill Studio/Agent Skills/AgentSkillRow", component: AgentSkillRow, parameters: { layout: "padded" }, decorators: [ diff --git a/ui/storybook/stories/agent-skills-edge.stories.tsx b/ui/storybook/stories/skills/agent-skills-edge.stories.tsx similarity index 98% rename from ui/storybook/stories/agent-skills-edge.stories.tsx rename to ui/storybook/stories/skills/agent-skills-edge.stories.tsx index ff04589393..939846b4fd 100644 --- a/ui/storybook/stories/agent-skills-edge.stories.tsx +++ b/ui/storybook/stories/skills/agent-skills-edge.stories.tsx @@ -192,7 +192,8 @@ function EdgeState({ agent, snapshot }: { agent: Agent; snapshot: AgentSkillSnap } const meta: Meta = { - title: "QA / Agent skills edge states", + id: "qa-agent-skills-edge-states", + title: "Agents and reusable capabilities/Skills and Skill Studio/QA / Agent skills edge states", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/agents-using-skill.stories.tsx b/ui/storybook/stories/skills/agents-using-skill.stories.tsx similarity index 97% rename from ui/storybook/stories/agents-using-skill.stories.tsx rename to ui/storybook/stories/skills/agents-using-skill.stories.tsx index f024c2283a..d813286384 100644 --- a/ui/storybook/stories/agents-using-skill.stories.tsx +++ b/ui/storybook/stories/skills/agents-using-skill.stories.tsx @@ -119,7 +119,8 @@ function Seed({ skill, children }: { skill: CompanySkillDetail; children: ReactN } const meta: Meta = { - title: "Skill Studio/AgentsUsingSkill", + id: "skill-studio-agentsusingskill", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/AgentsUsingSkill", parameters: { layout: "centered" }, }; export default meta; diff --git a/ui/storybook/stories/fork-skill-flow.stories.tsx b/ui/storybook/stories/skills/fork-skill-flow.stories.tsx similarity index 98% rename from ui/storybook/stories/fork-skill-flow.stories.tsx rename to ui/storybook/stories/skills/fork-skill-flow.stories.tsx index 1c250e0bd8..c635419c20 100644 --- a/ui/storybook/stories/fork-skill-flow.stories.tsx +++ b/ui/storybook/stories/skills/fork-skill-flow.stories.tsx @@ -152,7 +152,8 @@ function Seed({ } const meta: Meta = { - title: "Skill Studio/EditACopy", + id: "skill-studio-editacopy", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skill Studio/EditACopy", parameters: { layout: "centered" }, }; export default meta; diff --git a/ui/storybook/stories/frontmatter-panel.stories.tsx b/ui/storybook/stories/skills/frontmatter-panel.stories.tsx similarity index 97% rename from ui/storybook/stories/frontmatter-panel.stories.tsx rename to ui/storybook/stories/skills/frontmatter-panel.stories.tsx index f4f510bc26..a09ae7bb3e 100644 --- a/ui/storybook/stories/frontmatter-panel.stories.tsx +++ b/ui/storybook/stories/skills/frontmatter-panel.stories.tsx @@ -66,7 +66,8 @@ metadata: version: 2`; const meta: Meta = { - title: "Product/Skill Studio · FrontmatterPanel", + id: "product-skill-studio-·-frontmatterpanel", + title: "Agents and reusable capabilities/Skills and Skill Studio/Product/Skill Studio · FrontmatterPanel", component: Harness, parameters: { layout: "padded" }, }; diff --git a/ui/storybook/stories/github-skills-journey.stories.tsx b/ui/storybook/stories/skills/github-skills-journey.stories.tsx similarity index 97% rename from ui/storybook/stories/github-skills-journey.stories.tsx rename to ui/storybook/stories/skills/github-skills-journey.stories.tsx index fba52de759..aad4fb527d 100644 --- a/ui/storybook/stories/github-skills-journey.stories.tsx +++ b/ui/storybook/stories/skills/github-skills-journey.stories.tsx @@ -11,7 +11,7 @@ import { SkillStudio } from "@/pages/SkillStudio"; import { PluginLauncherProvider } from "@/plugins/launchers"; import { Link, Route, Routes, useNavigate } from "@/lib/router"; import { queryKeys } from "@/lib/queryKeys"; -import { COMPANY_ID, COMMIT, installFixtures, repositoryCandidates, repositoryFixture, SOURCE_ID } from "../fixtures/githubSkillSources"; +import { COMPANY_ID, COMMIT, installFixtures, repositoryCandidates, repositoryFixture, SOURCE_ID } from "../../fixtures/githubSkillSources"; type Step = "start" | "repository" | "selection" | "imported" | "library" | "detail" | "agents" | "assigned" | "refresh" | "new-skills" | "scanning" | "saving"; const routes: Record = { @@ -89,7 +89,8 @@ export function GitHubSkillsJourney({ step = "start", packageScenario }: { step? } const meta = { - title: "Skills/GitHub sync journey", + id: "skills-github-sync-journey", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub sync journey", component: GitHubSkillsJourney, tags: ["!autodocs"], parameters: { diff --git a/ui/storybook/stories/github-synced-skills.stories.tsx b/ui/storybook/stories/skills/github-synced-skills.stories.tsx similarity index 97% rename from ui/storybook/stories/github-synced-skills.stories.tsx rename to ui/storybook/stories/skills/github-synced-skills.stories.tsx index f73dcd99fa..5fbf0aa45a 100644 --- a/ui/storybook/stories/github-synced-skills.stories.tsx +++ b/ui/storybook/stories/skills/github-synced-skills.stories.tsx @@ -1,7 +1,7 @@ import { userEvent, within } from "storybook/test"; import { useEffect, useState } from "react"; import type { Meta, StoryObj } from "@storybook/react-vite"; -import { COMPANY_ID, SOURCE_ID, installFixtures, type RepositoryScenario } from "../fixtures/githubSkillSources"; +import { COMPANY_ID, SOURCE_ID, installFixtures, type RepositoryScenario } from "../../fixtures/githubSkillSources"; import { Link, Route, Routes, useNavigate } from "@/lib/router"; import { SkillSources } from "@/pages/SkillSources"; @@ -33,7 +33,8 @@ function SourcesStory({ view = "sources", empty = false, needsConnection = false } const meta = { - title: "Skills/GitHub synced skills", + id: "skills-github-synced-skills", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skills/GitHub synced skills", component: SourcesStory, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx b/ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx similarity index 93% rename from ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx rename to ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx index 3e8cb341a1..baf30f5e97 100644 --- a/ui/storybook/stories/repository-skill-packages/repository-skill-packages.stories.tsx +++ b/ui/storybook/stories/skills/repository-skill-packages/repository-skill-packages.stories.tsx @@ -3,7 +3,8 @@ import { userEvent, within } from 'storybook/test'; import { GitHubSkillsJourney } from '../github-skills-journey.stories'; const meta = { - title: 'Skills/Repository packages', component: GitHubSkillsJourney, + id: "skills-repository-packages", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skills/Repository packages", component: GitHubSkillsJourney, tags: ['!autodocs'], parameters: { layout: 'fullscreen', docs: { description: { component: 'Production Skills UI in the app shell with repository fixtures. Repository files stay together. Select which skills appear in your library. No GitHub access or runtime execution occurs in this preview.' } } }, args: { packageScenario: 'ready' }, diff --git a/ui/storybook/stories/skill-import-progress.stories.tsx b/ui/storybook/stories/skills/skill-import-progress.stories.tsx similarity index 90% rename from ui/storybook/stories/skill-import-progress.stories.tsx rename to ui/storybook/stories/skills/skill-import-progress.stories.tsx index fc1d8dda02..77a177d657 100644 --- a/ui/storybook/stories/skill-import-progress.stories.tsx +++ b/ui/storybook/stories/skills/skill-import-progress.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from '@storybook/react-vite'; import { SkillImportProgress } from '@/pages/skills/SkillImportProgress'; -import { candidates } from '../fixtures/githubSkillSources'; +import { candidates } from '../../fixtures/githubSkillSources'; const meta = { - title: 'Skills/Import progress', + id: "skills-import-progress", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skills/Import progress", component: SkillImportProgress, args: { repository: 'acme/team-skills' }, decorators: [Story =>
], diff --git a/ui/storybook/stories/skill-policy-surfaces.stories.tsx b/ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx similarity index 94% rename from ui/storybook/stories/skill-policy-surfaces.stories.tsx rename to ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx index 1b3356d2c1..11b17e2dae 100644 --- a/ui/storybook/stories/skill-policy-surfaces.stories.tsx +++ b/ui/storybook/stories/skills/skill-policy-surfaces.stories.tsx @@ -34,7 +34,8 @@ function Frame({ label, width, children }: { label: string; width: number; child } const meta = { - title: "Product/Skills/Policy surfaces", + id: "product-skills-policy-surfaces", + title: "Agents and reusable capabilities/Skills and Skill Studio/Product/Skills/Policy surfaces", component: SkillPolicyDenialNotice, args: { denial: policyDenial() }, parameters: { diff --git a/ui/storybook/stories/skills-store-detail.stories.tsx b/ui/storybook/stories/skills/skills-store-detail.stories.tsx similarity index 98% rename from ui/storybook/stories/skills-store-detail.stories.tsx rename to ui/storybook/stories/skills/skills-store-detail.stories.tsx index 7d91ba56b0..1661541bb9 100644 --- a/ui/storybook/stories/skills-store-detail.stories.tsx +++ b/ui/storybook/stories/skills/skills-store-detail.stories.tsx @@ -200,7 +200,8 @@ function SkillDetailHarness({ initialTab = "overview" as DetailTab }: { initialT } const meta: Meta = { - title: "Skills Store/Skill detail", + id: "skills-store-skill-detail", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Skill detail", component: SkillDetailHarness, parameters: { layout: "fullscreen" }, }; diff --git a/ui/storybook/stories/skills-store-discovery.stories.tsx b/ui/storybook/stories/skills/skills-store-discovery.stories.tsx similarity index 98% rename from ui/storybook/stories/skills-store-discovery.stories.tsx rename to ui/storybook/stories/skills/skills-store-discovery.stories.tsx index 2bcb7c2c98..3ffb36ab6d 100644 --- a/ui/storybook/stories/skills-store-discovery.stories.tsx +++ b/ui/storybook/stories/skills/skills-store-discovery.stories.tsx @@ -306,7 +306,8 @@ function DiscoveryGridHarness({ } const meta: Meta = { - title: "Skills Store/Discovery grid", + id: "skills-store-discovery-grid", + title: "Agents and reusable capabilities/Skills and Skill Studio/Skills Store/Discovery grid", component: DiscoveryGridHarness, parameters: { layout: "fullscreen" }, }; diff --git a/ui/storybook/stories/composer-queued-messages.stories.tsx b/ui/storybook/stories/steering/composer-queued-messages.stories.tsx similarity index 96% rename from ui/storybook/stories/composer-queued-messages.stories.tsx rename to ui/storybook/stories/steering/composer-queued-messages.stories.tsx index b2dfe5a561..d23c3ba4c9 100644 --- a/ui/storybook/stories/composer-queued-messages.stories.tsx +++ b/ui/storybook/stories/steering/composer-queued-messages.stories.tsx @@ -4,7 +4,7 @@ import { expect, userEvent, within } from "storybook/test"; import type { IssueQueuedCommentEntry, IssueQueuedCommentQueue } from "@paperclipai/shared"; import { TaskChatComposer } from "@/components/task-chat/TaskChatComposer"; import { TaskChatQueuedMessages } from "@/components/task-chat/TaskChatQueuedMessages"; -import { composerAgentAppearance, composerAgents } from "../prototypes/composer-model-picker/fixtures"; +import { composerAgentAppearance, composerAgents } from "../../prototypes/composer-model-picker/fixtures"; const agentMap = new Map(composerAgents.map((agent) => [agent.id, { id: agent.id, @@ -127,7 +127,8 @@ function QueuedComposer({ protocol, steeringDisposition, initialEdit, mobile }: } const meta = { - title: "Composer/Steering and queued messages", + id: "composer-steering-and-queued-messages", + title: "Tasks and conversations/Steering and queued messages/Composer/Steering and queued messages", component: QueuedComposer, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/interrupt-handoff.stories.tsx b/ui/storybook/stories/steering/interrupt-handoff.stories.tsx similarity index 98% rename from ui/storybook/stories/interrupt-handoff.stories.tsx rename to ui/storybook/stories/steering/interrupt-handoff.stories.tsx index 9c1f2f0c9d..dd15023b49 100644 --- a/ui/storybook/stories/interrupt-handoff.stories.tsx +++ b/ui/storybook/stories/steering/interrupt-handoff.stories.tsx @@ -101,7 +101,8 @@ function ActivityCard({ } const meta: Meta = { - title: "Surfaces/Interrupt Handoff", + id: "surfaces-interrupt-handoff", + title: "Tasks and conversations/Steering and queued messages/Surfaces/Interrupt Handoff", }; export default meta; diff --git a/ui/storybook/stories/paused-composer.stories.tsx b/ui/storybook/stories/steering/paused-composer.stories.tsx similarity index 85% rename from ui/storybook/stories/paused-composer.stories.tsx rename to ui/storybook/stories/steering/paused-composer.stories.tsx index 83670ad3fa..e5582e6407 100644 --- a/ui/storybook/stories/paused-composer.stories.tsx +++ b/ui/storybook/stories/steering/paused-composer.stories.tsx @@ -1,8 +1,9 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { PausedComposerPreview } from "../prototypes/PausedTaskComposer"; +import { PausedComposerPreview } from "../../prototypes/PausedTaskComposer"; const meta = { - title: "Composer/Paused task takeover", + id: "composer-paused-task-takeover", + title: "Tasks and conversations/Steering and queued messages/Composer/Paused task takeover", component: PausedComposerPreview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/task-execution-controls.stories.tsx b/ui/storybook/stories/steering/task-execution-controls.stories.tsx similarity index 99% rename from ui/storybook/stories/task-execution-controls.stories.tsx rename to ui/storybook/stories/steering/task-execution-controls.stories.tsx index 27d72d4340..735fff914a 100644 --- a/ui/storybook/stories/task-execution-controls.stories.tsx +++ b/ui/storybook/stories/steering/task-execution-controls.stories.tsx @@ -318,7 +318,8 @@ function TaskExecutionExample({ } const meta = { - title: "Composer/Execution controls", + id: "composer-execution-controls", + title: "Tasks and conversations/Steering and queued messages/Composer/Execution controls", component: TaskExecutionExample, parameters: { layout: "padded" }, } satisfies Meta; diff --git a/ui/storybook/stories/issue-review-panel.stories.tsx b/ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx similarity index 95% rename from ui/storybook/stories/issue-review-panel.stories.tsx rename to ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx index 7aada79bd0..22638d9abf 100644 --- a/ui/storybook/stories/issue-review-panel.stories.tsx +++ b/ui/storybook/stories/task-coordination/issue-review-panel.stories.tsx @@ -83,7 +83,8 @@ const stalledReviewRow: AttentionItem = { }; const meta = { - title: "Product/Decisions/Stalled review actions", + id: "product-decisions-stalled-review-actions", + title: "Tasks and conversations/Delegation, dependencies, and signoff/Product/Decisions/Stalled review actions", component: AttentionQueueRow, args: { item: stalledReviewRow, diff --git a/ui/storybook/stories/monitor-surfaces.stories.tsx b/ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx similarity index 98% rename from ui/storybook/stories/monitor-surfaces.stories.tsx rename to ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx index 92bc8b219d..09357f19d7 100644 --- a/ui/storybook/stories/monitor-surfaces.stories.tsx +++ b/ui/storybook/stories/task-coordination/monitor-surfaces.stories.tsx @@ -6,7 +6,7 @@ import { storybookExecutionWorkspaces, storybookIssueDocuments, storybookIssues, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const issueDocumentSummaries = storybookIssueDocuments.map(({ body: _body, ...summary }) => summary); @@ -310,7 +310,8 @@ function MonitorSurfaceStories() { } const meta = { - title: "Product/Issue Monitor surfaces", + id: "product-issue-monitor-surfaces", + title: "Tasks and conversations/Delegation, dependencies, and signoff/Product/Issue Monitor surfaces", component: MonitorSurfaceStories, parameters: { docs: { diff --git a/ui/storybook/stories/originating-tasks.stories.tsx b/ui/storybook/stories/task-coordination/originating-tasks.stories.tsx similarity index 91% rename from ui/storybook/stories/originating-tasks.stories.tsx rename to ui/storybook/stories/task-coordination/originating-tasks.stories.tsx index 4d4ee45194..a7932689b5 100644 --- a/ui/storybook/stories/originating-tasks.stories.tsx +++ b/ui/storybook/stories/task-coordination/originating-tasks.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { PluginLauncherProvider } from "@/plugins/launchers"; -import { OriginatingTasksReview, SeedData } from "../prototypes/originating-tasks/OriginatingTasks"; +import { OriginatingTasksReview, SeedData } from "../../prototypes/originating-tasks/OriginatingTasks"; const meta = { - title: "UX Labs/Tasks Created From a Task", + id: "ux-labs-tasks-created-from-a-task", + title: "Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Tasks Created From a Task", component: OriginatingTasksReview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/sub-issues-workflow.stories.tsx b/ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx similarity index 97% rename from ui/storybook/stories/sub-issues-workflow.stories.tsx rename to ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx index 4f4132d440..c35e4874b8 100644 --- a/ui/storybook/stories/sub-issues-workflow.stories.tsx +++ b/ui/storybook/stories/task-coordination/sub-issues-workflow.stories.tsx @@ -11,7 +11,7 @@ import { storybookCompanies, storybookIssueLabels, storybookProjects, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const companyId = "company-storybook"; const parentId = "issue-pap-1953"; @@ -254,7 +254,8 @@ function SubIssuesWorkflowPanel() { } const meta = { - title: "UX Labs/Sub-issues Workflow Checklist", + id: "ux-labs-sub-issues-workflow-checklist", + title: "Tasks and conversations/Delegation, dependencies, and signoff/UX Labs/Sub-issues Workflow Checklist", component: SubIssuesWorkflowPanel, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/task-watchdog-surfaces.stories.tsx b/ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx similarity index 95% rename from ui/storybook/stories/task-watchdog-surfaces.stories.tsx rename to ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx index 0ca142fa57..3530f65f1d 100644 --- a/ui/storybook/stories/task-watchdog-surfaces.stories.tsx +++ b/ui/storybook/stories/task-coordination/task-watchdog-surfaces.stories.tsx @@ -5,7 +5,7 @@ import { storybookExecutionWorkspaces, storybookIssueDocuments, storybookIssues, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const issueDocumentSummaries = storybookIssueDocuments.map(({ body: _body, ...summary }) => summary); @@ -102,7 +102,8 @@ function WatchdogSurfaceStories() { } const meta = { - title: "Product/Task Watchdog surfaces", + id: "product-task-watchdog-surfaces", + title: "Tasks and conversations/Delegation, dependencies, and signoff/Product/Task Watchdog surfaces", component: WatchdogSurfaceStories, parameters: { docs: { diff --git a/ui/storybook/stories/assigned-backlog-safeguards.stories.tsx b/ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx similarity index 97% rename from ui/storybook/stories/assigned-backlog-safeguards.stories.tsx rename to ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx index 47f4002662..78680e6490 100644 --- a/ui/storybook/stories/assigned-backlog-safeguards.stories.tsx +++ b/ui/storybook/stories/tasks/assigned-backlog-safeguards.stories.tsx @@ -5,7 +5,7 @@ import type { IssueRelationIssueSummary } from "@paperclipai/shared"; import { IssueAssignedBacklogNotice } from "@/components/IssueAssignedBacklogNotice"; import { IssueBlockedNotice } from "@/components/IssueBlockedNotice"; import { IssueRow } from "@/components/IssueRow"; -import { storybookAgents, createIssue } from "../fixtures/paperclipData"; +import { storybookAgents, createIssue } from "../../fixtures/paperclipData"; const codexAgent = storybookAgents.find((agent) => agent.id === "agent-codex") ?? storybookAgents[0]!; const qaAgent = storybookAgents.find((agent) => agent.id === "agent-qa") ?? storybookAgents[0]!; @@ -205,7 +205,8 @@ function AllStates() { } const meta = { - title: "Paperclip/Assigned Backlog Safeguards", + id: "paperclip-assigned-backlog-safeguards", + title: "Tasks and conversations/Task creation and lifecycle/Paperclip/Assigned Backlog Safeguards", component: AllStates, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/chat-comments.stories.tsx b/ui/storybook/stories/tasks/chat-comments.stories.tsx similarity index 98% rename from ui/storybook/stories/chat-comments.stories.tsx rename to ui/storybook/stories/tasks/chat-comments.stories.tsx index 8762c4d1f1..ba2bbd8d0c 100644 --- a/ui/storybook/stories/chat-comments.stories.tsx +++ b/ui/storybook/stories/tasks/chat-comments.stories.tsx @@ -16,7 +16,7 @@ import type { IssueChatTranscriptEntry, } from "@/lib/issue-chat-messages"; import type { IssueTimelineEvent } from "@/lib/issue-timeline-events"; -import { storybookAgentMap, storybookAgents } from "../fixtures/paperclipData"; +import { storybookAgentMap, storybookAgents } from "../../fixtures/paperclipData"; const companyId = "company-storybook"; const projectId = "project-board-ui"; @@ -361,7 +361,7 @@ const liveRunTranscript: TranscriptEntry[] = [ name: "apply_patch", toolUseId: "tool-live-patch", input: { - file: "ui/storybook/stories/chat-comments.stories.tsx", + file: "ui/storybook/stories/tasks/chat-comments.stories.tsx", action: "add fixtures", }, }, @@ -557,7 +557,7 @@ const issueTranscriptsByRunId = new Map [agent.id, { id: agent.id, @@ -108,7 +108,8 @@ function ComposerAddStory({ initialMode, goalAvailable, mobile, mobileContext, f } const meta = { - title: "Composer/Add menu", + id: "composer-add-menu", + title: "Tasks and conversations/Task creation and lifecycle/Composer/Add menu", component: ComposerAddStory, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/composer-mobile-assignee.stories.tsx b/ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx similarity index 84% rename from ui/storybook/stories/composer-mobile-assignee.stories.tsx rename to ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx index 1f5f8d70b1..d72f59ff0b 100644 --- a/ui/storybook/stories/composer-mobile-assignee.stories.tsx +++ b/ui/storybook/stories/tasks/composer-mobile-assignee.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, within } from "storybook/test"; -import { ComposerRunSettingsLiveStory } from "../prototypes/composer-model-picker/ComposerRunSettingsLiveStory"; +import { ComposerRunSettingsLiveStory } from "../../prototypes/composer-model-picker/ComposerRunSettingsLiveStory"; const meta = { - title: "Composer/Mobile assignee picker", + id: "composer-mobile-assignee-picker", + title: "Tasks and conversations/Task creation and lifecycle/Composer/Mobile assignee picker", component: ComposerRunSettingsLiveStory, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/composer-model-picker.stories.tsx b/ui/storybook/stories/tasks/composer-model-picker.stories.tsx similarity index 98% rename from ui/storybook/stories/composer-model-picker.stories.tsx rename to ui/storybook/stories/tasks/composer-model-picker.stories.tsx index b99938b62f..6f3ff35732 100644 --- a/ui/storybook/stories/composer-model-picker.stories.tsx +++ b/ui/storybook/stories/tasks/composer-model-picker.stories.tsx @@ -1,10 +1,11 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { expect, userEvent, within } from "storybook/test"; -import { ComposerModelPickerPreview } from "../prototypes/composer-model-picker/ComposerModelPickerPreview"; -import { ComposerRunSettingsLiveStory } from "../prototypes/composer-model-picker/ComposerRunSettingsLiveStory"; +import { ComposerModelPickerPreview } from "../../prototypes/composer-model-picker/ComposerModelPickerPreview"; +import { ComposerRunSettingsLiveStory } from "../../prototypes/composer-model-picker/ComposerRunSettingsLiveStory"; const meta = { - title: "Composer/Model and effort picker", + id: "composer-model-and-effort-picker", + title: "Tasks and conversations/Task creation and lifecycle/Composer/Model and effort picker", component: ComposerModelPickerPreview, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/control-plane-surfaces.stories.tsx b/ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx similarity index 98% rename from ui/storybook/stories/control-plane-surfaces.stories.tsx rename to ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx index 98e4a1fc5c..13b559243f 100644 --- a/ui/storybook/stories/control-plane-surfaces.stories.tsx +++ b/ui/storybook/stories/tasks/control-plane-surfaces.stories.tsx @@ -18,7 +18,7 @@ import { storybookEntityNameMap, storybookEntityTitleMap, storybookIssues, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; function Section({ eyebrow, @@ -247,7 +247,8 @@ function ControlPlaneSurfaces() { } const meta = { - title: "Product/Control Plane Surfaces", + id: "product-control-plane-surfaces", + title: "Tasks and conversations/Task creation and lifecycle/Product/Control Plane Surfaces", component: ControlPlaneSurfaces, parameters: { docs: { diff --git a/ui/storybook/stories/dialogs-modals.stories.tsx b/ui/storybook/stories/tasks/dialogs-modals.stories.tsx similarity index 99% rename from ui/storybook/stories/dialogs-modals.stories.tsx rename to ui/storybook/stories/tasks/dialogs-modals.stories.tsx index 60d7ba8063..3eb5327e95 100644 --- a/ui/storybook/stories/dialogs-modals.stories.tsx +++ b/ui/storybook/stories/tasks/dialogs-modals.stories.tsx @@ -30,7 +30,7 @@ import { storybookIssueLabels, storybookIssues, storybookProjects, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; const SELECTED_COMPANY_STORAGE_KEY = "paperclip.selectedCompanyId"; @@ -674,7 +674,8 @@ function PathInstructionsModalStory() { } const meta = { - title: "Product/Dialogs & Modals", + id: "product-dialogs-modals", + title: "Tasks and conversations/Task creation and lifecycle/Product/Dialogs & Modals", parameters: { docs: { description: { diff --git a/ui/storybook/stories/external-objects.stories.tsx b/ui/storybook/stories/tasks/external-objects.stories.tsx similarity index 99% rename from ui/storybook/stories/external-objects.stories.tsx rename to ui/storybook/stories/tasks/external-objects.stories.tsx index e0e91816da..7e45ad9b13 100644 --- a/ui/storybook/stories/external-objects.stories.tsx +++ b/ui/storybook/stories/tasks/external-objects.stories.tsx @@ -35,7 +35,7 @@ import { storybookIssueLabels, storybookIssues, storybookProjects, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; function makeObject(args: { id: string; @@ -672,7 +672,8 @@ function IntegrationSurfacesStory() { } const meta = { - title: "Foundations/External Objects", + id: "foundations-external-objects", + title: "Tasks and conversations/Task creation and lifecycle/External Objects", component: StateMatrixStory, parameters: { docs: { diff --git a/ui/storybook/stories/issue-management.stories.tsx b/ui/storybook/stories/tasks/issue-management.stories.tsx similarity index 99% rename from ui/storybook/stories/issue-management.stories.tsx rename to ui/storybook/stories/tasks/issue-management.stories.tsx index e1774d82d9..ae060fdb15 100644 --- a/ui/storybook/stories/issue-management.stories.tsx +++ b/ui/storybook/stories/tasks/issue-management.stories.tsx @@ -49,7 +49,7 @@ import { storybookIssueRuns, storybookIssues, storybookProjects, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const companyId = "company-storybook"; const issueListViewKey = "storybook:issue-management:list"; @@ -872,7 +872,8 @@ function IssueManagementStories() { } const meta = { - title: "Product/Issue Management", + id: "product-issue-management", + title: "Tasks and conversations/Task creation and lifecycle/Product/Issue Management", component: IssueManagementStories, parameters: { docs: { diff --git a/ui/storybook/stories/mobile-entity-pickers.stories.tsx b/ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx similarity index 94% rename from ui/storybook/stories/mobile-entity-pickers.stories.tsx rename to ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx index ea06c277d4..f01c3efadc 100644 --- a/ui/storybook/stories/mobile-entity-pickers.stories.tsx +++ b/ui/storybook/stories/tasks/mobile-entity-pickers.stories.tsx @@ -41,7 +41,8 @@ function OpenPicker({ kind, options }: { kind: "Assignee" | "Project"; options: } const meta = { - title: "Components/Entity pickers/Mobile", + id: "components-entity-pickers-mobile", + title: "Tasks and conversations/Task creation and lifecycle/Components/Entity pickers/Mobile", parameters: { layout: "fullscreen", viewport: { defaultViewport: "mobile1" }, diff --git a/ui/storybook/stories/new-task-composer.stories.tsx b/ui/storybook/stories/tasks/new-task-composer.stories.tsx similarity index 99% rename from ui/storybook/stories/new-task-composer.stories.tsx rename to ui/storybook/stories/tasks/new-task-composer.stories.tsx index 73fd9a8275..5cebf9df7b 100644 --- a/ui/storybook/stories/new-task-composer.stories.tsx +++ b/ui/storybook/stories/tasks/new-task-composer.stories.tsx @@ -25,7 +25,7 @@ import { storybookExecutionWorkspaces, storybookProjects, storybookIssues, -} from "../fixtures/paperclipData"; +} from "../../fixtures/paperclipData"; const COMPANY_ID = "company-storybook"; const NEW_TASK_AGENTS = [...storybookAgents, { ...storybookAgents[2]!, id: "agent-ceo", name: "CEO", role: "ceo" }].map((agent) => @@ -203,7 +203,8 @@ function NewTaskStory({ } const meta = { - title: "Composer/New task", + id: "composer-new-task", + title: "Tasks and conversations/Task creation and lifecycle/Composer/New task", component: NewTaskStory, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/runner-activity.stories.tsx b/ui/storybook/stories/tasks/runner-activity.stories.tsx similarity index 93% rename from ui/storybook/stories/runner-activity.stories.tsx rename to ui/storybook/stories/tasks/runner-activity.stories.tsx index 17aea163b4..829817578a 100644 --- a/ui/storybook/stories/runner-activity.stories.tsx +++ b/ui/storybook/stories/tasks/runner-activity.stories.tsx @@ -1,9 +1,10 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; import { MINIMAL_VIEWPORTS } from "storybook/viewport"; -import { RunnerActivityPreview } from "../prototypes/runner-activity/RunnerActivityPreview"; +import { RunnerActivityPreview } from "../../prototypes/runner-activity/RunnerActivityPreview"; const meta = { - title: "Tasks/Runner activity preview", + id: "tasks-runner-activity-preview", + title: "Tasks and conversations/Task creation and lifecycle/Tasks/Runner activity preview", component: RunnerActivityPreview, globals: { viewport: { value: "desktop", isRotated: false } }, parameters: { diff --git a/ui/storybook/stories/successful-run-handoff.stories.tsx b/ui/storybook/stories/tasks/successful-run-handoff.stories.tsx similarity index 97% rename from ui/storybook/stories/successful-run-handoff.stories.tsx rename to ui/storybook/stories/tasks/successful-run-handoff.stories.tsx index 18085a7dee..5044a46281 100644 --- a/ui/storybook/stories/successful-run-handoff.stories.tsx +++ b/ui/storybook/stories/tasks/successful-run-handoff.stories.tsx @@ -13,7 +13,7 @@ import { SUCCESSFUL_RUN_HANDOFF_RESOLVED_ACTION, successfulRunHandoffActivityTone, } from "@/lib/successful-run-handoff"; -import { createIssue, storybookAgents } from "../fixtures/paperclipData"; +import { createIssue, storybookAgents } from "../../fixtures/paperclipData"; function ActivityExample({ action }: { action: string }) { const tone = successfulRunHandoffActivityTone(action); @@ -238,7 +238,8 @@ function SuccessfulRunHandoffEscalationComment() { } const meta = { - title: "Paperclip/Successful Run Handoff", + id: "paperclip-successful-run-handoff", + title: "Tasks and conversations/Task creation and lifecycle/Paperclip/Successful Run Handoff", component: SuccessfulRunHandoffStates, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/task-chat-chain-of-thought.stories.tsx b/ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx similarity index 97% rename from ui/storybook/stories/task-chat-chain-of-thought.stories.tsx rename to ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx index 4719d135fc..a2346dab7d 100644 --- a/ui/storybook/stories/task-chat-chain-of-thought.stories.tsx +++ b/ui/storybook/stories/tasks/task-chat-chain-of-thought.stories.tsx @@ -159,7 +159,8 @@ function ReconnectingAlignmentReview() { } const meta = { - title: "Tasks/Task chat review fixes", + id: "tasks-task-chat-review-fixes", + title: "Tasks and conversations/Task creation and lifecycle/Tasks/Task chat review fixes", component: ChainOfThoughtReview, parameters: { layout: "padded" }, } satisfies Meta; diff --git a/ui/storybook/stories/task-chat-mobile-follow.stories.tsx b/ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx similarity index 95% rename from ui/storybook/stories/task-chat-mobile-follow.stories.tsx rename to ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx index 1fb4d9b3ca..9454036c6e 100644 --- a/ui/storybook/stories/task-chat-mobile-follow.stories.tsx +++ b/ui/storybook/stories/tasks/task-chat-mobile-follow.stories.tsx @@ -44,7 +44,8 @@ function MobileFollow() { } const meta = { - title: "Task chat/Mobile streaming follow", + id: "task-chat-mobile-streaming-follow", + title: "Tasks and conversations/Task creation and lifecycle/Task chat/Mobile streaming follow", component: MobileFollow, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/task-chat-system-notice.stories.tsx b/ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx similarity index 94% rename from ui/storybook/stories/task-chat-system-notice.stories.tsx rename to ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx index 553e8e24de..13c138382d 100644 --- a/ui/storybook/stories/task-chat-system-notice.stories.tsx +++ b/ui/storybook/stories/tasks/task-chat-system-notice.stories.tsx @@ -53,7 +53,8 @@ function StoryFrame({ item }: { item: TaskChatMessageItem }) { } const meta = { - title: "Product/Task chat/System notice", + id: "product-task-chat-system-notice", + title: "Tasks and conversations/Task creation and lifecycle/Product/Task chat/System notice", component: TaskChatSystemNotice, args: { item: workspaceReadyItem, diff --git a/ui/storybook/stories/task-context-notices.stories.tsx b/ui/storybook/stories/tasks/task-context-notices.stories.tsx similarity index 96% rename from ui/storybook/stories/task-context-notices.stories.tsx rename to ui/storybook/stories/tasks/task-context-notices.stories.tsx index f92b8ffaaa..945085fb20 100644 --- a/ui/storybook/stories/task-context-notices.stories.tsx +++ b/ui/storybook/stories/tasks/task-context-notices.stories.tsx @@ -45,7 +45,8 @@ function TaskContextNotices() { } const meta = { - title: "Tasks/Context notices", + id: "tasks-context-notices", + title: "Tasks and conversations/Task creation and lifecycle/Tasks/Context notices", component: TaskContextNotices, parameters: { layout: "fullscreen" }, } satisfies Meta; diff --git a/ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx b/ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx similarity index 85% rename from ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx rename to ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx index 13089428ae..db6f71466b 100644 --- a/ui/storybook/stories/thread-human-identity/00-evidence.stories.tsx +++ b/ui/storybook/stories/tasks/thread-human-identity/00-evidence.stories.tsx @@ -1,5 +1,5 @@ import type { Meta, StoryObj } from "@storybook/react-vite"; -import { humanMessages, profiles } from "./fixtures"; +import { humanMessages, profiles } from "../../../support/thread-human-identity/fixtures"; function ReviewGuide() { return

Human identity in a mixed task conversation

@@ -10,5 +10,6 @@ function ReviewGuide() {

These are representative fixtures, not a copy of private task data. The mixed journey uses the production shell, adapter, thread, and composer. Swap the viewer to verify that ownership follows authorUserId. Full Conversation includes all fixture messages. Sending is local to the preview.

; } -export default { title: "Chat & Comments/Human identity/00 Review guide", component: ReviewGuide } satisfies Meta; +export default { id: "chat-comments-human-identity-00-review-guide", + title: "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/00 Review guide", component: ReviewGuide } satisfies Meta; export const DataFlow: StoryObj = {}; diff --git a/ui/storybook/stories/thread-human-identity/01-components.stories.tsx b/ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx similarity index 88% rename from ui/storybook/stories/thread-human-identity/01-components.stories.tsx rename to ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx index db5af49ab9..f95ac6e2b6 100644 --- a/ui/storybook/stories/thread-human-identity/01-components.stories.tsx +++ b/ui/storybook/stories/tasks/thread-human-identity/01-components.stories.tsx @@ -3,7 +3,7 @@ import { expect, within } from "storybook/test"; import { TaskChatBubble } from "@/components/task-chat/TaskChatBubble"; import { commentsToTaskChatItems } from "@/components/task-chat/task-chat-adapter"; import type { TaskChatMessageItem } from "@/components/task-chat/task-chat-model"; -import { comments, profiles, alexId, samId } from "./fixtures"; +import { comments, profiles, alexId, samId } from "../../../support/thread-human-identity/fixtures"; function Bubble({ viewer = alexId, photo = null, unresolved = false }: { viewer?: string; photo?: string | null; unresolved?: boolean }) { const userProfileMap = new Map(profiles); @@ -12,7 +12,8 @@ function Bubble({ viewer = alexId, photo = null, unresolved = false }: { viewer? return
; } const meta = { - title: "Chat & Comments/Human identity/01 Components", component: Bubble, + id: "chat-comments-human-identity-01-components", + title: "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/01 Components", component: Bubble, args: { viewer: alexId, photo: null }, parameters: { layout: "padded", docs: { description: { component: "Production adapter → model → TaskChatBubble → Identity. Other humans sit on the left on the same page surface as agents with their own name/photo; no-photo profiles use the shared initials fallback. Edit photo to exercise an uploaded Paperclip asset URL. External URLs use initials. The production avatar URL is taken from the company directory, never from the current viewer or the relay bot." } } }, } satisfies Meta; diff --git a/ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx b/ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx similarity index 93% rename from ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx rename to ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx index ae6dd2699b..0fea4b3e70 100644 --- a/ui/storybook/stories/thread-human-identity/02-task-journey.stories.tsx +++ b/ui/storybook/stories/tasks/thread-human-identity/02-task-journey.stories.tsx @@ -7,8 +7,8 @@ import { Layout } from "@/components/Layout"; import { TaskChatThread } from "@/components/TaskChatThread"; import { PluginLauncherProvider } from "@/plugins/launchers"; import { queryKeys } from "@/lib/queryKeys"; -import { storybookAuthSession } from "../../fixtures/paperclipData"; -import { mixedComments as initialComments, profiles, alexId, samId, issueId, agentMap } from "./fixtures"; +import { storybookAuthSession } from "../../../fixtures/paperclipData"; +import { mixedComments as initialComments, profiles, alexId, samId, issueId, agentMap } from "../../../support/thread-human-identity/fixtures"; function Conversation({ viewer = alexId, fullHistory = false }: { viewer?: string; fullHistory?: boolean }) { const [comments, setComments] = useState(() => fullHistory ? initialComments : [...initialComments.slice(0, 2), ...initialComments.slice(-2)]); @@ -43,7 +43,8 @@ function Journey(props: { viewer?: string; fullHistory?: boolean }) {
; } const meta = { - title: "Chat & Comments/Human identity/02 Mixed-author journey", component: Journey, + id: "chat-comments-human-identity-02-mixed-author-journey", + title: "Tasks and conversations/Task creation and lifecycle/Chat & Comments/Human identity/02 Mixed-author journey", component: Journey, args: { viewer: alexId, fullHistory: false }, parameters: { layout: "fullscreen", initialEntries: ["/PAP/issues/human-identity-example"], docs: { story: { inline: false }, description: { component: "Representative turns from two humans and an agent in the production app shell and TaskChatThread, including its composer. Photos remain null so the shared initials fallback is visible. Swap the viewer: identity follows authorUserId. The default excerpt fits all three speakers in one view; Full Conversation includes all fixture messages. Sending is local to this preview." } } }, } satisfies Meta; diff --git a/ui/storybook/stories/team-catalog.stories.tsx b/ui/storybook/stories/teams/team-catalog.stories.tsx similarity index 99% rename from ui/storybook/stories/team-catalog.stories.tsx rename to ui/storybook/stories/teams/team-catalog.stories.tsx index 922f1cf304..f4359fb4b3 100644 --- a/ui/storybook/stories/team-catalog.stories.tsx +++ b/ui/storybook/stories/teams/team-catalog.stories.tsx @@ -139,7 +139,8 @@ function Frame({ children, width = "max-w-3xl" }: { children: React.ReactNode; w } const meta: Meta = { - title: "Surfaces/Team Catalog", + id: "surfaces-team-catalog", + title: "Agents and reusable capabilities/Team packages and installation/Surfaces/Team Catalog", }; export default meta; type Story = StoryObj; diff --git a/ui/storybook/stories/browser-use-activity.stories.tsx b/ui/storybook/stories/workspaces/browser-use-activity.stories.tsx similarity index 94% rename from ui/storybook/stories/browser-use-activity.stories.tsx rename to ui/storybook/stories/workspaces/browser-use-activity.stories.tsx index 1554a7a8b6..bd35955502 100644 --- a/ui/storybook/stories/browser-use-activity.stories.tsx +++ b/ui/storybook/stories/workspaces/browser-use-activity.stories.tsx @@ -8,9 +8,10 @@ import { BrowserStoryProviders, InteractiveBrowserStory, mockBrowserUse, -} from "../fixtures/browser-use"; +} from "../../fixtures/browser-use"; const meta = { - title: "Tasks/Browser Use/Task activity", + id: "tasks-browser-use-task-activity", + title: "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Task activity", component: TaskBrowserActivity, parameters: { layout: "centered", diff --git a/ui/storybook/stories/browser-use-footer.stories.tsx b/ui/storybook/stories/workspaces/browser-use-footer.stories.tsx similarity index 96% rename from ui/storybook/stories/browser-use-footer.stories.tsx rename to ui/storybook/stories/workspaces/browser-use-footer.stories.tsx index f62b4f75a5..a51134420f 100644 --- a/ui/storybook/stories/browser-use-footer.stories.tsx +++ b/ui/storybook/stories/workspaces/browser-use-footer.stories.tsx @@ -7,7 +7,7 @@ import type { TaskBrowser, } from "@paperclipai/shared"; import { TaskBrowserFooter } from "@/components/task-side-panel/TaskBrowserFooter"; -import { browserFixture } from "../fixtures/browser-use"; +import { browserFixture } from "../../fixtures/browser-use"; const now = Date.parse("2026-09-29T16:00:00Z"); const idle = (seconds: number): TaskBrowser => ({ ...browserFixture, @@ -15,7 +15,8 @@ const idle = (seconds: number): TaskBrowser => ({ idleDeadline: new Date(now + seconds * 1000).toISOString(), }); const meta = { - title: "Tasks/Browser Use/Footer", + id: "tasks-browser-use-footer", + title: "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Footer", component: TaskBrowserFooter, parameters: { layout: "centered", diff --git a/ui/storybook/stories/browser-use.stories.tsx b/ui/storybook/stories/workspaces/browser-use.stories.tsx similarity index 97% rename from ui/storybook/stories/browser-use.stories.tsx rename to ui/storybook/stories/workspaces/browser-use.stories.tsx index 608054f1db..f132beed51 100644 --- a/ui/storybook/stories/browser-use.stories.tsx +++ b/ui/storybook/stories/workspaces/browser-use.stories.tsx @@ -4,17 +4,18 @@ import { expect, userEvent, within } from "storybook/test"; import type { Meta, StoryObj } from "@storybook/react-vite"; import { TaskSidePanel } from "@/components/task-side-panel/TaskSidePanel"; import { TaskBrowserPanel } from "@/components/task-side-panel/TaskBrowserPanel"; -import { storybookIssues } from "../fixtures/paperclipData"; +import { storybookIssues } from "../../fixtures/paperclipData"; import { BrowserStoryProviders, InteractiveBrowserStory, browserFixture, browserState, mockBrowserUse, -} from "../fixtures/browser-use"; +} from "../../fixtures/browser-use"; const meta = { - title: "Tasks/Browser Use/Panel", + id: "tasks-browser-use-panel", + title: "Projects and execution/Workspaces, services, and files/Tasks/Browser Use/Panel", component: TaskBrowserPanel, parameters: { layout: "fullscreen", diff --git a/ui/storybook/stories/searchable-select.stories.tsx b/ui/storybook/stories/workspaces/searchable-select.stories.tsx similarity index 98% rename from ui/storybook/stories/searchable-select.stories.tsx rename to ui/storybook/stories/workspaces/searchable-select.stories.tsx index 12d657245e..1600f40fca 100644 --- a/ui/storybook/stories/searchable-select.stories.tsx +++ b/ui/storybook/stories/workspaces/searchable-select.stories.tsx @@ -185,7 +185,8 @@ function FormContext({ triggerClassName }: { triggerClassName?: string }) { } const meta = { - title: "Components/SearchableSelect/Workspace picker", + id: "components-searchableselect-workspace-picker", + title: "Projects and execution/Workspaces, services, and files/Components/SearchableSelect/Workspace picker", parameters: { layout: "centered" }, } satisfies Meta; diff --git a/ui/storybook/stories/workspace-file-browser.stories.tsx b/ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx similarity index 98% rename from ui/storybook/stories/workspace-file-browser.stories.tsx rename to ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx index b33d8eda98..72bc848e76 100644 --- a/ui/storybook/stories/workspace-file-browser.stories.tsx +++ b/ui/storybook/stories/workspaces/workspace-file-browser.stories.tsx @@ -197,7 +197,8 @@ function Placement() { } const meta: Meta = { - title: "Issue/Workspace File Browser", + id: "issue-workspace-file-browser", + title: "Projects and execution/Workspaces, services, and files/Issue/Workspace File Browser", parameters: { layout: "fullscreen" }, }; export default meta; diff --git a/ui/storybook/stories/workspace-runtime-provisioning.stories.tsx b/ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx similarity index 95% rename from ui/storybook/stories/workspace-runtime-provisioning.stories.tsx rename to ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx index edfe1f6ccf..7dfdcc6c46 100644 --- a/ui/storybook/stories/workspace-runtime-provisioning.stories.tsx +++ b/ui/storybook/stories/workspaces/workspace-runtime-provisioning.stories.tsx @@ -37,7 +37,8 @@ function ContextCard({ status }: { status: RuntimeProvisionStatus }) { } const meta: Meta = { - title: "Workspaces/Runtime provisioning status", + id: "workspaces-runtime-provisioning-status", + title: "Projects and execution/Workspaces, services, and files/Workspaces/Runtime provisioning status", component: RuntimeProvisionStatusValue, parameters: { layout: "padded" }, }; diff --git a/ui/storybook/stories/workspace-service-control-bar.stories.tsx b/ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx similarity index 97% rename from ui/storybook/stories/workspace-service-control-bar.stories.tsx rename to ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx index 62aef3243a..f542218f38 100644 --- a/ui/storybook/stories/workspace-service-control-bar.stories.tsx +++ b/ui/storybook/stories/workspaces/workspace-service-control-bar.stories.tsx @@ -20,7 +20,8 @@ function entry(overrides: Partial = {}): Workspace } const meta: Meta = { - title: "Workspaces/Service control bar", + id: "workspaces-service-control-bar", + title: "Projects and execution/Workspaces, services, and files/Workspaces/Service control bar", component: WorkspaceServiceControlBar, parameters: { layout: "padded", diff --git a/ui/storybook/stories/artifact-cards/README.md b/ui/storybook/support/artifact-cards/README.md similarity index 96% rename from ui/storybook/stories/artifact-cards/README.md rename to ui/storybook/support/artifact-cards/README.md index 76d9d8f0d5..6734b88c4b 100644 --- a/ui/storybook/stories/artifact-cards/README.md +++ b/ui/storybook/support/artifact-cards/README.md @@ -1,6 +1,6 @@ # Artifact cards -Storybook: **Explorations → Artifact cards**. Each story renders one production +Storybook: **Tasks and conversations → Documents, attachments, and work products → Explorations → Artifact cards**. Each story renders one production card from `ui/src/components/artifacts/RichArtifactCards.tsx`. All example titles, authors, content, filenames, repository names, and URLs live in story args. Use **Controls** to edit values, including Markdown bodies and JSON table data. diff --git a/ui/storybook/stories/artifact-cards/storyConfig.tsx b/ui/storybook/support/artifact-cards/storyConfig.tsx similarity index 100% rename from ui/storybook/stories/artifact-cards/storyConfig.tsx rename to ui/storybook/support/artifact-cards/storyConfig.tsx diff --git a/ui/storybook/stories/artifact-upload/UploadPreview.tsx b/ui/storybook/support/artifact-upload/UploadPreview.tsx similarity index 100% rename from ui/storybook/stories/artifact-upload/UploadPreview.tsx rename to ui/storybook/support/artifact-upload/UploadPreview.tsx diff --git a/ui/storybook/stories/artifact-upload/fixtures.ts b/ui/storybook/support/artifact-upload/fixtures.ts similarity index 100% rename from ui/storybook/stories/artifact-upload/fixtures.ts rename to ui/storybook/support/artifact-upload/fixtures.ts diff --git a/ui/storybook/stories/credential-access/CredentialTaskPage.tsx b/ui/storybook/support/credential-access/CredentialTaskPage.tsx similarity index 100% rename from ui/storybook/stories/credential-access/CredentialTaskPage.tsx rename to ui/storybook/support/credential-access/CredentialTaskPage.tsx diff --git a/ui/storybook/stories/decision-models/fixtures.ts b/ui/storybook/support/decision-models/fixtures.ts similarity index 100% rename from ui/storybook/stories/decision-models/fixtures.ts rename to ui/storybook/support/decision-models/fixtures.ts diff --git a/ui/storybook/stories/external-agent-invite/ExternalAgentInvitePreview.tsx b/ui/storybook/support/external-agent-invite/ExternalAgentInvitePreview.tsx similarity index 100% rename from ui/storybook/stories/external-agent-invite/ExternalAgentInvitePreview.tsx rename to ui/storybook/support/external-agent-invite/ExternalAgentInvitePreview.tsx diff --git a/ui/storybook/stories/external-agent-invite/fixtures.ts b/ui/storybook/support/external-agent-invite/fixtures.ts similarity index 100% rename from ui/storybook/stories/external-agent-invite/fixtures.ts rename to ui/storybook/support/external-agent-invite/fixtures.ts diff --git a/ui/storybook/stories/github-bot-management/fixture-api.test.tsx b/ui/storybook/support/github-bot-management/fixture-api.test.tsx similarity index 100% rename from ui/storybook/stories/github-bot-management/fixture-api.test.tsx rename to ui/storybook/support/github-bot-management/fixture-api.test.tsx diff --git a/ui/storybook/stories/github-bot-management/fixture-api.tsx b/ui/storybook/support/github-bot-management/fixture-api.tsx similarity index 100% rename from ui/storybook/stories/github-bot-management/fixture-api.tsx rename to ui/storybook/support/github-bot-management/fixture-api.tsx diff --git a/ui/storybook/stories/github-bot-management/fixtures.ts b/ui/storybook/support/github-bot-management/fixtures.ts similarity index 100% rename from ui/storybook/stories/github-bot-management/fixtures.ts rename to ui/storybook/support/github-bot-management/fixtures.ts diff --git a/ui/storybook/stories/html-artifacts/fixtures.ts b/ui/storybook/support/html-artifacts/fixtures.ts similarity index 100% rename from ui/storybook/stories/html-artifacts/fixtures.ts rename to ui/storybook/support/html-artifacts/fixtures.ts diff --git a/ui/storybook/stories/html-artifacts/report.html b/ui/storybook/support/html-artifacts/report.html similarity index 100% rename from ui/storybook/stories/html-artifacts/report.html rename to ui/storybook/support/html-artifacts/report.html diff --git a/ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx b/ui/storybook/support/primary-agent/PrimaryAgentStory.tsx similarity index 100% rename from ui/storybook/stories/primary-agent/PrimaryAgentStory.tsx rename to ui/storybook/support/primary-agent/PrimaryAgentStory.tsx diff --git a/ui/storybook/stories/private-tasks/PrivacyStory.tsx b/ui/storybook/support/private-tasks/PrivacyStory.tsx similarity index 100% rename from ui/storybook/stories/private-tasks/PrivacyStory.tsx rename to ui/storybook/support/private-tasks/PrivacyStory.tsx diff --git a/ui/storybook/stories/public-mcp-presenter.tsx b/ui/storybook/support/public-mcp-presenter.tsx similarity index 100% rename from ui/storybook/stories/public-mcp-presenter.tsx rename to ui/storybook/support/public-mcp-presenter.tsx diff --git a/ui/storybook/stories/repository-skill-packages/README.md b/ui/storybook/support/repository-skill-packages/README.md similarity index 68% rename from ui/storybook/stories/repository-skill-packages/README.md rename to ui/storybook/support/repository-skill-packages/README.md index 738b47bd2c..ffe1e47b79 100644 --- a/ui/storybook/stories/repository-skill-packages/README.md +++ b/ui/storybook/support/repository-skill-packages/README.md @@ -1,6 +1,6 @@ # Repository imports -Run the UI Storybook, then open **Skills → Repository packages**. These stories use the production pages and components with scoped API fixtures; they do not download GitHub repositories or invoke agents. +Run the UI Storybook, then open **Agents and reusable capabilities → Skills and Skill Studio → Skills → Repository packages**. These stories use the production pages and components with scoped API fixtures; they do not download GitHub repositories or invoke agents. - **01–03**: normal repository import and shared-file inspection. Every skill is visible and selected; package files start collapsed. - **04–05**: omitted files, collapsed and expanded warnings; import stays available. diff --git a/ui/storybook/stories/thread-human-identity/fixtures.ts b/ui/storybook/support/thread-human-identity/fixtures.ts similarity index 100% rename from ui/storybook/stories/thread-human-identity/fixtures.ts rename to ui/storybook/support/thread-human-identity/fixtures.ts diff --git a/ui/storybook/stories/workspace-branch-recovery/fixtures.ts b/ui/storybook/support/workspace-branch-recovery/fixtures.ts similarity index 100% rename from ui/storybook/stories/workspace-branch-recovery/fixtures.ts rename to ui/storybook/support/workspace-branch-recovery/fixtures.ts